はじめに
私が所属しているチームでは「Schooビジネスプラン管理ツール」という主に法人向けに Schoo を利用いただく為のSaaSを開発しています。
以前の記事ではRubyとRuby on Rails(以降Rails)のバージョンアップに関する記事を公開しましたが、今回はその「Schooビジネスプラン管理ツール」でRuby3.4、Railsを8.0にバージョンアップし、本番環境でYJITを有効化しましたので、その効果を紹介します。
環境
YJITを有効化した時の環境は以下の通りです。
- Ruby : 3.4.2 (3.3.1からのアップデート)
- Ruby on Rails : 8.0.2 (7.1.3からのアップデート)
- YJITのオプションはデフォルトの状態
YJIT有効化
Ruby 3.3 以上でかつ Rails 7.2 以上であればデフォルトでYJITが有効になるので、特に何も設定する必要はありません。
ただし、Rails 7.1以下のアプリケーションでバージョンアップした際などはload_defaultsを7.2以上の値に設定する必要があります。
今回「Schooビジネスプラン管理ツール」ではRails 8.0にバージョンアップしたので、以下のように設定しました。
config.load_defaults 8.0
また、実際にYJITが有効になっているかは以下で確認できます。
Rails.configuration.yjit
=> true
YJITの効果
レスポンス時間の改善

アプリケーション全体のレスポンス時間です。リリース直後から改善されていることがわかります。
| パーセンタイル | before | after | 改善割合 |
|---|---|---|---|
| p50 | 10.1ms | 7.4ms | 26.7% |
| p90 | 24.3ms | 21.2ms | 12.8% |
| p95 | 47.5ms | 43.9ms | 7.6% |
特にp50では26.7%の改善があり、とても大きな効果が出ていることがわかります。
リクエスト数が1番多いエンドポイント
| パーセンタイル | before | after | 改善割合 |
|---|---|---|---|
| p50 | 17.1ms | 13.5ms | 21.1% |
| p90 | 24.0ms | 20.9ms | 12.9% |
| p95 | 26.0ms | 24.9ms | 4.2% |
こちらも全体的にレスポンス時間が高速化し、かなりのパフォーマンス改善が達成できています。
リクエスト数がその次に多いエンドポイント
| パーセンタイル | before | after | 改善割合 |
|---|---|---|---|
| p50 | 7.09ms | 3.92ms | 44.7% |
| p90 | 8.79ms | 5.30ms | 39.7% |
| p95 | 9.36ms | 4.61ms | 50.7% |
このエンドポイントはもともと一桁msとかなり爆速だったのですが、それが更に改善されて、WEBサイトのレスポンスタイムとしてはあまり見たことがないような数値にまで速くなりました。
メモリ使用量
| before | after |
|---|---|
| 3.16GiB | 3.30GiB |
アプリケーション全体でのメモリ使用量は約4%上昇していました。
YJITはパフォーマンスを改善する一方でメモリを多く使用するという性質を持ちますが、ここまでメモリ使用量を抑えることができているのは、Ruby 3.3での改善が大きいのではないかと思います。
またCPU使用率については、リリース前後で大きな変化は見られませんでした。
結果としてインフラコストを増やすことなく、純粋にパフォーマンスだけを向上できた形になります。
まとめ
プロダクトコードに手を加えることなく、Ruby / Railsのバージョンアップを行っただけでアプリケーション全体としてかなりのパフォーマンスを改善することができました。
また、本記事の執筆時点でリリースから数ヶ月以上経過していますが、これに直接起因した不具合や問題は全く発生していません。
今回の結果は Ruby / Railsのバージョンを追従し続ける ことに大きな価値があるということを改めて証明できたと考えています。また、同時にYJITを開発したRubyコミュニティー、コミッターの皆様に深く感謝申し上げます。
今回の結果が、皆さんのバージョンアップのモチベーションとなれば幸いです。
Schooでは一緒に働く仲間を募集しています!



