トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

2011.7.16〜7.19 RubyKaigi2011進出の旅/参加記録

  • 会議が終わってから2ヶ月半経って、会議の感想がようやく書き上がりました。(2011.10.7)
  • そして、会議から4ヶ月経って旅行記も書き上がりました。(2011.11.27)

お知らせ

ここには、聴講した内容など、RubyKaigi参加時の内容のみを掲載しています。旅行的な側面、および会議と関係のないイベントについては、旅行記(別窓で開きます)に書いてあります。

RubyKaigiとは

プログラム言語「Ruby」に関する講演が集まるイベントである。

今年は時間を取れそうだったこと、そして今年が「RubyKaigi」として行われる最後の回になるということもあり、参加した。

公式サイト:日本Ruby会議2011(7月16日〜18日)

1日目(7/16)

11:15ごろ 会場到着
当日早朝に札幌を出発したため、最初の講演の途中の時間に会場入り。会場入りしたら、Twitterでお世話になっていた@hijouguchi氏と遭遇。一緒にホールへ向かった。
10:30(11:20)〜12:00 Aaron Patterson (tenderlove) 氏 "Ruby Ruined My Life."
聴けたのは最後の40分のみであった。私が聞いたのは主に技術的な話(エンコーディングとかFile APIとか)であったが、技術評論社さんのレポートを見ると、前半にはもっと他のテーマもあったらしい。発表資料をあとでチェックしたい。
私が聴講した範囲の内容としては、そのようなエンコーディングとかFile APIなどについて、もっと分かりやすく、便利に使う方法を提案するのが主だった。例えば現在、Rubyのrequireでは純粋なファイル名しか指定できないので、これを一般のURLを指定できるようになったら便利なのではないか?という提案があった。
個人的な感想としては、他の言語では「ぶっ飛んでる」と見えてしまうこういった提案も、Rubyだとむしろ身近に感じられる、というものがあった。だってこういうのって、自分で使う分には、ちょっとしたパッチ書けば(しかもRubyのメインの実装に踏み込まず、Rubyスクリプトの範囲で)対処できてしまうわけなので。標準搭載になるかといえば全く別の話なわけだけど。
昼休み
@hijouguchi氏と昼食。
13:30〜14:30 CRuby development team "Next version of Ruby 1.8 and 1.9"
C言語で書かれたRuby(メインのRuby)の」開発者たちが、Ruby1.8/Ruby1.9のそれぞれの最新の動向を発表。
Ruby1.8については、「新しく作り進めることはない。セキュリティ対策はするけど」という手短な説明で速攻で終了。会場(私含む)大爆笑。
そして大半は、Ruby1.9の最新バージョン、1.9.3についての話に費やされた。特に興味深かったのは、GPLv3との互換性のために、Rubyの利用ライセンスでGPLv2を使ってた部分を2-clause BSDに変えたという話と、クラスに属するメソッドではなく定数をprivateにする機構の導入(private_constant文の導入)。private_constantは個人的には積極的に使いたいけど、Ruby1.9.3限定なのがちと残念。
質疑の時間では、登壇者同士(=Ruby本体の開発者同士)での質問が多く、新しいパターンであった。w
14:40〜15:10 sora_h氏 "Rubyとそのコミュニティと中学生の私"
中学生の発表者が、どうやってRubyコミュニティに入っていったか、という話。Rubyを使っているうちにオンラインで他のRubyistとの出会いがあって…という経緯を話していた。この中学生、訓練されすぎである。
で、発表が10分ちょっとで終わってしまったため、最初sora_h氏は「最初からもう一度発表を行う」とか言い出し会場大爆笑。結局それは行わずに、別に用意していたネタ「Rubyのバグレポートの出し方」を話していた。
15:10〜15:40 須永高浩氏 "Ruby用のリアルタイムプロファイラ"
氏が開発したRuby向けプロファイラ(プログラムのどの部分に、どの程度実行時間が割かれているかを調べるソフト)についての説明。Ruby付属のプロファイラの欠点「全体の実行が終わらないと結果が見られない」というのがなくなっているとのことだった。またウェブブラウザで結果を見られるようにしたものもあり、それのデモが行われていた。
16:10〜16:40 池原潔氏 "組込みシステムのための動的コンポーネント機構とVMの最適化"
16:40〜17:10 岡部浩太郎氏・まつもとゆきひろ氏 "軽量Ruby"
2件連続で、組み込み機器向けでRubyを利用することを目指している方の講演。
池原氏からはRuby VMのバイナリ構造を変え、通常のRuby VMでは固定長で扱っていた部分を可変長とすることで、VMのバイトコードの容量を減らすという話がされていた。普通に考えれば固定長のほうが速く処理できそうなのだが、氏によると、(理由は忘れてしまったが)組み込み機器向けではこれがよい、という話をされていた。
岡部氏らのプロジェクトでは「組み込み用Rubyの実行に適したチップ」、例えば頻用される機能(ちょっと忘れてしまったのだが、配列とかハッシュとかだったと思う)をハードウェアとして実装するということで高速な処理を実現するという構想などが述べられていた。Rubyチップとか胸が熱くなるな。
17:20〜17:50 nari氏 "CRubyGCの並列世界"
GC(Garbage Collection)を並列処理する話。単純に並列化で高速になればよいのだが、各コアへの割り振りが一筋縄ではいかないとか、そのために工夫を加えるとオーバーヘッドが大きくなってしまうという話であった。
17:50〜18:20 ささだこういち氏 "並列世界のRuby処理系"
「並列世界」という言葉に、一つ前の講演と同様の「並列処理」の他、「Rubyを改造した処理系や、Rubyの異なる実装が存在すること」の両方が含まれていた。
この際、講演で詳細な説明はされなかったが「Optionally-typed Ruby」(変数に入る値の型を制限することが出来るRuby。通常のRubyでは不可)という、私がまさに欲しいと思っていたものも出てきて、同じことを考えている人はやっぱりいるんだなあと感じた。ただこういう色んなRuby改造処理系があるのは面白いとは思うのだが、通常のRuby処理系で扱えないのでは、私としては魅力がない。別のバイナリをインストールしないとならないとか面倒だし、制作者としてはメンテも面倒になるし。何とかOptionally-typed Rubyをスクリプトレベルで実現したいところである(と言っても、厳密な意味では不可能だけど)。

闇RubyKaigiは不参加。他の方と飲みに行ってました。

2日目(7/17)

早朝は観光に行ってました。

11:00〜11:30 Eric Hodel氏 "Writing Friendly Libraries"
ライブラリを作る際の慣例、例えば命名規則とかファイル/ディレクトリ構成とかの説明。だいたい一度聞いたことのある話だったのだが、非常にまとまっていたので、良い復習になったとともに、自分が慣例を無視していた部分をもう一度見直す契機になったと感じた。
11:30〜12:00 Richard Huang氏 "Use rails_best_practices to refactor your rails codes"
Ruby on Railsの慣例や基本的なパターンに沿ってない場所を検出してくれるツールについて。これを自動でやってしまおう、という考えが面白いと感じた。ただ会場からツッコミがあったのだが、「ベストプラクティスという割にはルールが多すぎる」という話もあり、これも興味深い議題だと感じた。ルールって少なく済むのであれば少ない方がいいと思うので。
昼休み
レンタサイクルで江古田まで足を伸ばし、Twitterで見て前から気になっていたすた丼を食べてきた。
13:30〜14:00 永井秀利氏 "ThreadGroupクラスの強化とその利用法"
複数のスレッドをまとめて扱う機構について。単に複数のスレッドを存在させるだけではなく、それらに親子関係(操作する側・される側)を持たせるという話があった。またスレッド内と外でクラスなどの定義を不干渉にするという話題もあり、それについては現在詳細を詰めているとのことであった。
14:20〜16:00 !RubyKaigi (NotRubyKaigi) 2011
メインの2つのホールとは別の会議室で、アンカンファレンス(発表内容が事前に決まっておらず、当日発表したい人が枠を取って発表する)方式で行われたイベント(参考:RubyKaigi2011 スペシャルレポート:日本Ruby会議2011 2日目レポート|gihyo.jp … 技術評論社)。最初は12席程度しか用意されていなかったが、その後人数が増えてきて大盛況になったため、椅子が増設された。
特に興味深かったのは、Webアプリホスティングサービス「fluxflex」開発時の話(最後しか聞けなかったけど)とか、関西に三者三様のRubyコミュニティが存在するといった話とか、Rubyのリフレクションの話(参考:5分で理解するRubyのリフレクション - 関西Ruby会議03)とか。
あと、自分の話した内容が(良い|悪い)意味で反響が大きかったようだった。「NotRubyKaigi」でぐぐると自分の発表が最初に出てしまうのです。
16:10〜16:40 赤井駿平氏 "Method Shelters : Classboxes でも Refinements でもない別のやり方"
この時間帯は、並行で実施されていた角谷氏のRubyコミュニティについての話とどちらを聴くか迷ったのだが、こちらが技術的に気になったので聴くことにした。
Rubyはメソッドの定義をいつでも、かつ完全に上書き可能であるという特徴があり(例:mathnをrequireすると、整数同士の割り算の意味が「端数切り捨て」から「分数として結果を返す」に完全に変わってしまう)、複数のライブラリを導入する際に競合を起こしてしまう可能性がある。それを回避するために、メソッドの再定義を「一部の領域のみに適用する」ということを行えないか、というのがテーマである。
これは技術的には「簡単な話ではないけど可能」ということで、実装に踏み込んだ解説がなされていたが、難しくてどこがポイントだったのかまで理解出来なかったのが残念だった。これは予習が必要だったかなあ。
16:40〜17:10 小崎資広氏 "CRubyのロックデザインの解説および改善案について"
マルチコアCPUでも力を発揮できるようなリソースのロック方法を開発するという話。ロックしたいスレッドに、単に順繰りにロックを許すだけでは上手くいかず、ロック時間の情報も組み合わせるという話があった。ただそれでも完全にパフォーマンスを向上させるというまでには至らない状態で話が締めくくられ、マルチスレッドの難しさを感じた。
17:20〜18:30 Lightening Talks
一人の持ち時間5分で、次々と話題が現れるコーナー。なおこのとき、@sak65536氏を発見したため合流した。
ということで、自分にとってインパクトが大きかったいくつかの発表について、概要や感想を素早く紹介させていただく。
  • 近永智之氏 "ruby trunk changes 統計版":Ruby本体に対して投稿された更新(コミット)について。「Rubyへのコミットが100人の村だったら。22人がバグ修正、11人が新機能の追加、20人がリファクタリング。この53人のうち3人はバグを作ってる。8人はWindowsのための修正。Windows対応は結構労力割かれてる。」
  • Paul McMahon氏 "Connecting Japanese Rubyists with the World":日本における外国人Rubyistのコミュニティについて。「今度、英語で行うRuby勉強会を開くよ!」という告知もあった。出てみたいけど東京なので残念ながら厳しいです。
  • ヽ(´・肉・`)ノ氏 "るりまを便利に使う方法":
  • こんどうようへい氏 "別の "ASP.NET MVC 3 vs. Ruby on Rails 3"":ASP.NET MVC 3について、Rails3よりも便利になっている機能を述べる一方、ASP.NET MVC 3ではまだ不十分な点や有料でないと利用できない機能を述べていた。ASP.NET MVC 3で導入されたテンプレートエンジン「Razor」は面白そうだった。
  • 関口亮一氏 "rubykaigi.orgを支える技術":rubykaigi.orgのサイト管理における技術的話題。ページを書くためのデータをYAMLにしたり、修正点があればgithub上でmergeするだけで出来るようにするなどの工夫がされているとのことだった。
  • 関将俊氏 "erbをすごく偲んで":erbの仕様拡張を行う際、将来の拡張を考慮せず場当たり的に機能拡張を行ってしまったことについて。具体的には「trim_mode」という引数について。
20:00〜22:00 懇親会
自転車で練馬→池袋を移動。サンシャイン60がなかなか見つからず迷った。結局1時間かかった。
400人規模という特大懇親会。だいたい@YaSuYuKi氏と一緒に回っていた。
それまでTwitterで話しているだけの方にも数名ご挨拶できた。@ymrl氏にご挨拶した際、「このまま眠りつづけて死ぬ」シールを頂いた。

3日目(7/18)

早朝は宿の周辺を散策してました。

11:00〜12:00 島田浩二氏・こしばとしあき氏・角谷信太郎氏 "All About RubyKaigi Ecosystem"
RubyKaigiやRegionalRubyKaigi(地域単位で行うRubyKaigi)がどのように成立していったのか、裏側でどのように作られていったのか、という話。
RubyKaigiの歴史としては、大規模化に伴う苦労などが語られていた。例えば2008年のRubyKaigiは東京ではなくつくばで開催されたのだが、これは大人数向けの会場を、あまりに早いうちに動かなくても確保できるから、とのことだった。
こしば氏は、Rubyコミュニティで活動しているうちに、自然といろいろな活動に関わっていくようになったこと、そしてそのときは「最初に踏み出すのは怖い。でも一歩踏み出せば何かが見える」と語っていた。
島田氏は、「RegionalRubyKaigiをやってよかったこととしては、"勉強会"だとちょっと…と思うけど"Ruby会議"というものだと行こうかな、という人を集められたというのがあるのでは」「RubyKaigiは、Rubyの地域別コミュニティを繋ぐ役割もある」と語っていた。
昼休み
近くのらーめん大 練馬店に行ってきた。某・東方曲アレンジに合わせ、細切れぶたを追加して食した。ちなみに麺は増やさなかった。昨年3月のラーメン二郎での悪夢があったので。
13:30〜14:00 柴田博志氏 "Ruby遺産とレガシーコード修理技術"
柴田氏が開発に携わっているtDiaryについて、tDiaryは日記ソフトであり、長期にわたって利用できることが重要であると述べていた。そして「25年間使われるソフトをメンテナンスする方法」「ソフトウェアを使い捨てにしないためには」と銘打ち、メンテナンス性の高いコードを維持することと、そのためのテストの利用について述べていた。その一つとして、tDiaryは内部構造が複雑で、作者しか分からないコードが多々あったことから、それを悪化させないためにやっていることとして、「使用していないコードは削除してしまう」ということを挙げていた。「ブログのトラックバック機能は今となってはあまり使われていないから、tDiaryからは削除した」ということもあったとのことだった。
また、複数のバージョンのRubyでテストを行うためにツールを利用する話や、「テストの遅さが原因で、開発に参加してもらえないことがあった」という話もされていた。オープンソースソフトウェアにおいて、テストコードはそのソフトを開発しやすくすること、そしてそれは開発者を呼び込むこと、という意識が示されていた。
14:00〜14:30 須藤功平氏 "テスティングフレームワークの作り方"
テスティングフレームワークを作ったときの話。テスティングフレームワークに限らず、勉強したい人にとって単にコードを見て勉強してもらうのは難しいため、「どのように考えて設計をしたか」という判断基準を主体に話す、とのことだった。
その判断基準として、「何でも出来るようなものは目指さない」「自分が自然に出来るものを考える」「どんな人が使うソフトなのかターゲットを絞る」などを述べられていた。
また、「RubyらしいAPI」にあるべきこととして、「別のフレームワーク上でも、普通のRubyのコードと字面や意味が違わないこと」と述べられていた。例えばRspecでは、「==」の意味が普通のRubyスクリプト中と異なっている(普通のRubyスクリプトでは「等価であるかどうかの結果を返す」という意味である一方、Rspec中では「等価であるというassertion」を意味する)のだが、それは好ましくないということであった。
14:40〜15:10 石塚圭樹氏 "分散オブジェクト環境DeepConnectの新バージョンについて"
ネットワーク越しなどにオブジェクトを共有するための環境「DeepConnect」について。この環境の外にある情報を得る方法(例えば通常「File.open」とするところを「deepspace::File.open」とすればよい、など)や、分散環境ゆえに引数の渡し方の選択肢を3種類用意してあること("参照渡し" "普通の値渡し" "deep copy")などが述べられていた。
15:10〜15:40 桑田誠氏 "O/R Mapperを支える技術"
なぜO/R Mapperを使うことがよいのか、という話が中心であった。簡単に言うと、「生SQLとO/R Mapper上のコードの関係は、アセンブラとそれより抽象化の進んだプログラム言語の関係である」ということであった。例えば生SQLでは、クエリの部分部分に事前に名前をつけておいて(=変数に格納して)後で組み合わせるといったことができない、すなわちクエリを抽象化して扱えないのであり、ここにO/R Mapperの意義がある、と述べられていた。
また、O/R MapperでWrapすることに意義のある例として、N+1問題というものを示されていた。
16:10〜17:10 Lightening Talks
2日目に続いて、3日目もLTがあった。こちらも、自分にとってインパクトが大きかったいくつかの発表のみ、概要や感想を素早く紹介させていただく。
  • 樽本徹也氏 "アジャイルUX公開実演 結果報告":勉強会の内容よりも(というと失礼ですが)、氏が提案されていた「広告費を支払って、勉強会の宣伝を別の勉強会で出来る制度」ってものが興味深く感じた。双方のコミュニティに利益があるやり方ということで。
  • 村田賢太氏 "浮動小数点数リテラルが無い世界":結論から言うと「小数点数リテラルを、浮動小数点数ではなく分数と扱うようにしませんか?」というもの。浮動小数点数は直感に反する挙動が多々ある(例:多くのコンピュータは2進数を使って数を表現しているため、浮動小数点数では、例えば10進数の「0.1」を正確に表現することは出来ない。浮動小数点数には桁数制限がある一方、10進数の「0.1」は2進数では「0.000110011…」という無限循環小数になるため)。ここで分数クラス自体はRubyですでに提供されているものの、氏はそこから踏み込んで、小数点数リテラルを最初から分数と扱えばよいのではないかと提案されていた。
  • 吉田裕美氏 "新人教育に、もっとRubyを!":新人教育にRubyを使う効果を述べられていた。Rubyを使う利点として、最初のサンプル(Hello Worldとか)がシンプルであること、またオブジェクトの振る舞いが規則的であるということを示されていた。また教えるにあたっては、定型のベストプラクティスよりも教える人の体験を大事にすべき、と述べられていた。
  • 三村益隆(takkanm)氏 "コミュニティと勉強会の間で":「コミュニティ(asakusa.rb)」と「勉強会(Rails勉強会@東京)」の違い。asakusa.rbは「ファウンダーが強い」「続けるために頑張らない」、Rails勉強会@東京は「やり方だけ決まっている」「話題本位、人の差も大きい」という意識とのことであった。
  • とみたまさひろ(tmtms)氏 "MmapScanner作ってみた":「大きいファイルから、一定のパターンを順次抜き出す」という場合、StringScannerで行うには一度大きいファイルをRAM上に読み込まないとならない。これをmmap(ファイルを読み込む際、全てRAMに読み出さないにもかかわらず、そのファイルを1つのメモリ領域であるかのように扱う)の上で動くようにしたものである。
  • 郡司啓氏 "C、イ繊":卜部昌平氏のブログ「どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。」に対して、RubyistがC言語を使う利点として「コンピュータへの理解が深まる」「すごい人(言うなれば、CRubyコミッタ)との繋がりができる」「様々な大きなものがC言語で書かれているので勉強になる」ということを挙げられていた。
17:20〜18:30 まつもとゆきひろ氏 "三題噺: 振子とPGと百年の言語"
最後の締めの、Rubyの生みの親・まつもとゆきひろ氏による講演。以下に私が実況したTweetを載せておきます。適宜補足を加えます。
  • 17:27:18: #RubyKaigi まもなく、まつもとゆきひろ氏の講演開始
  • 17:35:43: #RubyKaigi 肩書きがどんどん増えたMatz。そして松江市の名誉市民にも。
  • 17:38:31: #RubyKaigi Matz, Herokuの一員に!
    • Heroku:Ruby on Railsアプリを設置できるホスティングサービス
  • 17:40:26: #RubyKaigi 最近肩書きが増えまくってるMatzの一言「まつもと先生の次の肩書きにご期待下さい」
  • 17:43:21: #RubyKaigi BDD ×Behavior Driven Development ○Beer Driven Development
  • 17:44:47: #RubyKaigi 日本語力も英語力もある人=Aaron
  • 17:49:43: #RubyKaigi Matz「日本人は "プログラミング言語" への注目が高い。Lightweight Languageのイベントがあったりする。アメリカでは3年で消えた。言語実装本が多い。日本語プログラミング言語とかもある。」
  • 17:53:29: #RubyKaigi Matz「蠱毒の国ニッポン。言語障壁で囲まれていて、その中で壮絶な戦いが行われ、勝ったものが生き残る」
    • 参考:蠱毒 - Wikipedia
    • 「蠱毒」の話は聞いたことはあったが、これは興味深いと感じた。
  • 17:57:35: #RubyKaigi Matz「世の中は振り子のように動いている一方で、それとは別な大局的な動きが存在する。その大局的な動きを見つけよ」
  • 17:58:54: #RubyKaigi PGとは:×Programmer ○Programming Gengo ○Paul Graham
  • 18:07:50: #RubyKaigi MatzがPaul Grahamに同意できない点:マクロ、コンセプト最小化。これは自然言語の考え方に反する。
    • Rubyが、1つのことを実現する方法を複数設けるなど、自然言語的な考え方を重視していることに触れて。Paul Graham氏は有名なLispプログラマー。
  • 18:10:53: #RubyKaigi Matz「Rubyについて、自分の後継者募集。ライバル募集。ただしライバルは全力で潰す」
  • 18:11:19: #RubyKaigi メモ:Matzは大人げない [HT-01A]
  • 18:13:38: #RubyKaigi Matzがsora_hの「持ち時間の半分で終わったからもう一度話す」宣言をパクったw
    • 上記1日目の発表についてを参照。
  • 18:19:16: #RubyKaigi 長い年月を経れば、Rubyが変わっていくことも考えられるが、どの程度ならば「Ruby」と呼べるのか、という議論
    • このあたりから、Rubyがこの先長く続くには、という話。
  • 18:20:18: #RubyKaigi 「Rubygems = Soulgems」の関係がMatz公認になりました
    • 詳しい流れを忘れてしまったのですが、確か「Rubyのコアが変わったり、異なるRuby処理系であっても、Rubygemsが使え続けるのならそれはどれもRubyだよね」って話だった気がします。
  • 18:23:42: RT @sora_h: おれがおまえをつぶす(棒 #kaigi1 #rubykaigi
    • これは確か、Matzが壇上でsora_h氏を煽るような(もちろんネタとして)発言をしたためだったと思います。
  • 18:26:48: #RubyKaigi 我が子(Ruby)の年齢を忘れるMatz、それを指摘するelimさん
  • 18:30:47: さっき自分がtsudaった「Rubygems = Soulgems」tweet、RTされすぎ('A`)

全体として

今年は、3年前にRubyKaigiに参加したとき以上にRubyを使い込んでいたこともあり、多くのトピックを興味深く聞くことができた。

ただ一つ言うならば、「最後のRubyKaigiだから」という意識を持って聴講することができなかったのは残念だった。2トラック並行開催だったけど、コミュニティ活動よりも技術的な話を優先して聴講したりしてたし。

でも、RubyKaigiがなくなったからと言って日本のRubyコミュニティが弱るということはなさそうだ、とは感じられた。日本各地、多様なRubyist/Rubyコミュニティが頑張ってるのを見られたので。あと!RubyKaigi(NotRubyKaigi)で発表できた(上記「2日目」参照)のはいい思い出になった。ある意味注目された(されてしまった)ので。