💎

Rails + Ruby 3.3.0でYJITを使ってみる

2024/01/10に公開

Rubyインストール時にRust環境が必要

Ruby 3.3.0では簡単にYJITが選択できるようになっているのですが、前提条件としてRubyビルド時にRustコンパイラがインストールされている必要があります。Rustが入っていない場合、YJITが使えないRubyがビルドされてしまうので注意しましょう。
これはrbenvでRubyをインストールする場合も例外ではありません。Macの場合は次のような手順で事前にRust環境をインストールしておきます。

$ brew install rustup-init
$ rustup-init
$ exec $SHELL -l

$ rbenv install 3.3.0

rubyを--yjitオプション付きで実行するとYJITが有効になります。バージョン情報を確認すると「+YJIT」と表示されて、YJITが有効になっていることが確認できます。

% ruby -v --yjit
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +YJIT [arm64-darwin23]

RailsでYJITを有効化する方法

--yjitオプション以外の方法として、プログラム実行時にRubyVM::YJIT.enableとすることで実行中動的にYJITが有効化されます。
Railsの場合、config/initializersに置くと良いです。

config/initializers/enable_yjit.rb
if defined? RubyVM::YJIT.enable
  Rails.application.config.after_initialize do
    RubyVM::YJIT.enable
  end
end

これはRails 7.2でデフォルトの挙動になる予定です。
https://github.com/rails/rails/pull/49947

Discussion