laravel:task-scheduling について
Laravel の開発者向けに、環境をまたぐ定期タスクの設定方法を案内するスキルです。重複実行の防止、複数ノードでの実行、ライフサイクル処理を扱います。
主な機能
- 01指定時刻でのコマンド実行
- 02タスクの重複実行防止
- 03複数サーバーでの実行調整
- 04バックグラウンドでのジョブ実行
- 05コールバックのグループ化とシグナル時のロック解除
活用シーン
- 01日次レポートコマンドのスケジュール
- 02長時間タスクの重複実行防止
- 03複数ノードでの定期タスク実行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:task-schedulingインストール後、Claude Code で/laravel:task-schedulingを入力して読み込まれたか確認します。
詳細
タスクスケジューリング
環境を問わず、スケジュールされたタスクを予測可能な形で実行します。
コマンド
// app/Console/Kernel.php
protected function schedule(Schedule $schedule): void
{
$schedule->command('reports:daily')
->dailyAt('01:00')
->withoutOverlapping()
->onOneServer()
->runInBackground()
->evenInMaintenanceMode();
}
# Run the scheduler from cron
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1
パターン
- 長時間実行されるコマンドは
withoutOverlapping()で保護します - 複数のノードで実行する場合は
onOneServer()を使用します - 可視性を高めるためにログやメトリクスを出力し、失敗時の通知も検討します
- リスクの高いジョブは、config/env で機能フラグを設定します
Laravel 13+
# Group lifecycle callbacks
Schedule::group([
Command::command('reports:generate'),
Command::command('emails:send'),
])->before(fn () => /* setup */)->after(fn () => /* teardown */);
# Release overlap locks on SIGTERM/SIGINT for fast redeploys
$schedule->command('reports:generate')->withoutOverlapping(releaseOnSignal: true);
# Inspect what runs per environment
sail artisan schedule:list --environment=production # or: php artisan schedule:list --environment=production
コメント
Markdown 対応