Laravelのタスクスケジュール機能(routes/console.php)で、複数の処理を定時実行する際の設定方法について、コードの解説と重要な周辺知識をシンプルにまとめました。
1. 動作させるスケジュール定義コード
以下は、毎日決まった時間に特定の処理を順番に実行するための基本的な記述パターンです。
use Illuminate\Support\Facades\Schedule;
use Illuminate\Support\Facades\Artisan;
Schedule::call(function (): void {
// 順番に実行したいArtisanコマンドを配列に格納
$commands = [
'app:first-task',
'app:second-task',
'app:third-task',
];
// 各コマンドを順番に実行
foreach ($commands as $command) {
Artisan::call($command);
}
})->dailyAt('03:00')
->name('daily-batch-process')
->withoutOverlapping();
2. コードの1行解説
| 記述 | 役割 |
|---|---|
Schedule::call(function () { ... }) |
タイマーが鳴ったときに実行するプログラム内容を記述する |
$commands = [ ... ] |
実行したいタスク(Artisanコマンド)のリスト(配列) |
->dailyAt('03:00') |
「毎日、深夜の3:00」 にこのタイマーを動かす設定 |
->name('...') |
このスケジュールに固有の名前をつける(二重起動防止に必須) |
->withoutOverlapping() |
二重起動防止。前の処理が長引いていたら、今回の実行をスキップする |
3. セットで覚える周辺知識
タスクスケジュールを運用する上で、実務で必ずセットになる知識です。
① 実行頻度(タイマー設定)のバリエーション
dailyAt() 以外にも、以下のようなメソッドチェーンで簡単に頻度を変更できます。
-
->everyFiveMinutes();= 5分おきに実行(リアルタイム性の高い同期など) -
->hourly();= 1時間おきに実行(毎時0分のアラート通知など) -
->weeklyOn(1, '08:00');= 毎週月曜日の朝8:00に実行(週報の集計など)
② スケジュールが自動で動く仕組み(Cronとの連携)
「なぜLaravelのコードを書くだけで定時に動くのか」という裏側の仕組みです。
- サーバー(Linux)の Cron(クーロン) という機能が、1分に1回自動で
php artisan schedule:runというコマンドを実行します。 - 起こされたLaravelが
routes/console.phpを見に行きます。 - 「今がちょうど3:00だから、このタスクを動かそう!」と判断してバッチ処理を実行します。
この仕組みのおかげで、サーバー側の設定を何度もいじることなく、Laravelのコード側だけで安全かつ簡単にタイマー処理を管理できるようになっています。