近年、さまざまなイベントや記事などでDevOps(デブ・オプス)という単語を見かけることが多くなりました。チームが一丸となってビジネスに取りくむ、理想の体制として語られるDevOpsですが、「いまひとつその概要が理解できない」という方は多いのではないでしょうか。
ここでは、DevOpsという概念、DevとOpsの対立が生まれる理由と、実現していくために必要な姿勢、心構えなどを紹介していきます。

DevOpsとは

20160324_1

DevOpsとは、開発(Development)と運用(Operations)を組みあわせた造語です。これは、開発部門と運用部門が協力しあいながら、システムを作りあげていく体制のことを指しています。
※ただし、組織の体制等により多少の解釈の違いが生じます。
DevOpsの概念は、継続的インテグレーション(CI)の知識なしには語ることができないため、まずはこれがどのようなものか、解説していきましょう。

■継続的インテグレーションの概要

20160324_2

継続的インテグレーションとは、ソフトウェア開発においてビルドやテストを“自動的”に“くり返し”おこなう手法です。これは、Jenkins(ジェンキンス)のような継続的インテグレーションのためのツールに、なんらかの手順を登録しておき、それを定期的に実行することで実現されます。

この手法を採用することによって、

・ソースコード変更後にすぐデプロイとテストをし、問題を早い段階で発見できる
・作業がすべて自動化されているため、開発が効率化・省力化できる

などのメリットがあるのです。

■継続的インテグレーション から DevOpsへ

20160324_3

継続的インテグレーションを採用する企業がふえてくると、「どうやら、これを効果的に実現するためには、開発部門と運用部門がきちんと連携をとらないとダメだな」ということが、だんだん解明されてきました。

なぜなら、頻繁にデプロイをするためには、運用部門もアプリケーションの仕様を正しく理解し、自動化のしくみを作る必要があります。それに、開発環境とテスト環境、そして本番環境では、サーバのスペックや各種設定なども異なっているため、そうした知識や作業の段取りなどを、メンバー間になんらかの方法で共有する必要があるためです。

その発想がだんだんと進化し、“DevOps”という概念につながっていきます。

DevとOpsが衝突する その原因と具体例

前項目の説明だけを聞くと、DevOpsという体制は素晴らしいものであるように見えます。しかし、それを実現するためには乗りこえなければいけない壁があるのです。
それは、“DevとOpsの衝突”。伝統的な組織では、開発部門と運用部門の意見は対立していることが多いのです。その対立はなぜ起こってしまうのか、それぞれの立場に立って考えていきましょう。

■開発部門(Dev)の立場

20160324_4

開発部門の考え方は「新しい機能をどんどん作ってリリースしていきたい」というものです。サービスをよりよいものにしていくためには、新機能の追加や既存機能のアップデートが必要ですし、それが無ければユーザに飽きられてしまうからです。

■運用部門(Ops)側の立場

20160324_5

一方、運用部門の考え方は「サービスを安定稼働させることが重要」というものです。ユーザがいつでも安心してサービスを利用できるようにするには、システムにトラブルが発生することをなるべく避けたい。そのため、「安定して稼働しているものは、なるべくそのままの状態にしておく」という方針をとっています。

ここで、両者の考え方には矛盾があることがわかります。開発部門は「どんどん機能を追加していきたい。」対して運用部門は「安定したシステムに手を加えたくない」という矛盾です。

開発の現場でおこるトラブルの例

両者のそうした考え方の違いから、たとえば、開発の現場では次のようなことが起こります。

■トラブル例その1

開発部門が「新機能をすぐにリリースしたい」と考え、修正した箇所の情報をきちんと共有しないまま、運用部門に作業を依頼してしまう。

20160324_6

■トラブル例その2

情報共有がうまくされていないため、新機能が原因でトラブルが発生したさい、どう対応したらいいのか運用部門が判断できない。また、サービスのリリースは夜間におこなわれることも多いため、そのタイミングでは開発部門と連絡がとれないこともある。

20160324_7

■トラブル例その3

このような事態を経験すると、運用部門は「なるべくリリースをしたくない」という心理的抵抗が生まれる。同時に、開発部門は「なぜ運用部門はリリースにそれほど抵抗するのだろう」という不信感が起こる。

20160324_8

こうした事情があり、「開発部門と運用部門の考え方は衝突するもの」と言われてきました。

DevOpsを実現するために

20160324_9

両者がきちんとコラボレーションできなければ、変化が激しい現代のビジネス潮流に乗ることはできません。こうしている間にも競合他社はサービスを進化させていますし、利用者の心は気まぐれです。事業部門が「こうしたい」と考えたことをすぐさま実行にうつせなければ、「環境の変化に適応できなかったサービス」として衰退してしまう運命にあるのです。

DevOpsを実現するためには、もちろん、「Chef(シェフ)」や「Puppet(パペット)」などの構成管理ツールを使ったり、継続的インテグレーションを実施したりすることで、開発・運用効率化のための環境整備に取りくむことは重要です。

しかし、本質はそこではありません。
最も重要なのは、開発部門、運用部門ともに「自分たちは、ビジネスを実現するために働いているのだ」という意識を持つことです。

DevOpsとはシステム等の開発や導入を行うために、開発チームと運営チームが協力し連携をすることです。すばらしい機能の数々も、安定して稼働するシステムも、じっさいにユーザに使ってもらい、満足してもらえなければガラクタと同じです。
常に、「私たちはなんのためにサービスを運用しているのだろうか」という目的を考え、それをふまえたチーム作りをしていくこと。それが、正しい意味での“DevOps”を実現するカギになってくるのです。


最新情報はFacebook/Twitterをフォロー!

 


この記事を書いた人:ぞの

img_zono

Webアプリケーションエンジニアとして様々な現場に参画し、多種多様な言語を習得。エンジニアとしての強みは汎用性の高さと、メンバーとコミュニケーションを取り合いながら円滑に案件を進められること。趣味は音楽と将棋。Ruby愛好家。Twitter : @zono1009

関連する記事

facebook

案件情報や最新記事をお届けします。
ぜひチェックしてみてください。