始めに

こんにちは、enzaプラットフォーム事業本部でSREチームのエンジニアをやっている橘田です。
本日から、RubyKaigiTakeout2021 が始まりました。
この記事では RubyKaigiTakeout2021 Day1 の午前の部の速報記事をお送りいたします。

TypeProf for IDE: Enrich Dev-Experience without Annotations

Ruby自体は静的型付のように型を指定しない言語であるが、静的型付言語のように型の保管を行えることができないのだろうか?
できると考えた mameさんは VSCode拡張 としての TypeProf の作成を行い紹介がされました
TypeProf は型推論に力を入れており、TypeProfで解析した型定義をVSCodeで型ヒントとして表示することができて、間違いなどを即座に確認することができる
これにより現代的な開発手法をRubyでも恩恵を受けることができるようになった。
Ruby では静的解析として以下のようなものがある

RBS:Rubyの公式型定義言語
TypeProf:Rubyの静的解析
Steep:Rubyの静的解析
Sorbet:Rubyの静的解析

今回は、TypeProfに関する詳しい話が行われましたが、TypeProfはRubyコードを型レベルで実行するようです。
TypeProfは実行をなぞって型を推論するので、呼び出すコードが必要となるようで、呼び出されないメソッドなどの検査はなかなか難しいようです。
IDEへのサポートも実施されており、現状ではVSCodeで使用できるようですが、他のIDEでも使用できるのが楽しみですね。
また TypeProf はRubyのParserを使用しているようですが、Parser周りで問題があることもわかってきており、Ruby自体のParserは書きかけ途中の構文の判定は難しく、また速度に関してもIDEのレスポンスとしては遅いために1秒以上かかる場合には解析を諦めるという形になっているようです
TypeProf 自体は Ruby3.1 で入ってくるようなので色々と試してみると楽しそうですね。

Why Ruby’s JIT was slow

Ruby2.6.8~Ruby3.0.0 のJITを使用すると Rails ではVMよりも遅くなってしまうっという問題から、なぜそのようなベンチマークになったのかっというのを洗い出していく内容でした。 内容としてはMJTだとコンパイルが遅くて最適化などのために何度もコンパイルを実施する必要があり、それが数分も続くなど大きなオーバーヘッドになっており、デプロイにかかる時間や競技プログラミングなどの日々の使われ方にも影響を与えることになってしまう。 現在、Rubyで使用できるJITに言及した後に、MJTのメンテナビリティに関して、ネイティブコードのデバッグの難しさ、最適化していくのにどうしていきたいかに関して現状考えている内容を聞くことができました Ruby のJIT としては、MJIT以外にも、MIR や YJIT などもあるようなので内容を確認できておくと良さそうです。

最後に

まだまだ、RubyKaigiは続きますが、この記事は一旦ここで終了です。
午後の速報記事も楽しみにしていただければ幸いです。
ドリコムでは一緒に働くメンバーを募集しています!
募集一覧はコチラを御覧ください!