«前の日記(2006-06-10 (土)) 最新 次の日記(2006-06-12 (月))»  

まちゅダイアリー


2006-06-11 (日)

Ruby カンファレンス 2006 2日目

昨日に引き続き、 Ruby カンファレンスへ。 8時には家を出ようと思っていたのに、起きたら8時で焦る。 外はあいにくの雨だけど、東京テレポートから会場まではちゃんと歩いた。

「Ruby anywhere 〜Ruby普及のためにアプリケーションができること」(たださん)

Ruby 普及という観点から見た tDiary の話。 僕も tDiary が無かったら Ruby と出会っていなかった1人なんだよなぁ。

  • tDiary が産まれたのは、 BR (Before Rails) 暦3年。当時、 Ruby の知名度は低かった。
  • 「普及 == 善」、「Ruby が普及すると俺が嬉しい」。普及のためにアプリで貢献。
  • 普及するには、「場所」と「人」が大切。
  • 場所: Ruby が使えるレンタルサーバは片手で数えられる程度。
    • 「Easy to install」 … 拡張ライブラリ不要は絶対条件。
  • 人: 開発者だけでなく「普通の人」にアピールすることが大切。
    • 「露出」 … 流行っているように見えるとユーザが増える
    • tdiary.net で数百人のユーザを → 2001年時点では一大勢力
  • さらに「簡単プラグイン」で「Ruby」ユーザを増やす
    • 実装のダサさは意図的。美しさよりも、簡単に Ruby プログラムが書けることを優先
    • tDiary プラグインで Ruby を学ぶ人も (実は僕もその一人)
  • 今では多くのレンタルサーバで Ruby が使える → 目標達成

会場からは、「Basic 認証はユーザの敷居を上げているのでは?」という質問があった。 tDiary は素の Ruby だけで動かすことが条件だったので Basic 認証を採用したとのこと。 Basic 認証のダイアログが出るとユーザは引いてしまうことが、最近のユーザビリティテストの結果でも出ているそうで、5年前とは状況が変わっていることは認識しているとの回答だった。

内容とは関係ないけど、パワーポイントの画面切り替えの有効な使い方を初めて見た気がする。 (左から右へと画面を切り替えていくことで、一連の流れを表現していた)

「dRubyをもう一度」(関将俊さん)

複数の Ruby プロセスでメッセージをやり取りすることができる dRuby について。 名前は知っていたけど、中身は知らなかったので勉強になった。 まさかほんの 200 行で書かれているとは思わなかった。

  • dRuby による分散・Web オブジェクトプログラミング」は去年の夏に発売。まだ初版が買えるので今のうちに買いましょう。
  • 昔は RMI over HTTP だった。
  • URI とオブジェクトをマッピングさせる。たとえば druby:://localhost:12345/front と h = {} をマッピング。
    • 値渡しと参照渡しがある。
  • サーバ側のクラスを知らなくても、メソッドが呼べる。 IDL 不要。
  • dRuby によって、プロセスより長生きできるオブジェクトを生成できる。
    • オンメモリの OODB として使える。RWikiもその仕組み。
    • 複雑な遺言方式 (DB や Cookie やファイルにオブジェクトを格納) が不要。
  • Linda とその実装の Rinda も面白そう。並列処理糊言語。
    • TupleSpace で名前サーバ不要?(この辺よく分からなかった)

「Amrita2 の紹介」(中島さん)

中島さんより、 essa さんというハンドル名のほうが有名かも。 テンプレートエンジン Amrita2 についての紹介。

  • テンプレートとは? 「文字列」 or 「構造化ドキュメント」。Amrita は構造化を意識する。
  • テンプレートエンジンとは? 「実行環境」 or 「演算(オペレータ)」。 Amrita は演算方式。
    • 要するに erb のようにテンプレートにロジックが入るのか、それともフィルタ的に動作するのかの違い?
  • 「実行環境」ならすべての出力に HTML エスケープの関数を入れないといけない → 漏れるとセキュリティ上のリスクに。
    • 「演算」方式ならテンプレートの意味を把握できる。セキュリティ向上?
  • Amrita2 は Amrita を上手く妥協させたもの。 erb の埋め込みができる。
    • Rails のヘルパーメソッドが使えるということ。
  • <a amrita:type=○○> という amrita:type 属性を追加。コンパイルオプションのように動作する。
  • Rails と Amrita2 を組み合わせて使うと、 Unit テストが容易になる。(ビューからロジックを分離するため)
  • 性能はそれほど速くはない。
  • リリース時期は未定。β版としては使える状態。
  • Amrita2 の日記は今日から「gem 戦記」へ。

早くリリースされるといいなぁ…。

「Perl の会社で使われる Ruby の利用法とは!?」(舘野さん)

id:secondlife の人。 はてなにおける Ruby の利用状況について。

  • デプロイツール重要。Capistrano (旧名SwitchTower) + Subversionをカスタマイズしつつ使う。
  • Capistrano の影。
    • Rake を使うと柔軟性が…。
    • production 環境以外でのデプロイができない → 拡張して対応
    • 再起動時にすべてのサーバを同時にシャットダウンする。時間差でシャットダウンしてほしい。
  • はてな: Perl + JavaScript + Ruby (ちょっとだけ) 。 Perl6 での非互換性を懸念。
  • Web アプリの寿命は3年 → 実験的なサービスで試しに Ruby を使っている。
  • はてなスクリーンショットで Rails + dRuby を使っている。lighttpd + mongrel + MySQL 5.0 。
    • Windows 機でスクリーンショットを撮影し、サーバへ dRuby で転送。
    • dRuby は Ruby にあって Perl ない強み。

質疑応答では、たださんより「dRuby 単体ではなく Rinda を使ったほうがサーバ追加時のスケーラビリティを確保できるのでは?」というコメントがあった。

お昼

昨日に引き続きヴィーナスフォートまで歩き、 RubyCafe にて昼食をとる。

パネル企画 「Rails in Production」

コメンテータに関さんや DHH さんを加えての Rails 話。

  • 名前の衝突問題。 ActiveRecord のカラム名にうっかり既存メソッド名 (type など) を使うとハマる。
  • ロガーを拡張しているが、既存ライブラリの挙動が変わって大変。
    • 将来的には ActiveLogger みたいなのも必要かもね (DHH)
  • デザイナーとの作業分担を意識しないことが多い。
  • Rails はログの情報が充実しているのでデバッグしやすい。
  • フロントにリパースプロキシを置いた環境で HTTPS で繋ぐと、バックエンドの Web サーバがプロトコルを認識できない。 url_for で少しハマる。

「Rails による Web アプリケーション開発・保守事例の紹介」(moriq さん)

  • Excel での帳票印刷。
  • 携帯対応はコントローラで分けることが多い。

「ActiveRecord を詳しく」(西さん)

くまくまーの人。

  • ActiveRecord 単体で Syslog 的にも使える。 Syslog.create(:message => 'ログメッセージ')
  • with_scope 超便利。日本でググると15件 (!)
    • DB の View に近い。ブロックの外側で条件を指定すると、内側の find にその条件が適用される。
    • Member.with_scope(:condition => '条件1') { Member.find(:all, :condition => '条件2' }
    • 外側の条件が優先されるので、不正な入力値への対応にも使えるかも。
  • その他ディープな内容が盛り沢山。
    • Single Table Inheritance (STI) や Finder Query など (キーワードだけメモ)

「One controller, many ins, many outs」(David Heinemeier Hansson)

英語での基調講演。超興味深い話をしていたんだけど、2割くらいしか理解している自信がないのが残念。 誰か、詳細なレポを希望…。

  • CRUD 重要。最初はいろいろ言われたが間違っていなかった。
    • DB も HTTP も CRUD 的な発想になっている。
  • HTTP の PUT や DELETE は有効に使われていない。上手く使えば URL をきれいにできる。
    • 「POST person/1/update」や「POST person/1/delete」を、「PUT person/1」や「DELETE person/1」と書ける。
    • URL はリソースの識別に専念。
    • Consistency (一貫性), Simplicity (単純さ), Discoverablity (見つけやすさ)
  • Constraints are liberating
  • Model beyond "things". 属性や状態もモデル化すれば CRUD できる。
    • 1つのオブジェクトに属性を増やしていくとスパゲッティコードになる。
    • CRUD + Validation を上手く使う。
    • (でも具体的な実装のイメージが掴めなかった。モノと属性の関連をどうやって URL で表現するのか?)
  • 1つのコントローラで複数の入力と複数の出力に対応する。
    • mimetype や accept ヘッダで入力の種類を判定。携帯、Ajaxなど…
    • 入力に応じて出力を変える。 html, xml, atom, ical, mobile...

ここから新しいアイデア "Active Resource" の話(すでに実装があるのかどうかは不明)。

  • Active Record の HTTP 版。サーバ間通信。
  • DB への CRUD 操作が可能なら、HTTP を使っての CRUD 操作も可能なはず。
    • david = Person.new; david.name = "DHH"; david.save で、サーバに対して HTTP の POST メソッドを発行 (Create) 。
  • POST, GET, PUT, DELETE メソッドを使う。
  • サーバ間の認証にはとりあえずは HTTP Authentication (Basic, Digest) を使う。

DHH はプレゼン慣れしていた。資料も分かりやすかったし(ところどころに日本語訳が入っていて助かった)。 特に、中盤の状態をモデル化するところの話をもっと聞きたかった(理解したかった)。

ライトニングトークス

1人5分ずつで順番に発表。 BiaRuby とか RubyCocoa とかブロックの話とか、どれも面白かった。

(時間があればここに個別の感想を書きたい…ちゃんとメモは取ってる → 2006/06/12 書いた)

  • BioRuby + ChemRuby でバイオと医薬の世界を繋げる。 irb を拡張した DNA 解析プログラム。螺旋構造がスクリーンに表示されたときは会場から拍手が。
  • RubyCocoa は Mac 用アプリを Ruby で開発するためのフレームワーク。 Cocoa は Objective-C で書かれている。
  • HL7 プロトコルライブラリ
  • Rails の url_for は絶対パスを出力するのでハマる。絶対パスを相対パスに変換するプラグイン。
  • Rubricks は WEBRick リスペクトで付けた名前じゃない。でも WEBRick はリスペクトしている。 Ajax 搭載の CMS。
  • Debian 世界では deb パッケージにならないものは存在しないに等しい。
    • Ruby パッケージへの依存関係は Perl のそれより一桁少ない。
  • Ruby on 風博士。Ruby で風博士を拡張。
  • ブロック最高! DSL には遅延評価が必須。「継続かわいいよ継続」…は時間切れ。プレゼン面白い。
  • Refe を Emacs バッファに簡単に表示。 (vim 版が欲しい!)
  • 人工無能。イマドキの若者っぽく、すぐググる。GDBM + テキストを sqlite + ActiveRecord にしたい。
  • 転がる玉。公開一週間前に Ruby で作成。Win32API は呼び出しに失敗するとコアダンプ。

他の人の感想

  • 公式ページにプレゼン資料がアップされている。1日目, 2日目も参考に。
  • PB memoさん。分かりやすくまとまってる。
  • daily gimiteさん。 DHH の講演について。POST + hidden タグで PUT, DELETE の代用とするという話ありましたね。
  • mputさん。やっぱり great speach だったんですね。控室のほうが楽しいってのは、まぁ仕方ないような。(あちら側に行きたい!)
  • yuguiさん。ブロックのプレゼン資料(面白かった!)をアップされてる。いつか継続の話を聞きたい。
  • moroさん。伝説になったDHHプレゼンの詳細がここに。やっぱり Active Resource は Rails 1.2 なんですね。(1.2 で put out documentation とか言っているのは分かったけど自信なかった)
  • RoR Wiki 翻訳 Wiki - RubyKaigi2006。DHH プレゼンの詳しい解説。「大筋以外は信用ならないかも」とあるけど、大筋が分かるだけでも超貴重。

感想

内容が濃く、かつ気楽に参加することができた。 これで5,000円は満足度が高いと思う。 個人的には2日目のほうが面白かったかな。言語のコアよりその周辺のほうに興味があるんだろうな…。

後ろの席でもプレゼンが見えるように液晶ディスプレイが設置してあったり、休憩時間には飲み物&お菓子で参加者間の交流ができるように配慮されていたり、電源が取れる多目的室があったりと、会場の設備が充実していた。 もちろんハード面だけでなくソフト面でも、随所に気配りが見られるカンファレンスだった。 (十分な数のスタッフの配置、要所要所での案内、スムースな進行などなど…)

スタッフの皆様、本当にお疲れ様でした&ありがとうございました。 もっと Ruby を好きになったように思います。

Tags: Ruby Life