RoRExhchange 2007 (London) に行ってきました(その二)
前回の続きです。
-14:05 – 15:05 「Managing a High Performance Rails App without Tearing Your Hair Out」
Rails Conf Europe 2006 でも発表した James Cox によるRailsのパフォーマンスに関してのTips. スライドはここにあります。
「パフォーマンスを直す際にはアプリ全体の中でどこが一番問題なのかを把握するのが大切」といったパフォーマンスチューニング全般に関するアドバイスから、実際のパフォーマンスに有効なRailsのコマンドなどを詳しく説明していました。 Chadのプレゼンとも共通する点として「Active RecordがバックエンドでどういうSQLを投げているか把握する必要あり」というのがありました。
-15:10 – 15:55 「Extend your Rails Application using Domain Specific Languages」
LRUG (London Ruby User Group) の昨年10月にもプレゼンした Damien TannerによるDSLの方法。
前回のプレゼンの時は私も出席していて、結構その有効性に大して賛否両論を醸し出していました。
簡単な例としては
order 3 products from the store and get the 3rd half price
といったビジネスルールをどこかに保存しておき、それを正規表現で
buy(3); get (1); discounted(50)
といった形に変換してRubyのコードに落とし込むらしいです。
これの利点は「order 3 products from the store and get the 3rd half price 」といったルールが英語みたいでプログラマー以外の人にも可読なため、ビジネスとのコミュニケーションに役立つとのことでした。ただ短所としては、上の例のような文章をビジネスユーザーが書いても(Order 3 oranges from Tesco and get another one for free)、そのままプログラムが実行してくれる訳ではないと言うことです。
私個人的にはFitがその代わりを果たしてくれるんじゃないかなと思いました。
Fitに関してはJavaでの解説本も出ています。
-16:00 – 16:45 「Are your tests working for you?」
UK Web2.0 の代表企業としてRead/Write Web でも取り上げられたRevoo の CTO で mocha などの開発者としても知られるBen Griffithsのプレゼン。
彼のプレゼンは2006年5月のLRUGでも聞いたのですが、今回はアーノルド、シュワルツネッガーの「プレデター」を題材にしたテスト方法論でとっても楽しかったです。
Screen Castが出てきたらぜひ一度見てみてください。
彼の定義する悪いコードとは以下の要素が絡んでいる場合が多いそうです。
- Fragility (壊れやすい) = 一つのコードを変えるとドミノ現象でどんどん他のコードのテストも失敗している場合、コードの依存性が高い。Mutation testというテストがあり、そのテストはコードの一部を全て逆転させる(例えば if a > b を if a <= b に変える)ことでちゃんとテストが失敗するかを測定する。もしちゃんとテストが失敗しない、潜在的なバグが隠れている(=壊れやすい)可能性あり。
- Immobility (移植しづらい) = 最初にコードを書いた時は、そのアプリでしか使われていないけれど、テストスクリプトを書くということは、それだけでアプリ以外の他の文脈で使われているということ。もしそのコードが「テストしずらい」と感じたら、そのコードの移植性に問題ある可能性あり。
- Viscosity(ねちっこい) = Posts.user.visit.recent 見たいな感じで、一つもメソッドを使うために、いくつものモデルを数珠つなぎにつなげていくのは冗長であり、もっとほ
彼によるとRSpecなどのBehavior Driven Development も依存性を高めるため懐疑的なんだそうです。私はRSpecもBDDも初耳なのでよくわかりませんが、一応彼のブログのエントリーをのせておきます。時間があれば両方とも詳しく調べてみたいです。
- 16:50 –17:35 「 Where’s My SQL? Platform-independent Database Design Using Migrations」
James Coxと同じくRails Conf Europe 2006 でも発表した Eleanor McHughによるdb migrationの活用方法。それようのPlugin も作ったようですが、スライドの文字がみずらかったのと、カンファレンスの最後の方で私の集中力が途切れていたため、あまり何をいっているかわかりませんでした。Screen Castが公開されたらもう一度見直してみたいです。
-17:40 – 18:25 「Panel Discussion」
ゲストスピーカと参加者によるPanel DiscussionではAction Viewとデータベース周りに関して意見が飛び交っていました。
View に関しては、皆現在の状態には改善の余地があるんではないかと思っているようです。特にViewはプログラマーだけでなく、デザイナーの人たちも手を加えていくところなので、もっとコードとhtmlやcssによる見栄えのところの切り離しをうまくする方法があってもいいんじゃないかという意見がありました。hobo のDRYMLがその解決法となるのでしょうか?
データベースがらみではPerformance 改善のためのアドバイスを聞く声が多かったと思います。各ゲストからのアドバイスとしては以下のようなものがありました。
- GYRE というパフォーマンスを測定するツールがあるらしい(googleで検索できなかったのでスペルミスかもしれまんせん。)- James
- キャッシュをうまく活用しよう - James
- Active Record が背後でどんなSQLを流しているかに注目 - Chad
- Railsのログファイルに色々役に立つ情報が載っている - Paul
- Queryの優先順位を決めよう。なんでも速いレスポンスを期待するのではなく、レスポンスが遅くてもいいQueryの優先順位を下げることで、一番必要なQueryが速くかえってくるようにしてみる - Eleanor
- Ajax はパフォーマンスに悪影響を与えやすいので気をつけて - Tom
-18:30 – 交流会 @ Fluid
日本をテーマとしたバーでの交流会。アサヒやキリンのビールがたくさん並んでいて、壁には日本の繁華街の写真がありました。最初の100本は主催者であるskillsmatter持ちという、ちょっとだけ太っ腹なところを見せていました。
ほかの参加者と雑談しているときに、「僕は来週一週間やすみをとって、友達とRailsのコードを書くんだ」といっていた参加者がいました。なんか私の開発合宿みたいです。Railsをしている人たちは皆「とっておきのビジネスアイデア」を持っているみたいで、その夢を実現するためのツールとしてRailsを活用しているんだという印象を受けました。やはりRailsを採用している大手企業は少ないと思うので、参加者は皆、自費できている熱意のある人たちが多いからでしょうか。
Chad Fowler とはAbdelが面識あったおかげで、色々お話するチャンスがありました。彼がなんども「Railsは簡単じゃないんだよ」と言っていたのが印象的でした。
最後に他の参加者の人たちと別のお店でお好み焼きを食べて帰宅しました。