初めてバックエンドの非同期処理を書くことになったため
良さそうなgemを探したところ、以下の3つが有名なことがわかった。
・Delayed Job
・Resque
・Sidekiq
色んなサイトで、各gemの説明があるので
ここではその説明は省くが
自分の場合、以下の理由から
・Redisも一緒に使ってみたい
・リトライ機能を使用したい
Sidekiqを利用することにした。
[参考]
Sidekiq について基本と1年半運用してのあれこれ - まっしろけっけ
ただ、Rails4.2からActiveJobという上記のgemのアダプターが
利用できるようになったため、そのため表題の通り
ActiveJob経由でSidekiqを使うのが良いか、直接Sidekiqを使うのが良いのか。
で迷った。
まずActiveJob経由で作成する場合のメリットは
書き方が統一されるため、他のgemに変更したとしても
同じコードが流用できるということだ。
しかし、ActiveJob経由でコードを作成した場合
処理が抽象化されるため、細かいSidekiqの設定(例:retryの詳細設定)ができないようだ。
Note that more advanced Sidekiq features (sidekiq_options) cannot be controlled or configured via ActiveJob, e.g. saving backtraces.
By Active Job · mperham/sidekiq Wiki · GitHub
いろいろと検索したら、こんなページが出てきた。
stackoverflow.com
色々とSidekiqの機能が使えなくなるみたい。
でも以下のコメントの通り、
It is totally up to you to decide. Ask yourself do you really need Sidekiq's retry tab ?
Do you need Sidekiq batch processing etc..
If the answer is yes go with sidekiq, after all sidekiq is a well maintained project
結局、ActiveJob経由で使用するか、直接使用するかは要件次第だと考える。
とりあえず非同期処理を試めすために使用したい場合などで
他のgemに変更する可能性がある場合なんかは、ActiveJob経由を使うのが良いか。
そうでなく、Sidekiq一択で、すべての機能を完全に使いたい場合は
Sidekiqを選ぶのが良いか。
[参考]
https://qiita.com/necojackarc/items/b4a8ac682efeb1f62e74
Railsで非同期処理:キュー。Sidekiq(+ActiveJob)がResqueよりも、とても簡単便利。 - Qiita
Rails 非同期で処理を実行する方法(Sidekiq, Resque, Delayed Job, Active Job比較) - Shred IT!!!!
https://www.hommax39.com/archives/398