laravel:queues-and-horizon について
Laravel のキューと Horizon の運用、ジョブの動作検証を扱うスキルです。ワーカーのコマンド、再試行に耐える設計、ルーティング、監視、テストを紹介します。
主な機能
- 01ワーカーと Horizon のコマンド
- 02名前付きキューによる優先順位付け
- 03再試行に耐えるジョブ設計
- 04キュールーティングとジョブ属性
- 05ジョブのディスパッチと統合テスト
活用シーン
- 01キューと再試行の設定でワーカーを実行
- 02ルーティング方針に沿って接続先とキューを指定
- 03ジョブのディスパッチと副作用を検証
- 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)を検証するには統合テストを使用します
コメント
Markdown 対応