テスト駆動インフラ/インフラCIの潮流、Serverspecが果たす役割
インフラやソフトウェア開発に携わるエンジニアの集い「July Tech Festa 2014」が6月22日に産業技術大学院大学で開催された。今年で2回目を迎えるイベントで、当日はあいにくの空模様だったが夜遅くまで非常に賑わいをみせていた。数あるセッションの中からServerspecに関する基調講演のレポートをお届けする。
基調講演に登壇したのはテストフレームワークServerspec開発者の宮下剛輔氏。paperboy&co.(現 GMOペパボ)の元テクニカルマネージャーで、3月からフリーランスエンジニアとしてServerspec Operationsの屋号で活動中。
インフラ関連の技術トレンド
宮下氏は最近のインフラ※関連の技術トレンドを振り返りつつ話を進めていった。昨年2013年はChefが非常に盛り上がった、伊藤直也氏が発表した電子書籍『入門Chef Solo - Infrastructure as Code』が火付け役となり、立て続けに紙書籍も発売されている。4月にサンフランシスコで開催されたChefConf 2014には宮下氏も含め1000人を超えるエンジニアが集結したという。なお、ChefやPuppetは比較的大規模なシステム向けのツールで、最近ではAnsibleが簡単に使えて人気が出てきていると語る。
ここではOSからミドルウェアのソフトウェアレイヤーを指すワードとして使用している
他にも仮想化関連のツールとしてVagrantやDocker、また本セッションのメインテーマであるテスト駆動インフラとインフラCIのツールとしてTest KitchenやServerspecを挙げた。ツールではないがチャド・ファウラー氏のImmutable Infrastructureに関するプログポストも非常に話題になった。
テスト駆動インフラ/インフラCIとは?
テスト駆動インフラ/インフラCIは、アプリケーション開発におけるTDD(テスト駆動開発)やCI(継続的インテグレーション)を、それぞれインフラ構築に応用したもの。宮下氏の中では「テスト駆動サーバ構築」として2007年ころから構想があったが、インフラをテスト可能にするという世界を広げたのはServerspecだと自負する。GitHub FlowによってPull Requestでインフラの変更を受け付け、CIサーバーで継続的にテストしていくという考えだ。
Serverspecは2013年3月末にリリースしたコードの開発やリファクタリングを効率よく行うためのツール。RubyのテストフレームであるRSpecを使用してサーバーの状態(本質的にはサーバーの状態を記述したPuppetのマニュフェストやChefのレシピなどのコード)をテストしている。
テストツールを開発したきっかけは2006年に遡る。当時は手動の手順書やシェルスクリプトから徐々にPuppetを使い始めて構築を自動化していたそう。ただし構築後のチェックをExcelのチェックシートでやっていて完全なものではなかった。2007年にAssurerというPerl製のサーバテストフレームワークを制作したが、プラグインで拡張可能にするなど、色々を機能を詰め込み過ぎたためツールが複雑になり、流行らなかったという(自分自身もだんだん使わなくなっていた)。
それからしばらく月日が流れ、またPuppetをさわりはじめたときに既存のテストツールを探し始めたが、Chef周辺はテストツールが充実している反面、Puppetにはrspec-puppetくらいしか使えるものがなかった。rspec-puppetは実際のサーバの状態をテストするものではなく、中間形式だとツールに依存するため自作することにした。hiboma氏がRSpecで書いていたLXCのコンテナをテストするコードを参考に1日でプロトタイプをつくりRubyGemsで公開した。
その後、tkmr氏が複数OS対応、raphink氏がバックエンド回りの強化を行い、いろんな人がGitHub上で開発に参加してくれた。現在はバージョン2.0に向けより拡張しやすくするためリファクタリング中だという。
新たな技術トレンドを生み出す秘訣
ではServerspecは本当に成功しているのだろうか? 同氏は、Black Duck Softwareが主催したOpen Source Rookies of the Year 2013でDockerなどと並んで受賞したこと、RubyGemsのダウンロード数が30万にのぼり(ちなみにChefが400万ほど)、雑誌や書籍などでも多く言及されている点をアピールする。
成功の要因としては、まず別領域での成功を持ち込んだことを挙げた。冒頭でも解説したとおり、テスト駆動インフラ/インフラCIはソフトウェア開発におけるテスト駆動開発と継続的インテグレーションから来ている。また"Server"と"RSpec"で"Serverspec"という直球で連想しやすい名前にしたのもポイントだ。そして英語でドキュメントを作成することが大前提、ドキュメントはサッと読んですぐに分かるかが非常に重要。メジャーなPuppetとChefといったワードを散りばめてそれらの勢いに乗っかったことも広まった要因だと語る。
ツール自体をシンプルにし、かつ拡張性を担保しておくことで他のツールとの組み合わせが生まれる。"Keep it simple, stupid"というUNIXの哲学を踏襲しているという。使い始めてもらうハードルを下げるためにツール自体はエージェントレスにしてテスト環境にRubyがあれば動作するようにした、テスト対象マシンにSSH接続すればRubyすら必要ない。
総括すると、サーバーの構成管理ツールが成熟し(Puppetから9年、Chefから5年)テストの需要がうまれ、すでにChef界隈ではテストが盛り上がっていた。そこにGitHubやJenkins、CI as a Serviceといったトレンドの普及も後押ししてServerspecがうまくハマったと分析する。
「ただ、トレンドは生もうと思って簡単に生み出せるものではない。自分自分が欲しいおもしろいものを自分のために作る、近道はなく積み重ねが素晴らしいものにつながるのではないか」と、講演を締めくくった。
<編集部より>文中のタイプミスを3個所修正しました(2014/6/24 22:30)
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Serverspec誕生からインフラCIの今後までを開発者に聞いてみた
- Serverspecの概要からインストールまで
- Serverspecの効果的活用に向けたTips
- CI/CD Conference 2023から、GMOペパボのSREがVM/Kubernetes混在環境でのCI/CDについて解説
- Serverspecテストコード実例の紹介とコード記述の際のポイント
- 構築とテストについて知ろう
- Ansibleにおいてテストを行う理由
- RailsのテストフレームワークRSpecの基礎知識
- Dockerを理解するための8つの軸
- ChefConf 2017、楽天におけるHabitat導入のポイントとは?