[PHP][Laravel][Cron][Xserver]Laravelでcronで実行できるバッチを作った話>コマンド作成編

はじめに

Webアプリを作りたくて開発を進めていたLaravelのプロジェクトにCron経由で動かせるバッチを追加しました。

やり方

コマンド機能


Laravelにはコマンド機能があり、開発者側でコマンドの追加が出来ます。
それを実行できるようにすればそのコマンドを呼び出すていでバッチの実行が出来ます。

スケジューラー機能

Laravelにはスケジューラー登録機能があり、所定のファイルに設定を追加&決められた形式でCronに登録すれば定期的に処理を実行してくれます。

バッチの実行だけではなく、定期的なアプリやDBのクリーンアップにも使えます。

コマンド機能とスケジューラー機能を組み合わせることでCronからバッチの実行ができるようになります。


従来であれば、調査の時等、バッチごとにCronに登録してバッチを実行させる感じだったと思います。
各サーバーに入って本当に動いているバッチを確認みたいな感じだったと思いますが、アプリ内で何を登録しているかわかると調査の時に楽だなあと思いました。

コードで解説

コマンド機能

コマンド作成コマンドでコマンドの作成

php artisan make:command <コマンド 名>

例)

xxxx@xxxxx command %  php artisan make:command TestCommand         
Console command created successfully.

コマンドが成功すると以下ファイルが作成されます。
app/Console/Commands/<コマンド名>.php
例)app/Console/Commands/TestCommand.php

このファイルを弄ってコマンドの設定をしていきます
$signature にコマンド名 >後々 php artisan コマンド名で コマンド実行できる
$descriptionにコマンドの説明書きを追加する > 下のコマンドの test commandのところ

php artisan list | grep command:testcommand
>  command:testcommand  test command

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
   //1.command名に書き換え 
   protected $signature = 'command:testcommand';

    /**
     * The console command description.
     *
     * @var string
     */
     //2.commandの説明を追加
 protected $description = 'test command';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        //3.とりあえず現在時間を表示するようにしてみた
        echo now();
        return 0;
    }
}

xxxxx@xxxxx command % php artisan command:testcommand

2020-10-11 23:47:00%       

無事現在日時が表示されました。 

スケジューラーの登録はまた次の機会に説明します♪

Posted by karaagelovers