MENU
カテゴリー

Sidekiqの基本的な使い方についてわかりやすくまとめておく

  • URLをコピーしました!

Railsで開発をしているとだいたいSidekiqという言葉を耳にする。Sidekiqとは一体どういうものなのかこの記事でまとめておく。

目次

Sidekiqの概要

Sidekiqは、RubyやRailsアプリケーション向けのバックグラウンドジョブ処理ツール。特に時間がかかる処理や非同期で実行したいタスクをアプリケーションとは別に実行するために使用される。

GitHub
GitHub - sidekiq/sidekiq: Simple, efficient background processing for Ruby Simple, efficient background processing for Ruby. Contribute to sidekiq/sidekiq development by creating an account on GitHub.

また、このSidekiqを使用するにはRedisというNoSQLデーターベースを使用してジョブを管理する。これによりジョブの管理、再思考を効率的に行うことができる。

Sidekiqの基本的な使い方

Sidekiqの基本的な使い方をまとめておく。

Sidekiqをインストールする

# Gemfile
gem 'sidekiq'

bundle install でgemをインストールする。

Redisをインストールする

SidekiqはRedisを使用するため、ローカルにRedisをインストールしておく必要がある。

brew install redis
brew services start redis

homebrewを使用するならこんな感じ。

Workerクラスを作成する

実際に実行したいジョブのクラスを作成する。

# app/workers/hard_worker.rb
class HardWorker
  include Sidekiq::Worker

  def perform(name, count)
    puts "Doing hard work for #{name}, #{count} times!"
  end
end

このクラス名はWorkerという命名をしなくても問題ない。ただ、このジョブがどのようなものなのかを判別できるものであれば良い。例えば、SendEmailというようなものなど。このような命名であれば、ジョブとしてメールをバックグラウンドで送信するジョブかぁと瞬時に判断できる。

作成したジョブをキューイングする

上記で作成したジョブのクラスを呼び出してキューイングをする。

HardWorker.perform_async('Bob', 5)

このような感じでジョブを実行したいところでHardWorkerクラスを呼び出す。そして、perform_asyncメソッドを使用することで非同期でこのジョブがキューに追加されるようになる。もし引数を設定する必要があるのであれば、引数を渡してあげる。

他にもジョブを実装する上でperform_laterというメソッドを使用することがあるが、これはActiveJobを継承している場合に使用することができる。

Sidekiqダッシュボードを利用する

Sidekiqにはダッシュボードが用意されている。こんな感じのやつ。

これを表示して視覚的にジョブの状態を把握するためにroutes.rbに以下を追加する。

# config/routes.rb
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

これで/sidekiqにアクセスすることでダッシュボードを確認できる。

Sidekiqのジョブオプションについて

class HardWorker
  include Sidekiq::Worker
  sidekiq_options retry: 5, queue: 'critical'

  def perform(name, count)
    # 処理内容
  end
end

先ほどWorkerクラスを作成したが、そのクラスにはオプションを設定することができる。

sidekiq_options retry: 5, queue: 'critical'

retry: 5

これは再試行を5回することができるという例。何かのエラーでジョブの実行がうまくいかなかった場合に5回までは再試行するようというオプション。ちなみにこのretry回数は、config/sidekiq.yml内でもdefualtのretry回数を設定しておくことができる。また、retryとなった場合にも冪等性が担保されるようにする必要があるため注意が必要。(何度実行しても同じ結果となるようにすること)

queue: ‘critical’

これはこのジョブの優先度を表す。他のジョブと比べてどちらを先に処理するべきかを判断する。critical、default、lowがだいたい使用され、これはconfig/sidekiq.yml内で重み付けの設定可能。こちらを詳しく知りたい方は調べてみるのをお勧めする。

まとめ

sidekiqを導入するにあたり基本的な処理の流れは以下。

  1. sidekiqのgemを追加してインストールする。
  2. Redisをインストールして起動する。
  3. ジョブとして使用するクラス(Workerクラス)を作成し、performメソッドに処理を書く。
  4. ジョブを非同期でキューイングperform_asyncする。
  5. Sidekiqでジョブが処理される。
  6. 必要があればダッシュボードでジョブのステータスを監視する。

以上のような流れでSidekiqを利用し、ジョブをバックグラウンドで非同期実行することが可能となる。

よかったらシェアしてね!
  • URLをコピーしました!
目次