Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby on Rails: sidekiq-schedulerでjobをスケジュール実行するメモ

Railsで非同期jobを利用する際にSidekiqを使っている場合、任意のJobをスケジュール実行したいことがあります。 今までは割とsidekiq-cronを使うことが多かったのですが、最近はsidekiq-schedulerの方が活発にメンテナンスされており、そちらを使ってみたので導入方法とかをメモ📝

github.com

導入方法

導入は簡単で以下のようにinstallして

gem install sidekiq-scheduler # Gemfileに追記してbundle install

既存のconfig/sidekiq.ymlに以下のように追記してあげるだけです。

:schedule:
  hello_world:
    cron: '0 * * * * *'   # Runs once per minute
    class: HelloWorld

この辺のsidekiq.rbをいじらずに使えるのも良いですね ✨

dashboardにスケジュールの情報を表示する

web uiも用意されていて以下をroutes.rbに記載すればdashboardにスケジュールを表示できます。

require 'sidekiq/web'
require 'sidekiq-scheduler/web'
mount Sidekiq::Web, at: '/sidekiq'

その他

またsidekiq-cronと同様にredisに既にエンキューされてないかチェックしてそうなので、複数プロセスで立ち上げた際にスケジュールjobが重複して実行されないようになってそう👀

github.com

おわりに

sidekiq-schedulerよさそう!!