【Rails】Rails 8でSolid Queueを使って非同期ジョブを動かす方法

Rails8 イメージ

Rails 8 では、Active Job のキュー基盤として Solid Queue が標準で使えるようになっています。
Redis など別のミドルウェアを用意しなくても、データベースベースで非同期ジョブを扱えるので、以前より導入しやすくなった印象です。

今回は、Rails 8 で Solid Queue を使って簡単なジョブを動かすところまでをメモしておきます。

目次

Solid Queueとは

Solid Queue は、Rails 8 以降で標準採用されているデータベース駆動型のキューイング基盤です。
通常のジョブ実行だけでなく、遅延実行、優先度、並行制御などにも対応しています。

「まずはRails標準の仕組みで非同期処理を試したい」という時にはかなり使いやすいです。

基本設定

環境設定で、Active Job のアダプタを Solid Queue にします。

config.active_job.queue_adapter = :solid_queue

さらに、Solid Queue 用のDB接続設定を入れます。

config.solid_queue.connects_to = { database: { writing: :queue } }

database.yml 側では、queue 用の接続を定義しておきます。
このあたりは既存アプリの構成によって変わるので、プロジェクトに合わせて調整します。

テーブルを準備する

設定を書いたら、まずはDB準備です。

bin/rails db:prepare

これで、Solid Queue が利用するテーブル群も含めて準備できます。

ジョブを作る

たとえば、こんなシンプルなジョブを作ります。

class SampleJob < ApplicationJob
  queue_as :default

  def perform(name)
    Rails.logger.info "Hello, #{name}"
  end
end

呼び出しは以下でOKです。

SampleJob.perform_later("Taro")

これでジョブがキューに積まれます。

ジョブを実行する

キューを実際に処理するには、ジョブプロセスを起動します。

bin/jobs start

ジョブを enqueue しただけでは即時実行されず、処理プロセスが動いてはじめて消化されるので、ここは忘れやすいポイントです。

まとめ

Rails 8 で非同期処理を始めるなら、まず Solid Queue を素直に使ってみるのがわかりやすいです。
Redis を別途用意しなくてもスタートしやすいので、小〜中規模のアプリではかなり扱いやすいと思います。

とりあえず最小構成で試すなら、以下の流れだけ覚えておけばOKです。

  1. config.active_job.queue_adapter = :solid_queue
  2. bin/rails db:prepare
  3. SampleJob.perform_later(...)
  4. bin/jobs start

Rails 標準寄りで組みたい人には、かなり相性がいいと思います。

参考一次情報

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