[Rails] Queue Classic Active Jobアダプターの非推奨化
背景
RailsのActive Jobは、さまざまなバックエンドキューシステムに対応するためのアダプターを提供してきました。しかし、保守性とコードベースの健全性を保つため、Rails 7以降、組み込みアダプターを段階的にgemとして分離する方針が進められています(#52929)。
今回、最後の分離対象としてqueue_classicアダプターが非推奨化されました。queue_classicは2年以上活発な開発が行われておらず、アップストリームへの統合提案(QueueClassic/queue_classic#354)も応答がない状態が続いていました。
技術的な変更内容
非推奨化の実装
Queue Classicアダプターにcheck_adapterメソッドが追加され、アダプター使用時に非推奨警告が表示されるようになりました。
変更後:
def check_adapter
ActiveJob.deprecator.warn <<~MSG.squish
The built-in `queue_classic` adapter is deprecated and will be removed in Rails 9.0.
MSG
end
このcheck_adapterメソッドは、アダプターが設定される際に自動的に呼び出され、Rails 9.0での完全削除を予告する警告を出力します。
テストの追加
非推奨警告が正しく動作することを確認するテストケースが追加されました。
if adapter_is?(:queue_classic)
test "queue classic adapter should be deprecated" do
before_adapter = ActiveJob::Base.queue_adapter
msg = <<~MSG.squish
The built-in `queue_classic` adapter is deprecated and will be removed in Rails 9.0.
MSG
assert_deprecated(msg, ActiveJob.deprecator) do
ActiveJob::Base.queue_adapter = :queue_classic
end
ensure
ActiveJob::Base.queue_adapter = before_adapter
end
end
影響と移行パス
現在queue_classicを使用しているプロジェクトは、Rails 9.0までに以下のいずれかの対応が必要です:
- 別のアダプターへの移行: Sidekiq、Resque、Delayed Jobなど、活発にメンテナンスされているアダプターへの移行
- 独立したgemとしての使用: 将来的にqueue_classic側でアダプターがgemとして提供される可能性に期待
非推奨期間はRails 8系全体を通して継続し、Rails 9.0で完全に削除される予定です。この猶予期間中に移行を完了することが推奨されます。
まとめ
この変更により、Railsのコア機能として組み込まれていたすべてのActive Jobアダプターの分離が完了しました。Railsチームは保守性の高いコアを維持しつつ、活発なエコシステムによるアダプター開発を促進する方針を明確にしています。Queue Classicユーザーは早期の移行計画立案が推奨されます。