DevOpsは、ソフトウェア開発チームとIT運用チームの作業を統合して自動化し、高品質なソフトウェアを迅速に提供できるようにします。
DevOpsという言葉の原義は、これまでばらばらに業務を遂行していた開発チームとIT運用チームという2つのグループの取り組みを自動化し統合することで、ソフトウェア開発プロセスと組織文化の変化の道筋を示し、高品質なソフトウェアを迅速に提供することです。
実際には、非常に優れたDevOpsのプロセスと文化は、開発と運用を超えて拡張し、すべてのアプリケーションの利害関係者(プラットフォームとインフラストラクチャーのエンジニアリング、セキュリティー、コンプライアンス、ガバナンス、リスク管理、基幹業務、エンド・ユーザー、顧客を含む)からの情報をソフトウェア開発ライフサイクルへと組み込みます。
DevOpsは、過去20年以上にわたるソフトウェア・デリバリー・サイクルの進化の現状を表しています。対象には、数カ月または数年ごとのアプリケーション全体の巨大なコード・リリースから、毎日または1日に数回の頻度でリリースされる小さなフィーチャーや機能の反復的な更新までが含まれます。
究極的には、DevOpsとは、頻繁にリリースされる革新的な新機能と、中断のないパフォーマンスと可用性を求める、ソフトウェア・ユーザーの高まり続ける需要に応じることを指します。
2000年の直前まで、大半のソフトウェアは、大規模な開発プロジェクトへの線形アプローチである、ウォーターフォール型の手法を用いて開発・更新されていました。 ソフトウェア開発チームは数カ月をかけて新規コードの巨大な本体を開発していました。このコードはアプリケーションの大部分またはすべてに影響を与えるものであり、 その変更はあまりにも広範囲に及ぶため、開発チームは新規コードをコード・ベースに統合するために、さらに数カ月を費やしていました。
次に、品質保証(QA)、セキュリティー、運用の各チームがさらに数カ月かけてコードのテストを実施しました。 その結果、ソフトウェアのリリース間隔は数カ月から数年に達し、多くの場合でリリースの合間にいくつかの重要なパッチ提供やバグ修正も行われました。 機能提供に対するこのビッグバン型アプローチには3つの特徴があります。複雑でリスクの高いデプロイメント計画、スケジュール設定が困難な上流システムと下流のシステムでの連動、実稼働までの数カ月間にビジネス要件が大きく変化しないというITの「大きな期待」、の3つです。
開発を速めて品質を向上させるために、開発チームはアジャイル・ソフトウェア開発手法を採用し始めました。この手法は線形ではなく反復型であり、より小さくて頻繁な更新をアプリケーションのコード・ベースに加えることを重視しています。 これらの手法の中心となるのが継続的インテグレーション と継続的デリバリー、つまりCI/CDです。 CI/CDの新規コードの小さなチャンクは、1週間または2週間ごとにコード・ベースにマージされてから、自動的に統合・テストされ、実稼働環境にデプロイされる準備が整います。 アジャイル手法は、ビッグバン型アプローチを一連の「より小さく簡単な仕事」に進化させ、さらにリスクも細分化させました。
これらのアジャイル開発プラクティスがソフトウェアの開発とデリバリーをより効果的に加速させるほど、未だにサイロ状態であるIT運用(システム・プロビジョニング、構成、受け入れテスト、管理、監視)が、ソフトウェア・デリバリー・ライフサイクルの次のボトルネックであることが、さらに明らかになりました。
このような経緯で、DevOpsはアジャイル手法から生まれました。 DevOpsは、新規のプロセスとツールを追加して、CI/CDの継続的な反復と自動化をソフトウェア・デリバリー・ライフサイクルの他の部分にも拡張しました。 また、プロセスのあらゆる段階において、開発と運用との緊密な連携を実現しました。
DevOpsライフサイクル(線形で描かれる場合は継続的デリバリー・パイプラインとも呼ばれます)とは、反復的な自動化された一連の開発プロセスです。または、高品質なソフトウェアの迅速な提供を最適化するように設計された、より大規模で、自動化された反復型開発ライフサイクルの中で実行されるワークフロー を指します。 ワークフローの名称と数は、場合によって異なりますが、通常は次の6つに要約されます。
その他3つの重要な継続的ワークフローは、これらのワークフローの合間に発生します。
継続的テスト:古典的なDevOpsライフサイクルには、統合とデプロイメントの間に発生する個別の「テスト」フェーズが含まれます。 しかし、進化したDevOpsでは、プランニング(ビヘイビアー駆動開発)、開発(単体テスト、契約テスト)、統合(静的コード・スキャン、CVEスキャン、リンティング)、デプロイメント(スモーク・テスト、ペネトレーション・テスト、構成テスト)、運用(カオス・テスト、コンプライアンス・テスト)、学習(A/Bテスト)において、テストの特定の要素が発生するようになっています。 テストは、リスクと脆弱性の特定のための強力な形式であり、IT部門には、リスクの受け入れ、緩和、修正のための機会が提供されます。
セキュリティー:ウォーターフォール手法とアジャイルな実装は、デリバリーまたはデプロイメント後にセキュリティー・ワークフローを「追加」します。一方でDevOpsは、セキュリティー問題の解決が最も容易で最もコストがかからない最初(プランニング)の段階から、さらに開発サイクルの残りの段階全体を通じて、セキュリティーを組み込むことを目指しています。 セキュリティーに対するこのアプローチは、シフト・レフト(図1を参照)と呼ばれます。 一部の組織は、他の組織と違ってシフト・レフトに成功していないため、これがDevSecOpsの台頭につながりました(以下を参照)。
コンプライアンス: 法規則の遵守(ガバナンスとリスク)に対する取り組みも、開発ライフサイクルの初期および全体を通して行うことが最善となります。 規制を受ける業界は頻繁に、特定レベルの可観測性、追跡可能性、ランタイムの稼働環境での機能の提供方法と管理方法へのアクセスを提供するように義務付けられています。 そのためには、継続的デリバリー・パイプラインとランタイム環境でのプランニング、開発、テスト、ポリシー適用が求められます。 コンプライアンス測定の監査能力は、サード・パーティーの監査員にコンプライアンスを実証する上で極めて重要です。
DevOpsメソッドは、DevOps文化という、これまでと違うソフトウェア開発への組織的・技術的なアプローチへのコミットメントなしには機能しないというのが一般的な見識です。
組織レベルでは、DevOpsは、すべてのソフトウェア・デリバリー・ステークホルダー(具体的に言うと、ソフトウェア開発チームとIT 運用チームのことですが、セキュリティー・チーム、コンプライアンス・チーム、ガバナンス・チーム、リスク・チーム、基幹業務チームも含みます)間での継続的コミュニケーション、コラボレーション、共有責任を必要とします。これにより、迅速かつ継続的なイノベーションと、初期段階からソフトウェアに品質を組み込むことが可能になります。
ほとんどの場合、これを実現する最善の方法は、サイロ化した各チームを解体して、機能横断的で自律型のDevOpsチームに再編成することです。DevOpsチームは、コード・プロジェクトに最初から最後まで(プランニングからフィードバックまで)、他のチームへの引き継ぎや他のチームからの承認を待機する必要がありません。 アジャイル開発のコンテキストにおいては、共同の説明責任とコラボレーションは、共有された製品フォーカス の基盤であり、価値ある成果が得られます。
テクニカル・レベルでは、DevOpsは、プロジェクトをワークフロー内とワークフロー間で移動させ続ける自動化、フィードバック、チームが継続的にサイクルを加速させ、ソフトウェアの品質とパフォーマンスを向上させることを可能にする測定 へのコミットメントを必要とします。
DevOpsとDevOps文化による要求では、非同期コラボレーションをサポートし、DevOpsワークフローをシームレスに統合し、DevOpsライフサイクル全体をできる限り自動化するツールが重視されます。 DevOpsツールのカテゴリーは次のとおりです。
クラウドネイティブ は、基礎的なクラウド・コンピューティング・テクノロジーを活用するアプリケーションを構築するためのアプローチです。 クラウドネイティブの目標は、パブリッククラウド、プライベートクラウド、マルチクラウドの環境で、一貫性のある最適なアプリケーション開発、デプロイメント、管理、パフォーマンスを可能にすることです。
今日のクラウドネイティブ・アプリケーションには通常、次のような特徴があります。
多くの点で、クラウドネイティブ開発とDevOpsの相性は最高です。
たとえば、マイクロサービスの開発と更新は、小さなコード・ユニットを小さなコード・ベースへ反復的にデリバリーする作業ですが、DevOpsの迅速なリリースと管理のサイクルに完璧に適合します。 また、DevOpsのデプロイメントや運用なしに、マイクロサービス・アーキテクチャーの複雑さに対処することは困難です。 開発者やITエグゼクティブに対して行った最近のIBMの調査によると、現在のマイクロサービス・ユーザーの78%が、アーキテクチャーに投資してきた時間、資金、労力が増えると予想しており、また非ユーザーの56%が今後2年以内にマイクロサービスを導入する見込みです。
すべてのOS依存関係をパッケージ化して永続的に修正することにより、すべての統合、テスト、デプロイメントが同じ環境で行われるため、コンテナでは迅速なCI/CDとデプロイメントのサイクルが可能になります。 また、Kubernetesのオーケストレーションは、Ansible、Puppet、Chefが非コンテナ化アプリケーションに実行するのと同様に、継続的な構成タスクをコンテナ化されたアプリケーションに対して実行します。
主要なクラウド・コンピューティング・プロバイダー(AWS、Google、Microsoft Azure、IBM Cloudなど)は何らかのマネージドDevOpsパイプライン・ソリューションを提供します。
DevSecOpsとは、DevOpsライフサイクル全体(最初から最後まで、つまりプランニングからフィードバックを介し、プランニングへ戻すまで)にわたって、セキュリティーを継続的に統合して自動化するDevOpsです。
別の言い方をすると、DevSecOpsとは、DevOpsの最初からあるべき姿です。 しかし、DevOps採用の初期段階での2つの大きな(そして当面は克服が難しい)課題は、セキュリティーの専門知識を機能横断的チームに統合するという文化的課題と、DevOpsライフサイクルにセキュリティー自動化を実装するという技術的課題でした。 セキュリティーは、「ノーを言うチーム」として、また多くのDevOps手法でコストのかかるボトルネックとして認識されるようになりました。
DevSecOpsは元来意図されていたとおり、セキュリティーを統合・自動化するための具体的な取り組みとして出現しました。 DevSecOpsでは、セキュリティーは開発と運用に並ぶ「第一級」市民・ステークホルダーであり、製品にフォーカスして開発プロセスにセキュリティーをもたらします。
「DevSecOpsとは」をご覧になり、 DevSecOpsの原則、メリット、お客様事例
の詳細をご確認ください。サイト信頼性エンジニアリング(SRE)は、ソフトウェア・エンジニアリングを使用して、他の方法ではシステム管理者 が手動で行うIT運用作業(実動システム管理、変更管理、インシデント対応、緊急対応など)を自動化します。 SREは、従来型のシステム管理者をエンジニアに変えることを目指しています。
SREの最終目標はDevOpsの目標に似ていますが、より具体的です。SREは、迅速なアプリケーション開発という組織の要求と、顧客やエンド・ユーザーとのサービス・レベル・アグリーメント(SLA)で規定されたパフォーマンスと可用性の水準を満たすニーズとのバランスを取ることを目指しています。
サイト信頼性エンジニアは、アプリケーションに起因する運用リスクの許容レベル(「エラー・バジェット」と呼ばれます)を決定し、またその水準を満たすように運用を自動化することで、このバランスを実現します。
SREは、機能横断的DevOpsチーム内で開発と運用の橋渡し役となります。組織のSLAの条件を「破壊」することなく、DevOpsパイプラインを通じてできる限り迅速にコード変更や新機能を導入するために、チームが必要とするメトリックと自動化を提供します。
お客様が必要とされるROIを実現するために設計された、統合、AI、自動化の機能の包括的なIBMポートフォリオを詳しくご覧ください。
IBM Cloud Pak® for Watson AIOpsで予測的なIT運用を実現する方法を紹介します。
強力なDevOpsソフトウェアにより、複数のデバイス、環境、クラウドにわたって、セキュリティー機能に富んだクラウドネイティブ・アプリケーションをビルド、デプロイ、管理することができます。
IBMの新しい調査により、マイクロサービス導入のメリットと課題が明らかになります。
IBM Cloudプロフェッショナル・アーキテクトとしてのキャリアを開始するために必要なスキルと知識を習得できます。 IBM Cloud認定資格の準備に役立つ対話式カリキュラムでご自身の能力を確認してください。
Gartner社の独自の分析レポートを入手して、IT向けのAIがビジネスの成果を向上させ、収益を増加に導き、組織のコストとリスクの両方を軽減させる方法をご覧ください。