0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sidekiqの動作確認をしてみた

Last updated at Posted at 2025-09-07

Sidekiqの動作を理解するために、手元で簡単な動作確認をしました。
その手順を残します。

SidekiqはRuby向けのバックグラウンドジョブ。
スレッドを使用して、同じプロセス内で複数のジョブを同時に処理することが可能。

https://github.com/sidekiq/sidekiq

動作確認

手順

環境準備

# Redisインストール
brew install redis
brew services start redis

# ディレクトリ作成
mkdir sidekiq
cd sidekiq

# gemのinstall
bundle install

Gemfileの作成

source 'https://rubygems.org'

gem 'sidekiq', '~> 7.0'
gem 'redis', '~> 5.0'

サンプルコードの作成

Workerクラスの作成

sidekiq/worker.rb
require 'sidekiq'

# Redisの接続設定
Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379' }
end

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379' }
end

# Workerクラス
class SampleWorker
  include Sidekiq::Worker

  def perform(name, count)
    count.times do |i|
      puts "こんにちは、#{name}さん! (#{i + 1}回目)"
      sleep 1
    end
    puts "#{name}さんへの処理が完了しました!"
  end
end

エンキュー用スクリプト

sidekiq/enqueue_jobs.rb
require_relative 'worker'

# ジョブをキューに追加
puts "ジョブをキューに追加しています..."

# 基本的なジョブの追加
SampleWorker.perform_async("太郎", 3)
SampleWorker.perform_async("花子", 2)

# 5秒後に実行するジョブ
SampleWorker.perform_in(5, "次郎", 2)

puts "ジョブの追加が完了しました!"
puts "Sidekiqサーバーでジョブが処理されるのを確認してください。"

動作確認

ターミナルを2つ開いて実行

ターミナル1(Sidekiqサーバーの起動)

bundle exec sidekiq -r ./worker.rb

ターミナル2(ジョブの追加)

ruby enqueue_jobs.rb

実行ログ

実行

$ ruby enqueue_jobs.rb
ジョブをキューに追加しています...
太郎さんにジョブを追加しています...
花子さんにジョブを追加しています...
100秒後に実行する次郎さんのジョブを追加しています...
ジョブの追加が完了しました!
Sidekiqサーバーでジョブが処理されるのを確認してください。

Sidekiqログ

2025-09-07T07:16:33.397Z pid=10357 tid=6fd class=SampleWorker jid=d300ccc10a60fbb682191c2c INFO: start
こんにちは、太郎さん! (1回目)
2025-09-07T07:16:33.397Z pid=10357 tid=6lh class=SampleWorker jid=0538ef698bc91b27f254f122 INFO: start
こんにちは、花子さん! (1回目)
こんにちは、太郎さん! (2回目)
こんにちは、花子さん! (2回目)
こんにちは、太郎さん! (3回目)
花子さんへの処理が完了しました!
2025-09-07T07:16:35.408Z pid=10357 tid=6lh class=SampleWorker jid=0538ef698bc91b27f254f122 elapsed=2.011 INFO: done
太郎さんへの処理が完了しました!
2025-09-07T07:16:36.409Z pid=10357 tid=6fd class=SampleWorker jid=d300ccc10a60fbb682191c2c elapsed=3.013 INFO: done
2025-09-07T07:16:55.530Z pid=10357 tid=6lh class=SampleWorker jid=01862a939a0656e6b70a34f6 INFO: start
こんにちは、次郎さん! (1回目)
こんにちは、次郎さん! (2回目)
次郎さんへの処理が完了しました!
2025-09-07T07:16:57.541Z pid=10357 tid=6lh class=SampleWorker jid=01862a939a0656e6b70a34f6 elapsed=2.011 INFO: done
2025-09-07T07:17:38.184Z pid=10357 tid=6kx class=SampleWorker jid=e6833d182dbab576c3a0a796 INFO: start
こんにちは、次郎さん! (1回目)
こんにちは、次郎さん! (2回目)
次郎さんへの処理が完了しました!
2025-09-07T07:17:40.197Z pid=10357 tid=6kx class=SampleWorker jid=e6833d182dbab576c3a0a796 elapsed=2.012 INFO: done

備忘録

Redisの接続設定について

# 2つの役割

# ジョブをキューに追加する側のプロセス
# 例:Worker.perform_async("データ") を実行するプロセス
Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379' }
end

# ジョブを実際に実行する側のプロセス
# 例:bundle exec sidekiq で起動するプロセス
# キューからジョブを取り出して実行する
Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379' }
end
[クライアント]           [Redis]              [Sidekiqサーバー]
    |                     |                        |
    |---(ジョブ追加)------->|                        |
    |   perform_async     |<---(ジョブ取得)----------|
    |                     |     ジョブを処理         |
    
configure_client設定     両方が接続    configure_server設定

Sidekiqサーバー起動時の流れ

bundle exec sidekiq

# Gemfileに記載されたバージョンのSidekiqを実行
# Sidekiqサーバープロセスを起動
# Redisからジョブを取り出して実行する常駐プロセス

# 1. Sidekiqプロセスが起動
# 2. worker.rbを読み込み(Workerクラスが登録される)
# 3. Redisに接続
# 4. ジョブの監視を開始
# 5. ジョブが来たら、該当するWorkerのperformメソッドを実行
[Terminal 1: Sidekiqサーバー]
bundle exec sidekiq -r ./worker.rb
    ↓
Redisを監視開始
    ↓
ジョブを待機中...
    ↓
ジョブを検知!
    ↓
EmailWorker.new.perform("test@example.com")を実行
    ↓
完了、次のジョブを待機...

[Terminal 2: ジョブ投入]
ruby enqueue_jobs.rb
    ↓
EmailWorker.perform_async("test@example.com")
    ↓
Redisにジョブを追加
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?