開発プロセス

CI/CDパイプライン しーあいしーでぃーぱいぷらいん

継続的インテグレーション継続的デリバリー自動化DevOpsGitHub Actionsデプロイ自動化
CI/CDパイプラインって何?

簡単に言うとこんな感じ!

「コードを書いたら自動でテストして、問題なければ自動でサーバーに届ける」流れを仕組み化したのがCI/CDパイプラインだよ。人手でやっていたビルド・テスト・デプロイを自動の組み立てラインにしたイメージ!ミスが減って、リリースが速くなるんだ。


CI/CDパイプラインとは

CI/CDパイプラインとは、ソフトウェアの変更が開発者のコミットから本番環境へ届くまでの一連のプロセスを自動化した仕組みです。「CI(Continuous Integration:継続的インテグレーション)」と「CD(Continuous Delivery/Deployment:継続的デリバリー/デプロイ)」の2つのフェーズから構成されます。

CI(継続的インテグレーション)は、開発者がコードをプッシュするたびに自動でビルド・テストを実行し、問題を即座に検出します。複数人の変更を頻繁に統合することで、「後で大量のバグがまとめて発覚する」リスクを防ぎます。

CD(継続的デリバリー)は、CIを通過したコードをステージング環境・本番環境へ自動でデプロイします。CDには「Continuous Delivery(承認ゲートで人間が最終GOを出す)」と「Continuous Deployment(承認なしで自動的に本番へ)」の2種類があります。どちらも「デプロイ手順を自動化・標準化することで人為的ミスをなくす」ことが目的です。


パイプラインの典型的なステージ

ステージ内容担当ツール例
ソースGitへのプッシュ・PRマージをトリガーに起動GitHub・GitLab
ビルドソースコードをコンパイル・コンテナイメージをビルドDocker、Maven、Gradle
テストユニットテスト統合テスト・セキュリティスキャンJest・Pytest・Trivy
成果物の保存コンテナイメージをレジストリにプッシュECR・Docker Hub
ステージングデプロイステージング環境へ自動デプロイし動作確認KubernetesHelm
承認ゲート本番デプロイ前に人間のレビュー・承認(任意)GitHub Environments
本番デプロイ本番環境へデプロイ。ブルーグリーン・カナリア等の戦略を使用Argo CD・Flux CD

歴史と背景

  • 2001年:Martin Fowlerがによる「Continuous Integration」論文がCI概念の礎に
  • 2010年:Jez HumbleとDavid Farleyの書籍「Continuous Delivery」でCDが体系化
  • 2011年:Jenkins 1.0がOSS公開。CI/CDのデファクトツールとして急速に普及
  • 2014年:GitLab CI・Travis CIが登場。設定ファイルベースのパイプライン定義が一般化
  • 2018年GitHub Actionsがベータ公開。GitHubと統合されたCI/CDが開発者に普及
  • 2022年〜GitOpsの台頭によりCI(ビルド)とCD(デプロイ)を分離するアーキテクチャが標準化

CI/CDパイプラインのフロー図

CI/CDパイプラインの全体フロー コード プッシュ ビルド コンパイル テスト Unit/統合 成果物 レジストリ保存 Staging デプロイ 本番 デプロイ CI(継続的インテグレーション) CD(継続的デリバリー/デプロイ) テスト失敗時:即座に開発者へ通知・本番には届かない テスト失敗 問題はCI段階でブロック。本番に欠陥コードが届かない仕組み

関連する規格・RFC

規格・RFC番号内容
DORA MetricsCI/CDの成熟度を測る4つの指標(デプロイ頻度・変更リードタイム・障害率・復旧時間)
OpenTelemetryCIパイプラインのテレメトリを標準化するための仕様

関連用語

  • GitOps — GitをCD(デプロイ)の真実の源とする運用手法。CI/CDの発展形
  • Docker — CIパイプラインでビルドするコンテナイメージの実行基盤
  • Kubernetes — CDパイプラインのデプロイターゲット
  • ブルーグリーンデプロイメント — CDパイプラインで採用されるゼロダウンタイムデプロイ戦略
  • カナリアリリース — 段階的にトラフィックを切り替えるデプロイ戦略
  • IaC(Infrastructure as Code) — インフラ変更もCI/CDパイプラインで自動適用する
  • SRE — CI/CDのメトリクスをDORA指標で計測し信頼性向上を担うエンジニアリング手法