新刊ピックアップ

千里の道も一歩から 継続的インテグレーションから始める継続的デリバリーへの道~Jenkinsを添えて

この記事を読むのに必要な時間:およそ 2.5 分

継続的インテグレーションとは?

継続的インテグレーションを知っていますか? 英語ではContinuous Integrationといい,よくCIと略されます。

継続的インテグレーションとは,ソフトウェアやサービス,システムが動作するか,こまめに確認しながら開発を進める開発手法です。継続的インテグレーションではこの動作確認のために,コンパイルやテスト,インスペクション,デプロイやソフトウェアのパッケージングなどの一連の流れを,できるだけ短いサイクルでインテグレーション(結合)します。

短いサイクルでインテグレーションするためには,コンパイルやテストなどの自動化が欠かせません。近年はJenkinsというオープンソースの使いやすいソフトウェアの登場とともに一気に世界中で普及しています。

継続的インテグレーションのメリット

継続的インテグレーションに取り組むと,次のメリットがあります。

1. 手戻りの削減,品質の維持

今日の日本におけるソフトウェア開発で一般的なウォーターフォール開発では,先にコーディングをして,モジュールごとにテストをし,最後にソフトウェアをインテグレーションします。この場合,たくさんの修正や変更が入り混じってしまい,もしバグが出てしまった時の解析はたくさんの変更を紐解かなければならず,困難を極めます図1⁠。

継続的インテグレーションでは,コミットごとなどの可能な限り小さな変更でソフトウェアにバグが入っていないかを確認できるため,手戻りが減り,常に一定の品質を維持し続けられます。

図1 普通の開発と継続的インテグレーションの違い

図1 普通の開発と継続的インテグレーションの違い

2. いつでも,だれでも,実行可能なソフトウェアが作成できる

このメリットには2つの側面があります。

1つ目は,ビルド端末や特定の開発端末など,特定の端末でしかソフトウェアの作成ができないような暗黙知をなくし,属人性を排除できることです。リリースまでの一連の流れをすべて自動化できれば形式知化でき,組織を強化できます。

2つ目は,開発者だけではなく,デザイナや場合によってはエンドユーザまで,だれでも期待したものができあがっているか,確認しながら開発ができることです。これにより,期待したものと違うものができてしまうリスクを軽減できます。

3. 作業コストを削減できる

継続的インテグレーションでは,コンパイルやテスト,デプロイなどの一連の作業を自動化します。これらの一連の流れを手動で繰り返すのは現実的ではありません。このような単純作業を自動化すると,余った労力は人間にしかできない設計や実装などの知的な作業に集中できるようになります。

4. 機械による作業の正確さ/暗黙知を形式知に

人間の手作業を繰り返すと,どんなに注意していてもミスが起きてしまいます。しかし自動化をすることで作業を正確にこなすことができます。

自動化をするためには,属人的な暗黙知をスクリプトなどの形式知にする必要があり,暗黙知を形式知に変えられます。

5. 品質や生産性を継続的に分析・カイゼンし続けられる

品質や生産性を分析するためには,データを計測する必要があります。データを計測して,分析し,そしてカイゼンをします。つまり,計測できないものはカイゼンできません。

継続的インテグレーションでインテグレーションするたびに,その結果を自動的に計測して分析し,開発をカイゼンし続けましょう。

著者プロフィール

佐藤聖規(さとうまさのり)

クラウドやアーキテクチャ,DevOpsなどの コンサルティングに従事。インフラ,Jenkinsやその周辺ツールが得意。著書は多数,織田翔名義で『15時間でわかるGit集中講座』,『Java逆引きレシピ』。

Twitter:@lino_s