CI/CD・デプロイ

CI(継続的インテグレーション) しーあい(けいぞくてきいんてぐれーしょん)

継続的インテグレーション自動テストビルドCI/CDDevOpsパイプライン
CIについて教えて

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

CIは「コードを書いたら、すぐ自動でテスト&チェックしてくれる仕組み」だよ!料理で言えば、材料を鍋に入れるたびに「ちゃんと火が通ってるか・変な味がしないか」を自動で確かめてくれるお助けロボットみたいなイメージ!バグを早期発見できるから、後でまとめてチェックするより断然ラクなんだ。


CIとは

CI(Continuous Integration:継続的インテグレーション) とは、開発者がコードの変更をリポジトリ(コードの保管場所)に反映するたびに、自動でビルド(プログラムの組み立て)やテストを実行する開発手法・仕組みのことです。「インテグレーション(統合)」とは、複数の開発者が書いたコードを1つにまとめる作業を指します。

以前の開発現場では、数週間〜数ヶ月かけてそれぞれが書いたコードを最後にまとめて統合するスタイルが主流でした。しかしこれでは、統合時に大量のバグや矛盾が一気に噴出し、修正に膨大な時間がかかる「統合地獄」が頻発していました。CIはこの問題を解決するために生まれた考え方で、「小さく・こまめに・自動で統合する」 ことをルールとしています。

現代のシステム開発では、CIはほぼ標準的なプロセスとして組み込まれており、GitHub Actions・Jenkins・CircleCIなどのツール によって自動化されています。後述のCD(継続的デリバリー/デプロイ)と組み合わせて「CI/CD」と呼ばれることが多く、開発スピードと品質の両立を支える基盤となっています。


CIの仕組みとパイプライン

CIでは、コードの変更をトリガーに一連の処理が自動で流れます。この処理の流れを 「パイプライン」 と呼びます。

ステップ内容たとえると…
① コードをプッシュ開発者が変更をリポジトリに送信原稿を提出する
② ビルドソースコードを実行可能な形に組み立て原稿を印刷する
③ 自動テストユニットテスト・結合テストを自動実行校正・品質チェックをする
④ 結果通知成功/失敗をSlackやメールで開発者に通知「OKです」「NG箇所あり」を連絡する
⑤ (失敗時)修正開発者がエラーを修正して再プッシュ赤ペン修正して再提出

CIで実行される主なテストの種類

テスト種別内容
ユニットテスト関数クラス単体の動作確認
結合テスト複数のモジュールを組み合わせたときの動作確認
静的解析(Lint)コードの書き方・スタイルの自動チェック
セキュリティスキャン脆弱性が含まれていないかの確認
カバレッジ計測テストがどれだけのコードを網羅しているかの確認

覚え方

「CI = コードを入れたら、すぐイチェック」 C(コードを)I(いれたらイチェック)!

「こまめに統合・こまめにテスト」がCIの本質です。


歴史と背景

  • 1990年代前半:ウォーターフォール型開発が主流。コードの統合は開発の最終フェーズに一度だけ行われ、「統合地獄(Integration Hell)」が常態化
  • 1991年:Grady Booch(グレイディ・ブーチ)が「Continuous Integration」という言葉を初めて提唱。当初は概念的なものにとどまる
  • 1999年:Kent Beck(ケント・ベック)が『Extreme Programming Explained(XP)』の中でCIを開発プラクティスの一つとして体系化
  • 2001年:Martin Fowler(マーティン・ファウラー)がCIの概念と実践方法を詳細に解説する論文を発表。CIが広く認知されるきっかけに
  • 2004〜2005年頃:CruiseControlやHudsonなどのCIサーバーツールが登場し、現場への普及が加速
  • 2011年:HudsonからフォークされたJenkinsが登場。オープンソースで使いやすく、CIツールの事実上の標準に
  • 2010年代後半:Travis CI・CircleCI・GitLab CI/CDなどのクラウド型CIサービスが台頭
  • 2019年:GitHub ActionsがGAリリース。GitHubと統合されたCIが誰でも手軽に使えるようになり、さらに普及が拡大

CIとCD・DevOpsの関係

CIは単独で語られることもありますが、実際の現場では CD(Continuous Delivery / Continuous Deployment:継続的デリバリー/デプロイ) とセットで「CI/CD」として使われます。

CI/CD パイプライン全体像 コード変更 開発者がプッシュ ビルド 自動コンパイル 自動テスト ユニット・結合テスト ← ここまでが CI(継続的インテグレーション)の範囲 → 成果物の保存 アーティファクト生成 本番デプロイ サーバーへ自動反映 ← ここまでが CD(継続的デリバリー/デプロイ)の範囲 →

主要CIツールの比較

ツール名特徴向いているケース
GitHub ActionsGitHubと完全統合。設定がシンプルGitHubを使っているプロジェクト全般
Jenkins老舗・高機能・自由度が高い大規模企業・複雑なパイプライン
CircleCIクラウド型で高速。設定が比較的簡単スタートアップ・中規模チーム
GitLab CI/CDGitLabに内蔵。一体型で管理しやすいGitLabを使っているチーム
AWS CodePipelineAWSと親和性が高いAWSでシステムを構築している場合

CIがない場合とある場合の違い

【CIなし】
  開発 → 開発 → 開発 → ... → まとめてテスト → バグ大量発生 → 修正地獄 😱

【CIあり】
  開発 → 即テスト → 開発 → 即テスト → 開発 → 即テスト → 安定リリース 🎉

関連する規格・RFC

※ CIは特定のRFC・ISO・IEEE規格として標準化された技術ではなく、開発手法・プラクティスとして普及したものです。このため、対応する正式規格のセクションは省略します。


関連用語

  • CD(継続的デリバリー/デプロイ) — CIの次のステップ。テスト済みコードを自動で本番環境へ届ける仕組み
  • CI/CD — CIとCDを組み合わせた開発・デプロイの自動化パイプライン全体の総称
  • DevOps — 開発(Dev)と運用(Ops)を連携させてシステム改善を高速化する文化・手法
  • GitHub Actions — GitHubに統合されたCI/CDの自動化ツール
  • Jenkins — 老舗のオープンソースCIサーバー。高機能で大規模環境でも使われる
  • ユニットテスト — 関数・クラスなどコードの最小単位を検証する自動テスト
  • リポジトリ — コードを管理・保存する場所。GitHubやGitLabが代表例
  • ビルド — ソースコードを実行可能なプログラムに変換する処理