Laravel コンソールから実行するバッチプログラムの作成

Laravel 5.8でWebではなくコンソールから実行するバッチプログラムを作成してみます。

こちらを参考にしました。
Artisan Console


Hello World



まず、Hello Worldが出力できるところまで試してみます。
以下のコマンドでコンソール実行用の雛形を作成。


$ php artisan make:command SampleCommand



実行すると、「app/Console/Commands」に「SampleCommand.php」が生成されます。
ファイルの中身は以下の通り。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'command:name';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'Command description';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         //
  35.     }
  36. }



この状態で、artisan listを実行してみます。


$ php artisan list



a02_01.png

「command:name」という項目が表示されます。
これで作成した雛形プログラムが実行可能であることがわかります。
以下のコマンドで実行可能ですが、処理を記載していないので何も表示されません。


$ php artisan command:name




handleに処理を記載します。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'command:name';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'Command description';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         echo ('Hello World!');
  35.     }
  36. }



とりあえずHello Worldが出力できました。


$ php artisan command:name
Hello World!





いろいろな表示



infoやcommentといったメソッドで、コンソールに強調して文字を表示することができます。
handleの部分を修正しました。


  1.     public function handle()
  2.     {
  3.         $this->line('Hello World!(line)');
  4.         $this->info('Hello World!(info)');
  5.         $this->comment('Hello World!(comment)');
  6.         $this->warn('Hello World!(warn)');
  7.         $this->error('Hello World!(error)');
  8.     }



実行結果

a02_02.png



コマンド名の変更と引数の取得



コマンド名は「$signature」で指定した値。
コマンドの説明は「$description」で指定した値が採用されます。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line('Hello World!(line)');
  35.     }
  36. }



php artisan listを実行すると、変更されていることがわかります。

a02_03.png


引数の指定は$signatureに記載します。


  1. protected $signature = 'my:command {arg1} {arg2}';



指定された引数の取得は$this->argument


  1.     public function handle()
  2.     {
  3.         $this->line($this->argument('arg1'));
  4.         $this->line($this->argument('arg2'));
  5.     }




サンプルは以下のようになりました。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command {arg1} {arg2}';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line($this->argument('arg1'));
  35.         $this->line($this->argument('arg2'));
  36.     }
  37. }




実行してみます。


$ php artisan my:command symfo ware
symfo
ware





その他、オプション引数やキーワード引数も指定可能です。
キーワード引数は$this->optionで値を取得します。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. class SampleCommand extends Command
  5. {
  6.     /**
  7.      * The name and signature of the console command.
  8.      *
  9.      * @var string
  10.      */
  11.     protected $signature = 'my:command {arg1?} {--arg2=no arg2}';
  12.     /**
  13.      * The console command description.
  14.      *
  15.      * @var string
  16.      */
  17.     protected $description = 'コマンドのサンプルです';
  18.     /**
  19.      * Create a new command instance.
  20.      *
  21.      * @return void
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.     }
  27.     /**
  28.      * Execute the console command.
  29.      *
  30.      * @return mixed
  31.      */
  32.     public function handle()
  33.     {
  34.         $this->line($this->argument('arg1') ?? 'no arg1');
  35.         $this->line($this->option('arg2'));
  36.     }
  37. }




実行結果


$ php artisan my:command
no arg1
no arg2

$ php artisan my:command symfo
symfo
no arg2

$ php artisan my:command symfo --arg2=ware
symfo
ware



関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ