ViewComponent 4.7.0 リリース:スロット先読み時のキャッシュ不整合を修正
ViewComponent 4.7.0 がリリースされました。このリリースでは、スロットに render_in より前にアクセスした際に発生するコンテンツキャッシュの陳腐化バグが修正されています。
背景
render_in はViewComponentがテンプレートに描画される際に呼び出されるメソッドで、スロットのコンテンツもこのタイミングで確定することが期待されます。しかし、スロットに render_in より先にアクセスすると、その時点の(まだ確定していない)内容がキャッシュされ、実際の描画時に古いキャッシュが参照されてしまう問題が存在していました。
この問題は、コンポーネントのプレビューやテストといったシナリオで、期待通りのコンテンツが描画されないケースとして表面化しうるものです。
技術的な変更
バージョン番号の更新は lib/view_component/version.rb 内の MINOR 定数を 6 から 7 に変更することで行われ、Gemfile.lock および Rails 7.1・7.2・8.0・8.1・main の各 Appraisal 用ロックファイルにも 4.7.0 が反映されています。
lib/view_component/version.rb の変更は以下の通りです:
変更前:
module ViewComponent
module VERSION
MAJOR = 4
MINOR = 6
PATCH = 0
PRE = nil
変更後:
module ViewComponent
module VERSION
MAJOR = 4
MINOR = 7
PATCH = 0
PRE = nil
CHANGELOGには「Fix stale content cache when slots are accessed before render_in」のエントリが追加されており、本リリースの変更内容はこのバグ修正のみです。
また、Gemfile.lock には nokogiri (1.19.2) のソースビルド向けエントリ(mini_portile2 依存を含む)が新たに追加されています。これはプラットフォームネイティブ版に加え、ソースからのビルドパスを明示的に記録するものであり、動作上の変更を伴うものではありません。
まとめ
ViewComponent 4.7.0 は、スロットと render_in のライフサイクルの一貫性を修正した単一バグフィックスリリースです。スロットのキャッシュ挙動に依存するコンポーネントを持つアプリケーションでは、アップグレード後に描画結果を確認することが推奨されます。