RubyKaigi 2017 に行って来ました(2日目)

発表

9:40-10:40: Keynote by @matz

10:50-11:30: An introduction and future of Ruby coverage library10 by @mame

13:00-13:40: Improve extension API: C++ as better language for extension by @kou

slide.rabbit-shocker.org

13:50-14:30: Automated Type Contracts Generation for Ruby by @valich

14:40-15:20: Asynchronous and Non-Blocking IO with JRuby by @jkutner

15:50-16:30: Bending The Curve: Putting Rust in Ruby with Helix by @chancancode and @hone

16:40-17:20: Write once, run on every boards: portable mruby by @yurie

17:30-18:30: Lightning Talks

発表感想

Keynote by @matz

RubyのModuleをベースにして、色々なプログラミング言語の機能を取り入れながら、Moduleが色々な役割を担うようになってきたよって話でした。 最近増えたRefinementやprependの狙いや位置付けについて、matz本人から話を聞けたのは良かったです。こうしてまとめられてるのを見ると、確かにModuleは色々な役割を担っててなんだかんだで複雑になってる気もしました。個人的には、namespaceとしての利用が面白いと思ってます(rubyのrequireはただRubyコードを実行するだけでimport, exportみたいな概念はないので、Moduleとしてglobalな空間での衝突を避けないと大変なことになる。。。w)

An introduction and future of Ruby coverage library10

test の coverage とはなんぞやぞいうお話と、Ruby の coverage library をもうちょっと良いものにしようとしてるよというお話。 Ruby で test coverage を計測したことなくて気付いてませんでしたが、line coverageしか公式ではサポートしてない状態だったらしいです。機能追加してくれるのはありがたいと思います。

Improve extension API: C++ as better language for extension by @kou

C++Ruby の extension library を作るなら、こんな風に C++ の中で Ruby っぽく書けて良いよ、みたいな話でした。 APIを考えるのが好きみたいで、実際にlibraryとしてある程度動くものを作ってるのがすごいと思いました。発表中に「binding libraryを作りたいわけじゃない」と言ってましたが、むしろbinding libraryを作る際に役立ちそうだと思いました(Rubyのオブジェクトを触ったりRubyのメソッド定義がやりやすくなってるように見えたので)。

cf. https://github.com/jasonroelofs/rice

Automated Type Contracts Generation for Ruby by @valich

RubyMineの中の人による、Rubyのテストコードから型情報を集めてうまく集約して出力する仕組みを作っている(作った)というお話。 型情報を集約するロジックの話はなかなか面白かったですし、RubyMineが色々機能拡張してるのはすごいと思いますが、全てのケースをテストで網羅するのはちょっと難しそうだなーと感じました(発表してる人は、みんなの力を合わせれば可能だ、と言っていてちょっと夢を感じましたが)

Asynchronous and Non-Blocking IO with JRuby by @jkutner

JRuby で非同期ノンブロッキングIOを利用したいケースのサンプル実装として、RatpackとNettyを利用したHTTPサーバーアプリケーションを作ってみたよってお話でした。

cf. https://github.com/jkutner/jruby-ratpack-async-demo

JVM系だとPlay FrameworkもノンブロッキングIOとして有名な気がするので、JRubyから利用は出来ないのかが個人的にはちょっと気になりました。

Bending The Curve: Putting Rust in Ruby with Helix by @chancancode and @hone

Rust で Ruby の native extension を作る為のライブラリとしてHelixというものを作っていて、こんな感じだよというお話。 2年前のRubyKaigiでも話してるのを聞いていたので、ちょっと気になっていました。Rustのマクロを使い倒してるみたいで、強力なマクロシステムを持つ言語は良いなと感じました(Cのマクロはただの文字列置換ですが、Rustのマクロはparseした結果に触れるみたいです。コードを見てると、identtyの様にidentifierとtypeが明確に区別されていたので、変なミスや予想外の変換が防げて良さそうだと感じました)

Write once, run on every boards: portable mruby by @yurie

Rubyマイコン上で動くプログラムを書いてるよ、一度書いたプログラムを共通で使えるようにしていこうよってお話でした。 デモでトラブル続出していたので大変そうでした。

Lightning Talks

たくさん発表があって説明しきれないですが、みんな発表のレベルが高いしユーモアセンスもあって面白かったです。LTは自分も挑戦してみたいなーと思いました。

懇親会

mirakuiさん、matzさんみたいな前から話してみたかった方と話せてよかったです。 matzさんには写真まで撮ってもらえて、嬉しかったです。

matzさん

Rubyのeachやブロックはかなり先進的だと以前から思っていたので、どういう経緯で「eachメソッドという発想に至ったのか」みたいな話を聞きました。each的な存在はsmalltalkから着想を得たと言っていて興味深かったです(調べてみたら、smalltalkにはcollection closure methodと呼ばれるメソッド群が存在していて、その中にrubyのeachに相当するdoの他、select, sort などblockを受け取ってcollectionに作用するメソッドが存在することがわかりました。smalltalkすごい)。forwhileみたいなキーワードになってた方がメソッドよりもかなり簡単に最適化出来るはずで、どういう発想でそこに至ったのか気になってたので聞けてよかったです。ついでに、他のプログラミング言語にもiteratorを宣言する構文があった(関数の引数としてiteratorを渡せるようになっていた)という話を聞きましたが、言語の名前は忘れましたw

mirakuiさん

Cookpad CTO 大変ですか、みたいな話をしました(チーム編成、評価制度など)。 海外と国外の開発どう進めてますか、という話も興味があったし自社でも色々考えてる部分なので聞いてみました(海外と国内で大きくシステムを2分してる。海外はその中でさらに国ごとに機能を分けてる、それは料理は地域固有の文化に密接に結びついており、文化ごとに適切な表現や探し方、機能が異なってくるから、そうせざるを得ないと思ってる、など)。やはり、どのサービスも海外展開というと苦労してるんだなー、という印象を持ちました。

2日目総括

発表をたくさん聞けて大満足でした。特に、LTで「もっと長い時間で話せる内容の発表」がたくさんあり、全体のボリュームが割増されていた様に感じます。