RubyConf 2016 参加レポート

書いた人: @mtsmfm

RubyConf 2016 参加レポート

はじめに

RubyConf 2016 が 2016 年 11 月 10 日から 12 日にかけ、アメリカのオハイオ州シンシナティで開催されました。 RubyConf とは、2001 年からアメリカで毎年開催されている国際的な Ruby カンファレンスです。

本編以外に関連イベントにも参加してきたのでそちらも合わせてレポートします。

Keynote 以外は 4 トラック並列の構成で、3 日間で合計 60 以上もの発表があり、どの発表を聞きにいくか迷うことも多々ありました。

動画はConfreaksで公開されています。 とても全ては紹介しきれないので、気になる方は Confreaks をご覧ください。

1 日目

convention-center.jpg

会場の Duke Energy Convention Center 外観。 board.jpg

中に入ると案内ボードがありました。

RINSWAN (Keynote) @matz

matz.jpg

RubyConf 2016 はまつもとさんによる基調講演で始まりました。 Ruby が生まれてからの発展と Ruby 3 に向けての話をされました。 Ruby 3 での軸の 1 つである型の構想について、2 ヶ月前に行われた RubyKaigi 2016 では「Soft typing」という名称が用いられていましたが、質疑応答で既存の用語として存在していることが指摘されていました。 これについて今回「Duck inference」という名称が与えられました。 (私が把握していなかっただけで後に聞いたところ初出は EuRuKo 2016 とのことでしたが)

動画

Building a Better OpenStruct @amcaplan

OpenStruct の高速な実装についての話でした。 OpenStruct の実装が特異クラスに都度 setter/getter を定義しているからその分普通のクラスと比べて遅いので、クラスの方に定義するような gem を作ってみる、というように実験と計測を繰り返して徐々に早くしていく、まさに「推測するな、計測せよ」を体現した発表でした。

動画

スライド

Just a Ruby Minute

just-a-ruby-minute.jpg

Just a Minute というイギリスで半世紀以上続いているゲームショーがあるそうで、これの RubyConf 版ということのようです。 特定の話題に対して 1 分間「話途中でためらわず」「同じ単語を繰り返さず」「話題から逸れることなく」話し続けるゲームです。

ルールの説明をしてもよくわからないと思うので、こちらについてはとにかく動画を見てみることをオススメします。

動画

Evaluate Ruby Without Ruby @k0kubun

k0kubun.jpg

CRuby で書かれた itamae をシングルバイナリにするために go-mruby による実装 (itamae-go) や mruby-cli による実装 (mitamae) をし、それぞれで Ruby DSL を実行しようとするとどうなるかの比較をされていました。 Go を使う必要性がない場合だと mruby-cli がオススメとのことでした。

動画

スライド

Improving Coverage Analysis @zenspider

Ruby 標準の Coverage や SimpleCov では明にテストを書いていないところまでカバレッジとしてカウントされてしまうので、意図してテストが書かれているところだけがカウントされるように minitest-coverage を作っているという話でした。

動画

スライド

Computer Science: The Good Parts (Keynote) @JeffCohen

コンピュータサイエンス初心者に向けた話で、データ構造や計算量について、図や Ruby コードを用いて説明していました。

動画

スライド

2 日目

RubyConf 2016 5K

2 日目の朝には自由参加で RubyConf 2016 5K というイベントがありました。 これは、みんなで (おおよそ) 5K 走ろうというイベントで、RubyConf では 2010 年からおおむね毎年行われているようです。 RubyKaigi 2016 でも行われていました。

RubyKaigi 2016 で 5K を知り、せっかくなので参加しようと飛び込んでみましたが、みなさん結構速い……。 5k.jpg

私は朝焼けのオハイオ川を眺めながらのんびり自分のペースで走っていました。 5k-sun.jpg

なんとタイムが測られており、私は 31 分だったようです。

集合写真

You Have the Empathy of a Goat: Documenting for the User (Keynote) @wisetara

ユーザーへのマニュアル、ミーティングの資料、ユーザーストーリー、コミットメッセージなど いろいろな側面でのドキュメントの大切さを説く話でした。 OSS にしても使ってもらうためにはドキュメントは大事という話もあり、 自分の書いた gem でも README が bundle gem してほぼそのままだったりするのを思い出していました。

動画

スライド

From no OSS experience to the core team in 15 minutes a day @indirect

毎日 15 分で OSS のコアチームへ、というタイトルでしたが、前半の 「なぜあなたは OSS をしたいと思うのか」 「GitHub は履歴書じゃない」 「OSS ではなくサイドプロジェクトでお金を稼ぐのも同じくらいクールだ」 という問い掛けが非常に考えさせられました。

動画

スライド

Surgically Refactoring Ruby with Suture @searls

Suture というリファクタリングツールを作ったという話でした。 RubyKaigi2016 でも話されており、 求めているリファクタリングツールがないから Talk Driven で作ったという腕力もさすがながら、 開催場所に合わせた導入の流れ、構成など楽しい発表でした。

動画

Test Doubles are Not To Be Mocked @noelrappin

テストスパイの活用の話でした。スパイによるテストと本物を使ったテストがあることによって、 どちらか片方のテストだけが失敗するようになった場合にどこが間違っているかの見当がつきやすくなるとのことでした。 「何が起きるとテストが落ちるかを考えてみよう」というキーワードが印象に残っています。

動画

スライド

Ruby 3 Concurrency @ko1

Test Doubles are Not To Be Mocked の裏では、RubyKaigi2016 でも話されていた Ruby 3 における並列プログラミングモデル (Guild) の発表がされていました。

動画

スライド

LIGHTNING TALKS

2 日目の午前中に LT 参加ボードが置かれていて、希望者が名前を書き込んで参加する形でした。 1 時間半で 25 人の方が発表されていました。 一番最初にスライドなしで飛び込んで自由に喋るような枠もあり、日本の LT 大会とはまた違った雰囲気でおもしろかったです。 yurie.jpg remore.jpg

日本人参加者からは @yurie さんが Sessalet について、 @remore さんが julializer について発表されていました。 samphippen.jpg

私が特に印象に残っているのは @samphippen さんの OSS 開発の協力を求める LT で、 「大変だし仕事もあるし常に賞賛されるわけでもないし gem のダウンロード数を見ると恐くなるが、 このコミュニティが好きだからここでこういう発表をしている」という話が午前中の @indirect さんの話も相俟って刺さりました。

動画

Rails Tutorial Beerware Night at RubyConf

2 日目の夜には Rails Tutorial Beerware Night at RubyConf というイベントがありました。

Rails Tutorial 上のソースコードは MIT ライセンスと Beerware ライセンス で提供されています。 Beerware ライセンスとは、「いつか会ったらビールをおごってね」というライセンスです。 このイベントは、Rails Tutorial の著者である Michael Hartl さんに Beerware ライセンスの下ビールをおごったり、 RubyConf の参加者同士飲んだり喋ったりするイベントです。

私は Rails Tutorial で 3.2 対応の翻訳のお手伝いをさせていただくなど、大変お世話になっていたため、 直接感謝の気持ちを伝えることができて非常に嬉しかったです。

是非ビールもおごりたかったのですが残念ながらおごりたい人がたくさんいて、おごることができなかったのは心残りです。

3 日目

Ruby versus the Titans of FP (Keynote) @lambdatastic

高層関数やカリー化、関数合成などについて、Ruby と他の言語とを比較した発表でした。 特に関数合成について Ruby のコア機能だけだと手間がかかるので Reductio.rb という gem を作ったそうです。

動画

スライド

Methods of Memory Management in MRI @tenderlove

tenderlove.jpg

MRI における GC の実装についての説明と、github/ruby で 実験中の Ruby のヒープの改善についての話でした。 Ruby の各バージョンで GC が改善されていることについて私はなんとなくしか把握していなかったのですが、 それぞれのアルゴリズムの図によるわかりやすい説明と、抱えていた問題とそれに対する対策について理解を深めることができました。

動画

スライド

Optimizing ruby core @shyouhei

shyouhei.jpg

Deoptimization というテクニックによって Ruby を速くするという話で、 RubyKaigi2016 でも話されていました。 ベンチマークの中で最も高速化されたケースでは 100 倍以上速くなったということでした。 実際のパッチについては https://github.com/ruby/ruby/pull/1419 から確認することができます。

動画

スライド

That Works?! Quines and Other Delightfully Useless Programs @justcolin

Quine についての話で、基礎の説明や実際に作った Quine かつ AI まで組み込んだチェスゲーム、 lambda_chess のデモをしていました。 更に学ぶには、という項目として @mame さんの YouTube の動画や GitHub リポジトリが挙げられていました。

動画

スライド

Matz Q&A

最後は Matz Q&A と題して @matz さんと @evanphx さんとの 対談や参加者からの質問会でした。 初日に話された Ruby 3 における型チェックについての質問や、mruby の話、後方互換性を気にしないなら捨てたい機能についてなど 多岐に渡る質問がされていました。 matz-qa.jpg

動画

おわりに

私にとってこの RubyConf は初の海外カンファレンスだったのですが、 参加してみてどこか違った空気感を感じました。 例えば発表が早めに終わって、発表者が壇上から降りておもむろにステッカーやチョコを配り出して、 わっと参加者が集まって「発表よかったよ!」とだけ告げて去っていくところなど、あまりうまく表現できないのですが、どこかオープンと言うのか、私が今まで参加したカンファレンスとは違った雰囲気に思います。

私はよく「発表者となんか話すならうまいこと言わなきゃ」と思っていろいろ躊躇してしまうのですが、 よかったと思ったなら「よかったよ、発表ありがとう!」のそれだけでもちゃんと伝えることが大事で、あたり前のはずですが私はあまり今までできていなかったと感じました。

今回の RubyConf は、私にとってインターネットでしか知らなかった人に直接「ありがとう」と伝えられた素敵な機会でした。 私の初アメリカ入りを助けてくださった方々、特に引率してくださった角谷さん、素晴らしい発表者、参加者、運営者の方々、 そしてカンファレンスに参加するための費用を負担してくれた会社、永和システムマネジメントには本当に感謝しています。 ありがとうございました!

著者について

松島 史秋 (@mtsmfm)

Ruby と麻雀が好き。西日暮里.rb 主催。 永和システムマネジメント勤務。