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

Rails 8.1.0.beta1のChangelog: Active Job(全項目リンク付き)

🔗 Active Job Changelog

参考: Release 8.1.0.beta1 · rails/rails
参考: コミットリスト: Comparing v8.0.2.1...v8.1.0.beta1 · rails/rails

🔗 Deprecate built-in sidekiq adapter by fatkodima · Pull Request #53058 · rails/rails

組み込みのsidekiqアダプタを非推奨化した。

この組み込みsidekiqアダプタを利用している場合は、sidekiqを7.3.3以降にアップグレードしてからsidekiq gemに切り替えること。

fatkodima
同Changelogより

sidekiq/sidekiq - GitHub

🔗 Remove deprecated internal SuckerPunch adapter in favor of the adap… · rails/rails@634f90b

内部のSuckerPunchアダプタを削除した。今後はsucker_punch gemに含まれるアダプタを使うこと。

Rafael Mendonça França
同Changelogより

参考: Turn SuckerPunch removal into deprecation and point to async adapter by zzak · Pull Request #52990 · rails/rails

brandonhilkert/sucker_punch - GitHub

🔗 Remove support to set `ActiveJob::Base.enqueue_after_transaction_comm… · rails/rails@f9e51b7

ActiveJob::Base.enqueue_after_transaction_commit:never:always:defaultを設定可能にする非推奨化機能を削除

Rafael Mendonça França
同Changelogより

非推奨化されていたRails.application.config.active_job.enqueue_after_transaction_commitを削除。

Rafael Mendonça França
同Changelogより

enqueue_after_transaction_commitはRails 7.2で導入された機能ですが、Rails 8.0では#53375の非推奨化時点で設定項目から削除されています

参考: Ruby on Rails 7.2 リリースノート - Railsガイド

🔗 Optimize Active Job argument serialization by ~5x by byroot · Pull Request #55583 · rails/rails

ActiveJob::Serializers::ObjectSerializers#klassメソッドがpublicに変更された。

Active Jobのカスタムシリアライザはpublicの#klassメソッドも実装しなければならない。
このメソッドから返されるクラスはインデックスとなって高速なシリアライズを可能にする。

Jean Boussier
同Changelogより

🔗 Active Job Continuations by djmb · Pull Request #55127 · rails/rails

新しいContinuation(継続)によって、Active Jobでジョブの中断(interrupt)や再開(resume)が可能になった。

ジョブにActiveJob::Continuable concernをincludeすることでContinuationを利用可能になる。
Continuationはジョブを複数のステップに分割する。キューイングシステムによってジョブがシャットダウンされると、ジョブは中断可能になり、それまでの進捗が保存される。

class ProcessImportJob
  include ActiveJob::Continuable

  def perform(import_id)
    @import = Import.find(import_id)

    # ブロック形式の場合
    step :initialize do
      @import.initialize
    end

    # ステップはカーソル単位で進められ、ジョブが中断されるとカーソルを保存する
    step :process do |step|
      @import.records.find_each(start: step.cursor) do |record|
        record.process
        step.advance! from: record.id
      end
    end

    # メソッド形式の場合
    step :finalize

    private
      def finalize
        @import.finalize
      end
  end
end

Donal McBreen
同Changelogより

Railsにジョブを中断・再開できるActive Job Continuationがマージされた(翻訳)

🔗 Defer ActiveJob enqueue callbacks until after commit when enqueue_after_transaction_commit enabled by wroever · Pull Request #55004 · rails/rails

enqueue_after_transaction_commitがtrueの場合に、Active Jobのエンキューコールバックがafter_commitまで先送り(defer)されていなかった問題を修正。

Will Roever
同Changelogより

🔗 Add report: option to ActiveJob::Base#retry_on and #discard_on by andrewn617 · Pull Request #54541 · rails/rails

 ActiveJob::Base#retry_onメソッドと#discard_onメソッドにreport:オプションが追加された。

report: オプションを渡すと、ジョブがリトライまたは破棄される前にエラーレポーターにエラーが報告される。

Andrew Novoselac
同Changelogより

🔗 Accept a block for ActiveJob::ConfiguredJob#perform_later by fatkodima · Pull Request #53859 · rails/rails

 ActiveJob::ConfiguredJob#perform_laterメソッドにブロックも渡せるようになった。

ActiveJob::Base#perform_laterメソッドではブロック渡しが可能だったので、従来は一貫していなかった。

fatkodima
同Changelogより

🔗 Raise a more specific error when the job class can't be instantiated by Earlopain · Pull Request #53770 · rails/rails

シリアライズされたジョブクラスがデシリアライズで"unknown"になった場合のエラーメッセージを表示するためのエラークラスが追加された。

従来のNameError に代えてActiveJob::UnknownJobClassErrorがraiseされるようになる。これによって、発生したエラーがNameErrorかどうかをアダプタ側で判断しやすくなる。

Earlopain
同Changelogより

関連記事

速報: Rails World 2025のDHHキーノートとRails 8.1beta1リリース

Rails 8.1.0.beta1のChangelog: Active Record(全項目リンク付き)

Rails 8.1.0.beta1のChangelog: Active Support(全項目リンク付き)


CONTACT

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