@kyanny's blog

My thoughts, my life. Views/opinions are my own.

ルーク、 MongoLab を使え!

五月の終わりから Quipper で働いている。

Quipper は DeNA の co-founder である渡辺雅之氏がロンドンで創業したモバイル学習プラットフォームの会社で...みたいな話は長くなるし、読者の興味を引きそうにないのでやめておく。このへんの話を詳しく知りたい人は渡辺によるハーバード・ビジネス・レビューの連載をどうぞ。

ソフトウェア開発者にとって一番気になるのは、会社の事業内容とか売上利益よりも、「どんな環境でソフトウェア開発をしているのか」じゃないだろうか。どんなインフラを使っているのか、バージョン管理やタスク管理はどうしているのか、自動テストはどのくらいやっているのか、開発手法はアジャイルなのか、 Mac で開発できるのか、椅子は六万円以上か(冗談ですよ)、などなど。

こういった、ソフトウェア開発者が日々過ごす広義の「環境」について言えば、 Quipper はかなりいいセンいっていると思う。あくまで自分の価値観ではそう思う、ということだけど。

それぞれざっと紹介していくと、インフラは全て「クラウド」を使っている。アプリケーション実行環境には Heroku、 Jenkins やらバックグランド処理のプロセスやらを動かすために Amazon EC2 も使っている。プラットフォームのコアとなるデータベースには MongoDB を利用しているが、これも MongoLab という MongoDB 専門のホスティングサービスを利用しているので自分たちでは一切サーバーの運用をしていない。 MongoDB については、入社してすぐにあったある出来事がとても印象的だった。とても興味深い話なので、あとで改めて紹介したい。

バージョン管理やタスク管理など、いわゆるプロジェクトマネジメント用にも有名どころのサービスを使い倒している。ソースコードリポジトリは当然 GitHub (Enterprise なんかじゃないよ!)、もうちょっと汎用のプロジェクト管理ツールとして Basecamp も使っていて、サービスの仕様にまつわる議論から事務連絡まで、あらゆる情報が書き込まれている。外部のパートナー企業の方にも多数参加してもらって毎日大盛況だ。PivotalTracker を利用して日々の開発を回しているチームもある。そしてリアルタイムコミュニケーションには HipChat を使っている。一部のチャンネルには GitHub や Jenkins から各種通知が飛びまくっていて、人間の発言が埋もれてしまうほど。

自動テストもしっかりやっている。かなりしっかりやっている。コードを見せられないのが残念だが、本当にすごくちゃんとやっている。うそじゃないよ!たいていの Pull Request はテストコードも書いてあるし、プラットフォームのキモである API サーバーのリポジトリは Coveralls 調べでカバレッジ 97% だった(全部のリポジトリでカバレッジ計測できてるわけじゃないけどね!)言うまでもないが Jenkins で master ブランチとトピックブランチのテストも走っていて、 Pull Request の場合は Travis CI 風にテスト結果を GitHub 上でも見られるようにしている。

ついでに言うと、 Heroku へのデプロイも Jenkins のジョブに仕込んであるので、原則として開発者がデプロイ作業をすることはない。 master ブランチにマージされてテストが通れば自動的にデプロイされる。入社したらおそらく手薄であろうそのへんの足場作業から手を付けようと密かに狙っていたのだが、最初から継続的デプロイまで完成していてだいぶびっくりした。

開発手法はアジャイルでスクラム、みたいな感じ。あんまり厳密にやっている感じではないけど、小さいチームがくだらない決まりごとや社内政治に邪魔されずふつうにソフトウェア開発してたら自然とそんな風になるよね?という感覚で、特筆する点はない。ちなみに自分のチームは四人の開発者が毎週イテレーションを回していて、会社のなかではけっこうまじめにアジャイルプラクティスを実践しているほうだと思う。

開発者に限っていえば、原則としてあらゆる変更は Pull Request ベースで、自分以外の誰かにレビューしてもらう。指摘すべき点は GitHub 上で直接やり取りして、問題なければレビュアーがマージ。これもふつう、なんだけど Pull Request の数がだいぶ多い。アクティブないくつものリポジトリから毎日合計 10 個から 20 個くらいは Pull Request が送られてくる。もたもたしてたらあっという間に溜まってしまうし、小さな単位で Pull Request を出すのが当たり前になっているのでいつまでもマージされないと次の作業がつかえてしまう。だからレビューもマージもとてもはやくて、だいたい数時間以内にマージされる。何か議論してるわけでもないのに一日放置されてたら異変を感じるほど。レビュアーもレビュイーも Pull Request ベースの開発に慣れきってしまい、もはや仕事で GitHub を使えていることに何の感動もないので、ほとんど無言でマージされていく。

ここまでいいところばかり紹介してきたけど(いいですよね?こういう環境)、物理的な面だけはまだまだ改善の余地がある。さすがに Mac や外部ディスプレイくらいは好きなのを買えるけど、オフィスは手狭で机も椅子も高級とは言いがたいし、ウォーターサーバーやオフィスグリコなんて気の利いたものもない。社員食堂なんてもってのほか。シェアオフィスならではの面白さもあったり、建物じたいも面白いつくりだったりして飽きないのだけど、設備の充実度ではやっぱり大企業にはかなわない。ただ、何から何までいかにもスタートアップ!という感じなので、大企業の雰囲気が苦手な人には過ごしやすいはずだ(飲食物についてはなぜか社長がちょくちょく補充していて、ロンドンで勝手に発注したうまい棒やらカロリーメイトやら清涼飲料水やらがダンボールで送りつけられてきたり、夏場はペットボトルの飲み物がぬるくて不人気だとフィードバックをしたら即日「冷蔵庫を注文しました」とメールが来たり、来日した際に近所のスーパーでガリガリ君を山ほど買ってきたりする)

軽く紹介するつもりが、気づけばかなりのボリュームに…総括すると、スタートアップが無駄なくソフトウェア開発する上で一番便利で合理的な定番のツールやサービスをふつうに使っている、といったところ。ソフトウェア開発者としては極力ストレスを感じずに済む環境でとてもありがたい。もうこれが当たり前になっちゃったけど(ゲンキンなものだ)

ツールやサービスの充実度も「いいセン」の要因ではあるのだけど、最も強調したい点は充実している理由にある。なぜここまで徹底してアウトソースするのか?その理由、いわば Quipper のソフトウェア開発における「思想」を端的に表している印象深いエピソードがある。さっき「あとで」といった、 MongoDB の話だ。

ある日ロンドン在住のチーフ開発者である中野(@masatomon )から、サーバーサイドの開発者に向けてメールが送られた。曰く、 MongoDB のデータベースにちょっとした不具合があったので MongoLab のサポートに問い合わせたところ、迅速な対応ですぐに解決してくれた、 MongoLab のサポートは非常に有能かつ機敏なので、 MongoDB で何か困ったことがあったら自力でどうにかする前にまずサポートに問い合わせるといいよ!、と。このメールを読んだとき、ようやく自分が「スタートアップ」に参加したんだと実感した。

中野はサーバーサイドのミドルウェア運用を苦手としているわけではない。元 Gentoo Linux の開発者であり、 MongoDB のドキュメント和訳をいちはやく手がけた日本人でもある。決して MongoDB の運用に自信が無いから専門業者に丸投げしているわけではない。むしろそこいらのソフトウェア開発者よりも経験豊富だろう。にもかかわらず、自分ではやらない。ミドルウェアの運用は Quipper のコア事業ではないから。シンプルで合理的な理由だ。

まだ成功していないスタートアップには、最優先でやるべきこと以外のことをやっている余裕なんてない。事業の価値に直結することに集中するために、それ以外のことはアウトソースする。プラットフォーム事業者にとって、データはとても大事だ。そのデータですら他社に預ける(当然自分たちでもバックアップをとっているけど)。 MongoDB のホスティングをコア事業とする MongoLab を信用して、運用を任せる。こういう発想は、自分が働いてきた会社であろうとなかろうと、日本の組織ではありえないだろう。価値観が全然違うんだ、ということにとても大きな衝撃を受けた。

中野のメールには続きがある。「Quipper はまだ小さい会社なので、 MongoDB に限らず、全ての領域で専門家を雇えるとは限らない。だから MongoLab のような他のスタートアップと一緒に成長していくのがいいと思っている。彼らは顧客の声を聞きたがっているから、どんどんフィードバックを送るべきだ。彼らも喜ぶし、僕ら自身のためでもある(彼らのサービスの品質があがれば僕らもたすかる)」ああ、なんていい話!プロとしてプロの仕事を尊重する、これぞ真のプロフェッショナリズムですよ。 MongoLab 以外のスタートアップとも顧客として積極的に関わっていて、例えば動画のホスティングサービスである SproutVideo に至っては、 Quipper の要望を受けて彼らの API を拡張してくれたほどだ。スタートアップというエコシステムの一角を担うものとして、顧客として果たすべきこともちゃんとやっていきましょう、という考え方なのだ。

まるで TechCrunch に出てくる西海岸スタートアップのインタビュー記事を翻訳したかのような Quipper の開発体制だけども、珍しいことに本社はサンフランシスコでもマウンテンビューでもなくロンドンにある。先日ロンドンのオフィスに行ってきたが、現地に出向くことはまれで基本的にはお互いにリモートで開発をしている。これがまた面白いのなんの(こういった環境に特有の苦労もあるが)言葉の壁とタイムゾーンの壁を超えていかにスムーズに開発を回していくのか、そのへんの実情についてもいずれ改めて紹介したい。