Laravelには便利なスケジューラー機能があり、設定した処理を、app/Kernel.phpに設定したタイミングで実行してくれます。
ただLaravel11からは、app/Kernel.phpファイルがなくなり、routes/console.phpに直接処理を書けるようになりました。
具体的にどのようにするか解説します。
なおLaravel10までの方法は下記をご覧ください。
Laravel11でスケジューラー機能を使う方法① 直接記入
routes/console.phpに直接コードをいれることができます。たとえば、コマンドラインに「こんにちは」と表示するには、下記のようにいれます。
【console.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; // 追加 use Illuminate\Support\Facades\Schedule; Artisan::command('inspire', function () { $this->comment(Inspiring::quote()); })->purpose('Display an inspiring quote')->hourly(); // 追加 Schedule::call(function(){ dd('こんにちは'); })->everySecond(); |
コマンドラインからスケジューラを実行するには、下記を実行します。
1 |
php artisan schedule:run |
コマンドライン上に下記のように表示されます。
Laravel11でスケジューラー機能を使う方法② 別ファイルに記載
なお、これまでどおり別ファイルにコードを書き、これを呼び出すことができます。たとえば下記のようにコマンドを実行すると、app/Console/CommandsにGreetingsファイルができます。
1 |
php artisan make:command Greetings |
handleは、次のように設定します。
1 2 3 4 |
public function handle() { $this->info('Hello'); } |
routes/console.phpに下記を追加します。
1 |
Schedule::command('app:greetings')->everySecond(); |
コマンドラインからスケジューラを実行するには、下記を実行します。
1 |
php artisan app:greetings |
コマンドライン上に下記のように表示されます。
さいごに
Laravel11は、色々なファイルがデフォルトで非表示になりました。また今回のkernel.phpのように、ファイルそのものがなくなったりしています。
よりシンプルで分かりやすい構造になっているといえます。
ただ、ユーザーとしては最初とまどってしまいますよね^^;
Laravel11の変更点については、下記記事も参考にしてください。