継続的デリバリーとは?

継続的デリバリーとは、ソフトウェアのすべての部分を、すぐに展開できる形式で、管理された短いサイクルで提供するソフトウェア開発のアプローチです。

従来、ソフトウェアをエンドユーザーに向けてリリースするためには、膨大な量の開発、テスト、修正を経る必要がありました。製品全体の開発を先行させてテストを行い、それをデプロイするというウォーターフォール型の手法は、非常に時間がかかるため、デプロイメントのサイクルが遅くなり、ユーザーエクスペリエンスも好ましくないものになっていました。

継続的デリバリーは、アジャイルソフトウェア革命の一環として生まれた、DevOps の中核をなす部分であり、CI/CD という大きな枠組みの中で機能します。継続的デリバリーでは、完全なパッケージを一度に作成するのではなく、テストなどの反復的な作業には高度な自動化ソリューションを使用しながら、本番環境に投入できるコードを構築するあらゆる側面を組み込んでいるため、開発者が小規模なソフトウェアの変更を、より一定した速さでリリースすることができます。状況によっては、コードを直接本番環境に導入することもあります。これは継続的デプロイメントとも呼ばれます。

これは、企業やソフトウェアベンダーにとって、次のような重要な利点となります。

デプロイメントリスクの低減

開発者が大規模なデプロイメントをリリースする際には、多くの問題が発生する可能性があります。継続的デリバリーでは、検証やトラブルシューティングが容易で、期待通りに機能しなかった場合の修正に要する時間が短くてすむ小さな変更に集中することによって、デプロイメントのリスクを抑制します。

進捗管理の精度の向上

継続的デリバリーでは、開発者の作業完了の判断を待つのではなく、アプリケーションオーナーやプロジェクトオーナーが、ソフトウェアのデリバリーサイクルを追跡することで進捗状況を容易に把握し、いつ、どのように本番環境やテスト環境へのデプロイメントを続けるのかを決定できます。場合によっては、継続的デリバリーのライフサイクルを通じて収集した情報をバリューストリーム管理ソリューションで活用して、チームの相対的な能力を把握し、ボトルネックを特定して取り除くことが望ましいこともあります。

リリースの迅速化

ソフトウェアのデプロイメントを事前に設定した開発段階を経て行う場合、個々の段階にかなりの時間を要する場合があります。継続的デリバリーでは、テストや修正のタスクを他の日常プロセスに組み込むことになるため、構築やプロビジョニングなどを自動化することで、負担を軽減することができます。これにより、開発のフェーズ数が減り、重複作業が大幅に減って、納期が大幅に短縮されます。実際、継続的デリバリーの特長は、開発したソフトウェアをいつでもリリースできることにあり、デリバリーに長い時間がかかる従来のソフトウェア開発に比べて大幅に改善されます。

フィードバックの改善

開発者が膨大な時間をかけて作ったものが、リリース後に効果がなかったり、評判が悪かったりすると、振り出しに戻ってしまい、その努力に見合うだけの成果が得られません。より短い間隔で頻繁にリリースすることで、テストやその他の問題をより早く発見することができます。また、アプリケーションユーザーからのフィードバックを早く頻繁に得ることができるため、開発者が必要に応じて軌道修正を行うことができます。

製品の改善

開発者は、デリバリーのライフサイクルを通じて信頼性の高いフィードバックを得ることで、機能やアイデアをテストし、不要なものや効果のないもの、ネガティブなユーザーエクスペリエンスを引き起こすものを排除して、製品を改善し、効率化することができます。

コスト削減

継続的デリバリーでは、自動化によって、従来のソフトウェア開発で問題となっていた固定費の多くが不要になります。これは、開発の初期段階とライフサイクル全体を通したコスト投資が少なくて済み、残ったコストに対するリターンが大きくなることを意味します。

従業員の満足度の向上

長い期間に及ぶ開発や迫り来るプロジェクトの締め切りは、開発チームを疲弊させます。逆に、小規模な修正やリリースであれば、他の業務と並行して簡単に管理することができます。継続的デリバリーは、ストレスの少ない職場環境を作り、燃え尽き症候群を防ぐだけでなく、開発者がユーザーとより直接的に関わり、自分の労力がどのように顧客に貢献しているかを正確に知ることができます。

継続的デリバリーは、一見すると継続的デプロイメントとよく似ています。しかし、どちらもソフトウェア開発におけるアジャイルアプローチの一部ではありますが、この 2 つのバリエーションには認識すべき微妙な違いがあります。

継続的デリバリーでは手動でのデプロイメント決定が必要

前述したように、継続的デリバリーでは、ソフトウェア開発に関わる多くのプロセスを自動化し、チームが製品に段階的、継続的に変更を加えることができます。しかし、継続的デリバリーが自動化できないのは、本番環境へのデプロイメントを承認する最終段階です。実施され、テスト環境に送られた変更は、通常、手動によるレビューと承認を経て、予定されたリリースの一部として全体がデプロイされます。

継続的デプロイメントにより本番アップデートを自動化

継続的デプロイメントは、自動化をさらに進めたもので、事前に定義されたスケジュールに沿って、または継続的デリバリーのプロセスからコードが配信されると同時に、アップデートを自動的に展開します。コードがデプロイメント期間を必要としない場合は、変更ガバナンス (使用されている場合) を信頼性の高い方法で自動化することによって、開発者が基本的に本番環境に直接アクセスでき、自分でアップデートを実行しなくても、定期的にアップデートを配信することができます。これにより、企業はいつでもより多くのデプロイメントをリリースできるようになり、大規模なリリースの手間を省くこともできます。ほとんどの企業では、継続的デプロイメントを阻害する要因として、業界の規制などによる強力なガバナンスが必要なことが挙げられます。このような企業への継続的デプロイメントの導入には、正式な変更管理プロセスなど、これまで手作業で行っていた承認を効果的に自動化できるかどうかが大きく影響します。

継続的デリバリーの全体的なコンセプトを理解するのは簡単です。つまり、時間のかかる開発プロセスを、自動化された小規模なタスクとリリースに細分化することです。しかし、その考え方を理解することと、その手法の実行方法を知ることは別の話です。継続的ソフトウェアデリバリーへの移行には、以下のことが必須条件となります。

文化的マインドセットを DevOps プラクティスに移行する

前述のソフトウェア開発におけるウォーターフォール型のアプローチは、開発チームの考え方やプロセスにまだ深く根付いているかもしれません。そのため、DevOps やアジャイル開発への文化的転換を図るには、大規模な計画と徹底したトレーニングが必要です。開発チームが注力しなければ、継続的デリバリーは成功しないでしょう。

DevOps と経営陣のコラボレーションを重視

DevOps への文化的シフトは、ソフトウェア開発の枠を超えて効果を発揮しなければなりません。迅速なフィードバックループと効果的な意思決定のためには、全員が正しいプロセスを十分に理解して、注力できるように、経営陣との明確なコラボレーションと調整が必要です。

効果的なセキュリティとコンプライアンスの確保

短期間でソフトウェアをリリースしても、最終製品がセキュリティやコンプライアンスの要求に応えられなければ、企業にとってあまり意味がありません。幸いなことに、継続的デリバリーで使用されている自動化ツールに対するアプローチの多くは、デプロイメントに伴うセキュリティリスクを最小限に抑えるために使用できます。専門のセキュリティチームが決定したポリシーを使用する自動コードスキャンツールが、パイプラインの一部となります。自動化された変更管理が使用されている場合、このスキャンが正常に完了すると、変更要求を自動的に作成して承認するための情報の一部となります。

継続的デリバリーを用いてエンドツーエンドの最適なプロセスを確立するには、いくつかの重要な原則に従う必要があります。

信頼できる一連のプロセス構築

継続的デリバリーの中心となるのは、効率的なプロセスです。そのため、これらのプロセスによって最善のデプロイメントサイクルを促進するためには、どの環境でも一貫していて、反復可能でなければなりません。多くの企業では、開発者が継続的デリバリーに参加する際に使用するプラットフォームとプロセスの定義を支援する役割が定められています。

インフラストラクチャの自動化

継続的デリバリーは、自動化なくして、少なくとも効果的な形では存在しません。手動でのプロセスは時間がかかり、反復が難しいため、企業はインフラストラクチャの自動化を可能な限り進めるべきです。これは、コードやコード品質のテストでは当たり前のことになっています。DevSecOps の登場により、同じ自動化がセキュリティの脆弱性解消のサポートにも広がりました。現在、この種の自動化は、構成の変更 (URL、データベースの文字列、その他あらゆる種類のアプリケーション、インフラストラクチャ、環境の構成の更新など) が適切であることをポリシーで検証する構成データ管理などの分野にも拡大しています。規制の厳しい環境では、デリバリーパイプラインで使用されているツールの情報を利用する場合、変更管理の最終的なガバナンス手順を自動化することができるようになりました。

全体のバージョニング

継続的に製品を提供する企業が最も避けたいのは、何かが正しく構築されていないことが明らかになったときに、最初からやり直すことです。バージョン管理を行うことにより、開発者がコード内のすべての変更を追跡、管理することができるので、最新のアップデートで問題が発生したやむを得ない場合には、時間をさかのぼって以前のバージョンに戻すだけですみます。これが、継続的で高頻度の改善のためのより強固な基盤となります。

難しいタスクの優先

効果的な DevOps では、困難で時間のかかる職務を優先して先に対処するため、プロセスの最適化やタスクの処理は時間とともにより容易になるはずです。開発サイクルを前倒ししてから、他の項目の完成度を高めることに専念してください。アジャイルプランニングは、ロードマップ、シナリオ、ビッグルームプランニング、統一されたバックログなどの機能を備え、この分野で大きく進歩しました。

問題の即時解決

アジャイルな企業は、非常に難しいタスクの優先と同様に、バグやその他の問題が発生した場合の対処と解決が可能でなければなりません。これにより、製品が継続的に改善されるだけでなく、問題がまだ初期段階にあるうちに解決することで、経費の削減にもつながります。この分野では人工知能が大いに活用されています。AI 運用ソリューションはよりプロアクティブになりつつあり、ユーザーに影響が及ぶ前に問題を特定して、解決することが可能です。

責任の共有

継続的デリバリーを行うには、関係者全員が同じ考えを持ち、共通の目標に向かって努力する必要があります。言い換えれば、製品に対する個人の責任は、自分のタスクが完了した時点で終わるものではないということです。この原則では、説明責任の観点から文化を変えることが求められます。ここで情報をある程度一元化することで、コラボレーションが可能になります。アイデア創出から本番稼動までのプロセス全体をリンクしたデータモデルによって、デリバリーに関わるすべての人が、何が起きているのか、そしてその理由を理解することができます。

完了の正確な定義

従来の開発では、個人、チーム、部門ごとにタスクが細分化されていたため、リリース完了の定義が大きく異なることがよく起こっていました。責任を共有するには、目的を共有する必要があり、関係者全員が、デリバリーに成功するまでは、どの機能も完成したことにはならないという認識を持つ必要があります。

常時改善

反復アプローチは、開発期間の大幅な短縮につながりますが、その真価は、企業が製品を改善する際に発揮されます。効果的なプロセスを自動化し、不要なタスクを削減または修正し、バグやその他の問題を常時解決することで、企業はより再現性の高い、効率的な手法を生み出すことができます。そこで自動化が鍵となります。効果的で高性能のソフトウェアのリリースが可能になります。

ServiceNow IT management ソリューションは、あらゆる企業の継続的デリバリーのイニシアチブを効果的にサポートします。

ServiceNow DevOps ソリューションを使ってみましょう。高性能でアクセスが容易な受賞歴のある Now Platform を使用して、ソフトウェア開発とデプロイメントを迅速化し、既存のツールチェーンに関するインサイトを得、つながりを改善することができます。組み込みの自動化オプションを使用すれば、変更の作成、追跡、承認のタスクがプロセスのボトルネックになることがなくなります。最初から最後まで監査証跡を詳細に保つことで、リスクを最小限に抑えるとともに、欠かせないデータを一元化された場所に用意して利用することができます。

さらに ServiceNow の Scaled Agile Framework (SAFe) アプリケーションを使用して、複雑なソフトウェアイニシアチブにアジャイル原則を適用します。このアプリケーションには、ビジュアルダッシュボード、高度なポートフォリオプランニング、色分けによるタスクの優先順位付け、詳細なプランニングとモニタリングのオプション、一元化されたアクセスしやすい SAFe ストーリー、SAFe 機能、インシデント問題などのバックログが組み込まれています。

ServiceNow は、効果的な継続的デリバリーを実現するためのパートナーとなります。実際に体験して、御社でのアプリケーションの作成とデリバリーを変革してください。

ビジネスに合わせて拡張できる機能

全社的に DevOps を有効活用します。迅速化によるリスクを取り除き、IT 運用と開発の間に生じる摩擦を最小限に抑えます。