RubyKaigi 2017 タイムテーブル徹底解説

はじめに

いよいよ RubyKaigi 2017 が近づいてまいりました。RubyKaigi 2017 に参加される方はそろそろ見に行くセッションを決めようかと RubyKaigi 公式サイトのスケジュールのところを見始めたころかと思います。とはいえ、紹介文は英語だしスピーカーもよく知らないし、どんなセッションなのかちょっとよくわからない…という方もいらっしゃるかもしれません。

そこで全セッションについて、あらためて紹介を試みたのがこの記事です。この記事はRejectKaigi 2017で発表した「RubyKaigi 2017 タイムテーブル徹底解説」の補完のつもりだったのですが、ちゃんと書いたらだいぶ長くなってしまいました。お時間のあるときにどうぞ。

基調講演について

まず、Keynote session、基調講演の話をしましょう。

これがないと始まらない、まつもとさんのセッションは今年は 2 日目の最初になります。 まつもとさんのセッションは内容含めて全ておまかせなので、スタッフでもどういう話をされるかは把握していません。とはいえまつもとさんの基調講演がつまらなかった試しはないので、安心してお願いできています。今年もたのしみです。

まつもとさん以外の基調講演は、nobu こと中田さんと、vlad ことVladimir Makarovです。 vlad のセッションは Ruby 3.0 に向けた大きな提案なので、後の「3.0 に向けて」で触れるとして、nobu について書いておきましょう。

中田さんと言えば「パッチモンスター」の異名を持ち、だいたい毎日 trunk にコミットしている超有名コミッターの一人です。 そのわりにはこの手のカンファレンスではあまり登壇されていないのですが、今年の RubyKaigi では、chief organizer の松田さんがぜひ発表をと強くお願いし、ついに実現したとのことです。

基本的には akr さん、小崎さん、成瀬さんと続いてきた、コミッターが濃い話をする枠なので、ひょっとするとぽかーんと聞くだけの方もいらっしゃるかと思いますが、そのうち「そういえばあの時の話はこういうことだったのか…!」と分かったりする体験もたのしいものです。

3.0 に向けて

さて、RubyKaigi は特にテーマ等は決めていないので、応募者のみなさんは好き勝手に内容を決めていただいているかと思うのですが、並べてみるとうっすらとテーマらしきものが見えてくることもあります。今年の RubyKaigi の場合、やはりオリンピックまでにはリリースされるという噂の Ruby 3.0 を見据えたものが多いようです。

RubyKaigi 2014〜2016 に参加したことのある方やレポートを読まれた方であれば、まつもとさんは Ruby 3.0 で取り組むべき課題として以下の 3 つを挙げられているのをご存知かもしれません。

  • Performance (特に JIT)
  • Typing
  • Concurrency

今回の RubyKaigi では、これらについて、方向性の提案だけではなく、具体的な実装をもって答えようとしているセッションが多数あります。つまり、Ruby 3 の課題に対する回答案が提出されるのです。もちろんあくまで「案」であって実際に取り込まれるかどうかはまた別なのですが、リリースされる 3.0 に影響を与えることは確実でしょう。

そこでまずは Ruby 3.0 の重点課題 3 点について、順に見ていきましょう。

Performance (3x3)

まずは Performance です。これについては「Ruby 3x3」という標語も掲げられており、すなわち Ruby 3 では Ruby 2.0 の 3 倍の速度で動作することを目指そう、というものです。もっとも何を実行すると3倍になるのか、具体的なベンチマークが決まっているわけではないですが、これについては RubyKaigi 2016 での発表もあった optcarrot や、後述の Discourse などはそのターゲットの一つとして考えられるでしょう。

これについては、やはり最終日の最後のセッション、RubyKaigi 2017 の掉尾を飾る基調講演、Vladimir Makarov の「Towards Ruby 3x3 performance」に注目せざるをえません。

Vlad は CRuby 用の JIT を実装し、すでに動作させているということで一部に注目を集めています。vlad の JIT は MRI JIT、略して MJIT という名前がついています。MJIT はどの程度の性能なのか? IBM の OMR や Oracle の Graal とはどのような違いがあるのか? そして現在はどのくらいの完成度なのか? 尽きない疑問の回答が実装した本人から語られる予定です。

3x3 についてのセッションはこれだけではありません。

Noah Gibbs『How Close is Ruby 3x3 For Production Web Apps?』もその一つです。Noah Gibbs は Appfolio に Ruby 3x3 を支援するため、Ruby のパフォーマンス向上を目的としてフルタイムで雇用されている人で、今回の発表は Discourse を題材に、Ruby が現在まででどの程度早くなっているか、実アプリケーションではどこがボトルネックとなっているか、といったベンチマークについて解説されるようです。

Julian Nadeau『Busting Performance Bottlenecks: Improving Boot Time by 60%』は、Rails の起動が早くなるということで話題の BootSnap の話ですね。Julian Nadeau は BootSnap を開発している Shopify の方です。

Shizuo Fujita『How to optimize Ruby internal.』は最近 CRuby 本体への修正提案を頻繁に行っている watson さんこと Fujita さんの発表です。Ruby の最適化のための細かい改良を実践してきた話が聞けそうです。

また、Performance にフォーカスした発表があるのは CRuby だけではありません。Kevin Menard『Improving TruffleRuby’s Startup Time with the SubstrateVM』は、JRuby の fork である TruffleRuby での高速化のセッションです。TruffleRuby/JRuby は JVM のため起動時のコストが大きかったのですが、その問題を大幅に改善するものとして SubstrateVM があります。このセッションはその SubstrateVM と、TruffleRuby への影響を紹介するセッションです。

Typing

Ruby はとにかく動的というか、静的な Typing を極力避けているきらいがありますが、Ruby 3 では Typing に取り組むことを明言しています。

正攻法的な静的解析の話としては、Valentin Fondaratov『Automated Type Contracts Generation for Ruby』Soutaro Matsumoto『Type Checking Ruby Programs with Annotations』があります。 Valentin は RubyMine を開発している JetBrains の人で、RubyMine 使いなら見逃せない発表ですね。RubyMine は YARD 的なコメントから型情報を取り出すことができるのですが、そのさらに先を行く発展的な話になりそうで、YARV のハックも入ってるそうで気になります。一方の Soutaro さんのセッションは、コメント内ではなく Ruby そのものを拡張して、静的型検査をできるようにするための話になるようです。今回は実装の話もあるとのことでこちらも期待したいです。

これに対してちょっと(だいぶ)違った角度から挑戦しているのがYuki Nishijima『Static Typo Checker in Ruby』です。タイトルが「Type Checker」ではなく「Typo Checker」となっているのはそれこそ Typo ではなく正しい表記のはずです。変数名などの typo を動的に指摘してくれる did_you_mean gem の作者である Nishijima さんが、静的な Typo Checking に挑みます。

また、Typing とはちょっと違いますが、Masataka Kuwabara『Writing Lint for Ruby』も静的なコード検査という意味では気になるところです。Masataka Kuwabara さんは RuboCop のコア開発チームの方で、その知見を元にいわゆる Lint ツールの紹介からその書き方までを説明してくれるようです。

Concurrency

最後に Concurrency についてのセッションを見てみましょう。

Concurrency については、まずKoichi Sasada『Fiber in the 10th year』が気になります。Fiber についての 10 年間をそのオリジナルの作者が紹介するセッションですが、見逃せないのがセッション紹介に少し書かれている auto-Fiber です。これは bugs.ruby-lang.org のFeature #13618で Eric Wong が提案しているもので、これが入ると Ruby での非同期処理の扱いに大きな影響がありそうです。もっとも 2.5 では見送られるそうですが、3.0 までには導入されるのでしょうか。

一方、3.0 ではなく現在の Fiber についてのセッションもあります。Masatoshi SEKI『How to write a synchronization mechanisms for Fiber』は、Fiber を使った並行処理の書き方についてのセッションです。内容についてはセッション紹介に詳しく書かれているのでそちらをどうぞ。

Delton Ding『High Concurrent Ruby Web Development Without Fear』は、midori(em-midori) の作者の方ですね。midori は nio4r を使った非同期 I/O を使って高速に動作する軽量 Web アプリケーションフレームワークで、このセッションはその midori を題材にした非同期プログラミングの解説になります。

また、Joe Kutner『Asynchronous and Non-Blocking IO with JRuby』は JRuby での非同期プログラミングのトークです。JVM は非同期処理が得意なのですが、その上で動く JRuby も CRuby や Node.js などと比較しても優れたパフォーマンスを発揮できるということで、実際のアプリケーションを元に紹介してくれるセッションです。ちなみに Joe Kutner は『ヘルシープログラマー』の著者でもあります。

CRuby以外のRuby処理系

RubyKaigi では MRI こと CRuby のトークが多い傾向がありますが、それ以外の Ruby 処理系もあります。

Java による Ruby 処理系、JRuby/TruffleRuby のセッションはすでに紹介したものの他に、Charles Nutter, Thomas E Enebo『JRuby at 15 Years: Meeting the Challenges』があります。こちらはおなじみ JRuby コンビの Charles と Thomas による JRuby セッションです。15 周年めでたいですね!

また今年は JavaScript による Ruby処理系 Opal のトークも2つあります。Yoh Osaki『dRuby on Browser』は Opal でアイソモーフィック Ruby の実現に励む Youchan さんこと Osaki さんが dRuby をブラウザで動かすセッションです。今回は WebSocket を使って、dRuby による分散オブジェクトを扱ったアプリケーションを見せてくれる予定です。

Yutaka HARA『Ruby, Opal and WebAssembly』は「DXOpal」という DXRuby と API 互換な Opal 用ゲーム開発フレームワークの発表です。DXOpal を使えばRuby処理系のインストール作業なしでブラウザだけでゲームが遊べるようになるのですが、さらに WebAssembly を利用した高速化についても解説してくれるそうです。

mruby のトークも2件あります。Ritta Narita『mruby gateway for huge amount of realtime data processing』はアプリケーション組み込みの方の mruby の応用例です。h2o という HTTP/2.0 対応の Web サーバは標準で mruby が組み込めるようになっています。h2o と mruby を使った大量のストリーミング処理を行うゲートウェイサーバの最適化と改良について解説するセッションになります。

Yurie Yamane『Write once, run on every boards: portable mruby』は機器組込みの方の mruby です。組込みのボードやデバイスは PC 以上に差異があるそうなのですが、その違いを mruby で吸収して、違いを気にせず Ruby でプログラミングできるようにするためのセッションです。

Rubyっぽい言語実装

Ruby ではなく Ruby に似た別言語の実装のセッションも複数あります。RubyKaigi なのに(Ruby に似てるけど)Ruby じゃない言語の話はどうなのか、という意見もあるかと思うのですが、RubyKaigi じゃないとこういう言語処理系のトークが話せたり聞けたりする場所もなかなか用意できなさそうにも思うので、この機会に見ておきたいセッションです。

Stan Lo『I quit my job to write my own language: Goby』は退職エントリっぽいタイトルからして不穏な雰囲気ですが、Go での実装による Ruby に似た言語処理系の話です。Goby はChannel があったり Go のコードを動的にロードできたりするなど、Go との親和性が高いのが特徴です。このセッションでは作者自身による Goby の紹介になる予定です。

Yasushi Itoh『Introducing the Jet Programming Language』は Erlang ベースの言語 Jet のご紹介です。Erlang VM で動く言語と言えば Elixir が有名ですが、Jet の方が Elixir よりも Ruby に似てる言語になっているようです。こちらも作者自身による仕様と実装の紹介セッションになります。

他言語によるRubyの拡張

CRuby は拡張ライブラリを使ってクラスやモジュールを拡張することができます。拡張ライブラリを記述する言語としては主に C が想定されていますが、C 以外の言語を使って CRuby を拡張する提案も複数あります。

Kouhei Sutou『Improve extension API: C++ as better language for extension』は C++ を使って Ruby 拡張を書く話です。このセッションでは C よりも C++ の方が Ruby の拡張ライブラリを記述するのに適した言語なのではないか、という少々挑発的な含みを持つタイトルであり、新たな C++ API を提案するものです。

Godfrey Chan, Terence Lee『Bending The Curve: Putting Rust in Ruby with Helix』は Rust を使って Ruby 拡張を書く話です。以前 RubyKaigi 2015 でも Ruby の拡張に Rust を利用してみるセッションがありましたが、今回はその実践の話になる予定です。

Sameer Deshmukh『C how to supercharge Ruby with Rubex』はRubexについてのセッションです。Rubex は Ruby の C 拡張を Ruby っぽく記述できるように作られた独自言語で、2016 年度の Ruby アソシエーション開発助成金の対象にもなっていました。Sameer Deshmukh は SciRuby のメンバーで Daru の作者でもあり、この Rubex セッションも後述の「科学計算、機械学習」で紹介しようかと思ったのですが、科学技術計算専用というわけではない(はずな)のでこちらで紹介してみました。

Tanaka Akira『Ruby Extension Library Verified using Coq Proof-assistant』は最近 Coq を多用されている akr さんによる、Coq で「正しい」拡張ライブラリを書く話だそうです。先日 RejectKaigi 2017 でお会いした時には、テストなんて網羅的ではないのを書いて安心しているようじゃダメで、「正しい」ことを「証明」するべきだ!(意訳)みたいなことを語ってました。テストを書かずに証明を書く時代が果たしてくるのでしょうか。

Ruby 2.xの改良

先ほどは Ruby 3.0 について紹介しましたが、日々使っている Ruby をより使いやすく、より洗練させるのも重要です。様々な角度から行われている Ruby の改良についてもまとめて紹介しましょう。

SHIBATA Hiroshi『Gemification for Ruby 2.5/3.0』は標準ライブラリを Gem 化している作業についての発表です。Ruby 2.2 辺りから、既存の標準ライブラリを default gems や bundled gems へと置き換えていく Gemification プロジェクトがあります。このプロジェクトを紹介することで、standard library の抱える問題を共有し、新たにプロジェクトに参加する人を求めていくというというセッションです。

Yusuke Endoh『An introduction and future of Ruby coverage library』は Ruby 2.5 で改良される予定の coverage ライブラリの紹介です。mame さんによる CRuby のコミットログを見た限りでは、9月 に入ってから coverage 周りの修正が盛んに行われているようなので、きっとこの辺りの狙いについてセッションの中で触れられるのではないかと思います。

YUKI TORII『Pattern Matching in Ruby』は Ruby の文法に手を入れてパターンマッチ構文を導入する、という大胆なセッションです。パターンマッチ構文は functional な言語でよく使われていて、Ruby にも欲しいという話はたまに聞くのですが、実際に導入しようとするとやはり文法をどうするかが問題になるかと思われます。このセッションでは Ruby の構文の改造の仕方も合わせて、Ruby へのパターンマッチ構文の適用について議論される予定です。

Aaron Patterson『Compacting GC in MRI』は、MRI こと CRuby への Compacting GC の適用についてのセッションです。CRuby は mark and sweep な GC ですが、Compaction は行いません。これを改造して Compaction を行わせるようにし、メモリ効率を改善を狙っているようです。

Nate Berkopec『Memory Fragmentation and Bloat in Ruby』もメモリに関するセッションです。Nate Berkopec は「The Complete Guide to Rails Performance」の著者でもあるのですが、上のレイヤーから下のレイヤーまでパフォーマンスの知見にあふれており、今回の発表はかなり下のレイヤーを掘り下げて、Ruby のメモリ削減を行うためのメモリ管理について解説してくれる予定です。

Kevin Deisz『Compiling Ruby』もまたちょっと変わったアプローチを行っています。これは単純に YARV のバイトコードにコンパイルするという話ではなくて、YARV の iseq をいじって Ruby を改造する、みたいなやばめのセッションになるようです。

科学計算、機械学習

Masahiro TANAKA『Progress of Ruby/Numo: Numerical Computing for Ruby』は昨年も発表された TANAKA さんのセッションですが、前回はワークフローエンジンの Pwrake の話だったので、科学計算系のセッションとしては RubyKaigi 2010 以来ということになりそうです。今回は、NArray から Ruby/Numo 全体についての紹介になる予定です。

Kenta Murata『Development of Datascience Ecosystem for Ruby』は昨年は概論的な話でしたが、今回はついに PyCall の 1.0 がリリースされ、matplotlib や Pandas なども Ruby から叩けるようになり、Ruby でデータサイエンスする環境が見えてきました。とはいえまだまだ不十分だそうで、まだ足りていないところはどこなのか、どのようにすればそれを変えていけるか、といったことを発表される予定です。

Mai Nguyen『Food, Wine and Machine Learning: Teaching a Bot to Taste』はちょっと毛色の変わったセッションで、ワインのテイスティングを機械学習を使って実現するというものです。最初にタイトルを聞いて Wine はWindows 互換実装の方かと思ったのですが、発表者 Nguyen のプロフィールによれば Wine Science で修士号を取得しているとのことだったので、専門家の知見と機械学習のマリアージュがたのしみです。

フレームワーク・アプリケーション

Anton Davydov『Hanami - New Ruby Web Framework』はついに 1.0 がリリースされた Hanami のご紹介です。Hanami についてはこの前のるびまによる記事が詳しいですが、The Clean Architecture を採用した比較的新しい Web アプリケーションフレームワークです。Anton Davydov は Hanami のコア開発者(GitHub の Hanami oranization のメンバー)の一人で、Awesome Hanamiの管理者でもあります。

Takafumi ONAKA『API Development in 2017』は最新 API トークということで、最近話題の GraphQL と REST の比較を含めて、効率的に API を開発していくにはどうすればよいか、何が問題でどのように解決すればよいかの最新の知見を披露されます。

Mat Schaffer『Mapping your world with Ruby』は Safecast プロジェクトに関するセッションです。Safecast プロジェクトは東日本大震災の際に放射線の情報を集約・提供するためにはじめられたプロジェクトで、あれから 6 年後の現在も継続・発展されている Safecast の環境データ集約のこれまでとこれからについてのセッションになります。

John Mettraux『Flor - hubristic interpreter』は、RubyKaigi 2007 でワークフローエンジンの OpenWFEru のトークをして以来な気がします。ひょっとして 10 年ぶりでしょうか。今回は flor という、新たな Ruby のワークフローエンジンの発表になります。

Shugo Maeda『Handling mails on a text editor』は最近 shugo さんが開発をすすめている Ruby 製のテキストエディタ TextBringer の話で、今回は TextBringer でメールが書けるようになる(!)Mournmailの紹介だそうです。Emacs で Mew とかを使っていた世代には応えられないセッションになりそうです。

Julian Cheal, Eric Weinstein『Do Androids Dream of Electronic Dance Music?』は直訳すると「アンドロイドは電気ダンス音楽の夢を見るか?」という P. K. ディックネタですが、Ruby で EDM を作るセッションだそうです。Julian は過去の RubyKaigi でも毎回派手なデモが評判でしたが、今回は EDM で、しかも機械学習を使って作曲を試みるそうで、これもまたデモが楽しみです。

Henry Tseng『Tamashii - Create Rails IoT applications more easily』は Ruby で IoT を行うセッションで、Raspberry Pi と RFID を使ったチェックインの仕組みを ActionCable 経由で Rails アプリケーションとつないだものだそうです。そのフレームワークが Tamashii というもので、このセッションはその紹介になります。

Satoshi “moris” Tagomori『Ruby for Distributed Storage System』は Ruby と Java によるオープンソースな分散ストレージシステム bigdam-pool を紹介するセッションです。その実装はまだ公開されていないのですが、RubyKaigi までには公開されるかもしれないとのことなので、その詳細も含めて期待が高まりますね。

ツールとRuby

Ruby のツール周りについては、irbの名前が入ったセッションが2つあります。

Keiju Ishitsuka『Irb 20th anniversary memorial session: Reish and Irb2』は 20 周年を迎える irb について、作者自身によるセッションですが、何より「Irb2」というタイトルが要注目ですね。irb と Reish を開発したことによる知見を反映させて、ついに irb の新バージョンがリリースされるのでしょうか。

そしてもう一つのセッション、ITOYANAGI Sakura『Ruby Parser In IRB 20th Anniversary…Now Let Time Resume』は、IRB そのものというよりは IRB で使われている Ruby の parser 実装についてのセッションで、ripper を使って RDoc の parser の互換性の向上を図るものです。こちらは先日 RDoc のレポジトリにpull requestが送られていて、この解説になるかと思います。

もう一つ、バージョン 2 のリリースと言えば Bundler です。Colby Swandale『Bundler 2』は、ついにリリースが近づいてきた Bundler 2 についてのセッションです。これまでの改良や 2 での新機能について、なぜそのようになったのかも含めて紹介される予定です。

Fumiaki MATSUSHIMA『Ruby Language Server』は Ruby の Language Server Protocol(LSP) 実装についてのセッションです。エディタや IDE などの開発ツールでは、メソッド名やクラス名・変数名の補完や、定義へのジャンプといった機能が求められるものですが、これはツール数と言語数の掛け算した数だけ必要になるもので、個別に実装するのは大変です。そこで Microsoft が提唱したのがLanguage Server Protocolです。これは開発ツールと各言語のサーバ (Language Server) 間のプロトコルで、これを使えば一度サーバを作ってしまえば、LSP に対応したあらゆる開発ツールで利用できるようになる、というものです。LSP は Ruby の実装がなかなか出てこなかったのですが、最近 MATSUSHIMA さんが実装しており、このセッションはその紹介になるようです。

普段使いのRuby

RubyKaigi ではトピックを絞ったテーマの方が目立ちやすいのですが、普段使いの Ruby についてのセッションもあります。

Kentaro Goto / ごとけん『Ruby in office time reboot』は、遠い昔のごとけんさんによる RubyKaigi トーク『仕事で使う Ruby』の reboot 版だそうです。あれから数年、2017 年にはどんな使われ方をするのか興味津々です。

Chris Salzberg『The Ruby Module Builder Pattern』はRubyのModuleを使いこなすためのトークです。Module は Ruby の基本的な構文要素ですが、さまざまな作り方・使い方があります。さらに、翻訳支援フレームワークである Mobility gem の紹介もありそうです。

Martin J. Dürst『Regular Expressions from the Outside and from the Inside』は正規表現に関するセッションです。正規表現にもさまざまな切り口がありますが、Martin 先生ということでとりわけ Unicode 周りの正規表現ネタが期待できそうです。

Mayumi EMORI『Serial Protocol Analyzer on Ruby』はシリアル通信に Ruby を使う話なのですが、単純に通信をするというそのやり方の話よりも、正しく通信が行われていない場合の解析の仕方や原因の切り分けをどう Ruby でこなすか、といったセッションになる予定です。

Victor Shepelev『The Curious Case of Wikipedia Parsing』は Wikipedia のコンテンツを parse できる parser を作るセッションです。Wikipedia(MediaWiki) に特化するというより、ある程度構造化されたデータの取り扱い方といったようなセッションになる予定です。

また別の側面のRuby

さらに、ちょっと違ったターゲット向けの Ruby の使い方のセッションもあります。

Takuya Nishimoto『What visually impaired programmers are thinking about Ruby?』は視覚障害を持っている Ruby プログラマが、どういった問題を抱えていて、それをどのような環境やツールで解決しているのか(あるいは解決できていないのか)、といった内容のセッションです。Nishimoto さんはオープンソースのスクリーンリーダー NonVisual Desktop Access (NVDA) の日本語チームの代表者の方で、普通のアクセシビリティの話題から一歩踏み込んだ話になりそうです。

Kouji Takao, Nobuyuki Honda『Smalruby : The neat thing to connect Rubyists and Scratchers』は Smalruby のセッションです。Smalruby は Scratch のような GUI プログラミングのような見た目でありながら、実際に書かれるのは Ruby のコードというプロジェクトです。今回は Smalruby の機能や実装から、最近の小中学生向けのプログラミング教育についてまで紹介される予定です。

特別セッション

また、通常の発表セッションの他に、『Lightening Talks』『Ruby Committers vs the World』があります。

『Lightening Talks』は恒例の 5 分間の短い発表大会で、今回は 12 本の発表がある予定です。CRuby Committers『Ruby Committers vs the World』も最近は恒例になりつつあります。CRuby のコミッターのみなさんに登壇していただき、日頃疑問に思っていることや要望などを直接コミッターに聞いてみるセッションです。

おわりに

以上、ざっくりと全セッションについて紹介してきました。

今年の選考は熾烈をきわめ、例年だったら通してあげたい応募でも泣く泣く落としてしまったものも少なくありません(すみません)。そもそも最初は 2 トラックの予定だったので、ここからさらに 1/3 減らすとか一体どうするつもりだったのかと不思議に思うほどですが、これまでご紹介してきたとおり、今年のセッションはどれもこれも期待できるものとなっています。ぜひたのしみにしてください!

著者について

高橋征義

RubyKaigi 2017 Organizer。