Laravelでバッチ処理を行う

2022-05-29

2022-05-29

3 min read

Laravel

バッチ処理とは?

バッチ処理とは、一定のデータのまとまりを一括で処理できるものです。

例えば

  • 毎日夜間のうちにあるデータのバックアップを取る
  • 任意のタイミングであるデータを新しく更新する のような感じです。

このようにバッチ処理は、ある一定のまとまりを処理を行うのに便利ですが、処理の性質上リアルタイムのデータを集計することは不向きとなります。

次に処理を走らす方法としては下記のパターンがあります。

  • cronに実行コマンドを登録して、自動でバッチ処理を行う
  • プログラムからコマンドを実行して、任意のタイミングでバッチ処理を行う

今回はLaravelでバッチプログラムを登録し、Laravelのコマンドを使って実行する流れをご説明します。

バッチファイルを作成する

  • Laravelでバッチ処理を記述するファイルは、下記コマンドで作成できます
$ php artisan make:command HogeHogeBatch
  • バッチファイルの中身を記述します
<?php
namespace App\\Console\\Commands;
use Illuminate\\Console\\Command;
use Illuminate\\Support\\Facades\\Log;
class HogeHogeBatch extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'batch:testBatch';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'テストのバッチ処理';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        Log::info('テストだよ');
    }
}
  • バッチ処理が登録されているか確認して、実行します
$ php artisan list
#出力結果
batch:testBatch    テストのバッチ処理

$ php artisan batch:testBatch

Laravelのlogファイルに、「テストだよ」と表示されれば成功です。

まとめ

バッチ処理は様々なシーンで活用されています。 通常のプログラム同様、エラー時の対応やログを出力する仕組みも考慮しておいた方がいいと思います。

また、夜間に行う想定の処理が重くて、夜間の間に終わらない(「突き抜け」という)などの問題が起きる場合もあります。

実際のシステムでは色々なことを考慮して、開発/運用していく必要があります。