Laravelのタスクスケジューラを使う方法【現役エンジニアが解説】

PROGRAM

今回は、Laravelのタスクスケジューラを使う方法について、簡単に解説していきます。

コマンドの作成

Laravelのタスクスケジューラを使うにはまずコマンドを作成します。

php artisan make:command SampleCommand

上記のコマンドではapp/Console/Commands/SampleCommand.phpが作成されます。

protected $signature = 'sample:command';

public function handle()
{
    // 処理を書く
}

作成されたファイルのsignatureというメンバ変数の値に任意の名前を、handleメソッド内に任意の処理を書きます。

コマンドの登録

続いて、app/Console/Kernel.phpにコマンドを登録します。

protected $commands = [
    ,Commands\SampleCommand::class
];

上記のように、commandsというメンバ変数に先程のコマンドを追記します。

use Illuminate\Support\Facades\Log;

protected function schedule(Schedule $schedule)
{
    $schedule->command('sample:command')
             ->dailyAt('3:00') 
             ->onSuccess(function () {
                 Log::info('成功');
             })
             ->onFailure(function () {
                 Log::error('エラー');
             });
}

さらに上記のようにscheduleメソッド内で任意の時間に先程のコマンドを実行するように設定します。

cronへの登録

Laravelでコマンド登録が完了したら以下のコマンドで処理を確認できます。

php artisan schedule:run

上記のコマンドが指定した時間に発動しないと意味がないため、以下のコマンドでcron(非Windows)に登録します。

crontab -e

例えば、毎日午前03時00分にLaravelのタスクスケジューラを作動させるには、以下のように登録する必要があります。

0 3 * * * cd プロジェクトの絶対パス && php artisan schedule:run >> /dev/null 2>&1