Close

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

テストより速くは進めないので、より迅速なフィードバックでチームのアジリティを構築します。

継続的なインテグレーション (CI) は、単一のソフトウェア プロジェクトへの複数の貢献者からのコード変更を自動で統合するプラクティスです。これは主要な DevOps ベスト プラクティスであり、開発者はビルドとテストを実行する中央リポジトリにコード変更を頻繁にマージできます。自動ツールは、統合前に新しいコードの正確性をアサートするために使用されます。

ソース コード バージョン管理システムは、CI プロセスの核心です。このバージョン管理システムは、自動コード品質テスト、構文スタイル レビュー ツールなどの他のチェックによっても補完されます。

継続的なインテグレーションに関する記事

[続き]

継続的なインテグレーションの重要性

CI の重要性を理解するためには、CI の不在によって発生する問題点を最初に議論することが役立ちます。CI を使用しない場合、開発者は最終製品にコードを提供しているときに、手動で調整して相互にやりとりする必要があります。この調整は、開発チームを超えて運用と組織の残りの部分にまで及んでいます。製品チームは、機能や修正プログラムを順次起動するタイミングと、どのチーム メンバーが担当するかを調整する必要があります。

非 CI 環境の通信オーバーヘッドは、プロジェクトに不必要な事務処理上のコストの原因になる、複雑で絡みつく面倒な同期作業になる可能性があります。これによって開発者は統合に対して敏感で思慮深くなる必要があるため、コード リリースが遅くなって障害の発生率が高くなります。これらのリスクは、エンジニアリング チームとコードベースのサイズが増加するにつれて、指数関数的に増加します。

堅牢な CI パイプラインがなければ、エンジニアリング チームと組織の残り部分が断絶する可能性があります。製品とエンジニアリング間のコミュニケーションが面倒になりかねません。エンジニアリングは、チームの残りメンバーが要件と機能を入力して期待される結果を取り戻すであろう、ブラック ボックスになります。新しい変更を統合する時間が不明なリスクになるため、エンジニアリングは要求に応じて配信時間を推定することが難しくなります。

CI の動作

CI は、エンジニアリング チームの人数と配信出力のスケールアップに役立ちます。前述のシナリオに CI を導入することで、ソフトウェア開発者は並行して単独で機能に取り組めます。これらの機能を最終製品にマージする準備ができたら、単独で迅速に実行できます。現代の高性能ソフトウェア エンジニアリング組織において、CI は価値の高い洗練されたプラクティスです。

CI の使用方法

CI は、一般的にアジャイル ソフトウェア開発ワークフローと併用されます。組織は、製品ロードマップを構成するタスクのリストをまとめます。これらのタスクは、デリバリーするためにソフトウェア エンジニアリング チーム メンバー間に配布されます。CI を使用すると、これらのソフトウェア開発タスクは独立して、割り当てられた開発者間で並行して開発できます。これらのタスクの 1 つが完了すると、開発者はその新しい作業を CI システムに導入してプロジェクトの残りの部分と統合します。

比較: 継続的なインテグレーション、デプロイ、デリバリー

継続的なインテグレーション、デプロイ、デリバリーは、DevOps パイプラインを含む自動化されたソフトウェア リリース パイプラインの 3 つのフェーズです。アイデアからエンド ユーザーへの配信まで、これらの 3 つのフェーズにはソフトウェアが必要です。統合フェーズは、プロセスの最初のステップです。継続的なインテグレーションは、コード変更をプロジェクトのメイン コード リポジトリとマージしようとする複数の開発者のプロセスを対象とします。

継続的なデリバリーは、継続的なインテグレーションの次の拡張です。配信フェーズでは、エンド ユーザーに配信するアーティファクトを一緒にパッケージ化します。このフェーズでは、自動構築ツールを実行してこのアーティファクトを生成します。このビルド フェーズは「緑」のままです。つまり、アーティファクトはいつでもユーザーにデプロイできる状態になっている必要があります。

継続的なデプロイは、パイプラインの最終フェーズです。デプロイ フェーズでは、ソフトウェア アーティファクトを自動で起動してエンド ユーザーに配信します。デプロイ時に、アーティファクトは統合フェーズと配信フェーズを正常に通過しました。これで、アーティファクトを自動でデプロイまたは配信できます。これは、アーティファクトをパブリック サーバーまたはアプリ ストアなどの別の配信メカニズムに自動で移動させる、スクリプトやツールによって行われます。

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

継続的なインテグレーションは、DevOps と一流のソフトウェア チームの重要な側面です。しかし、CI のメリットはエンジニアリング チームに留まらず、組織全体に大きなメリットをもたらします。CI によって、ソフトウェア開発と配信のプロセスに対してより優れた透明性とインサイトが生まれます。これらのメリットによって、組織の残り部分は市場戦略をより適切に計画して実行できるようになります。次は、CI の組織全体のメリットの一部です。

スケーリングを有効にする

CI によって、組織はエンジニアリング チームの規模、コードベースのサイズ、インフラストラクチャを拡張できます。CI はコード統合のお役所な仕事と通信負荷を最小限に抑えることで、DevOps とアジャイル ワークフローの構築を支援します。これによって、各チーム メンバーは新しいコード変更をリリースまで所有できます。CI は、個々の機能の開発間の組織の依存関係を取り除くことで、スケーリングを可能にします。開発者は、孤立したサイロ内の機能に取り込めるようになり、そのコードがコードベースの残りの部分とシームレスに統合されます。これこそ、DevOps のコア プロセスです。

フィードバック ループを改善する

ビジネス上の意思決定に関する迅速なフィードバックは、CI のもう 1 つの強力な副産物です。最適化された CI プラットフォームによって、製品チームはアイデアをテストして製品設計をより迅速に繰り返せます。変更を迅速にプッシュして測定し、成功へ導けます。バグやその他の課題を迅速に対処して修復できます。

コミュニケーションを強化する

CI によってエンジニアリングに関するコミュニケーションと説明責任が全体的に向上して、DevOps チームにおける開発と運用間のコラボレーションが強化されます。CI に関連付けられたプル リクエスト ワークフローを導入することで、開発者は受動的なナレッジ共有を得ます。プル リクエストを使用すると、開発者は他のチーム メンバーからのコードを観察してコメントできます。開発者は CI パイプラインを通じた機能の進捗につれて、機能ブランチで確認して他の開発者と共同作業できるようになりました。CI は、QA リソース費用を援助する場合にも使用できます。信頼性の高い自動化テストのカバー率を備えた効率的な CI パイプラインは、退行を回避して新機能が仕様と一致することを保証します。新しいコードがマージされる前に、新しい退行を防ぐ CI テスト アサーション スイートに合格する必要があります。

CI のメリットは、導入におけるあらゆる課題を遥かに上回ります。つまり、CI の課題に気づくことが重要です。CI の本当の課題は、プロジェクトを CI なしから CI に移行する際に発生します。最新のソフトウェア プロジェクトのほとんどは、初期の発案段階から CI を導入して後の導入に伴う課題を軽減します。

導入とインストール

継続的なインテグレーションの課題は、主にチームによる導入と初期技術インストールに関するものです。現在、チームが CI ソリューションを導入していない場合は、CI ソリューションを 1 つ選び出して始めるには多少の労力が必要な場合があります。したがって、CI パイプラインをインストールする際には、既存のエンジニアリング インフラストラクチャについて考慮する必要があります。

テクノロジーの学習曲線

CI の機能には、チームが引き受けるには習得に時間がかかる可能性のある投資とサポート技術のリストが付属しています。これらのテクノロジーは、バージョン管理システム、ホスティング インフラストラクチャ、連携テクノロジーです。

CI のベスト プラクティス

テスト駆動開発

プロジェクトで自動テスト カバレッジを備えた CI パイプラインが確立されたら、常にテスト カバレッジを開発して改善することがベスト プラクティスです。CI パイプラインに送られる各新機能には、新しいコードが期待どおりに動作していることをアサートする一連の補足テストが必要です。

テスト駆動開発 (TDD) は、実際に機能をコーディングする前に、テスト コードとテスト ケースを書き出すプラクティスです。純粋な TDD は期待されるビジネス行動仕様を構築するために、製品チームに密接に関与でき、その後、テスト ケースに変換できます。純粋な TDD のシナリオでは、開発者と製品チームは要件の仕様やリストについてミーティングで議論します。この要件のリストは、コード アサーションのチェックリストに変換されます。開発者は、これらのアサーションに一致するコードを記述します。

プルリクエストとコード レビュー

最新のソフトウェア開発チームのほとんどは、プル リクエストとコード レビュー ワークフローを実践しています。プル リクエストは、効果的な CI にとって重要なプラクティスです。これは、開発者が新しいコードをメイン コードベースにマージする準備が整ったときに作成されて、新しい変更セットの統合の準備が整ったことを他の開発者に通知します。

プル リクエストは、CI パイプラインを開始して、一連の自動承認ステップを実行する良いタイミングです。通常、手動承認ステップはプル リクエスト時に追加されて、その間、関係者以外のエンジニアが機能のコード レビューを実行します。これによって、新しい観点で新しいコードと機能をレビューできるようになります。関係者以外は編集の提案を行って、プル リクエストを承認/拒否します。

プル リクエストとコード レビューは、エンジニアリング チーム間の受動的なコミュニケーションとナレッジ共有を促進する強力なツールです。これは、知識サイロの形をした技術的負債を防ぐ際に役立ちます。この場合、特定のエンジニアはコード ベースの特定の機能の唯一の関係者です。

パイプライン速度を最適化する

CI パイプラインが中央で頻繁に使用されるプロセスであることを考えると、実行速度を最適化することが重要です。CI ワークフローのわずかな遅延は、機能リリース、チーム サイズ、コードベースのサイズが増加するにつれて、指数関数的に複雑になります。CI パイプラインの速度を測定して必要に応じて最適化することが、ベスト プラクティスです。

CI パイプラインが高速化すると、製品フィードバック ループが高速になります。開発者は変更を迅速にプッシュして新機能のアイデアを試し、ユーザー エクスペリエンスを向上させられます。バグ修正は、検出された時点で迅速にパッチを適用して解決できます。この実行スピードが向上すると、他の競合他社に対する優位性と全体的に高品質のエクスペリエンスが顧客に提供されます。

継続的なインテグレーションを開始

CI の基盤となる依存関係は、バージョン管理システム (VCS) です。CI インストールの目標コード ベースに VCS がない場合、ステップ 1 は VCS のインストールです。最新のコードベースでは、VCS がないということはほぼないでしょう。一般的な VCS には、Git、Mercurial、Subversion があります。

バージョン管理が完了したら、次にバージョン管理ホスティング プラットフォームを見つけます。最新のバージョン管理ホスティング ツールのほとんどに、CI のサポートと機能が組み込まれています。一般的なバージョン管理ホスティング プラットフォームには、BitbucketGithub、Gitlab があります。

プロジェクトでバージョン管理が確立されたら、統合承認ステップを追加する必要があります。実施する最も価値のある統合承認ステップは、自動テストです。自動テストをプロジェクトに追加すると、初期コスト負担が発生する場合があります。テスト フレームワークをインストールして、次にテスト コードとテスト ケースを開発者が記述する必要があります。

他の、より安価な CI 承認メカニズムを追加するためのアイデアとして、構文チェッカー、コード スタイル フォーマッタ、または依存関係の脆弱性スキャンがあります。マージ承認ステップをいくつか準備してバージョン管理システムを設定すれば、継続的なインテグレーションの確立は完了です。

CI は、純粋なエンジニアリング固有のビジネス プロセスではありません。組織の残りの部分、マーケティング、営業、製品の各チームも、CI パイプラインのメリットを受けます。製品チームは、同時開発ストリームを並行して実行する方法を考える必要があります。製品とエンジニアリングは緊密に連携して、自動テスト スイートを構成するビジネス機能の期待度を判断します。

マーケティングと営業は、CI パイプラインを参照して、顧客向けのコミュニケーション活動やイベントと連携できるようになります。CI によって、エンジニアリングの実行が進捗している方法について、組織の残りの部分に透明性が与えられます。この透明性とコミュニケーション ユーティリティは、アジャイル プロジェクト開発ワークフローと意図したとおりに統合されます。

結論

組織が DevOps アプローチのメリットを生かそうと努めている、または単に複数の開発者のソフトウェア チームを持っている場合、CI は重要です。これによって、エンジニアリング組織はさらに迅速かつ効率的に実行できるようになります。

CI は、最新の高効率ソフトウェア開発組織の標準フィクスチャです。優れた企業には堅牢な CI パイプラインがあり、さらなる効率化への投資に二の足を踏むようなことはありません。CI のメリットは、エンジニアリング チームに限定されずに組織全体に適用されます。

CI の管理とインストールに役立つ多くのサードパーティ製ツールが存在します。一般的なオプションとして、Codeship、Bitbucket Pipelines、SemaphoreCI、CircleCI、Jenkins、Bamboo、Teamcity などがあります。これらのツールには、開始するのに役立つ独自の詳細な設定ガイドとドキュメントがあります。

最高の CI ツールのいくつかは、Atlassian によって提供されています。Bitbucket pipelinesBamboo は、最新の CI 機能でプロジェクトをスピード アップするのに最適なユーティリティです。Jira は、世界で最も普及しているアジャイルおよび DevOps プロジェクト管理ツールの 1 つです。Jira は他の Bitbucket プロジェクトと密接に統合しています。CI パイプラインと組み合わせると、組織の実行健全性に高度な透明性をもたらせます。

Max Rehkopf
Max Rehkopf

自称「無秩序なタイプ」である私の毎日に秩序をもたらしてくれるのが、アジャイルの実践とリーン方式です。ここから学んだことを、アトラシアンの数々の記事や講演、動画を通して他の人と共有することが、私の喜びです。