view_component 4.11.0 リリース:`render_in` シグネチャのRails互換性対応
view_component 4.11.0 では、render_in メソッドのシグネチャを Rails #50623 との互換性を保つために更新しました。バージョン番号の採番は MINOR のインクリメントに留まり、破壊的変更を含まないリリースです。
背景
今回のリリースの主な動機は、Railsのレンダリング内部との互換性確保です。Rails #50623 では render_in の呼び出し規約に変更が加えられており、view_component 側のシグネチャがこれに追従する必要がありました。render_in は ViewComponent がRailsのレンダリングパイプラインと統合する際の重要なインターフェースであり、シグネチャの不一致はレンダリングエラーを引き起こす可能性があります。
技術的な変更
変更の実体はシンプルで、render_in のシグネチャに **_ を追加することで、Railsが渡す余分なキーワード引数を無視できるようになります。
CHANGELOGには以下のエントリが追加されています:
Update
render_insignature to accept**_for compatibility with Rails #50623.
バージョン定数は lib/view_component/version.rb で MINOR を 10 から 11 にインクリメントし、Gemfile.lock および各 gemfiles/*.gemfile.lock のバージョン表記もすべて 4.10.0 から 4.11.0 に更新されています。また、gemfiles/rails_main_head.gemfile.lock が新規追加されており、Rails 8.2.0.alpha ブランチに対するロックファイルのサポートが加わっています。
アロケーションテスト(test/sandbox/test/rendering_test.rb)では、Ruby 4.1 系における許容アロケーション数の上限が範囲として調整されています:
-
test_render_inline_allocations:"4.1" => 69..70→"4.1" => 69..158 -
test_render_collection_inline_allocations:"4.1" => 71→"4.1" => 71..160
この変更は、Ruby 4.1 の異なるビルド環境間でアロケーション数に幅があることを許容するための調整です。
設計判断
`_` によるキーワード引数の受け捨て**という手法は、インターフェースの後方互換性を維持しながらRails側の変更に追従する最小限のアプローチです。Railsが将来さらにキーワード引数を追加した場合にも、view_component 側の修正なく対応できます。
MINOR バージョンのインクリメントを選択したことは、この変更がAPIの追加・拡張(**_ の受け入れ)に相当するという判断を示しています。既存の render_in 呼び出しは引き続き動作するため、利用者側の修正は不要です。
まとめ
view_component 4.11.0 は、Railsのレンダリング内部変更に対する互換性レイヤーを最小限の修正で提供するリリースです。**_ によるシグネチャ拡張という小さな変更が、Railsの進化に追従しながら利用者への影響をゼロに抑える設計の一例となっています。