食べチョク開発者ブログ

食べチョクエンジニアによるプロダクト開発ブログ

食べチョクでは Ruby3.3.1 + YJIT の運用を開始し、サイトが10%高速化しました

皆さんこんにちは、ビビッドガーデンCTOの西尾です。

食べチョクでは2024年5月23日より、Ruby3.3.1とYJITの運用を開始しました。 その結果、サイト全体のレスポンスが10%ほど高速化されましたので、詳細をご報告いたします。

サイト全体のパフォーマンスが10%高速化

以下は食べチョクの商品詳細ページのパフォーマンスです。

商品詳細ページのパフォーマンスが10%高速化

食べチョクはECサイトであり、商品詳細ページが最もよく見られるページとなっています。 このページのレスポンスが150〜160msだったところが、140ms程度まで改善しました。

最もよく見られるページが10%高速化したことは、すなわちサイト全体のパフォーマンスが10%高速化したということです!

商品一覧ページのレスポンスも改善

商品一覧ページのレスポンスも改善しました。 もともと300ms近くだったレスポンスタイムが、Ruby3.3.1 + YJITの導入により250〜270msまで改善しました。

商品一覧のパフォーマンス

ただし、食べチョク社内ではGETレスポンスタイムを200ms以下にしようという取り組みを続けており、このページのレスポンスタイムはまだ満足のいくものではありません。 引き続きパフォーマンス改善に努めてまいります。

導入にあたり発生したあれこれ

YJITの導入は以前から社内インフラチームで検討しており、Ruby3.3系になったら導入しようと計画していました。 しかし、Ruby3.3.0では動作が不安定になるという問題が発覚したため、導入を見送っていたのがあります。

この問題の関連Issueは https://bugs.ruby-lang.org/issues/20085https://github.com/ruby/ruby/pull/9371 です。

2024年4月23日にリリースされたRuby3.3.1でこの問題は修正されましたが、今度はbootsnapに関する不具合が発覚し、Railsが立ち上がらないという問題に直面しました。 関連Issueは https://bugs.ruby-lang.org/issues/20450 です。

このコメントにあるようにパッチを適用することでRuby3.3.1でも動作するようになりました。 具体的には以下コマンドでRubyのインストールをしなおしました。

rbenv install -v --patch 3.3.1 < <(curl -s https://raw.githubusercontent.com/havenwood/rvm-1/696d4f652864109a0cffff62e30a9e405fb0636a/patches/ruby/3.3.1/fix_bootsnap.patch)

パッチを当てることでRuby3.3.1でも動くようになったのですが、このままパッチをあててまで本番リリースするのか、急いでリリースしなくても次のリリースまで待てばいいんじゃないの? といった声はメンバーからあがりました

ただ、今回はYJITを有効化するとサイトのパフォーマンスが10%向上する! みたいな記事をちらほらみかけ、Rubyを変えるだけでパフォーマンスがあがるんだから導入しない理由はない! という話をしたところ社内エンジニアの納得も得られたので、Ruby3.3.1 + YJIT導入に踏み切りました。

パフォーマンスがあがるといったわかりやすい理由があると、バージョンアップのモチベーションにつながるのだなと感じました。

まとめ

Ruby3.3.1 + YJITを有効化することで、食べチョクのパフォーマンスは10%高速化しました。 Railsを使っている皆さまも、ぜひYJITの導入を検討してみてください。

これからも食べチョクのさらなるパフォーマンス改善に取り組んでまいります。