RubyKaigi 2015に行ってきました

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

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

DSC_0622

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

DSC_0610

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

DSC_0613DSC_0614

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

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

DSC_0653

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

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

DSC_0624

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

DSC_0625

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

DSC_0649

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

DSC_0651

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

DSC_0652

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

DSC_0650

ちなみに当初は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

Togetterまとめ

初日のラストセッションはTRICK 2015の表彰式。
IOCCCのRuby版みたいなやつなんですが、とりあえずカオスでした。とりあえずカオスでした。
多くは語りませんが、個人的にはワンライナーのSATソルバーというのが頭おかしすぎて最高でした。

ここまでで初日のセッションが終わりです。
振り返っても濃いなぁ…

2日目

Keynote

Togetterまとめ

2日目最初は@kosakiさんからのkeynote。
RubyとLinux両方のコミッターということで、Rubyの都合でLinuxの仕様を変えてしまった話や、パッチはテトリスのごとく仕様の隙間を埋めながら積み上げていくという話は大変面白かったです。
あと黒Matzの話も大変面白かったですw
デバッグツールの使い方は… 正直あまり得意じゃない分野なので頑張らないとな―という気分になりました。

The history of testing framework in Ruby

Togetterまとめ

続けてA会場、@ktouさんのThe history of testing framework in Ruby。
Rubyにバンドルされているテスティングフレームワークの話だったんですが、なかなか壮絶な歴史でした。
いわゆる歴史的経緯って、どこにでもあるもんですねぇ…(遠い目

それはそうと、2日目はA会場でも録画があまり残ってないっぽく残念です。
さらに余談ですが、B会場のCharming Robotsはドローンが飛んだだの事故を起こしただの面白そうな話がてんこ盛りだったので、こちらの動画が残ってないのが本当に残念です。

Turbo Rails with Rust


Togetterまとめ

午前ラストもA会場、@wycatsさんのTurbo Rails with Rust。
ざっくりまとめると、ローレイヤーをRustで書いてからCに変換して、Native Extensionとして利用することで、保守性と速度を両立できるって話っぽかったです。
またtrbファイルとしてRubyの中にRustを埋め込むこともできる、とのこと。
割とシームレスで実用的な雰囲気を感じました。
…英語かつRustの知識が不足していたので、若干理解が怪しいですが。

The worst Ruby codes I’ve seen in my life

Togetterまとめ

午後の最初は@ProdisさんのThe worst Ruby codes I’ve seen in my life。
タイトルからして最高感が漂っています。
そして実際、最高でした。

どしょっぱなからWOP(Workaround Oriented Programming, 場当たり指向プログラミング)という単語を定義した時点で会場爆笑。
スライドをめくってプログラムを見せて「ah… uhh… why?」みたいなことをいうだけで会場が大爆笑するという謎の光景。
まぁスライドを見てもらえば分かるんですが、可変文字列に対して操作してしまう関数、深いネスト、何が違うのかわからない2つのメソッド名、最早何をcheckしているのかわからないcheck_existing関数など、アンチパターンのオンパレードでした。
素晴らしいのは、それを笑い話にするだけではなく、きちんと教訓としていること。

どれも聞いたことのある言葉ですが、悲惨なコードを見た後だからこそ、これらの重みを感じることができた気がします。
個人的にはRubyKaigiのセッションの中で一番記憶に残る発表でした。

…まぁ、これ以上の酷いクラスを見たことがある気がしましたが、それはそれとして。

The future of Ruby is in motion!

Togetterまとめ

慌ただしくA会場に移動して、@lrzさんのThe future of Ruby is in motion!。
各種プラットフォームのアプリをRubyで書けるRubyMotionの話でした。
発表者がRubyMotionのLead Developerなので、まさにステマ!
とりあえずライブコーディングでFlappy Sushiができていく様が爆笑モノだったのと、AndroidとiOSのアプリを1つのコードからクロスコンパイルする機能が入るということで、なかなか良さそうな雰囲気でした。
ただRubyでその辺試す前に、VisualStudio+Xamarin+F#でのアプリ開発を試したい気がしている…(といいつつ何年か経ってる気がする)

Ruby meets Go

Togetterまとめ

更にA会場、@_mmasakiさんのRuby meets Go。
Rustの話と同様、GoからCのshared libraryを吐き出してRubyから使う話。
ただこちらは色々と手間がかかる部分が多く、発展途上というか実験段階という印象でした。
…個人的にGo言語をあまり好きじゃないので、評価が辛くなっている部分があるかもしれません。

Rhebok, High Performance Rack Handler

Togetterまとめ

休憩を挟んでからB会場、@kazeburoさんのRhebok, High Performance Rack Handler。
Unicornより2倍くらい速いRhebokというRack Handlerを作った話でした。
高速化のためのパーツであるprefork_engineとかpicohttpparserをほぼ自前で作っちゃうなどすごい話が多かったのです。
またRack自体の仕様の話も勉強になりました。

ただRackのコストが影響するほど他を最適化してないと効果が薄い、って話からすると、よほどパフォーマンスチューニングを重視しないかぎりUnicornでも十分なのかなーという感じはありました。
選択肢としては抑えつつ、自分で実用するのはまだちょっと怖いかな―という印象。

Pragmatic Testing of Ruby Core

Togetterまとめ

続けてB会場、@hsbtさんのPragmatic Testing of Ruby Core。
Ruby自体のテストがどうなってるか、という話でした。

普通はgit cloneしてから.travis.ymlを読んでbefore scriptとscriptを順番に実行するとテストできるけど、Rubyは書いてあるコードが多すぎて心が折れるので、とりあえずautoconf, ./configure –disable-install-doc, make -j, make checkしろ、とのこと。
ディレクトリ構成の話もされていて、とりあえずテストを流して気になるテストを覗ける程度の知識を付けられる、良い発表だったと思います。

Lightning Talks

Togetterまとめ

2日目ラストはLightning Talks。
とりあえず見つけられたスライドだけ纏めてみました。
唯一、Padrino Travel Guideだけはニコナレに上げられているのですが、埋め込みタグ発行機能がないっぽかったのでリンクのみ張っておきます。
ニコナレ、心情的には割と応援してるので埋め込みタグ機能よろしくお願いします!

だいぶ記憶が曖昧なものもあるので、気になったものだけ。
Update Early, Update Oftenはとにかくバージョンアップしろ、自動化すると捗るぞみたいな話で、バージョンアップのとにかく速いRuby界隈では非常によい習慣という感じでした。
スライドが見つけられなかったのですがWhat I learned by implementing a Ruby VM in ErlangはErlangでRuby VMを書こうとしてる話っぽく、非常に気になる話でした。Githubリポジトリが見つけられないのでどういうステータスかわからないのが気になりますが…

そんな感じで2日目が終わりました。
ちなみにこの後はOfficial Partyだったのですが、Ruby界隈新参者なので会社の絡みで紹介していただいた方と話した以外は、隅っこのほうでちっちゃくなってました。
人見知りで自分から話しかけられないので、次のRubyKaigiのときには適当にうろついて話し相手を見つけられる程度に知り合いを増やしておきたい感はあります…
もしくは、突っ立ってたら話しかけてもらえるようになるか、ですね。

3日目

Ruby Committers vs the World

Togetterまとめ

最終日、最初のセッションはRuby Committers vs the World。
Rubyコミッターがわらわら壇上に上がって、色々な質問に答える、みたいなセッション。
Matzが2日目の夕方くらいに松江へ帰ってしまったためいなかったのがちょっと残念でした。
面白い話は色々あったんですが、トピックが発散しててまとめられる感じではないので割愛。

Writing web application in Ruby

Togetterまとめ

@youchanさんのWriting web application in Ruby。
なお、この文脈でのweb applicationとはフロントエンドも含みます。
というわけで、基本的にはReact.jsみたいなことをRubyで書けるようにしたHyaliteの紹介。
内部的にはOpalというRubyで書いたコードをJavascriptに変換できるgemを使っているとのこと。
どうでもいいけど鉱石名、そろそろネタ切れするんでないかい?

とりあえず、1つの言語でフロントからバックエンドまでカバーしようという話は結構好きだったりします。
Ocsigenとか。
フロントとサーバーでどこまでフレームワークとして統合されていくのか、ちょっと追い駆けたいトピックですね。

Refinements – the Worst Feature You Ever Loved

Togetterまとめ

昼休憩明け、@nuscoさんのRefinements – the Worst Feature You Ever Loved。
動的にクラスを拡張する際、そのスコープを限定するRefinementsについての功罪の話。
ざっくりまとめると、dynamic scopeにすると便利だけど色々困ることも出てくるから、機能的には限定されるけどstatic scopeにしたよ、という感じの話でした。
構文から決定できないとメソッド呼び出しでキャッシュが効かなくてパフォーマンスの問題が出る、という話はなるほどなーという感じだった。

Discussion on Thread between version 1.8.6 and 2.2.3

Togetterまとめ

続けてB会場、@emorimaさんのDiscussion on Thread between version 1.8.6 and 2.2.3。
スレッドを一杯立てたら、Ruby1.8よりRuby2.2のほうがパフォーマンスが悪くなってなんでだろう? みたいな話でした。
原因究明のくだりとか面白かったんですが、Rubyでスレッドはなかなか使わないよなーという気分でした。

Plugin-based software design with Ruby and RubyGems

Togetterまとめ

A会場に移動して、@frsyukiさんのPlugin-based software design with Ruby and RubyGems。
Plugin Baseの基本的な構成について話した後に、ElasticsearchEmbulkという2つの実例について詳細な構成を説明する、という流れで非常にためになる内容でした。

Let’s make a functional language!


Togetterまとめ

最後の休憩を挟んで、B会場で@yharaさんのLet’s make a functional language!。
型システム入門 の流れを、丁寧にRubyを使ってなぞるような感じでした。

Actor, Thread and me


Togetterまとめ

A会場に移動して、@m_sekiさんのActor, Thread and me。
おそMatzさんが出てくるいい話でした。
…という冗談はさておき、Actorモデルの原理をイラストを交えて分かりやすく解説したうえで、ActorモデルはThreadの代替ではないよ、むしろThreadと協調したほうが上手くActorが働くんじゃないかな、みたいな話でした。
この手の議論は毎回そうなんですが、銀の弾丸はそうそう簡単に現れないので、新しい概念を噛み砕いた上で適切に使い分けるというのが大事な気がしますね。

Keynote

Togetterまとめ

ラストセッションは@evanphxのKeynote。
いかにしてRuby3で3倍早くするか、みたいな話が中心で、LLVMレイヤーでの最適化という案がこの場で出てきたというのがすごかったです。
が、ごく正直にいって3日間ひたすら発表を聞きまくり+最後の最後に英語のセッションで、頭が回っておらず半分も理解できていなかった感が否めませんでした。

Closing

Togetterまとめ

そんなわけで全セッション終了したのですが、最後の最後でRubyKaigi2016に関する発表が色々されて大盛り上がりでした。
今公式サイト見ると、まだテキストだけで非常に寂しい感じですねw

まとめ

まとめてみると思った以上にボリュームが多く、濃い3日間だったなぁというのを改めて実感しました。
ちなみに、夕方くらいから作業を始めて、今が午前3時です…
当日も後半に行くほど集中力が落ちてましたが、この記事も後半にいくほどスライドに対するコメントが雑になっていますが、文章を書くのに若干疲れてきたからというのを察していただければと思います…

次回のRubyKaigi2016は7月に京都ということで、今から楽しみです。
次はできればLTくらいはしたいなーという気分になっているので、今からネタを仕込んでいきたいですね。
来年はぜひ、京都のRubyKaigiで僕と握手!

2 Comments

  1. It seems that wrong slide is embedded at section of “Time flies like an arrow; Fruit flies like a banana: Parsers for Great Good”.

コメントを残す

Your email address will not be published.