最近、アジャイル、CI/CD、DevOpsの3つの用語の使い方が混同されている例を多く見かけるようになりました。
単一の工具で家を建てられないのと同様、単一のツールで開発プラクティスを実現することもできません。アジリティ、CI/CD、DevOpsの3つは独立したツールであり、それぞれ単独でも重要な機能を備えていますが、3つのツールのすべてを目的の用途に利用すれば、変革的な成果が得られます。そしてセキュリティの文脈では、これを実現して初めてDevSecOpsと呼ぶ権利を獲得したといえます。
アジャイルは、宣言の作成者の一部からはアジリティと呼ばれ、プロセスの障害を取り除き、主要なステークホルダー(開発チームや顧客など)間の協働をより緊密にしてデリバリーを迅速化することに主眼を置きます。アジリティでは恒常的な変化に重点を置き、モノリシックなライフサイクルでは高品質のソフトウェアの考案、開発、デリバリーを成功させるために必要なすべてのことを把握しているとは限らないということをソフトウェア生産者として認めています。
アジリティの意味は過去20年間で変化していますが、その基本は依然として、プロセスの障害を取り除いて個々の能力を高め、有効なソフトウェアを短期間で生産し、顧客と緊密に協働し、変化に(抵抗するのではなく)、対応するというものです。
継続的インテグレーション(CI)は、チーム内の協働の頻度を増やしてメンバーの仕事を統合するソフトウェア・エンジニアリング・プラクティスです。CIプラクティスに従い、チームは少なくとも1日に1度、場合によっては1日に数回の統合を心がけ、「継続的」という言葉を用いた意欲的な呼称の実現を目指します。
従来、統合は高コストなエンジニアリングアクティビティでした。そこで、CIでは労力を軽減するため、構築とテストを駆動する自動化ツールに重点を置き、最終的にソフトウェア定義ライフサイクルの実現に集中します。CIが成功すると、構築と統合の作業が不要になり、統合エラーの検出も現実的な範囲にまで迅速化されます。
継続的デリバリー(CD)は、CIで構築およびテストしたシステムをパッケージ化してデプロイします。ソフトウェアを構築、構成、パッケージ化し、デプロイでは常にソフトウェア定義方式(低コストで高度に自動化された方法)で運用環境にリリースできるように調整します。
高度に機能するCI/CDプラクティスでは、ソフトウェアの変更が運用環境に導入される頻度が高くなり、変更に対するフィードバックを顧客とやりとりする機会が増えるため、直接的にアジリティが促進されます。
アジリティがプロセスに注目するのに対し、DevOpsは文化と役割の制約に着眼します。DevOpsは、組織の役割の過度の専門化とストーブパイプ構造が生産の問題への迅速な、あるいは効果的な対応を阻害するという負のインパクトに着目します。DevOpsの組織は運用とエンジニアリングとの間の垣根を崩し、互いのスキルを習得して相互の仕事を評価し、これに参加する能力を向上させるとともに、協働の質を高め、コミュニケーションの頻度を増やします。
エンジニアリングチームは、多くの場合、それが得意分野であるという理由でまずCIから開始します。DevOpsに焦点を当てることは、ライフサイクルの中でソフトウェア定義を適用する範囲を広げるために必要な構成、パッケージ、調整を組織が理解し、CDプラクティスの価値を高めるために役立ち、これによってアジリティが強化されます。
アジャイル、DevOps、CI/CDを簡単に区別すると、次のようになります。