「一つのことをうまくやる」に忠実たれ。Serverspec開発者mizzyが語る成功するOSSの設計

過去、手動と目視による作業が常だったサーバーのテストを圧倒的に簡易化するServerspec。国内外で高い評価を得るこのOSSの開発舞台裏を、作者の宮下剛輔(mizzy)さんが語ります。

「一つのことをうまくやる」に忠実たれ。Serverspec開発者mizzyが語る成功するOSSの設計

2014年1月、世界中の優れたオープンソースプロジェクトを表彰するアワード「Open Source Rookies of the Year 2013」で、日本発のあるツールが選定されました。Dockerなど名だたるソフトウェアと並んで入賞したそのツールの名は「Serverspec」。

Serverspecとは、一言で表現すれば、サーバーのテストを自動化してくれるオープンソースソフトウェア(以下、OSS)のツールです。過去、手動と目視による作業が常だったサーバーのテストを圧倒的に簡易化するServerspecは、リリース以降、国内外から支持を集め、2018年1月現在、GitHub上で2,000を超えるスターを獲得しています。

このツールの開発を手掛けたのは「mizzy」の愛称で知られる宮下剛輔(みやした・ごうすけ/ 1@gosukenatorさんです。現在、フリーランスのエンジニアとして、サーバー構築の支援・コンサルティング、ソフトウェア開発を行っていますが、過去、複数の企業でエンジニアとして仕事をし、サーバーと浅からぬ縁を持ちつつキャリアを積み重ねてきました。サーバーとともに生きるエンジニアが生み出した「Serverspec」の裏側にある開発ストーリーを伺いました。

構築は自動化したがテストは手動。だからServerspecが必要だった

2

宮下剛輔さん:大学で経営学を学び、大手SIerでサーバー、ブラウザ製品のプリセールスに従事。その後、paperboy & co.(現GMOペパボ)技術責任者として同社のサービス開発・マネジメントをこなす。現在、独立してフリーランスのエンジニアとして、サーバー構築のコンサル、構築支援、ソフトウェア開発を行っている。著書に『Serverspec』、監訳書に『Infrastructure as Code』がある(共にオライリージャパン)。

──大学では経営学を学んだとお聞きしましたが、そこから一転、プログラマ・エンジニアとなったのはなぜだったのでしょうか。

宮下 パソコンは子供のころから好きで、中学生くらいまでは『マイコンBASICマガジン*1』に掲載されているゲームプログラムを入力して遊んでいました。高校ではパソコンからは離れたのですが、大学のゼミの先輩が卒論でWebの研究をしていて、先輩の卒業後にゼミのWebサーバーの管理を引き継いだことで、再びパソコンやプログラムに接する機会が増えたんですね。

こんな経緯があってサーバーやネットワークなどインフラが好きになり、1997年にSIerに就職したんです。最初に就職したのは、Netscape社の代理店をしていた会社でしたね。ブラウザだけでなく、サーバー製品も取り扱っていたので、そうした製品のプリセールスエンジニアをしていたんです。その後、Web業界に行きたくなって、paperboy & co.(現GMOペパボ)に入ったんです。

──職業としてサーバー構築など手がけた経験がServerspecの開発に影響を与えたのですか。

宮下 以前私がいた会社では、サーバー構築は、Wordの手順書に従って目視と手動でやる、とか、長いシェルスクリプトを実行したりとか、非常に手間がかかり見通しの悪い作業でした。これはなんとかしないといけない、と思って、2006年ころからサーバー構成管理ツールとしてPuppetを使うようになりました。

Puppetに関しては、宮下さんが2010年に発表したスライドにも詳しい。

ただ、Puppetも長年使っているうちに、やはり自分の書いた最初のPuppet用コードをリファクタリングしたくなってくるんですよね。最初からベストプラクティスが存在していたわけではなく、試行錯誤の連続で使っていたわけですから。古いコードはベストプラクティスに沿っておらず、コードの見通しも悪くメンテナンスしにくいので、もっときれいなコードにしたい、と思うわけです。ただ、リファクタリングのためには

  • テストコードを書く
  • テストコードを実行して、テストを通す
  • コードを書き換える
  • 書き換えたコードをテストする

こんなテストプロセスが必要になるわけです。当時、Puppetのコードに対してこうしたプロセスを行えるツールがなかったんです。いや、厳密には近い機能を持つツールはあったのですが、自分の欲しい要件を満たすものがなかったんです。

既存のものがなければ、自分で作るしかないと考えて、2013年ころにServerspecの開発に着手したんです。構築はPuppetで自動化できているのに、テストはチェックリストを作って手動でやっていましたから。

実は、Serverspecの前身となる「Assurer(アシュラ)」というツールを開発していたのですが、これは機能を広げすぎて、結局自分でも使わなくなってしまった。やりたいことを詰め込みすぎて、複雑で使いづらいものになったのかもしれません。その反省もあって、「要はRSpecでサーバーのテスト“だけ”ができればいいんだ」という思想で、もっとシンプルなツールを作ろうと思ったんです。それがServerspecです。

──著書では、Serverspecが「インフラコード開発におけるリズムを作り出す」と語っておられます。このリズムとは具体的にどんなことでしょうか。

宮下 いわゆるテスト駆動開発では、「Red(失敗するコードを書く)」「Green(とにかくコードを動くようにし、テストを通す)」「Refactor(コードをきれいにする)」というサイクルがあります。コードを書き、テストをし、フィードバックが得られる。そして、フィードバックを元にまたコードを書いてテストをする、というリズムが生まれます。書けばすぐに結果が分かるわけですから、開発が楽しく気持ちよくなってくるんです。いわば、“開発が進んでいる感じ”が実感できるわけです。

Serverspecで実現したかったのは、こうしたテスト駆動開発の心地よいリズムをインフラコード開発に持ち込むことでした。サーバー構築が自動化されているのに、構築のテストがチェックリストに基づく手作業だったりすると、このリズムを実現できませんから。

──リズミカルな開発の心地よさは、Serverspec開発以前から実感していたのでしょうか。

宮下 テスト駆動開発によるリズムの心地よさは、CPAN(Perlの統合ライブラリ)モジュール開発で実感していました。自分はもともとPerlの人で、CPANモジュールはテストコードが必ずセットになっていて、make testでテストを実行する、という文化です。こうしたリズムのもたらす心地よさを知っていたからこそ、インフラコード開発の世界にもリズムを持ち込みたかったんです。

他者の知が集約されたツール

3
エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く