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ツールの比較
| ツール名 | 特徴 | 向いているケース |
|---|---|---|
| GitHub Actions | GitHubと完全統合。設定がシンプル | GitHubを使っているプロジェクト全般 |
| Jenkins | 老舗・高機能・自由度が高い | 大規模企業・複雑なパイプライン |
| CircleCI | クラウド型で高速。設定が比較的簡単 | スタートアップ・中規模チーム |
| GitLab CI/CD | GitLabに内蔵。一体型で管理しやすい | GitLabを使っているチーム |
| AWS CodePipeline | AWSと親和性が高い | 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が代表例
- ビルド — ソースコードを実行可能なプログラムに変換する処理