とーますメモ

Ruby on Rails / Goなどの学習メモ

【Rails】SidekiqをActiveJob経由で使うのが良いか、直接使うのが良いのか。

初めてバックエンドの非同期処理を書くことになったため
良さそうな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