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_routingby Edouard-chin · Pull Request #54705 · rails/rails
with_routingテストヘルパーがミドルウェアスタックをリビルドしないよう改善。さもないと一部のミドルウェア設定が失われる可能性がある。Édouard Chin
同Changelogより
- 🔗 PR: [Fix #54134] Add resource name to the
ArgumentErrorthat's raised when invalid:onlyor:exceptoptions are given to#resourceor#resourcesby 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=stringby martinemde · Pull Request #51496 · rails/rails
参考: 週刊Railsウォッチ20250123:path_paramsがクエリパラメータ経由で渡された場合にクラッシュしないよう修正
ユーザーがハッシュでないパラメータを渡した場合に
:path_paramsでクラッシュしないようurl_forを修正。セキュリティスキャナによって例外が発生するのを防ぐ。
Martin Emde
同Changelogより
- 🔗 PR: Fix
ActionDispatch::Executorto unwrap exceptions like other middlewares by byroot · Pull Request #53979 · rails/rails
ActionDispatch::Executorが他のエラー報告ミドルウェアと同様に例外をアンラップするよう修正。Jean Boussier
同Changelogより
🔗 Action View
- 🔗 PR: Use the given
forminhtml_optionsfor the hidden field incollection_check_boxesby 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:
ArgumentErrors 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_valuewhen:from/:toare 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
sumwith 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
PostgreSQLAdapterby 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:
PoolConfigno 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
RETURNINGsupport 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 invalidJean 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_timezonefromnew_framework_defaults_8_0.rbby 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_charsto 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_nameon 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
appIRB helper by Edouard-chin · Pull Request #54380 · rails/rails
Railsコンソールでルーティングを読み込むよう修正。
そうしないと
appオブジェクトで*_pathメソッドや*urlメソッドを見つけられない。Édouard Chin
同Changelogより
rails new --minimalオプションを更新。
--minimalフラグを拡張して、最近追加された以下の機能を除外した。
skip_brakemanskip_ciskip_dockerskip_kamalskip_rubocopskip_solidskip_thruster.eelcoj
同Changelogより
- 🔗 PR: Use
secret_key_basefrom 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ウォッチタグ)