LIVESENSE ENGINEER BLOG

リブセンスエンジニアの活動や注目していることを発信しています

RubyKaigi 2023直前予習! 用語と関連発表まとめ

普段アルバイト事業部で主にバックエンドの開発をしている@ayumu838です。
いよいよ今週に開催が迫ったRubyKaigi2023ですが、それに向けて気になった単語やその周辺の用語を軽く振り返れるようにまとめてみました。
間違った記述や、追加してほしい用語などあれば、教えていただけると嬉しいです。

Rubyの実装関係

CRuby

CRubyは、Rubyの標準実装です。
単にRubyと言っている場合は、CRubyのことを指していることが多いです。
MatzによるRuby interpreterの実装なのでMRI(Matz Ruby Interpreter)とも呼ばれます。 github.com

mruby

mrubyは、Rubyの軽量実装の一つで、組み込み向けに作られています。
構文はISO規格に準拠していますが、パターンマッチングは使えないなど、Rubyとは異なる部分もあります。
mrubyに関わる発表は初日のUTF-8 is coming to mruby/cにあります。
github.com

JRuby

JRubyは、Rubyの実装の一つで、JVM上で動作します。
JRubyは、Rubyの構文だけではなく、JavaのクラスをRubyのクラスとして扱えるなどの特徴があります。
JRubyに関わる発表は2日目のJRuby: Looking Forwardにあります。
github.com

実行環境関係

JIT(コンパイラ)

JITはjust in timeの略で、JITコンパイラは実行時にコンパイルをするコンパイラのことです。
プログラムをインタプリタで実行するのと並行して、実行時にコンパイルを行うことで、実行速度を向上させることができます。

MJIT

MJITはRuby2.6で搭載されていたJITコンパイラです。
2020年リリースされたRuby3.0時点では、MJITを有効にすることで、OptcarrotベンチマークではMJIT有効前に比べて2倍ほど速くなりました。
しかし、改善が期待できるのは多くの時間を少数のメソッドで消費するゲームなどのプログラムで、Railsなどのさまざまなメソッドを呼び出すようなプログラムでは、あまり効果が期待できません。
2023年5月現在ではすでにRuby本体のmasterからは削除され、RJITに置き換えられています。 参照:RJIT: RubyでRubyのJITコンパイラを書いた

YJIT

そこで、Railsなどのさまざまなメソッドを呼び出すようなプログラムでも効果が期待できるように、Shopifyの開発者が開発したJITコンパイラがYJITです。
YJITが初めて搭載されたRuby3.1では、まだ実験的機能ながらrailsbenchでは最大22%ほど高速化可能となっています。
2022年にリリースされたRuby3.2では、YJITはrustでコンパイルするように書き換えが行われ、さらに高速化しています。
こちらは去年のRubyKaigi2022で発表されたこともあり記憶しているRuby開発者は多いのではないでしょうか?
YJITに関わる発表は2日目のFitting Rust YJIT into CRubyOptimizing YJIT’s Performance, from Inception to Productionにあります。

ライブラリについて

drb(dRuby)

drbは、分散オブジェクトプログラミングのためのRuby標準ライブラリです。
Rubyプロセスから別のRubyプロセスにあるオブジェクトを呼び出すことができます。
ただし、その性質上evalを使っているため、オープンなネットワークに公開することはセキュリティ上推奨されていません。
github.com

RuboCop

RuboCopは、Rubyのコードを静的解析して、コーディングスタイルをチェックするツールです。
おそらくRuby開発者なら誰もが一度は使ったことがあるのではないでしょうか。
RuboCopに関わる発表は初日のRuboCop's baddest copと2日目のFix SQL N+1 queries with RuboCopにあります。
github.com

Ractor

Ractorは、Ruby3.0で搭載された並行処理のための機能です。
元々はGuildという名前で開発されていたものだったのですが、2020年にRactorに改名されました。
Ractorに関わる発表は初日の"Ractor" reconsideredと2日目のLearn Ractorにあります。

RBS

RBSは、Rubyの型情報を記述するためのDSLです。
Ruby3.0で標準搭載され、拡張子が.rbsとなり.rbとは別ファイルで型注釈をRubyに導入できます。
RBSに関わる発表は3日目のGradual typing for Ruby: comparing RBS and RBI/Sorbet,Let's write RBS!,Parsing RBSにあります。
github.com

Steep

Steepは、上記のRBSを使って型チェックを行うツールです。
型エラーの検知だけではなく、エディタ上で型エラーの表示の補完などもできるようになります。
元々RBSはSteepの型注釈用の記述だったみたいですが、それが抜き出されてRuby本体に搭載されるようになりました。
github.com

その他

ReDos

ReDosは、正規表現の分岐処理の際にバックトラックが増えてしまう脆弱性を利用した攻撃のことです。
Ruby3.2では正規表現のマッチングに修正が入り、ReDosの脆弱性がおおよそ解決されたようです。
詳しくはRubyKaigi2023の初日のMake Regexp#match much fasterと2日目のEliminating ReDoS with Ruby 3.2で発表されるのではないでしょうか。

REPL

REPLとは、Read-Eval-Print-Loopの略で、対話型のプログラミング環境のことです。
Rubyにおいてはirbが標準で使えるREPLです。(Rails開発者ならbinding.pryで使うpryも馴染み深いと思います)
最近はirbのアップデートが多く、Ruby3.1からはオートコンプリート機能やドキュメント表示機能が追加されました。
REPLに関わる発表は初日のPower up your REPL life with typesにあります。

最後に

普段何気なくRailsでプログラミングをしていますが、RubyKaigiの発表のタイトルや概要だけみても知らない単語が多く、いかに自分が触れている範囲が限定的なのか実感しました。
そんな普段触れていない領域に触れ、刺激をもらうことができるのがRubyKaigiの魅力だと思います。

株式会社リブセンスからは転職ドラフトがスポンサーをしているためブースを出します! 様々なグッズが用意されているので是非お越しください。

それでは、RubyKaigiでお会いしましょう。