Ruby on Rails 8.0.2がリリースされました。内容はバグ修正です。
Rails Version 8.0.2 has been released! https://t.co/7wd0NUpNPY
— Ruby on Rails (@rails) March 12, 2025
英語版Changelogをまとめて見るにはGItHubのリリースタグ↓が便利です。v9.0.2
タグの日付は日本時間の2025/03/12 12:06でした。
詳しくは以下のコミットリストをご覧ください。
🔗 参考情報
フレームワークそのもののdiffではなく、生成されるアプリのdiffをチェックするには、railsdiff.orgが便利です↓。
Railsバージョン間のgemの互換性をチェックするには、以下のrailsbump.orgが便利です。Gemfile.lockを貼り付けてチェックすることも可能です。
なお、現在のメンテナンスポリシー↓ではRails 8.0.xと7.2.xがバグ修正とセキュリティ修正のサポート対象となっています。7.1.xと7.0.xはセキュリティ修正のみのサポート、7.0.xは今年2025年4月1日にセキュリティサポート終了予定です。
参考: Ruby on Rails — Maintenance policy
7.0.xより前のバージョンは現在サポート対象外です。
🔗 更新の概要
アップグレード方法については以下の手順をどうぞ。
参考: § 1.3 アップグレード手順 -- Rails アップグレードガイド - Railsガイド
本記事では、GitHubリリースタグに掲載されているChangelogに対応するプルリクやコミットへのリンクを取り急ぎ貼りました。
🔗 Action Pack
- 🔗 PR: Don't rebuild the middleware stack when using
with_routing
by Edouard-chin · Pull Request #54705 · rails/rails
with_routing
テストヘルパーがミドルウェアスタックをリビルドしないよう改善。さもないと一部のミドルウェア設定が失われる可能性がある。Édouard Chin
同Changelogより
- 🔗 PR: [Fix #54134] Add resource name to the
ArgumentError
that's raised when invalid:only
or:except
options are given to#resource
or#resources
by jagthedrummer · Pull Request #54163 · rails/rails
#resource
や#resources
に無効な:only
オプションや:except
オプションを渡すと生成されるArgumentError
でリソース名を表示するよう改善。これによって、特にgemによってレンダリングされたルーティングの問題の発生元を突き止めやすくなる。
修正前:
:only and :except must include only [:index, :create, :new, :show, :update, :destroy, :edit], but also included [:foo, :bar]
修正後
Route `resources :products` - :only and :except must include only [:index, :create, :new, :show, :update, :destroy, :edit], but also included [:foo, :bar]
Jeremy Green
同Changelogより
- 🔗 PR: Handle path_params gracefully when a user sends
?path_params=string
by martinemde · Pull Request #51496 · rails/rails
参考: 週刊Railsウォッチ20250123:path_params
がクエリパラメータ経由で渡された場合にクラッシュしないよう修正
ユーザーがハッシュでないパラメータを渡した場合に
:path_params
でクラッシュしないようurl_for
を修正。セキュリティスキャナによって例外が発生するのを防ぐ。
Martin Emde
同Changelogより
- 🔗 PR: Fix
ActionDispatch::Executor
to unwrap exceptions like other middlewares by byroot · Pull Request #53979 · rails/rails
ActionDispatch::Executor
が他のエラー報告ミドルウェアと同様に例外をアンラップするよう修正。Jean Boussier
同Changelogより
🔗 Action View
- 🔗 PR: Use the given
form
inhtml_options
for the hidden field incollection_check_boxes
by 3v0k4 · Pull Request #51746 · rails/rails
参考: 週刊Railsウォッチ20250130:collection_checkboxes
で非表示のinput
要素にhtml_options[:form]
が反映されなかったのを修正
collection_checkboxes
がtype="hidden"
の<input>
を生成する場合にhtml_options[:form]
を尊重するよう修正。Riccardo Odone
同Changelogより
- 🔗 PR: Action View: fix local variable access in layouts by flavorjones · Pull Request #54020 · rails/rails
参考: 週刊Railsウォッチ20250130:render locals:
キーで渡した値をレイアウトファイルでレンダリングできない問題を修正
render
に渡されたlocals
にレイアウトファイルからアクセスできるよう修正。これによって、#31680(Rails 5.1のバグの再発)が修正される。
Mike Dalessio
同Changelogより
- 🔗 PR: fix:
ArgumentError
s raised during template rendering by flavorjones · Pull Request #54133 · rails/rails
参考: 週刊Railsウォッチ20250130: ビューテンプレートのstrictlocals
のエラーでArgumentError
ではなくActionView::StrictLocalsError
をraiseするようになった
テンプレート内の引数エラーのうち、strict(厳密な)
locals
に関連するものはActionView::StrictLocalsError
をraiseし、その他の引数エラーはそのまま再度raiseされるようになった。従来は、テンプレートのレンダリング中にraiseした
ArgumentError
はstrictlocals
エラーの処理中に飲み込まれてしまっていたため、strictlocals
に関連しないArgumentError
(誤った引数で呼び出されたヘルパーメソッドなど)が無関係なバックトレースを持つ同様のArgumentError
に置き換えられてしまい、テンプレートのデバッグが困難になっていた。修正後は、strict
locals
に関連しないArgumentError
が再度raiseされるようになり、開発者向けに元のバックトレースが保持されるようになった。また、
ActionView::StrictLocalsError
はArgumentError
のサブクラスであるため、ArgumentError
をrescueする既存のコードは引き続き機能する。修正: #52227
Mike Dalessio
同Changelogより
依存関係トラッカーが循環依存を処理するときにスタックオーバーフローになるのを修正。
Jean Boussier
同Changelogより
🔗 Active Record
- 🔗 PR: Fix inverting
rename_enum_value
when:from
/:to
are provided by fatkodima · Pull Request #54394 · rails/rails
マイグレーションの
rename_enum_value
で:from
と:to
を指定してロールバックできない問題を修正。fatkodima
同Changelogより
無効なレコードが永続化されるのを防止。
Edouard Chin
同Changelogより
マイグレーションの
drop_table
にオプションなしでブロックを渡した場合にロールバックできなかった問題を修正。fatkodima
同Changelogより
- 🔗 PR: Fix count with group by qualified name on loaded relation by kamipo · Pull Request #53994 · rails/rails
修飾名を渡した
.group
と.count
に続けてリレーションを.reload
すると.count
できない問題を修正。Ryuta Kamizono
同Changelogより
- 🔗 PR: Fix
sum
with qualified name on loaded relation by cgunther · Pull Request #53983 · rails/rails
読み込まれたリレーションで
sum
に修飾名を渡すとエラーになる問題を修正。Chris Gunther
同Changelogより
- 🔗 PR: fix: sqlite3 adapter should quote Infinity and NaN by flavorjones · Pull Request #54735 · rails/rails
SQLite3アダプタが有限でないNumeric値を"Infinity"や"NaN"のように引用符で囲むよう修正。
Mike Dalessio
同Changelogより
- 🔗 PR: Handle libpq db version 0 as connection failure in
PostgreSQLAdapter
by joshuay03 · Pull Request #54713 · rails/rails
libpqがdbバージョンを
0
で返したらPostgreSQLAdapter
でコネクション失敗として処理するよう修正。修正前は、このバージョンがキャッシュされ、コネクション構成中にアダプタの必要最小バージョンと比較するときにエラーが発生した。つまり、その後の再接続試行でコネクションが正常に構成されなくなる。
修正後は、libpqと結果が一致するコネクション失敗として扱われて
ActiveRecord::ConnectionFailed
をraiseし、かつバージョンをキャッシュしないようになったので、次のコネクション試行でバージョンを取得できるようになった。Joshua Young, Rian McGuire
同Changelogより
コネクション構成中のエラー処理を修正。
Active Recordのコネクション構成中にエラーが適切に処理されていなかった。
これにより中途半端な構成のコネクションが使われ、さまざまな例外が発生する可能性があった。最も一般的な例外は、PostgreSQLAdapterのundefined method 'key?' for nil
やTypeError: wrong argument type nil (expected PG::TypeMap)
。Jean Boussier
同Changelogより
- 🔗 PR: Fix SqlLiterals overriding query's retryable value by skipkayhil · Pull Request #54458 · rails/rails
リトライ不可のクエリがリトライ可能とマーキングされていたケースを修正。
Hartley McGuire
同Changelogより
- 🔗 PR: Avoid crash to validate circular autosave association by zzak · Pull Request #54180 · rails/rails
関連付けの自動保存時のバリデーションで循環参照がクラッシュしないよう修正。
zzak
同Changelogより
- 🔗 PR:
PoolConfig
no longer keeps a reference to the connection class (attempt 3) by flavorjones · Pull Request #54366 · rails/rails
PoolConfig
がコネクションクラスへの参照を維持しないようになった。このクラスへの参照が保持されていると、development環境でリロードしたときに微妙な問題が発生していた。#54343を修正。
Mike Dalessio
同Changelogより
- 🔗 PR: Fix active record instrumentation not thread safe: by Edouard-chin · Pull Request #54344 · rails/rails
非同期クエリでSQLのActive Support Instrumentation通知が送信されない場合があったのを修正。
Post.async_count ActiveSupport::Notifications.subscribed(->(*) { "Will never reach here" }) do Post.count end
適切な競合状態のもとで、ごくまれに非同期クエリ実行後にActive Supportの通知がディスパッチされなくなることがあった。この問題は修正された。
Edouard Chin
同Changelogより
- 🔗 PR: Fix: ensure PostgreSQL enum types can contain commas by arthurhess · Pull Request #54141 · rails/rails
PostgreSQLのenum型でカンマを含む名前もサポートするよう修正。
Arthur Hess
同Changelogより
- 🔗 PR: Fix inserts on MySQL with no
RETURNING
support for a table with multiple auto populated columns by nvasilevski · Pull Request #54184 · rails/rails
MySQL環境における自動増分値取得処理で複数の自動生成カラムを持つテーブルに対応。
Nikita Vasilevsky
同Changelogより
スコープ付き関連付けで文字列とバインドパラメータを使う
joins
を修正。class Instructor < ActiveRecord::Base has_many :instructor_roles, -> { active } end class InstructorRole < ActiveRecord::Base scope :active, -> { joins("JOIN students ON instructor_roles.student_id = students.id") .where(students { status: 1 }) } end Instructor.joins(:instructor_roles).first
上の例では、
active
スコープのバインドパラメータが失われるため、ActiveRecord::StatementInvalid
が発生する。Jean Boussier
同Changelogより
- 🔗 PR: Fix race condition in ConnectionPool#checkout on @pinned_connection by SjoerdL · Pull Request #54052 · rails/rails
システムテストでトランザクショナルなフィクスチャを使う場合の潜在的な競合状態を修正。
Sjoerd Lagarde
同Changelogより
- 🔗 PR: Do not validate associated records that haven't changed by byroot · Pull Request #53951 · rails/rails
関連付けの自動保存で、関連付けられるレコードが変更されていない場合にバリデーションを行わないよう修正。
トランザクション内で作成も変更もされていない関連レコードに対してActive Recordがバリデーションを誤って実行していた。
Post.create!(author: User.find(1)) # Fail if user is invalid
Jean Boussier
同Changelogより
🔗 Maintain connection verification for 2 seconds after use by matthewd · Pull Request #53672 · rails/rails
1件のリクエスト中にバリデーションが繰り返し再実行されるを避けるため、直近のバリデーションをデータベースコネクションで記憶するようになった(デフォルトでは2秒間)。
これにより、リクエストの期間中はコネクションがリースされてバリデーションが1回だけ行われるようになり、Rails 7.1と同様のバリデーション頻度に戻った。
Matthew Draper
同Changelogより
🔗 Active Storage
- 🔗 PR: Prevent Active Storage Blob from autosaving Attachments: by Edouard-chin · Pull Request #53623 · rails/rails
関連付けられた添付ファイルをBlobが自動保存しないようになった。
これにより、「添付ファイルを持つレコードのダーティ属性がリセットされ、そのレコードの
after_commit
コールバックが期待どおりに動作しない」問題が修正される。なお、これはアプリケーションの変更を必要としない内部的な修正であり、Active Storageの添付ファイルは引き続き(別のリレーションを介して)自動保存される。
Edouard-chin
同Changelogより
🔗 Active Support
- 🔗 PR: Fix setting
to_time_preserves_timezone
fromnew_framework_defaults_8_0.rb
by fatkodima · Pull Request #54017 · rails/rails
new_framework_defaults_8_0.rb
のto_time_preserves_timezone
設定方法を修正。fatkodima
同Changelogより
- 🔗 PR: Fix LocalStore#read_multi_entries to distinguish recorded misses by byroot · Pull Request #54586 · rails/rails
ローカルストアが有効な場合のActive Support Cache
fetch_multi
を修正。
fetch_multi
は、ローカルストアに記録された存在しないエントリに対して、提供されたブロックを適切にyield
するようになった。Jean Boussier
同Changelogより
- 🔗 PR: Allow execution wrapper to handle all exceptions by gmcgibbon · Pull Request #54455 · rails/rails
Exception
も含めてすべての例外を報告するよう実行ラッピングを修正。
SystemStackError
やNoMemoryError
などのより深刻なエラーが発生した場合、エラー通知でこれらの種類の例外を報告可能にする必要がある。Gannon McGibbon
同Changelogより
- 🔗 PR: Handle connection pool errors in Redis and Memcached stores by byroot · Pull Request #54440 · rails/rails
RedisCacheStore
とMemCacheStore
がコネクションプール関連のエラーも処理できるよう修正。これらのエラーは
rescue
されてRails.error
に報告される。Jean Boussier
同Changelogより
- 🔗 PR: LocalCache with read_multi should respect version and expire by zzak · Pull Request #54413 · rails/rails
ローカルキャッシュを使う場合にバージョンの有効期限が反映されるよう
ActiveSupport::Cache#read_multi
を修正。zzak
同Changelogより
ActiveSupport::MessageVerifier
とActiveSupport::MessageEncryptor
でon_rotation
コールバックの設定方法を修正。verifier.rotate(old_secret).on_rotation { ... }
この修正によって、APIドキュメントに記載されている通りに動作する。
Jean Boussier
同Changelogより
- 🔗 PR: AS::MessageVerifier#verify always accept both safe and unsafe encoding by byroot · Pull Request #54310 · rails/rails
ActiveSupport::MessageVerifier
でURL安全なペイロードとURL安全でないペイロードを常に両方とも検証できるよう修正。これは、以前生成されたすべて署名済みメッセージを直ちに無効にすることなく、どちらの設定からもシームレスに移行可能にするための修正である。
Jean Boussier, Florent Beaurain, Ali Sepehri
同Changelogより
- 🔗 PR: Fix incorrect expiration time in ActiveSupport::Cache::Store#fetch by mk-dhia · Pull Request #54236 · rails/rails
:race_condition_ttl
オプションを指定した場合にも指定の有効期限が反映されるようcache.fetch
を修正。cache.fetch("key", expires_in: 1.hour, race_condition_ttl: 5.second) do "something" end
上の例では、最終的なキャッシュエントリのTTLは、指定した1時間ではなく10秒になっていた。
Dhia
同Changelogより
set_callback
にprocを&:
引数で渡すとエラーになっていたのを修正。Radamés Roriz
同Changelogより
- 🔗 PR: Fix
String#mb_chars
to never mutate the original String by byroot · Pull Request #54080 · rails/rails
String#mb_chars
がレシーバを改変しないよう修正。修正前は、レシーバで
force_encoding
を直接呼び出していたが、修正後は最初にレシーバを複製するようになった。Jean Boussier
同Changelogより
- 🔗 PR: ErrorSubscriber: also marks the error causes as reported by byroot · Pull Request #53975 · rails/rails
ErrorSubscriber
がエラーの原因(rror.cause
)をreported
とマーキングするよう改善。従来、エラーを
ActionView::Template::Error
でラップする方法が原因で(特にビューで)エラーが2回報告されるケースが、この修正によって回避されるようになった。Jean Boussier
同Changelogより
- 🔗 PR: Don't cache
module_parent_name
on anonymous modules by byroot · Pull Request #53971 · rails/rails
モジュールに名前を付けた後に
Module#module_parent_name
が正しい名前を返すよう修正。後で定数に割り当てる形でモジュールを命名すると、無名モジュールで
Module#module_parent_name
を呼び出したときの戻り値が変更されていなかった。mod = Module.new mod.module_parent_name # => "Object" MyModule::Something = mod mod.module_parent_name # => "MyModule"
Jean Boussier
同Changelogより
🔗 Railties
- 🔗 PR: Load the routes in the console when calling the
app
IRB helper by Edouard-chin · Pull Request #54380 · rails/rails
Railsコンソールでルーティングを読み込むよう修正。
そうしないと
app
オブジェクトで*_path
メソッドや*url
メソッドを見つけられない。Édouard Chin
同Changelogより
rails new --minimal
オプションを更新。
--minimal
フラグを拡張して、最近追加された以下の機能を除外した。
skip_brakeman
skip_ci
skip_docker
skip_kamal
skip_rubocop
skip_solid
skip_thruster
.eelcoj
同Changelogより
- 🔗 PR: Use
secret_key_base
from ENV or credentials when present locally by p8 · Pull Request #53705 · rails/rails
ローカル環境に存在する場合は、ENVやcredentialにある
secret_key_base
を使うよう修正。development環境やtest環境で
ENV["SECRET_KEY_BASE"]
やRails.application.credentials.secret_key_base
が設定されている場合は、tmp/local_secret.txt
ファイルを生成する代わりにそれらをRails.config.secret_key_base
で使うようになった。Petrik de Heus
同Changelogより
🔗 Changelogに更新の記載がない機能
以下はChangelogには更新の記載がありません。
- rails/actioncable/CHANGELOG.md at v8.0.2 · rails/rails
- rails/actionmailbox/CHANGELOG.md at v8.0.2 · rails/rails
- rails/actionmailer/CHANGELOG.md at v8.0.2 · rails/rails
- rails/actiontext/CHANGELOG.md at v8.0.2 · rails/rails
- rails/activejob/CHANGELOG.md at v8.0.2 · rails/rails
- rails/activemodel/CHANGELOG.md at v8.0.2 · rails/rails
- rails/activerecord/CHANGELOG.md at v8.0.2 · rails/rails
TechRachoではRubyやRailsの最新情報などの記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)