DevOpsという開発概念が生まれたのは2009年のこと。当時、オライリー(米国のメディア企業)が主催した「Velocity 2009」というカンファレンスにてFlickr(写真共有サービス)のエンジニアが行ったセッションで初めてDevOpsが紹介されました。
同セッションでは「10+ Deploys Per Day: Dev and Ops Cooperation at Flickr(1日に10回のデプロイ:Flickrにて開発とオペレーションの協力)」というスライドと共にDevOpsに関する概念が説明されています。
このイベントから既に10年近くが経過するので、現在ではDevOpsという言葉を知らない方は少ないでしょう。しかし、実際にDevOpsへ正確に取り組めているかといえば、そうではない企業が多いようです。
ここではDevOpsの概要について改めて整理しつつ、その成功方法について解説していきます。
結局DevOpsって何?
「DevOpsは開発チームと運用チームが互いに協力すること」と単純に考えてしまってはいないでしょうか?確かに、DevOpsの基本は開発チーム・運用チームが協力することです。しかし、それだけでは無いことも理解しなければなりません。
双方が協力したからといってFlickrのように1日10回のデプロイが可能かといえば、不可能に近いでしょう。単に協力するだけなら今すぐにでもできます。開発チームと運用チームに生じやすい対立関係を考えずに、同じ場所で仲良く仕事をすればいいだけです。しかし皆さんが目指すDevOpsは当然そういった類のものではないと思います。
そこでDevOpsを実現するために必要なのが組織文化と共有ツールと開発運用のプロセスです。組織文化や開発チームと運用チームが互いに尊重し協力し合える環境づくり。共有ツールは情報共有のスピードを向上して細かい開発が行える環境づくり。開発運用のプロセスは双方がルールにのっとった開発および運用を行える環境づくりに欠かせません。具体的な内容については後述します。
この組織文化、共有ツール、開発運用プロセスという3つの要素が揃うことで初めてDevOpsは実現します。実際にFlickrは協力し合えるための組織文化を作ったり6つ以上の共有ツールを利用したりと、DevOpsを実現するにあたってそれに欠かせない要素を揃えた上で実践しています。
DevOpsを単なる協力と考えないでください。DevOpsに関する概念と欠かせない要素を深く理解して、まずはDevOpsの本質を知りましょう。
DevOpsに欠かせない組織文化とは
では、開発チームと運用チームが互いに尊重し協力し合える組織文化を作るためにはどうすればよいのでしょうか?まずは双方がなぜ対立関係になりやすいかを理解していきましょう。
ビジネスにおける開発チームと運用チームの役割というものは大きく違います。同じ情報システム内にあっても、開発チームはサービスをどんどんリリースする役割があり、運用チームにはサービスのパフォーマンスを安定させる役割があります。つまり開発チームはサービスをリリースしたい、しかし運用チームにはパフォーマンスを安定させる役割があるため遮二無二サービスをリリースされては困ります。こうした役割の違いから開発チームと運用チームに対立関係が生じやすく、結果としてサービスのビジネス価値は同じ水準をキープしたままになるのです。
ここでもう一つ理解いただきたいのは、開発チームと運用チームの役割は違えどビジネスにおける最終目標は同じということです。開発チームがサービスをリリースするのも運用チームがパフォーマンスを安定させるのも、サービスを利用するユーザーの利便性を高めてビジネス価値を高めるためではないでしょうか。本質的には同じ目標を持っているにも関わらず対立してします。それは非常に勿体ないとしか言いようの無い状況です。
そこでFlickrが取り入れた組織文化について参考にすると、彼らは開発チームと運用チームの間に次のような組織文化を作りました。
互いを尊重する…尊重するとは役割は違えど一緒に働いている相手を心から思いやること。さらに、一人ひとりの能力や功績を評価して皆が優秀な人間と認めること。
互いを信頼する…「自分以外の皆はすべて優秀」と認めることで信頼が生まれ、仕事を任せることができます。これは、問題を一人で抱え込まないことにも繋がり、各人の心的負担が大きく軽減することにも寄与します。
失敗を責めない…新しいことに挑戦すると最初のうちは失敗の連続です。しかしその失敗を責めてはいけません。それが他者のチャレンジ精神を潰すことになり、チャレンジも無ければ成功も無くなってしまうからです。
一緒に考える…何か問題が起こったときはその当事者を非難するのではなく、同じ問題が起こらないためにどうすればよいのか一緒になって考えること。それが建設的な組織文化を生み出します。
DevOpsを実現するための組織文化を作る際は、ぜひこれらを参考にしてください。
DevOpsに欠かせない共有ツールと開発運用プロセス
組織文化を作るだけではDevOpsはまだ実現しません。それを体現するための共有ツールを導入し、開発運用プロセスを整備する必要があります。FlickrではDevOpsを実現するために次のようなツールを導入していました。
インフラ自動化ツール…AnsibleやCheなどインフラ構築を自動化する
バージョン管理ツール…GitやMercurialなど同じバージョン管理ツールを共有する
ビルド&デプロイ自動化ツール…JenkinsやCapistranoはどビルド&デプロイを自動化するツール
フィーチャーフラグ…機能の有効無効を設定ファイルによって変更するテクニック
メトリクス共有ツール…New RelicやApplication Insightsなど取得したメトリクスの結果をダッシュボードで共有する
チャットツール…SlackやHipChatなどにビルドおよびデプロイのログやアラートを表示するbotを作成する
必ずしもこれらのツールすべてが必要というわけではないため、自社製品やサービスの特徴および開発チームと運用チームの状況を踏まえた上で適切なツールを導入します。さらにそのツールを活用した開発運用プロセスをマニュアルとして整備し、誰もが同じように作業できる環境を整えます。
DevOpsで素早い開発・運用を
そもそもDevOpsが何のためにあるかというと、開発からリリースまでのスピードを速めてさらに運用を最適化するためのプロセスを整備することです。DevOpsを実現することでFlickrのように1日10回のデプロイも不可能ではありません。特にスピードが命の中小企業はDevOpsを実現し、ビジネス価値の向上を図りましょう。