Trace Id is missing
メイン コンテンツにスキップ

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 文化の特徴の 1 つがチーム間のコラボレーションですが、これは可視性から始まります。開発や IT 運用など、さまざまなチームがそれぞれの DevOps プロセス、優先度、懸念事項を互いに共有する必要があります。これらのチームは、作業を共同で計画することと、ビジネスに関連する目標と成功基準に対する足並みをそろえること (アラインメント) も必要です。

スコープと説明責任におけるシフト

アラインメントできているチームは、追加のライフサイクル フェーズについても、つまり自分の役割にとって中心的なもの以外についてもオーナーシップを取り、関与します。たとえば、開発者は開発フェーズで確立されるイノベーションと品質だけに説明責任を負うのではなく、自分の変更によって運用フェーズに持ち込まれるパフォーマンスと安定性についても責任を負います。同時に、IT オペレーターは確実にガバナンス、セキュリティ、コンプライアンスを計画と開発のフェーズに組み込みます。

短いリリース サイクル

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

継続的な学習

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

Microsoft のさまざまなチームがどのように DevOps 文化を導入したかをご覧ください
詳細情報

DevOps のプラクティス

DevOps 文化を確立したら、チームは特定のプラクティスをアプリケーション ライフサイクル全体で実装することで DevOps を実行に移します。このようなプラクティスの中には、特定のフェーズを加速し、自動化し、向上させるのに役立つものがあります。その他のものは複数のフェーズにまたがっており、生産性向上に役立つシームレスなプロセスをチームが作成するのに役立ちます。

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

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

"コードとしてのインフラストラクチャ" と合わせて実践することで、システムの定義と構成の両方を簡単にテンプレート化して自動化できるようになり、これでチームが複雑な環境を大規模に運用できるようになります。

バージョン コントロール

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

バージョン コントロールの使用は基本的な DevOps プラクティスの 1 つであり、このことは開発チームが共同作業し、コーディング タスクをチーム メンバー間で分担するのに役立ちます。また、すべてのコードを保存しておいて、必要に応じて簡単に回復することができます。

バージョン コントロールは、その他のプラクティス、たとえば継続的インテグレーションや "コードとしてのインフラストラクチャ" でも必須の要素です。

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

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

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

"コードとしてのインフラストラクチャ" では、システムのリソースとトポロジが記述的に定義されるため、チームはそのリソースの管理を、コーディングするように行うことができます。これらの定義は、バージョン コントロール システムに格納してバージョン管理することもでき、ここでもコードと同様に、レビューしたり元に戻したりすることができます。

"コードとしてのインフラストラクチャ" を実践することにより、チームは、信頼できる、反復可能かつ制御された方法でシステム リソースをデプロイできます。"コードとしてのインフラストラクチャ" は、デプロイの自動化にも役立ち、ヒューマン エラーのリスクが縮小します。これは特に、複雑な大規模環境で有効です。環境デプロイのための、この反復可能で信頼できるソリューションを利用すると、チームは開発とテスト用に運用環境とまったく同じ環境を維持することができます。同様に、環境をさまざまなデータ センターやクラウド プラットフォームに複製することも、よりシンプルで効率的になりました。

構成管理

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

"コードとしてのインフラストラクチャ" と合わせて実践することで、システムの定義と構成の両方を簡単にテンプレート化して自動化できるようになり、これでチームが複雑な環境を大規模に運用できるようになります。

継続的監視

継続的監視とは、アプリケーション スタック全体 (そのアプリケーションを実行する基盤インフラストラクチャから、上位のソフトウェア コンポーネントまで) のパフォーマンスと正常性を完全に、リアルタイムで可視化することを意味します。この可視性を構成するものとしては、テレメトリとメタデータの収集に加えて、オペレーターの注意を引く必要のある事前定義済みの条件についてのアラートの設定があります。テレメトリの内容は、システムのさまざまな部分から収集されたイベント データとログであり、これらは保管されて、その場所で分析やクエリ実行に使用することができます。

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

タブに戻る

DevOps のツール

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

DevOps とクラウド

チームがアプリケーションを構築、デプロイ、運用する方法は、クラウドの導入によって根本的に変容しました。DevOps も導入することで、チームがそのプラクティスを向上させて顧客により優れたサービスを提供する機会はさらに広がりました。

クラウドの俊敏性

複数リージョン クラウド環境をすばやくプロビジョニングおよび構成でき、リソースも無限であるため、チームはアプリのデプロイにおける俊敏性を獲得します。物理サーバーを購入して構成し、保守する代わりに、チームは複雑なクラウド環境を数分で構築でき、不要になったときにシャットダウンすることができます。

Kubernetes

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

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

インフラストラクチャ管理のオーバーヘッドのほとんどがクラウド プロバイダーに移管されるため、チームは基盤インフラストラクチャではなくアプリに集中することができます。サーバーレス コンピューティングを利用すると、サーバーの構成と保守は不要でアプリケーションを実行することができます。オプションを利用して、デプロイと運用の複雑さとリスクを減らすことができます。

DevOps の行程をスタートしましょう

さまざまなプラクティスとソリューションが利用可能であることから、最初は DevOps に圧倒されるように思われるかもしれません。小さく始めて、他者から学ぶことが鍵です。

よく寄せられる質問

  • DevOps は組織内のさまざまな役割にわたって実践されるものであるため、その多くが緊密に共同作業することが必要です。ほとんどの場合は、DevOps の役割として開発、IT、運用、セキュリティ、サポートが含まれます。

    DevOps のプラクティスを構築する方法を確認します

  • DevOps は 1 つの役割に限定されるものではありません。アプリケーション ライフサイクルの各フェーズに関与する全員が、DevOps 文化を受け入れる必要があります。ただし、組織によっては少数の人またはチームが専任で、自動化の有効化、プラクティスの定義、CI/CD パイプラインの実装を行います。このような役割の公式な役職名が、DevOps エンジニアまたは DevOps スペシャリストとなることもあります。

  • 大規模な組織での DevOps 導入は、きわめて困難になることもあります。大きな組織の文化を変革するとともにプロセスとツールを標準化するには、忍耐と辛抱強さが必要です。多くの大組織には、DevOps プラクティスの早期導入者がいます。このようなプラクティスが十分に成熟して肯定的な成果が得られるようになると、通常は他のチームも従うようになります。つまり、それぞれの DevOps の行程をスタートします。

    Microsoft のさまざまなチームがどのように DevOps 文化を導入したかをご覧ください

  • DevOps の真の意味は、継続的な価値を顧客に届けることです。DevOps 導入の結果は、ビジネス目標と関連付けて測定される必要があります。DevOps チームはこのような目標を中心として足並みをそろえ、短いリリース サイクルを使用して目標を達成します。このようなサイクルを使用することで、市場へのアジャイルな応答が可能になるとともに、顧客からのフィードバックを通じて継続的に学ぶことができます。

  • DevOps とアジャイルのどちらも、製品、ローンチ、またはリリースを作り出すためのモダンなソフトウェア開発フレームワークです。DevOps は 1 つの文化であり、ソフトウェアの開発と保守に関わるすべての役割の間でのコラボレーションがこれによって促進されます。アジャイルは、変化するニーズという共通の現実において生産性を維持するとともにリリースを推進するように設計された開発手法です。DevOps とアジャイルは相互排他的ではなく、多くの場合は一緒に実践されます。

    DevOps とアジャイルを組み込む方法をご覧ください

  • 継続的インテグレーションとともに、継続的デリバリーと継続的デプロイはソフトウェア デリバリーのフェーズを自動化するためのプラクティスです。