Dalliのバージョンを4.x系に固定
Railsのテストスイートで発生した Dalli::Protocol::Binary の未定義エラーを回避するため、依存gemのバージョン制約を一時的に追加しました。Dalli 5.0.0でバイナリプロトコルが削除されたことが原因です。
背景
Dalli 5.0.0のリリースにより、Railsのテストが実行できなくなる問題が発生しました。Dalliはバイナリプロトコルを完全に削除し、メタプロトコルのみをサポートする方針に変更しています。
一方、Rails側のテストコード(activesupport/test/cache/stores/mem_cache_store_test.rb)では、テスト用のモッククラス UnavailableDalliServer が Dalli::Protocol::Binary を継承していました。Dalli 5.0.0への更新により、この基底クラスが存在しなくなったため、テストスイート全体が起動時にクラッシュする状況になりました。
#56721 でメタプロトコルへの移行作業が進められていますが、その修正が完了するまでの暫定措置として、本PRではバージョン制約を追加しています。
技術的な変更
Gemfile でdalliの依存関係に上限バージョンを設定しました。
変更前:
gem "dalli", ">= 3.0.1"
変更後:
gem "dalli", ">= 3.0.1", "< 5"
この変更により、bundle update dalli --conservative を実行してもDalli 5.x系はインストールされず、4.x系の最新版(現時点では4.3.2)が使用されます。Gemfile.lock も4.0.0から4.3.2へ更新されました。
バージョン制約は "< 5" という形式で記述されており、5.0.0以降のすべてのバージョンを除外しつつ、4.x系の更新は受け入れる仕様です。
設計判断
暫定的なバージョンピン という手法が採用されました。
PR本文では「While the fix is being discussed at #56721, temporarily pin the version to 4」と明記されており、これが一時的な措置であることが強調されています。アプリケーションコードを修正せずに依存関係の制約だけで問題を回避する判断は、以下の利点があります:
- テストスイート全体が動作不能になる緊急性の高い問題を即座に解決できる
- 根本的な修正(#56721)と並行して作業を進められる
- 本番環境への影響リスクを最小化できる
一方で、この判断にはトレードオフも存在します。バージョン制約を追加することで、Dalli 5.xの新機能やパフォーマンス改善を享受できない期間が生じます。早期の移行完了が望まれます。
まとめ
本PRは、Dalli 5.0.0のプロトコル変更によるテスト障害を依存バージョン制約で回避した変更です。暫定措置として明示されており、並行して進められているメタプロトコル対応(#56721)が完了次第、この制約は解除される見込みです。アプリケーションコードへの影響を最小化しつつ、プロジェクトの継続的な開発を可能にする判断といえます。