ITpro Special
週間WEEKLY ITpro Special ITpro

DevOpsのコンセプトと最新技術を知る

変化の激しい環境でビジネスを成功に導くには、仮説としての戦略を現実世界で素早く検証できる態勢を整えておくことが求められる。それを可能にするのがDevOpsだ。DevOpsはソフトウェア開発者(Dev)と運用管理者(Ops)の協調によってソフトウェアの企画から本稼働までの期間を大幅に短縮する。マイクロソフトはDevOpsの普及に力を入れており、自社の製品やサービスだけでなく、オープンソースソフトウェア(OSS)の利用も積極的に推奨している。ここではITpro EXPO 2015のセミナーに登壇したマイクロソフト・コーポレーション シニアテクニカルエバンジェリストDevOps ITProの牛尾 剛氏の講演内容を紹介しよう。

アジャイルでの短期ソフトウェア開発には限界があった

マイクロソフト・コーポレーション
シニアテクニカルエバンジェリトDevOps
ITpro
牛尾 剛 氏

 「DevOpsの本質は、開発者とインフラ技術者が協力し、ソフトウェアライフサイクルやビジネス価値の創出を改善する活動です」とDevOpsの普及活動に取り組むマイクロソフト・コーポレーションの牛尾 剛氏は語る。DevOpsについての公式な定義は存在しないが、この点については多くのエンジニアが了解しているという。2009年頃に米国で登場したDevOpsは、アジャイルソフトウェア開発でも解決できなかった課題にインフラ構築や運用管理作業の自動化で対処するという色彩が濃い。

 アジャイルソフトウェア開発では、日々刻々と変わる顧客ニーズに短納期で応えるために、イテレーション(反復)と呼ばれる短期の開発/テストサイクルを繰り返すことをその基本的な原理としている。まずは最低限の機能を組み込んだ“初版”を作り、機能拡張と動作テストを繰り返して完成品へと仕上げていくのがイテレーションの進め方だ。

 ただし、実際のソフトウェア開発のシーンではねらい通りの短期開発ができているわけではないと牛尾氏は語る。出来上がったソフトウェアを本稼働に移すには品質保証(QA)やインフラ引き渡しという関門をパスしなければならず、リリースまでの期間を3カ月以下に縮めるのは難しかったのである。

動作環境をスクリプトで記述して構築作業を自動化する

 このような背景から生まれたのが、DevOpsというソフトウェア開発/リリースの方法論である。ベースとなっているのは、ソフトウェア開発の世界で実践されてきたアジャイルソフトウェア開発の方法論と、折しも実用化されつつあった運用管理の自動化技術などだ。

DevOpsの誕生。DevOpsはアジャイルソフトウェア開発の方法論と運用管理自動化技術の組み合わせから生まれた。開発者と運用者が協調して仕事を進める
[画像のクリックで拡大表示]

 マイクロソフトはソフトウェアツールさえあればDevOpsを実践できると考えているわけではない。牛尾氏はDevOpsのおもな要素として「ピープル」「プロセス」「プロダクト」の3つを挙げ、ピープルにはソフトウェア開発者・運用管理者・ビジネス(経営層やその他ステークホルダー)の3者で構成されており、統合開発環境や運用管理ツールはプロダクトという1要素でしかないと説明する。つまり、DevOpsの実践によってソフトウェアライフサイクルやビジネス価値を高めるには、ステークホルダーとなるソフトウェア開発者・運用管理者・ビジネスがプロセスを理解し、適切に進めていかなければならないのである。

 DevOpsのプロセスは、「計画」→「開発とテスト」→「リリース」→「モニタと学び」→「計画」……と進む繰り返し型の構造になっている。

 このうち、「計画」の工程では、目標を実現するにはどのような仕事が必要になるかを洗い出し、それぞれの仕事のタスク(作業)の進捗度合いをどのように把握・管理するかといったプロジェクト実行計画を策定する。牛尾氏は「ソフトウェア開発プロジェクトのための計画ツールは運用管理にも適用できます」と語る。

 それに続く「開発とテスト」の工程では、ソフトウェアのソースコードをコーディングし、単体テストを済ませてから、ビルド(実行可能ファイル)を作成して検証する。この工程でもっとも重要な作業項目として牛尾氏は単体テストを挙げる。「デリバリーの高速化とリソースの最適化を実現するには、ビルドとテストを自動化する『継続的インテグレーション』というプラクティス(実践項目)が効果的です」

 続いて「リリース」工程では、検証が終わったビルドを統合テストや負荷テストの環境にデプロイ(配備)してテストした後、プリプロダクション環境やステージング(準・本稼働)環境を経て、最終的には本稼働環境にデプロイする。運用管理の作業はこの工程から急速に増えるが、各テスト環境の構築とそこへのデプロイやテストなどを自動化する「継続的デプロイメント」を実践すれば期間も工数も減らせるはずだ。

 「開発とテスト」と「リリース」工程での運用管理作業の自動化には、インフラの構築や設定変更の内容をスクリプトなどのソースコードとして記述・実行させるInfrastructure as Code(IaC)という手法が使われる。このスクリプトはアプリケーション用のソースコードと同じ場所(バージョン管理ツールのデータベースなど)に格納して管理できるので、ソフトウェア開発者と運用管理者が協調して作業するのも容易だ。また、IaC用のツールは商用製品/サービスまたはオープンソースソフトウェアとしてすでに多数存在しているので、その中からそのプロジェクトに合ったものを適宜選んで使えばよい。

 最後の工程となる「モニタと学び」では、エージェントなどをあらかじめソフトウェアに組み込んでおき、それによって得られたフィードバック(学び)を次のイテレーションに活かしていく。これは仮説駆動型開発と呼ばれるプラクティスで、いわゆるA/Bテスト(両案を検討する方式)のほか、意図的にエラーを発生させて、その後の振る舞いを検査するフォールトインジェクション手法による根本原因分析(RCA)などにもしばしば使われる。

DevOpsプロセス。計画→開発とテスト→リリース→モニタと学び→計画……と進む繰り返し型

最初の一歩はテスト駆動開発とInfrastructure as Code

 セッションでは、DevOpsのデモンストレーションもおこなわれた。シナリオは、クラウドで使用できる「Visual Studio Online」を使ってJavaソフトウェアのコーディング・テスト・ビルドを実行したうえで、同じくクラウド上で動作するLinuxベースの稼働環境に自動的にデプロイする継続的インテグレーション/継続的デプロイメントである。

 では、DevOpsを実践するには何から始めればよいのか――。牛尾氏は「ソフトウェア開発者はテスト駆動開発、運用管理者はInfrastructure as Codeから始めればよいでしょう。マネージャーの役割は経営層などのステークホルダーの巻き込みです」と語る。DevOps用のツールとして推奨されたのは、Azure Resource Manager(JSON対応の管理ツール)、Docker(ソフトウェアコンテナー)、Chef(運用管理自動化ツール)、Serverspec(サーバー構成のテストツール)など。いずれも、Microsoft Azure上で利用できるツールだ。

 このほか、「座学では習得が難しいDevOpsをマイクロソフトのエバンジェリストに教えてもらいながら体験できる」(牛尾氏)ワークショップ型のトレーニングとして、「DevOpsハッカソン」が日本マイクロソフトで定期的に開催されている。DevOpsに興味を持った方は参加するとよいだろう。

お問い合わせ