継続的統合/継続的デリバリー(CI/CD)は、ソフトウェアの開発、テスト、提供サイクルを自動化および合理化する一連のプラクティスです。
CI/CDは、より迅速で信頼性の高いコード統合、ソフトウェアのリリース、アップグレードを可能にする最新の開発フレームワークを組織に提供します。CI/CDアプローチは、CI/CDパイプラインと呼ばれるオートメーション・パイプラインを基盤とするもので、次の3つの主要プロセスで構成されます。
CI/CDは、ソフトウェア開発のプラクティスの大幅なモダナイゼーションを表し、手動のワークフローと厳密で連続的なフェーズを必要としていました。従来の方法は、小規模な開発プロジェクト、安定した要件を持つプロジェクト、または規制環境で予測可能性が求められるプロジェクトに適していました。
しかし、今日のソフトウェア・アプリケーションは動きや変化が急速に進んでいます。これらはクラウド・ベースの環境に存在し、摩擦のないコラボレーション、迅速なフィードバック、変化する要件への適応性を促進する開発アプローチを必要としています。
CI/CDツールはまさにそれを提供します。これらにより、開発者は高速でアジャイル、かつ信頼性の高いソフトウェア・アプリケーションを構築できるようになります。これは、顧客のニーズを満たし、競合他社に対する競争上の優位性を維持するために不可欠です。
CI/CDストラテジーとツールにより、開発者は従来の開発に伴う煩雑で多くの場合退屈な手動プロセスから脱却できます。
従来の開発は線形かつ順次的なプロセスに従い、各フェーズ間に長いギャップがある場合でも、各フェーズ(要件収集、設計、コーディング、手動テスト、デプロイメント)は、次のフェーズが始まる前に完了する必要があります。
各開発者は、アプリやサービスの新たな反復にコードを手動で統合する責任を負っていました。異なるコード同士が常にうまく連携するとは限らず、開発者は異なるタイムラインで(場合によっては土壇場で)変更を統合するために、特に大規模な開発チームでは、統合に時間がかかり、エラーが発生しやすいプロセスでした。
ソフトウェアのテストもまれにしか行われていませんでした。チームは通常、大規模なバッチ更新を一度に(多くの場合、コードの実装後に)実装していたため、不具合が見逃され、コードベースに蓄積されることがありました。問題が発生すると、開発者はどの変更が問題を引き起こしたのかを把握するのに苦労していました。
その成果として、チームはより困難なデバッグや品質保証タスクに直面し、失敗率が高まり、コードのリリースも遅くなりました。ユーザーはソフトウェアのエラーや不具合の数を増やすことができました。そして企業はプロセスの非効率によって収益を失いました。
CI/CDは、ソフトウェアの開発、テスト、リリースのほとんどの側面を自動化します。自動化されたパイプラインは、開発ライフサイクル全体を通じてIntegration Testing、テスト、デプロイメントを実施し、パイプラインの効率と信頼性を向上させます。
コード・変更は継続的かつ段階的に共有リポジトリーにマージされ、各コミット後に自動的にビルドとテストが行われ、素早くデプロイされます(場合によっては1日に複数回)。小さな変更と頻繁なコードのコミットにより、開発者は問題を早期に発見し、ロールバックをより簡単に実行できます。
CI/CDツールを使用すると、チームは各コミットの成果をすぐに把握でき、全員がすべてのビルド、テスト、デプロイメントのステータスを確認できます。これらの主要な機能は、開発チームとオペレーション・チームのパイプラインの透明性を高め、チーム間のコラボレーションを簡素化するのに役立ちます。
| 主な機能 | 従来の開発 | CI/CD |
| パイプライン・フロー | 直線的、段階的 | 継続的、統合的 |
| リリース頻度 | 四半期ごと、年ごと | 毎日、毎週 |
| ビルド、テスト、デプロイ | 手動、反復的 | 自動化で再現可能 |
| テスト | 開発完了後 | 自動化、連続的 |
| エラー検知 | 遅いサイクルで、ロールバックが困難 | 早期かつ継続的、容易なロールバック |
| フィードバック | 節目の段階でゆっくり | 即時かつ継続的 |
| コラボレーション | サイロ化された役割、引き継ぎ | 責任の共有、オープンなステータス |
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
継続的統合は、CI/CDパイプラインの最初の部分です。これにより、DevOpsチームはソフトウェア・アプリケーションを継続的に改善し、一貫したフィードバックを受け取り、ソフトウェア性能に影響を与える前にエラーを検知して修正プログラムし、より予測可能な納期でより高品質のソフトウェアを提供できます。
開発者は、コード変更をバージョン管理システム(Gitなど)の共有ブランチやメイン・ブランチに送信して、コードの変更を長期にわたって追跡します。送信されたこのテストにより、CIツールがトリガーされて、更新されたコード・ベースの「ビルド」が実行されます。CIシステムは、新しいコードを取得し、既存のコードとコンパイルを実行し、設定ファイル、ライブラリ、その他の参考情報などの依存関係とともにパッケージ化を行います。これが「ビルド」を構成します。
テスト・ツールは、「ビルド・アーティファクト」(さらなるテストまたは運用環境に渡される結果のファイル)が作成される前に、一連のテストを実行してビルドを検証します。パイプラインのこの次の工程は、継続的デリバリーと呼ばれます。
継続的デリバリー(CD)は、継続的統合が中断したところから再開し、さらなるテストのために、必要なすべてのインフラストラクチャー環境へのアプリケーションと検証済みのコード・ベースの変更(更新、バグ修正プログラム、さらには新主要な機能)のデリバリーを自動化します。
統合テストと検証の段階に合格したコード・ビルドはパッケージ化されてコード・リポジトリーに配信され、コード・パッケージはデプロイ可能な状態で一元化して保管されます。CDワークフローは、ソフトウェアと、接続されたアプリケーション・プログラミング・インターフェース(API)などの依存関係の両方をテストし、エラーを特定して修正します。
コードは、ソフトウェアがさまざまなシナリオで動作することを確認するために検証されます。検証に合格すると、最新のビルドが利用可能であることがDevOpsチームに通知されます。チーム・メンバーには、新しいビルドについてのフィードバックを提供し、変更についての最終提案を行う機会があります。
ほとんどのCDプロセスは自動化されていますが、CDでは、ライブ本番環境でエンドユーザーに公開する前に、チームがビルドを手動で承認する必要があります。主要な機能により、開発者はリスクを管理したソフトウェア・リリースを実行し、ビルドを出荷可能な状態に保ち、本番前にバグやテストの失敗を確実に発見することができます。
継続的デプロイメントは、承認されたすべての変更を、人間が介入することなく自動的に本番環境にデプロイすることで、CDをさらに一歩進めます。この時点で、コードの修正によって必要なテスト・プロトコルはすべて合格しており、リリース・プロセスの準備が整っています。
コード更新がテスト、検証、承認されると、継続的デプロイメント・システムはソフトウェア・アーティファクトを運用前のステージング環境、またはユーザーがアクセスできる公開サーバーや配布プラットフォーム(アプリケーション保管など)に動きします。
継続的デプロイメント・ツールは、アプリケーションやITポートフォリオの拡張を目指す企業にさまざまなメリットをもたらします。何よりも、コーディングと顧客への価値提供との間の遅延を最小限に抑えることで、市場投入までの時間を短縮しています。
DevOpsチームは、主要な機能フラグなどの他のデプロイメント制御ツールで継続的デプロイメントサービスを補完することがあります。これにより、開発者はソースコードを変更したり再デプロイしたりすることなく、主要な機能をオンまたはオフにできます。
CI/CDパイプラインとは、コードを継続的に統合、テスト、デプロイすることでソフトウェア開発を合理化する自動化されたワークフローです。開発から本番環境までコードをエンドツーエンドで動き、ソフトウェア更新を迅速、安全、確実に配信できるようにします。
一般的なCI/CDパイプラインは、ソフトウェア・リリース・ライフサイクル全体にわたる次のような自動化されたプロセスとステージで構成されています。
開発者はバージョン管理システムに変更をコミットし、プロジェクトをパイプラインに入れます。ソーシング段階では、分岐ストラテジーの策定や初期品質チェックの実行も含まれる場合があります。
システムはコードをコンパイルし、デプロイ可能な成果物にビルドします。また、チェック(プログラムを実行せずにコードを分析およびデバッグする静的分析など)を実行して、コードが正しくコンパイルされ、さらなるテストの準備が整っていることを確認します。
自動テストはアーティファクトに対して実行され、コードが回帰なく正しく動作することをVerifyします。たとえば、ユニット・テストは個々のコンポーネントや関数を検証し、コードが期待どおりに動作しているかどうかに関する即時のフィードバックを提供します。
テストされたビルドは、最終検証のために、ライブ環境をミラーリングする本番前ステージング環境にデプロイされます。すべてのアーティファクトがステージングを経るわけではありませんが、ステージングは、アプリケーションがエンドユーザーにリリースされる前に、現実世界の条件下で検証される最終テストの場として機能します。
たとえば、開発者はブルー・グリーン・デプロイメントを実行する場合があります。このデプロイメントではアプリが2つの並行した本番環境にデプロイされ、各環境でアプリケーションの異なるリリースが実行されます。
「青」の環境はライブアプリケーションを実行し、「緑」の環境は新しいアプリのテストと検証を行います。新しいバージョンが合格すると、トラフィックはグリーン環境にルーティングされ、ここがライブ環境になり、ブルー環境はアイドル状態のままですが、ロールバックや後続バージョンのテストに対応するために利用可能です。
成功したビルドはデプロイメント・プロセスに動きし、本番環境にプッシュされ、エンド・ユーザーに更新や主要な機能を提供します。
デプロイメント後、監視ツールは実際に使用されているソフトウェア・アプリケーションを継続的に追跡し、システムの性能、安定性、セキュリティーを維持します。監視ツールはコードの問題を検知するのに役立ち、DevOpsチームは問題に迅速に所在地し、今後のリリースを最適化できます。
CI/CDはDevOpsの基本部分ですが、DevOpsプラクティスのサブセットにすぎません。
DevOpsは、ソフトウェア開発プロセスと、ソフトウェア開発チームとITオペレーション・チーム間の調整と協力に向けた文化的転換の両方を概説するフレームワークです。伝統的に、これら2つのグループは互いに別々に運営されていました。DevOps手法では、両者は共通のツールとプラクティスを用いて共同作業チームとして連携します。
DevOpsアプローチは、責任の共有、継続的な協働、プロセスの最適化を促進します。ソフトウェアDelivery Pipelineに加えて、その対象範囲はインフラストラクチャーとプラットフォーム・エンジニアリング、セキュリティー、コンプライアンス、ガバナンス、リスク管理にも及びます。
対照的に、CI/CDはソフトウェア・アプリケーションの構築、テスト、デプロイ、改善に特に重点を置いています。これらのプロセスを自動化することで、DevOpsが強化され、組織はコード品質、テスト・カバレッジ、依存関係管理、オブザーバビリティー・メトリクスを改善し、最終的には、より強力なソフトウェアをより頻繁にリリースできるようになります。
CI/CDセキュリティーには、パイプライン全体にセキュリティーとコンプライアンスの対策を組み込むことができるプラクティス、プロセス、テクノロジーが必要です。
従来の開発モデルでは、開発サイクルの最後にセキュリティーがソフトウェアに追加されることがよくありました。しかし、クラウドプラットフォーム、マイクロサービス・アーキテクチャー、コンテナ化されたアプリケーションの進歩は、ソフトウェア開発ライフサイクルを変化させ(加速させ)、従来のセキュリティ戦略を時代遅れにしました。
そこでDevSecOpsの登場です。
DevSecOps(開発、セキュリティ、オペレーションの略)は、サイバーセキュリティーのアーキテクトとエンジニアをDevOpsストラテジーに組み込み、スタック内のすべてのアプリ・コンポーネントと構成項目がプロアクティブにパッチされ、セキュリティで保護され、文書化されていることを確認します。セキュリティー・プロトコルを開発パイプラインの右側(完了時)から左側(開始時)にシフトさせる開発手法です。
シフトレフトでは、チーム・メンバーは最初からセキュリティー・プロトコル(データ暗号化、インプット検証、ロールベースのアクセス制御、多要素認証など)を実装します。シフトレフトすることで、DevOpsチームは、サイバー犯罪者が脆弱性をエクスプロイトしたり、ソフトウェアの機能を妨害したりする前に、セキュリティの脆弱性を迅速に特定し、修正することができます。
DevSecOpsには「シフトライト」アクティビティも組み込まれており、セキュリティー・プラクティスをデプロイメント後の本番環境に拡張します。シフトライト・プラクティスでは、現実世界の状況下でランタイム時にアプリケーションを監視、テスト、保護することが優先されます。本番環境で発見されたセキュリティー問題が初期の開発フェーズに役立つ継続的なフィードバック・ループを作成することで、シフトレフト・セキュリティーを補完します。
シフトレフト・セキュリティーとシフトライト・セキュリティーを併用することで、企業はアプリケーションのライフサイクルのあらゆる段階にセキュリティー管理を組み込むことができます。この二重の「シフトエブリウェア」ストラテジーにより、DevOpsチームは早期の予防とデプロイメント後の脅威の検知と対応の両方を実装でき、全体的なセキュリティー体制を強化し、継続的な改善を推進できます。
CI/CDパイプラインでソフトウェア・アプリケーションが構築、管理、保護される方法には、複数の重要なトレンドとテクノロジーが影響しています。
AIを活用したCI/CDソリューションは、開発者がよりダイナミックで、よりセキュアで、よりスケーラブルなアプリケーションを構築するのに役立ちます。
組織は、AIやMLツールを使ってソフトウェアコードをリアルタイムで継続的に監視し、セキュリティー・リスクや品質問題を特定することができます。これらのツールが異常を検知すると、自動ワークフローをトリガーして、問題に所在地ことができます。そのようなツールは、たとえば、失敗したサービスを再起動したり、ユーザー需要の増加に対応するためにより多くの参考情報をプロビジョニングしたりします。
また、静的なしきい値ベースの異常検知方法とは異なり、AIモデルはコンテキスト・データと履歴データを活用して、パイプラインの潜在的な障害を事前に予測します。Forecasting主要な機能は、DevOpsチームがアプリケーション管理に対してプロアクティブなアプローチを取ることを可能にし、ダウンタイムやシステム停止を未然に防ぐことができます。
さらに、MLアルゴリズムは、チームが継続的なテスト・プロセスを最適化するのに役立ちます。たとえば、組織はMLツールを使用して、不安定なテスト(予測できない合格または失敗が発生するテスト)を特定して修正し、コードの変更、過去の障害、ユーザーの行動を分析することでテストケースの生成を自動化できます。IDCによると、90%以上の企業が、ソフトウェア・テストの実践において、AIおよびMLツールの利用、実験、または利用拡大に取り組んでいます。
インフラストラクチャーのプロビジョニング(専門スタッフによるハードウェアのセットアップ、OSのインストール、ネットワークの構成を含む)はボトルネックを引き起こす可能性があります。開発者はアプリケーション・コードを数分でデプロイできますが、インフラストラクチャーのセットアップに数時間から数日かかる場合があります。
インフラストラクチャー・アズ・コード(IaC)とは、「手動プロセスではなく構成ファイルを使用することで、ITインフラストラクチャのプロビジョニングと管理を自動化するDevOpsの手法」です。IaCはインフラストラクチャーをソフトウェアとして扱うため、インフラストラクチャーはソフトウェア開発の速度で動きことができます。
チームはIaCを使用して、アプリケーション・コードに使用するのと同じテンプレートとプラクティスを適用することで、インフラストラクチャーのバージョン管理、テスト、デプロイを行うことができます。実際、インフラストラクチャー・コードとアプリケーション・コードは、(異種のプロセスを使用するのではなく)並行してテスト、検証、デプロイできます。
開発者は、サンドボックス環境(チームがライブ・アプリケーションに影響を与えることなくコードをテストおよび実行できる安全で分離された環境)と本番環境をオンデマンドで迅速にプロビジョニングできます。QAチームは、一貫した構成を使って、テスト環境を即座に立ち上げることができます。オペレーション・チームは、ユーザー受け入れとセキュリティーのテストのためのインフラストラクチャーを自動化できます。
そして、新しいコードがテストに合格すると、アプリケーションとそのインフラストラクチャーの両方を一緒にデプロイできるため、主要な機能の提供が迅速化され、デプロイメントがより頻繁になります。
GitOpsは、開発者中心のコーディング・プラクティス(プル・リクエストやコード・レビューなど)をインフラ・オペレーションやソフトウェア構成プラクティスに適用することで、ソフトウェア・デリバリーの高速化を支援する最新のオペレーション・フレームワークです。
IaCはGitOpsの中心です。IaCはコードを通じてインフラストラクチャーを定義および管理し、システムの望ましい状態を宣言します。これらのIaC構成は、多くの場合、Gitベースのプラットフォーム(GitHubなど)に保管され、Gitリポジトリーは、ストレージとバージョン管理の信頼できる唯一の情報源として機能します。CI/CDパイプラインでは、自動エージェントがリポジトリーの変更を継続的にチェックし、その構成をライブ(デプロイ済み)システムに適用します。
たとえば、DevOpsチームが新しいマイクロサービスをデプロイしたい場合、Git設定ファイルに必要な変更を加えます。デプロイメント・ツールは、メイン・コード・ブランチとマージされる前に、更新をレビューおよび検証します。その後、CI/CDパイプラインは、デプロイされた環境がリポジトリーの定義と常に一致するように、ライブインフラ(たとえばKubernetesクラスターまたはコンテナ)に変更を適用します。
GitOpsを使用すると、チームはGitツールによる不一致を迅速に検知して修正できるため、コード更新を1日に複数回デプロイできます。そのため、GitOpsにより、DevOpsチームは手動介入をさらに減らし、CI/CDパイプラインの複雑さを最小限に抑えることができます。
DevOps環境であっても、多くのソフトウェア開発者は、特に手動で反復的なタスクを完了する必要がある場合、DevOpsの権限下にある作業のダイバーシティーと量に圧倒されてしまいます。開発者の4分の3超が、時間の少なくとも30%を、そのような退屈な作業に費やしています。
サーバーレス・コンピューティングは、開発者からインフラストラクチャー管理を抽象化する開発環境および実行モデルです。クラウド・サービス・プロバイダーは、すべてのサーバー、バックエンド・インフラストラクチャー・コンポーネント、ランタイム環境をプロビジョニングおよび管理するため、開発者はアプリケーション・コードに集中できます。
サーバーレス・プラットフォームは、コードのコミットやプル・リクエストによって自動化されたビルド、テスト、デプロイメントのステップがトリガーされるイベント駆動型ワークフローをサポートしており、CI/CDパイプラインの自動化をさらに強化します。
CI/CDシステムは、組織に次のようなさまざまなメリットをもたらします。
AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。
ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。