mcpField
L
laravel:queues-and-horizon

laravel:queues-and-horizon

github.com/jpcaparas開発157169 回インストール17 週間前に更新
リポジトリ

laravel:queues-and-horizon について

Laravel のキューと Horizon の運用、ジョブの動作検証を扱うスキルです。ワーカーのコマンド、再試行に耐える設計、ルーティング、監視、テストを紹介します。

主な機能

  1. 01ワーカーと Horizon のコマンド
  2. 02名前付きキューによる優先順位付け
  3. 03再試行に耐えるジョブ設計
  4. 04キュールーティングとジョブ属性
  5. 05ジョブのディスパッチと統合テスト

活用シーン

  1. 01キューと再試行の設定でワーカーを実行
  2. 02ルーティング方針に沿って接続先とキューを指定
  3. 03ジョブのディスパッチと副作用を検証
  4. 04失敗したジョブとキューの動作を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jpcaparas/superpowers-laravel --skill laravel:queues-and-horizon

インストール後、Claude Code で/laravel:queues-and-horizonを入力して読み込まれたか確認します。

詳細

キューと Horizon

ワーカーを安全に実行し、実行を検証し、ジョブの動作をテストします。

コマンド

# Start worker
sail artisan queue:work --queue=high,default --tries=3 --backoff=5   # or: php artisan queue:work --queue=high,default --tries=3 --backoff=5

# Horizon (if installed)
sail artisan horizon                                               # or: php artisan horizon

# Failed jobs
sail artisan queue:failed                                          # or: php artisan queue:failed
sail artisan queue:retry all                                       # or: php artisan queue:retry all

パターン

  • 優先順位付けには名前付きキューを使用し、デフォルト設定は適切に保ちます
  • ジョブでは、状況を示す情報を含めて実行可能な Log::warning/::error を追加します
  • 冪等性:ジョブを安全に再試行できるようにします
  • 可能な場合はメトリクスを出力し、Horizon または APM で監視します

Laravel 13+

# Centralized queue routing (e.g., in AppServiceProvider)
Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');

# Declarative job controls via attributes
use Illuminate\Queue\Attributes\{Tries, Backoff, Timeout, FailOnTimeout};

#[Tries(3)]
#[Backoff([10, 30, 60])]
#[Timeout(120)]
#[FailOnTimeout]
class ProcessPodcast implements ShouldQueue { /* ... */ }

# Graceful shutdown for long-running jobs
class ProcessPodcast implements ShouldQueue, Interruptible {
    public function onInterrupt(): void { /* release locks, save state */ }
}

# Auto-scaling friendly worker exit
sail artisan queue:work --stop-when-empty-for=60   # or: php artisan queue:work --stop-when-empty-for=60
  • キューの振り分けが呼び出し元の判断ではなくポリシーである場合は、ディスパッチごとの onQueue() より Queue::route() を優先します
  • 属性を優先するスタイルのトレードオフについては、laravel:php-attributes を参照してください

ジョブのテスト

  • 単体テストでディスパッチを検証するには Bus::fake() を使用します
  • 副作用(DB/IO)を検証するには統合テストを使用します

コメント