継続的デプロイメントとは

2024年8月28日

執筆者

Ian Smalley

Senior Editorial Strategist

継続的デプロイメントとは

継続的デプロイメントは、アプリケーションへのコード変更が本番環境に自動的にリリースされるソフトウェア開発における戦略です。

一連の定義済みテストによってオートメーションが推進されます。新しいアップデートがそのテストに合格すると、アップデートがソフトウェアのユーザーに直接プッシュされます。

継続的デプロイメントは、アプリケーションやITポートフォリオの拡張を目指す企業にとって、さまざまなメリットをもたらします。中でも最大の利点は、コーディングから顧客への価値提供までのタイムラグ(通常は数日から数週間、あるいは数か月)を解消することで、市場投入までの時間を短縮できる点です。

これを実現するためには、リグレッション・テストを自動化し、高コストな手動によるリグレッション・テストを排除する必要があります。さらに、本番環境への大規模な変更を管理するために企業が導入しているリリース計画や承認会議といった仕組みも、大半の変更においては不要になります。

ビジネス街をバックにスマホを持つ手

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

継続的デプロイメントのメリット

継続的デプロイメントは、以下を含む多数のメリットを組織にもたらします。

  • 品質の向上
  • 市場投入までの時間の短縮
  • 顧客体験の向上
  • コスト削減
  • チーム間の連携の強化
  • フィードバック・ループの高速化
品質の向上

継続的デプロイメントにおいて最も重要な要素である自動テストは、デプロイメント・パイプラインの各段階で実行されます。この機能により、デプロイメント全体の品質が向上します。たとえば、自動テストによって本番環境に到達する前にエラーのデバッグが可能になります。

市場投入までの時間の短縮

継続的デプロイメントは、アップデートやソフトウェアのリリースを迅速に提供するのに役立ちます。新しいアップデートがあらかじめ定義されたテストに合格すると、その後はシステムが自動的にエンド・ユーザーに配信します。

顧客体験の向上

自動テストにより、開発チームは新機能や改善を迅速かつ一貫してデプロイできるようになり、顧客体験の向上につながります。

コスト削減

デプロイメントを自動化することで、ボトルネックが解消され、手作業が削減されます。このプロセスにより、ダウンタイムの短縮を通じてコスト削減が可能になります。

チーム間の連携の強化

継続的デプロイメントにより、開発者は手動によるデプロイ作業ではなく、コードの記述やテストの実施により多くの時間を割けるようになります。また、すべてのアプリケーションと環境を一元的に把握できるビューを提供することで、チーム間のコラボレーションとコミュニケーションも促進されます。

フィードバック・ループの高速化

継続的デプロイメントは、開発者が頻繁にコード変更をリリースできるようにすることで、フィードバック・ループを加速させます。この機能により、ユーザーや利害関係者からのフィードバックを得るまでの時間が短縮されます。

継続的デプロイメントと継続的デリバリー

「継続的デプロイメント」と「継続的デリバリー」は同じように聞こえるかもしれませんが、頻繁なリリースに対するアプローチとしては異なるものです。

継続的デリバリーは、開発者がいつでも本番環境へリリースできるようにソフトウェアを構築する開発手法です。これを実現するために、継続的デリバリー・モデルでは本番環境に近いテスト環境を常に用意しておきます。

継続的デリバリーのソリューションで実行された新しいビルドは、自動的に品質保証用の自動テスト環境にデプロイされ、あらゆる種類のエラーや不整合が検出されます。コードがすべてのテストに合格した後、継続的デリバリーでは本番環境へのデプロイを承認するために人による介入が必要です。デプロイメント自体はその後、自動化によって実行されます。

継続的デプロイメントは、オートメーションをさらに一歩進め、手動による介入を不要にします。自動テストと開発者の信頼性が十分であると見なされているため、本番環境へのリリースに承認は必要ありません。テストに合格すれば、そのコードは承認されたものと見なされ、自動的に本番環境へデプロイされます。

継続的デプロイメントは、継続的デリバリーがうまく実施された結果として自然に到達する姿です。最終的には、手動による承認はほとんど、あるいはまったく価値を持たず、単にプロセスを遅らせる要因となります。その段階に達すると、手動承認は廃止され、継続的デリバリーは継続的デプロイメントへと移行します。

以下のビデオをご覧ください。IBM CloudのEric Minickが、継続的デプロイメントと継続的デリバリーの違いについて説明しています。

継続的デプロイメントと継続的統合

継続的デプロイメントをシームレスに実現するためのもう1つの重要な要素が、継続的統合(CI)です。これは、開発者が開発サイクル全体を通じて新しいコードをコード・ベースに統合していくソフトウェア開発プロセスです。

デプロイメント・プロセスの自動化を機能させるには、プロジェクトに関わるすべての開発者が、発生した変更を効率的に共有できる手段を持つ必要があります。継続的統合は、それを可能にします。

通常、同じソフトウェア開発プロジェクトで作業する場合、開発者はメインのコードブランチの個別のコピーを元に作業します。しかし、特に開発者が互いに独立して作業していると、変更をメインのコードベースにマージした後に、機能上の問題やバグが発生することがあります。独立して作業する期間が長くなるほど、そのリスクも高まります。

CIでは、すべての開発者が少なくとも1日に1回、自分のコード変更をリポジトリーにマージします。更新が行われるたびに、自動ビルド・テストが実行され、変更内容がメイン・ブランチと互換性を保っているかが確認されます。このプロセスは、統合上の問題をできるだけ早く検出するための安全策として機能します。

たとえば、ユニット・テストは個々のコンポーネントや関数を検証し、コードの動作に関する即時のフィードバックを提供します。統合テストは、ソフトウェア・コンポーネントやモジュール間の相互作用を評価し、適切に連携して動作していることを確認し、ユニット・テストが見逃す可能性のある問題を検出します。

IBM DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

CI/CDパイプラインとは

継続的統合/継続的デリバリー(CI/CD)パイプラインとは、頻繁かつ信頼性の高いソフトウェアの提供プロセスに重点を置いた、アジャイルなDevOpsワークフローです。この手法は線形ではなく反復的であり、DevOpsチームがコードの作成、統合、テストの実行、リリースの提供、ソフトウェアへの変更のデプロイを、リアルタイムかつ協調的に行うことを可能にします。

CI/CDにおける「CD」は混乱を招くことがあります。というのも、パイプラインのさらなる自動化手法を説明する際に、「CD」が継続的デプロイメントを指す場合もあるためです。

継続的デプロイメントのツールと機能

開発者は、高品質なソフトウェアの改良を継続的に開発・デプロイするために、適切なツールを使用する必要があります。このプロセスは、開発部門と運用部門の間の効率的なコミュニケーションを確保することで、効果的なDevOpsプラクティスを構築します。また、ソフトウェアのDelivery Pipelineにおけるエラーを最小限に抑える、あるいは完全に排除することができます。

以下は、継続的デプロイメントのワークフローで使用される最も重要なツールや機能の一部です。

バージョン管理

バージョン管理は、特定のプロジェクトの資産に対する変更履歴を追跡することで、継続的統合を支援します。「リビジョン管理」または「ソース管理」とも呼ばれるこの仕組みは、プロジェクトの更新や変更の可視性を高めるとともに、チームが場所や時間に関係なく協力して作業するのをサポートします。代表的なバージョン管理システム(VCS)には、Git、Bitbucket、AWS CodeCommitなどがあります。

コード・レビュー

一見シンプルに聞こえる「コード・レビュー」とは、現在のソース・コードをツールで検証するプロセスです。コード・レビューは、バグやコーディング上のエラーを発見し、それらの問題に対処した上でアップデートをデプロイできるようにすることで、ソフトウェアの整合性を高めるのに役立ちます。

継続的統合(CI)

CIは継続的デプロイメントの重要な要素であり、複数の開発者が同じプロジェクトで作業する際の開発上の障害を最小限に抑えるうえで大きな役割を果たします。さまざまな商用およびオープンソースのCIツールが存在し、それぞれがエンタープライズ向けソフトウェアのデプロイにおける特有の複雑さに対応しています。

構成管理

構成管理とは、すべてのソフトウェアおよびハードウェアが一貫した状態を維持できるようにするための戦略および管理手法です。この戦略には、すべてのサーバーストレージネットワーク、およびソフトウェアの適切な設定と自動化が含まれます。

リリースの自動化

アプリケーションのリリース自動化(またはアプリケーション・リリース・オーケストレーション)は、継続的デプロイメントを推進するために必要なすべての作業を自動化するうえで不可欠です。オーケストレーション・ツールは各プロセスを連携させ、新しい変更を本番環境に反映する前に、開発者がすべての重要な手順を確実に実行するよう支援します。これらのツールは構成管理プロセスと統合され、各プロジェクト環境で適切なプロビジョニングと最高レベルのパフォーマンスを確保します。

インフラストラクチャー監視

継続的デプロイメント・モデルを運用する際には、テスト環境やステージング環境に存在するデータを可視化できることが重要です。ITインフラストラクチャーの監視ツールは、アプリケーションのパフォーマンスを分析し、自身の変更が良い影響を与えているのか、それとも悪影響を及ぼしているのかを判断するのに役立ちます。

ロールバック数

新しいソフトウェアを環境にデプロイした際に、異常な動作が発生し、前のバージョンにロールバックする必要が生じることがあります。継続的デプロイメントには、強力なロールバック機能が求められます。組織は、ブルーグリーン・デプロイメント戦略を活用できます。これは、アプリケーションの異なるバージョンを実行するために、2つの分離された同一の環境を用意することで、ダウンタイムを最小限に抑え、ロールバックを容易にすることを目的としています。その他のロールバック戦略には、ローリング・デプロイメントやカナリア・デプロイメントなどがあります。

メトリクス

DevOpsチームは、継続的デプロイメントのサイクルにおけるプロセスを改善するためにメトリクスを活用します。たとえば、「デプロイメントの頻度(DF)」というメトリクスは、本番環境へのコード変更が行われる頻度を測定します。このメトリクスは、開発者がエンドユーザーにどれだけ迅速に新機能を提供できているかを評価するのに役立ちます。

継続的デプロイメントとKubernetes

Kubernetesは、継続的デプロイメントのパイプライン構築を大幅に強化できる、オープンソースのコンテナ・オーケストレーションプラットフォームです。柔軟性が高く、論理的で直感的なユーザー・インターフェースを備えていることから、Kubernetesは、サーバーの使用制限や障害によって生じる一般的な問題を軽減し、最新のインフラストラクチャーやマルチクラウド環境でのデプロイメントを支援します。

Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、オペレーションを自動化することで、DevOpsプロセスの俊敏性を高めるのに貢献します。モジュール設計を採用しているため、Kubernetesではサービス内の個々のポッドの変更や、ポッド間のシームレスな移行が可能です。この柔軟性により、開発チームはサーバーのダウンタイムを回避でき、マイクロサービスを実行する際にリソースを最大限に活用することが可能になります。

Kubernetesは、デプロイ前にアプリケーションおよびサービスの準備状況や全体的な健全性を検知できる、非常に信頼性の高いプラットフォームでもあります。

継続的デプロイメント・プラットフォーム

継続的デプロイメントおよび関連するCI/CDプラットフォームは、ソフトウェアのテストおよびデプロイメント・プロセスを自動化するための最先端のソリューションをエンタープライズ企業に提供します。これらの多くのプラットフォームには、人工知能(AI)機械学習(ML)といった技術が組み込まれており、ソフトウェアの開発およびデプロイメントのライフサイクルを大きく変革しています。たとえば、AIを活用した予測型パフォーマンス・ツールは、各種メトリクスを分析することで、デプロイメントをより迅速かつ効率的に、かつエラーの発生を抑えて実行できるようにします。

以下に示すのは、継続的デプロイメントおよびCI/CDパイプライン自動化のための主要なソフトウェア・プラットフォーム、サービス、およびツールの一部です。

  • アマゾンのAWS CodeDeploy
  • IBM® DevOps Accelerate(旧IBM UrbanCode Deploy)
  • Azure DevOps
  • GitHubアクション
  • GitLabのCI/CD
  • Jenkins
  • CircleCi

これらのプラットフォームとツールは、次の機能をサポートしています。

マルチクラウドのデプロイ

多くのデプロイ自動化プラットフォームには、開発者がカスタム・クラウド環境モデルを作成できるブループリント・コンポーネントが含まれています。これらのモデルにより、DevOpsチームはアプリケーションのデプロイメントをパブリッククラウドプライベートクラウドハイブリッドクラウド、またはマルチクラウド環境で視覚的に把握することができます。ブループリント設計ツールを使用することで、ユーザーはフルスタックのコンピューティング環境を作成、更新、分解でき、クラウド・オーケストレーションの完全な機能を活用できます。その後、開発者はすべての環境をプロビジョニングして、アプリケーション・コンポーネントを自動またはオンデマンドでデプロイすることが可能になります。

分散型オートメーション

デプロイメント・オートメーション・プラットフォームは、高い拡張性を備えており、ミッションクリティカルなアプリケーションやサービスの動的なデプロイをサポートします。

品質ゲートと承認

自動化されたテスト環境の正確性に依存できることは、継続的デプロイメントを成功させるうえで極めて重要です。ただし、一部の環境では、適切な情報を適切なタイミングで本番環境に反映させるために、手動承認を求める条件を設定することが必要となります。デプロイメント・オートメーション・プラットフォームは、管理者に対して継続的デプロイメント・プロセスに対するより高度な制御、可視性、および監査機能を提供するために、デプロイ承認やゲートを備えています。

テスト済みの統合

デプロイメント・オートメーション・プラットフォームは、独自のスクリプトの使用をサポートする一方で、デプロイメントプロセスの設計や管理を容易にするための、すぐに使えるプラグインも提供しています。テスト済みの統合機能を活用することで、開発者はあらかじめ構築され実績のある自動化機能を利用することができます。

関連ソリューション
IBM DevOps アクセラレート

オンプレミス、クラウド、またはメインフレームのあらゆるアプリケーションのソフトウェア配信を自動化します。

DevOps Accelerateの詳細はこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。

DevOpsソリューションの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

継続的な統合とデリバリーにより、DevOpsの可能性を解き放ち、安全なクラウドネイティブ・アプリケーションを構築、テスト、デプロイします。

DevOps ソリューションの詳細はこちら DevOpsの実際の動作を確認する