RubyKaigi 2009 お疲れさまでした&ありがとうございました

RubyKaigi 2009 事務局の皆様、お疲れさまでした。それから低視聴率番組を見に来ていただいたみなさん、ありがとうございました。オリックスvs楽天の試合くらいガラガラになるかと思いましたが、そこまでひどくはなく、ホークスのホーム試合くらいは入っていたように思います。これなら視聴率として5パーセントくらいはあったんじゃないかな? 教育テレビでの高視聴率番組として知られる『将棋の時間』で視聴率が2パーセントくらいらしいので、教育テレビのコンテンツとしては成功でしょう。時間も質疑応答の時間がとれてちょうどいい具合に終わりました。重ねてお礼申し上げます。

資料はこちらからご覧下さい。英語バージョンも用意してます。

なお本当は、Erubisの解説にかこつけてテンプレートシステムについてのウンチクを語りまくる予定だったのですが、時間の都合上テンプレートシステムの将来像しか紹介できませんでした。しかし「テンプレートもプログラムコードである」ということがわかれば、現状のテンプレートシステムはまだまだだね(c)リョーマくんということがわかるはずです。みなさんもeRubyなんかで満足せず、新しい考えをテンプレートシステムに持ち込んでください。あと、るびまの記事その1その2も読んでみてください。


質疑応答より(情報の追加あり):

Q: 「<%= %>」での「=」はいくつまで重ねられるのか。

A: いくらでも好きなだけ。


Q: 「<%== %>」のように「=」が2つあるとHTMLエスケープされるが、他の記号を使って別のエスケープをさせることはできるか。

A: できない。現状のErubisは埋め込み式の記号が「=」であることを前提にしている。埋め込みパターンの指定が「:pattern=>'\[% %\]'」のように簡単にできるのはこの前提があるからなので、今のところ他の記号を使えるよう拡張する予定はない。


Q: エスケープするための関数を指定できるか。

A: できる。Rubyでなら Erubis.new(str, :escapefunc=>'h') とし、コマンドラインなら --escapefunc=h を指定する。


Q: ブロックの終わりを知るためにMerbでは「=%>」が導入されたというが、必要なさそうに見える。そんなものがなくても、ブロックと対応する「end」を見つけるのはできるのではないか?

A: 埋め込みのRubyコードを構文解析すれば可能であるが、ERBでもErubisでもそこまでやっていない。構文解析しないのであれば、やはりブロックの終わりを表す「=%>」が必要。


Q: スライド49枚目にある、Merb拡張により吐き出されるRubyコードだと、2行目のほうが先に実行されてしまい、出力結果がおかしくなるのではないか。

1: @_buf << (form_for do;
2: @_buf << "Hello\n"
3: end);

A: それを避けるため、結局はform_for()の中でゴニョゴニョする必要があり、実はMerbの方法でも汎用的な解決策にはなっていない (スライド50枚目で説明済)。


なお話し足りなかったネタは、このブログにでも書いていきます。気が向けば。