本当は長くもないんだけど、要は「–yjitをどこにつければいいのかわからないので調査した」という話。
長くなくてもよかった。
結論からいうとYJITを有効にするには以下の三つ。
- configureオプションに「–enable-yjit」つけてビルド
- 環境変数で「RUBYOPT=’–enable-yjit’」
- 環境変数で「RUBY_YJIT_ENABLE=1」
ここから先は読まなくてもいいです。
ことの始まり
YJITはJITコンパイラの一つで、2.6から入っているMJITとは全く別もの。Shopifyが開発したやつ。メインラインにマージされたはいいけどまだデフォルト有効ではない。
ただこれ有効にするとすごく早くなるらしい。すっげー!Railsも最新のRuby対応したし自分のアプリもRails7対応したしやってみっかー!ということでYJIT有効大作戦を始めた。
有効にする方法がわからない
わからなかった。でもそこはShopifyがちゃんと書いてくれていた。
Docker
Railsで使うのでDocker Imageにする必要があったので、Rubyコンパイル時にYJITを有効にしたDocker Imageを作成、pushした。
ただこんなことしなくてもRubyの公式イメージもってきて「RUBY_YJIT_ENABLE=1」すれば有効にできるっぽいのであとで試してみる予定。
まとめ
今回はYJITが有効化されたという状況までを作りたかったのでいったんここまで。
パフォーマンスがこれくらい早くなったとかはあちこちでいろんな人がやってるので、僕はちょっと違う切り口で記事書こうかな。
困ったら英語の公式を読むべし。
参考リンク
調査してる段階で以下のリンクを参考にさせてもらいました。
偉大な先駆者に感謝っ。
- プロと読み解くRuby3.1NEWS / クックパッド開発者ブログ
- Ruby 3.1正式リリース。Shopify開発のJITコンパイラ「YJIT」をメインラインにマージ / publickey
- Ruby 3.1.0リリース / Ruby公式
- YJIT: Building a New JIT Compiler for CRuby / Shopify Engineering
- Try Out YJIT for Faster Rubying Shopify Engineering