Ruby on Rails 7.0.4、6.1.7、6.0.6がリリースされました。ほとんどの変更は7.0.4のみに含まれており、6.1.7と6.0.6の変更はわずかです。
Hi everyone! We've released Rails 7.0.4 https://t.co/edZE2TEEaH
— Ruby on Rails (@rails) September 9, 2022
英語版Changelogをまとめて見るにはGItHubのリリースタグ↓が便利です。
- Release v7.0.4 · rails/rails(日本時間2022/09/10 4:17)
- Release v6.1.7 · rails/rails(日本時間2022/09/10 4:15)
- Release v6.0.6 · rails/rails(日本時間2022/09/10 4:14)
詳しくは以下のコミットリストをご覧ください。
- Comparing v7.0.3.1...v7.0.4 · rails/rails
- Comparing v6.1.6.1...v6.1.7 · rails/rails
- Comparing v6.0.5.1...v6.0.6 · rails/rails
🔗 更新の概要
以下は7.0.4のChangelogです。6.1.7と6.0.6の変更は少ないので、該当部分にその旨を記します。
🔗 Changelogに更新が記載されている機能
以下の機能はリリースノートの記載順です。
- Active Support
- Active Model
- Active Record
- Action View
- Active Storage
- Action Pack
- Action Cable
- Action View
- Active Job
- Railties
本記事では、GitHubリリースタグに掲載されているChangelogに対応するプルリクやコミットへのリンクを取り急ぎ貼りました。
🔗 Changelogに更新の記載がない機能
以下はChangelogには更新の記載がありません。
🔗 Action Pack
- Redisキャッシュストアがredis-rb 5.0と互換性を持つようになった
Jean Boussier
- PR: 🔗 Fix NoMethodError on custom ActiveSupport::Deprecation behavior by r7kamura · Pull Request #45521 · rails/rails
- カスタム
ActiveSupport::Deprecation
でNoMethodError
が発生する振る舞いを修正
ActiveSupport::Deprecation.behavior=
はcall
に応答する任意のオブジェクトを受け取れる前提だったが、実際の内部実装ではそのオブジェクトがarity
に応答できることが前提になっていたため、Proc
オブジェクトしか受け取れなかった。
この変更によって、カスタマイズした振る舞いにおけるarity
の制約が削除された。
Ryo Nakamura
週刊Railsウォッチ「先週の改修」関連エントリ: ActiveSupport::Deprecation
の振る舞いをカスタマイズしたときのNoMethodError
を修正
🔗 Active Model
- 🔗 commit: Fix code cache namespacing for proxied attribute methods · rails/rails@8e7b3b7
- 🔗 commit: Fix the attribute methods cache backport · rails/rails@0a23b96
- 属性メソッドコードの生成キャッシュでの名前衝突を解消
2つの異なるメソッドが同じような名前を生成し、1つ目の実装が誤って再利用されることがあった。
class A
attribute_method_suffix "_changed?"
define_attribute_methods :x
end
class B
attribute_method_suffix "?"
define_attribute_methods :x_changed
end
Jean Boussier
🔗 Active Record
- 🔗 PR: Allow symbols in YAML columns by etiennebarrie · Pull Request #45584 · rails/rails -- 6.1.7と6.0.6にも反映
- YAMLのカラムでシンボルをデフォルトで利用できるようになった
Étienne Barrié
- 🔗 PR: ActiveRecord::Store encode store as a regular Hash by casperisfine · Pull Request #45591 · rails/rails -- 6.1.7にも反映
ActiveRecord::Store
が正規のハッシュでシリアライズするよう修正従来は
ActiveSupport::HashWithIndifferentAccess
としてシリアライズしていたが、これは無駄が多く、YAMLのsafe_load
で問題が発生する。Jean Boussier
関連issue: 7.0.3.1 breaks ActiveRecord.store with yaml coders. · Issue #45585 · rails/rails
- 🔗 PR: Add
timestamptz
as a time zone aware type for PostgreSQL by ghiculescu · Pull Request #44601 · rails/rails
- PostgreSQLでタイムゾーンに対応する
timestamptz
型を追加データベース内の
timestamp with time zone
値を正しく解析するにはこれが必要。
これをオフにしたい場合は、以下をイニシャライズに追加できる。
ActiveRecord::Base.time_zone_aware_types -= [:timestamptz]
Alex Ghiculescu
- 🔗 PR: Fix supporting timezone awareness for
tsrange
array columns. by morgoth · Pull Request #45348 · rails/rails
- 配列型カラムの
tsrange
およびtstzrange
のタイムゾーンサポートを修正
# データベースマイグレーション
add_column :shops, :open_hours, :tsrange, array: true
# アプリのコンフィグ
ActiveRecord::Base.time_zone_aware_types += [:tsrange]
# コードで時刻が正しくアプリのタイムゾーンに変換される
Shop.create!(open_hours: [Time.current..8.hour.from_now])
Wojciech Wnętrzak
Rails API: tsrange
-- ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
Rails API: tstzrange
-- ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
- 🔗 PR: Update AR Relation method to reset cache_version by austenmadden · Pull Request #45342 · rails/rails
- リレーションの
cache_version
がstaleする場合がある問題を修正従来は、リレーションオブジェクトで
reset
が呼び出されたときにcache_versions
インスタンス変数がリセットされなかった。これによって、データが正しいにもかかわらずリレーションのcache_versions
がstaleしていると報告されて混乱状況になる。使い方:
developers = Developer.all
developers.cache_version
Developer.update_all(updated_at: Time.now.utc + 1.second)
developers.cache_version # cache_versionはstaleしている
developers.reset
developers.cache_version # 最新の正しいcache_versionが返される
Austen Madden
関連issue: AR Relation #reset method does not correctly reset cache_version · Issue #45341 · rails/rails
週刊Railsウォッチ「先週の改修」関連エントリ: Active Recordリレーションのreset
でcache_version
がリセットするよう修正
load_async
を関連付けプロキシで呼び出したときの振る舞いを修正関連付けで
load_async
が直接呼び出されると、クエリはスケジューリングされるがまったく使われなかった。
comments = post.comments.load_async # クエリがスケジューリングされる
comments.to_a # まったく新しい同期クエリが実行される
修正によって非同期クエリを使うようになった。ただしこの関連付けは読み込まれないことに注意。
Jean Boussier
関連issue: Is load_async supposed to work on associations? · Issue #45408 · rails/rails
- 主キーのないモデルのeager loadingを修正
Anmol Chopra, Matt Lawrence, and Jonathan Hefner
関連issue: model w/o primary key defined as association beeing eager loaded is not populated · Issue #29374 · rails/rails
週刊Railsウォッチ「先週の改修」関連エントリ: 主キーのないモデルのeager_load
を修正
- 🔗 PR:
rails db:schema:{dump,load}
now checksENV["SCHEMA_FORMAT"]
before config by ghiculescu · Pull Request #44834 · rails/rails
rails db:schema:{dump,load}
でコンフィグより前にENV["SCHEMA_FORMAT"]
がチェックされるようになった
rails db:structure:{dump,load}
は非推奨化されたため、SQLフォーマットとRubyフォーマットの両方のスキーマをダンプするシンプルな方法がなかった。この変更によって、以下のように環境変数で指定できるようになる。
SCHEMA_FORMAT=sql rake db:schema:dump
Alex Ghiculescu
週刊Railsウォッチ「先週の改修」関連エントリ: db:schema
のダンプや読み込みのスキーマフォーマットを環境変数で指定できるようになった
hstore
デシリアライズのリグレッションバグを修正
edsharp
参考: PostgreSQL 14ドキュメント F.16. hstore
以下は6.1.7のみが対象です
- 🔗 PR: Fix: PG.connect keyword arguments deprecation warning on ruby 2.7 by davegudge · Pull Request #45090 · rails/rails
Ruby 2.7で
PG.connect
キーワード引数の非推奨警告を表示
Nikita Vasilevsky
🔗 Action View
- 🔗 PR: Support calls to
#field_name
with nilobject_name
by seanpdoyle · Pull Request #45366 · rails/rails
ActionView::Helpers::FormTagHelper#field_name
呼び出しで以下のようなobject_name
引数がnil
の場合をガードするようになった
<%= fields do |f| %>
<%= f.field_name :body %>
<% end %>
Sean Doyle
週刊Railsウォッチ「先週の改修」関連エントリ: #field_name
ヘルパー呼び出しでobject_name
引数にnil
を渡せるようになった
- 🔗 PR: Strings returned from
strip_tags
are correctly taggedhtml_safe?
by flavorjones · Pull Request #45218 · rails/rails
strip_tags
から返される文字列がhtml_safe?
で正しくタグ付けされるようになったこれらの文字列にはHTML要素が含まれておらず、基本エンティティはエスケープされるため、HTMLコンテンツにそのままPCDATAとして含めても安全。html-safeとしてタグ付けすることで、レンダリング中に
SafeBuffer
につないだときの二重エスケープが回避される。修正されたissue:
strip_tags(input).html_safe? # => false to true
? · Issue #124 · rails/rails-html-sanitizerMike Dalessio
週刊Railsウォッチ「先週の改修」関連エントリ: strip_tags
から返される文字列がhtml_safe?
で正しくタグ付けされるよう修正
🔗 Action Pack
- 🔗 PR: Prevent ActionDispatch::ServerTiming from overwriting existing header value by jtmalinowski · Pull Request #45615 · rails/rails
ActionDispatch::ServerTiming
がServer-Timing
ヘッダー内の既存の値を上書きしないよう修正従来は別のミドルウェアが
Server-Timing
ヘッダーを設定するとActionDispatch::ServerTiming
で上書きされてしまっていた。Jakub Malinowski
関連issue: ActionDispatch::ServerTiming
overwrites instead of appending to the Server-Timing
header. · Issue #45607 · rails/rails
週刊Railsウォッチ「先週の改修」関連エントリ: ActionDispatch::ServerTiming
が既存のServer-Timing
ヘッダーを上書きしないよう修正
🔗 Active Job
ActiveJob::QueueAdapters::QueAdapter
の非推奨警告を削除Ruby 3との互換性のために必要となるque 2.0の変更に備えて、que 1.2で導入された非推奨警告を削除する。
Damir Zekic and Adis Hasovic
🔗 Action Cable
- 🔗 PR: Redis 5.0.0 compatibility by casperisfine · Pull Request #45856 · rails/rails
- 🔗 PR: Backport Redis 5.0 compatibility (7-0-stable) by casperisfine · Pull Request #45873 · rails/rails
- Redisキャッシュストアがredis-rb 5.0と互換性を持つようになった
redis-rb 3.xとの互換性は削除された。
Jean Boussier
- Action Cableサーバーが
anchor: true
でマウントされるようになったこれによって、
/cable
で始まるルーティングがAction Cableでクラッシュしなくなる。
Alex Ghiculescu
週刊Railsウォッチ「先週の改修」関連エントリ: Action Cableサーバーをanchor: true
でマウントするようになった
🔗 Active Storage
- 🔗 PR: Fixes ActiveStorage proxy downloads of files over 5mb in S3-like storages by feliperaul · Pull Request #45102 · rails/rails
- プロキシモードで5MBを越えるファイルのダウンロードを修正
従来は、S3などのサービスに保存されている5MB以上のファイルをプロキシモードでダウンロードしようとすると、5.2MBのあたりで破損したファイルが返されたり、ダウンロードがランダムに停止することがあった。
ActiveStorage::Blobs::ProxyController
が正しくストリーミングを扱うよう修正されたことで、巨大なファイルをサーバーからクライアントに問題なくストリーミングできるようになった。Felipe Raul
🔗 Railties
- 🔗 PR: Replace MutexHook by MonitorHook to allow reentrancy by casperisfine · Pull Request #45857 · rails/rails
config.allow_concurrency = false
を指定したときにMutex
ではなくMonitor
を使うようになったこれによって、
config.allow_concurrency
を無効にしてもconfig.active_support.executor_around_test_case
を有効にできるようになった。
Jean Boussier
関連issue: Enabling executor_around_test_case and disabling allow_concurrency fails controller tests · Issue #45852 · rails/rails
Rails API: Rails::Application::Finisher::MutexHook
- 🔗 PR: Skip Active Storage and Action Mailer if Active Job is skipped by etiennebarrie · Pull Request #45354 · rails/rails
- アプリでActive Jobをスキップしている場合はActive StorageとAction Mailerもスキップするよう修正
Étienne Barrié
- 🔗 フレームワーク機能が無効かどうかを
app:update
実行時に正しくチェックするよう修正
Étienne Barrié and Paulo Barros
週刊Railsウォッチ「先週の改修」関連エントリ: app:update
実行時に機能がconfig/application.rbで無効になっているかをチェックするようになった
config.active_support.cache_format_version
が今後決して適用されないよう修正Rails 7.0の
Rails.cache
では新しいシリアライザが使われるようになったが、関連コンフィグが正しく動いていなかった。なお、この修正が行われた後でも、この適用はapplication.rbファイルでしか利用できない点に注意。Alex Ghiculescu
関連issue: Rails.cache uses 6.1 coder when 7.0 configuration defaults are loaded · Issue #45289 · rails/rails
TechRachoではRubyやRailsの最新情報などの記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)
注
Rails 5.x系以前のリリースは終了しているので更新はありません。
参考: Ruby on Rails のメンテナンスポリシー - Railsガイド