シンクロ・フード エンジニアブログ

飲食店.COMを運営する、株式会社シンクロ・フードの技術ブログです

RubyKaigi 2018 に参加してきました (@fohte)

基盤チームの川井 (@fohte) です。

2018 年 5 月 31 日 (木) 〜 6 月 2 日 (土) に仙台で開催された RubyKaigi 2018 に業務として参加してきました。
弊社はスポンサー枠ではありませんが、出張として宿泊費や交通費を負担していただいて参加しました。

今回は、印象に残ったセッションと、個人的に興味があった型にまつわるセッションについてご紹介します。

セッション紹介

Day 1 Keynote「箴言 Proverbs」

Matz ことまつもとゆきひろさんのセッションです。 今回は「ことわざについて話す」ということで、プログラミングをことわざで例えた話が中心でした。

初めに紹介されていた「名は体を表す」は、つまり命名は重要であるということです。
物事を十分に理解すれば命名が容易になることがある、ということを話されていて、なるほどと感心しました。

また、Ruby 2.5 で導入された Kernel#yield_self は何がしたいのかを表現しておらず、悪い例であると話されていました。
(これは考え直しましょうというチケット #14594 があり、alias として then を追加する変更が Matz によって発表前日に commit されたそうです。5 年ぶりの commit らしい。)

質疑応答の際に Ruby の型に関する質問があり、型があることで助かるケースはあるが、Ruby の言語仕様として型宣言が入ることはないと名言されておりました。

A practical type system for Ruby at Stripe.

Stripe 社内部で用いられている Sorbet という Ruby の type checker についてのセッションでした。

Sorbet は記事執筆時点では公開されていませんが、Web 上で実際に試せるページが用意されています。

Sorbet は C++ 製なため非常に高速で、社内では好評らしいです。 また、近々 OSS として公開する予定であり、公開時には 公式ブログ で通知するとのことでした。

Ruby Programming with Type Checking

発表者の @soutaro さんが製作されている Steep という Ruby の type checker についてのセッションでした。

Steep は Sorbet とは異なるアプローチをとっており、Sorbet は Ruby コード上で型を宣言しますが、Steep は専用の構文を用いた型宣言ファイルを用意するかコメントで型注釈をします。
また Steep は Ruby で実装されているため Sorbet よりも低速ですが、Ruby 2.6 で導入される予定の MJIT で高速化することを期待していると話されていました。

既存のプロジェクトに導入する際などに便利な型定義ファイルの雛形を生成する steep scaffold コマンドも用意されています。

しかし、ライブラリの型宣言はまだ自分で書いていく必要があったり、Hash の構造の型宣言ができなかったり、動的に定義されるメソッドは型チェックを行えないなどの問題があるとのことでした。

Type Profiler: An analysis to guess type signatures

Ruby commiter の一人である @mametter さんによる Ruby 3 の型システムについてのセッションでした。

既存の型システムとしては Steep, RDL, contracts.ruby, dry-types, RubyTypeInference, Sorbet などがありますが、代表として RDL という半静的 type checker について紹介されていました。

RDL は型検証を行うタイミングを指定でき、静的型チェックを無視して動的型チェックのみを行うようにすることもできます。
また、メタプログラミングもサポートしており、動的に生えるメソッドの型宣言もできます。

Steep のように型宣言がファイルで分かれているほうが良いが、メタプログラミングは難しいということで、RubyTypeInference のように型情報を推定する Type Profiler という構想が生まれました。
この推定された型情報は厳密なものではなく、推定結果を人間がチェックすることを想定した設計になっています。

型情報をプロファイリングするには、void 型の推定が困難なことや、TracePoint API を用いて動的に解析しようとすると非常に遅くなるという問題があると話されていました。

感想

RubyKaigi は今回が初参加でしたが、レポート記事や実況ツイートではわからない会場の雰囲気を味わえて非常に良かったです。
特に、今回は型システムにまつわる発表が多く、個人的に今非常に興味があるので、Ruby 3 に向けた型システムの構想を聞いたり懇親会などの場で参加者と話をできたりして面白かったです。

ぜひ来年も参加したいと思っています。


シンクロ・フードでは Ruby に詳しいエンジニアも募集しています。ご興味のある方は以下よりご連絡ください!