Rails去る1/9は一休さんにちなんで、クイズの日と呼ばれているようです。みんなでもっとおもしろくできるというサービスをリリースしました。これはペパボで毎年開催している、お産合宿という名の開発合宿で開発したものです。お産合宿後も、誰かがやる気が高まった時にイイ感じに進める。いうゆるい感じで開発を進めていましたが、晴れて1/9に正式リリースということにしました。リリースといっても、特別何もしてないんですが、これを機にサービスの紹介をします。9isとは某感謝祭風のクイズができるサービスです。自分でクイズを自由に作れて、参加者を集いリアルタイムに回答・早押しランキングを表示することが出来ます。Webアプリ?今なぜ、ネイティブアプリではなく、Webアプリを作ったのかというと、ブラウザやフロントエンド周りの技術の進化によって、ネイティブにWebが近づこうとしています。その中で、ネイティブよりもWebのほうが適した分野というものがあり、その1例となるようなアプリを作りたかったというのが、発端です。install不要で、URLにアクセスするだけで必要な機能が使えるこの中のLinkableでEphemeralな点はWebの大きな魅力なので、その点を活かしたもので、面白そうなものはないかと考えていきました。今回の9isでは、幹事の人から参加者へ参加用のURLをシェアして、そこにアクセスするだけでクイズを楽しめる。いう形で、それを活かせているかと思います。9isの裏側この5人で開発を進めました。自分@tsuchikazuそれでは、システム面を紹介していきます。3つのサーバから構成されています。アクセスされる一番フロント側のサーバが、Renderingサーバです。renderingをしようと思っていたので、こんな名前にしているんですけど、やる必要ないし、ちょっと面倒だし、3年後ぐらいには廃れていそうな技術だと思ったので、やるのをやめてしまいました。今、Renderingサーバでは静的なファイル(HTML、JS、CSS等)を返すだけのexpressをherokuで動かしています。完全に静的ファイル配信なので、CloudFlareというCDNも使っています。CloudFlareのスゴイところが、なんと無料でSNIを利用したSSLまで提供してくれることです!!これによって、無料で独自ドメインのSSLが実現できました。browserifyでbuildしてます。ViewにはReact、Fluxにはyahoo/fluxibleを使いました。renderingを諦めた今、fluxibleである必要が無いんですけど)今回、始めてReactとFluxを触ったんですけど、ただ単に表示する系なら簡単でいいんですが、Form周りがどうすればいいのかわかりにくく苦労しました。今後、部分的にAngular2を試していきたいと思っています。APIサーバAPIサーバは、@mapyoによってRailsで開発されました。開発者のためのホスティングサービス【スケール】で動かしているようです。Parse.comのようなBaasを利用するか。いう話も上がったんですが、社内の人からBaas使っていたけど、やりたいことが実現できずに結局自作した。いうような話も聞き、自作することにしました。クイズのランキング集計などでは、ちょっと変なことをしているので、やはり自作してよかったんじゃないかなと思っています。(そうでないと、フロント側で無理やり頑張る。いう形になっていたかも)開発中はApiaryを使って、ドキュメント化しながらAPI仕様を詰め、そのままAPIのモックサーバとして活用できたので、なかなか便利でした。WebSocketサーバWebSocketサーバは、主に幹事用の画面と、クイズ参加者用の画面遷移を同期させるために使っています。これもPusherなどの外部サービスを使おうとしたんですが、無料枠の同時接続数が少ないのが気になって、Socket.IOで自作してみたらすんなり動いたので、そのまま自作版を使うようにしました。これもherokuに乗せているんですけど、どこまでスケールできるかわからないので、あとで外部サービスを使うようになるかもしれないです..構成まとめこのように、9isでは3つのサーバにわけて構成しています。これらは、1つにまとめることもできましたが、あえて分けるように設計しました。1から作るとき今ならこういう構成にするよね。いう感じでわけたんですが、その結果として、それぞれのロールでマッチしている言語やフレームワークを選定できた特定のロールだけ外部サービスを使うようにできた(実際にはやらなかったけど。servicesで言われているような利点は感じることができました。わける粒度について今回のように、外部サービスで提供されているような粒度。HerokuのAdd-Onで提供されているような粒度にする、というのは一ついい基準になりそうです。Sqale)を利用できた点と、開発者が2人しかいない点が理由かなと思います。管理するサーバ数が増えるので、単純にインフラコストは増えそうですが、PaaSを利用すればそこは全く感じませんでした。あとはシステム間の連携について、認識齟齬が出てきそうですが、そもそも2人しかいないし、APIとそれ以外で役割をわけたのでその間にApiaryがあったおかげで、うまくできたかなと。実際に仕事でやるとなると、IaaSに載せたり、開発者が増えるので、また事情は変わってきそうな気がします。最後に9isは、完全に手段を目的化したサービスなんですが、結構おもしろいサービスに仕上がっているので、是非使って見てください。今後、これで小銭も稼いで行きたいんですけど、なかなか難しいので、新たな技術の遊び場として今後も活用して、もっといいサービスにしていきたいです。