Mail::Address.wrapメソッドの非推奨化
Rails 8.2に向けて、ActionMailboxの Mail::Address.wrap メソッドが非推奨となりました。このメソッドはRails内部で使用されておらず、実質的に不要なAPIとして削除対象になっています。
背景
Mail::Address.wrap はメールアドレスを文字列または Mail::Address オブジェクトのどちらでも受け取れるようにするためのヘルパーメソッドとして実装されていました。しかし、PRの説明によると、このメソッドはRailsのコードベース内で実際には使用されていなかったため、不要なAPIとして整理の対象となりました。
Rails 8.2に向けた整理の一環として、このメソッドの削除が決定されています。
技術的な変更
actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb に非推奨警告が追加されました。メソッド本体の動作は変更されず、呼び出し時に警告が表示されるようになっています。
変更後:
module Mail
class Address
def self.wrap(address)
ActionMailbox.deprecator.warn(<<~MSG.squish)
Mail::Address.wrap is deprecated and will be removed in Rails 8.2.
MSG
address.is_a?(Mail::Address) ? address : Mail::Address.new(address)
end
end
end
テストコードも assert_deprecated ブロックで囲むように修正されました。これにより、テスト実行時に非推奨警告が期待される動作として扱われます。
変更後:
test "wrap" do
assert_deprecated(ActionMailbox.deprecator) do
needing_wrapping = Mail::Address.wrap("david@basecamp.com")
wrapping_not_needed = Mail::Address.wrap(Mail::Address.new("david@basecamp.com"))
assert_equal needing_wrapping.address, wrapping_not_needed.address
end
end
CHANGELOGには非推奨化の記録が追加され、Rails 8.2での完全な削除が予告されています。
設計判断
段階的な削除プロセス が採用されました。Rails 8.1で非推奨化し、Rails 8.2で完全削除する二段階のアプローチです。
この判断により、このメソッドを使用している可能性のある外部アプリケーションに対して、移行期間を提供できます。非推奨警告により、開発者はRails 8.2へのアップグレード前に対応を完了できます。
メソッド自体の実装はシンプルで、引数が Mail::Address オブジェクトならそのまま返し、文字列なら新しい Mail::Address オブジェクトを生成するだけです。アプリケーション側でこのメソッドを使用している場合は、呼び出し箇所でこのロジックを直接実装することで対応できます。
まとめ
本PRは、Rails内部で使用されていない Mail::Address.wrap の削除プロセスを開始しています。非推奨警告の追加により、Rails 8.2での完全削除に向けた移行期間が設けられました。使用されていないAPIの整理は、フレームワークの保守性向上と明確なAPIサーフェスの維持に寄与します。