core_ext/benchmark.rbを将来の拡張点として保持
一度非推奨となった core_ext/benchmark.rb が「silent shim」として復活しました。このファイルは現在Benchmark拡張を持ちませんが、将来の拡張点として保持される設計判断が示されています。
背景
core_ext/benchmark.rb は Benchmark.ms の削除に伴い非推奨となり、Rails 8.2での削除が予告されていました。#56831 では、このファイルがBenchmark拡張の「場所」として長期的に存続すべきだという判断から、非推奨を取り消しています。
削除予告の警告メッセージは「without replacement」と記載されていましたが、これはファイル自体の削除ではなく、当時含まれていた唯一の拡張機能の削除を意味していました。ファイルの役割と拡張機能の有無が混同されていた状況を整理したのが本PRです。
技術的な変更
2つのファイルが変更され、core_ext/benchmark.rb の非推奨警告が削除されました。
変更前:
# frozen_string_literal: true
# Remove this file from activesupport/lib/active_support/core_ext.rb when deleting the deprecation.
ActiveSupport.deprecator.warn <<~TEXT
active_support/core_ext/benchmark.rb is deprecated and will be removed in Rails 8.2 without replacement.
TEXT
変更後:
# frozen_string_literal: true
activesupport/lib/active_support/core_ext.rb では、benchmark.rb を除外していた特別処理が削除され、他の core_ext/*.rb と同様に自動読み込みされるようになりました。
変更前:
(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
現在の benchmark.rb は実質的な処理を持たない「silent shim」として機能します。ファイルが存在することで require 'active_support/core_ext/benchmark' の呼び出しが引き続き成功し、将来の拡張追加時にファイル作成の必要がありません。
設計判断
ファイルを保持し続ける方式が採用されました。
PR説明では「this remains the PLACE for benchmark extensions, and it'll endure」と明記され、現在拡張機能がなくてもファイル自体は保持する方針が示されています。これは core_ext/ ディレクトリ配下の他のファイルと同様、Rubyコアクラスに対する拡張の配置場所を予め確保しておく設計です。
非推奨警告の削除により、このファイルを require しても警告が出力されなくなりました。ファイルの存在が将来の機能追加を妨げず、むしろ拡張点として明示的に残す判断といえます。
まとめ
本PRは、一度非推奨とされた core_ext/benchmark.rb を将来のBenchmark拡張の配置場所として保持する判断を示しています。現在は空のファイルですが、拡張点としての役割を明確にすることで、機能削除とファイル削除の混同を解消し、将来の拡張追加の障壁を取り除いています。