SidekiqのTesting API変更に対応した統合テストアダプタの修正
Rails 8.1 stableブランチでSidekiq 8.1.1の新Testing APIに対応し、統合テスト実行時の非推奨警告を解消しました。Sidekiq 8.1.1で require "sidekiq/testing" が非推奨となったことを受け、新旧両方のAPIに対応する条件分岐を実装しています。
背景
Sidekiq 8.1.1ではc4f6807により新しいTesting APIが導入され、従来の require "sidekiq/testing" が非推奨となりました。この変更により、Railsの統合テストでSidekiqアダプタを使用すると「require "sidekiq/testing" is deprecated and will be removed in Sidekiq 9.0」という警告が表示されるようになっていました。
#56862では sidekiq/testing/inline の非推奨警告に対応しましたが、テストモードを無効化する処理については未対応のままでした。本PRは、この残された非推奨警告を解消するものです。
技術的な変更
activejob/test/support/integration/adapters/sidekiq.rb にバージョン分岐を追加し、Sidekiq 8.1.1以降では新API、それ以前では従来のAPIを使用するようにしました。
変更前:
require "sidekiq/api"
require "sidekiq/testing"
Sidekiq::Testing.disable!
変更後:
require "sidekiq/api"
if Sidekiq.respond_to? :testing! # 8.1.1
Sidekiq.testing!(:disabled)
else
require "sidekiq/testing"
Sidekiq::Testing.disable!
end
Sidekiq.respond_to? :testing! でバージョンを判定し、8.1.1以降であれば Sidekiq.testing!(:disabled) を呼び出してテストモードを無効化します。それ以前のバージョンでは従来通り Sidekiq::Testing.disable! を使用します。この実装により、統合テスト実行時に非推奨警告が表示されなくなり、Sidekiq 9.0での削除に向けた準備が整いました。
設計判断
メソッドの存在チェックによるバージョン判定が採用されました。Sidekiq.respond_to? :testing! により、Gemfileでのバージョン制約を追加せずに新旧両方のSidekiqバージョンに対応できます。
この判定方法により、Rails 8.1 stableブランチが様々なSidekiqバージョンと組み合わせて使用される状況に対応できます。バージョン番号による判定ではなくメソッドの存在確認を使うことで、Sidekiqの内部実装の変更に柔軟に追従できる設計になっています。
本PRは8-1-stableブランチへのバックポートであり、統合テストの実行環境を最新のSidekiqと互換性のある状態に保つための修正です。Sidekiq.testing! メソッドの有無で判定することで、最小限のコード変更で後方互換性を維持しながら新APIに移行しています。