😺
【Laravel】 バッチ処理機能を実装する
この記事を読んでわかること
- artisanコマンドの作成方法
- artisanコマンドを意図した時間に自動実行する方法
- crontabファイルの記載の仕方
使用環境
- Laravel 5.5.49
- PHP 7.1.29
全体の流れ
- artisanコマンドの作成
- artisanコマンドの登録
- crontabに登録
artisanコマンドの作成
$ php artisan make:command HogeBatch
コマンド実行で、app/Console/CommandsにHogeBatch.phpが作成されます。
ファイルの中身と記述内容に関しては以下に記載します。
apop/Console/Commands/HogeBatch.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class HogeBatch extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'batch:hoge';//artisanで呼び出すときのコマンド名。
/**
* The console command description.
*
* @var string
*/
protected $description = '説明文';//artisanコマンド一覧で表示される説明文。設定は任意。
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//実行したい処理の記載
}
}
artisanコマンドの登録
Laravel内でコマンドの管理を行いやすくするために、コマンドの登録をしておきます。
app/Console/Kernel.php
<?php
namespace App\Console;
use App\Console\Commands\HogeBatch;//追記
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
^ //登録したいコマンドのクラスを記述
protected $commands = [
^ ^ HogeBatch:class,//追記
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
^ //artisanコマンドの実行スケジュールを記述
protected function schedule(Schedule $schedule)
{
//追記
$schedule->command('batch:hoge')
->everyMinute();//スケジューラーを記載
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
スケジューラーに関しては公式ドキュメントを参照して下さい。
crontabに登録
crontabを開き、下記の一行を追加すると、登録したコマンドが設定したスケジューラーの時間ごとに実行されます。
$ crontab -e
* * * * cd プロジェクトのパス&&php artisan schedule:run 1>/プロジェクトのパス/normal.txt 2>/プロジェクトのパス/error.txt
crontabに記載した内容を解説します。
cd プロジェクトのパス //ディレクトリを移動
&&php artisan schedule:run //かつ、Laravelのスケジュールを実行
1>/プロジェクトのパス/normal.txt 2>/プロジェクトのパス/error.txt
//標準出力をnormal.txtに、標準エラー出力をerror.txtに出力するようにしています
標準出力、標準エラー出力、コマンドの意味については、いい加減覚えよう。 command > /dev/null 2>&1
の意味が参考になりました。
以上でLaravelでのバッチ処理が実装が完了です。
参考記事
Discussion