最終更新:

【仕組み解説】CI/CDはどうやってコードを自動でデプロイしているのか — パイプラインの裏側を図解


CI/CD パイプラインの流れ CI(継続的インテグレーション) CD(継続的デリバリー/デプロイ) Push コード送信 Build ビルド Test テスト実行 Stage 検証環境 Deploy 本番反映 失敗時はフィードバック デプロイ戦略 Blue Green ブルーグリーン 5% 95% カナリアリリース 主要ツール GitHub Actions GitLab CI Jenkins CircleCI
CI/CDパイプラインの流れとデプロイ戦略
ひよこ ひよこ

CI/CDってよく聞くけど、コードを書いた後に何が起きてるの?

ペンギン先生 ペンギン先生

簡単に言うと、コードをGitにpushした瞬間から「ビルド→テスト→デプロイ」が全自動で走る仕組みのことだよ。手作業でサーバーにファイルをアップロードしていた時代とは大違いだね。

ひよこ ひよこ

CIとCDって別々のものなの?

ペンギン先生 ペンギン先生

そうだよ。CIは「継続的インテグレーション」で、開発者がコードを頻繁にメインブランチへ統合して、その都度ビルドとテストを自動実行する仕組みのこと。CDには2つの意味があって、「継続的デリバリー」はステージング環境まで自動で届けて本番デプロイは手動承認、「継続的デプロイ」は本番環境まで全自動で出すという違いがあるんだ。

ひよこ ひよこ

パイプラインって具体的にはどんな流れになってるの?

ペンギン先生 ペンギン先生

典型的な流れはこうだよ。まず開発者がコードをpushすると、パイプラインが起動する。最初にソースコードのビルドが走って、次に単体テストや結合テストが実行される。テストが通ったらステージング環境デプロイされて、最終的に本番環境リリースされる。どこかのステップで失敗したら、そこでパイプラインが止まって開発者に通知が飛ぶんだ。

ひよこ ひよこ

どんなツールを使うの?

ペンギン先生 ペンギン先生

代表的なのはGitHub Actionsだね。GitHubリポジトリに設定ファイルを置くだけでパイプラインが動く。他にもGitLab CIはGitLabに組み込みで使えるし、Jenkinsオープンソースで自由度が高い老舗ツール。CircleCIクラウド型で設定がシンプルなのが特徴だよ。最近はGitHub Actionsのシェアがかなり伸びているね。

ひよこ ひよこ

テストの自動化ってどこまでやるものなの?

ペンギン先生 ペンギン先生

基本は3段階あるよ。まずユニットテストで関数やクラス単位の動作を確認する。次にインテグレーションテストでモジュール間の連携を検証する。さらにE2Eテストブラウザを使った画面操作まで自動で確認するんだ。全部パイプラインに組み込めるけど、E2Eテストは時間がかかるから夜間だけ実行するチームも多いよ。

ひよこ ひよこ

デプロイのときに障害が起きたらどうするの?

ペンギン先生 ペンギン先生

そこで活躍するのがブルーグリーンデプロイカナリアリリースだよ。ブルーグリーンデプロイは、本番環境を2つ用意しておいて、新バージョンを片方にデプロイしてから一気に切り替える方法。問題があればすぐ元に戻せる。カナリアリリースは、まず全体の5%とか10%のユーザーだけに新バージョンを配信して、問題がなければ徐々に割合を増やしていく方法なんだ。

ひよこ ひよこ

インフラの設定もCI/CDに含められるって本当?

ペンギン先生 ペンギン先生

Infrastructure as Code、略してIaCと組み合わせるのが今の主流だよ。TerraformAWS CloudFormationでインフラ構成をコードとして管理して、それもパイプラインに乗せる。サーバーの台数変更やネットワーク設定の変更もpushするだけで自動反映されるんだ。アプリのコードとインフラのコードを同じパイプラインで管理できるのが大きなメリットだね。

ひよこ ひよこ

CI/CDを導入するとき、最初に気をつけることってある?

ペンギン先生 ペンギン先生

いきなり全部自動化しようとしないことが大事だよ。まずはCIだけ、つまりpushしたらテストが自動で走る状態を作るところから始めるのがおすすめ。テストが安定して信頼できるようになったら、ステージングへの自動デプロイを追加して、最終的に本番デプロイまで自動化していく。あと、パイプラインの実行時間が長くなりすぎると開発効率が落ちるから、キャッシュの活用やテストの並列実行で高速化するのも重要なポイントだね。