DevOps とは

DevOps は開発 (Dev) と運用 (Ops) を組み合わせて、アプリケーションの計画、開発、配信、運用において人、プロセス、テクノロジーを統合します。 DevOps により、開発、IT 運用、品質エンジニアリング、セキュリティなど、これまでサイロ化されていた役割間の調整とコラボレーションが可能になります。

チームは、DevOps の文化、実践方法、ツールを採用して、構築するアプリケーションの信頼性を高め、顧客のニーズによりよく対応し、ビジネス目標をより迅速に達成します。 DevOps は、より優れた、より信頼性の高い製品を生産することで、チームが顧客に継続的に価値を提供できるように支援します。

DevOps とアプリケーション ライフサイクル

DevOps は、計画開発配信運用の各フェーズを通じて、アプリケーション ライフサイクルに影響を与えます。 各フェーズは他のフェーズに依存しており、フェーズは役割固有ではありません。 DevOps 文化には、各フェーズのすべての役割がある程度関与します。

次の図は、DevOps アプリケーションのライフスタイルのフェーズを示しています。

Conceptual diagram that illustrates the DevOps application lifecycle.

DevOpsの目標とメリット

チームが DevOps の文化、実践、ツールを採用すると、驚くべきことを達成できます。

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

効率の向上、チームのコラボレーションの改善、自動化ツール、継続的な導入により、チームは製品の発売から市場投入までの時間を迅速に短縮できます。

市場と競争に適応する

DevOps 文化では、チームが顧客第一を重視することが求められます。 俊敏性、チームのコラボレーション、顧客体験の重視を組み合わせることで、チームは継続的に顧客に価値を提供し、市場での競争力を高めることができます。

システムの安定性と信頼性を維持する

継続的な改善手法を採用することで、チームは展開する製品とサービスの安定性と信頼性を向上させることができます。 これらの実践は、失敗とリスクを軽減するのに役立ちます。

平均回復時間を短縮する

平均復旧時間 メトリックは、障害または侵害から復旧するまでにかかる時間を示します。 ソフトウェアの障害、セキュリティ侵害、継続的な改善計画を管理するには、チームはこの指標を測定し、改善するように取り組む必要があります。

DevOps文化を採用する

DevOps を完全に実装するには、DevOps 文化を採用する必要があります。 DevOps 文化を育むには、人々の働き方やコラボレーションの方法を大きく変える必要があります。 組織が DevOps 文化に取り組むと、高いパフォーマンスを発揮するチームが進化するための環境が構築されます。 DevOps プラクティスを導入すると、テクノロジーを通じてプロセスが自動化および最適化されますが、組織とその従業員内で DevOps 文化に移行しない限り、DevOps のメリットを最大限に得ることはできません。

次の画像は、Microsoft のライブ サイト文化の重要な側面を捉えています。

Diagram of Microsoft's live site culture.

次のプラクティスは、DevOps 文化の重要な要素です。

  • コラボレーション、可視性、連携: 健全な DevOps 文化の特徴は、チーム間のコラボレーションです。 コラボレーションは可視化から始まります。 開発チーム、IT チーム、その他のチームは、DevOps プロセス、優先順位、懸念事項を互いに共有する必要があります。 協力して仕事を計画することで、ビジネスに関連する目標と成功の尺度をより適切に調整できるようになります。
  • 範囲と説明責任の変化: チームが連携するにつれて、チームは責任を持ち、自分たちの役割の中心となるフェーズだけでなく、他のライフサイクルのフェーズにも関与するようになります。 たとえば、開発者は開発フェーズにおけるイノベーションと品質管理だけに責任を負うのではなく、運用フェーズにおけるパフォーマンスと安定性に関する変更にも責任を負います。 同じように、IT 運用者は計画や開発フェーズでのガバナンス、セキュリティ、コンプライアンスにも関わるようにします。
  • リリース サイクルの短縮: ソフトウェアを短いサイクルでリリースすることで、DevOps チームの機敏性を維持します。 リリース サイクルを短くすることで、進行が段階的になり、計画とリスク管理が簡単になります。また、システムの安定性に与える影響を減らすことにもつながります。 リリース サイクルを短くすると、組織は常に進化する顧客のニーズと競争に対するプレッシャーに適応して対応することができます。
  • 継続的な学習: 高いパフォーマンスを発揮する DevOps チームは、成長の考え方を確立します。 彼らはすぐに失敗し、学んだことをプロセスに組み込んでいます。 彼らは継続的に改善し、顧客満足度を高め、イノベーションと市場適応性を加速するよう努めています。

DevOps プラクティスを実装する

DevOps を実装するには、アプリケーションのライフサイクル全体を通じて DevOps プラクティス (以降のセクションで説明) に従ってください。 特定のフェーズを加速、自動化、改善するのに役立つプラクティスもあれば、 複数のフェーズにまたがり、チームがシームレスにプロセスを作成できるようにして生産性を高めるプラクティスもあります。

継続的インテグレーションと継続的デリバリー (CI/CD)

継続的インテグレーション (CI) は、開発チームがコードを自動化、マージ、テストするために使用する手法です。 CI は、開発サイクルの早い段階でバグを検出するのに役立ちます。これにより、修正コストが削減されます。 自動テストは、品質を保証するために CI プロセスの一環として実行されます。 CI システムでは、成果物を生成し、それをリリース プロセスにフィードして頻繁なデプロイを促進します。

継続的デリバリー (CD) は、コードがビルドされてテストされ、1 つ以上のテストおよび運用環境にデプロイされるプロセスです。 複数の環境にデプロイしてテストすることにより、品質が向上します。 CD システムでは、インフラストラクチャやアプリなどのデプロイ可能な成果物が生成されます。 自動リリース プロセスでは、これらの成果物を利用して、新しいバージョンと修正プログラムを既存のシステムにリリースします。 アラートを監視および送信するシステムは、CD プロセス全体の可視性を高めるために継続的に実行されます。

バージョン コントロール

バージョン コントロールはバージョンでコーディングを管理するプラクティスで、改訂番号と変更履歴を追跡することで、コードを簡単にレビューして回復することができます。 この実践は通常、Git などのバージョン管理システムを使用して実装され、複数の開発者が共同でコードを作成できるようになります。 これらのシステムでは、同じファイルで起こったコード変更のマージ、競合の処理、変更内容を以前に状態にロール バックするなどのわかりやすいプロセスが提供されます。

バージョン コントロールの使用は DevOps プラクティスの基礎で、開発チームが共同作業し、コーディング タスクをチーム メンバー間で分割し、すべてのコードを保存して、必要に応じて簡単に回復することができます。 またバージョン コントロールは、継続的インテグレーションや Infrastructure as Code などのプラクティスでも必須の要素です。

アジャイルのソフトウェア開発

アジャイルは、チーム コラボレーション、顧客とユーザーのフィードバック、短いリリース サイクルで変化する高い適応性を重視するソフトウェアの開発方法です。 アジャイルを実践するチームでは、変更と改善を顧客に継続的に提供し、顧客からのフィードバックを収集し、顧客の要望やニーズに基づいて学習し、調整します。 アジャイルは本質的に、連続的なフェーズで定義される長いリリース サイクルが含まれる従来型のフレームワーク (ウォーターフォールなど) とは異なります。 かんばんとスクラムは、アジャイルに関連して最も人気のあるフレームワークです。

コードとしてのインフラストラクチャ

Infrastructure as Code では、システムのリソースとトポロジを分かりやすい方法で定義します。チームは、コーディングのようにリソースを管理できます。 これらの定義はバージョン コントロール システムで保存およびバージョン管理され、これもコーディングのようにレビューしたり元に戻したりできます。

Infrastructure as Code を実践することにより、チームは信頼でき、反復可能で、制御された方法でシステム リソースをデプロイできます。 Infrastructure as Code はまた、デプロイの自動化にも役立ち、ヒューマン エラーのリスクを減らします。これは特に、複雑な大規模環境で有効です。 この環境デプロイに対する反復可能で信頼できるソリューションにより、チームはデプロイを管理したり、運用環境とそっくりの環境をテストしたりできます。 さらに、さまざまなデータ センターやクラウド プラットフォームに対して、より簡単かつ効率的に環境を複製できるようになりました。

構成管理

構成管理とは、サーバー、仮想マシン、データベースなどのシステム リソースの状態を管理することを指します。 構成管理ツールを使用すると、チームは制御されたシステム的な方法で変更内容をロール アウトすることができるため、システム構成の変更に関連するリスクを減らすことができます。 チームは構成管理ツールを使用してシステムの状態を追跡し、構成のずれを防ぎます。時間が経つにつれ、システム リソースの構成は定義された望ましい状態からずれていくからです。

コードとしてのインフラストラクチャに加えて、システムの定義と構成をテンプレート化して自動化することも簡単で、チームが複雑な環境を大規模に運用するのに役立ちます。

継続的な監視

継続的な監視とは、アプリケーション スタック全体のパフォーマンスと健全性をリアルタイムで完全に把握できることを意味します。 この可視性は、アプリケーションを実行する基盤となるインフラストラクチャから上位レベルのソフトウェア コンポーネントにまで及びます。 可視性は、テレメトリとメタデータの収集と、オペレータの注意を必要とする事前定義された条件に対するアラートの設定によって実現されます。 テレメトリはイベント データとシステムのさまざまな部分から収集されたログから構成されます。イベント データやログは、分析および検索できる場所に保管されます。

高パフォーマンスの DevOps チームは、アクションにつながり、意味のあるアラートを設定し、豊富なテレメトリを収集することで、大量のデータから分析情報を引き出せるようにします。 このような分析情報により、チームは問題をリアルタイムで軽減し、将来の開発サイクルにおいてアプリケーションをどのように改善すればよいかを確認できます。

計画

計画段階では、DevOps チームは、構築する予定のアプリケーションとシステムの機能を構想、定義、説明します。 チームは、単一の製品から複数の製品ポートフォリオまで、低レベルおよび高レベルの粒度でタスクの進捗状況を追跡します。 チームは次の DevOps プラクティスを使用して、アジリティと可視性を備えた計画を立てます。

Microsoft が社内のソフトウェア チーム全体で DevOps 計画をサポートするために採用したいくつかの教訓と実践方法の概要については、「Microsoft が DevOps で計画する方法」を参照してください。

開発

開発フェーズには、ソフトウェア コードの開発のあらゆる側面が含まれます。 このフェーズでは、DevOps チームは次のタスクを実行します。

  • 開発環境を選択してください
  • コードを作成、テスト、レビューし、統合します。
  • コードをアーティファクトに構築して、さまざまな環境にデプロイします。
  • バージョン管理 (通常はGit) を使用して、コードを共同作業し、並行して作業します。

品質、安定性、生産性を犠牲にすることなく迅速にイノベーションを起こすために、DevOps チームは次のことを行います。

Microsoft が DevOps への移行をサポートするために採用した開発手法の概要については、「Microsoft が DevOps で開発する方法」を参照してください。

配信

デリバリーは、理想的には継続的デリバリー (CD) を介して、アプリケーションを運用環境に一貫して確実にデプロイするプロセスです。

デリバリーフェーズでは、DevOps チームは次のことを行います。

  • 明確な手動承認段階を備えたリリース管理プロセスを定義します。
  • 自動ゲートを設定して、顧客への最終リリースまでアプリケーションをステージ間で移動させます。
  • 配信プロセスを自動化して、拡張性、再現性、制御性が高く十分にテストされたものにします。

配信には、配信環境の基本インフラストラクチャの展開と構成も含まれます。 DevOps チームは、コードとしてのインフラストラクチャ (IaC)コンテナマイクロサービスなどのテクノロジーを使用して、完全に管理されたインフラストラクチャ環境を提供します。

安全な展開の実践 により、カスタマー エクスペリエンスに影響を与える前に問題を特定できます。 これらのプラクティスは、DevOps チームが簡単に、自信を持って、安心して頻繁に実行できるようにするのに役立ちます。

Microsoft が効率的な配信システムを提供するために進化させた DevOps の核となる原則とプロセスについては、「Microsoft が DevOps でソフトウェアを配信する方法」で説明されています。

操作

運用フェーズには、Azure などのハイブリッド クラウドやパブリック クラウドを含む実稼働環境でのアプリケーションの保守、監視、トラブルシューティングが含まれます。 DevOps チームは、システムの信頼性、高可用性、強力なセキュリティ、およびゼロ ダウンタイムを目指しています。

自動化された配信と安全な導入の実践により、チームは問題が発生したときに迅速に特定して軽減することができます。 警戒を維持するには、豊富なテレメトリ、実用的なアラート、アプリケーションと基盤となるシステムの完全な可視性が必要です。

Microsoft が複雑なオンライン プラットフォームを運用するために使用する手法については、Microsoft が DevOps を使用して信頼性の高いシステムを運用する方法で説明されています。

次のステップ

その他のリソース

トレーニングと認定