継続的インテグレーション

継続的インテグレーション(けいぞくてきインテグレーション、: continuous integrationCI)とは、すべての開発者の作業コピーを定期的に共有されたメインラインにマージすることである。1日複数回行われるのが一般的である[1]グラディ・ブーチ1991年のメソッド[2]でCIという用語を最初に提案したが、彼は1日に数回の統合を提唱していなかった。エクストリームプログラミング(XP)ではCIの概念を採用し、1日に1回以上、おそらく1日に何十回も統合することを提唱した[3]

理論的根拠

開発者は変更に着手するとき、現在のコードベースのコピーを取って作業する。他の開発者が変更したコードをソースコードリポジトリに提出すると、このコピーは徐々にリポジトリのコードを反映しなくなる。既存のコードベースが変更されるだけでなく、新しいコードを追加したり、新しいライブラリやその他のリソースを追加したりすることで、依存関係や競合が発生する可能性がある。

メインラインにマージせずにブランチでの開発が長く続けば続けるほど、開発者ブランチが最終的にマージされたときに複数の統合の競合[4]や失敗が発生するリスクが高くなる。開発者がリポジトリにコードをコミットするとき、まず、コピーを取ってからのリポジトリの変更を反映させるためにコードを更新しなければならない。リポジトリに含まれる変更点が多ければ多いほど、開発者は自分の変更点をコミットする前に、より多くの作業をしなければならない。

最終的には、リポジトリが開発者のベースラインとあまりにも異なるものになってしまい、「マージ地獄」や「統合地獄」と呼ばれるものに突入してしまうことがある[5]。その場合、統合にかかる時間は、元々の変更点を作るのにかかった時間を超えてしまう[6]

ワークフロー

ローカルでテストを実行する

CIは、テスト駆動開発の実践を通して書かれた自動化されたユニットテストと組み合わせて使用することを意図している。これは、メインラインにコミットする前に、開発者のローカル環境ですべてのユニットテストを実行し、通過させることによって行われる。これにより、ある開発者の進行中の作業が他の開発者のコピーを壊してしまうことを防ぐことができる。必要に応じて、フィーチャートグルなどを使用してコミット前に部分的に完成した機能を無効にすることができる。

CIでコードをコンパイルする

ビルドサーバは定期的に、あるいはコミット後にコードをコンパイルし、その結果を開発者に報告する。ビルドサーバの使用はXPコミュニティの外で導入されており、多くの組織がXPのすべてを採用することなくCIを採用している。

CIでテストを実行する

自動化されたユニットテストに加えて、CIを使用している組織は、一般的にビルドサーバーを使用して、品質管理を一般的に適用する継続的なプロセスを実装している。ユニットテストや統合テストの実行に加えて、このようなプロセスでは、追加の静的分析の実行、パフォーマンスの測定とプロファイル、ソースコードからのドキュメントの抽出とフォーマット、手動のQAプロセスの促進などが行われる。オープンソース向けの人気の高いTravis CIサービスでは、CIジョブの58.64%しかテストを実行していない[7]

この品質管理の継続的な適用は、すべての開発が完了した後に品質管理を適用するという従来の慣行に代わって、ソフトウェアの品質を向上させ、納品までの時間を短縮することを目的としている。これは、統合をより簡単にするために、統合をより頻繁に行うという、QAプロセスにのみ適用されている元々の考え方と非常によく似ている。

CIからアーティファクトをデプロイする

現在、CIはいわゆるCI/CDパイプラインの中で継続的デリバリーと絡み合っていることが多い。CIはメインラインでチェックインしたソフトウェアを常にユーザーにデプロイできる状態にし、CDはデプロイ作業を完全に自動化する。

コストとメリット

継続的インテグレーションは、次のようなメリットを生み出すことを目的としている。

  • インテグレーションバグは早期に発見され、小さな変更セットのため追跡が容易になる。これにより、プロジェクトのライフサイクルにわたって時間とコストの両方を節約することができる。
  • リリース日の土壇場の混乱を避けることができる。
  • 単体テストが失敗した場合やバグが発生した場合、開発者がデバッグせずにコードベースをバグのない状態に戻す必要がある場合、少数の変更しか失われない(統合は頻繁に発生するため)。
  • テスト、デモ、リリースの目的で「現在の」ビルドを常に利用可能にする。
  • 頻繁にコードをチェックインすることで、開発者はモジュール化された複雑さの少ないコードを作成するようになる。


継続的な自動テストには、次のようなメリットがある。

  • 頻繁に行われる自動テストの規律を強化
  • ローカルな変更によるシステム全体への影響を即座にフィードバック
  • 自動テストとCIから生成されたソフトウェアメトリクスコードカバレッジ、コードの複雑さ、機能の完全性のメトリクスなど)は、機能的で高品質なコードの開発に開発者を集中させ、チームの勢いを高めるのに役立つ。

継続的インテグレーション用のソフト

  • Apache Continuum
  • Apache Gump
  • AutomatedQA
  • Atlassian Bamboo
  • Bitrise
  • Buildbot
  • BuildHive

脚注

関連項目

外部リンク

🔥 Top keywords: メインページ宮崎麗果特別:検索豊後水道松本忠久土居志央梨若葉竜也能登半島地震 (2024年)田中雄士長谷部誠井上道義The GazettE若林志穂服部百音黒木啓司REITA虎に翼平井理央出口夏希サーブ (盲導犬)三鷹事件セウォル号沈没事故白眞勲三淵嘉子高橋克也 (オウム真理教)ME:Iルーシー・ブラックマン事件佐藤ありさ杉咲花蜜谷浩弥水野真紀亀井亜紀子 (政治家)熊本地震 (2016年)水原一平井川意高中川安奈 (アナウンサー)内藤剛志いなば食品YOSHIKI