トップ «前の日記(2010-02-18) 最新 次の日記(2010-02-21)» 編集

Route 477



2010-02-19

[scala] foursquareが半年かけてScala+Liftに移行した話

foursquareLiftに切り替えたという話を聞いてびっくりしましたが、どうやら本当だった模様。

以下、内容抜粋

  • もとは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という新しいものを使い始めたけど、たぶんうまくやれるんじゃないかと思う。(アルゴリズムとか)計算機科学的な概念は、どの言語を使おうと同じわけだし