DevOps 文化

2015年7月9日

アジャイルソフトウェア開発は、要求分析、テスト、開発間のサイロをいくつか解消しました。デプロイメント、運用、保守は、ソフトウェア開発プロセスの他の部分から同様の分離を受けてきた他の活動です。DevOpsムーブメントは、これらのサイロを取り除き、開発と運用の間のコラボレーションを奨励することを目的としています。

DevOpsは、主に新しい運用ツールと確立されたアジャイルエンジニアリングプラクティスの組み合わせによって可能になりました[1]が、これだけではDevOpsのメリットを実現するには十分ではありません。最高のツールがあっても、適切な文化がなければ、DevOpsはただの流行語にすぎません

DevOps文化の主な特徴は、開発と運用の役割間のコラボレーションの強化です。チーム内および組織レベルで、このコラボレーションをサポートするいくつかの重要な文化的変化があります。

DevOpsには、チーム内および組織内で重要な文化変革が必要です

責任の共有という姿勢は、より緊密なコラボレーションを促進するDevOps文化の側面です。開発チームが、システムが別のチームに引き継がれて管理される場合、システムの運用と保守に無関心になるのは簡単です。開発チームがシステムのライフサイクル全体にわたって管理する責任を共有する場合、運用スタッフの苦労を共有できるため、デプロイメントと保守を簡素化する方法(たとえば、デプロイメントを自動化したり、ログを改善したりするなど)を特定できます。また、本番環境でシステムを監視することによって、追加の観察された要件を取得することもできます。運用スタッフがシステムのビジネス目標の責任を共有する場合、開発者とより緊密に連携してシステムの運用ニーズをより深く理解し、これらのニーズを満たすのに役立ちます。実際には、コラボレーションは、運用上の懸念(デプロイメントや監視など)に対する開発者の意識の高まりと、運用スタッフによる新しい自動化ツールとプラクティスの採用から始まることがよくあります。

共有責任の文化をサポートするには、いくつかの組織的な変更が必要です。開発と運用の間にサイロがあってはなりません。引き継ぎ期間やドキュメントは、最初からソリューションについて協力する代わりにはなりません。運用スタッフが早期にチームに関与できるように、リソース構造を調整すると役立ちます。開発者と運用スタッフを同じ場所に配置すると、彼らが協力するのに役立ちます。引き継ぎやサインオフは、人々が責任を共有することを妨げ、非難の文化に貢献します。代わりに、開発者と運用スタッフの両方がシステムの成功と失敗の両方に責任を負う必要があります。DevOps文化は、開発者と運用スタッフの役割の境界線を曖昧にし、最終的には区別をなくす可能性があります。組織にDevOpsを導入する際の一般的なアンチパターンは、誰かに「DevOps」の役割を割り当てるか、チームを「DevOpsチーム」と呼ぶことです。そうすることで、DevOpsが打破しようとしている種類のサイロが永続化し、DevOpsの文化とプラクティスが広範囲に広がり、組織全体に採用されるのを妨げます。

もう1つの貴重な組織的変化は、自律的なチームをサポートすることです。効果的にコラボレーションするためには、開発者と運用スタッフは複雑な意思決定プロセスなしに決定を下し、変更を適用できる必要があります。これには、チームを信頼し、リスクを管理する方法を変更し、失敗を恐れない環境を作成することが含まれます。たとえば、テスト環境にデプロイするためにサインオフ用の変更リストを作成する必要があるチームは、頻繁に遅延する可能性があります。このような手動チェックを要求する代わりに、完全に監査可能なバージョン管理に頼ることができます。バージョン管理の変更は、チームのプロジェクト管理ツールのチケットにリンクすることもできます。手動サインオフがなければ、チームはデプロイメントを自動化し、テストサイクルを高速化できます。

DevOps文化への移行の効果の1つは、新しいコードを本番環境に投入することが容易になることです。これには、さらにいくつかの文化的な変更が必要です。本番環境での変更が健全であることを保証するために、チームは開発プロセスに品質を組み込むことを重視する必要があります。これには、パフォーマンスやセキュリティなどのクロスファンクショナルな懸念事項が含まれます。継続的デリバリーの手法(自己テストコードを含む)は、定期的でリスクの低いデプロイメントを可能にする基盤を形成します。

チームがフィードバックを重視することも重要であり、開発者と運用スタッフが協力する方法だけでなく、システム自体も継続的に改善する必要があります。本番環境の監視は、問題を診断し、潜在的な改善点を見つけるのに役立つフィードバックループです。

自動化はDevOpsムーブメントの基礎であり、コラボレーションを促進します。テスト、構成、デプロイメントなどのタスクを自動化することで、人々は他の価値のある活動に集中できるようになり、人的エラーの可能性が減ります。自動化の役立つ副作用は、自動化されたスクリプトとテストが、システムの役立つ常に最新のドキュメントとして機能することです。たとえば、サーバー構成を自動化すると、スノーフレークサーバーに関連する推測がなくなり、開発者と運用スタッフがサーバーの構成方法を平等に知って変更できることを意味します。

1: 運用ツールには、仮想化、クラウドコンピューティング、自動構成管理が含まれます。これらは、継続的インテグレーション進化的な設計、クリーンコードなどのエンジニアリングプラクティスによってサポートされることがよくあります。