2025年3月12日、Ruby on Railsの最新バージョンである Rails 8.0.2 がリリースされました。
今回のアップデートでは、主にActive Supportを中心に複数の重要な修正と改善が行われています。
この記事では、Rails 8.0.2の主な変更点をコード例とともに詳しく解説します。
Rails 8.0.2の主な変更点と修正内容
to_time_preserves_timezone
の設定に関する修正
new_framework_defaults_8_0.rb
におけるto_time_preserves_timezone
の設定に関する問題が修正されました。
これにより、タイムゾーンの扱いがより正確になります。
Active Support Cacheのfetch_multi
メソッドの修正
ローカルキャッシュが有効な場合、fetch_multi
メソッドが欠落したエントリに対して適切にブロックを呼び出すよう修正されました。
cache.fetch_multi("key1", "key2") do |key|
# 欠落したエントリに対してブロックが正しく呼び出される
end
重大な例外の報告機能の改善
SystemStackError
やNoMemoryError
などの重大な例外も、Railsのエラーレポーターが適切に報告できるよう改善されました。
RedisCacheStoreとMemCacheStoreの接続プールエラー処理の改善
RedisCacheStoreおよびMemCacheStoreで発生する接続プール関連のエラーが、Rails.error
に正しく報告されるようになりました。
read_multi
メソッドのバージョン有効期限の尊重
ローカルキャッシュを使用する際、ActiveSupport::Cache#read_multi
がバージョンの有効期限を正しく尊重するよう修正されました。
MessageVerifierとMessageEncryptorのon_rotation
コールバックの修正
ActiveSupport::MessageVerifier
およびActiveSupport::MessageEncryptor
のon_rotation
コールバックがドキュメント通りに動作するよう修正されました。
verifier = ActiveSupport::MessageVerifier.new(secret)
verifier.rotate(old_secret).on_rotation do |message, key|
# コールバックが正しく呼び出されるようになった
end
MessageVerifierのURLセーフ・アンセーフなペイロード検証の改善
URLセーフおよびURLアンセーフなペイロードの両方を検証できるようになり、以前に生成された署名付きメッセージを無効にすることなくシームレスな移行が可能になりました。
キャッシュのfetch
メソッドでの有効期限の修正
:race_condition_ttl
オプションを使用した場合でも、指定した有効期限が正しく尊重されるよう修正されました。
cache.fetch("key", expires_in: 1.hour, race_condition_ttl: 5.seconds) do
"value"
end
# TTLが正しく1時間に設定されるようになった
set_callback
でのスプラット引数を持つブロックの処理改善
スプラット引数を持つブロックをset_callback
で適切に処理できるよう改善されました。
String#mb_chars
メソッドの修正
String#mb_chars
がレシーバーを変更せず、force_encoding
を呼び出す前にレシーバーを複製するよう修正されました。
ErrorSubscriberの改善(ビューエラーの二重報告防止)
エラーの原因も報告済みとしてマークするよう改善され、特にビューでのエラーが二重に報告される問題が解消されました。
Module#module_parent_name
の修正(無名モジュールの親名取得)
無名モジュールが後で定数に割り当てられた場合、正しい親モジュール名を返すよう修正されました。
mod = Module.new
mod.module_parent_name # => "Object"
MyModule::Something = mod
mod.module_parent_name # => "MyModule"(修正後は正しく親名を返す)
Rails 8.0.2へのアップデート方法
Rails 8.0系を利用中の場合、GemfileのRailsバージョンを以下のように指定してアップデートできます。
gem "rails", "~> 8.0.2"
その後、以下のコマンドを実行します。
bundle update rails
まとめ
Rails 8.0.2では、Active Supportを中心に多くの重要な修正が行われ、安定性とパフォーマンスが向上しています。
Railsアプリケーションを運用している方は、早めのアップデートを検討しましょう。