laravel12.laravel_113
R e i - D r e a m
for Laravel
TOP > Laravel Ver.12 > その他中間モジュール(バッチ)
Guest
login

最終投稿日:2026年06月22日

その他中間モジュール(バッチ)
Laravelでは『artisan』コマンドを使ってバッチ処理を作成・実行します。
主に手動実行とスケジューラーによる自動実行の2つの方法があります。
手動実行
まずは[artisan]コマンドでクラスを作成してみましょう。
ターミナル

C:\~\laravel_12> php artisan make:command BatchSample
    INFO Console command [C:\~\app\Console\Commands\BatchSample.php] created successfully.

C:\~\laravel_12>

『~\app\Console\Commands\BatchSample.php』が作成されます。
初期状態は以下となります。
BatchSample.php

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class BatchSample extends Command {
    protected $signature = 'app:batch-sample';
    protected $description = 'Command description';
    public function handle() {
        //
    }
}

○ 手動でバッチを実行する場合のコマンド
以下の書式となります。
    php artisan {$signature}
例)
    php artisan app:batch-sample
      ※クラスで定義されたプロパティ《$signature》を指定します
手動バッチサンプル

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;

use Illuminate\Support\Facades\Storage;
class BatchSample extends Command {
    protected $signature = 'app:batch-sample';
    protected $description = 'Command description';
    public function handle() {

        $path = Storage::disk('local')->path('ftp/hoge.txt');
        Storage::disk('ftp')->putFileAs('/', $path, 'hoge.txt');
    }
}

発火すると、前章で紹介したFTP送信を行うバッチです。
スケジューラから実行
スケジューラから実行する場合は『~\routes\console.php』へ追記します。
初期状態は以下となります。
console.php

<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

ここに《手動実行》で作成した『BatchSample』クラスを紐付けます。
console.php

<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;

Schedule::command('app:batch-sample')->dailyAt('02:00');

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

スケジュールに紐付けされたか確認する方法は[artisan]コマンドを叩きます。
ターミナル

C:\~\laravel_12> php artisan schedule:list
    0 2 * * * php artisan app:batch-sample ......... Next Due: 20 hours from now

C:\~\laravel_12>

ポイント

スケジュールに設定した時間と、確認した際に表示される《何時間後》がズレてる方いませんか?
それはタイムゾーンの設定が原因です。

『config\app.php』内にある《timezone》を確認してください。
ここの値を[UTC]から[Asia/Tokyo]へ変更しましょう。

○ 最後はもちろんCRON登録
基本的にはLinuxでの運用が多いと思いますので、設定サンプルを以下に記載します。
    * * * * * cd /{プロジェクトルート} && /usr/bin/php artisan schedule:run >> /dev/null
メモ

『CRON』で設定した時間まで待つのは時間の無駄ですよね。
そこで強制的に『CRON』が発火した状態にするコマンドが以下となります。
    php artisan schedule:run

これで、ただちに『~\routes\console.php』が呼ばれます。
しかし今度は、Laravel内の時間設定まで発火するのを待たなくては..orz
大丈夫です。
そんな時は一時的にコードを以下の様に書き換えちゃいましょう。
    Schedule::command('app:batch-sample')->everyMinute();
これで即時実行されます。

ログインしてコメントを残そう!!


きっぷる
きっぷる