書いた人:しまだ、いがいが、かたぎり、田中、藤村、かくたに
:
2010/11/11 から 11/13 にかけて、アメリカはルイジアナ州ニューオリンズにて Ruby Conference 2010 が開催されました。
今年も例年同様、Keynote 以外は 3 つの部屋に別れるマルチトラック構成で行われました。本稿では RubyConf 2010 の様子を主にミーハー的な視点から (掲載が遅くなってしまいましたが) レポートします。講演の数が多すぎて、とてもすべてはレポートしきれていませんので、もっと詳しく知りたい方は後述の Confreaks の動画サイトを探検してください。
Ruby Conference を主催している Ruby Central のメンバー、David A Black よりオープニングの挨拶がされました。
今年で10年目ということで、日本 Ruby の会会長の高橋さんを始め、これまでの RubyConf に全て出席している参加者に向けて拍手が送られました。そして、この10年における良い変化として RubyCentral が主催しない Ruby カンファレンス (Regional RubyConference) が増えてきたことを挙げ、10年目の RubyConf、RubyConf 2010 が幕を開けました。
:
RubyKaigi2010 の Keynote の記憶も新しい (当時)、Chad Fowler の紹介により、Dave Thomas の基調講演が始まりました。
まずはじめに、Dave Thomas はこの 10 年で変わったこととしてバージョン管理システムが cvs から svn、git と 3 つ変わったことを挙げ、それら 3 つのバージョン管理システムで記録されてきた自身のリポジトリの 10 年の歴史をふりかえりました。
次に、
の 3 つのチャレンジについての話がありました。
Ruby コミュニティや FLOSS の女性と男性の比率を例にあげて、まだまだ業界やコミュニティについて広い範囲の人たちに届けられていない (理解してもらえていない) ことを指摘されました。
そして、それには外部からの要因だけではなく自分たちの中にも問題があるとし、(攻撃的だったり、ワークライフバランスをコントロールできてなかったり) そうした問題を解決してさらなる新しい世代や自分とは異なる人々に活力を与えることが一つ目のチャレンジだと話されていました。
ほとんど同じだけれども少しずつ違いを持つチーターに比べて、「Ruby プログラマ」「Java プログラマ」など単一言語でしか話そうとしない、もしくは人を区別することの多いわたしたちの業界の問題を指摘して、新しいことを学ぶことが 2 つ目のチャレンジと話されていました。
具体的には、毎年新しい言語を学ぶこと (その際に大事なのはただ読むだけではなく最低 3,000 行は書くことだそうです) 、もしくはモダンな言語のルーツとなっているような言語を学ぶことを挙げられていました。
3 つ目のチャレンジは「Get Out of the Rut (わだちの外にでろ)」とし、昔は小さなフロンティアだった Ruby の世界もいまやアメリカの郊外のように同質の物がただスケールしていく場所となりはじめているので (Rails という Ghetto も存在するようになった) 、こんなときだからこそコミュニティの中にいるわたしたちは何か新しい価値のあることを始めなさい、ということでした。
そして、最後にそうしたチャレンジがわたしたちを楽しくさせるということを忘れないように、という言葉で発表を締められました。
RubyConf 2010 の最初の発表にふさわしい、すばらしい Keynote でした。
(この項:しまだ)
メンテナである Eric Hodel 氏により RDoc と Rubygems のこれまでの歴史や今後についての紹介がありました。
それぞれのプロジェクトで Eric がした (とても些細な) はじめての貢献を紹介していたのがこれから何かのプロジェクトに参加しようと考えている人に勇気を与えるとても良いメッセージだなと感じました。
(この項:しまだ)
これまでの全ての RubyConf に参加している数少ない Rubyist の一人、Nathaniel Talbott 氏が RubyConf の 10 年をふりかえるセッションでした。
それぞれの RubyConf で最も印象に残った参加者とエピソード、学んだことなどを順に話してくれたのですが、人についての話はそれがそのままコミュニティの歴史の一部となっていてとても感慨深く、また学んだことについてはわたしたちが RubyKaigi を通して得ている経験と重なる部分が多くとても共感するものがありました。
Nathaniel のセッションは RubyConf に参加していた日本の諸先輩方から伺っていた通り生で聞いてとても価値のあるセッションだったと思います。
まだご覧になったことがない方は是非来年以降の RubyConf に参加して経験してみてください。
(この項:しまだ)
Ruby と Rails の両方のプロジェクトのコミッタであり、たこ焼き仮面として有名な (?)、Aaron Patterson (@tenderlove) さんが、実際に Rails 3 の Active Record で利用されている ARel というライブラリの性能を向上させていった経験を例としながら、ソフトウェアの性能を向上するためにはどのように考えて実行すればよいのかという発表でした。
内容については、RubyConf X の前に Aaron さんが書いたブログ( ARel Two Point Ohhhhh Yaaaaaa)が参考になると思います。
この発表の次の日の朝に開催された RubyConf 5k へ向けての動画がとても気合いが入ったものでした。
RubyConf 5k Prep(スライドの 28 枚目での動画) http://www.youtube.com/watch?v=KfdIrdD1FbM
(この項:かたぎり)
Ruby on Rails のコアメンバーである Yehuda Katz (@wycatz) さんによる発表で、Rails 3 の開発の際、いろいろな部分を大幅に書き換えたにもかかわらず、どのようにして、 Rails 2.3 への互換性を保つようにしたかについて色々と説明して下さいました。
Sam Ruby さんは、自著の「Agile Web Development with Ralis」という本の中のコードを開発版を含む色々なバージョンの Rails でテストをしており、そのテストからのエラー報告が役に立ったという話は興味深かったです。
(この項:かたぎり)
Github の共同創業者であり、God や Jekyll といった Ruby プロダクトの作者としても有名な Tom Preston-Werner (@mojombo) さんが、 自分がどのようにしてフリーランスのデザイナ兼プログラマから今の状況まで至ったか、そしてそこに Ruby がどう影響したのかといったことを語る自伝的な内容のセッションでした。
“アイデアは形にすることが大事で、Ruby はそれを助けてくれるんだ。Github だって Ruby だったから 3 ヶ月で始められたんだよ” という力強いメッセージがとても印象に残りました。
ちなみに、Github 創業のエピソードは『情熱プログラマー』に寄稿された氏のコラムがとても参考になります。
(この項:しまだ)
RSpec の現在のリード開発者を務める David Chelimsky が、『達人プログラマー』で紹介され、Rails の特徴として広く認知された DRY (Don’t Repeat Yourself) 原則と「重複の排除」の関係について語りました。ひとくちに DRY といってもそれは単に「同じ文字を二度タイプしない」ということ__ではなくて__、元々の『達人プログラマー』の書籍で謳われていた「単一の信頼のおけるソースから情報を取得すること」をよく考えねばならない、と訴えました。DRY で重要なのは抽象化や変更箇所の隔離なんだという話が印象に残りました。スライドの内容もよくまとまっていますので、動画とあわせて広くプログラマに知ってもらいたい内容でした。
(この項:かくたに)
:
2 日目の朝は DHH のキーノートで始まりました。テーマは、彼が Ruby を使い始めてから聞かれ続けた、”Why Ruby?” という問いへの回答です。なぜ Ruby なのか、という問いへの回答は、Ruby を選んだ私たちが何者であるかを理解する上でとても重要なことだ、と彼は言います。
その回答は、Rubyが 多くの素晴らしいアイデアが集まって出来た最高の仕事道具だ、ということから始まります。ブロック、 ‘unless’ などの言葉として自然な構文、テストへの意識の高さ、それが導いた豊かなテスト文化、などを挙げていました。
次に、Ruby が「プログラマーの幸せのため設計された」ということ。機能やパフォーマンスではなく幸せのため。これにはショックを受けたそうです。マズローの欲求段階説を引いて面白い説明をしていました。
そして彼は「他の言語とのもっとも根源的な違い」として、「自由」について語ります。まず、ライセンスの自由。複雑で長大な GPL と比べて、MIT ライセンス――「何でもやりたいことをやれ」は美しい。そして奇妙な (weird) 自由。カンファレンスでマーチングバンドの演奏、ホワイの (感動的) Ruby ガイド。それを「いいじゃん。」と言える、奇妙さを讃える文化が Ruby にはあります。
そんな自由の中から一つだけ選ぶとしたら、モンキーパッチを選ぶ! と言います。モンキーパッチは Ruby を継続して楽しみつづけられている理由の一つ、配列に #second ってアクセサを追加したり、そんなちょっとした改良がプログラミングをとても楽しくしている、と。
DHH はプログラミング言語自体が持つ自由についてさらに論を進めます。Ruby という言語が持つ自由、例えばモンキーパッチで String の挙動を変更するのは確かに危ないかもしれない。デバッグは大変だし悪いことをする人もいるかも。
そういった保守的な意見に DHH は反対します。確かに危ないかもしれないし、実際危険なことができるのは事実。でも Ruby に自由があったからこそ、これだけライブラリが繁栄した。
そして、型安全な言語は空港で金玉を揉まれるのと一緒だ!と、Java を攻撃します。この 10 年、大勢のプログラマーが金玉を揉まれ続けて来た、実際私たちは型のエラーをそう頻繁には起こさないし、それを強制するのは人をバカ扱いするのと同じだ、と (ちょうどアメリカの空港セキュリティが問題になっていた時期でした) 。そして、モンキーパッチングを「Freedom patching」として再ブランディングしよう!と提案します。
「Perl で汚いプログラムを書くことは可能だけれど、そのこと自体が Perl で綺麗なコードを強要する言語以上にクリーンなプログラムを書けるようにもしている。本当に良いことができる可能性は、本当に邪悪なことを起こす能力と共にある」という Larry Wall の言葉がその後引用されました。この力がよい方向に作用する、という根拠は、Rails エコシステムという形で提示されています。
そして「Ruby is a friend, not your parents」、Ruby は友達、お前の両親じゃないぞ、と言います。Ruby は君が何をしてよいか、何をしたらいけないかは強制しない、と。Java は強制を選び、Ruby は助言を選んだ。強制と助言、人間の歴史はこの二つの間で揺れ動いてきた。ギャンブルでお金を使い果たすのも、毎日大麻でハイになり続けるのも、悲しいけど当人の自由。だけどアドバイスはできるし、なにより人はそこまで愚かなことはしない。強制してもブラックマーケットができる。
「私は平和な奴隷であるより、危険と隣り合わせでも自由を選ぶ」というルソーの引用でキーノートは終わりました。
自由でリスキーな言語である Ruby がここまで広がった。リスクのある自由は害よりも利益をもたらす、という議論を擁護する上で、Ruby コミュニティとその成果物は最高の根拠になると思います。 なぜ自由なのか?はさておき、彼の自由への絶対的な信頼は Ruby/Ruby on Rails という文化の繁栄という成功体験が背景にあるのかな?なんて思いました。
ちなみに、F ワード連発、挙句「金玉を揉む」などの彼の口調には、Dave Thomas がジェンダーの問題を挙げた翌日ということもあってか批判の声もありました。彼は以前から女性のプログラミングへの進出を支持していることも追記しておきます。
(この項: 藤村)
JRuby メンテナのお二方から JRuby を使い始めるための基礎となる知識が説明されました。
JRuby 1.5.5 が今週リリースされ、JRuby 1.6.0 が 12 月にリリース予定。(JRuby 1.6.0 は 2011.3.15 にリリースされています。) Ruby 1.9 と Windows に関するサポートが強化されます。Ruby を使えば Ruby から Java の全てのライブラリが呼べます。落とし穴としてはパフォーマンスの面で、String 型は UTF-16 との変換、Java オブジェクトは wrap されることによるオーバーヘッドがあることです。」
続いて JRuby のデバッグやプロファイリングの方法が説明され、JRuby でのコマンドラインオプションの使い方、JavaVisualVM などの Java のツールがそのまま使えること、ビルトインのプロファイラの使い方が解説されました。
さらに JRuby 本体のコードのオブジェクトの扱い方や GC に関する情報、Java による拡張プラグインの書き方が紹介され、JRuby 開発への導入が行われました。
(この項:いがいが)
Ruby で書かれた Ruby 実装の Rubinius は RubySpec や FFI などのスピンオフプロジェクトで本家 Ruby にも貢献しています。
なぜ Rubinius なのか?の問いに関して、開発者のために作っていると説明。開発者がよろこぶ様々な機能が実装されています。
プロファイラでコードの実行時間の測定、バックトレースが Ruby のコードで出るため理解がしやすいこと、heap dump オプションを使うとどのクラスがヒープを多く使っているかのグラフを見れること、を例となる題材を出して説明されました。
また将来は Ruby 1.9 対応、Windows 対応、より互換性を高めることを目標に進めるとのことです。
(この項:いがいが)
RubyKaigi2010 でも話された前田修吾さんの Classbox に関するお話を、ご本人が易しく再編集した内容です。
Class の中でだけで閉じて使える Using Refinement の実装をデモしました。
詳細は資料の公開をお待ちください。サンプルコードを読むのが分かり易いと思います。
質疑応答では RubyKaigi でも活躍した「通訳の matz さん」が登壇しました。
また、質問者に壇上でサンプルコードを記述してもらい、実際に質問内容の実行結果を見るという “We can communicate in Ruby.” を体現した時間になりました。
(この項:いがいが)
タイトルは釣り (本人談)。スウェーデンからやってきた CJ Kihlbom がペアプログラミングの素晴しさを語りました。冒頭にアメリカのコメディ番組「The Daily Show」で取りあげられたスウェーデン特集をツカミに (どんな内容なのかは「スウェーデンの今」の記事「『社会主義国』スウェーデンの恐怖!? (1)、(2)」に詳しいので、あわせて読みたい)、スウェーデンや「社会主義」といった言葉と同じように、ペアプログラミングも実態を知らずに、言葉のイメージだけが先行して正当に評価されていないのではないか、という問題意識からの発表でした。プログラマがお互いに助けあい、切磋琢磨するペアプログラミングは素晴しいものだから、みんなもっとやるべきだし、もっと評価されていい、というお話でした。個人的には「Sharing is Caring (分かちあうことは気遣うこと)」というキーワードが強く印象に残りました。他にもキーワードとして フロー、同胞意識、安定していること、学ぶこと、アプレンティスシップ、メンタリング、切磋琢磨、コラボレーション、連帯感、といったものが挙げられていました。
(この項:かくたに)
:
まつもとさんの基調講演は 10 回目となる RubyConf を祝福し、まずは過去の基調講演をふりかえり、そして 2 つの未来、Ruby2.0 と組み込み向け Ruby、 “Rite” の話をされました。
講演後は満員の参加者からスタンディングオベーションが沸き起こり、皆のまつもとさんへの強い感謝の想いを体感し、Ruby が大好きなエンジニアがここにもこんなにもたくさんいるということに私も感極まりました。以下、講演をダイジェストでお届けします。
今年は未来と多様性について話します。未来は、そう、Ruby2.0 です。こんなことを考えています。
Traits、名前の衝突への解決、例えば衝突時に警告する Module#mix の導入、Tree Modification、alias_method_chain に替わる Module#prepend、キーワード引数、Namespace (例えば前田修吾さんが話した Refinement など) 。
んで、Ruby2.0 はいつでるのか? うん、クリスマスね。いつかの。
多様性の話。
多様性はコストがかかる。JRuby、MacRuby、Rubinius、MagLev、リソースが分散される。それでも私は多様性が好きなんだ。多様性の 1 つとして組み込み向けの Ruby 実装、”Rite” の話をします。ポータブルでメモリ使用量も少なく、レイテンシも少ないもの。あと、九工大の田中先生が RubyChip ってのを FPGA で作ってるんだよね。
んで、Rite はいつリリースされるのか? うん、分かんない。ごめん。
でも日本の 2 年間の官製プロジェクトの一部に入ってる。成果はもちろん OSS で公開するよ。github で公開すると思うので、協力はそれまで待っててください。
CRuby を辞めるのか? いや、そんなことはないので安心してください。そもそも CRuby にかける時間は減ってきてるのだけど、言語デザイナやコミュニティリーダーとしてがんばります。
Ruby を 17 年作っているけど、Ruby のユーザーは 100 人を超えないと思っていた。ところが、現在はこの会場にもたくさんの人が来てくれているけど、すごくたくさんの人に Ruby を使ってもらっている。それは、自分の力ではなくて、Dave が本を書いてくれなければ、DHH が Ruby を選んでくれなければ、そしてあなたがコミュニティに参加しなければ、今の Ruby はなかったと思います。
(この項:いがいが)
開始前に Eric Hodel が「ドラは無いの?」と発言したところ「じゃあお前がドラな」と Chad に言われて Eric Hodel 自身がドラになる (5 分経つと「ターイム!!」といって両手をあげる) というカオスな一幕があり、それを RubyKaigi に参加したことのある海外 Rubyist の人たちがニコニコしながら眺めていたのが RubyKaigi のスタッフでもある著者にとってはまずとても癒される出来事でした。
Lightning Talks 自体については会期中にサインアップしたものを全て発表しようということで、予定していた時間が過ぎても発表が延々続くという自由な感じで進行していました。
途中で別のセッションに移動してしまったため、全部のトークは観れなかったのですが、個人的には高橋メソッドを (高橋さんでない海外の方が) 紹介していたトークと David Chelimsky さんによる Rspec2 についての紹介が印象に残りました。
(この項:しまだ)
InfoEther の Chief Scientist である Glenn Vanderburg さんによる、ActiveModel と ActiveRecord を使って Naked Objects のコンセプトを実現する構想についてのセッションでした。
ドメインモデルはデータベースモデルに引きずられるべきではないとし、ドメインモデルのレイヤを ActiveModel を使って実現してその下にデータベースモデルとしての ActiveRecord クラス群を置くという構想は聞いていて何だかワクワクするものでした。
“スーツをオーダーメイドするようにアプリケーションを作るべき” というメッセージとあいまって、個人的には RubyConf 中で最もゆんゆんしたセッションでした。
(この項:しまだ)
言ってしまうとひたすら Git の豆知識や小技をひたすら紹介するセッションだったのですが、何とも表現しようのないクオリティを持ったエンターテイメントなセッションでした。
終わった後には「これはすごいセッションだった!」と興奮していたのですが、残された手元のメモには git のコマンドの羅列しか残っていませんでした :-)
(この項:しまだ)
パネルセッションということで真面目に話しをするかと思いきや、どちらかというと漫談形式で会場は温かい笑いに溢れていました。会場からの質問もたくさん飛び交い、会場全体で議論を楽しんでいました。
議論の内容は !!foo って書くか、 foo ? true :false って書くか、とか、1 行の文字数は何字にするか?とか、メソッド定義に () をつけるかとか、なんだか楽しい話題が多かったです。私の英語力だと議論を追うのは難しいのですが、会場全体で一緒に笑って楽しみました。
(この項:いがいが)
自身の研究の一環で開発している、科学データ処理のためのワークフローシステム Pwrake について紹介させていただきました。
大規模化する科学データを処理するために、多数の CPU やストレージを用いて、複数のプロセスを同時に実行するワークフローシステムが必要になってきています。
従来、科学計算のためのワークワークフローシステムといえば、タスクの依存関係をグラフで記述するものが多く、それでは複雑なワークフローを記述することが困難でした。その他に Makefile を採用するワークフローシステムがありますが、科学計算では Makefile では想定していないような複雑なルールが必要になることがあります。
一方、Rake は、Ruby の内部 DSL ですから、Ruby の機能をそのまま使うことができ、複雑なルールでも記述できる、非常に強力なツールです。そこで、Rake の仕様はそのままに、Rake に対して並列分散機能を拡張したものを、Pwrake として開発しています。
ソースは github にて公開しています。
Pwrake は、広域分散ファイルシステム Gfarm と併用することにより、スケーラブルな性能を発揮します。
(この項:田中)
オンライン大学システムを利用した教育について、サイトを運営する Gregory Brown さん(Ruby ベストプラクティスの著者) が教育の実践談を話しました。オンライン大学システムのソースは github で公開されています。
講演の最後に Brown さんは自身のことを以下のように語りました。「James さん (James Edward Gray II) に本当にいろいろと教えてもらって、ベストプラクティス本を書けるくらいまでになった。今日、ここでみなさんにこうして話せることを本当にうれしく思う。」話しながら涙を見せるシーンもあり、会場は温かい拍手で話者を称えました。
(この項:いがいが)
Ruby コミッタ、FasterCSV の作者の James Edward Gray II 氏より、なんと Ruby のブロックのみについてのセッションです。
多次元配列へのアクセサに始まり、XML パーサー、URL とサブドメインでデータベースにアクセスする Sinatra アプリなどの実装の解説を通し、あまり一般的でないものも含めてブロックの様々な活用方法の紹介が行われました。圧倒的な「邪悪なブロック」(Evil blocks と本人仰ってました) の連発に、会場は大変な盛り上がりを見せました。
James 氏はパパになられたばかりとのことで、スライドの要所要所に織り込まれたご子息の愛くるしい写真と、容赦なく駆使される “Evil blocks” のコントラストが非常に印象的でした。
(この項:藤村)
Rails アプリケーションを構築する際の「フロントエンドのテストの最前線」、つまり JavaScript を含めた画面のテストをどうするかについて、CJ Kihlbom と Capybara の作者の Jonas Nicklas (この二人は一緒に会社をやってるようです)のふたりが Rails 環境での JavaScript のテストの状況と、Capybara を使ったテストの手法について語ってくれました。
トークについては、後述のスライドがよくまとまっているので、このあたりに興味のある方は、是非目を通してみてください。個人的には、トークのあとに、彼らの実際のお仕事のプロジェクトでのテストを実行してくれるデモを見せてくれたのが印象に残りました。かなりゴリゴリと大量のテストを書いて、こういう人たちでもこうするしかないんだなあ、と結局テストは頑張って書くしかないんだな、という思いを新たにしました。
彼らのトークはとても参考になったので「RubyKaigi 2011 にもプロポーザルを出してよ」とお願いしておきました :)
(この項:かくたに)
株式会社えにしテック代表取締役。日本 Ruby の会理事。Ruby 札幌主宰。著書は『Ruby 逆引きレシピ』(共著、翔泳社)、『プロダクティブ・プログラマ』(監訳、オライリージャパン) 。今回が RubyConf 初参加。2011 も是非行きたい!(@snoozer05)
株式会社万葉所属の Rails エンジニア。今回が RubyConf 初参加。次は 5 月の EuRuKo2011 に参加します!(@igaiga555)
Ruby 東海と CSNagoya に所属する岐阜在住のプログラマー。今回、RubyConf に初めて参加しました。(@eitoball)
筑波大学計算科学研究センター研究員。今回の発表のような研究をしています。時々 NArray 作者。(@masa16tanaka)
東京住みの 28 歳。grooves corp. 所属。いわゆる Post Rails。 (@ffu_)
自称 Askusa.rb 幹部。(株)永和システムマネジメント勤務。日本 Ruby の会理事。RubyKaigi の運営をやってます。RubyConf の参加レポートに何か書いたのは RubyConf 2007以来。だんだん日本からの参加者が増えてうれしい。来年も参加した人はるびまにレポートを寄稿しましょう! (@kakutani)