こんにちは。STORES 予約 で開発エンジニアをしている矢作です。
ぼちぼちアップデートするかなということで先日、 STORES 予約で利用しているRubyのバージョンを3.2から3.3へとアップデートしました。
またRubyのアップデートとは別軸で近いタイミングでRailsも7.1へのアップデートも行われ、Ruby/Railsどちらも最新のバージョンで稼働しているアプリケーションになりました。
私がメインで関わったのがRubyのアップデート作業であるため、以降はRubyのアップデートによる改善をピックアップします。
アップデートにより得られた改善
Ruby3.3は3.2から言語機能に関する大きな差分はなく、内部的な改善がメインとなっています。
https://www.ruby-lang.org/ja/news/2023/12/25/ruby-3-3-0-released/
また、変更詳細につきましては合わせてこちらもお読みいただければ理解が深まると思います。 product.st.inc
Ruby3.3へのアップデート後にDatadog APMでシステムのメトリクスを確認したところ、レスポンスタイム、ActiveRecordの初期化処理に要した時間においてパフォーマンスの改善を観測出来ました。
特に後者の改善が顕著に現れており、これはYJITのパフォーマンスが改善されたことによる影響かなと思っています。おそらくその結果としてレスポンスタイムにも改善が見られていそうです。
レスポンスタイム
ActiveRecordの初期化処理に要した時間
メトリクスの出所はActive Support Instrumentation
のinstantiation.active_record
になります。
Railsでdd-trace-rb gemを利用してDatadogのAPMを活用している場合、レスポンスタイム(rack.request
)と共に現在ではデフォルトで収集されるメトリクスになります。
https://railsguides.jp/active_support_instrumentation.html#instantiation-active-record
Railsアプリケーションにおいて、ActiveRecordの初期化処理は多数行われますのでこれはとても嬉しい改善ですね。
STORES 予約 では既にYJITを有効化しているため、こちらの恩恵にスムーズにあずかることが出来ました。 product.st.inc
終わりに
前述したとおりRuby3.2から3.3は言語機能に関する大きな差分がないため、実際に STORES 予約 においてもアップデート作業自体は単にバージョンの指定を変えるだけで済んでおります。
低リスクにシステムのパフォーマンス改善が見込めますので、まだRuby3.2以下で動作しているシステムの運用に携わっている方は明日にでもアップデートしてしまうことをオススメします!