用語集
CI/CDとは
「CI/CD」とは、ソフトウェア開発におけるビルドやテスト・デリバリー・デプロイメントを自動化し、継続的に行うアプローチを指す名称です。「CI」と「CD」はそれぞれ「Continuous Integration(継続的インテグレーション)」と「Continuous Delivery(継続的デリバリー)」の略で、この2つを組み合わせて「CI/CD」と呼んでいます。
近年では、アジャイル開発が主流となるのにあわせて、CI/CDも注目されるようになっています。本記事では、CI/CDが注目される背景とDevOpsにおいて、CI/CDがどのような役割を持つかを利用するツールの紹介も交えて、解説します。
アジャイル開発とCI/CD
近年のビジネス環境は、非常に激しく変化しています。それにあわせて、ソフトウェア開発にも柔軟な変化と迅速な提供が要求されるようになってきています。そこで、従来のウォーターフォール開発に代わり、開発期間中にも要求変更や追加を受け入れやすい「アジャイル開発」という手法が普及してきています。
アジャイル開発は、機能ごとに小さく分割して継続的に開発・テスト・リリースを行う開発手法です。そのため、要求変更や追加を受け入れやすく、ウォーターフォール開発では難しかった変化への柔軟な対応や高速なリリースが可能となります。
しかし、アジャイル開発には開発の規模が大きくなるにつれて、全体のスケジュールや進捗を管理しづらくなるという問題も存在します。また、単に開発のスピードのみを重視してアジャイル開発を導入すると、成果物の品質が低下してしまうケースもあります。頻繁な仕様変更や要求事項の追加に対応できるのはアジャイル開発のメリットですが、リリース回数の増加は、テスト・ビルド・デプロイといった、コーディング以外の作業にかかるコストが増大することも意味します。
こうした課題を解決するためには、一連の作業を自動化し、人手を介さず継続的に行えるようにすることが重要です。そして、そのための手法として活用されているのが「CI/CD」なのです。
CI/CDの仕組み
ここでは、CI/CDの具体的なフローの例を紹介します。
まず、開発されたソースコードがバージョン管理ツール(Git)へコミットされると、CIによって自動的に「コードにエラーがないか」「既存の機能を破壊していないか」といった各種のテストが行われます。これにより「仕様どおりの機能が実装されているか」「既存のコードに影響はないか」といった確認が自動的に行われます。つまり、CIを実施することでバグを早期に検出したり、リリース用のブランチへバグが混入することを防げるのです。
CIによるテストをパスしたら、次はCDによってコードがリリース用のブランチにマージされ、ビルドが行われます。CDによってビルドされたアプリケーションは、自動でテスト用のサーバーに「デリバリー」され、すぐに動作確認が行えるようになります。これを「継続的デリバリー」と呼びます。
なお、「継続的デリバリー」では、変更したコードをテスト用のサーバーまでは自動でデリバリーしますが、本番環境へのデプロイは行いません。実際に本番環境へデプロイするかどうかは、都度人間が判断して行います。本番環境へのデプロイまで自動的に行うことは「継続的デプロイ」と呼び、両者は区別されています。
CI/CDは、単に作業効率を上げるだけでなく、テストやビルド作業から属人性を無くせるのがメリットです。つまり、テスト担当者ごとによる品質のばらつきや人的ミスを排除できるのです。品質を確保しつつリリースを高速化するため、こうした「新機能をコミットしたら自動でテスト・ビルド・デプロイを実行し、テスト環境ですぐに動作確認が可能。場合によっては、本番リリースまでも自動で行う」というCI/CDパイプラインの構築は非常に重要となっています。
CI/CDパイプラインを構築するためのツール
CI/CDパイプラインは、市販・OSSのツールやWebサービスを利用して構築するのが一般的です。
まず、ソースコードのバージョン管理ツールですが、「GitHub」や「GitLab」が世界的にも有名で主流となっています。そして、CI/CDツールとしては、オンプレミスでも実行できる「Jenkins」やSaaSの「CircleCI」「Travis CI」などが知られています。
また、こうしたバージョン管理ツールとCI/CDツールの組み合わせだけでなく、DevOpsを支援するオールインワンツールを利用するケースも増加しています。例えば、前述のGitLabは、DevOpsに必要な機能をオールインワンで備えています。そのため、単なるバージョン管理ツールの枠を越えて、CI/CDのツールとしても利用できるのです。
昨今の主要なクラウドベンダーの多くは、こうしたオールインワンのDevOps支援ツールを提供しています。FJcloud-V(旧ニフクラ)もGitLabをプライベートな環境で利用することができるサービスである「DevOps with GitLab」を提供していますので、DevOpsツールの導入に際しては、ぜひご検討ください。
DevOpsの要素としてのCI/CD
そもそもDevOpsの目的は「開発者と運用者が協力し合うことにより、リリースサイクルの短縮化を図る」ことです。そして、CI/CDは「リリースサイクルを早めながら、作業を自動化しヒューマンエラーを防止するための開発手法」と位置づけられています。つまり、CI/CDはDevOpsを実現するための具体的な手法の1つと考えられます。
冒頭で述べたように近年ではアジャイル開発による開発が主流となりつつありますが、アジャイル開発も万能ではなく、さまざまな課題が存在します。この課題を解決するためのアプローチの1つがCI/CDパイプラインの構築と言えるでしょう。
しかし、顧客満足度の高いサービスを迅速かつ継続的に提供するためには、単に手法としてアジャイル開発やCI/CDを導入しただけでは不十分です。こうした手法の導入に加えて、自動化を前提とした開発手法の刷新や場合によっては、企業・組織に根付いた文化そのものを変えていくこと必要となるでしょう。