RoRExhchange 2007 (London) に行ってきました(その一)

2月9日にRoRExchangeというミニカンファレンスがあったので行ってきました。

去年ロンドンで第一回RailsEuropeカンファレンスがあったときは、料金の高さ(2日で700ポンドくらい)に辟易してパスしましたが、今回は70ポンドと比較的安め、しかも一日だけのイベントだったので会社の有休とって参加してみることにしました。

イベントの模様はビデオ収録してあって、プレゼンスライドとともにここにアップされています。

まずは午前のセッションについてです。

-10:00 – 10:45 オープニングトーク:「Quick and Clean: Well-factored Rails
オープニングは 「プログラミングRuby 」「Rails Recipe」や「My Job Went To India」で知られるChad Fowler。

プログラミングRuby 第2版 言語編
Dave Thomas Chad Fowler Andy Hunt 田和 勝 まつもと ゆきひろ
オーム社
売り上げランキング: 11395



Railsレシピ
Railsレシピ
posted with amazlet on 07.02.12
Chad Fowler 長瀬 嘉秀 永田 渉 株式会社テクノロジックアート
オライリー・ジャパン
売り上げランキング: 54647

話のトピックは「はやく、そしてきれいなコードをRailsをつかって書くことが出来るかどうか」についてでした。

Rails登場以来、Scaffoldなどを利用したScreenCastなどで「いかに早く、簡単、そしてきれいなWebアプリがつくられるか」が喧伝されてきました。

上の紹介記事では「簡単で迅速に開発できるなどと賞賛されている」、「PHPに代表されるような"早いが汚い手法"と,Javaに代表されるような"遅いけれどきれいな手法"とも表現している両方のバックグラウンドを持つ同氏はこれら2つのよいところを組み合わせ早くてきれいを目指した」とありますが、ChadにとってRailsは「すごく切れ味の良いチェーンソーみたいなもので、大きな木も切れるけど、使い方をまちがえると簡単に自分の足もまっぷたつになっちゃうよ」とのことでした。その例として以下のことをあげていました。
Leaky Abstraction = これはJoel on Software の人が説明していますが、複雑な仕組みを簡単そうに隠蔽しているシステムは潜在的な問題を抱えていてちょっとした弾みで破綻をきたしてしまうこと。ChadはRailsのActive Recordがこれに相当していて、何気なくfindを使用してデータベースに簡単にアクセスしても、そのfind文が裏で投げているSQLをちゃんと理解していないと、実はものすごくDBに負荷のかかる処理をしてしまう可能性があるとのことです。
CRUD: Not just a disease = これまたActive Recordに関してですが、多対多(many to many)テーブル同士をつなげる方法としてhas_and_belongs_to_manyというのがあります。
そこで「読者(readers)」と「雑誌(magazines)」があるときには、自動的に(readers_magazines)という風にRails のConventionを用いて定義しがちだけれど、そういう風に「Railsだとこうするから」という理由だけでその方法に従うと、ちゃんと自分で抽象化することを怠りがちになってしまうのではと言っていました。上の例では(readers_magazines)は実は「購読情報」(subscription)なわけでしょ、と言っていました(でもhas_many:throughでsubscriptionを実現できるのでは?と個人的に疑問に思いました。そのうちスクリーンキャストが公開されるらしいので、もう一度聞き直して、まちがっていた解釈をしていたら訂正します)。

Over Do MVC =Railsは Model, View, Controller の仕組みを導入しているけれど、両者の役割分担をRails自体がきちんと規制するわけではないので、そこらへんの境界があいまいなコードが作りやすい。そういった意味でRailsMVCモデルを採用したのはあまり良い選択ではなかったんじゃないかとのことでした。具体例としてはerbを乱用した Viewへのロジックの侵入、またControllerが高度なfind文を書く場合多いけど、そもそもfind文のSQLビジネスロジックに相当するからModelにおくべきだけれど、そうしている人が少ないんだそうです。

MVCのどちらにどのコードを書くべきか」というのは、私が Railsを使い始めて以来よく悩む問題でした。特に本などを見ると、Model部分が極端にコード量少なくて、Controllerにコード量が集中している場合が多いのでついついControllerにたくさんコードを詰め込んでしまいがちです。今日のChadの話を聞いて「そういえば自分達の Controllerにもにたようなことしてるfind文多いな、直さなくちゃ」と思いました。

Chadの最後の締めくくりの言葉は「Master Ruby」。Railsは確かに(正しく使えば)プログラミングを迅速かつきれいに書く手助けをしてくれるけれど、それはあくまでちゃんとしたやり方をわかっている人にとってのことで、なにも知らずに「簡単に」それらが成しとげられるわけではない。だからRailsを使いこなすにはただRubyを知っているだけじゃなくて、Rubyを完全にマスターするぐらいじゃないとだめだよ、とのことでした。


-10:50 – 11:50 「 Experiments with Very Rapid Development in Rails
Hobo開発者 Tom LockeによるHoboのデモ。Railsの上にpluginとしてhoboをインストールすることで「Railsよりさらに早く開発可能」を目指したフレームワーク。デモのScreenCastも公開しているのでそちらを先に見た方が良いかもしれませんが、主要機能としてはテーブルごとにパーミションを標準装備したhobo独自のScaffoldとviewをタグベースでCSSとの連携性を高めたDRYMLとで出来上がっています。Tomいわく「RailsのScaffoldはあくまで使い捨ての学習用の機能だけれどHoboの機能は実際にWeb開発の使用に耐えうるもの」だそうです。
DRYMLの文法を見ていた時、となりでAbdelが「これってJavaで開発するときにするXMLの設定とそっくり」とぼそっといっていました。

-11:55 – 12:35 「Rerouting Rails
日本在住経験もあり、Ruby Way 2nd Editionの国際化の章を担当したPaul BattleyによるRoutingの新しい実装方法。詳細は本人のブログにもあります。今回の参加者のなかで、唯一スライドを使わず、紙とマジックで説明されていました。詳細はRailsの Routingの実装の見た目ではなく、内部でのもっと効率的な処理の仕方らしいので、見た感じはとくにかわらないそうですが、その方法だと Routingがもっと早く処理される可能性もあるらしいので、完成を楽しみにしたいです(と言っても私が今まで作ったアプリでパフォーマンスが気になるほど使われたシステムはありませんが...)

The Ruby Way (Addison-Wesley Professional Ruby)
Hal Edwin Fulton
Sams
売り上げランキング: 35302

  • 12:40 – 14:00 昼食

次回は午後の部を紹介します。