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

はじめに

今年もいよいよ RubyKaigi 2018 の開催ですね。昨年書いた「RubyKaigi 2017 タイムテーブル徹底解説」は多くの方に読んでいただき、大変好評だったそうです。ありがとうございます。そして今年もという要望をいただきまして、ほんとうに直前になってしまいましたが執筆したものがこちらです。

この記事は昨年同様、RubyKaigi 2018 の全セッションについて、どのセッションを見ればいいのかわからない……という方向けにざっくりご紹介するものです。内容については今年も開催されましたRejectKaigi 2018にて発表した「RubyKaigi 2018 タイムテーブル徹底解説」の補完の意味合いもあります。RejectKaigiに参加された方も参加されていない方も、お時間のあるときにどうぞ。

基調講演について

Keynote session、基調講演は最終的に運営チームから登壇依頼をしているのですが、どなたにお願いするのか毎年悩むところです。

もちろんまったく悩む余地がない(日程の調整はそもそもRubyKaigiの日程を決める段階で済ませている)まつもとさんのセッションは最初に決まっております。今年は2月の25周年記念イベントの際にもRubyのこれまでやこれからのことについてお話しいただきましたが、今年のRubyKaigiではどんなお話になるのでしょうか。たのしみですね。

それ以外の基調講演は、須藤さんと、eregon ことBenoit Dalozeです。

須藤さんは、RubyKaigi でもまつもとさんを始めとしてちょくちょく見かけるプレゼンツールの Rabbit をはじめとして、さまざまなプロダクトやライブラリの開発・保守を行っています。Ruby 以外でもGroongaやApache Arrowsなどの開発や、OSS Gateなど、幅広い活動でも知られています。前回のRubyKaigi 2017でも拡張APIのお話をしていましたが、今年は地元東北での開催ということで、基調講演をお願いすることになりました。テーマはInterfaceということで、Rubyの中での、あるいは Rubyとそれ以外をつなぐインターフェースについての知見をお話しいただけるようです。

もう一人のeregonは、JRubyやTruffleRubyの開発やRubySpecの開発などで知られています。Ruby Prize 2015では最終ノミネートに残っていましたね。TruffleRubyは最近1.0が出て注目を集めつつあるGraal・GraalVMを使ったRuby処理系の実装で、通常のJRubyよりも高速に動作し、起動速度も大きく改善されたそうです。今回の基調講演では、特に並列性能の改善について、TruffleRubyの基本からお話しいただく予定です。

CRuby処理系の改良

さて、RubyKaigiでは昨年に引き続き、Ruby 3.0に向けたCRuby本体の改良についてのトークが多数あります。

Koichi Sasada Guild PrototypeはGuildの進捗報告ですね。RubyKaigi 2016で発表されたGuildですが、プロトタイプができつつあるのでその評価の話(と名前の話)が中心になるようです。

Takashi Kokubun The Method JIT Compiler for Ruby 2.6は、昨年の基調講演で話題となったMJITについて、それを改良というか若干の方向変換をしてCRubyに適用した話です。ついにRuby 2.6に導入されることが決まったJITについて、その設計・実装・評価を紹介してくれるそうです。

一方、mjitと言えば昨年のキーノートスピーカー、Vladimir Makarovも今年は通常のスピーカーとして登壇されます。今年はThree Ruby performance projectsというタイトルで、3点の改善についてのトークになります。1つ目がIEEE 754の浮動小数点数のパフォーマンスの改良、という渋いところから始まり、2つ目はYARVの命令セットからRTLの生成、3つ目はmrubyへのMJITの適用という豪華三本立ての予定です。

Yuichiro Kaneko RNode with code positionsはRubyのASTの改良の話です。ちょっと渋いというかマニアックな話になるかもしれませんが、ASTのノードにソースの位置情報が保存できるようにしたので、その実装と応用例の紹介になるんじゃないかと思います。

Keita Sugiyama, Martin J. Dürst Grow and Shrink - Dynamically Extending the Ruby VM Stackもまたちょっとマニアックな話で、スレッドごとのスタックサイズを最適化する話です。現状のCRubyでは各スレッドのスタックの大きさは共通かつ決め打ちになっているのですが、それを動的に変えられるようにすることで、スタックを消費しないスレッドでは小さくて済ませられるようにしたそうです。

Aaron Patterson Analyzing and Reducing Ruby Memory Usageはメモリ管理の話です。CRubyではどのようにメモリが使われているのかを調べるとともに、その削減方法について紹介されるそうです。

Yoh Osaki How to get the dark power from ISeqは、ここのところはOpalの発表が続いてたのですが、今年はCRubyのISeqとYARV(RubyVM)の話になります。ISeqの紹介、使い方とともに、ISeqの標準化について仕様をまとめたいという期待を込めた発表になりそうです。

「改良」枠に入れてしまっていいかちょっと自信ないのですが、joker1007, Satoshi “moris” Tagomori Hijacking Ruby Syntax in Rubyは、Rubyの文法を拡張するような謎のしくみを導入するという、ちょっと黒魔術ぽい発表です。やばそう。でも面白そうですね。

ツール

Rubyの本体と周辺ツールの区切りは、RakeやRubyGems、Bundlerなどを考えると以前よりも曖昧になってきたようにも思いますが、ここでは区別して取り上げてみます。

今回の気になる登壇者としては、Bozhidar Batsov All About RuboCopがいます。RuboCopは採用しているプロジェクトも多い、Ruby界隈ではもっとも使われていると言い切ってもよさそうなコード分析・修正ツールです。その作者がついに来日し、RuboCopのすべてを語ってくれます。最初に応募されてきたCFPのエントリでは比較的一般的な内容になりそうだったのですが、松田さんから「RubyKaigiではtechnicalなやつにしてね!(意訳)」というリクエストを入れており、濃い話が期待できそうです。

しかも今年はRuboCopのトークがもう一つあります。Koichi ITO Improve Ruby coding style rules and Lintがそれです。RuboCopはgolintなどとは違い、唯一絶対の書き方を強制・矯正するというよりはプロジェクトごとのルールを指摘するようなところがあり、みんなで育てていく感があります。そのためにもRuboCopを改良していくことが必要ですが、RuboCopのコントリビューターでもあるkoicさんが、どのようにすればRuboCopを改良できるのか、そしてそれを本家にフィードバックするにはどうすればよいかを紹介してくれる予定です。

上でも触れたRubyGemsの話題としては、Hiroshi SHIBATA RubyGems 3 & 4があります。これはタイトルの通り、次世代のRubyGemsである3に加えて、「次の次」であるRubyGems 4についてもその計画を発表されるそうです。現代的なRubyの開発ではRubyGemsはないと厳しくなっている昨今なので、そのロードマップは気になるところです。

Edouard Chin Journey of a complex gem upgradeはShopifyの方によるトークで、まあ大規模なアプリでgemを更新するのは大変なわけですが、それを単純に「頑張る」だけではなくてどうやってうまいことやれるか、そのために作ったツール等の紹介を交えながら説明されるそうです。

さて、RuboCopとは違った静的解析ツールとしては、型のツールがあります。Soutaro Matsumoto Ruby Programming with Type Checkingは昨年も紹介していたType CheckerのSteepについて、その進捗と評価の報告ということで、昨年の続きのようなセッションになりそうです。と思ったのですが、先日のRejectKaigiのときに話をうかがったところでは、去年の話はまつもとさんたちにあまり伝わっていなかったようなので、去年話した部分についても改めて説明する、とのことでした。

一方、Yusuke Endoh Type Profiler: An analysis to guess type signaturesは型を検査するのではなくプロファイラの話です。PythonでいうところのPyAnnotateとかを作るのに使えるツールじゃないかと思っていますが、正しいでしょうか。

他にもType Systemといえば、Dmitry Petrashko, Paul Tarjan, Nelson Elhage A practical type system for Ruby at Stripe.があります。彼らはStripeの方ですが、なんとStripeにある数百万行ものRubyのコードには漸進的に型を適用するしくみがあるそうです。本当なのか。この発表はその取り組についての紹介になる予定です。

Marc-André Lafortune Deep into Ruby Code CoverageはコードカバレッジツールDeepCoverの紹介で、標準のcoverageよりも細かいカバレッジが調べられるそうです。marcandreはCRubyのコミッターとして長らく活動していますが、RubyKaigiでの登壇は始めてなんでしたっけ? ちょっと意外ですね。

ITOYANAGI Sakura IRB Reboot: Modernize Implementation and FeaturesはIRBですね。現在のirbは独自parser/lexerを使っているのですが、それをRipperに置き換えようというものです。さらに、RDocを使った補完機能などの追加提案も話されるそうです。

一方、irbの作者であるKeiju Ishitsukaさんの発表、Reirb: Reborn Irbでは、irbを新バージョン、Reirbがいよいよ明らかになるようです。

mrubyセッション

さて、今年は例年にも増してmrubyについての応募があり、ある程度絞り込んだものの採用された数もこれまでで一番多くなったように思います。これは、mrubyが広く使われている……というわけでもなくて(少し前に比べると実用化されている事例も増えたかとは思いますが)、ある程度こなれてきてはいるものの、まだまだ足りてないところがそこかしこにあるためハックしがいがある、というのと、なにか面白い機能を追加してみるにはCRubyよりもmrubyの方がやりやすそう、というところがあるんではないかと思います。いずれにしても、今回はこれまでにはないほどのmrubyのセッションが揃っています。

Terence Lee, Chase McCarthy Controlling Droids™ with mruby & Goは、Spheroを操作するためのDSLをGoとmrubyの組み合わせで実装するという話です。Terenceは過去にmruby CLIなども行っていましたが、今回はChaseと一緒にGoにmrubyを組み込んで使う話になる予定です。Chaseは飛行機を飛ばしたりもするハードウェアが得意な方だそうです。

Yurie Yamane mruby can be more lightweightは組込み環境でのmrubyのメモリ削減の話になるそうです。mrubyはCRubyに比べれば省メモリなのですが、組込みのボードでは100KB未満しかメモリが積んでないボードも当然のようにあるため、そういった環境でもあまり機能を削らずにmrubyを動かすための改良を紹介する予定です。

Hitoshi HASUMI Firmware programming with mruby/cはmruby/cの話です。mruby/cはmrubyよりもさらに簡略化して小さいボードでも動かせるようにしたもので、今回の発表はそれを実際の酒造り(!)の現場のIT化に利用したものだそうです(十旭日などで知られている旭日酒造さんだそうです)。実践的な話が期待できそうです。

Uchio KONDO How Ruby Survives in the Cloud Native Worldは、クラウドネイティブな世界でもRubyの活用をすすめるべく、コンテナやコンテナオーケストレーションツールをRubyで作る話になるそうです。この辺の話ですとRubyをどう使うか、という方向が多そうですが、あえてRubyでコンテナやオーケストレーションツールを作る方向なのが興味深いです。

MATSUMOTO, Ryosuke Design pattern for embedding mruby into middlewareは、インターネットのサービスのミドルウェアにmrubyを組み込む際の設計と実装を一般化して、デザインパターン化してみるという試みについての発表です。

Thiago Scalone 20k MRuby devices in productionはRubyKaigi 2014でも紹介してくれたRuby+mrubyでできたPOSのサービスについて、そこでできてた課題や解決、またmrubyのメリットなどの紹介になる予定です。あれから4年もたっているんですね。4年間続けるだけでも大変だったと思うので、そこで得た知見はたいへん貴重なものとかと思われます。

Takeshi Watanabe LuaJIT as a Ruby backend.はLua用のJITコンパイラであるLuaJITにあるJITモジュールを、mrubyのJITコンパイラとして使おうというものです。LuaJITはJITコンパイラとして定評のあるものなので、先述の通りvladの発表のmrubyネタ同様、こちらも気になりますね。

i110, Kazuho Oku How happy they became with H2O/mruby, and the future of HTTPはH2O/mrubyの発表です。H2OはHTTP/2にも対応したWebサーバで、標準でmrubyを組み込めるようになっています。この発表では、H2Oとmrubyを使ったサーバー運用の実例や、新機能について紹介される予定です。

その他の処理系とその周辺

CRuby、mrubyと来ればJRubyも気になるところですが、eregonのTruffleRubyの発表の他にも、Thomas E Eneboのトーク、JRuby 9.2 and Rails 5.xがあります。こちらは先日ついにリリースされたJRuby 9.2についての発表です。9.2はCRubyの2.5互換のもので、Rails 5.x系にも対応しているそうです。JRubyもちゃんと開発が続いていてすごいですよね。

また、Ruby処理系とはちょっと違いますが、Sameer Deshmukh Ferrari Driven Development: superfast Ruby with RubexはRubyっぽい文法でRubyの拡張ライブラリが書けるRubexの話ですね。カンタンな書き方からGILの外し方まで、Rubexの使い方を説明するトークになりそうです。Ferrariに関係するのかどうかはちょっとよくわかりません(要するに速い、ということ?)。

さらに、Ruby互換ではありませんが、Stan Lo What would your own version of Ruby look like?は昨年に引き続いての自作言語Gobyの紹介です。昨年からの進捗報告とあわせて、新しい言語を作る上での設計方針や開発指針などについても発表されるそうです。

自分の言語を作るという発表としては、Masatoshi SEKI extend your own programming languageがあります。これはMinRubyを使って今のRubyにない機能を追加していくというものです。

アプリケーション・ライブラリ

さて、Rubyで書かれたライブラリやアプリケーションの紹介枠(自慢枠)です。

Thibaut Barrère Kiba 2 - Past, present & future of data processing with Rubyは、Rubyで書かれたETLツールで、名前は「牙」からとったもののようです。この発表では、Kibaの発端から、最近リリースされた新バージョンであるv2での改良点について紹介されるそうです。

Genadi Samokovarov Implementing Web Consoleはブルガリアの方で、Webブラウザ越しにサーバ側で動くRubyと対話できるようになるweb-console gemの作者が自らその実装について紹介してくれます。web-console gemはRailsでも使われているのでご存知の方も多そうですね。

Vladimir Dementyev One cable to rule them allは指輪物語っぽいタイトルですが、リアルタイムWebをRubyでも実現したいんだけど現状難しいところをどうやってクリアするか、ということで、自作のgemの話も交えながらその方法を紹介してくれるそうです。

Kirk Hainesは昔からのRubyユーザーで、1.8.6のメンテナーでもあった方ですが、今回のIt’s Rubies All The Way Downは、ふつうはWebサーバやproxyなど、他の言語で作られたツールと組み合わせて使うような場面でも、100%上から下までRubyを使ってサービスを作ってみよう、という発表です。ネタや教育用としては面白そうですが、果たして実用になるのか、そもそもメリットがあるのかも含めて気になるところです。

Kenichi Kanai Ruby code from the stratosphere - SIAF, Sonic Pi, Petalは発表中にプログラミングするものではない方のLive Codingの発表ですね。2017年の札幌国際芸術祭(SIAF 2017)にて、成層圏気球と通信して演奏を行う「宇宙モエレ」(モエレはモエレ沼のモエレです、といっても時計台の鐘がなる札幌の市民じゃないと通じないかも)というプロジェクトがあったそうなのですが、そのために開発したRuby製ミニ言語Petalと、それを使った作品の紹介になるかと思います。

Eric Hodel, Ezekiel Templin Devly, a multi-service development environmentはFastlyで使っている、様々な言語で書かれた様々なサービス用の開発環境を提供するツールDevlyの紹介になります。もちろん開発環境といっても個人の好みなどもある一方で、そのためのツールをチームとして共有しつつどう育てていくか、といったあたりの話が興味深いです。

Shugo Maeda Build your own toolsは「自分で使うツールは自分で作ろう」という、選考チームのなかでも「メッセージ的にはすごく基調講演っぽい」ということで話題になったものです。とりわけ最近の RubyKaigi は、自分が作っているプロダクトを紹介するトークが好まれている傾向がある(逆にすごいツールでも開発者じゃない人の発表だと採択されづらい)わけですが、そんなRubyKaigiならではの、鮮やかなメッセージ性を持ったトークになる期待が高まります。

Julian Nadeau Scaling Teams using Tests for Productivity and EducationはShopifyの方による発表で、アプリケーションのスケーラビリティとかテストの書き方とかの話かと思いきや、チームが急拡大する際にチームの共有知識がロストしていくのを防ぐため、「testable best practices」としてのテストを導入して、チームのうまく育てていこう、というものだそうです。視点が面白いですね。

Anton Davydov Architecture of hanami applicationsは、昨年に引き続きHanamiに関する発表ですが、今年はアーキテクチャとかパターンとかに寄った話になりそうなので、Rails使いの人にも参考になるかもしれません。

Maciej Mensfeld Karafka - Ruby Framework for Event Driven ArchitectureはApache Kafkaをベースにして、Rubyでイベントドリブンなアプリケーションを作るためのフレームワーク、Karafkaの紹介です。発表自体はKafkaのことは知らなくても大丈夫(Kafkaの簡単な紹介も含まれる)そうです。関係ないけどKarafkaはクラフカ(Krówka)とかクラクフ(Kraków)とかけているのかと思ったら、Wikipediaによればポーランド語で「カラフェ」のことなんですね。それであのアイコンだったのか。

Piotr Murach TTY - Ruby alchemist’s secret potionは、Rubyでターミナルアプリを作るためのフレームワーク的なツールキットTTYの紹介です。20個ほどのTTY-*という名前のさまざまなGemsを開発している作者が、基本的な使い方から簡単なゲームといったアプリの作り方まで解説する予定です。Piotrは以前から日本に来たがっていたそうで、無事に参加できてよかったですね。

Yuta Kurotaki bancor: Token economy made with Rubyは、Bancor Protocolを実装したRubyGem、Bancorの紹介です。バンコールプロトコルはスマートトークンの価格決定のためのものですが、Bancor gemはスマートトークンなしにその価格決定のアルゴリズムを使えるようにするものだそうです。発表自体では、gemの紹介に加えてトークンエコノミーについても解説されるそうです。

Masataka Kuwabara A parser based syntax highlighterは、シンタックスハイライトするためのIro gemとそれを使ったvimのプラグインの紹介です。Iro gemもRipperを使った正攻法のツールですね。

Rubyの理解を深める

自作プロダクトの紹介ではなく、Rubyについて深い説明をするセッションもあります。

Noah Gibbs Faster Apps, No Memory Thrash: Get Your Memory Config Rightはメモリの話ですね。GCについて、その基本的なしくみやチューニング方法、またmallocライブラリの違いなどについての紹介になる予定です。

また、処理系の話というと語弊があるかもしれませんが、Emma Haruka Iwao Exploring Internal Ruby Through C Extensionsは、Cの拡張ライブラリを書くことでCRubyの実装について理解を深めよう、というセッションなので、ここで紹介してみました。いちおうCプログラミングには詳しくなくても大丈夫、とのことなので、Rubyの実装に興味があれば聞いてみるとよいかもしれません。

科学計算、機械学習

今年も科学計算系の発表がいくつか採択されています。

Naotoshi Seo Fast Numerical Computing and Deep Learning in Ruby with CumoはCUDAを使ったRubyの数値演算ライブラリCumoの紹介です。同じくPrasun Anand High Performance GPU computing with RubyもCUDAを使うライブラリRbCUDAなので、双方の違いが気になるところです(私はまったく分かってません)。

Kenta Murata, Yusaku Hatanaka Deep Learning Programming on Rubyは、昨年はPyCallの発表をしたKenta MurataがYusaku Hatanakaさんとともに、PyCallのようなブリッジなしで機械学習をするべく、Apache MXNetとRed Chainerを使ったRubyでの機械学習の発表となります。

特別セッション

今年は最後のとりにTRICKが来ます。TRICK 2018 (FINAL)です。TRICKというのはIOCCCのRuby版みたいなもので、すごく役に立たないRubyのプログラムを見てみんなで喜ぶイベントです。なおTRICKは今年で第3回にしてFINALです。FINALというのは文字通りの意味だそうですが、果たしてどんな素晴らしく(役に立たない)作品が応募されたでしょうか。たのしみですね。

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

おわりに

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

今年もありがたいことに大変レベルの高いというか、「これは去年だったら通していたんじゃないかな……」という発表でも落としてしまったものもあったかと思います。ほんとにすみません。その分残った発表は期待度も高いということで、ぜひともご期待ください。それでは会場でお会いしましょう。

著者について

高橋征義

RubyKaigi 2018 Organizer。