Sooey

2010-11-19 00:21:33 +0900

EコマースサイトのSaaSであるShopifyが、サービスをRails 3ベースにアップグレードした際の模様をブログに公開した。

曰く、Rails 3に移行したことで当然パフォーマンスも向上したが、一番の収穫は、新しいAPIによってよりクリーンなコードを書けるようになったことと、新機能の実装が迅速に行えるようになったことの2つ。

ただ、ShopifyのようにRailsをかなり早い時期から採用しているアプリケーションでは、今回のようなアップグレードはかなりの大仕事だったようだ(Shopifyコードの最初のチェックインは2004年、Rails 0.5のリリース日である)。それから6年が経ち、最初は開発者2人だったものが、今では11人がフルタイムで取り組むまでの規模になった。

現在のShopifyのコードは、

  • app/models以下のファイルが327
  • app/controllers以下のファイルが131
  • 依存するgemの数が95
  • ヘルパーモジュールは100
  • ビューは130

というサイズ。6年間での累計コミット数は約12,000だそう。

以下、とりあえず読んだところまでの要点を抜き出してみた。興味のある人は頑張って続きを読んでみて。

  • Bundler
    • Rails 3へのアップグレードよりも前から使い始めている(9ヶ月前)
    • Bundlerの導入自体は公式サイトのドキュメントに書かれた手順に従えば簡単
  • XSS
    • ビューへの出力がデフォルトでエスケープされるようになったことの影響範囲は広い
    • この作業はRails 3.0のリリースよりも数ヶ月前に着手して終えていた
    • ビューとヘルパーをRails 3向けに変更した際の作業手順
      1. 機能テストを実行して報告された問題を修正する
      2. development環境でアプリケーションを起動して、目についた問題を修正する
      3. app/helpers以下のモジュールをすべて目視でチェックして怪しい箇所を探す
      4. コードをstagingサーバーにデプロイし、発見した問題をチームでGoogleスプレッドシートで共有
      5. コードレビュー
      6. production環境にデプロイし、問題が起きないことを願う
    • 何か新たな問題が起きたときは、ackなどの検索ツールを使って他のビューやヘルパーにも同様のコードが含まれていないかを調べて修正する
  • その他
    • BundlerとXSS対応が済めば、アップグレード作業の大部分は完了
    • その他の変更作業はXSS対応と並行して進めることができる
    • Shopifyの場合、Rails 3対応ブランチへの最初のコミットは2010年2月だった