DevOpsの方法論は、ソフトウェア開発サイクルのスピードと品質を高める取り組みとして、これまで長らく企業を支援してきた。しかし、具体的には何を意味するのだろうか。DevOpsとは、継続的インテグレーション(CI)と継続的デリバリー(CD)を通じて、機能を迅速に提供することに重点を置いたソフトウェア開発のアプローチである。
DevOpsの主要コンポーネントであるCI/CDは、開発チームがより安定し、効率的で、保守しやすいアプリケーションを開発するのに役立つ。DevOpsの取り組みはここしばらく勢いを増しているが、その概念を理解するには、要素を分解して考える必要がある。
本記事ではCI/CDを分かりやすく解説し、より優れたソフトウェアを短期間で提供するうえで、どのようにビジネスに役立つのかを説明する。
CI/CDとは?
CIの本質は、開発者が1日に何度もコードを中央リポジトリにマージする自動化プロセスである。ツールはコードの各部分をテストしてバグを検出し、問題が発生するとチームメンバーに自動で通知する。
CDはCIを拡張したもので、ソフトウェアのビルドを本番環境へ直接プッシュし、デプロイ後に発生した問題を特定するため、両方のエンドポイントを監視する。
ITプロフェッショナルにとってのCI/CDのメリット
DevOpsのプロフェッショナルは、開発環境からコードを継続的に送り出すことが仕事の一つだと理解している。開発者がコードをプッシュする頻度が高いほど、本番環境やユーザーのデスクトップに迅速に届けられる。
また、ユーザーは問題をすぐに報告するため、新しいコードを安定して送り出せれば、ITチームは修正を迅速に提供できる。過去のビルドで十分に機能しなかった点も把握でき、今後の改善につなげられる。
これが、現代のIT組織でCI/CD戦略が広く採用されている理由である。こうした戦略を正しく導入すれば、企業は生産性の向上、アプリケーション品質の改善、市場投入までの期間短縮を実現できる。
CI/CDがもたらすビジネス価値
市場投入までの期間短縮
コーダーが新しいソフトウェアを作成しても、重大なバグをすべて修正するまでには数週間から数カ月かかることがある。しかし継続的デリバリーを導入すれば、開発の各イテレーションでより早い段階からテストを実施できる。再び修正が必要になった場合も、同じように迅速に対応できる。
その結果、顧客はこれまで以上に早くアップデートを利用でき、企業は製品を迅速に市場へ投入することで収益を大きく伸ばせる。
コスト削減
コスト削減と自動化に必ずしも直接的な相関があるとは限らないが、CI/CDがコストを削減する方法は2つある。第一に、自動化によって手作業が減り、時間を節約できる。第二に、効率化が促進される。つまり、プロセスを自動化すると処理をより迅速に実行でき、その結果としてコスト削減につながる。
チーム全体の生産性
開発者がコードを共有し、リリースの同期を維持できなければ、バグの発見と修正に時間がかかる。その結果、デプロイ可能な時間枠が狭まり、より広い意味で事業継続性に影響する。エンドユーザーに直接影響しない場合でも、チームの士気を下げ、チーム全体の生産性低下につながる。
どの部署で働いているかにかかわらず、高い成果を上げるチームの一員であることにはやりがいがある。継続的インテグレーションと継続的デリバリーを導入すれば、チームはより優れた成果を上げられるようになる。
迅速なフィードバックサイクル
フィードバックが早く得られるほど、後工程の問題を引き起こす前に課題を解決できる可能性が高まる。小さな問題でも、時間の経過とともに大きな問題に発展することがある。CI/CDは迅速なフィードバックサイクルを実現し、開発の早い段階、あるいは問題が発生する前に解決するのに役立つ。
技術的負債の削減
企業の基準や期限を満たさないコード(いわゆる技術的負債)は、組織の足かせとなり、テストを難しくする。開発チームは自動テストによって技術的負債のリスクを軽減できる。自動テストは人的ミスを抑えるだけでなく、テスターが本来なら後にならないと遭遇できないような実環境のシナリオにもアクセスできるようにする。
あわせて読みたい:NetOpsとDevOpsの比較:ネットワークに自動化を導入する
CI/CDのユースケース
テスト
CI/CDは、必要となるさまざまなテストツールを提供する。自動受け入れテスト、負荷・性能・セキュリティテスト、APIテスト、A/Bテスト、回帰テストスイートなどが含まれる。
デプロイの自動化
自動デプロイをリリースプロセスに組み込むと、開発者がソース管理に変更セットをチェックインするたびに、デプロイパイプラインが自動的に開始される。そのため開発者は、変更がどの程度うまく機能するかについて、非常に早い段階でフィードバックを得られる。これにより、バグのある機能ではなく、動作する機能を提供できる。
構成管理データベース(CMDB)
CDはデプロイやリリースのサイクルを簡素化するだけでなく、構成管理データベース(CMDB)の取り組みも改善できる。CI/CDソリューションは、コードの変更に関するデータに加え、誰がいつ特定の更新を行ったかといったメタデータも提供するため、組織内で何が起きているのかをより正確に把握できる。
テストの自動化
CI/CDソリューションはテストの自動化に最適である。実際、多くのCI/CDソリューションには、独自の自動テストを作成できるテスト機能が組み込まれている。すでに自動テストを導入している場合は、CI/CDソリューションを使って必要なときに実行でき、開発チームやテストチームは他の作業に専念できる。
監視とアラート
多くのCI/CDソリューションには監視ツールが組み込まれている。また、組織内ですでに利用している監視ツールと統合できるものもある。
CI/CDのベストプラクティス
大きく分けると、CI/CDにはバージョン管理、コードテスト、パッケージ化とデプロイのツール、自動化、インフラストラクチャという5つの機能が必要だ。ここでは、組織にCI/CDを導入するための具体的なベストプラクティスを紹介する。
- ビルド、リリース、テスト、課題などに関するすべての情報を一元管理する中央ハブを用意する。
- 可能な限り、ChefやPuppetのスクリプトから仮想マシンのブルーグリーンデプロイまで、ビルド環境とテスト環境を自動化する。
- 必要に応じてクラウドリソースを利用し、テストマシンを迅速に立ち上げる。そうすれば、開発者はバージョンを切り替える際に大きなダウンタイムを発生させず、1日に複数回変更できる。
- 新機能はmasterにチェックインする前にテストする。
- 開発環境、ステージング環境、本番環境の間で転送する際にファイルが破損していないことを確認するため、チェックサムを作成する。
- リリースは小さな単位で構築し、週に1回、月に1回まとめて更新するのではなく、新しい段階的なアップデートを継続的にデプロイする。
あわせて読みたい:DevSecOps入門:その概要と必要とされる理由
こうした開発サイクルはネットワーク管理の発展にどう役立つのか?
DevOpsとは、開発したコードが期待どおりに動作するよう、コラボレーション、自動化、計測に基づいて構築された文化である。
ネットワークの分野では、CI/CDの開発サイクルによってソフトウェアをリアルタイムで継続的に監視できるため、ネットワーク管理の発展に役立つ。コードを小さな単位でプッシュすることで、開発者はエラーを把握しやすくなり、より迅速に修正できる。
これは、構成要素が多く複雑な大規模ネットワークにとりわけ有効である。システムを円滑かつ効率的に稼働させるには、適切な監視が不可欠だからだ。ネットワークの自動化と監視は、アプリケーション・プログラミング・インターフェース(API)を活用してソフトウェアコンポーネントをより深く理解し、変更が発生した際にユーザーへ即座にフィードバックを提供することで、CI/CDの両方を可能にする。
主要なCI/CDツール
Jenkins
JenkinsはCIシステムとして機能するオープンソースプロジェクトである。ソフトウェア開発プロセスの調整と自動化を支援するよう設計されており、特にチームが複数の場所で作業する状況に適している。
TeamCity
一般的なプログラミング言語やテクノロジーを扱うソフトウェア開発者、ビルドエンジニア、テスター、プロジェクトマネージャー向けの統合開発環境(IDE)である。TeamCityは、設定と操作が容易なタスクによってビルドとリリースのプロセスを自動化できるCIサーバーだ。
Travis CI
Travis CIは、開発者がコードのビルドプロセスを設定できるCI/CDプラットフォームである。プロジェクトにCIを設定すれば、新しいコードのプッシュやgitのブランチ更新など、変更を行うたびに必要な処理を自動化できる。
Codeship
Codeshipは、アプリのビルド、テスト、デプロイを簡単に行えるCIプラットフォームである。本番環境へのライブデプロイの準備が整うと、Codeshipはダウンタイムなしで変更を自動的にロールアウトする。
Bamboo
最も広く利用されているCIツールの一つとされている。Bambooでは、最大100台のリモートビルドエージェントへのデプロイとテストが可能だ。クラウドベースでもセルフホストでも利用できる。
Circle CI
CircleCIは、コミットするたびにコードをビルドしてテストできるCI/CDプラットフォームである。Circle CIは、Docker、.NET Core、Kubernetesなど、複数のオープンソースプロジェクトを活用している。
CI/CDを重視すべき理由
継続的インテグレーションは、開発者の手作業を減らし、ユーザーに届けるエラーやバグの数を抑える習慣を促すことで、チームの生産性を高める。
チェックインするたびに自動ビルドで検証されるため、チームは問題を早期に検出できる。さらに、コードに24時間アクセスできれば、他のメンバーの作業を妨げずに必要に応じて開発を続けられる。最後に、大きな変更をまとめて行うのではなく、小さな変更を頻繁にデプロイすることで、全体としてバグが少なく、品質の高いソフトウェアリリースにつながる。