DevOps とは何ですか?

DevOps を使用して、人、プロセス、テクノロジをひとつにまとめ、お客様により優れた製品をすばやくお届けする方法をご確認ください。

DevOps の定義

開発 (Dev) と運用 (Ops) を組み合わせたものである DevOps は、人、プロセス、テクノロジを統合したもので、お客様に継続的に価値を届けます。

DevOps をチームで使用する意味は何でしょうか。DevOps では、以前はサイロ化されていた役割 (開発、IT 運用、品質管理、セキュリティ) を連携させて共同作業することで、より優れた信頼性の高い製品を作成することができます。DevOps カルチャと DevOps のプラクティスとツールを一緒に導入することで、チームは顧客のニーズに適切に応え、作成したアプリケーションの信頼度を高め、ビジネス目標をよりすばやく達成することができます。

DevOps の利点

DevOps のカルチャ、プラクティス、ツールを採用したチームはパフォーマンスが高く、より優れた製品をより高速に作り出すことができ、それが大きな顧客満足度につながります。このようにコラボレーションと生産性を強化することは、次のようなビジネス目標を達成するためにも必要不可欠です。

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

市場への適応と競争

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

平均復旧時間の改善

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

DevOps は、計画、開発、配信、運用のフェーズを通じて、アプリケーションのライフサイクルに影響を与えます。各フェーズどうしが互いに依存し合い、フェーズは役割固有のものではありません。真の DevOps カルチャでは、各役割がある程度各フェーズに関与します。

計画

計画フェーズでは、DevOps チームは作成しているアプリケーションやシステムの特徴や機能を考え、定義し、説明します。チームは、単一製品のタスクから複数製品ポートフォリオにまたがるタスクまで、詳細レベルから概要レベルまで進捗を把握します。バックログの作成、バグの追跡、スクラムでのアジャイル ソフトウェア開発の管理、かんばんボードの使用、ダッシュボードでの進捗の可視化など、DevOps チームがすばやく視覚的に計画するためのさまざまな方法があります。

開発

開発フェーズには、コーディングのすべての要素 (コードを書く、テスト、レビュー、チーム メンバーによるコードの統合、さまざまな環境にデプロイできるようそのコードをビルド成果物に組み込む) が含まれます。DevOps チームは品質、安定性、生産性を損なうことなく、イノベーションをすばやく実現する方法を探しています。そのため、非常に生産性の高いツールを使用し、必須かつ手動のステップを自動化し、自動化されたテストと継続的インテグレーションを小さな単位で繰り返します。

配信

配信は、一貫性があり信頼性のある方法でアプリケーションを運用環境にデプロイするプロセスです。配信フェーズには、完全に制御された基盤インフラストラクチャのデプロイと構成も含まれ、これらによって環境が構築されます。

配信フェーズでは、チームは明確な手動承認ステージでリリース管理プロセスを定義します。また自動ゲートも設定して、顧客がアプリケーションを使用できるようになるまで、アプリケーションをステージ間で動かします。これらのプロセスを自動化すると、プロセスがスケーラブルで反復可能かつ制御された状態になります。この方法により、DevOps を実践するチームは高い頻度で、また簡単に自信を持って安全に配信することができます。

運用

運用フェーズには、運用環境でのアプリケーションの管理、監視、トラブルシューティングが含まれます。DevOps プラクティスの導入にあたり、チームはシステムの信頼性、高可用性、ダウンタイム ゼロの目標を守れるように取り組みます。同時に、セキュリティとガバナンスも強化します。DevOps チームは顧客エクスペリエンスに影響を与える前に問題を特定し、問題が発生したらすばやく軽減する措置を取ります。このような警戒体制を取り続けるには、豊富なテレメトリ、アクションにつながるアラート、アプリケーションと基盤システムに対する完全な可視性が必要です。

DevOps カルチャ

DevOps プラクティスを導入すると、テクノロジを通じてプロセスが自動化され、最適化されますが、これはすべて組織内、そしてその組織の中で役割を果たす人のカルチャから始まります。DevOps カルチャを促進するためには、人々が働き、共同作業する方法を根本から変える必要があります。しかし、組織が DevOps カルチャの確立を確約すれば、高パフォーマンスのチームに向けた開発環境を構築することができます。

コラボレーション、可視性、ひとつにまとまる

健全な DevOps カルチャの特徴のひとつは、チーム間でのコラボレーションです。これは可視性を高めることから始まります。開発チームや IT 運用チームなど、さまざまなチームがそれぞれの DevOps プロセス、優先度、懸念事項を互いに共有する必要があります。このようなチームでは、共同作業を計画するだけでなく、ビジネスに関連する目標や成功基準に対する足並みをそろえる必要があります。

対象範囲と責任のシフト

チームが整ったら、担当を決め、その他のライフサイクル フェーズにも関わるようにします。つまり、自分の役割以外のフェーズにも関与します。たとえば、開発者は開発フェーズにおけるイノベーションと品質管理だけに責任を負うのではなく、運用フェーズにおけるパフォーマンスと安定性に関する変更にも責任を負います。同じように、IT 運用者は計画や開発フェーズでのガバナンス、セキュリティ、コンプライアンスにも関わるようにします。

短いリリース サイクル

DevOps チームは、短いサイクルでソフトウェアをリリースすることで、俊敏性を保ちます。リリース サイクルを短くすることで、進行が段階的になり、計画とリスク管理が簡単になります。また、システムの安定性に与える影響を減らすことにもつながります。リリース サイクルを短くすると、組織は常に進化する顧客のニーズと競争に対するプレッシャーに適応して対応することができます。

継続的な学習

高パフォーマンスの DevOps チームは、成長するためのマインドセットを確立しています。このようなチームはフェイル ファストで学びをプロセスに取り入れ、継続的に改善し、顧客満足度を高め、イノベーションと市場への適応性を加速します。DevOps は 1 つの旅です。そのため、成長の余地がいつでも存在します。

Microsoft のチームが DevOps カルチャをどのように導入したかを見る

詳細はこちら

DevOps のプラクティス

DevOps カルチャの確立にとどまらず、チームはアプリケーションのライフサイクル全体で特定のプラクティスを実装することで、DevOps を実現することもできます。特定のフェーズを加速、自動化、改善するのに役立つプラクティスもあれば、複数のフェーズにまたがり、チームがシームレスにプロセスを作成できるようにして生産性を高めるプラクティスもあります。

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

継続的インテグレーションはソフトウェア開発プラクティスのひとつで、開発者はメインのコード ブランチにコード変更を高い頻度でマージすることができます。継続的インテグレーションでは自動テストが採用されており、新しいコードがコミットされるたびにテストが実行されるため、メイン ブランチのコードは常に安定しています。

継続的デリバリーは、新しいバージョンのアプリケーションを、運用環境に高い頻度で自動的にデプロイします。開発に必要なステップを自動化することで、チームはデプロイで発生する問題を減らし、より頻繁に更新プログラムを有効化することができます。

両方のプラクティスを適用したら、次のプロセスは CI/CD です。このプロセスでは、コードのコミットから運用環境へのデプロイまでのすべてのステップが完全に自動化されています。CI/CD を実装すると、チームはコードの作成に集中でき、手動かつ必須のステップでの負荷や潜在的なヒューマン エラーを減らすことができます。CI/CD により、新しいコードのデプロイ プロセスが加速し、リスクも減ります。その結果、デプロイがより頻繁かつ小さな単位で発生し、チームはよりすばやく、より生産的に、そしてより自信を持ってコードを実行することができます。

バージョン コントロール

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

バージョン コントロールの使用は DevOps プラクティスの基礎で、開発チームが共同作業し、コーディング タスクをチーム メンバー間で分割し、すべてのコードを保存して、必要に応じて簡単に回復することができます。

またバージョン コントロールは、継続的インテグレーションや Infrastructure as Code などのプラクティスでも必須の要素です。

Git の詳細情報

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

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

かんばんとスクラムは、アジャイルに関連して最も人気のあるフレームワークです。

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

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

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

Configuration Management

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

Infrastructure as Code と合わせて実践することで、システムの定義と構成はどちらも簡単にテンプレート化して自動化することができるため、チームは複雑な環境を大規模に運用することができます。

継続的監視

継続的監視とは、アプリケーションを実行する基礎インフラストラクチャからより高いレベルのソフトウェア コンポーネントまで、アプリケーション スタック全体のパフォーマンスと健全性をすべてリアルタイムで確認することを意味します。この可視性は、テレメトリ コレクションとメタデータ、および運用担当者から寄せられた注意すべき内容に関する、事前定義済みの条件に対するアラート設定から構成されます。テレメトリはイベント データとシステムのさまざまな部分から収集されたログから構成されます。イベント データやログは、分析および検索できる場所に保管されます。

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

DevOps ツール

チームには、組織で DevOps カルチャを促進するための多くの DevOps ツールがあります。ほとんどのチームはいくつかのツールを使用しており、アプリケーション ライフサイクルの各フェーズでのニーズに合わせたカスタムのツールチェーンを構築しています。特定のツールやテクノロジの導入は、DevOps の導入と同じではありませんが、DevOps カルチャが存在し、プロセスが定義されていれば、人々は適切なツールを選択して DevOps プラクティスを実装し、合理化することができます。ツールを入手して DevOps を実践しましょう。

DevOps とクラウド

クラウドの導入は、チームがアプリケーションを作成、デプロイ、運用する方法を一変させました。DevOps を一緒に導入することで、チームはプラクティスを改善し、お客様により優れたサービスを提供する機会を得ました。

クラウドの俊敏性

すばやくプロビジョニングして複数リージョンのクラウド環境を構成できる機能が備わり、また無制限のリソースを利用できるため、チームはアプリをすばやくデプロイできます。物理サーバーを購入、構成、管理することなく、チームは複雑なクラウド環境を数分で構築でき、不要になったときにシャットダウンすることができます。

Kubernetes

これまで以上に多くのアプリケーションでコンテナー テクノロジが使用されるにつれ、Kubernetes は大規模なオーケストレーション コンテナーに対する業界標準ソリューションになりました。CI/CD パイプラインを通じてコンテナーを作成してデプロイするプロセスを自動化し、これらのコンテナーを運用環境で監視することは、Kubernetes の時代には不可欠のプラクティスになっています。

サーバーレス コンピューティング

インフラストラクチャ管理の負荷のほとんどがクラウド プロバイダーに移管されるため、チームは基になるインフラストラクチャではなく、自分たちのアプリに集中することができます。サーバーレス コンピューティングにより、サーバーを構成して管理することなくアプリケーションを実行することができます。さまざまなオプションにより、複雑かつリスクのあるデプロイや運用を減らすことができます。

DevOps の行程を進む

DevOps には利用できるさまざまなプラクティスとソリューションがあり、最初は途方もない量に感じるかもしれません。まず、小さなことから始め、他の人から学ぶことが大事です。

FAQ

  • DevOps は組織内のさまざまな役割全体にわたるプラクティスであり、それぞれの役割が緊密に連携する必要があります。多くの場合、DevOps の役割には開発、IT 運用、セキュリティ、サポートが含まれます。
  • DevOps の役割は 1 つに限定されるものではありません。各アプリケーションのライフサイクル フェーズに関わるすべての人は、DevOps カルチャを受け入れる必要があります。ただし、組織によっては一部の人やチームが、自動化の有効化、プラクティスの定義、CI/CD パイプラインの実装を集中的に行います。そのような役割を持つ人は、公式な役職として、DevOps エンジニアまたは DevOps スペシャリストと呼ばれることもあります。
  • DevOps を規模の大きい組織で導入することは、きわめて困難を伴います。規模の大きい組織のカルチャを変革し、プロセスとツールを標準化するには、忍耐と辛抱強さが必要です。ほとんどの大規模な組織には、DevOps プラクティスの早期導入者がいます。このようなプラクティスは十分に成熟し、良い成果が得られているため、他のチームは通常それに沿って DevOps 導入の行程を進むことができます。

    Microsoft のチームによる DevOps カルチャの導入の詳細をご覧ください

  • DevOps の本当の価値は、顧客に継続的な価値を届けることにあります。DevOps 導入の結果は、ビジネス目標に照らして測定される必要があります。DevOps チームはこのような目標に対して一丸となり、短いリリース サイクルで達成します。サイクルを短くすることで、マーケットに対してすばやく反応し、顧客からのフィードバックを通じて継続的に学ぶことができます。
  • DevOps とアジャイルは、製品、ローンチ、リリースを作成するための、モダンなソフトウェア開発フレームワークです。DevOps は、ソフトウェアの開発と保守に関わるすべての役割の間でコラボレーションを促進するカルチャです。アジャイルは、生産性を維持し、ニーズは変化し続ける現実に対応するため、すばやいリリースを行えるよう設計された開発手法です。DevOps とアジャイルは互いに矛盾するものではなく、多くの場合一緒に実践されます。
  • 継続的インテグレーション、継続的デリバリー、継続的デプロイと一緒に使用し、ソフトウェア配信フェーズを自動化します。