文化的な変化? 働き方? 特定のツール導入?
DevOps とは?
DevOps は包括的なビジネス慣行で、これまでサイロ化されていたチームを集結させて、より優れたソフトウェアをより迅速に提供するために、人材、テクノロジー、文化的習慣、およびプロセスを組み合わせます。ソフトウェア開発に関して言えば、DevOps 実装の成功は、組織的な変革であると見なされます。 DevOps について、そしてソフトウェア開発ライフサイクル (SDLC) の全体を通じて DevOps を用いることでソフトウェア デリバリーを最適化する方法を学びましょう。
DevOps を定義する
人材、プロセス、製品を集結させることによって、DevOps は、開発チームがそのお客様に価値を継続的に提供することを可能にします。
DevOps と言うときに意味することは?
DevOps の意味に関しては、単なる自動化だけには留まりません。DevOps とは、組織が価値を提供できるように、ソフトウェアによって有効化されたプロセスに従うということなのです。DevOps は、開発、IT 運用、およびセキュリティの各チームがパートナーとなり、SDLC の全体を通じて構築およびテストを行って、定期的なフィードバックを提供するビジネス慣行です。
DevOps 手法の導入で成功を収めるために、人々はその働き方と、コラボレートする方法を変えます。文化の変革から継続的インテグレーションと継続的デプロイ (CI/CD) による自動化まで、DevOps チームが共有のコンテキスト、専門知識、ツール導入、および役割を発展させて、より優れた製品をリリースする方法を探りましょう。
DevOps の由来: サイロから共有ワークフローへ
DevOps は、ソフトウェアの構築方法に関する新たな基準を確立しました。2000 年代中ごろまで、開発者、IT 運用、およびセキュリティの各チームは、サイロ内で作業を行い、線形プロセスに従うのが一般的でした。
開発者がコードを作成し、ドキュメントとともにアプリケーションをパッケージ化して、QA に送る。
QA チームがアプリケーションをテストして、本番運用チームに引き渡す。
運用チームがソフトウェアを本番環境にデプロイし、ソフトウェアの稼働時間と安定性を管理する (開発者チームとの直接的なやり取りはほとんどない、または皆無)。
セキュリティ チームが、デプロイ後に初めてコードの脆弱性をチェックする。
誰かが問題を報告したら、プロセスの全体をもう一度初めから繰り返す。
ソフトウェア開発に対するこういった線形アプローチは、時間がかかり、関与するすべての人のストレスになっていました。そうした中、2008 年に、システム管理者である Patrick Debois 氏とソフトウェア開発者である Andrew Shafer 氏が、運用チームと開発チーム間のギャップを埋めるためのワーキング グループを立ち上げました。このグループのベストプラクティスが、今日の DevOps プロセスに向けたジャーニーのきっかけとなりました。
運用と開発間のギャップを埋める
DevOps 文化では、チームが共有されたワークフロー内で密接に連携して、ソフトウェアのデリバリーと管理プロセスを絶えず改善しています。DevOps エンジニアは、チームのコミュニケーションを継続的に管理し、戦略を設計して実装するという重要な役割を担っています。コード関連のタスクに加えて、DevOps エンジニアには、テスト、モニタリング、リリース管理、および運用計画に関連する問題の解決に対する責任もあります。
DevOps モデルとは
DevOps 実装は、それぞれが会社のビジネス ニーズに固有のものであるため、汎用的な DevOps モデルは存在しません。 しかし、DevOps の中核的な理念には、サイロの解消と、誰もが製品に対する責任を担い、SDLC のあらゆる部分全体でチームとして連携する必要があるというアイディアが含まれています。
DevOps のメリット
従来のデプロイは難しく、手動で行われ、障害が発生することもよくあるため、従業員の燃え尽き症候群や、持続不可能なリリース サイクルの原因になります。これとは対照的に、最近の調査では、DevOps 手法や自動化といった原則の使用が生産性を促進し、デベロッパーエクスペリエンスを向上させることが明らかになっています。
DevOps は、ソフトウェア開発をより迅速で親しみやすく、コラボレート的なプロセスにします。DevOps チームで作業を行うエンジニアは、その目標に焦点を当て、ワークライフバランスを優先し、重要だと考えるプロジェクトにより多くの時間を費やします。この種の満足感は、「チームが最高の成果を挙げるのは、自らが結果に労力を注ぎ込んでいるときである」という組織心理学から学ぶ事柄を基とするものです。
生産性の向上
手動タスクを削減し、一貫性、信頼性、効率性を実現します。
クラウド対応のコード
クラウドで環境を簡単にプロビジョニングして、チームがより迅速かつ大規模に作業を行い、需要を満たすことができるようにします。
セキュリティ
ロケーションと環境の全体でアクセスを管理しながら、お客様とコードを保護します。
コラボレーション
コミュニケーションを向上させることでコラボレーション文化を構築し、育成します。
DevOps の仕組み
DevOps ライフサイクル
DevOps ライフサイクルは、ソフトウェア開発のすべての側面を対象とするものです。DevOps チームは、すべてのライフサイクル フェーズ全体で継続的にコラボレートして、ツールと責任を共有することで、ソフトウェアを効率的に構築し、リリースします。
DevOps ライフサイクルの 4 つのフェーズ
アイディア
チームが必須要件とフィードバックを収集し、必要になるリソースをおおまかにまとめ始めます。DevOps チームは継続的な計画に焦点を当てます。つまり、頻繁に、毎日でも更新できる計画です。ロードマップを作成し、目標に向けた進捗状況を追跡するため、チームは誰もがアクセスして使用できるプロジェクト管理ツールを活用します。
アイディエーション スタック
GitHub Issues とプロジェクト ボード
ビルド
プロジェクト マネージャーがタスクを割り当てると、開発者が作業を開始します。ここで力を発揮するのが DevOps です。バージョン管理とクラウド ベースの開発環境により、開発者は継続的な変更を行い、リアルタイムのコード レビューを共同で実施することができます。GitHub Codespaces のようなツールは、開発者がデスクトップ開発環境を作成したり持続させたりする必要なく、簡単な方法で変更を迅速、安全、かつ容易に行えるようにします。自動化されたツールがコード変更をビルドに変換し、必要なチェックに照らしてテストを実施して、デプロイのためにコードのマージと準備を行う継続的インテグレーション (CI) も開始されます。
継続的インテグレーション スタック
GitHub Codespaces、GitHub Actions
リリース
初回チェックに合格したら、開発者は継続的デリバリー (CD) ツールを使用して、コード変更を非本番テストまたはステージング環境に自動的にプッシュします。運用チームは、何も心配することなく、変更を本番環境に直ちにデプロイできます。
継続的デプロイ スタック
GitHub Actions を使用する CD パイプライン、GitHub Packages、Microsoft Azure
学ぶ
ソフトウェアが世界に向けてリリースされた後も、作業は終わりません。運用チームは、パフォーマンスを測定し、コード変更の影響を監視するモニタリング ツールを使用して、リリースを見守ります。安定性と稼働時間を確保し、カスタマー フィードバックを収集するとともに、開発者と緊密に連絡を取り合うことで必要な修正をプッシュし、インシデントに素早く対応します。
オブザーバビリティ スタック
Netdata、Lightstep、New Relic、App Dynamics、Sentry、Raygun、Honeycomb、Splunk
あらゆる段階での自動化
DevOps は、より迅速なリリースのため、コラボレーションと同時に自動化も強調しています。DevOps パイプライン内の CI/CD を通じたタスクの自動化は、ソフトウェアの開発とデプロイを高速化するとともに、テスト、レポート、モニタリングを用いて高品質アウトプットを確保するために役立ちます。
自動化に関する詳細はこちら
DevOps モデルと文化を取り入れる
DevOps の成功は、もともとオープン ソース チームが開発していたソフトウェアにコラボレーションを優先するアプローチを取り入れるという文化的変革にかかっています。オープン ソースでは、開発者が透明性、ワークロードの共有、継続的なフィードバックとレビュー、および強固なドキュメンテーションを奨励します。研究者である Nicole Forsgren、Jez Humble、Gene Kim 各氏による DORA’s State of DevOps のような業界レポート、および CALMS のような一般的な DevOps フレームワークは、成功を収める DevOps 文化のベンチマークとしてこれらのベストプラクティスを頻繁に使用しています。
進化した DevOps 運用
DevOps では、運用チームが開発に組み込まれており、開発者の強化に関与しています。多くの場合、これは開発者とより密接に連携して、コンプライアントでセキュアな環境とツールへのオンデマンド アクセスを提供することを意味します。また、システムの更新やインシデントの解決など、チーム独自の反復可能なタスクの多くを自動化することへの取り組みも意味します。
効果的な DevOps 管理
DevOps マネージャーは、開発およびデプロイ プロセスの全体に DevOps フレームワークを実装する責任を担っています。これには、正常なソフトウェア デリバリー、モニタリング ワークフロー、およびソフトウェア リリース管理の監督に対する責任が含まれます。効果的な DevOps マネージャーは、優れた対人スキルと問題解決スキル、および豊富な技術的経歴を備えたリーダーです。
実装に関する DevOps ベストプラクティス
DevOps は、アプリケーション ライフサイクルの全体を通じて DevOps 慣行に従うことで実装されます。DevOps 慣行には、特定の DevOps フェーズの高速化、改善、自動化に役立つものもあれば、複数のフェーズ全体での生産性の向上に役立つものもあります。
継続的インテグレーション
開発者は、継続的インテグレーションを使用してコードの自動化、マージ、およびテストを行います。継続的インテグレーションは、修正コストが低い開発サイクルの早い段階でバグを発見するために役立ちます。継続的インテグレーションは、品質確保に役立つ自動テストも実行します。頻繁なデプロイを促進するため、チームは継続的インテグレーションを使用して、リリース プロセスに取り込まれるデプロイ可能なアーティファクト (インフラストラクチャやアプリケーションなど) を生成します。
継続的デプロイ
このプロセスでは、コードを構築し、テストして、本番環境でのテストのためにデプロイします。品質を向上させるため、チームは複数の環境でデプロイし、テストを実行します。CD システムは、自動化されたリリース プロセスと、既存のソフトウェアに対する修正にも使用されます。
バージョン管理
バージョン管理の使用は基本的な DevOps 慣行で、複数の開発者がコードの作成でコラボレートできるようにします。バージョン管理システムは、コード変更のマージ、競合の解決を行い、必要に応じて変更を前バージョンにロールバックするための明確なプロセスを提供します。
アジャイル ソフトウェア開発
短期間のリリース サイクルを通じて、アジャイル ソフトウェア開発アプローチは変更に対する優れた適応性を実現します。アジャイル チームは、お客様に継続的な改善を提供し、フィードバックを収集して、お客様のニーズと要望に基づいて調整を行います。
Infrastructure as Code
システム トポロジとリソースを記述的な方法で定義することで、Infrastructure as Code はチームがコードを管理するようにリソースを管理できるようにします。これは、チームがシステム リソースを反復可能で信頼性のある制御された方法でデプロイし、本番環境と同一のテスト環境とデプロイ環境を維持するために役立ちます。
構成管理
構成管理とは、データベース、仮想マシン、およびサーバーなどのシステム内のリソースの状態を管理することを意味します。構成管理ツールは、制御された体系的な方法で変更をロールアウトすることで、チームがリスクを低減できるようにします。チームは、システム状態を追跡し、複雑な環境を大規模に運用するために、これらのツールを使用する場合もあります。
継続的監視
継続的監視を通じて、チームはアプリケーション スタック全体の健全性とパフォーマンスに対する完全かつリアルタイムの可視性を得ます。ハイパフォーマンス DevOps チームは、有意義で対応可能なアラートが設定されていることを確実にし、豊富なテレメトリ イベント データとログ データを収集します。これらのデータから得たインサイトは、チームがリアルタイムで問題を軽減し、将来のリリースでアプリケーションを改善するために役立ちます。
DevOps で実現できることとは?
ハイパフォーマンス チームがコラボレーションと自動化を実践する方法をご覧ください。
DevOps と DevSecOps
DevSecOps とは
開発や運用と同様に、DevSecOps は自動セキュリティ テストを DevOps 文化、ツール導入、およびプロセスのあらゆる箇所に統合します。
DevSecOps に関する詳細はこちら
多くの実行者にとって、セキュリティは常に DevOps の一環であるべきものでした。DevOps セキュリティは、SDLC の最後に行われるのではなく、そのソースであるコードから始まります。このアプローチは、一般的に DevSecOps または「シフトレフト」として知られています。GitHub は常に、優れた DevOps は DevSecOps を意味すると考えてきました。GitHub ツールは DevOps チームが SDLC のあらゆる段階にセキュリティを組み込むことを容易にします。
自動化されたセキュリティ ツールを使用することで、開発者はデプロイ後にセキュリティ チームがセキュリティの脆弱性に対応するのを待たずに、コードを作成しながら脆弱性を発見して対処します。DevSecOps は、開発者が DevOps ライフサイクル全体を通じてセキュリティに対する責任を担うことができるようにすることによって、開発、運用、およびセキュリティの各チームがセキュリティ問題をより迅速に発見して修復することを可能にします。
DevOps 製品
DevOps ライフサイクルの各フェーズにはユニークな考慮事項があり、1 つ、または複数の製品がその解決に役立ちます。ライフサイクルの各フェーズに対応するため、組織はその DevOps 慣行で使用する、「DevOps ツールチェイン」と呼ばれるツールのコレクションの構築に投資することがあります。最も大きな成功を収める DevOps 組織は、より高品質のソフトウェアをより迅速に提供できるように、これらのタイプのツールを使用します。
GitHub と他の DevOps プラットフォームの比較をご覧くださいCI/CD
この記事全体を通じて、CI/CD がどのようにあらゆる DevOps 慣行の基礎となるかについて説明しました。完全な CI/CD DevOps ソフトウェア ソリューションである GitHub Actions は、DevOps チームが開発速度を犠牲にすることなく、最初からよりセキュアなコードを構築し、自信を持ってソフトウェアをデプロイできるようにします。
ワークフロー オートメーション
自動化は DevOps のもう 1 つの基本的要素であり、GitHub Actions は、世界最高レベルの CI/CD を用いて DevOps ソフトウェア ワークフローの自動化を容易にします。これには、コード レビュー、ブランチ管理、および問題のトリアージが含まれます。
バージョンとソースの管理
GitHub のような優れたバージョンおよびソース管理プラットフォームは、組織の DevOps ツールチェインに統合され、製品チームが DevOps ライフサイクル全体を通じてコラボレートすることを可能にします。これには、プルリクエストなどの生産性機能が含まれており、提案されたコード変更をメイン コード ブランチに統合する前に、開発者が変更をレビューできるようにします。
セキュリティ
DevOps に投資している企業は、多くの場合、いくつかのツールに投資して脅威をモデル化し、自動セキュリティ テストを適用しています。GitHub Advanced Security などの統合型ソリューションは、ソフトウェア開発ライフ サイクルのあらゆるフェーズを通じてソフトウェア セキュリティを確保できるようにします。たとえば、GitHub Advanced Security は、コードが生成されると同時にそれをスキャンして開発者が数分でコードのセキュリティを確保できるよう支援し、そのリポジトリを監視し、45 を超える大手シークレット提供事業者が発行するシークレットを開発者に通知し、セキュリティのベストプラクティスをより優れた開発プロセスに変化させる上でサポートします。
FAQ
DevOps 自動化とは
DevOps の自動化によって、開発チームは手動タスクを自動化プロセスに置き換えることでヒューマン エラー の可能性を抑制し、ソフトウェアの出荷を加速化させることができます。たとえば、継続的インテグレーションと継続的デリバリーによって、DevOps のライフサイクルにおけるビルド、テスト、デプロイのステージを自動化することができます。
DevOps と SRE の違いは?
DevOps と サイト信頼性エンジニアリング (SRE) は両方とも、自動化、コラボレーション、監視を改善することでソフトウェア開発のライフサイクルを強化します。主な違いは、DevOps チームはソフトウェアを構築し、更新する一方、SRE チームは本番環境のソフトウェアに対処し、それが正しく機能し、サービス レベルのコミットメントに適合していることを確認するという点です。
DevOps モデルとは?
DevOps 実装は、それぞれが会社のビジネス ニーズに固有のものであるため、汎用的な DevOps モデルは存在しません。 しかし、DevOps の中核的な理念には、サイロの解消と、誰もが製品に対する責任を担い、SDLC のあらゆる部分全体でチームとして連携する必要があるというアイディアが含まれています。
DevOps と DevSecOps の違いは?
DevSecOps は、自動セキュリティ テストを DevOps の文化、ツール導入、プロセスのあらゆる部分に統合することで、DevOps 上にビルドされます。これによって開発者は、デプロイ後にセキュリティ チームがセキュリティの脆弱性に対応するのを待たなくても、コードを作成しながら脆弱性を発見し、それらに対処することができます。DevSecOps は、開発者が DevOps ライフサイクル全体を通じてセキュリティに対する責任を担うことができるようにすることによって、開発、運用、およびセキュリティの各チームがセキュリティ問題をより迅速に発見して修復することを可能にします。
優れた DevOps と考えられるものは?
優れた DevOps は “開発” と “運用” を組み合わせ、チームをまとめてより優れたソフトウェアを迅速に提供できるようにします。DevOps の成功を評価するためのベストプラクティスには、コラボレーション、反復タスクの自動化および、継続的なフィードバックやリポジトリに対するオープン アクセスといった透明性が含まれます。
DevOps エンジニアの業務とは?_
DevOps エンジニアは、チームのコミュニケーションを継続的に管理し、戦略を設計して実装することで、DevOps のライフサイクルにおける重要な役割を担っています。コード関連のタスクに加えて、DevOps エンジニアには、テスト、モニタリング、リリース管理、および運用計画に関連する問題の解決に対する責任もあります。