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’) | タイムゾーン設定 | 

