Rails6.1の Rails.application.config.action_mailer.deliver_later_queue_name を試してみる

Rails6.1で新たに利用できるようになった```Rails.application.config.action_mailer.deliver_later_queue_name```という設定。

new_framework_defaults_6_1.rbに書かれている。
ドキュメントを確認すると、
https://railsguides.jp/configuring.html#config-action-mailer-deliver-later-queue-name

> 配信ジョブで用いるActive Jobキューを指定します。

と書かれています。どうやら```config.active_job.default_queue_name```と似たようなことができるらしい。

### config.active_job.default_queue_name

とはいえ```config.active_job.default_queue_name```もよくわかっていないので先にこっちを使ってみます。

まず適当にjobを作ってみます。
``` rails g job great``` でjobを作成。jobの名前は適当。中身も適当。

```great_job.rb
class GreatJob < ApplicationJob
  queue_as :default

  def perform
    queue_name
  end
end
```

コンソールで実行
```terminal
[1] pry(main)> job = GreatJob.new
[2] pry(main)> job.perform_now
Performing GreatJob (Job ID: 41bbe02a-203f-48b9-99fb-4025f2126086) from Sidekiq(default) enqueued at 
Performed GreatJob (Job ID: 41bbe02a-203f-48b9-99fb-4025f2126086) from Sidekiq(default) in 0.14ms
=> "default"
```

Sidekiqのあたりは無視して、queue_nameはdefaultが出力されました。
シンプルなApplicationJob(ActiveJob::Baseを継承しただけのclass)だとこんな感じになります。

queue_asで:defaultが指定されているので当然default

#### config.active_job.default_queue_nameを変更

というわけで```config.active_job.default_queue_name```を変更してみます。
queue_asがついているとdefaultになってしまうのでコメントアウトして

```great_job.rb
class GreatJob < ApplicationJob
  # queue_as :default

  def perform
    queue_name
  end
end
```
config.active_job.default_queue_nameでキューを指定
```application.rb
config.active_job.default_queue_name = :gorila
```

コンソールで実行
```terminal
[1] pry(main)> job = GreatJob.new
[2] pry(main)> job.perform_now
Performing GreatJob (Job ID: 84d1755c-8ed0-4684-910b-9dd4d4e0dd52) from Sidekiq(gorila) enqueued at 
Performed GreatJob (Job ID: 84d1755c-8ed0-4684-910b-9dd4d4e0dd52) from Sidekiq(gorila) in 0.17ms
=> "gorila"
```

なるほど確かにキューが```config.active_job.default_queue_name```で指定したものになっています。

### config.action_mailer.deliver_later_queue_name

というわけで本題の```config.action_mailer.deliver_later_queue_name```
おそらくActiveJobのdefault_queue_nameと同じことをActionMailerでやるんだろうという感じですが

また適当にmailerを作成
```rails g mailer good``` 

ちなみにApplicationMailerはこんな感じ
```application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from: 'gorila@example.com'
  layout 'mailer'
end
```
mailerの中身は適当
普段は固有名詞でもない限りローマ字の変数は使いませんが、確認するだけなので...

```good_mailer.rb
class GoodMailer < ApplicationMailer
  def good_mail(tekitou_mail_adress)
    mail(to: tekitou_mail_adress, subject: 'キューを確認するよ！！')
  end
end
```

deliver_nowだとjobが見れないのでdeliver_laterで実行
```terminal
[1] pry(main)> good_mail_deliver = GoodMailer.good_mail('tekitou@example.com').deliver_later
Enqueued ActionMailer::MailDeliveryJob (Job ID: 28fb613b-2d98-42f3-8929-07960dac5085) to Sidekiq(gorila) with arguments: "GoodMailer", "good_mail", "deliver_now", {:args=>["tekitou@example.com"]}
=> #<ActionMailer::MailDeliveryJob:0x00007ff193de8320
 @arguments=["GoodMailer", "good_mail", "deliver_now", {:args=>["tekitou@example.com"]}],
 @exception_executions={},
 @executions=0,
 @job_id="28fb613b-2d98-42f3-8929-07960dac5085",
 @priority=nil,
 @provider_job_id="d72bfb25854d0e5ae2324be1",
 @queue_name="gorila",
 @timezone="Tokyo">
```

queue_nameはなんと"gorila"！？！？
さっき```config.active_job.default_queue_name```で設定したキューです。
MailDeliveryJobでもactive_jobのdefault_queue_nameが使われるのか...(無知)

では満を辞して```action_mailer.deliver_later_queue_name```を設定します。
```application.rb
config.action_mailer.deliver_later_queue_name = :golden_lion_tamarin
```
ゴールデンライオンタマリンはオマキザル科ライオンタマリン属に分類されるサルです。グリザイアシリーズで存在を知りました。

いざ、実行！！
```terminal
[1] pry(main)> GoodMailer.good_mail('tekitou@example.com').deliver_later
Enqueued ActionMailer::MailDeliveryJob (Job ID: f1af94c0-b5e6-4e2b-8f81-2be116a8b394) to Sidekiq(golden_lion_tamarin) with arguments: "GoodMailer", "good_mail", "deliver_now", {:args=>["tekitou@example.com"]}
=> #<ActionMailer::MailDeliveryJob:0x00007fa21d329d28
 @arguments=["GoodMailer", "good_mail", "deliver_now", {:args=>["tekitou@example.com"]}],
 @exception_executions={},
 @executions=0,
 @job_id="f1af94c0-b5e6-4e2b-8f81-2be116a8b394",
 @priority=nil,
 @provider_job_id="31263cbf67c9fcf5b611de20",
 @queue_name="golden_lion_tamarin",
 @timezone="Tokyo">
```

queue_nameがちゃんとgolden_lion_tamarinになっています。

> このオプションがnilに設定されている場合、配信ジョブはデフォルトのActive Jobキューに送信されます（config.active_job.default_queue_nameを参照）

まあ結局、ドキュメントに書かれていることを時間をかけて確認しただけなんですが、ActiveJobやらmailerやらをあまり触ったことがないもので...

### 結論
rails6.0 => rails6.1のアップグレード時には、mailerで使うキューが自分の想定したものになっているかを確認すれば良さそう。
今まで:mailersを使っていたなら
```application.rb
config.action_mailer.deliver_later_queue_name = :mailers
```
にすれば良いし、個人開発だし:defaultでいいや、ってなるなら:defaultでも良さそう