core_ext/benchmark.rbを非推奨から無言のshimに復帰
Rails 8.1では、active_support/core_ext/benchmark.rbの非推奨警告が削除され、空のファイルとして維持されるようになりました。これにより、既存コードへの影響を最小限に抑えつつ、将来の拡張の余地を残しています。
背景
core_ext/benchmark.rbは、唯一残っていた拡張メソッドBenchmark.msの削除に伴い、Rails 8.1で非推奨となっていました。このファイルをrequireすると、Rails 8.2での削除を予告する非推奨警告が表示される状態でした。
#56831のディスカッションでは、このファイルがbenchmarkの拡張を配置する場所として今後も存在し続けるべきであり、たまたま現時点で拡張が存在しないだけだという判断が示されています。非推奨警告を出し続けることで、将来の拡張追加時に混乱を招く可能性がありました。
技術的な変更
2つのファイルが変更され、非推奨の仕組みが完全に削除されました。
activesupport/lib/active_support/core_ext/benchmark.rbの変更:
非推奨警告のコード全体が削除され、frozen_string_literalコメントのみを残す空のファイルになりました。
# frozen_string_literal: true
activesupport/lib/active_support/core_ext.rbの変更:
core_ext/benchmark.rbを除外していたロジックが削除され、他のcore_extファイルと同様に自動的に読み込まれるようになりました。
変更前:
(Dir.glob(File.expand_path("core_ext/*.rb", __dir__)).sort - [File.expand_path("core_ext/benchmark.rb", __dir__)]).each do |path|
require path
end
変更後:
Dir.glob(File.expand_path("core_ext/*.rb", __dir__)).sort.each do |path|
require path
end
配列の減算演算子による除外処理が不要になり、シンプルなイテレーションに戻りました。
設計判断
完全削除ではなく空のshimとして維持する方式が採用されました。
このアプローチには3つの利点があります。第一に、require 'active_support/core_ext/benchmark'を明示的に呼び出している既存コードとの互換性を保ちます。第二に、将来benchmarkの新しい拡張が追加された際に、このファイルが自然な配置場所として機能します。第三に、非推奨警告を削除することで、ユーザーに誤った「削除予定」のシグナルを送らずに済みます。
ファイル自体は空ですが、その存在がAPI拡張ポイントの予約という設計上の役割を果たしています。これは、Active Supportのモジュール構造における一貫性を維持するための判断といえます。
まとめ
本PRは、非推奨警告を削除してcore_ext/benchmark.rbを無言のshimに変更した、Rails 8.1ブランチへのバックポートです。現時点で拡張メソッドは含まれませんが、ファイルの存在を維持することで、既存コードとの互換性と将来の拡張性の両方を確保しています。