Upgrade to Pro — share decks privately, control downloads, hide ads and more …

allow_retry と Arel.sql / allow_retry and Arel.sql

allow_retry と Arel.sql / allow_retry and Arel.sql

omotesando.rb#113 の登壇資料です。
https://omotesandorb.connpass.com/event/366283/

スライドに掲載したURL:
Rails アプリケーションの設定項目 - Railsガイド
https://railsguides.jp/configuring.html#リトライの振る舞いを設定する

Rails の隠れた堅牢性:SELECTクエリが自動リトライされる仕組み https://blog.smartbank.co.jp/entry/2025/06/05/110000

Add retryable option to Arel.sql with bind parameter support - rails/rails#55586
https://github.com/rails/rails/pull/55586

Avatar for Shintani Teppei

Shintani Teppei

September 04, 2025
Tweet

More Decks by Shintani Teppei

Other Decks in Technology

Transcript

  1. 2. Arel.sql で retryable フラグをつける(プレースホルダ無) • Arel.sql で囲って retryable オプションを渡し、リトライ可能であることを

    明示する • 最新バージョン(8.0.2.1)では使えず、Rails Edge(rails/rails の main ブランチ)で利用可能 • ただしプレースホルダは使えないので要注意。プレースホルダを使うと リトライされません
  2. 3. Arel.sql で retryable フラグをつける(プレースホルダ有) • Arel.sql で囲って retryable オプションを渡し、リトライ可能であることを

    明示する • https://github.com/rails/rails/pull/55586 がマージされれば Rails Edge で 利用可能 ◦ omotesando.rb 登壇駆動でパッチを作りました! • プレースホルダは使いたいので個人的にはこれがマージされてほしい
  3. まとめ:Rails で LIKE 演算子を自動リトライさせるには 1. Arel を使って組み立てる a. 今自動リトライさせるならこれしかない 2.

    Arel.sql で retryable フラグをつける(プレースホルダ無) a. 最新バージョンでは使えないが、次のバージョンから利用可能に 3. Arel.sql で retryable フラグをつける(プレースホルダ有) a. パッチが取り込まれればいつか利用可能に、取り込まれるかどうかはわからない 個人的には最新バージョンでは LIKE を使ったクエリの自動リトライを諦めて、 次バージョン以降の Arel.sql を使った書き方で対応するのが現実的 Arel ジャンキーの方は今のバージョンが Arel を布教するチャンスですよ