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

前の記事

Laravel イベント
AWS

次の記事

AWS セキュリティ