2010-02-19
■ [scala] foursquareが半年かけてScala+Liftに移行した話
foursquareがLiftに切り替えたという話を聞いてびっくりしましたが、どうやら本当だった模様。
以下、内容抜粋
- もとはPHP+Apache+MySQLだったが、エンジニアが書いたものじゃなく、これからの拡張のためには書き直すべきだった
- 静的型・コンパイル言語が好き。Wicketを試したけど、Object型使いすぎなのと関数がfirst-classでないのがちょっと
- Javaの頃からなるべく関数的に書くようにしてたんで、Scalaは自然
- コールバック書くだけでAjaxになるのはいいね!
- まあせっかくスタートアップなんだし、変わった・面白いものを使ってみたかったってのはある
リライトについて
- (書き換え中は?)PHPとセッションの共有とか試してみたけど、あんまりうまく行かず
- リライト3日目からLiftのコードがproductionで動くようになったけど、リライト90%に3ヶ月かかった。
- 残りの10%はiPhoneアプリも修正が必要だったので、2ヶ月かかった。今日終わりました!
- LiftとMySQLは相性が悪い。PostgreSQL使うべき
(実際のコードを交えた解説がいくつか)
よかったこと
- ほぼ全ページが前よりいい感じになったぜ!
- いまのAjaxが難しいとは言わないけど、LiftのAjaxはほんとに楽。ていうかこうなるべき
- コードは短く、わかりやすくなったし、バグも減り、機能は増えた。
- @rasmus曰く:ちゃんと見ても脆弱性が一つも見つからなかったのはfoursquareが初めてだわ。4つ星
よくないこと
- Liftはステートフルだから、productionでそのうち問題になるかも、今のところ悪くはないけど。(編注:性能の問題?)
- Mapper(LiftのORMレイヤ)はまだ未成熟なとこが…
- Lift SiteMapは我々の用途にはオーバースペック。もっとシンプルでいい
- マイナーなものを使ってるんで、これからスケールアップする途中でいろいろ問題があると思う。けど、Liftコミュニティはとっても親切だよ。
状態
- Scalaで14000行くらい。モバイルサイト・API+OAuthサーバを含む
- マークアップが6000行くらい
- フル機能のスタートアップとしては、小さくね?
これから
- データベースはPostgreSQLが1インスタンスだけだけど、いつかは増やさないといけないかも
- MapperがJSON対応するので、JSONの置き場所を考えないと(Memcached, Casandra, Goat Rodeo?)
- Scalaという新しいものを使い始めたけど、たぶんうまくやれるんじゃないかと思う。(アルゴリズムとか)計算機科学的な概念は、どの言語を使おうと同じわけだし