「DevOps」は技術ではなくムーブメント。開発と運用の信頼関係が不可欠

2012年8月21日

この記事は、日経SYSTEMS 6月号に掲載された連載「新野淳一の技術インパクト」第4回のオリジナル原稿をPublickey掲載用に編集したものです。Publickeyでは日経SYSTEMS編集部との合意を得て、雑誌発行から一定期間後に記事をPublickeyに掲載しています。

DevOps

 あるソフトウェアが利用者に価値を届けるには、そのソフトウェアのコードを正しく開発することと、開発されたコードが能力を発揮するように適切に実行、運用することの両方が必要だ。

 これまでのIT業界では正しくコードを開発することが重視され、運用は軽視される傾向にあった。それは一般に、顧客への成果物としてコードの品質が最重要であることに起因した。

 クラウドがこの状況を大きく変えつつある。クラウドによってソフトウェアがサービスとして提供されるようになると、コードに実装された機能、性能と同等かそれ以上に、快適な応答速度を実現しているか、可用性は十分か、障害発生時の復旧は迅速か、データは安全に保存されているか、などの運用の質が、サービスの価値に決定的な影響与える。

 特にオンラインサービスを主力とする企業は、コードの質と運用の質がどちらも同じように重要であるということを早くから認識するようになった。2009年に米国で行われたイベント「Velociy」で、当時FlickrのエンジニアだったJohn Allspaw氏とPau Hammond氏は、開発と運用は協力すべきだという問題意識を提示するプレゼンテーションを行い、そこで「Development=開発」と「運用=Operations」を組み合わせた用語「DevOps」がはじめて使われた。

開発と運用の利害対立を乗り越える

 DevOpsという用語と考え方が登場したのは、開発と運用をそれぞれ担う開発部門と運用部門は反目しあっていることが多いためだ。その大きな理由は、両部門の表面的な利害が対立しているためだ。

 開発部門のミッションは機能の改善と追加、性能の向上などである。日々コードを追加変更し、必要ならばデータベースの構造やサーバ構成の変更も要求することになる。一方の運用部門のミッションは安定運用である。そのためには、コードもデータベースの構造もサーバ構成も可能な限り変更しないことが望ましい。

 かくして、開発部門は「どんどん機能追加や性能向上をしたいのに、運用は迅速に対応してくれない。時間がかかりすぎる」と不満を持ち、運用部門は「そんなにころころと変更されたら安定運用に責任が持てない」と不満を持つことになる。

 そうした両者の利害を乗り越えて、共通の目的であるビジネスを推進していこう、というのがDevOpsのコンセプトである。

 DevOpsとは具体的な技術や方法論の名前ではなく、エンジニアの役職名でもない。開発と運用が協力し合うことを包括的に示す用語である。アジャイル開発という用語が、エクストリームプログラミング(XP)やスクラムや統一プロセスといった、迅速な開発を実現するさまざまな開発手法を包括する名称であるのと同じだ。

アジャイル開発とクラウドを活用する

 DevOpsにはまだ定まった方法論や手法といったものは存在しない。しかしおおむねその文脈で共有されているのは、アジャイル開発で語られているContinuous Integration(継続的統合)やContinuous Deliverty(継続的デリバリ)の手法の延長線上で安定運用を実現することと、柔軟なインフラとしてクラウドを活用することである。

 これまで、ソフトウェアのバージョンアップとは数カ月に一度から数年に一度の大きなイベントだった。しかしイベントが大きいほど品質やスケジュールに対するリスクも大きい。それよりも小さなイベントを頻繁に繰り返す方がリスクをコントロールしやすい。これが継続的インテグレーションの考え方であり、それをさらに推し進めて、ビルドしたものを本番環境にデリバリしてしまうのが継続的デリバリである。

 継続的デリバリを実現するには、アジャイル開発手法を組織に導入し、バージョンコントロールツールはもちろん、ビルドの自動化、テストの自動化、デリバリの自動化といったさまざまなツールが必要となる。さらに本番環境の挙動を把握するには、さまざまな運用監視ツールが必要となるだろう。

 さらに継続的デリバリの中で運用部門が本番環境の安定運用に責任を持つためには、開発プロセスの中で品質管理などのフェーズに積極的に関わり、一方で開発部門はデリバリされたソフトウェアの挙動を見て安定運用や機能に問題があれば、それを今後の開発にフィードバックする必要がある。

 DevOpsを実現するには、このように開発や運用にかかわるツールとインフラの整備と方法論が必要だ。と同時に、サービスのスケーラビリティや新機能には迅速なサーバの追加や構成の変更といったインフラレベルでの柔軟性が求められる。そのためにクラウドは不可欠なインフラといえる。

 実際、FacebookやTwitte、Flickrなど先進的なオンラインサービス企業では、こうした先進的なツールと手法によって、1日に何度も新機能がリリースされている。

尊重と信頼のカルチャーこそ重要

 DevOpsにはバージョン管理、テスト、デリバリなどの自動化ツールとクラウドインフラの活用が欠かせないという説明をしてきたが、それ以上にDevOpsに欠かせないのは開発部門と運用部門の信頼関係であると、DevOpsに関わる誰もが指摘している。

 運用と開発が一体となって相互に尊重し信頼し合い、問題が発生したときには押しつけ合うのではなく、共通の問題として協力して解決に当たる。そういうカルチャーの育成こそDevOpsの実現に不可欠なのだ。

関連記事

あわせて読みたい

DevOps




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本