書いた人: @mtsmfm
RubyConf 2016 が 2016 年 11 月 10 日から 12 日にかけ、アメリカのオハイオ州シンシナティで開催されました。 RubyConf とは、2001 年からアメリカで毎年開催されている国際的な Ruby カンファレンスです。
本編以外に関連イベントにも参加してきたのでそちらも合わせてレポートします。
Keynote 以外は 4 トラック並列の構成で、3 日間で合計 60 以上もの発表があり、どの発表を聞きにいくか迷うことも多々ありました。
動画はConfreaksで公開されています。 とても全ては紹介しきれないので、気になる方は Confreaks をご覧ください。
会場の Duke Energy Convention Center 外観。
中に入ると案内ボードがありました。
RubyConf 2016 はまつもとさんによる基調講演で始まりました。 Ruby が生まれてからの発展と Ruby 3 に向けての話をされました。 Ruby 3 での軸の 1 つである型の構想について、2 ヶ月前に行われた RubyKaigi 2016 では「Soft typing」という名称が用いられていましたが、質疑応答で既存の用語として存在していることが指摘されていました。 これについて今回「Duck inference」という名称が与えられました。 (私が把握していなかっただけで後に聞いたところ初出は EuRuKo 2016 とのことでしたが)
OpenStruct の高速な実装についての話でした。 OpenStruct の実装が特異クラスに都度 setter/getter を定義しているからその分普通のクラスと比べて遅いので、クラスの方に定義するような gem を作ってみる、というように実験と計測を繰り返して徐々に早くしていく、まさに「推測するな、計測せよ」を体現した発表でした。
Just a Minute というイギリスで半世紀以上続いているゲームショーがあるそうで、これの RubyConf 版ということのようです。 特定の話題に対して 1 分間「話途中でためらわず」「同じ単語を繰り返さず」「話題から逸れることなく」話し続けるゲームです。
ルールの説明をしてもよくわからないと思うので、こちらについてはとにかく動画を見てみることをオススメします。
CRuby で書かれた itamae をシングルバイナリにするために go-mruby による実装 (itamae-go) や mruby-cli による実装 (mitamae) をし、それぞれで Ruby DSL を実行しようとするとどうなるかの比較をされていました。 Go を使う必要性がない場合だと mruby-cli がオススメとのことでした。
Ruby 標準の Coverage や SimpleCov では明にテストを書いていないところまでカバレッジとしてカウントされてしまうので、意図してテストが書かれているところだけがカウントされるように minitest-coverage を作っているという話でした。
コンピュータサイエンス初心者に向けた話で、データ構造や計算量について、図や Ruby コードを用いて説明していました。
2 日目の朝には自由参加で RubyConf 2016 5K というイベントがありました。 これは、みんなで (おおよそ) 5K 走ろうというイベントで、RubyConf では 2010 年からおおむね毎年行われているようです。 RubyKaigi 2016 でも行われていました。
RubyKaigi 2016 で 5K を知り、せっかくなので参加しようと飛び込んでみましたが、みなさん結構速い……。
私は朝焼けのオハイオ川を眺めながらのんびり自分のペースで走っていました。
なんとタイムが測られており、私は 31 分だったようです。
ユーザーへのマニュアル、ミーティングの資料、ユーザーストーリー、コミットメッセージなど
いろいろな側面でのドキュメントの大切さを説く話でした。
OSS にしても使ってもらうためにはドキュメントは大事という話もあり、
自分の書いた gem でも README が bundle gem
してほぼそのままだったりするのを思い出していました。
毎日 15 分で OSS のコアチームへ、というタイトルでしたが、前半の 「なぜあなたは OSS をしたいと思うのか」 「GitHub は履歴書じゃない」 「OSS ではなくサイドプロジェクトでお金を稼ぐのも同じくらいクールだ」 という問い掛けが非常に考えさせられました。
Suture というリファクタリングツールを作ったという話でした。 RubyKaigi2016 でも話されており、 求めているリファクタリングツールがないから Talk Driven で作ったという腕力もさすがながら、 開催場所に合わせた導入の流れ、構成など楽しい発表でした。
テストスパイの活用の話でした。スパイによるテストと本物を使ったテストがあることによって、 どちらか片方のテストだけが失敗するようになった場合にどこが間違っているかの見当がつきやすくなるとのことでした。 「何が起きるとテストが落ちるかを考えてみよう」というキーワードが印象に残っています。
Test Doubles are Not To Be Mocked の裏では、RubyKaigi2016 でも話されていた Ruby 3 における並列プログラミングモデル (Guild) の発表がされていました。
2 日目の午前中に LT 参加ボードが置かれていて、希望者が名前を書き込んで参加する形でした。 1 時間半で 25 人の方が発表されていました。 一番最初にスライドなしで飛び込んで自由に喋るような枠もあり、日本の LT 大会とはまた違った雰囲気でおもしろかったです。
日本人参加者からは @yurie さんが Sessalet について、 @remore さんが julializer について発表されていました。
私が特に印象に残っているのは @samphippen さんの OSS 開発の協力を求める LT で、 「大変だし仕事もあるし常に賞賛されるわけでもないし gem のダウンロード数を見ると恐くなるが、 このコミュニティが好きだからここでこういう発表をしている」という話が午前中の @indirect さんの話も相俟って刺さりました。
2 日目の夜には Rails Tutorial Beerware Night at RubyConf というイベントがありました。
Rails Tutorial 上のソースコードは MIT ライセンスと Beerware ライセンス で提供されています。 Beerware ライセンスとは、「いつか会ったらビールをおごってね」というライセンスです。 このイベントは、Rails Tutorial の著者である Michael Hartl さんに Beerware ライセンスの下ビールをおごったり、 RubyConf の参加者同士飲んだり喋ったりするイベントです。
私は Rails Tutorial で 3.2 対応の翻訳のお手伝いをさせていただくなど、大変お世話になっていたため、 直接感謝の気持ちを伝えることができて非常に嬉しかったです。
是非ビールもおごりたかったのですが残念ながらおごりたい人がたくさんいて、おごることができなかったのは心残りです。
高層関数やカリー化、関数合成などについて、Ruby と他の言語とを比較した発表でした。 特に関数合成について Ruby のコア機能だけだと手間がかかるので Reductio.rb という gem を作ったそうです。
MRI における GC の実装についての説明と、github/ruby で 実験中の Ruby のヒープの改善についての話でした。 Ruby の各バージョンで GC が改善されていることについて私はなんとなくしか把握していなかったのですが、 それぞれのアルゴリズムの図によるわかりやすい説明と、抱えていた問題とそれに対する対策について理解を深めることができました。
Deoptimization というテクニックによって Ruby を速くするという話で、 RubyKaigi2016 でも話されていました。 ベンチマークの中で最も高速化されたケースでは 100 倍以上速くなったということでした。 実際のパッチについては https://github.com/ruby/ruby/pull/1419 から確認することができます。
Quine についての話で、基礎の説明や実際に作った Quine かつ AI まで組み込んだチェスゲーム、 lambda_chess のデモをしていました。 更に学ぶには、という項目として @mame さんの YouTube の動画や GitHub リポジトリが挙げられていました。
最後は Matz Q&A と題して @matz さんと @evanphx さんとの 対談や参加者からの質問会でした。 初日に話された Ruby 3 における型チェックについての質問や、mruby の話、後方互換性を気にしないなら捨てたい機能についてなど 多岐に渡る質問がされていました。
私にとってこの RubyConf は初の海外カンファレンスだったのですが、 参加してみてどこか違った空気感を感じました。 例えば発表が早めに終わって、発表者が壇上から降りておもむろにステッカーやチョコを配り出して、 わっと参加者が集まって「発表よかったよ!」とだけ告げて去っていくところなど、あまりうまく表現できないのですが、どこかオープンと言うのか、私が今まで参加したカンファレンスとは違った雰囲気に思います。
私はよく「発表者となんか話すならうまいこと言わなきゃ」と思っていろいろ躊躇してしまうのですが、 よかったと思ったなら「よかったよ、発表ありがとう!」のそれだけでもちゃんと伝えることが大事で、あたり前のはずですが私はあまり今までできていなかったと感じました。
今回の RubyConf は、私にとってインターネットでしか知らなかった人に直接「ありがとう」と伝えられた素敵な機会でした。 私の初アメリカ入りを助けてくださった方々、特に引率してくださった角谷さん、素晴らしい発表者、参加者、運営者の方々、 そしてカンファレンスに参加するための費用を負担してくれた会社、永和システムマネジメントには本当に感謝しています。 ありがとうございました!
松島 史秋 (@mtsmfm)
Ruby と麻雀が好き。西日暮里.rb 主催。 永和システムマネジメント勤務。