CI/CD(継続的インテグレーション/継続的デリバリー)は、アプリケーションなどの開発を、正確かつ効率的に行うための開発手法です。常に自動でテストを行っておくことで、スピーディーな製品のリリースが可能となります。
DX(デジタルトランスフォーメーション)が叫ばれ、従来よりもスピーディーなアプリケーションの開発が求められるようになった今、CI/CDは欠かせない開発手法となりつつあります。
ここでは、「CI」と「CD」がそれぞれどのようなものかをわかりやすく説明するとともに、今、CI/CDが必要とされている理由や、導入によって得られるメリットを解説します。さらに、CI/CDを実現するための代表的なツールと、導入の注意点も紹介します。
CIは「Continuous Integration(継続的インテグレーション)」、CDは「Continuous Delivery(継続的デリバリー)」の略称です。
システム開発では、製品の動作を確認するテストは必要不可欠ですが、大規模開発になるとテストの労力が大きくなり、人海戦術でテストを行おうとすると大変な時間を要します。
そこで出番となるのがCI/CDです。CI/CDは特定の技術を指す言葉ではなく、ソフトウェアの変更を常に自動でテストし、いつでもリリースが可能な状態にしておく開発手法のことをいいます。ここからは、「CI」と「CD」それぞれの言葉の意味を説明します。
CI(継続的インテグレーション)は、変更箇所の反映とテストを自動化することを指します。
例えばアプリケーション開発におけるCIは、別々に稼働しているエンジニアのソースコードを継続的に統合して、正常に動作することを自動的に確認する取り組みのことを指します。修正とテストを自動的に繰り返すことで、人への負担が少なくなり、効率的にプロジェクトが進むようになります。
CD(継続的デリバリー)は、開発~検証などの工程が、自動かつ連続で行えるように開発環境と本番環境をつなぐことを指します。CIは開発の流れを自動化するものですが、CDはリリースの準備を自動的に行うイメージです。
CDでは、デプロイや修正内容の管理・監視などを自動的に行います。リリース自体は開発者の判断で行うため、機能をリリースするタイミングは選択できます。
CI/CDが必要とされはじめた背景に、アジャイル開発へのシフトがあります。
従来は、多くのアプリケーション開発がウォーターフォールモデルで行われてきました。ウォーターフォールモデルは、要件定義・設計・テストといった工程を上から下へ一方向に行う方法で、工数見積がしやすく、スケジュールが立てやすいなどのメリットがあります。しかし、工程を後戻りしないことを前提としているため、途中で仕様変更が発生した場合は大規模な手戻りが発生するデメリットがありました。
近年の開発では、よりスピードが求められるようになり、そこでアジャイル開発とDevOpsが注目されました。そして、アジャイルやDevOpsの成功に必要となるのが、開発やテストを自動化できるCI/CDです。ここからは、CI/CDと、アジャイル及びDevOpsの関係をそれぞれ説明します。
アジャイル開発とは、機能単位で切り分けた小さなサイクルで開発を繰り返す手法です。それぞれの単位ごとに目標と成果物が設定されており、それを満たすことで品質が担保されるようになっています。
アジャイル開発では、短いスパンで要件定義・設計・開発・テストといった工程を繰り返します。開発とリリースを何度も繰り返すこととなるため、コードに加える変更や、テストやデプロイの回数も増え、手間も大きくなります。
そこで、CI/CDが必要となります。CI/CDの導入により、コードの変更やテストを自動化できるようになり、アジャイル開発がより効率的になります。
DevOpsは、「Development(開発)」と「Operations(運用)」を組み合わせた造語で、開発チームと運用チームが協力し、柔軟でスピーディーなサービス提供を行うための考え方や仕組みのことを指します。
DevOpsが目標とする「スピーディーなサービス提供」を実現するために、テストを自動化するCI/CDは不可欠と考えられています。CI/CDによりテストからリリースまでが自動化されることで、より迅速なリリースが可能となります。
CI/CDを導入し、開発テストやリリースを自動化することで、いくつかのメリットが生まれます。ここでは代表的なメリットを紹介します。
変更したソースコードを手作業で各環境に反映し、リリースしようとすると、数ヶ月かかってしまうことも少なくありません。しかし、CI/CDを活用することで、リリースまでの諸作業を自動化でき、大幅なスピードアップが実現できます。
特に、小さな単位で開発を繰り返すアジャイル開発では、週単位で開発を繰り返すことがあります。そういったプロジェクトにCI/CDを導入し、各工程を自動化することで、大幅なスピードアップが期待できるでしょう。
従来は、ソースコードの変更箇所などのチェックは目視で行われていました。あくまで人が確認するため、十分に注意してもチェックが漏れてしまうことがあり、属人化したコードのままリリースされてしまうこともありました。
しかし、CI/CDによりコードのチェックが自動化されることで、修正したコードがひと目でわかるようになり、一定の基準でエラーや既存機能への影響がないかを確認できるようになります。その結果、コードの品質が安定しやすくなり、属人化したコードに悩まされることも少なくなるでしょう。
CI/CDを導入することで、手動で行っていたときよりも高い頻度でテストを実施できるようになります。テストの回数が増えることで、早い段階でバグが発見できるようになり、ほかの機能へ影響を及ぼさない段階での修正が可能になります。
特に、短い周期で開発とテストを繰り返すアジャイル開発では、自動化による業務負担の軽減と、テストの精度アップによる品質向上の両方のメリットを享受できます。単にバグの検出が簡単になるだけでなく、開発そのものが効率的になるといえるでしょう。
ソースコードを修正した後は必ずテストが必要です。しかし、テストを手動で行っていた従来の方法では、人的ミスによりテストを忘れてしまうこともありました。
CI/CDを導入することで、自動でテストが実施されるようになり、こうしたテスト忘れが防止できます。また、毎回テストコマンドを実行する手間も省略できます。
テストを忘れてしまうと、不具合がリリース後に判明し、それにより損害が発生することがありますが、自動化することでそうした心配も小さくなります。
CI/CDを導入することで、手作業で行っていたリリースまでの作業が自動化され、業務負担が大幅に軽くなります。その結果、作業効率がアップし、生産性が向上するでしょう。
その結果、これまで注力できなかった作業に時間を費やせるようになり、ユーザーの視点に立って仕様を変更することや、新たな機能を追加することなどができるようになります。
ソースコードの品質安定や、バグの検出が容易になるといったメリットとあわせて、こうした面からも品質の向上するものとおもわれます。
CI/CDを行うためのさまざまなツールが存在します。メジャーなものとして、オープンソースのCIツール「Jenkins」や、ソースコードなどを管理する「GitHub」などがあります。ここでは、主なツールを機能別に紹介します。
CIツールは、ソースコードの変更とテストを定期的に繰り返すツールです。ビルドやテストの実行のため、各種ツールにソースコードを連携します。特に「Jenkins」が有名です。
▼主なツール
・Jenkins
・Travis CI
・AWS Code Build
・GCP Cloud Build
・Circle CI
・Wercker
・Codeship
システム基盤の構築などを自動化するツールです。システムがアップデートやパッチの適用により動作しなくなり、正常に動作していたときの構成に戻す際にも重要な役割を果たします。
▼主なツール
・Ansible
・Puppet
・Chef
テストツールは、操作や負荷などのテストを自動化するためのツールです。
▼主なツール
・UFT One
・Test Complete
・Silk Test
CI/CDの利用には、CI/CDツールによる自動化の基準の決定や、テストコードの作成などの下準備が必要になります。そのためには一定の作業負荷が発生します。
また、運用をスタートしてからも、品質を確保するために定期的なコードの確認や、新たな条件の追加などが必要になります。そして、これらの作業はDevOpsエンジニアなど特定のスキルを持った人材が必要になります。
CI/CDを導入するにはコストがかかります。また、利用開始までに一定の作業負荷が発生するほか、運用にもコストがかかります。そのため、テストとリリースの頻度が少なければ、CI/CDを導入しても費用対効果が見込めないケースもあるでしょう。
アジャイル開発のように頻繁に開発とテストを繰り返す場合は、CI/CDの相性がよく、費用対効果も高くなります。しかし、ウォーターフォール開発のように、開発とテストを繰り返す頻度が低ければ、費用対効果は見込めないでしょう。
CI/CDを導入する際は、プロジェクトの性格を十分に見極めることが大切です。
CI/CDは、アジャイル開発との相性がよく、DevOpsを円滑に行うためにも必要なものです。開発からテスト、リリースまでを自動化することで、製品の品質を向上させながら、開発をスピードアップすることが可能となります。
アジャイル開発は、現在、DX推進において最適な開発手段と考えられています。今後、アジャイル開発とDevOpsが採用される機会はより多くなり、それに伴って、それらを円滑に実行するためのCI/CDの重要度も一層増して行くことでしょう。