CI/CDとは?
CI/CDの概念は、DevOpsチームがコードに頻繁かつ確実な変更を加えるための主要な手法となっています。
継続的インテグレーション (CI) と 継続的デリバリー (CD) は、コード変更をスムーズに行い、ソフトウェアの堅牢性を高めるためのプロセス、ツール群、そして実践の一式を指します。この開発プロセスは、CI/CDパイプラインと呼ばれます。
CI/CDは、DevOpsチームがソフトウェア開発中に採用する注目すべき手法です。この考え方は、DevOpsチームが開発の各側面に専念できるようにする、優れたプロセスのベストプラクティスです。結果として、チームは指定された要求を達成し、コード品質やセキュリティを守りながら、自動化された開発プロセスを活用できます。
継続的インテグレーション - CI
継続的インテグレーション(CI)とは、コードに小さな改善や変更を頻繁に加える開発手法で、DevOpsチームが採用する考え方や一連のプラクティスです。多くの先進的なソフトウェアは、さまざまな環境やツールと互換性のあるコードを求めるため、コードベースの変更を調整・管理する仕組みが必要とされます。
CIは、予測可能な自動化テスト、ビルド、パッケージングの基盤を整えることを目的としています。しっかりとした管理体制があれば、チームは日常的にコード変更を加え、協調作業やアプリの品質向上が期待でき、システム全体への大きな障害も防げます。
継続的デリバリー – CD
継続的デリバリー(CD)とは、CIの延長線上にある考え方で、自動化された仕組みによりアプリを特定の環境や条件に提供することを保証します。多くのチームは、開発だけでなくテストなどさまざまな環境で作業しており、CDはコード変更を自動で反映させる体制の構築を目指します。
CI/CDの概念は、ソフトウェア提供時に考慮すべきすべての運用や主要な要件を網羅します。CI/CDの自動化は、API呼び出しからウェブワーカー、データベースなど、アプリ起動時に必要な重要サービスを処理します。
継続的インテグレーションと継続的デリバリーは、ユーザーに質の高いアプリとコードを届けるため、一定のテストが欠かせません。こうした継続的テストは、自動化されたテスト、実行、ロールバックとしてCI/CDパイプラインの一部を成し、全工程が想定通りに動作し、アプリが期待通りの結果を示すことを保証します。
十分に整備されたDevOpsプロセスでは、CI/CDパイプラインを通じてアプリに変更が反映され、デプロイが直接生産環境へ進む継続的デリバリーが適用されます。DevOpsチームの中には、生産環境への展開を日次や時次で行うところもあります。ただし、継続的デリバリーが常に企業向けアプリに最適とは限らず、チームは各制約を考慮して最も適した方法を選ぶ必要があります.
継続的インテグレーションは、自動化テストやビルドツールといった確立された手法によって支えられる開発戦略です。CIを採用するDevOpsチームでは、開発者が定期的にコード変更をバージョン管理リポジトリへコミットし、ほとんどのチームが少なくとも1回のコミットを行います。この手法の狙いは、短期間に大きな変更を加えるより、長期にわたる小さな変更の方が、問題箇所の特定やコード修正が容易になるという点です。
CIを採用するチームは、機能フラグやバージョン管理の仕組みから統合プロセスを開始します。コードは頻繁にコミットされても、機能や変更は短期あるいは長期にわたって展開できます。DevOpsチームは、最終的に構築する機能やコードを選定するため、さまざまな手法を取り入れています。
一部のチームは、アプリ展開前に機能やコードのオン・オフを切り替える仕組みとして機能フラグを利用します。まだ完成していない機能には、コードベースにフラグを付け、開発中は非公開として保持し、完成後にリリース可能とします。最近の調査では、機能フラグを採用するDevOpsチームの63%が、テスト結果やソフトウェア品質の向上を実現したと報告しています。最適な結果を得るため、CI/CDツールと連携した機能フラグ管理や、その他のコンポーネント単位の仕組みの導入が推奨されます。
開発プロセスで機能を管理するもう一つの方法として、ブランチ管理戦略があります。これは、新しいコードや変更を開発、テスト、生産環境用のメインブランチに統合するためのルールを定める仕組みです。開発に時間のかかる機能には専用のフィーチャーブランチが作成され、システムへの負荷を軽減します。機能が完成すると、エンジニアはフィーチャーブランチで行った変更をメイン開発ブランチに統合できます。この方法は責任管理に有効ですが、複数の機能が同時進行する場合は難易度が上がる可能性があります。
ソフトウェア開発プロセスは、アプリ、データセット、その他の要素をひとまとめにして自動化されます。たとえば、Javaアプリの場合、CIはJavaアプリや重要なデータベース内容を除外せず、CSS、HTML、JavaScriptなどの静的ファイルも含めてパッケージ化します。
CIは、ソフトウェアやデータベースのパッケージ化だけでなく、全システムの自動化によりユニットテストなど様々なテストを実施します。これにより、エンジニアは自分たちのコード変更がすべてのユニットテストに合格しているかどうかを確認できます。
ほとんどのCI/CDツールは、バージョン管理リポジトリへのコミットや指定されたスケジュールに基づいてシステムを構築できる仕組みを提供します。DevOpsチームは、チームの規模、日々のコミット数、その他のアプリ要件に応じ、最も適したスケジュールを選ぶべきです。変更とビルドが迅速に管理されることは、頻繁にコーディングを行うチームの生産性向上につながります。
CI/CDの略称は記事冒頭で定義されましたが、他にもいくつかの意味があります。CIは常に継続的インテグレーションを指し、基本的には開発者が取り入れる自動化プロセスです。効果的なCIとは、アプリへのコード変更が頻繁にビルド、テストされ、共通リポジトリに統合される状況を意味します。この自動化仕組みにより、互いに干渉することなくアプリの各部分が同時に開発されます。
CI/CDのCDは、継続的デリバリー、すなわち安定したデプロイメントを意味します。両者は関連する概念であり、使用ケースに応じて使い分けられることもあります。いずれも、開発パイプラインの次の段階の自動化に焦点を当てていますが、パイプライン完了後の自動化レベルを示すため、個別に用いられる場合もあります。
継続的デリバリーは、開発者がアプリに加えた変更が、リポジトリにコミットされると自動的に不具合やエラー、欠陥のチェックが行われ、DevOpsチームによって生産環境へ展開される状態を示します。この考え方は、DevOpsと業務部門間の柔軟性不足や連携の弱さという問題に対応するものです。つまり、CDの目的は、ビルド後に次のコードを展開する労力を最小限に抑えることにあります。
CDの別の意味として、継続的な構成(Continuous Configuration)があります。これは、開発者の変更をリポジトリから生産環境へ自動的に反映し、即時にユーザーへ提供するプロセスを指します。手動のプロセスが開発チームの負担となる問題に対処し、CI/CDパイプラインの次段階を自動化することで、継続的デリバリーの利点をさらに高めます。
CI/CDツールは、DevOpsチームが実施するビルド、開発、テストの自動化を目的としています。統合に特化したツール、開発・デリバリー向けツール、継続的テストに注力したツールなど、それぞれの用途に合わせた選択が可能です。特に優れ、広く利用されているツールとして自動化サーバーであるJenkinsが挙げられます。Jenkinsは、開発者が統合および開発を管理できる機能を備えており、またTekton Pipelinesは、堅牢なコンテナレジストリやクラウド管理サービスを活用した標準的なCI/CD機能を提供するフレームワークです。
JenkinsやTekton Pipelinesに加え、以下のオープンソースツールも試す価値があります:
DevOpsチームは、各ベンダーが提供する管理型CI/CDツールの利用も検討できます。主要なクラウドサービスプロバイダーは、GitLab、Atlassian Bamboo、Travis CI、Circle CIなど、CI/CDパイプラインを支援するツールを提供しています。
さらに、DevOpsに用いられる他のツールもCI/CDパイプラインの重要な構成要素です。Chef、Puppet、Ansibleなどの構成自動化ツール、rkt、cri-o、Dockerのようなコンテナランタイム、Kubernetesのようなコンテナオーケストレーションツールは、CI/CDツールとしてだけでなく、初期状態で導入されていることが多いです.
DevOpsとは、手法、ツール、実践を組み合わせ、組織が迅速にサポートやアプリを提供できるようにする考え方です。DevOpsは、手動および自動プロセスの短所を解消し、全体の開発および展開サイクルを近代化・高速化します。DevSecOpsは、開発者が開発工程の各段階でテストを実施することを求める概念で、この手法により製品のセキュリティが向上します。DevSecOpsを取り入れることで、潜在的な脆弱性を迅速に発見し、最終製品の安全性が高められます。
CI/CD、DevOps、DevSecOpsは、いずれも開発に関わる重要な要素です。開発チームは、実用性からCIでプロセスを開始することが一般的です。DevOps体制では、組織が全体のフローを円滑に管理し、各段階でソフトウェアを効率的に構築できます。一方、DevSecOps体制では、セキュリティを最優先に、問題を迅速に特定・解決することが可能です。どの手法を採用するかは、チームの特性や要求、プロジェクトの規模に依存します。
最新情報を購読