近年のシステム開発では、作業を自動化するCI/CD という手法が取り入れられるようになりました。開発期間を区切り、素早い機能実装を目指すアジャイル開発において、エンジニアの手作業での対応が困難なためです。
さらに、開発エンジニアと運用チームが連携して作業を行うDevOpsでも、CI/CDによるプロダクトの価値の最大化が目指されています。
本記事では、アジャイルやDevOpsを達成する有効な仕組みであるCI/CDの内容と、その実現方法について解説します。「アジャイル開発」の概要を知りたい方はこちらの記事もおすすめです。
CI/CDとは?
CI/CDとは「Continuous Integration / Continuous Delivery」の略称です。日本語では、継続的インテグレーション(統合)と継続的デリバリー(提供)と訳されます。
この2つの手法を導入すると、開発するソフトウェアの変更に対して常にテストを行い、自動で本番環境に適用できるようになります。これにより、ソフトウェアを公開するサイクルを早めつつ、自動化によるヒューマンエラーの低減も実現できるため、品質の向上に寄与します。
CIとCDの具体的な内容は以下の通りです。
継続的インテグレーション(CI)とは
継続的インテグレーションとは、ソフトウェア開発における自動化プロセスの一部を指し、コードの修正時にビルドとテストの工程を自動化する手法です。
一般的にソフトウェアは機能ごとに個別にプログラミングされるため、インテグレート(統合)してみるまでどのようなエラーが発生するかわかりません。
継続的インテグレーションでは、コードの修正時にテストが自動で実施されるため、すぐに問題を発見して対応できます。
その結果、ソフトウェア開発の工数を削減することができるとともに、不具合を早期に発見できるため手戻りも減少します。
継続的デリバリー(CD)とは
継続的デリバリーとは、テストを通過したソフトウェアを自動的に公開可能にする手法を指します。ソフトウェアが単体テストや結合テストを通過した後、自動的に最終テストを実施するサーバーにデリバリー(提供)されます。
その後、実際にソフトウェアが稼働する環境の構築と最終動作確認の自動化により、迅速に公開することが可能になります。
なお、継続的デリバリーでは運用環境へ展開するデプロイ作業は手作業で行いますが、この工程を自動化する手法は「継続的デプロイ」と呼ばれます。
CI/CDの重要性
近年CI/CDが重視されるのは、アジャイル開発の実現に有効な手段だからです。アジャイル開発では、開発対象のソフトウェアを機能単位に分解し、計画・設計・実装・テストのサイクルを回して開発を進めます。
これにより、発生したバグの修復や新しい機能の実装に迅速に対応でき、開発スピードを上げられるメリットがあります。
一方、アジャイル開発を成功させるためには、変更に対していかに素早くテストを行って公開できるかが鍵を握ります。そのため、ソフトウェアに修正が加えられる度に手作業でテストを行うのではなくCI/CDで自動化することにより、理想的なアジャイル開発手法の確立を目指します。
また、ソフトウェア開発においては「開発」と「運用」を組み合わせた「DevOps」が注目され、ビジネス上の目標達成のために開発チームと運用チームの連携が重視されています。
CI/CDで多くの作業を自動化すれば、運用チームから仕様変更の要求があった場合に開発チームがスムーズに対応でき、DevOpsの実現に貢献します。
CI/CDの実現方法
CI/CDを実施するためには、ソフトウェア開発の複数のステップを自動化しなくてはなりません。この自動化したステップ全体をCI/CDパイプラインと呼び、複数の専用ツールを組み合わせて構築します。
一般的に、CI/CDパイプラインは以下3つのステージで構成されます。
ビルドステージ
ソフトウェア開発でバージョン管理などに用いるコードリポジトリからコードを取得し、必要に応じてコンパイルします。コードリポジトリとして用いられる代表的なツールはGitなどで、ソースコードや関連ドキュメントなどを一元管理できます。
また、コードが変更された際にビルドやテストを実行するツールとコードを連携するためにJenkinsなどのCIツールを利用します。
テストステージ
コードの欠陥を検査するための単体テストや結合テストを実施し、ソフトウェアの品質を検証します。この段階でコードの不具合が発見された場合、内容が自動的に開発者にフィードバックされ、問題解決を行います。
テストが完了したソフトウェアはコードリポジトリにアップロードされ、デプロイの準備を整えます。
デプロイステージ
ソフトウェアを本番環境にデプロイする前の最終テストを実施します。
このテストが完了すると、ソフトウェアの既存のバージョンと置き換えられた最新バージョンがユーザー向けに公開されます。公開作業は状況によって手動で実行する場合と、自動的に実行する場合があります。
手動の場合は公開時期を自分で決定することができ、自動の場合はユーザーが利用中のソフトウェアに対する変更を定期的な更新スケジュールに合わせて提供できます。
CI/CDを実現するメリット
CI/CDを取り入れると以下のようなメリットがあります。
自動化によるコスト削減
CI/CDにより、新しい機能をリリースする際のビルドからデリバリーまでの工程を自動化でき、生産性が向上します。その結果、開発期間が短縮できるため、ソフトウェア開発工数を削減して開発コストを減らすことが可能になります。
コードの品質向上
CI/CDはテストを自動化するだけでなく、テストの信頼性も向上させます。
手作業でテストする場合、テストコードの間違いや実行し忘れなど、ヒューマンエラーによりテストの信頼性が損なわれる可能性があります。CI/CDによりテストを自動化すれば、このような人為的なミスがなくせるため、コードの品質向上に貢献します。
また、コードの変更によって生じた不具合を早期に発見できるため、影響範囲が小さいうちに対応可能となり、品質への影響を低減できます。
開発プロジェクトの進捗管理
CI/CDツールではプロセスも計測できるため、開発中のソフトウェアの公開頻度を基にプロジェクトの進捗状況を把握することが可能です。また、コードの不具合発生率やテスト後の修正時間を計測することもできるため、効率を改善する施策の効果測定にも利用できます。
作業の自動化により属人化も防げるため、作業者が変更になった場合でもスムーズに作業を進められ、進捗の遅れを最小限にすることができます。
まとめ
CI/CDによってソフトウェア開発に自動化を導入することができると、サービスを市場に出すまでの時間が短縮され、フィードバックへの迅速な対応が可能となります。その結果、サービスの品質が安定し、ビジネスにおける収益性の向上も見込めます。
CI/CDはシステム開発にも応用できるため、本記事の内容を参考にして導入を検討してみてください。
また、システム開発の外注先選びでお困りの方は、弊社までお気軽にご相談ください。
当社がこれまで支援してきた開発事例の共有、企画・コンサルティング、要件定義や実際の開発支援まで包括的にサポートさせていただくことが可能です。
システム開発を失敗しないために、弊社が相見積もりの取得までをサポートさせていただくことも可能です。むやみな営業電話などは決して行いませんので、まずは無料のご相談をお待ちしております。