RubyKaigi2008 1st Day

今日になってプログラムの冊子が配られた。0th Dayはあくまで前振りで、今日からの二日間が本番というわけだ。

それにしても、Macbookユーザが多いな。Macbook Airを持ってきている人も多い。

オープニング

高橋氏による、本家"高橋メソッド"でプレゼンテーションされたオープニング。

今年のテーマは"多様性"。Rubyが認知されるにつれ、いろいろな人が関わってくる。それらを受け入れていこう、ということで、昨年のDaveのスピーチを受けている。また、これはRubyの"多様性は善"という方向性ともマッチするわけだ。

今年の0th dayや2会場によるマルチトラックといった新しい試みも、テーマを受けていろいろ新しいことをやろうという気持ちから実施されている。

午前中の司会はMatz氏が担当。ささだ氏には頭が上がらないらしく、依頼されたら断れないという(笑)

CRuby, JRuby, RubiniusとRubyの処理系についてのセッションが固まっているところに、MacRubyの開発者もきている。Matz氏が「なにか話してよ」とお願いしていたが、「明日ね」との回答。本当に明日話してくれるんかいな。話してくれるといいな。Macユーザとしてはやはり興味深いからね、MacRuby

現在の、そしてこれからのRubyVM開発

ささだこういち氏による、Ruby1.9の現在とこれから、および大学での研究内容についての発表。

昨日、Ruby1.9.0-2が無事リリースされた。これから毎月1回のペースでバージョンアップを重ね、12月20日には1.9.1(Stable)をリリースする目算であるという。今回、リリースをX'masとしていないのは、Matz氏が「X'masをゆっくり過ごしたいから」らしい。1.9.0のリリースはぎりぎりまで盛り上がっていたからねぇ。

1.9については、現在次のような研究を行っているそうだ。

High Performance Computing
Rubyで実現するよ。
マルチスレッド
実装してパフォーマンスを見てみると、なんでもかんでも速くなるわけではなく、速くなるものもあれば、ちっとも変わらないものもあるとか。
Multi VM
1プロセス内で複数のVMを立ち上げるというもの。
Compilation
いろんなコンパイラにかけて、それらの最適化機能で高速化しないか、という試み。
Atomic Ruby
自分で処理系をカスタマイズして、自分だけの、"世界でたったひとつのRuby"を作れるようにするというもの。
メモリ管理
これは永遠のテーマですな。より効率的な実装方法を研究。
新しいGC
ささだ氏近辺ではGCがはやっているのだとか。Ruby1.9は実装の都合上コンパクションできないと言われているが、全体ができなくても可能な部分だけコンパクションする、といった方法もあるらしい。

あと、東大にささだ研ができたので、学生募集の案内。ここがこのセッションで一番重要なポイントらしい(笑)「何も言わなくても勝手に成果をだしてくれる学生を募集」しているとか。うははは、なんてご都合的な。

JRuby: Ready for Action

昨年RubyからJavaのSwingコンポーネントを直接使うデモで喝采を浴びたJRubyが、今年もやってきた。

プレゼンテーションは英語で行われたが、親切なことにスライドは日本語訳付きだった。俺の貧弱なリスニング能力でも安心。

JRubyの開発は進み、現在の最新Stableは1.1.2。1.1.3リリースも間近だそうだ。パフォーマンスに自信があるらしく、Ruby1.9よりも遅かったらそれを正式にバグとして扱うと宣言しているという。そう宣言できるほどに、JRubyの高いパフォーマンスは各所で評価されている。

今はJRubyでSwingをもっとおもしろくすることを考えているそうだ。例えば、SwingをRubyお得意のDSL言語でもっと簡単に使えるようにしようとしているし、NetBeansMonkeyBarsを使えばIDEを使った開発もばっちり。NetBeansからexe, app, jar各種ビルドを作るという魅力的な機能が紹介されたが、あれがNetBeansデフォルトの機能なのか、なにかの拡張なのかはよくわからなかった。ほかの人のレポートを待とう…。

今年は3つのデモが行われた。

一つ目は昨年同様、jirbからjavax.swing.JFrameを使ってみせるというものだが、イベント処理周りをもっと簡単に書けるよう改善している点が新しい。

二つ目は、JRuby on Railsだ。多くのRubyistの関心はやはりRailsにあるわけで、JRuby on Railsには力を入れているようだ。warblerというgemモジュールを使うと、Railsアプリケーションからコマンド一発でwarファイルを作成できる。これをGlassfishにやはりコマンド一発でデプロイすると、もう動く。普通のRuby on Railsのデプロイ作業は結構複雑になりがちなのだが、このやり方はずっとシンプルだ。Glassfishは単位時間あたりのリクエスト数が増加するとWEBrickMongrelより高いパフォーマンスを発揮するようで、運用面でも安心。将来的には、rubygemsとしてGlassfishをダウンロード可能にし、mongrelのようにglassfish_startで起動させることを考えているという。

三つ目はProcessingとの融合。JRubyを間に入れることで、RubyのコードからProcessingを利用してグラフィックを制御できる。

JRuby on Railsを使った製品が実際にいくつもあるそうで、JRubyエンタープライズ用途に向けてCRubyの強力なライバルになりかねない勢いがある。すでに高い実績を持つJavaVMのGCやスレッドを利用できるのは、性能を確保する上で大きなアドバンテージであるようだ。

The Magic of Rubinius

最近海外ですごく高く評価されているというRuby処理系、Rubiniusについてのセッション。

Smalltalk的なアプローチでRuby処理系を実装している、ということでいいのだろうか?世代別GCを持つ、バイトコードベースのVMなのだそうだ。

英語がよく聞き取れなかったのと、話の内容が実装によりすぎていて俺の頭がついていかなかった。どうも処理系を実装している皆さんには実におもしろい内容だったみたいなのだが。

この後、Ruby処理系を実装している面々への質疑応答時間が設けられた。

Q. Ruby処理系共通のベンチマークを作るという動きはあるか?
A. ついこの間、そういう動きが起きた。GitHubにコードを集めようとしている。今のベンチマークYARV(Ruby1.9)に偏りすぎていていけない。

Q. GCの負荷はどんなもん?
A.
Rubinus: たいしたことない。
JRuby: たいしたことない。JVMGCも使えるし。
CRuby: 1.8では問題にならない。というか、全体的に遅いから目立たない。1.9ではGC以外が速くなっているから、目立ち出すかもとドキドキ。てか、JRubyずるい(笑)

キーノート プログラミング梁山泊

Matz氏による基調講演。

梁山泊というのは、ここでは「すごい人たちが集まる場所」のこと。梁山泊では次のようなことが起きる。

  • 技術者が集まる
  • 新しい技術が生まれる
  • 世界を変える

これまでLisp, Unix, Smalltalk, そしてJava梁山泊があり、それぞれ新しい概念や技術—S式、VM, GC, etc—を創出してきた。

そして今、Ruby梁山泊が生まれてきているのではないか。Rubyはかつての梁山泊で生まれたあらゆる要素を継承し、感性を重視した設計という新しい方向性も生み出した。そして、JRuby, Rubinius, IronRubyなどに見られるように、ほかの分野の優れた技術者がどんどんRubyに引き寄せられている。

そんなわけで、Ruby梁山泊が次に世界を変えていく、そうなるといいなぁ、という話だった。

こちらも参照。
【日本Ruby会議2008】「Rubyを国際標準規格へ」---まつもと氏が明らかに | 日経 xTECH(クロステック)
【日本Ruby会議2008】「Rubyは技術者が集まり世界を変える“梁山泊”に」---まつもと氏 | 日経 xTECH(クロステック)

Ruby M17N

Rubyが1.9で力を入れたことの一つ、多言語対応についてのセッション。

Ruby1.9ではCSI方式を採用したそうだ。詳しいことはわからないが、ほかの言語がとっているものとは異なるアプローチであるという。

その関係で、1.9は1.8から多くの違いが出ている。例えば、1.9のソースコードには、そのソースのエンコーディングを明記したMagic Commentを書かなければならない。また、String#eachが無くなって、代わりにString#each_byteやString#each_lineといったメソッドが追加されている、等々である。あまりに量があって、全部は覚えきれない。でも、この説明資料をHTMLにして公開するつもりだそうで、そちらに期待。

っていうか、文字コードリテラルの仕様が変わってる。1.8までは?d = 100だったのが、1.9から?d = "d"になるそうだ。せっかく昨日のGolfで覚えた技がもう使えなくなってしまった。

また、M17N対応処理の中身についても説明があった。しかし、処理系寄りの話なのでやはり難しい。よく理解できなかった。

M17Nは非英語圏に生きる人間にとってはいつまでもつきまとう面倒でやっかいな問題であるためか、質疑応答時間になってもディープな話が尽きなかった。

発表資料はこちらに公開されている。

Ruby《を》教えてるんじゃない、Ruby《で》教えてるんだってば

東大でRubyを教育に使っているそうなのだが、別にRubyistを育てているわけじゃないんだよ、という話。

Rubyによるプログラミングを教えているのではなく、CS(コンピュータサイエンス)の勉強につかう道具としてRubyを利用しているという。そのため、学生には我々Rubyistとはまるで違う使い方を指導しているそうだ。

  • irbをメインに使う
  • eachは使わない
  • block, classは使わない

うはは、確かに全然違う。こんなのRubyじゃない!でも、CSの学習用と考えれば、すぐに結果を得られるirbは最適だし、classが無くても困らない。eachはループを隠蔽するから勉強にならない。

Rubyを使った場合の落とし穴の紹介もあったが、全角文字が入り交じっていたといった微笑ましい(?)ものから、たまたま標準ライブラリと同じ名前のファイルをロードしようとしたため、標準側が優先的に読み込まれてしまったという、結構ハマりそうなポイントの指摘もあった。

スライドは[こちら:title=http://www.graco.c.u-tokyo.ac.jp/~masuhara/papers/ruby-kaigi2008.pdf]。

成功するRuby教育のプラクティス

社内にRubyエンジニアを増やすためにはどうしたらいいのか?

いろいろ方法はあるが、「自分で教える」のがいいんじゃないだろうか。そうすることで…

  • 会社や部署の特色を生かせる
  • アフターフォローもばっちり
  • 勉強する文化が生まれる
  • なにより、講師が一番勉強になる

しかし、自分で教えるといってもどうやったものか?ということで、次のプラクティスが挙げられた。

  • ペアプロで実習する。スキル差も吸収できるし、議論できれば活気づく。さらに、一人でずっと考え込むことが無くなるから、研修の時間短縮にもなる。
  • テスト駆動にする。ただし、テストコードはこちらから提供。クラス単位にテストケースを書いておけば、全部OKになればクリア、ということで結構大きなコードを書けて達成感も得られるし、ゲーム感覚で実施できるという感想もあったという。
  • ほかの言語向けの資料をRubyに翻訳する。Rubyをつかった学習本が少ないなら、Java等の言語をつかって書かれた本の、例えば例題をRubyにしてみるとか。
  • コミュニティでも教育を実施。これは教える側にメリットが。講師はやはり場数を踏むことは重要で、コミュニティで何回も研修をやっていれば上達するよ。

RSpecによるRailsアプリケーションのBDD、事例報告

ぼろぼろなプロジェクトを、Ruby on RailsRSpecによるBDD(振る舞い駆動開発)により立て直したという事例の紹介。

そのプロジェクトはバグは頻発するしバージョン管理はしていないし(ここで会場どよめく)と、実にひどい代物だったらしい。そこにSVNTrac, ビルドとデプロイの自動化、Selenium等を投入してある程度立て直したはよいが、やはりこれまで積んできた負債があるためバグを収束しきれない。そして、そいつの対処にベテランエンジニアを貼り付け続けることになってしまう。

そこで、古いコードを捨てて、Ruby on Railsによるリプレースを敢行、さらにRSpecによるBDDも実施した。

この試みは、まず両方の技術に慣れたエンジニア二人により一ヶ月で達成された。続けてほかのエンジニアたちにもSpec作成を徹底、不慣れもあったがペアプログラミングが与えてくれる勇気のおかげでそれも克服、Coverage100%を目指したSpecのコード量は全コードの70%を占めるに至り、ついには「Specがあると安心できる」という言葉まで引き出したという。

質疑応答がふるっていた。

Q. 上司から「テストなんか書いてないで機能追加しろ」と言われたら、どう回答したものだろう?
A. 「おまえはなにもわかってないんだから、黙ってろ」

場内、拍手喝采。かっこいい!

そういえば、スライドの操作にWiiリモコンを使用していた。おもしろいな、どうやってるか調べて真似してみよう。

発表資料はこちらで公開されている。

Ruby技術者認定試験 模擬問題解説

問題については0th dayにすでに説明を受けているので、パス。

Rubyで快適に連投する11の方法

サブセッション。途中から見たのだが、vimscript内に直接Ruby書いて、RubyからHaskellのコードを実行してMixiの日記をポスト、みたいなスゴイんだかアホなんだかよくわからないデモを実施していた。こういう試みはおもしろくて大好きだ。


あとはライトニングトークスがあったが、これについては別のエントリで。