Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 7.2.0 Active Support CHANGELOG(全項目リンク付き)

概要

MITライセンスに基づいて翻訳・公開いたします。

なお、機能削除のエントリについては、原則として7.2での削除プルリクではなく、その機能が非推奨化されたときの過去のプルリクへリンクしています。

Rails 7.2.0 Active Support CHANGELOG(全項目リンク付き)

更新42件(うち非推奨削除14件)


Rails 7.2.0.rc1(2024/08/07)

🔗 Fix delegate_missing_to allow_nil: true when called with implict self by casperisfine · Pull Request #52437 · rails/rails

delegate_missing_to allow_nil: trueを指定して暗黙でselfに対して呼び出すとエラーになる問題を修正

class Person
  delegate_missing_to :address, allow_nil: true

  def address
    nil
  end

  def berliner?
    city == "Berlin"
  end
end

Person.new.city # => nil
Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)

Jean Boussier


Rails 7.2.0.beta3(2024/07/11)

🔗 Add an explicit dependency on the logger gem by Earlopain · Pull Request #52024 · rails/rails

  • logger gemを依存関係に追加

理由: loggerはRuby 3.5の「bundled gem」候補であるため。

Earlopain

ruby/logger - GitHub


Rails 7.2.0.beta2(2024/06/04)

🔗 Define Digest::UUID.nil_uuid · rails/rails@0869d36

  • Digest::UUID.nil_uuidを定義

これはいわゆる「nil UUID」を返す。

Xavier Noria


Rails 7.2.0.beta1(2024/05/29)

🔗 Support duration in ActiveSupport::XmlMini by heka1024 · Pull Request #51651 · rails/rails

  • ActiveSupport::XmlMiniduration型をサポート

heka1024

🔗 (削除)Remove child event tracking from ActiveSupport::Subscriber by jhawthorn · Pull Request #43390 · rails/rails

  • 非推奨化されていたActiveSupport::Notifications::Event#childrenおよびActiveSupport::Notifications::Event#parent_of?を削除

Rafael Mendonça França

🔗 (削除)Deprecate ActiveSupport::Deprecation singleton usage by etiennebarrie · Pull Request #47354 · rails/rails

  • 以下のメソッドにdeprecatorを渡せる非推奨サポートを削除
    • deprecate
    • deprecate_constant
    • ActiveSupport::Deprecation::DeprecatedObjectProxy.new
    • ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new
    • ActiveSupport::Deprecation::DeprecatedConstantProxy.new
    • assert_deprecated
    • assert_not_deprecated
    • collect_deprecations

Rafael Mendonça França

🔗 (削除)Deprecate ActiveSupport::Deprecation singleton usage by etiennebarrie · Pull Request #47354 · rails/rails

  • ActiveSupport::Deprecationをインスタンスに委譲できる非推奨化サポートを削除

Rafael Mendonça França

🔗 (削除)Deprecate SafeBuffer#clone_empty by flavorjones · Pull Request #48264 · rails/rails

  • 非推奨化されていたSafeBuffer#clone_emptyを削除

Rafael Mendonça França

🔗 (削除)Remove deprecated option to passing a format to #to_s · rails/rails@e420c33

  • ArrayDateDateTimeTimeから非推奨化されていた#to_default_sを削除

Rafael Mendonça França

🔗 (削除)Deprecate initialize memcache store with dalli client by aledustet · Pull Request #47340 · rails/rails

  • Dalli::ClientインスタンスをMemCacheStoreに渡せる非推奨サポートを削除

Rafael Mendonça França

🔗 (削除)Remove deprecated support to generate incorrect RFC 4122 UUIDs · rails/rails@7b4affc

  • 非推奨化されていたconfig.active_support.use_rfc4122_namespaced_uuidsを削除

Rafael Mendonça França

🔗 (削除)Remove deprecated override of ActiveSupport::TimeWithZone.name · rails/rails@34e296d

  • 非推奨化されていたconfig.active_support.remove_deprecated_time_with_zone_nameを削除

Rafael Mendonça França

🔗 (削除)Remove deprecated option to passing a format to #to_s · rails/rails@e420c33

  • 非推奨化されていたconfig.active_support.disable_to_s_conversionを削除

Rafael Mendonça França

🔗 (削除)Add italic and underline support to ActiveSupport::LogSubscriber#color by gmcgibbon · Pull Request #45976 · rails/rails

  • ActiveSupport::LogSubscriber#colorに位置引数でブーリアンを渡すことでテキストを太字にできる非推奨化サポートを削除

Rafael Mendonça França

  • 非推奨化されていた定数ActiveSupport::LogSubscriber::CLEARActiveSupport::LogSubscriber::BOLDを削除

Rafael Mendonça França

🔗 (削除)Improve cache performance for bare string values by jonathanhefner · Pull Request #48122 · rails/rails

  • 非推奨化されていたconfig.active_support.cache_format_version = 6.1サポートを削除

Rafael Mendonça França

🔗 (削除)Deprecate :pool_size and :pool_timeout options for configuring connection pooling in cache stores by fatkodima · Pull Request #45111 · rails/rails

  • キャッシュストレージの非推奨化オプション:pool_size:pool_timeoutを削除

Rafael Mendonça França

🔗 Allow assertionless tests to be reported by fatkodima · Pull Request #51625 · rails/rails

参考: 週刊Railsウォッチ20240513: アサーションが動いていないテストを検出するassertionless_tests_behaviorコンフィグが追加

  • アサーションが動いていないテストで警告を表示するようになった

ActiveSupport::TestCaseは、アサーションが実行されていないテストで警告を表示するようになった。これは、意図したアサーションが実行されていない壊れたテストを検出するのに有用。

fatkodima

Rails: アサーションが動いていないテストを効果的に発見する方法(翻訳)

🔗 Support hexBinary type in XML by heka1024 · Pull Request #51631 · rails/rails

参考: 週刊Railsウォッチ20240513: ActiveSupport::XmlMiniでhexBinaryフォーマットをサポート

  • ActiveSupport::XmlMiniでhexBinaryフォーマットをサポート

heka1024

🔗 Deprecate ActiveSupport::ProxyObject by Earlopain · Pull Request #51638 · rails/rails

参考: 週刊Railsウォッチ20240513: ActiveSupport::ProxyObjectが非推奨化

  • ActiveSupport::ProxyObjectが非推奨化される

今後はRuby組み込みのBasicObjectを使うこと。

Earlopain

🔗 Fix ActiveJob::EnqueueAfterTransactionCommit API by casperisfine · Pull Request #51525 · rails/rails

参考: 週刊Railsウォッチ20240425: テストで自動先延ばしジョブのエンキューをトランザクション終了後でもチェックできるようになった

  • stub_constexists: falseパラメータを渡すことで、まだ存在していない定数をスタブできるようになった

Jean Boussier

🔗 Make ActiveSupport::BacktraceCleaner copy filters and silencers on dup and clone by casperisfine · Pull Request #51447 · rails/rails

参考: 週刊Railsウォッチ20240409: ActiveSupport::BacktraceCleanerでdeep copyされていない項目があったのを修正

  • ActiveSupport::BacktraceCleanerを拡張して、複製やクローンのときにfilterssilencersを複製するよう修正

従来は、複製によって内部のfilterssilencersの配列が共有され、ステートが漏洩していた。

Jean Boussier

🔗 Updating Astana with a Western Kazakhstan timezone by damiann · Pull Request #51317 · rails/rails

参考: 週刊Railsウォッチ20240326: カザフスタンのタイムゾーン移行に対応

  • アスタナ(カザフスタンの首都)を西カザフスタンのTZInfo識別子で更新

Damian Nelson

🔗 Support filenames in Logger.logger_outputs_to? by c960657 · Pull Request #51125 · rails/rails

参考: 週刊Railsウォッチ20240306: Logger.logger_outputs_to?にファイル名の文字列やFileオブジェクトを渡せるようになった

  • ActiveSupport::Logger.logger_outputs_to?でファイル名をサポート
logger = Logger.new('/var/log/rails.log')
ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')

Christian Schmidt

🔗 Fix IPAddr prefix information missing when write to cache in msgpack serializer by r-plus · Pull Request #50742 · rails/rails

参考: 週刊Railsウォッチ20240215: ActiveSupport::MessagePackIPAddrをシリアライズするとprefixが含まれていなかったのを修正

ActiveSupport::MessagePackシリアライザでIPAddrをシリアライズしたときにIPAddr#prefixが含まれるようにした。この変更には下位互換性と上位互換性があり、古いペイロードは引き続き読み取り可能になり、新しいペイロードは古いバージョンのRailsでも読み取り可能になる

Taiki Komaba

🔗 Add default: support for ActiveSupport::CurrentAttributes.attribute by seanpdoyle · Pull Request #50677 · rails/rails

参考: 週刊Railsウォッチ20240206: ActiveSupport::CurrentAttributes.attributedefault:オプションをサポート

  • ActiveSupport::CurrentAttributes.attributedefault:オプションをサポート
class Current < ActiveSupport::CurrentAttributes
  attribute :counter, default: 0
end

Sean Doyle

🔗 Yield instance to Object#with block by seanpdoyle · Pull Request #50470 · rails/rails

参考: 週刊Railsウォッチ20240206: Object#withに渡すブロックのインスタンスをyieldするようになった

  • 以下のようにObject#withに渡したブロックのインスタンスをyieldするようになった
client.with(timeout: 5_000) do |c|
  c.get("/commits")
end

Sean Doyle

🔗 Use logical core count for test parallelization by jonathanhefner · Pull Request #50564 · rails/rails

  • テストをパラレル化したときのデフォルトのワーカー数を、物理コア数ではなく論理コア数に基づいて決定するようになった

Jonathan Hefner


なお、上の改修によって以下の#50564が取り消されました。

参考: Use logical core count for test parallelization by jonathanhefner · Pull Request #50564 · rails/rails

🔗 Fix Time.now/DateTime.now/Date.today to return results in a system timezone after #travel_to by 907th · Pull Request #50236 · rails/rails

参考: 週刊Railsウォッチ20231222: #travel_toで設定したタイムゾーンがクリアされていなかったのを修正

  • #travel_to実行後にTime.now/DateTime.now/Date.todayが結果をシステムのタイムゾーンで返すよう修正

#travel_toの現在の実装にはバグがある: このメソッドが引数のタイムゾーンを記憶して、スタブ化されたあらゆるメソッドが以後そのタイムゾーンで結果を返すようになる。ただし、本来期待される振る舞いは結果をシステムのタイムゾーンで返すこと。

Aleksei Chernenkov

🔗 ErrorReporter#unexpected to report in production but raise in development by byroot · Pull Request #49951 · rails/rails

参考: 週刊Railsウォッチ20231213: production環境でraiseせずにレポートするErrorReporter#unexpectedを追加

  • 前提条件違反をレポートするErrorReported#unexpectedを追加

例:

def edit
  if published?
    Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible")
    return false
  end
  # ...
end

上のコードはdevelopment環境やtest環境ではエラーをraiseするが、production環境ではエラーのレポートだけを行う。

Jean Boussier

🔗 Adjust instr. for Cache::Store#fetch_multi so writes are after reads by tgwizard · Pull Request #50071 · rails/rails

  • Cache::Store#fetch_multi操作で、read_multiwrite_multiの通知順序が実際の実行順序と一致するよう修正

Adam Renberg Tamm

🔗 Make return value of Cache::Store#write consistent by Mangara · Pull Request #49873 · rails/rails

  • Cache::Store#writeの戻り値が一貫するよう修正

従来この戻り値は指定されていなかった。修正後は以下のようになった。

書き込みが成功した場合はtrueを返す。
キャッシュバックエンドとの通信でエラーが発生した場合はnilを返す。
別の理由(キーが既に存在し、unless_exist: true が渡されたなど)で書き込みが失敗した場合は false を返す。

Sander Verdonschot

🔗 Fix logged cache key normalization by skipkayhil · Pull Request #50008 · rails/rails

  • ログ出力されたキャッシュキーが、キャッシュ操作で実際に使われたキーと一致しない場合がある問題を修正

Hartley McGuire

🔗 Improve error messages of assert_changes and assert_no_changes by pcreux · Pull Request #48482 · rails/rails

参考: 週刊Railsウォッチ20231114: assert_changesassert_no_changesのエラーメッセージを改善

assert_changesのエラーメッセージでは.inspectでオブジェクトが表示されるようになり、nilと空文字列の違いや、文字列とシンボルの違いなどがわかりやすくなった。
assert_no_changesのエラーメッセージでは、実際の値が表示されるようになった。

pcreux

🔗 Handle negative numbers in NumberToHumanSizeConverter by Earlopain · Pull Request #49791 · rails/rails

参考: 週刊Railsウォッチ20231107: number_to_human_sizeで負数を扱えるよう修正

  • #to_fs(:human_size)が負数を正しく扱えるよう修正

Earlopain

注: これはRails 7.1.2でリリース済みです。

🔗 Add BroadcastLogger#deep_dup by andrewn617 · Pull Request #49720 · rails/rails

  • BroadcastLogger#dupがロガーのbroadcastsを複製できなかったため、deep_dupを追加

Andrew Novoselac

注: これはRails 7.1.2でリリース済みです。

🔗 Fix issue where bootstrap.rb overwrites the level of a BroadcastLogger's broadcasts by andrewn617 · Pull Request #49721 · rails/rails

  • BroadcastLoggerbroadcastslevelをbootstrap.rbが上書きしていたのを修正

Andrew Novoselac

注: これはRails 7.1.2でリリース済みです。

🔗 ActiveSupport::LogSubscriber restore compatibility with SemanticLogger by casperisfine · Pull Request #49621 · rails/rails

  • semantic_logger gemとの互換性を修正。

semantic_logger gemの振る舞いはstdlibロガーと完全に同じではない。stdlibのLogger#levelがIntegerを返すのに対し、SemanticLogger#levelはSymbolを返す。

このため、SemanticLoggerインスタンスを代入するとRailsでさまざまなLogSubscriberクラスが壊れた。

Jean Boussier, ojab

注: これはRails 7.1.2でリリース済みです。

🔗 MemoryStore: prevent race condition by pjambet · Pull Request #49542 · rails/rails

  • MemoryStoreでインクリメントやデクリメントを行ったときの競合状態を防止するよう修正

Pierre Jambet

注: これはRails 7.1.1でリリース済みです。

🔗 Implement HashWithIndifferentAccess#to_proc by fatkodima · Pull Request #49475 · rails/rails

参考: 週刊Railsウォッチ20231017: HashWithIndifferentAccess#to_procを実装

  • HashWithIndifferentAccess#to_procを実装

従来は、HashWithIndifferentAccessオブジェクトに対して#to_procを呼び出すと、Hashクラスから継承された#to_procメソッドが使われていたが、これは文字列キーとシンボルキーを問わず値にアクセスする機能が使えなかった。

fatkodima


これより前のActive Supportの変更については7-1-stableを参照してください。

関連記事

Rails 7.1.0 Railties CHANGELOG(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。