Laravel バッチ
バッチ種類
種類 | 機能 | 備考 |
---|---|---|
ジョブ | バッチ機能。キューに割り当てられる | LaravelではJobをQueueに並ばせる処理をdispatchと呼ぶ |
キュー | 非同期で実行する場合のジョブのリスト | |
コマンド | php artisan 〜 で実行できるバッチ機能 | |
イベント | event(〜)で実行できるバッチ機能 |
ジョブ/キュー
キュー生成
キューをどこで管理するか?について
Database(Laravelのデフォルト)、AmazonSQS、Redis
等を設定できる
databaseでの管理方法
php artisan queue:table
php artisan migrate
→jobsテーブルが作成される
ここに登録されたジョブ=キュー
キュー接続設定ファイル
※\config\queue.php
<?php
return [
’default’ => env(‘QUEUE_CONNECTION’, ‘sync’),
’connections’ => [
’sync‘ => [
’driver’ => ‘sync’,
],
’database‘ => [
’driver’ => ‘database’,
’table’ => ‘jobs’,
’queue’ => ‘default’,
’retry_after’ => 90,
],
〜
’redis‘ => [
’driver’ => ‘redis’,
’connection’ => ‘default’,
’queue’ => env(‘REDIS_QUEUE’, ‘default’),
’retry_after’ => 90,
’block_for’ => null,
],
],
〜
];
ジョブ生成
php artisan make:job TestJob
→App\Jobs\TestJobクラスが作成される
ジョブ登録
サービスプロバイダ登録
ジョブ用サービスプロバイダ生成
php artisan make:provider JobServiceProvider
→App\Providers\JobServiceProviderが作成される
→registerメソッドにジョブを登録
dispatch
$test = (new TestJob)->delay(10);
dispatch($test);
ジョブの非同期設定
※.env
QUEUE_CONNECTION=sync
同期
キューの実行にDBを利用する場合
QUEUE_CONNECTION=database
jobsテーブルを参照
キューの実行にredisを利用する場合
QUEUE_CONNECTION=redis
ジョブ実行
php artisan queue:work
Workerを起動
Worker=ジョブを実行するプロセス
コマンド
生成
php artisan make:command Test
ファイル
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Test extends Command
{
呼び出しコマンド
protected $signature = ‘command:test‘;
protected $description = ‘test’;
public function __construct()
{
parent::__construct();
}
public function handle()
{
return 0;
}
}
実行
php artisan command:test
laravelソースコードから実行
use \Artisan;
$result = Artisan::call('command:test', [
'--param' => 999,
]);
スケジューラ
登録
※app/Console/Kernel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Console\Commands\Test;
class Kernel extends ConsoleKernel
{
protected $commands = [
Test::class,
];
protected function schedule(Schedule $schedule)
{
$logFilePath = storage_path(‘logs/test.log’);
ジョブのスケジュール登録
$schedule
->job->(new TestJob)
->daily();
コマンドのスケジュール登録
$schedule
->command(‘command:test‘)
->daily()
->appendOutputTo($logFilePath)
;
}
protected function commands()
{
$this->load(__DIR__.’/Commands’);
require base_path(‘routes/console.php’);
}
}
実行
php artisan schedule:run
メソッド
メソッド | 機能 |
---|---|
everyMinute() | 毎分タスク実行 |
everyFiveMinutes() | 5分毎にタスク実行 |
everyTenMinutes() | 10分毎にタスク実行 |
everyFifteenMinutes() | 15分毎にタスク実行 |
everyThirtyMinutes() | 30分毎にタスク実行 |
hourly() | 毎時タスク実行 |
hourlyAt(17) | 一時間ごと、毎時17分にタスク実行 |
daily() | 毎日深夜12時に実行 |
dailyAt(’13:00′) | 毎日13:00に実行 |
twiceDaily(1, 13) | 毎日1:00と13:00時に実行 |
weekly() | 毎週実行 |
weeklyOn(1, ‘8:00’) | 毎週月曜日の8:00時に実行 |
monthly() | 毎月実行 |
monthlyOn(4, ’15:00′) | 毎月4日の15:00に実行 |
quarterly() | 四半期ごとに実行 |
yearly() | 毎年実行 |
timezone(‘America/New_York’) | タイムゾーン設定 |