[Rails] Active JobのResqueアダプタが非推奨に - Resque 3.0以降への移行を推奨
背景
Rails 8.0において、Active Job の組み込み Resque アダプタが非推奨となりました。この変更は、Resque gem 自体が v3.0 で独自の Active Job アダプタを提供するようになったことに起因します。既に Sidekiq アダプタで実施された方針と同様、メンテナンスの責任を各ジョブキューイングライブラリ側に委譲する流れの一環です。
この非推奨化により、Resque を使用しているプロジェクトは Resque gem をバージョン 3.0 以降にアップグレードし、gem 側が提供するアダプタに移行する必要があります。Rails 9.0 では組み込みアダプタが完全に削除される予定です。
技術的な変更内容
非推奨警告の実装
ResqueAdapter クラスに check_adapter メソッドが追加され、アダプタの初期化時に非推奨警告が表示されるようになりました。
変更後:
class ResqueAdapter < AbstractAdapter
def check_adapter
ActiveJob.deprecator.warn <<~MSG.squish
The built-in `resque` adapter is deprecated and will be removed in Rails 9.0.
Please upgrade `resque` gem to version 3.0 or later to use the `resque` gem's adapter.
MSG
end
def enqueue(job)
JobWrapper.instance_variable_set(:@queue, job.queue_name)
Resque.enqueue_to job.queue_name, JobWrapper, job.serialize
end
# ...
end
この警告は、以下のような設定を行った際に表示されます:
Rails.application.config.active_job.queue_adapter = :resque
テストの追加
非推奨警告が正しく表示されることを確認するテストケースが追加されました。
if adapter_is?(:resque)
test "resque adapter should be deprecated" do
before_adapter = ActiveJob::Base.queue_adapter
msg = <<~MSG.squish
The built-in `resque` adapter is deprecated and will be removed in Rails 9.0.
Please upgrade `resque` gem to version 3.0 or later to use the `resque` gem's adapter.
MSG
assert_deprecated(msg, ActiveJob.deprecator) do
ActiveJob::Base.queue_adapter = :resque
end
ensure
ActiveJob::Base.queue_adapter = before_adapter
end
end
CHANGELOG の更新
変更履歴に以下のエントリが追加されました:
* Deprecate built-in `resque` adapter.
If you're using this adapter, upgrade to `resque` 3.0 or later to use the `resque` gem's adapter.
*zzak, Wojciech Wnętrzak*
移行方法
Resque を使用しているプロジェクトでは、以下の手順で移行を行ってください:
-
Resque gem のアップグレード:
Gemfileで Resque のバージョンを 3.0 以降に指定します。
gem 'resque', '~> 3.0'
- bundle update の実行:
bundle update resque
- 設定の確認: アダプタの設定方法は変わりませんが、Resque gem 側のアダプタが使用されるようになります。
config.active_job.queue_adapter = :resque
Resque 3.0 以降を使用することで、非推奨警告は表示されなくなり、gem 側で提供される最新のアダプタが利用できます。
まとめ
この変更は、各ジョブキューイングライブラリのメンテナが自身のライブラリに最適化された Active Job アダプタを提供できるようにするための戦略的な決定です。Sidekiq に続き Resque でも同様の方針が採用され、Rails コアチームはフレームワーク本体のメンテナンス負荷を軽減しながら、各ライブラリの進化に対応しやすい体制を整えています。
既存のコードへの影響は最小限ですが、Rails 9.0 のリリースまでに Resque gem のアップグレードを完了させることが推奨されます。