昨日から東京都千代田区の学術総合センター にて3日間にわたり、RubyKaigi2009が開催されています。本ページでは、2日目のレポートを随時掲載していきます!
※今回のレポートは、一橋記念講堂でのセッションを中心にお送りします(全セッションを回れておりません。ご了承ください) 。
イベント開始前
2日目の朝も、本日のための準備がスタッフによって行われた後、開場しました。
卜部昌平さん「Ruby 1.8 のゆくえ」
Ruby 1.9が最新のメジャーバージョンになりますが、Ruby 1.8もまだまだ利用されており、メンテナンスも行われています。
卜部さんの発表は、1.8系の今後のメンテナンスの方針についてです。
現在メンテナンスされているのは1.8.6、1.8.7、1.8.8の3つです。
1.8.9については、「 ないです。1.9を使いましょう。Rubyの未来は1.9のほうにあります」と述べていました。
1.8.6は、Railsアプリケーションのホスティング会社であるEngine YardのKirk Hainesさんがメンテナをされています。バグやセキュリティだけでなく、パフォーマンスについても扱う方針であるとのことでした。
1.8.7は発表者の卜部さん、1.8.8はMUSHAさんがメンテナをされています。1.8のtrunkに対するコミットについて、バグ修正がコンスタントに3割あり、この割合はまだ減っていません。セキュリティやバグ修正の優先度が高く、テストの追加修正を続けるとのことです。
また、1.8.8はStable branchとして安定させ、このことを「Stable as stable API」と表現しました。1.8.8-devは、1.8の機能として一応の完成をみたとしています。
最後に、これからの展望として、1.9への移行のギャップを少なくすることを目指していることが述べられました。
yuguiさん「Ruby 1.9.2ロードマップ」
1.9系の未来について、1.9系のリリースマネジメントをしているyuguiさんが発表しました。
冒頭、1.9.1と1.9.2のリリースをこの場でできればかっこいいと思って準備していたが、会場でのイーモバイルの調子が悪いため、発表が終わってからリリースを行うとのアナウンスがありました。これには会場から大きな拍手が起きました。
1.9.1は来年の1月に最終版をリリースする予定であるそうです。1.9.2についての計画も発表されました。
1.9.2では、Socket部分が新たに書き直されたこと、Timeクラスで古い年代を利用できるようになったこと、BigDecinamlとRationalの相性がよくなったこと、文字コードの指定にUTF-16-BOMが利用できることがあります。
地味な機能向上が多くみえますが、安定したという意味で良いことだと述べていました。 1.9.2は1.9系のGrand Designを示していることに言及し、卜部さんの発表から「Stable as stable API」を引き合いに出して説明しました。
1.9系の未来としては、ユーザ数の問題をあげていました。「 1.9.1は1.8.0のように安定です。笑うところです。」( 1.8.0はよく落ちたそう)と述べ、ライブラリを1.9系に向けて移植を始めてほしいと語りかけました。また、「 1.9.1から1.9.2は結構互換だと思いませんか?少なくともPerl5からPerl6に比べれば互換です」など、yugui節全開な発表でした。
質疑応答は先の卜部さんと同時に行われました。卜部さんに対して「ライブラリ作る際に、1.9相当のAPIを1.8で使いたい」との要望がありました。これについては、具体的に「これがほしい」という要望をデベロッパMLに投げると1.8.8-devに取り込むとの回答でした。
yuguiさんからは、「 Rubyは正論の通るコミュニティ。みなさんがRubyを変えられます。不満はパッチに変えてください」と、本開催のテーマである「変える/変わる」にも通じるアドバイスがありました。
okkezさん「Ruby リファレンスマニュアル刷新計画 2009 夏」
Rubyリファレンスマニュアル作成プロジェクト「るりま」について、okkezさんが発表されました。WebページはるりまWiki です。
るりまは、貧弱だったRubyのドキュメントを拡充させる目的で立ち上げられました。
ソースを読んだり、RDocの英語版を翻訳してドキュメントを作成しているそうです。
現在は第3段階の、組込ライブラリ、標準添付ライブラリのメソッドをすべて記述することを目標に活動しています。
ただ、現在は新しいライブラリの開発速度が執筆速度を上回っており、追いつかない状況だそうです。この現状をクリアにするため、RubyKaigi2009の初日に企画部屋で、るりまの会議を開き、るりまのライセンスや今後のリリースについて話し合いが行われたことが説明されました。
みなさんに参加していただきたいこととして、MLに参加したり、Ruby Issue Tracking System にある、るりまのissue trackerに参加し、るりまを使うなかで足りないものをbugとして入れてほしいとのことでした。また、レビューやリファレンスに参加する人も募集しているとのこと。
最後にるりまの青木さんも登壇し、書籍執筆のためにあまり活動できなかったことを謝り、本計画の第3段階で約2年間もかけていることについて言及し、「 今年の12月でけりをつけます!」と宣言してくれました。
ささだこういちさん「Rubyist Magazine が出来るまで」
日本Rubyの会の有志により執筆されているWeb雑誌Rubyist Magazine - るびま の紹介です。発表者は、提案者のひとりであり、編集者でもあるささださんです。
るびまのきっかけは、Rubyのドキュメント不足もあり、「 日本Rubyの会」の発足にあわせてなにか活動をしようとなり始まったそうです(最近は、るりまや多くの書籍、Railsの台頭などがあり、とりまく状況が変わってきていると述べていました) 。
るびまの編集には、QuickMLというMLを使い、記事ごとにMLを作成して著者と編集者がやりとりしていると説明しました。また、HikiというWikiシステムで、編集用Wikiと本番用Wikiを使い分けているそうです。 このほか、るびまには詳細な編集規則があることも明かしてくれました。
そして、最新号は26号で、特別号を3回発行しているため、全部で29回発行されていることと、号の平均では記事数は12本、合計で366本の記事を掲載したことを説明しました。
記事の中には、著名なRubyistへのインタビューがあり、そうそうたるメンバーが並んでいます。まつもとさんの「Rubyist のための他言語探訪」という連載は14回を数える長寿連載になっています。
会場では、ささださんからまつもとさんに向けて、連載の依頼をされていました:-)
最後に、ささださんは継続が大事だと繰り返し、「 こんなにすごいことを続けてこれた、ナイスな人々に、海よりも深い感謝を」と締めくくりました。
Jeremy Evansさん「Sequel: SQL in Ruby」
Sequelは、Rubyからデータベースへ「Rubyっぽく」アクセスするためのライブラリです。
Jeremyさんは始めに、「 ruby-dbi」「 ActiveRecord」「 Sequel」と順番に並べ、Rubyとデータベースアクセスの歴史を紹介しました。古くは、データベースの実装ごとにドライバがあり、ユーザはその都度使い分ける必要がありました。次の時代では、RDBMSは抽象化され、ひとつのRubyコードが複数のRDBMSに対して動くようになりました。そしてSequelが登場し、さらに便利にデータベースを操作できるようになった、と述べました。
Sequelでは、メソッドチェーンでクエリを書きます。「 .select(選択) 」して「.filter(フィルタ) 」して「.order(並べ替え) 」する、といった処理を直感的に記述できます。「 SQLは好きですか。SQLをそのまま書いて渡すこともできますが、簡単な処理なら、Sequelで書く方がずっとシンプルです」と、実例を提示しながら説明しました。
また、ActiveRecordのように、モデルと関連付けることもできます。モデル間のリレーションも記述できます。ただしこのとき、データに振る舞いをもとめるか、ただデータがほしいだけなのかを考え、「 データがあればいいのなら、staticに使えばよい」と言及しました。
最後に、Sequelの特長を「高速」「 省メモリ」「 高速Eager Loading」「 マルチスレッドでも高性能」「 よくメンテされている」をまとめ、特にメンテナンスに関しては「バグレポートへの平均反応時間は2時間です」と語り、積極的な開発の姿勢をアピールしました。
Aaron Quintさん「Sinatra: The Framework Within」
「Sinatraは、驚くほどシンプルなインターフェイスを持ったWebアプリケーションフレームワークです。プロジェクトのページをご覧いただければ、どれほどシンプルかすぐに分かるでしょう。」
…と紹介できると思いますが、スピーカーのAaronさんは「Sinatraはフレームワークではない。MVCでもない。ただひとつの『パーツ』である」と彼の意見を述べ、Sinatraの開発者たちとよく議論していると語りました。
では、フレームワークではないとしたら、Sinatraは何なのでしょうか。Aaronさんの答えは「RoutingのDSLである」というものでした。RailsとSinatra、双方に触れたことのある開発者の方ならば、この回答の意味が伝わるかと思います。
発表の後半には、Sinatraのアドバンテージが活きる具体的なシーンや、これまでの成果物の紹介、他のツールとの組み合わせ方、実際にブラウザを操作するデモがあり、Sinatraの魅力を十二分に伝えてくれました。
「まずコードありき、次に、Sinatraを使おう」「 HTTPが言語だとしたら、SinatraはHTTPのスピーカーだ。君はHTTPを話せるかい?」「 The power of localhost」などなど、発表全体を通じて、Sinatraを使うためにドキュメントを読むだけでは得られない“ 思想” の話が多かったように思います。Sinatraが大好きな筆者としては、鳥肌の立った両腕でこの文章を書くこととなりました!
Michael Fellingerさん、Tadahiko Ueharaさん「The innate beauty of Ramaze」
「発表のシステムに問題が発生して…」と、エディタの画面を写しながら始まった、MichaelさんとUeharaさん、2人の発表です。ここで逆に会場が盛り上がるのは、開発者の多いコミュニティならではですね。
まずはUeharaさんから、Ramazeの簡単な紹介がありました。RamazeはMottoに「極力シンプルに」「 必要なものだけ」「 MINASWAN」「 モジュール型デザイン」「 最小限の依存関係」「 オープンな開発」「 完全なテスト駆動」を掲げており、導入の閾値がとても低いことを説明しました。発表中は、実際のコードを動かしながらRamezeを紹介しました。
「Michaelには日本人の奥さんがいて、日本に住んでいるので、Ramazeに対する要望があったら直接伝えられます!日本のRamazeコミュニティを盛り上げていきましょう」という言葉でUeharaさんの担当分は締めくくられました。
そして、いよいよRamaza開発者のMichaelさんの登場です。去年はRejectKaigiで発表されたMichaelさん。今年は一般発表の枠でたっぷり話してくれました。
Ramazeの大きな特長は「Rubyらしく直感的に書けること」として、RamazeアプリケーションのURLマッピングを例に説明しました。パス「/calculator/multiply/1/2」にアクセスすると、「 Calculator」クラスの「multiply」メソッドに引数として「1」と「2」が渡って実行される例では、閲覧者からも「分かりやすい!」と嬉しい反応がありました。
後半のライブコーディング中には、アプリケーションが思うように動作しなくて「誰か助けて!」と声を上げる場面もありました。しかしすぐに、Sinatraのセッションを行ったAaronさんからの助言で無事に動くようになり、微笑ましい一場面となりました。
会場からの「どうして自分のテンプレート言語を作ったの?」という質問には「タイプしやすい(打ちやすい)から。Shiftキーを押すのは面倒」と冗談交じりに答えながら、すぐに「当時はERBがとても遅かったので」と、真面目にフォローしていました。
コミュニティアピール
まつもとさんの基調講演の前に、様々な地域で活動するRubyコミュニティによる、コミュニティアピールの時間が設けられました。
Ruby上海
Shanghai on railsという、中国で最大のRailsコミュニティです。
アピールの大部分を中国語で行い、会場を驚かせました。
Ruby札幌
RubyKaigi2009を、KaigiFreaksとして応援しているRuby札幌の紹介です。
Ruby逆引きレシピを出版し、ジュンク堂RubyKaigi店にてサイン会が行われます。
秋には、札幌Ruby会議02を準備しているそうです。
tokyu.rb
東急線沿線のRubyistが集まる勉強会です。参加者が少ないことを嘆いているそうですが、絶妙な掛け合いで笑いを誘っていました。
Rubyist 九州
地域Ruby会議の九州Ruby会議を開いたRubyist 九州の紹介です。
会場がいっぱいになるほど盛況だったそうです。
熱い九州を熱くアピールしてくれました。
Asakusa.rb
東京下町周辺で活動するコミュニティです。
かくたにさんやささださんなど、豪華なメンバーで活動しています。
Mitaka.rb
三鷹周辺、新宿より西側の地域で活動しています。
「 おいしいRuby」と称して、レストランなどを会場に勉強会を開いています。
Ruby勉強会@青森
RubyKaigiを応援するRuby札幌が応援する勉強会だそうです。
一年間続けられたことが嬉しいと述べていました。
Ruby Taiwan
台湾のRubyコミュニティです。
まだRubyConf Taiwanはないけど、いつかやります!と強くアピールしました。
toRuby
栃木の北部で勉強会などの活動を行っているコミュニティです。
勉強会では、dRuby本を写経しているそうです。
Engine Yard
Engine Yardは、Railsアプリケーションをホスティングするサービスをしています。
RailsやRubyの開発も強力にサポートしています。
ニコニコ動画:https://www.nicovideo.jp/watch/sm7670611 JavaScriptを有効にしてください。
まつもとゆきひろさん「基調講演」
Rubyの作者まつもとゆきひろさんによる基調講演は、今回のメイン会場となる一橋記念講堂で行われました。
Ruby羅針盤
発表が始まるまで、タイムテーブルに記載された発表概要(と、スピーカープロフィールも)空欄のままです。発表が始まってようやく知ることになったこの基調講演のタイトルは「Ruby羅針盤」でした。RubyKaigi2009のテーマ「変わる/変える」を受けて、「 Rubyは、そして我々は今どこにいるのか」「 これからどこへ向かい、どう変わろうとしているのか」という観点での発表でした。
「皆さん、21世紀です!」と呼びかけ、気付けば21世紀になってから10年が経とうとしている今年、2009年を、まつもとさんは「プログラミング黄金時代」と言い表しました。80年代にLisp、90年代にRubyが、なかなか評価されないでいた苦労の時代を思い出し、ようやく良い時代になったと喜びを表現していました。
「アイデンティティ」
基調講演ひとつ目のトピックは、個人の「アイデンティティ」です。
「まつもとゆきひろの最も強いアイデンティティはRuby作者だろう」という意見に、賛同しない人はいないでしょう。「 寝坊して慌ててチェックアウトして名札を忘れても、顔パスでなんとかなったのはRubyのおかげ」と言って会場を沸かせました。他のアイデンティティは、よくご自身を説明するときに言われる「言語オタク」や「プログラマ」「 文筆家」「 Blogger」「 Twitterユーザ」を並べていました。学生時代の得意科目は国語で、数学は苦手だったと語りました。
「文筆家」としての活動といえば、『 まつもとゆきひろ コードの世界』ですね!本の表紙の写真については「なんでこんなことに…」とぼやきながらも、壇上であのポーズを取ってくれていました。
「アティチュード」
ふたつ目のトピックは「アティチュード」です。Rubyの作者としてのまつもとさんが「どういう態度でいるべきか」という話をされました。
立場上、他のプログラミング言語のコミュニティから厳しい意見をぶつけられたり、感情的な批判があったり、苦労も多いとのこと。そういった状況に対しての、まつもとさんの行動指針に関する話です。出てきたキーワードは「感謝」「 酸っぱいブドウ」「 割れ窓理論」「 責任」でした。著者の印象に残っているのは「責任」のところで語られた「自分のパワーを最大化するためにRubyをデザインしている」という信念でした。これがRubyの魅力の源泉となっているのだと感じました。
原則
まつもとさんが「原則」として掲げた言葉です。
「Rubyのコミュニティはフェアである」とし、不満を遠慮なくぶつけられるプロジェクト、コミュニティを維持していくことを誓うと、はっきりと述べていました。「 場合によっては、私がRubyのコミット権を奪われることもある」と言って会場から大きな笑いが起きましたが、それくらいにフェアであるべきだと、強くアピールしました。
「自己責任」「 信頼する」とは、道具を利用する立場であるプログラマに「枷をかけるのではなく、力を与える」という意図のものです。作る側も使う側も含めて、全体として最もパワーが大きくなるようにしようという考えは、先にお話があったRubyの設計方針ともぴったり合致しています。
未公開スタック
発表の後半には「未公開スタック」と題して、作成途中のものから、作成が完了しているものまで、手元にはあるがRubyの本体に取り込まれていない27個のスタックが紹介されました。
普段は見ることのできないものです。会場で見ていた参加者の皆さん、この中に魅力を感じるものはあったでしょうか。大きな声で「ほしい!」と叫べば、次のRubyに取り込まれるかもしれませんよ!
まとめ
発表の最後に表示されたまとめのスライドには、先述の3つの「原則」に「継続する」が付け加えられていました。
「Rubyはよくagileな(変化の早い)言語だと言われるが、fragile(壊れやすい)とも言える」と語ります。確かに、前に進むために後方互換を切り捨てることは「壊れやすい」とネガティブに捉えられるかもしれません。しかし、まつもとさんは「変化しないソフトウェアは面白くない」と思いを述べ、これからもRubyの開発がアグレッシブに続けられていくであろう未来を想像させてくれました。まつもとさんの、変わらないRubyへの愛とともに、Rubyや、Rubyを取り巻くコミュニティは、これからも進化し続けていくことと思います。
Lightning Talks
今年のRubyKaigiはLightening Talks(以下LT)が2セッション行われました。
同じく昨日に引き続き「ドラ娘」にはナガタユウコさん。なんとチャイナドレスでの登場となり、会場は大盛り上がりでした。
前説
昨日に続いて、五十嵐邦明さんからLT用タイマー「TwYM」の紹介がありました。
今回はその実装について解説し、日本語をUTF-32BEで処理しなければいけない場面でRuby 1.9のkconvを利用することで簡単に対応できたと述べていました。
斎藤ただしさん「次世代数値演算ライブラリDecimalという再発明の意義」
数値演算ライブラリDecimalを作成した斉藤ただしさんは、ライブラリの作成を通じて、再発明の意義について持論を展開しました。
再発明に大切なことを、再利用、慣習、シンプル、速度であるとし、これらを考えることで「Happy reinvention」を実現しよう!とアピールしました。
Han Kesselsさん「Morumotto, a jruby-based OpenID service using visual authentication」
「パスワードは下着のように頻繁に変えなければならない」だけど、ついつい同じパスワードを複数の場所で使ってしまいがち。それは、セキュリティ的によくないと分かってはいても、アカウントごとにパスワードを変えるのは面倒で仕方ないからです。
Hanさんが紹介してくれた「Morumotto 」は、2枚の画像を重ね合わせて浮かび上がる情報を利用した、ワンタイム認証の仕組みです。現在プライベートβでサービスが稼働しているようなので、チェックしてみてください。
Benjamin Smithさん「Monitoring the sun with Ruby」
陽光インバータの会社から来られたBenjamin Smithさんの発表です。
ソーラーパネルの下に小さなインバータをつけ、そこから受け取ったデータをRubyで処理し、ブラウザ上で発電のようすをチェックするシステムを発表しました。
デモでは、一日の移り変わりを記録したデータを早送りで再現させ、会場の関心を集めていました。
久保優子さん「RomanticRuby!(Rubyでギャルゲー) 」
「ゲームが大好き!だけど、アクションやシューティングは苦手で、話を読み進めていくタイプのゲームが好き」と、可愛らしい衣装で登場したのは株式会社万葉の久保優子さんです。なんと、Rubyで「ギャルゲー」を作成中とのことです!
好きなゲームを紹介するスライドは、スクリーンへの接続の問題で左端が切れてしまっていたのですが「見えない部分は補完してください」と上手にフォローしていました。
ギャルゲーの開発に着手したきっかけは、「 プログラマたちの会話って変わっているよね」という会話だったそうです。そこから話が膨らみ、「 あなたはEmacs派?それともvi派?」という質問への受け答えで女の子の機嫌が変わるような、とてもニッチなギャルゲーの構想に辿り着きました。万葉の社長に「作りたい!」と申し出たところ、すぐにOKが出たそうです。
「その名もRomanticRuby!略してRoR!」興味を持った方、ぜひ追いかけてみてください!
高野光弘さん「Ruby on Arduino」
Smalltalkからオブジェクト指向が大好きになりRubyにたどり着いたという高野光弘さんは、ArduinoというハードウェアをRubyでコントロールし、ハードウェアを操作することでLT自体を進めるというデモを披露しました。
ハードウェアのトラブルか発表順序を遅らせる場面もありましたが、二度目はつつがなく進行し、「 たまにはハードウェアをいじるのも楽しいですよ」と述べていました。
Arndt Lehmannさん「rubyrep - database replication that doesn't hurt (developed in ruby)」
Arndtさんが紹介してくれたのはrubyrep 、極めて簡単に扱えるRDBMSのレプリケーション用ライブラリです。現時点でPostgreSQLとMySQLに対応しています。
簡単な設定ファイルを書くだけで、LinuxやWindows上で動作し、JRubyを使うこともできます。
黒田拓さん「BABY - 初心者のためのグラフィックライブラリ」
黒田拓さんは、Rubyで簡単にグラフィックをプログラムできるBABYというライブラリを紹介しました。
Basicのように簡単な記述で、画像の読み込み・保存や描画を行えるライブラリです。
ヘビープログラマではなく、初心者である「ベビー」プログラマに使ってほしいとアピールしました。
植村優一さん「Rubyでの(力技)でのネットワーク運用」
NTTコミュニケーションズに務める植村さんは、ネットワーク運用の現場でRubyを使って闘ってきた経験について話してくれました。
単純な「ネットワークの監視」だけであれば、汎用製品が使われることが多いのですが、「 ○○のときは□□する」と、監視以上の作業を自動化するのは難しいです。まして、ネットワークの設定には変化が付きもの。重要なのは「変化を受け入れること」であると捉え、Rubyを活用した運用に乗りだしたとのことでした。
「RSpecを使ってネットワーク装置の検証コードを記述しておくと、読みやすくてオススメです」「 運用現場でもコーディングの機会を増やして、エンジニアを成長させる意味もあります」と話していました。
荒木靖宏さん「rubyによるお手軽CDN作成のすすめ」
Debian Project Memberの荒木靖宏さんの発表です。Debianプロジェクトのサーバがダウンするたびにメールが飛んでくることに嫌気がさし、cdn.debian.netというコンテンツデリバリネットワークをRubyで構築した際のアプリケーションについて解説しました。いくつかの設定ファイルを書くだけで簡単に構築できることをアピールしました。
Twitterへ報告する機能を実装したところ、発言が増え過ぎてしまい使えなかったそうです:-)
Kenneth Kalmerさん「Facing your daemons」
Daemon Kit の作者であるKennethさんがこのライブラリの魅力を語ってくれました。
Daemon Kitはその名の通り、様々なdaemonをRubyで簡単に作れるようにしてくれるツールです。簡素なYAMLの設定ファイルを書くだけで、任意の処理を実現できます。動作環境に合わせて、開発環境ではログを詳細に出力し、本番環境ではなるべくプロセスが死なないように処理を続行する、のように使い分けられます。
須藤功平さん「ActiveLdap」
須藤功平さんは、木構造データを持つLDAPをRubyで処理するActiveLdapについて発表しました。
ActiveRecordのようなvalidate機能をもち、リレーションを設定することもできます。
Railsとの親和性も高いです。
親切なメッセージやRuby 1.8、1.9、JRubyへの対応などをアピールしました。
当日の午前中に1.1.0をリリースしたと発表し、会場から盛大な拍手が贈られました。
小島克俊さん「ビジネスユースでのRuby導入のポイントと解決策」
続いて、LT後のセッションです。CTCの小島さんの発表は、Ruby技術者認定試験の制定までの話を中心としたものでした。
甲冑を着た男性の写真を挿絵にはさみながら、社会情勢等の外部要因に左右されることなく個々に想いを持って開発に取り組んでいる社内のエンジニアたちを「Samurai」と呼び、彼らへの敬意を丁寧に語ってくれました。そんなSamuraiエンジニアたちの熱中の対象はRubyであるとのこと。
「どのようにして彼らを認めていけばよいだろうか。ただ単に一企業として彼らを優遇するだけではなく、もっと広く、Rubyプログラマに評価できる仕組みがほしい」として、辿り着いたひとつの答えがRuby技術者認定試験だったと述べました。
CTCは、まつもとゆきひろさんやRubyアソシエーションと協力して、この試験を2007年10月にスタートしています。認定試験を通じて、企業には「資格保持者が○○人いる」という外部への価値を、個々のエンジニアには「資格を持っていると給料アップ」といった価値を提供できます。
発表の残りの時間では「あまり知られていないであろう松江市を紹介します」として、ときには英語で、会場の皆さんに松江市をアピールしていました。海外の方には、誤解を与える内容だったかもしれません :-D
成田智也さん、浜中慶さん「Ruby,Railsによる「ケータイ」ポータルの作り方!」
2人は、Rails製Webアプリケーションの運用を行ってきた経験から、「 ケータイ」向けサイトの開発・運用に役立つ知見を紹介してくれました。
実際に稼働しているRailsで作られたサービスには、@nifty TimeLine やアバウトミー などがあるとのこと。初めて@niftyでRailsアプリケーションが稼働を始めた2007年から今に至るまで、さらにいくつかのサービスがリリースされていると述べました。
まず、通常のWebアプリケーション開発・運用とは異なる「ケータイ」サイトの特徴として、「 仕様変更当たり前」「 機種依存当たり前」「 多様なターゲット層と利用シーン」を挙げ、Railsを活用した開発がどのように効果的か、話していました。
サービスごとに「メーリング処理」「 画像加工処理」等の必要機能をモジュールとして実装する現状の開発スタイルを「垂直統合型」と呼び、これではモジュールの再利用ができず、開発コストが膨らむ問題があると整理していました。それを受け、今後は機能モジュールを共通化し開発の効率化を目標とした「水平分業型」に移行し、もっとスピーディなケータイサイト構築を目指すと意気込んでいました。
また、RubyKaigiのスポンサーを務めたり、大学でRubyを教える講義を持ったりと、Ruby界に様々な形で貢献しています。
吉見和也さん「実戦投入Rails - RubyKaigiEdition」
株式会社RAWHIDE.のCTOを務める吉見さんが、業務で培ったRails開発のノウハウを紹介しました。WEB+DB PRESS Vol.51 特集1「実戦投入Rails」では語り尽くせなかった内容も含むRubyKaigiEditionとのこと。
事例として紹介されたのは、某有名企業内で使用される「10万人以上が利用する人事管理システム」でした。筆者には、想像も及ばない規模のアプリケーションです。運が悪いことには、すでに運用が始まっている既存プロジェクトからのシステム移行が必要であり、なおかつ、そのプロジェクトが大炎上していたそうです。
旧システムはとても手を触れられるような状態ではなく、何かひとつ機能を追加しようとすればそれだけで数ヶ月を要してしまう…そんな状態で、旧システムと、Railsで作る新システムをいかに上手に共存させるかが、プロジェクト成功の鍵でした。
「Railsは、用意されたRailをはみ出さないように走ることで、効率を上げることができる。すでに存在するシステムに合わせて作らなければならないときは、ナチュラルキーなどを活用して、とにかくRailに乗せてあげましょう」と、苦労した経験からつかんだ知見を披露してくれました。
ちなみに、件のプロジェクトは無事に進んだようで、今では「信頼」を得られたと、吉見さんは誇らしく話していました。
大井宏友さん「Railsサイト安定運用の心構え ~8つのサービスから学ぶ」
多数のWebアプリケーションを運用されているMedia Technology Labs(以下、MTL)から、大井さんの発表でした。RubyKaigi2009スタッフ打ち上げの参加登録に利用されているATNDも、MTL発のRailsアプリケーションですね :-)
MTLは「自社だけではなく、世の中に対して貢献していきたい」という高い志しのもと、スピーディにWebアプリケーションをリリースしているとのこと。組織として、開発言語には特にこだわりがないそうで、採用ルールは「担当するエンジニアが最も早く開発できるもの」というシンプルなもの。結果として、Railsが採用されることが多いようです。
アプリケーションごとに、使用しているRailsのバージョンはばらばら、WebサーバもMongrel、Thin、Passengerだったりとバラバラで、基本的にそのときの最新安定版を選ぶそうです。開発が「スピード重視」であることが伺えます。
「Perl、PHPはCPUを食う」「 Railsはメモリを食う」という特徴に着目し、これらを組み合わせて1台のサーバ上で運用すると、上手く共存できるという、現場ならではのノウハウは面白かったです。「 一度はハマっておこう」という失敗談の事例では、「 DB Tuning」「 Log rotation」「 Restart Mongrel」の3つを具体的に紹介しました。
最後に、「 サン・マイクロシステムズがオラクルに買収されたので、クレジットがどうなるか分かりませんが…」と前置きしつつ、Mash up Awardを告知しました。
須藤功平さん「CとRubyとその間」
Lightning TalksではActiveLdapの話をしてくれた須藤さん。この発表でも、他の自作ライブラリを「さっきリリースしました」と紹介し、たくさんの拍手を集めていました。
Rubyの得意なことは「直感的・柔軟」 、苦手なことは「高速な動作」と整理し、その逆の特徴をもったC言語と、どのように使い分けていこうか、という内容でした。
考え方のパターンは、「 Rubyの苦手をカバーするか」「 Rubyの得意を活かすか」の2種類であることを指摘しました。
最初に「苦手をカバー」の例が取り上げられました。ここで例として挙げたものは、全文検索groonga の機能をRubyから利用するためのライブラリ「Ruby/groonga」と、ActiveRecordライクにgroongaにアクセスするための「ActiveGroonga」です。
C言語で実装されたgroongaは高速な全文検索が可能であり、これは、Rubyの「高速な動作が苦手」を補うものと説明しました。ActiveGroongaを使えば、Railsアプリケーションのモデルの柔軟性はそのままに、groongaによる全文検索機能を取り入れることができるそうです。近く、Ruby/groongaは、ニコニコ大百科 やbuzztter のバックエンドに採用されるかも…とのことでした。
黒田雄一さん、松村章弘さん「オープンソース開発を始めよう~扉を開けば奇跡が起きる~」
黒田さんと松村さんの2人による発表です。黒田さんと松村さんは、ともに所属の異なります。しかし、2人が同じ壇上に立ったのは、オープンソースプロジェクト「SKIP 」がつないでくれたからです。
2人の主張は一貫して「オープンソース開発は素晴らしい」「 オープンソース開発で奇跡を体験した」「 オープンソース開発を始めよう」というものでした。この発表では、オープンソース開発を進める上で問題となったことと、その解決策について、そして、2人の体験した奇跡について語ってくれました。
黒田さんからは、SKIPと連携するWikiシステムである「SKIP-Wiki」を「オープンソースで」開発した経験と、そこで得られた知見を話してくれました。SKIP-Wikiは、「 Sonic Garden」「 三菱UFJインフォメーションテクノロジー」「 永和システムマネジメント」の3社で共同開発されているプロジェクトです。
通常の、社内に閉じた開発体制と異なり、面と向かって話をできる機会が少なく、認識のズレによる無駄な作業の発生しがちです。これに対しては、自作のSKIPを活用して情報を一箇所に集め、密なコミュニケーションを実現できたそうです。また、プロジェクト全体の状況把握が困難になる問題には、コード管理にGitHubと、プロジェクト管理にRedmineをそれぞれ当てて、対処できたとのことでした。
続いて、松村さんのお話です。SKIPをオープンソースプロジェクトとして公開してからの1年間、本当に色々なことがあったと、熱っぽく語りました。ユーザから不具合報告をもらってバグに気付けたこと、角谷さんからパッチが届いたこと、セキュリティ専門家の監査を受けられたこと。「 8ヶ月前のコードに対する34,000行のパッチで160個のコンフリクト」として紹介された体験談では、SKIPを国際化するためのパッチが海外の開発者から届いたときの喜びを伝えてくれました。
発表の最後には、友情出演として共同開発者の諸橋さんが壇上に登り、「 SKIPはよくできているのでぜひ使ってみてほしい。共同開発を通じて、こちらもたくさん勉強させてもらった」と話しました。
オープンソースプロジェクトの素晴らしさがよく伝わってくる発表でした。
後藤幸生さん、大城学さん、西澤無我さん「Ruby による楽天の大規模サービスと基盤技術」
楽天の後藤さん、大城さん、西澤さんからは、超大量のアクセスを受ける楽天の大規模サービスを支える基盤技術の紹介が行われました。
まず、Railsアプリケーションを実践投入する前に、CakePHPアプリケーションとのパフォーマンス性能比較を行ったことを説明しました。結果から、Railsが大きく劣ることはないと判断し、本格的な実践を目指して動き出したそうです。
運用上、しばしば問題になるのは、「 データベースの応答性能」と「Apache graceful問題」であり、前者にはRailsのモデル内でのテーブル分割を、後者には「gracefulを避ける」を対策としていました。このように、Railsアプリケーションを本稼働できるところまでノウハウを蓄積しています。
後半はROMAを紹介しました。ROMAは、まつもとさんがフェローを務める楽天技術研究所で研究開発が進められている「楽天製KVS」です。実例としては、楽天市場でのユーザの商品閲覧履歴データなどを保持する高性能なストレージとして利用されるそうです。
また、ROMAはプラグイン機構を持ち、シンプルなコードでデータに対する処理を記述できるため、「 ある値を格納したら、ある値を削除する」といった類の処理を、1回のHTTPリクエストでアトミックに行うことができることを説明しました。
Ilya Grigorikさん「Ruby C10K challenge: High Performance Networking」
RubyのWebアプリケーションでのスケーラビリティやパフォーマンスについて、PostRank のファウンダーであるIlya Grigorikさんが発表しました。
多くのWebアプリケーションでは、「 アプリケーションのボトルネックより、I/Oのネックのほうが大きい」と言及しました。この問題のために、EPollやKQueueをRubyで扱うライブラリ、EventMachine を紹介しました。
EventMachineを用いることで、並行化して実行したいコードを、イベントのコールバックとして記述できるため、実装のみに集中できます。また、イベントにタイマーを設定したり、長いプロセスを非同期に実行させることも可能です。
また、実際にWeb開発をするにあたって、ステージング環境を用意したのは良いが、本番環境との差が大きく、ベンチマークをとることが難しい場合が多いとのこと。紹介したem-proxy は、EventMachineを利用したプロキシです。届いたHTTPリクエストを複製し、実際のトラフィックを本番環境とベンチマーク環境に渡すことができます。これにより、実際のデータを使ってベンチマークを取れたり、レスポンスの違いをチェックすることもできます。
最後に紹介したBeanstalkdは、メモリ上に構築するワークキューです。スケジューリングや優先度を設定できます。
しかし、多くのメモリを必要とするため、EC2などで利用する場合コストがかかってしまいます。そこで、em-proxyを利用し、直近で必要なジョブのみをBeanstalkdに渡し、それ以外のジョブをMySQLに格納することで、メモリ使用量を減らす実例を示しました。
Mohammad A. Aliさん、Ehab El-Badryさん「NeverBlock and I/O Concurrency in Ruby」
MohammadさんとEhabさんは、RubyでI/Oを並行に実行するためのライブラリNeverBlock を紹介しました。
Ruby1.9では、Fiberをつかってノンブロッキングなコードを書くことができます。
とても速く、メモリ消費も少なく、I/O以外のコードでは競合状態が発生しません。しかし欠点として、スケジューリングを手動で行わなければならず、明示的に管理しなければいけない部分があります。
そこで、Fiberを拡張し、欠点を補ったものがNeverBlockであることを説明しました。DB接続などで用いると、クライアント側は並列化を意識することなくコードを書くことができます。Rubyの高速なWebサーバThin を対象に、Thinの内部で利用されているEventMachineをNeverBlockに置き換え、高速化したことを示しました。
NeverBlockは、Net/HTTP、ActiveRecord、ActiveResouce、Thinをサポートしています。今後、PasserngerやSequelのサポートを計画しており、Erlang並みの速さを目指しているそうです。
会場から、Windowsで動作するかとの質問があり、これに対しては、「 短いスパンではNo、長い目で見てもNoだろう」と答えていました。しかし、「 githubで公開しているので、貢献してくれるとうれしい」とも述べていました(espace's neverblock at master - GitHub ) 。
本セッションでは、サンプルコードを豊富に示し、コードをシンプルに記述できることをアピールしていました。
Thomas Eneboさん、Nick Siegerさん「JRuby Update 2009」
JavaVM上で動作するRuby、JRubyの作者、Thomas Eneboさん、Nick Siegerさんの発表です。「 私たちはとてもFriendlyなので、Ruby、Java、JRuby、ガンダム、タイヤキに興味がある方はぜひ話しかけてください」と自己紹介されました:-)
「Javaは多くの導入実績があり、JRubyは既にあるJavaアプリケーション上にデプロイが可能です。JVMを利用するため、高機能なGCが搭載され、HotSpotによって動的に高速化可能な部分を解析します」と述べ、JRubyで複雑な数式処理を繰り返し行い、だんだん高速になるデモを披露しました。
なお、現在JRubyはRuby 1.8.6またはRuby 1.9に対応しています。Javaのライブラリや関連技術を利用することができ、手持ちのJavaコードを利用したり、ScalaやJavaScriptなど他のJVM系言語を利用することもできることも説明しました。JRuby版のirbであるjirbで、JavaのSwingを呼び出し対話的にGUIアプリケーションを作成するデモを行いました。
JRubyのコードベースは絶えず改善されており、2~3ヶ月ごとにリリースされています。
現状のJRubyで足りない部分は、ネイティブC拡張を利用できないことですが、よく使われるものはJavaに移植されているし、必要であればJavaで拡張を書くか、FFIを利用するとよいと答えていました。
6月15日にリリースされた、JRuby 1.3.1についても言及しました。GAE/Jへの対応、timeout.rbが40%の速度向上、irbが1.9モードで動作可能、メソッドキャッシュの改善などが特徴です。JRuby 1.4.0は9月頃のリリースを予定しているそうです。
Invokedynamic(JSR 292) のサポートや、Javaとの統合をより緊密にすること、他のJVM系言語との連携の改善を予定しているとのこと。
また、ruby2javaライブラリを使って、Rubyで書いたコードからJavaの実行ファイルをコンパイルし、Pure Javaで動作させるデモも披露しました。
JRubyを使ったサービスの事例をあげ、クロスプラットフォームや、GUIへの対応のためにJRubyを用いるケースが多いことを示しました。
Githubをプライベートネットワークで利用できるGitHub:fi も、ソースコードの難読化やOS間の可搬性のためにJRubyを採用しているそうです。
質疑応答の場面では、質問者の方に「JRuby会議2009」と書かれたJava Tシャツがプレゼントされました!
Bear bust(Bring your own food/drink)
2日目のプログラムの終了後、食べものや飲みものを持ち寄った懇親会「Bear bust」が開かれました。
RejectKaigi2009
Bear bustの中で、今年もRejectKaigi2009が開催されました!
※RejectKaigiは、RubyKaigiで不採択となってしまったプレゼンテーションを発表する場です([ruby-list:46204] RejectKaigi 2009 開催のお知らせ [7/19(日)] ) 。昨年のRubyKaigiでも、イベント撤収時間と並行して行われました。
本来、今年のRejectKaigiは3日目に行われる予定でしたが、沢山の応募があったため急遽2日目にも開催される運びとなりました。ドラ娘もその場で募集し、「 なぞの女性プログラマ」さんが大役を引き受けてくれました。
mootohさん
Ubigraph というグラフ描画アプリケーションのRubyラッパ、Rubigraph を作成しました。本家にも取り込まれたそうです。派手なデモを披露し、会場を沸かせました。
こしばとしあきさん
Javaの障害検知ツールExcat を使って、JRubyの内部をdumpするデモを行いました。JVMレベルで「見える化」を実現する、とまとめました。
川戸正裕さん
GPS Twitterという、iPhoneから位置情報つきでTwitterにポストするシステムの発表です。
SafariのGeolocation APIと、RubyのTwitter4Rライブラリを使っています。
車輪の再発明とか気にしない、一日で作れる範囲で続けることが大事と述べていました。
jugyoさん
ターミナルで動作するTwitterクライアントのTermtter を紹介したのは、株式会社万葉のjugyoさんです。
琵琶湖の上で勉強会を開いたそうです!プラグインが充実しており、FirefoxからTermtterを経由してTwitterへポストする機能がLTの目玉でした。
みかみよしゆきさん
IMEのATOKをRubyで操作するライブラリを開発しました。OS Xでは動かなかったそうですが、先日対応版のATOKが発表されたそうです。
本の名前を変換してAmazon検索したり、「 今日の予定」と変換してGoogleカレンダーを開くデモに、会場は大盛り上がりでした。
kanasanさん
kanasanさんは、るびまの記事を未読管理するGreasemonkeyを紹介しました。
「 途中」や「済み」などの状態を管理することができます。
通読状況を出力/マージする機能がありますが、PC間の受け渡しはメールやGithub、手入力(!)で行ってくださいとのことです。
大林一平さん
トリをつとめた大林一平さんは、Ruby/SDLの作者の方です。SDLのRubyバインディングで、ゲームなどを簡単に作ることができることをアピールしました。
2.XでAPIが変更され、1.9対応も行われたそうです。次回のリリースは8月を予定しているとアナウンスしました。
お昼休みのサイン会
本日お昼休みに、『 パターン、Wiki、XP』( 技術評論社)の江渡浩一郎さんと、『 ふつうのコンパイラをつくろう』( ソフトバンク)の青木峰郎さんの合同サイン会が行われました。
まつもとゆきひろさんも青木峰郎さんのサインをもらっていました。先行販売の『ふつうのコンパイラをつくろう』は100冊が完売しました! 担当の編集者さんが涙目で会社に本を取りに行って、28冊を追加搬入しています。
『パターン、Wiki、XP』も50冊以上売れました。残り10冊程度。ご購入はお早めに!
また、『 エンタープライズRails』( オライリー・ジャパン)の高井直人さんも、臨時サイン会を開催していました。
15:30~16:00のサイン会
LT終了後の休憩時間には、『 まつもとゆきひろコードの世界』( 日経BP社) 、『 プログラミング言語Ruby』( オライリー・ジャパン)のまつもとゆきひろさんと、『 Rubyで作る奇妙なプログラミング言語』( 毎コミ)の原悠さんのネットワーク応用通信研究所の同僚お二人による合同サイン会が行われました。
まつもとさんのサインを求めて長蛇の列。最後尾は2コーナー曲がった階段のところまで伸びました!
『プログラミング言語Ruby』には、監訳者の卜部昌平さんもサイン。
『まつもとゆきひろコードの世界』は50冊が完売しました。完売記念に、表紙のポーズで記念撮影するまつもとさんと原さん。
ツーショット
LTで活躍したドラ娘ことナガタユウコさんと、まつもとゆきひろさん。