Rails4.2から追加されるActiveJobについて

rails4.2のbeta2が出ましたね。
以前かいたActiveJobについて、修正があったので改めて記事を書きました。

ActiveJobとはRails4.2から追加された仕組みで、delayed_jobやresqueなどのキューイングを行うgemを同じインターフェースで使えるようにしたものです。使うためには以下のようなコードを追加する必要があります。

ActiveJob::Base.queue_adapter = :delayed_job

上記はキューイングで使うgemに何を使うのかで右側の値が変わります。上の例ではdelayed_jobを使う設定になっています。
そして次にActiveJobのジェネレータを使った~Jobクラスを作成します。


rails g job hello

これをによりapp/jobsディレクトリが作成されて、配下にhello_job.rbが作成されます。この作成されたクラスに若干コードを追加して以下のようにします。

class HellloJob < ActiveJob::Base
  queue_as :urgent

  def perform(message = 'test')
    # Do something later
    puts message
  end
end

ここまで作成したら、後はキューにセットしている箇所でActiveJobが用意しているメソッドを使うようにするだけです。
例えば以下のように書きます。

HelloJob.perform_later 'ほげほげほげ'
HelloJob.set(wait: 1.minute).perform_later 'うごうぐぐ'

このperform_laterメソッドがActiveJobが用意しているキューイング処理を行うメソッドです。でsetメソッドで何分後に時刻するかなど設定します。
4.2からはdelayed_jobやresqueを直接使うのではなくActiveJobを使うのがベストなやり方ということになるのでしょうかね。まだちょっとこれを使うメリットが分かっていないのですが・・。