PR

 ソフトウエアが利用者に価値を届けるには、コードを正しく開発することと、開発したコードが能力を発揮するように適切に運用することの両方が必要だ。これまでのIT業界では前者のコード開発が重視され、運用は軽視される傾向にあった。それは一般に、顧客への成果物はコードであり、その品質が最重要であることに起因した。

 クラウドがこの状況を大きく変えつつある。クラウドでの「顧客への納品」は、サービス提供に当たる。コードの質はサービスの質と直結するが、それ以上に大きな影響を与えるのは可用性などの運用の質だ。

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

 DevOpsという用語が登場した背景には、多くの企業で開発部門と運用部門が反目し合っていることがある。その大きな理由は、両部門の表面的な利害が対立しているからだ。開発部門のミッションは機能の改善と追加である。日々コードを変更し、必要ならばデータベースやサーバー構成の変更を要求する。一方の運用部門のミッションは安定運用だ。そのためにはコードもデータベースもサーバー構成も可能な限り変更しないのが望ましい。

 かくして、開発部門は「どんどん機能追加したいのに、運用部門は迅速に対応してくれない」と不満を持ち、運用部門は「そんなにコロコロと変更されたら安定運用に責任が持てない」と不満を持つことになる。そうした両者の利害を乗り越え、共通の目的であるビジネスを推進していこう、というのがDevOpsのコンセプトである。DevOpsとは具体的な技術や方法論の名前ではなく、エンジニアの役職名でもない。開発と運用が協力し合うことを包括的に示す用語である。

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

 DevOpsにはまだ定まった手法は存在しない。しかしおおむねその文脈で共有されているのは、アジャイル開発で語られている「継続的インテグレーション」や「継続的デリバリー」の手法の延長線上で安定運用を実現することである。

 これまでソフトウエアのバージョンアップは数カ月から数年に一度の大きなイベントで、大きなイベントであるだけにリスクも大きかった。そこで「小さなイベントを頻繁に繰り返すことでリスクをコントロールしよう」というのが継続的インテグレーションの考え方であり、それを推し進めて本番環境にデリバリーするのが継続的デリバリーである。これらを実現するにはアジャイルを導入し、ビルドなどの自動化ツールや運用監視ツールを活用することも必要となるだろう。

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

 DevOpsを実現するにはさまざまなツールや方法論が必要だが、そうした環境は整いつつある。さらに大事なことは、「開発部門と運用部門の信頼関係」である。これは、DevOpsに関わる誰もが指摘することだ。開発部門と運用部門が一体となって相互に信頼し合い、問題が発生したときには押しつけ合うのではなく共通の問題として協力して解決に当たる。そういうカルチャーの育成こそDevOpsの実現に不可欠なのだ。

新野 淳一(にいの じゅんいち)
Publickeyブロガー/ITジャーナリスト
大学でUNIXを学び、株式会社アスキーに入社後、データベースのテクニカルサポート、雑誌編集者などを経て退社し、フリーランスライターに。2000年、株式会社アットマーク・アイティ設立に参画、オンラインメディア部門の役員として2007年に株式公開を実現、2008年に退社。再びフリーランスに戻り、2009年にブログPublickeyを開始