あるある共有サイト、ウチらのあるあるを作りました

http://uchiaru.okwave.jp/

サービスの内容的には、みんなが一度は体験したことがあるようなエピソードを共有してあるあるしあうというシンプルなものです。twitterのIDでログインして、twitterにシェアすることができます。

作った経緯は、社長がいきなり「あるある共有サイトが欲しいんだよねー。電車の中で女子高生たちがあるあるあるあるあるあるって言ってて、それを聞いて作りたくなった」みたいなことを言い出したのが発端です。しかも一週間でリリースしようとか言い出して、いつの間にか付き合ってしまった結果、サービスがリリースされました…。
http://uchiaru.okwave.jp/contents/131

実際は一週間なんてことはなく、プロトタイプ作成に2,3日かけて、そのあとOKが出たのでデザイン作ってもらう間にテストコード書いたりリファクタリングしたり別の仕事したりして、サーバ用意してもらったり利用規約作ってもらったり、プレスリリース書いてもらったりして、開発開始からちょうど二週間でした。
とりあえず作ってこのあとどうなるのか……は置いといて、今回はウチらのあるあるで使ってるものとかの技術的な話をします。

開発

Rails3.0.9でやってます。Rails3.1でやっても良かったんですが、ちょっと時間的な余裕がなかったので止めました。
使ってるGemは下のような感じ

  • omniauth
  • kaminari
  • whenever
  • haml
omniauth

omniauthはtwitterFacebookなど外部サービスでのログインを超簡単にするもの。
便利すぎて吐き気がします。

kaminari

kaminariはページネートを簡単にできるようになるやつ。
昔はwill_paginateがよく使われてたようですが、kaminariの方がview周りを簡単にカスタマイズ(もっと見るみたいなのとか)できるのがイイネ。
ちなみにautopagerizeみたいなのは、jQueryのautopger.js*1ってのを使ってます

whenever

wheneverはcrontabの書き方をいつまでたっても覚えられない人にオススメ。
capistranoでデプロイするときにも便利。

haml

hamlはインデントで制御するので、Pythonが好きにはたまりません。
でもなれるとrubyのendも省略したくなってきてムズムズします。
うちの会社は基本的にはデザイナーさんが絵とHTMLとCSSをくれる形なので、その中でerbじゃなくてhamlを使うのはちょっと大変なんですが、hamlを入れるとついてくるhtml2hamlというコマンドを使って変換してhamlで作りました。変換で少しおかしくなる時があったような気がしますが許容範囲でした。
ちなみにSCSSは使ってません。

DB

MySQLじゃなくMongoを使いたかったけど、運用さんのスケジュールを考えると新しいことを試すのがつらそうだったので諦めました。

バージョン管理

数カ月前までレガシ〜なSVNを使ってたんですが、我慢できなくなってようやくGitに移行しました。リモートリポジトリはGitosisを使ってやってます。
Gitのブランチ運用は自由すぎてよくわからなかったので、先人にならってA successful Git branching model*2にならってやってます。この方法を手助けしてくれるgit flow*3というツールが便利です

テスト

Curiosity Drives Me

テスト環境は上記のリンク先とほぼ同じ構成でやってます。
テストデータの作成はFactoryGirlでやってます。FactoryGirlは最近新しいシンタックスができるようになってよくなりました*4
あとはcoverageにcover_meというGemを使ってます。ruby1.9系ではrcovが動かないのでこれにしました。ただsporkと組み合わせて動かしているとなぜかうまく動かないので微妙な気がします。
sporkじゃなくてprefetch-rspecを使うのもあったんですが、prefetch-rspecは毎回読み込み直すのに時間がかかるのがいらついたのでやめました。

デプロイ

本番はnginx + Passengerの組み合わせでやってます。
デプロイはcapistranoでさくっとやってます。
bundleとかwheneverとかもうまいことやってくれるので助かってます。
capistrano_colorsとcapistrano-extも必須ですね

まとめ

世の中便利なライブラリがいっぱいあるので、Rails使って1年の僕でも一人で二週間かからずにさくっとwebサービスが作れるいい世の中になりましたね!!!

*1:http://lagoscript.org/jquery/autopager

*2:http://nvie.com/posts/a-successful-git-branching-model/

*3:https://github.com/nvie/gitflow

*4:http://d.hatena.ne.jp/yatmsu/20110721/1311259609