Laravelでバッチ処理用コマンドを書く

投稿者:

はじめに

CodeIgniterでAPIのみを書くという案件は聞いたことがあるんですが、bladeやらUIありきのLaravelでバッチ処理を書く経験を踏んだので覚書。
なおLaravel単体ではバッチ動作はできかねます。cronに実行コマンドを記述してやる必要があります。

バッチ処理実装

Laravelはファイル登録など大体のことはArtisanで行います。

$ php artisan make:command BatchTest

こちらのコードを実行すると、/app/Console/Commands/BatchTest.php というファイルが生成されます。

class BatchTest extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

バッチで重要になるのはこの

$signature
$description

の2つ。
php artisan list をかけると、signatureがコマンド名称
descriptionがコマンドの説明になります。

command
  command:name        Command description

対象コマンドを実行する場合はsignatureを指定します。

$ php artisan command:name

引数を取得したい場合

引数を取得したい場合は、signatureの後ろに引数名を指定します。

protected $signature = 'command:name --id= {--type=}';

上記の記述の場合、
--id= が必須パラメータ
{} で囲われた --type= は任意パラメータになります。
artisanコマンドは以下の通りになります。

$ php artisan command:name --id=999 --type=aaa

なお、実装じたいはUIが無い以外は通常のControllerと大差ないかと思います。

参考リンク

https://qiita.com/hotate_chan/items/05f67096d8080b79390d

むすび

ところで、Laravelで突如出てきたServiceとは何か。

位置付けとしては、データソース-Model-Service-Controller-View 。
Modelの使い方にもよるかと思いますが、Modelに属性のキャスト複数代入可能な属性 のみ書き、クエリや他テーブルとjoinするクエリを走らせるメソッドなんかをServiceにまとめると幸せかと思います。

どなたかの参考になればと思います。

コメントを残す