DevOps は、ソフトウェア開発(Dev)チームとITオペレーション(Ops)チームの業務を統合・自動化することで、高性能なアプリケーションやサービスの提供を加速するソフトウェア開発手法です。
DevOpsは、ソフトウェア開発プロセスと、開発チームとITオペレーション・チームの連携と協調を促進する組織文化の変革の両方を示します。これら2つのグループは、従来は別々のサイロ化された体制で業務を行っていました。DevOps手法では、両者は共通のツールとプラクティスを用いて、1つのチームとして連携して取り組みます。
DevOpsの特徴は、継続的インテグレーションおよび継続的デリバリー(CI/CD)であり、これにより小規模かつ迅速なソフトウェア更新が可能になります。CI/CDを使用すると、新しいコードの小さなチャンクが頻繁にコード・ベースにマージされ、その後、自動的に統合、テストされ、本番環境へのデプロイの準備が整います。
DevOpsは、ウォーターフォール手法に代わるものとして登場したアジャイル・ソフトウェア開発手法の進化形です。ウォーターフォール手法では、ソフトウェア開発チームは数か月をかけて大量のコードを作成し、その後さらに数か月をかけてテストを行ったうえでリリースしていました。これに対して、アジャイル開発はソフトウェア提供のライフサイクルに反復的なアプローチを取ります。
DevOpsは、アジャイル手法に新たなプロセスやツールを追加しており、特にCI/CDパイプラインの多くを自動化している点が挙げられます。
最終的に、DevOpsの目的は、ソフトウェアのユーザーが求める頻繁で革新的な新機能の提供と、途切れのないパフォーマンスおよび可用性を実現することにあります。
DevOpsには、「DevOpsライフサイクル」と呼ばれる一連の自動化されたワークフローと、それを支える文化的な変革の両方が含まれます。
DevOpsライフサイクルは、高品質なソフトウェアを迅速に提供することを最適化するように設計されています。このライフサイクルには、より大きな自動化・反復型の開発ライフサイクルの中で実行される、一連の反復的かつ自動化されたワークフローが含まれます。
ワークフローの名称や順序は組織によって異なる場合がありますが、DevOpsライフサイクルには通常、8つの主要なステップが含まれます。
まず、チームは次回リリースに向けて新機能や新たな機能要件の検討を行います。このワークフローでは、ユーザーからのフィードバック、お客様事例、そしてプラットフォーム・エンジニアやインフラ・エンジニア、セキュリティー、コンプライアンス、ガバナンス、リスク管理、および事業部門などの関係者からのインプットを活用します。
計画段階の目的は、バックログ文書を作成することです。バックログとは、今後製品に追加される新機能、改善点、バグ修正を優先順位付きで一覧にしたものです。
DevOpsチームは、バックログで特定された新機能や拡張機能のコーディングを行います。DevOpsにおける一般的なコーディングの実践には、以下のようなものがあります。
開発者は、コードを次の継続的Delivery Pipelineのステージに送る前に、ローカルの作業環境でコードの作成とテストを行うのが一般的です。
新しいコードは既存のコードベースに統合され、その後テストとパッケージ化が行われ、リリースおよびデプロイの準備がされます。この段階でよく自動化される作業には、コード変更をマスターコピーにマージする処理、更新されたコードをリポジトリーに配置する処理、そしてコードをコンパイル・テスト・パッケージ化して実行可能ファイルにする処理などがあります。
DevOpsにおいては、ビルド・フェーズのアウトプットはバイナリー・リポジトリーに保管されることが一般的です。ソースコード・リポジトリーとは異なり、バイナリー・リポジトリーはライブラリや実行可能ファイルなどのパッケージ化されたアウトプットを保管し、開発ライフサイクルの他のフェーズで再利用できるようにします。
DevOpsチームは、更新されたアプリケーションが適切な基準や要件を満たしていることを確認するために、通常は自動テストを用いたテストを実施します。
従来のDevOpsアプローチには、開発とリリースの間に個別のテスト・フェーズが含まれます。ただし、DevOpsは進化しており、テストの一部はプロセス全体を通じて実行されるようになっています。ユニット・テスト(コードの小さな単位を個別に検証するテスト)は、コーディング・フェーズで実行されることがあります。新しいコードを統合した後には、リンティング・プログラムがエラーを検出するためにコードを解析することもあります。
継続的テストは、テスト工程を開発プロセスの初期段階に移行させるというソフトウェア開発手法であるシフトレフト・テストの原則を実現するのに役立ちます。このアプローチにより、組織は問題をより早期に発見し、より効果的に対処できるようになります。
リリース段階は、ユーザーがアプリケーションにアクセスする前の最後のワークフローです。この段階では、ソフトウェアが品質、コンプライアンス、セキュリティーの基準を満たし、外部での利用に耐えうる状態であることを確認するための最終テストが一連で実施されます。
エラーや不具合が見つかった場合、ユーザーに影響が及ぶ前に、チームがそれらの問題を検出して修正する機会があります。すべての問題が解決され、アプリケーションがすべての要件を満たした時点で、本番環境へのリリースが可能となります。多くのDevOpsパイプラインでは、このプロセスの大部分が自動化されています。
リリース段階では、サーバー、データベース、ロード・バランサーなどのインフラ・コンポーネントのプロビジョニングが含まれることもあります。DevOpsでは、こうしたプロセスを自動化するためにInfrastructure as Code(IaC)がよく使用されます。
この段階で、プロジェクトは本番環境へ移行し、ユーザーが更新されたアプリケーションにアクセスできるようになります。
多くの組織では、アプリケーションが正しく動作することを確認するために、まず一部のエンド・ユーザーに限定してデプロイを行います。安定性が確認されると、すべてのユーザーへの展開が行われます。
この段階では、DevOpsチームが新機能が問題なく稼働しており、サービスの中断なくユーザーに提供されていることを確認します。ネットワーク、ストレージ、プラットフォーム、コンピュート、そしてセキュリティー体制がすべて正常に機能していることを確認するために、自動化された可観測性および管理ツールを活用し、運用状況を継続的に監視・最適化します。
この段階では、チームはユーザーからのフィードバックや以前のワークフローから得た教訓を収集して分析し、今後のプロセスや製品の改善に役立てます。このような主要な機能、性能、ビジネス価値の継続的な監視は、新しい主要な機能や機能強化の次期リリースの計画に役立ちます。
DevOpsの文化は、協調・コミュニケーション・自動化への取り組みによって特徴づけられます。
プロジェクト管理の観点では、DevOpsには、すべてのソフトウェア配信関係者間の間での継続的なコミュニケーションと責任の共有が求められます。これにより、迅速なイノベーションと、初期段階からの品質重視が実現されます。関係者には、ソフトウェア開発チームとITオペレーションチームはもちろんのこと、コンプライアンス、ガバナンス、リスク管理、事業部門、セキュリティチームも含まれます。
技術的なレベルにおいては、DevOpsには、ワークフロー内およびワークフロー間でプロジェクトを円滑に進行させるための自動化ツールの活用が不可欠です。たとえば、自動テスト、デプロイメント、およびインフラ・コンポーネントのプロビジョニングを自動化することで、プロジェクトの提供を加速し、エラーの発生を減らすことができます。
DevOpsではまた、サイクルの継続的な最適化やソフトウェアの品質およびパフォーマンスの向上を可能にするフィードバックと測定も求められます。
DevOps文化を導入するには、組織は往々にしてサイロを解消し、職員を機能横断的かつ自律的なDevOpsチームに再編成する必要があります。これらのチームは、他のチームへの引き継ぎや承認を待つことなく、計画からフィードバックまでプロジェクト全体を担当します。アジャイル・ソフトウェア開発の文脈においては、こうした責任の明確化と協働こそが、価値と優れた成果に共通して集中するための土台となります。
DevSecOpsは、Development(開発)、Security(セキュリティー)、Operations(運用)の略であり、DevOpsを拡張したもので、ソフトウェア開発のあらゆる段階においてサイバーセキュリティーの実践やセキュリティー・チームを組み込んだアプローチです。
かつては、セキュリティーは開発サイクルの最後に、まるで後付けのように追加されていました。セキュリティー対策は別のセキュリティー・チームが実施し、それらの対策はまた別の品質保証(QA)チームによってテストされていました。
DevSecOpsは、ソフトウェア開発ライフサイクルの初期段階から、アプリケーションおよびインフラのセキュリティーをDevOpsの実践やツールに統合します。セキュリティーに関する問題が発生した場合、より簡単、より迅速、かつ低コストで修正を行い、実稼働環境に導入する前に対処します。
このように、ソフトウェアの提供スピードを向上させ、コストを削減し、セキュリティー体制を強化できることから、多くの組織がDevSecOpsをDevOpsの標準的なアプローチとして採用し始めています。
開発と運用の業務をより密接に連携させることで、DevOpsは効率を高め、ワークロードを軽減することができます。開発チームと運用チームがワークフローや責任を共有することで、プロジェクトの進行中に想定外の事態が発生することが少なくなります。チームは、自分たちのコードがランタイム環境でどのように動作すべきかをより明確に理解できるようになります。
DevOpsチームは、協働の強化とマイクロサービス・アーキテクチャーの活用により、新しいコードをより迅速に提供できます。マイクロサービス・アーキテクチャーでは、各アプリケーションは、疎結合で独立してデプロイ可能な多数のコンポーネントやサービスで構成されます。
マイクロサービスを採用することで、個別のチームが新しいリリースの異なるコンポーネントを同時並行で開発できるようになり、開発サイクルの高速化が可能になります。このアプローチにより、継続的な改善、イノベーション、バグ修正をより早く市場に届けることが可能になります。
DevOpsはまた、継続的デリバリーと継続的インテグレーションの実践を通じて、ソフトウェアのビルド、テスト、デプロイのプロセスを加速・自動化します。これにより、組織は市場の変化により迅速に対応できるようになり、顧客のニーズにも的確に応えられるようになります。
自動テストは、ソフトウェアおよびインフラの更新における品質と信頼性を確保するのに役立ちます。監視とロギングは、アプリケーションのパフォーマンスをリアルタイムで検証します。
DevOpsにおける自動化は、コードの開発・テスト・本番環境への移行を加速させ、組織がより迅速かつ効率的にスケールできるようにします。
たとえば、ビジネス上の需要に対応するために迅速にアプリケーションを追加する必要がある場合でも、DevOpsを活用すれば、その変更を実装するための長く遅い、エラーの起きやすいコーディング作業を排除できます。
DevSecOpsでは、セキュリティーが開発プロセスの初期段階から統合されており、従来のように最後に後付けされることはありません。チームは、セキュリティー標準の遵守や法規制への対応状況を追跡するために、セキュリティー・テストや監査をワークフローに組み込んでいます。
DevOpsの手法と文化を支えるためには、非同期のコラボレーションを可能にし、DevOpsのワークフローをシームレスに統合し、DevOpsライフサイクル全体で可能な限り自動化を実現する、専用のツールチェーンが必要です。
DevOpsツールのカテゴリーには次のものがあります。
バージョン管理されたコーディング環境では、複数の開発者がコードの変更を管理し、変更履歴を追跡し、同じコードベース上で共同作業を行うことができます。これらのコード・リポジトリーは通常、アプリケーション・プログラミング・インターフェース(API)を通じてCI/CD、テスト、セキュリティー・ツールと統合されており、コードがリポジトリーにコミットされると、自動的に次のステップへと進めることができます。よく使われているバージョン管理システムには、Git(主にGitHub 上で使用される)、Apache Subversion、Mercurialなどがあります。
CI/CDパイプラインは、コードの統合、コード品質のテスト、コードのコンパイルおよびパッケージ化、ソフトウェアのデプロイといった主要なソフトウェア開発作業を自動化するのに役立ちます。このカテゴリーでよく使われるツールには、Jenkins、CircleCI、TeamCityなどがあります。
コンテナ化とは、アプリを「コンテナ」と呼ばれる、軽量で移植性の高いパッケージにカプセル化し、あらゆるプラットフォーム上で実行可能にする手法です。この機能により、コンテナ化はDevOpsの高速なリリースと管理サイクルに適しています。組織は、オープンソースのツールであるDockerやKubernetesを活用し、コンテナ化されたアプリの構築、オーケストレーション、およびデプロイの自動化を行うのが一般的です。
Amazon Web Services(AWS)、Google、Microsoft Azure、IBM® Cloudなど、主要なクラウド・プロバイダーの多くが、コンテナ化ツールを含むマネージド型のDevOpsパイプライン・ソリューションを提供しています。
構成管理ツールは、さまざまなIT環境において、インフラ、ソフトウェア、アプリケーションの構成をDevOpsチームが管理するのに役立ちます。これらのツールは、ハードウェアのセットアップやソフトウェア・パッチの適用といった構成作業を自動化し、一貫性を確保し、エラーを削減し、信頼性を向上させます。代表的な構成管理ツールには、Puppet、Chef、SaltStackなどがあります。
IaCは、高水準の記述コーディング言語を使用して、ITインフラストラクチャーのプロビジョニングを自動化します。インフラのプロビジョニング方法をシステムに逐一指示するのではなく、開発者は望ましい最終状態を記述し、あとの処理はIaCソフトウェアが自動的に行います。
この自動化により、開発者はソフトウェア・アプリケーションの開発・テスト・デプロイのたびに、ITインフラの変更を手動でスクリプト化する手間や時間をかける必要がなくなります。
代表的なIaCツールには、Terraform、Pulumi、AWS CloudFormationなどがあります。
監視およびオブザーバビリティー・ツールは、DevOpsチームがシステムの問題(たとえば応答時間の遅延や過剰なリソース消費など)を特定し、解決するのに役立ちます。また、リアルタイムでデータを収集して分析し、コードの変更がアプリケーションのパフォーマンスにどのように影響するかを明らかにします。
一般的なオブザーバビリティーおよび監視ツールには、Prometheus、Datadog、IBM® Instana、New Relic、Splunkなどがあります。
これらのツールは、ヒート・マッピング(画面上のユーザーのアクションの記録)、アンケート、投票、セルフサービスの問題チケットなど、ユーザーからのフィードバックを収集します。一部のツールは、ソーシャル・メディアを監視してユーザーのフィードバックを収集し、アプリケーションのアップデートに対する満足度を測定することもできます。
サイト信頼性エンジニアリング(SRE)とDevOpsは、サイロを解消し、より効率的かつ信頼性の高いソフトウェア提供を実現する、ソフトウェア・エンジニアリングにおける補完的な戦略です。DevOpsチームはアップデートの実施や新機能のデプロイに注力する一方で、SREのプラクティスは、システムのスケーリングに伴う信頼性の維持を担います。
SREは、DevOpsと従来のITオペレーションを組み合わせて、プロダクション環境のシステム管理、チェンジ・マネジメント、インシデント対応など、本来であればシステム管理者が手動で行うような作業を自動化します。SREは、従来のシステム管理者をエンジニアに変えることを目的としています。
SREの目的は、組織が求める迅速なアプリケーション開発と、顧客とのサービス・レベル合意(SLA)で定められたパフォーマンスおよび可用性の水準を満たす必要性とのバランスを取ることにあります。
サイト信頼性エンジニアは、アプリケーションによって発生する運用リスクの許容レベルを「エラー・バジェット」として決定し、そのレベルに応じて業務を自動化し、このバランスを取ります。
部門横断的なDevOpsチームでは、SREは開発と運用の架け橋の役割を果たします。SREは、組織のSLAの条件を損なうことなく、コード変更や新機能をできるだけ迅速にDevOpsパイプラインに流すためのメトリクスや自動化ツールをチームに提供します。
AIは、大量のデータを分析することで、アプリケーションの障害やプロセスのボトルネックといった問題を、発生前に予測し対処することができます。たとえば、AIはネットワーク・トラフィックの急増を予測し、サービスの中断やシステム障害を防ぐために、自動的にリソースを追加でプロビジョニングすることが可能です。
AIは、隠れたバグやパフォーマンスの問題、ソフトウェアの異常を特定することで、問題が深刻化する前にアプリケーションの不具合に対処できるよう、開発者を支援します。たとえば、AIはCPU使用率の予期しない急上昇や、複数のマイクロサービスにまたがる障害など、注意が必要な事象にフラグを立てることができます。
また、AIはコードをレビュー・テストし、手動よりも速くデプロイ可能な状態であることを確認するのにも役立ちます。たとえば、AIツールはコードの変更内容を分析し、潜在的なバグや、ソフトウェアの更新中に意図せず生じたセキュリティー脆弱性を検出することができます。
DevOpsのプロセスやツールは、ITおよびビジネスにおける最新の課題に対応するために、今も拡大・進化を続けています。DevOpsの未来を牽引する主な技術やプラクティスには、次のようなものがあります。
プラットフォーム・エンジニアリングとは、開発者の生産性を高めるために、標準化されたツール、自動化されたワークフロー、一貫した環境を備えたプラットフォームを作成および管理する分野です。プラットフォーム・エンジニアリングは、リソースのプロビジョニング、ソフトウェアの構成、アプリケーションのコンテナ化といった作業に対して、チームがセルフサービスで対応できる機能を提供することで、生産性を向上させ、DevOpsプロセスの高速化を実現します。
オブザーバビリティーとは、複雑なシステムの外部アウトプット、特にテレメトリーに関する情報だけから、その内部状態や状況を把握する能力を指します。オブザーバビリティー・ツールは、従来のDevOpsの監視手法(あらかじめ定義されたメトリクスに基づく監視)よりも、システムの挙動に関するより深い洞察を提供することができます。
複雑なシステムにおける根本原因の特定や問題の予兆検知を可能にすることから、オブザーバビリティー・ツールはDevOpsワークフローにおいてますます重要なコンポーネントとなっています。
ローコードおよびノーコード・ツールは、コーディングの知識が限られている人々にもDevOpsワークフローへの参加を可能にします。ドラッグ・アンド・ドロップのインターフェースにより、ビジネス・ユーザーは従来のコーディングを必要とせずにアプリケーションを構築できます。このアプローチは、特定のビジネス・ニーズを満たすアプリケーションの作成と提供を効率化します。
オンプレミス、クラウド、またはメインフレームのあらゆるアプリケーションのソフトウェア配信を自動化します。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。