CI/CDとは

CI/CDとは、ソフトウェアの開発からテスト、リリースまでの工程を継続的に行い、その一部を自動化するための手法です。

CI/CDの「CI」はContinuous Integration(継続的インテグレーション)、「CD」はContinuous Delivery(継続的デリバリー)またはContinuous Deployment(継続的デプロイメント)を意味します。

ソフトウェア開発では、開発者がソースコードを変更した後に、ビルドやテスト、リリースなどさまざまな工程が発生します。CI/CDでは、これらの工程を連携させて自動化することで、コードの変更を継続的にテストし、ソフトウェアを迅速に提供できる仕組みを構築します。

CI/CDとは、「Continuous Integration and Continuous Delivery/Deployment」の略であり、日本語では継続的インティグレーション/継続的デリバリー (デプロイメント) と呼ばれています。CI/CD は、アプリケーション開発の各ステージに自動化を導入し、顧客にアプリケーションを迅速かつ頻繁に提供できるようにする手法です。

https://www.redhat.com/ja/topics/devops/what-is-ci-cd

CI(継続的インテグレーション)とは

CI(Continuous Integration:継続的インテグレーション)とは、開発者によるコードの変更を共有リポジトリへ頻繁に統合し、ビルドやテストなどを自動的に実行する手法です。

変更するたびにテストを実行することで、新しく追加したコードと既存のコードとの競合や不具合を早い段階で発見しやすくなります。

CD(継続的デリバリー/継続的デプロイメント)とは

CI/CDにおけるCDには、「Continuous Delivery(継続的デリバリー)」と「Continuous Deployment(継続的デプロイメント)」という2つの意味があります。

継続的デリバリーでは、テストなどを通過したソフトウェアを本番環境へリリースできる状態まで自動的に準備します。一方、継続的デプロイメントではさらに進んで、本番環境へのデプロイまで自動化します。

「Continuous Delivery(継続的デリバリー)」と「Continuous Deployment(継続的デプロイメント)」の違い

CI/CDの「CD」には、Continuous Delivery(継続的デリバリー)とContinuous Deployment(継続的デプロイメント)という2つの意味があります。

どちらもCIによってビルドやテストを継続的に行った後、ソフトウェアをユーザーへ提供するためのプロセスを扱いますが、本番環境へのデプロイを自動化するかどうかに大きな違いがあります。

Continuous Delivery(継続的デリバリー)

Continuous Delivery(継続的デリバリー)は、コードの変更に対してビルドやテストを実行し、ソフトウェアを本番環境へリリースできる状態まで継続的に準備する手法です。

本番環境へリリースする準備までは自動化しますが、実際に本番環境へデプロイする際には、人による承認などの手順を設けることができます。

そのため、リリースのタイミングを人が判断しながら、それ以前の工程を自動化できることが特徴です。

Continuous Deployment(継続的デプロイメント)

Continuous Deployment(継続的デプロイメント)は、継続的デリバリーをさらに進め、本番環境へのデプロイまで自動化する手法です。

コードの変更がCI/CDパイプラインで定められたテストなどの条件を満たした場合、人による手動承認を必要とせず、本番環境へ自動的にデプロイされます。

これにより、小さなコード変更を短いサイクルで継続的にユーザーへ提供できるようになります。

DeliveryとDeploymentの違い

両者の大きな違いは、本番環境へのデプロイを自動化する範囲です。

継続的デリバリーでは「いつでも本番環境へリリースできる状態」まで継続的に準備し、最終的なリリースには人による判断を残すことができます。

一方、継続的デプロイメントでは、その先の本番環境へのデプロイまで自動化します。

つまり、Continuous Delivery → 本番リリース可能な状態まで自動化、Continuous Deployment → 本番環境へのデプロイまで自動化と整理すると違いを理解しやすくなります。

CI/CDとDevOps

CI/CDは、DevOpsを実践するための代表的な手法の一つです。

DevOpsでは、開発(Development)と運用(Operations)が連携し、ソフトウェアの開発・テスト・リリース・運用までのプロセスを継続的に改善していくことを重視します。CI/CDを導入することで、その中でもコードの統合、ビルド、テスト、デリバリー、デプロイといった工程を継続的に実行・自動化できます。

例えば、開発者がソースコードを変更すると、自動的にビルドやテストを実行し、問題がなければリリース可能な状態まで処理を進める、といった開発環境を構築できます。

ただし、CI/CDとDevOpsは同じ意味ではありません。DevOpsは開発と運用の連携、組織文化、自動化、継続的な改善などを含む幅広い考え方です。一方、CI/CDは、そのDevOpsを技術面から支える重要なプラクティスの一つとして位置付けられます。