Rabbit Slide Show

Redmine × Solid Queue: 安心簡単キュー構成

2025-07-25

Description

2025-07-25に開催されたREDMINE JAPAN vol.4の発表資料

Text

Page: 1

Redmine × Solid Queue:
安心簡単キュー構成
西田雄也
2025-07-25
REDMINE JAPAN vol.4
Powered by Rabbit 3.0.5

Page: 2

背景: キューアダプター
https://www.redmine.org/projects/redmine/wiki/
RedmineInstall#Queues-adapter より,
Redmine uses ActiveJob::QueueAdapters::AsyncAdapter
as default queue adapter which is not recommended
for production environment. Recommended adapter is
Sidekiq which uses Redis for persistance.
RedmineはAsyncAdapterをデフォルトのキューアダプター
として使うが,本番環境では推奨しない.
推奨するアダプターはRedisを永続化に使うSidekiqである.
1/20

Page: 3

背景: どういうことか
Redmineはチケットの追加や更新をメイル通知するのにデフォル
トではキューアダプターにAsyncAdapterを使っている.
AsyncAdapterはスレッドベースのため,Redmineが終了すると
そのジョブが失われる.具体的にはメイルが失われる.
↓
実運用の例としてジョブの保存先にRedisを使うSidekiqAdapter
の設定方法がredmine.orgで紹介されている.
https://www.redmine.org/projects/redmine/wiki/SidekiqConfiguration
2/20

Page: 4

背景: キューアダプターあれこれ
RDBMSをバックエンドにするキューアダプター:
DelayedJob, GoodJob, Solid Queue
RDBMSで済むならSidekiqと違ってRedisが不要になる
ただしパフォーマンス面はRedisの方が良い
Rails 8からSolid Queueがデフォルトのキューアダプターに
なった
↓
Redmineでも使って楽しよう!
3/20

Page: 5

手順: 準備
1. Gemfile.localにgem "solid_queue"
2. 実行: bundle && bin/rails solid_queue:install
3. db/migrate/年月日時分秒_add_solid_queue_tables.rbに
db/queue_schema.rbの内容を書く
楽するためにシングルデータベースにしてます
4. 実行: bin/rails db:migrate
5. config/additional_environment.rbに
config.active_job.queue_adapter = :solid_queue
4/20

Page: 6

手順: ジョブ処理プロセス実行
以下のようにしてスーパーバイザー(ジョブ処理のためのもろ
もろのプロセス実行するもの)起動
$ bin/jobs start
Pumaを使っている場合はRedmine起動時に合わせて起動する
ことも可能
# config/puma.rb
plugin :solid_queue
5/20

Page: 7

できた!
6/20

Page: 8

redmine.orgのWikiにも書いた
https://www.redmine.org/projects/redmine/wiki/
SolidQueueConfiguration
7/20

Page: 9

めでたし
めでたし

Page: 10

いや ちょっ
と待ってく
ださい

Page: 11

手順
1. Gemfile.localにgem "solid_queue"
2. 実行: bundle && bin/rails solid_queue:install
3. db/migrate/年月日時分秒_add_solid_queue_tables.rbに
db/queue_schema.rbの内容を書く
4. 実行: bin/rails db:migrate
5. config/additional_environment.rbに
config.active_job.queue_adapter = :solid_queue
6. このあとスーパーバイザー起動
10/20

Page: 12

手順が
多い!

Page: 13

もっと簡単
にできない
のか?

Page: 14

そうだ

Page: 15

我らが
Redmineは

Page: 16

プラグイン
機能がある

Page: 17

という
ことで

Page: 18

プラグインを書きました
redmine_solid_queueプラグインを入れて,
$ git clone \
https://github.com/nishidayuya/redmine_solid_queue \
plugins/redmine_solid_queue &&
bin/rails redmine:plugins
スーパーバイザーを起動するだけ
$ plugins/redmine_solid_queue/bin/jobs start
Pumaを使っている場合は↑も不要という親切設計
別ノードにしたいから余計なお世話な場合は環境変数でdisable
17/20

Page: 19

まとめ
Solid Queueは安心簡単
メイル通知の頻度によってはこれだけで十分
↓のプラグインを使えば最低2コマンド実行だけで導入可能
https://github.com/nishidayuya/redmine_solid_queue
18/20

Page: 20

参考
https://github.com/rails/solid_queue
Sidekiq vs Solid Queue
https://kaigionrails.org/2024/talks/willnet/
Redis不要のSolid QueueはSidekiq OSSに勝てるのか?Rails
8で非同期処理を徹底比較
https://zenn.dev/counterworks/articles/a899a4f6a621e9
(How I) Deploy Solid Queue with Capistrano
https://world.hey.com/robzolkos/how-i-deploy-solid-queue-with-
capistrano-487b4a31
19/20

Page: 21

自己紹介: 西田雄也 @nishidayuya
ネットワーク応用通信研究所所属プログラマ
作ったことがあるRedmineプラグイン
redmine_text_format_converter: TextileからMarkdownへ変換
redmine_ruby_wasm: Redmine上でRubyのコードを実行
The Never Deleting Story a.k.a. 絶対削除させないマン
redmine_solid_queue (new!)
Powered by Rabbit 3.0.5
20/20

Other slides