RubyKaigi 2015に行ってきました

2015-12-24 イベント

先日行われたRubyKaigi 2015に行ってきました!
既に1週間以上経っていて今更感が漂いますが、自分の備忘録も兼ねて、纏めておこうと思います。
なお、スライドを大量に埋め込んでて重いかもしれませんのでご了承ください。

築地付近の会場で行われただけあって公式サイトも寿司にあふれていますが、当日の看板も寿司でした。

ノベルティのTシャツも寿司。

さらには、江戸銀の板前さんがやってきてリアル寿司をいただけるイベントもありました。

DSC_0613

…あれ、これ何のイベントだっけ。
一応確認しておくと、RubyKaigiはオブジェクト指向言語Rubyの準国際カンファレンスです。
そうか、国際カンファレンスなんだから、海外から来ている人に日本の伝統食である寿司を食べてもらうのは順当な流れですね!(錯乱)

気を取り直して、各社のノベルティも沢山いただきました。

重ならないように頑張って配置してから写真を撮ったのですが、凄いステッカーの数です…
これ以外にも現地で飲んでしまったペットボトルの水とか、おみくじ付きのパイン飴とか、ノートPCに貼ってしまったステッカーとかもある上、そもそも売り切れで手に入らなかったステッカーもあったことを考えると、かなりの数の会社がRubyKaigiという場に集まっているんだなぁと感じました。
それはそうとpixivさんのクリアフォルダ、ステッカーを綴じておくのにも良し、鑑賞するにも良し、と非常に気合入ってます。

スポンサー一覧も結構な企業数です。
色んな方のサインもここに書かれていました。

もちろん、Misocaもスポンサーに入ってますよ!
…Additionalですがw

書籍の販売は初日のみだったのですが、いくつかサイン会があったため、自分も3冊買ってサインを頂いてきました。

メタプログラミングRuby 第2版には著者のPaolo Perrottaさん、訳者の角征典さんに加え、帯を書いているからということでまつもとゆきひろさんにもサインを頂きました。
超豪華!
Paoloさんは宛名も書いてくださるということだったので、迷わず「黒曜」でお願いしてしまいましたw
イラストも書いてくださったんですが、これはいくつかレパートリーがあるみたいで、自分はGhost MethodなGhostでした。
これと同じノリでPhantom TypeなPhantomとか誰か描きませんかね。

APIデザインケーススタディには著者の田中哲さんのサイン。
超シンプルです。

あなたの知らない超絶技巧プログラミングの世界には遠藤侑介さんのサイン。
サイン自体がQuineになっているという手の込みよう。
さすがの超絶技巧…

ちなみに当初はAPIデザインケーススタディ以外買う予定はなかったのですが、Ruby歴半年でまだメタプログラミングRubyを持っていなかったのでこれ幸いと購入、さらに超絶技巧プログラミングをパラパラ見ていたら「パガニーニによる超絶技巧練習Quine」というピアノ弾きとしては気になりすぎる節があって衝動買いしてしまいました。
完全にお財布の中身を持って行かれてます…
サインしてもらえる本以外にも色々な本が売られていて、圏論の歩き方が非常に気になったのですが、ここで買うと荷物が増えるし、サインもらえないなら帰ってから買っても一緒だし、そもそも会社の本棚にあるし…と自制しました。

さて、ここまでだと遊びに行っただけみたいなので、発表の内容についてもまとめていきたいと思います。
とはいえTogetterのRubyKaigiまとめまとめに自分がtsudaった内容がだいぶ含まれてますし、そもそも公式サイトのスケジュールから録画映像も見られるんですが、ざっくりした要点と感想をまとめていきたいと思います。

初日

Matzのkey note

Togetterのまとめ

しょっぱなはMatzのkeynoteから。
怒りはモチベーションになるけど伝染するので表に出してはいけない、という話とか、MINASWANの話とか、なかなか興味深かったです。
とはいえ、やはり一番気になったのはRuby3の話。

3倍早くするってシャアかよ!
Rubyは元から赤いだろ!

…というツッコミを入れたくなりましたが、実際Rubyが3倍早くなったらCPU Boundであろう数値計算などの分野でRubyが使われることが増えるのではないかと思います。
Webでは大体IO boundでしょうが、それでもテンプレートエンジンあたりは文字列処理のコストが大きそうですし、恩恵があるかもしれないですね。

Compiling Ruby scripts

Togetterまとめ

お寿司の振る舞われたお昼休みを挟んで、@ko1さんのCompiling Ruby scripts。
いわゆるAOTコンパイラの話でしたが、コンパイルタイミングやファイルの配置を柔軟にするために低レベルAPIを提供している、という話は興味深かったです。
この手法で3倍早くなったりしないかな…w

Saving people from typos

Togetterまとめ

ここからはA会場とB会場で平行してセッションが行われました。
自分はB会場に移動して@yuki24さんのSaving people from typosを聴講。
今気づいたけど、B会場は録画映像ないんですね…!

ざっくりまとめるとtypoがあった場合に「もしかして」を指摘してくれるgemを作ったら、Ruby2.3に取り込まれたという話。
内部実装の話もあって、単純に打ち間違えたmistypedと、綴りをそもそも間違えているmisspeltを概念として区別して、それぞれ別の距離で推測しているというのは興味深かったです。
前者は一般的なレーベンシュタイン距離、後者はJaro Winkler距離を使っているとのこと。
Jaro Winklen距離は初耳だったので勉強になりました。

比較に用いる辞書は、基本的にSymbolを舐めて作っているものの、それだけだと辞書が大きくなりすぎるため、Method・Constantなどで分類して辞書を作っているとのこと。
Method呼び出しではその文脈でそのオブジェクトから呼び出せるメソッドのみから推測するらしく、この辺りは合理的であるとともに動的言語の特性が上手く活きているなーと感心しました。
一方で変数の間違いについては、インスタンス変数とクラス変数の取り違えなどもありうるのでその辺も候補に入れているということで、かなり辞書が膨らみそうな雰囲気を感じました。

どうでもいいんですが、タイトルをSaving people from typesに見間違えて「さすが動的型チェック言語のカンファレンス… 型で救うのではなく型から救うのか…」と勝手に世紀末を感じてました。
そもそもRubyにも型はありますしね。

Time flies like an arrow; Fruit flies like a banana: Parsers for Great Good

続けてもB会場で、@SoManyHsさんのTime flies like an arrow; Fruit flies like a banana: Parsers for Great Good。
タイトルが長いですが、Time flies like an arrow; fruit flies like a bananaは何通りかに解釈できる文の典型例ですね。
fliesの解釈がポイントで、前者はfliesを動詞として「時は矢のように過ぎ去る(光陰矢のごとし)」、後者はfliesを名詞(ハエ)として「ミバエ(fuits flies)はバナナを好む」とするのが人間的な解釈です。
…が、構文的には前者で「時間ハエは矢を好む」とか「Time誌は矢のように飛ぶ」と解釈することもできますし、後者を「果物はバナナのように飛ぶ」と解釈することもできます。
つまるところ、人間の言語の構文は曖昧な部分を含んでいるわけですね。

というお話を枕に、コンピュータがどのようにプログラムを解釈するのか、構文解析がどのように行われるのかを解説するというセッションでした。
LL(1)LR(1)の動作原理について図を交えて解説した後、チョムスキー階層についても触れるなど、英語ながら非常に分かりやすく聴きやすかったです。

Fast Metaprogramming with Truffle

Togetterまとめ

休憩を挟んでA会場に移動し、@nirvdrumさんのFast Metaprogramming with Truffle。
正直英語な上にJRubyもTruffleも触ってないのでそこまで深く理解できたわけではないのですが、「メタプログラミングでプログラマが書きやすい環境を作ると、実行効率が犠牲になる。そこでTruffleを使うと効率も極力犠牲にしないで済む」みたいな話だった気がします。

余談ですが、この裏番組のDIY (Do-it-Yourself) Testingをタイトルで気になりつつ切ったものの、やっぱり面白そうだったので聞きに行ってもよかったなーという気分になっていました。

High Performance Template Engine: Guide to optimize your Ruby code

Togetterまとめ

続けてA会場、@eagletmtさんと@k0kubunさんのHigh Performance Template Engine: Guide to optimize your Ruby code。
FamlHamlitという2つの高速なテンプレートエンジンについての話でした。
ちなみに両方ともCookpadの内製とのことで、「2つも作るなら1つに注力すればよかったのでは…?」という当然の疑問が質疑応答でされていました。
経緯としては「Famlが作られる→触発されて勉強がてらHamlitを作る→どうせなら最速を目指したい」みたいな流れだったそうです。

これまた余談ですが、裏番組でCrystalの話があり気になっていたので、今度Crystalを触ってみようかと思います。
さらに余談ですが、PerlだのRubyだのCrystalだのと宝石の名を関した言語が多いので自分もObsidian(黒曜石)という言語を作ってみたいなぁと思ったのですが、GPU向け組み込み言語で既に存在していたのでがっかりしています。
しかもHaskellかよ。

TRICK 2015: The second Transcendental Ruby Imbroglio Contest for RubyKaigi