やりたいこと
毎日決まった時間に処理を動かして、バッチ処理のようなものを行う
手順
1.クラスを作成する
php artisan make:command testSchedule
をコマンドラインで叩くと、
App\Console\Commands
配下ににファイルができます。
この部分に実際に行いたい処理を書いていきます。
App\Console\Commands\testSchedule.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class testSchedule extends Command
{
protected $signature = 'test:echo';//ここで指定したコマンドを実行すると処理が走るようになる
protected $description = 'echoする処理です';//コマンドの説明を記載する
public function __construct()
{
parent::__construct();
}
public function handle()//ここに実際に行いたい処理を書く
{
echo 'schedule_test';
}
}
2.Kernelに登録する
/app/Console/Kernel.php
protected $commands = [
Commands\testSchedule::class//追記する
];
3.実行時間を指定する
今回は例として、一時間に一回処理を実行したいとします。
Laravelタスクスケジューラなら他にももっと複雑な指定も可能です。
他に気になる人はこちらを見てみてください。
/app/Console/Kernel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
*
* @return void
*/
protected function schedule(Schedule $schedule): void
{
$schedule->command('test:echo')->hourly();//1の手順で$signatureに記載したものを指定する
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands(): void
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}
4.動作確認をしてみる
コマンドラインで以下を実行すると処理単体で動作確認を行えます。
ここでも1.クラスを作成するの$description
に追加したものを使います。
php artisan test:echo
php artisan schedule:run
を叩くことで登録しているすべての処理を確認できます。