メジャーバージョンアップであることからもわかるように、非互換な変更が入っています。この日互換な変更は@krororoさんが作ってくれた次のPRによるものです。
Breaking: Make request_store an optional dependency by krororo · Pull Request #296 · gazay/gon
gonは、gon.foo = 'bar'のように値をセットすると、内部でrequest_storeを使って値を格納していました。昔のRailsアプリケーション開発において、リクエストごとに自動でリセットされるグローバルな値を利用したい時はrequest_storeがほぼ唯一の選択肢だったように思います。しかしRails5.2からはRails公式の機能であるActiveSupport::CurrentAttributes を利用できるようになっています。上記のPRはrequest_storeの依存を消してActiveSupport::CurrentAttributesを利用するためのものです。
何が嬉しいのか
安定性が増すと思っています。現時点でのrequest_storeは内部でファイバーローカル変数が使われています。このためリクエスト処理中にFiberを使うコードがあるとgonの挙動はおかしくなる可能性があります。
ファイバーローカル変数って何?という人はこちらを参照してください。
Thread.current[:hoge]はスレッドローカル変数を参照していると思いきや実際はファイバーローカル変数だった - おもしろwebサービス開発日記
ActiveSupport::CurrentAttributesも登場時はファイバーローカル変数を利用していました。しかしRails7.0からは自分が利用しているサーバの種類に合わせてファイバーローカルとスレッドローカルを切り替えられるようになり現在に至っています。
そのため現時点では、Rails7.0以上を利用しているのであればActiveSupport::CurrentAttributesを利用したほうが安定するはず。ということでこのPRをマージしました。
懸念点
gonを利用しているユーザの大半は自分がrequest_storeを使っているのかActiveSupport::CurrentAttributesを使っているのか特に意識することはないと思います。そのためRails5.2以上を利用していてActiveSupport::CurrentAttributesを利用できるのであればそれを利用し、そうでない場合は明示的にgem 'request_store'をGemfileに書いてもらうという仕様にしました。
最近のRailsでrequest_storeを明示的に使いたいケースはほぼないと思いこのようにしたのですが、もし不都合があったらぜひ教えてほしいです。
