変更を頻繁に統合し自動でビルド・テストを行う開発手法。
CI(継続的インテグレーション)とは、開発者の変更を頻繁に統合し、そのたびに自動でビルド・テストを行う開発手法です。インテグレーション=統合、つまり「みんなのコードを1つに合流させること」を指します。
身近な例で考えると、共同制作の文集を毎日少しずつ合本するようなものです。原稿を全員で締切間際にまとめて持ち寄ると、字数オーバーや内容のかぶりが大量に見つかって大混乱します。毎日少しずつ合本して校正すれば、問題は小さいうちに片づきます。
上のツールで▶ボタンを押すと、コードのコミットをきっかけに、ビルド・テストが自動で実行され結果が通知されるまでの流れを確認できます。
CIは「パイプライン」と呼ぶ自動の流れ作業で動きます。パイプライン=決まった順番で処理をつないだ自動の組み立てラインのことです。1つの段階が終わると、次の段階へ自動で受け渡されます。
よくあるパイプラインの段階は次のとおりです。
・コミット/プッシュ:開発者が変更を共有リポジトリへ送る(パイプラインの起点)
・変更検知(トリガー):CIサーバが新しい変更を検知し、自動で起動する
・ビルド:ソースコードを実際に動く形に組み立てる
・自動テスト:用意したテストを全部実行し、壊れていないか確認する
・結果通知:成功/失敗を開発者へ自動で知らせる
工場のベルトコンベアにたとえると分かりやすいです。部品(コード)を載せると、組み立て(ビルド)→検査(テスト)→合否表示(通知)が自動で流れていくイメージです。途中で不合格になれば、その段階でラインが止まり、原因をすぐ調べられます。上のツールで各段階が左から順に点灯する様子を確認しましょう。
CIには、開発を安定させるいくつかの利点があります。共通するのは「問題を小さいうちに見つける」という考え方です。
・バグの早期発見:変更のたびに自動テストするので、不具合が小さいうちに見つかる
・原因の特定が簡単:直前の小さな変更が疑わしいので、どこが悪いか分かりやすい
・統合の衝突を減らせる:頻繁に合流するので、コードのぶつかり合い(コンフリクト)が小さくて済む
・手間の削減:ビルドやテストを人が手で行わずにすみ、ミスも減る
逆に統合を後回しにすると、最後にすべてのバグが一気に噴き出して大変なことになります。こまめな統合は、たまった洗い物を毎食後に片づけるのに似ています。ためないからこそ、いつも軽い力で片づくのです。上のツールの結果通知が、まさに早期発見の働きにあたります。