今回はLaravelで特定の処理を実行するコマンドを作成する方法をまとめます。
なるべく丁寧に書くので、参考にして頂けると嬉しいです。
※バージョンはLaravel6.xを使用しています。
【Laravel】特定の処理を実行するコマンドを作成する
Laravelには、標準で複数のartisanコマンドが用意されています。
そして、これらのコマンドを使うことで、内部サーバーを起動したりコントローラを作成することができます。
今回行うのは、これらのコマンドに追加して新たなコマンドを作成する作業です。
この作業を行うことで、作成したコマンドを叩いて特定の処理を実行させることが可能となります。
それではさっそく、コマンドの作成手順を解説していきます。
- コマンドクラスを作成する
- コマンドクラス内のコマンドの設定をする
- 実行したい処理を記述する
1.コマンドクラスを作成する
まずはコマンドクラスを作成します。
コマンドクラスとは、コマンドの設定およびコマンドにより実行する処理を定義するクラスです。
コマンドクラスは、以下のコマンドにより作成可能です。
php artisan make:command ClassName
今回は、ClassNameにExampleを指定しました。
php artisan make:command Example
すると、app/Console/Commands配下にコマンドクラス(Example.php)が作成されるはずです。
デフォルトでは以下の状態になっています。
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class Example 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'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }
2.コマンドクラス内のコマンドの設定をする
コマンドクラスを作成したら、次に実行コマンドの設定をしていきます。
設定するのは、$signatureと$descriptionです。
それぞれ、「コマンドの名前と引数、オプション」「コマンドの説明」を指定することが可能となります。
今回は以下のように記述してみました。
/** * The name and signature of the console command. * * @var string */ protected $signature = 'example:echo'; /** * The console command description. * * @var string */ protected $description = '作成したコマンドです';
これでコマンドの登録はできているはずです。
実際にコマンドが登録されているかを、php artisan list
で確認してみましょう。
ありましたね。
以上で、以下のコマンドにより、コマンドクラスに定義する処理が実行可能となりました。
php artisan example:echo
3.実行したい処理を記述する
以上でコマンドの作成は完了です。
ただ、コマンドによって実行する処理はまだ書けていないので実装しておきましょう。
コマンドによって実行する処理は、コマンドクラスのhandleメソッドに記述します。
実際のアプリやサービスではもちろん複雑な処理を記述すると思うのですが、今回はあくまで例なので、echo(文字列を出力)するだけの簡単な処理を実装しておきます。
/** * Execute the console command. * * @return mixed */ public function handle() { // 実行する処理 echo "コマンドが実行できています!".PHP_EOL; }
コマンドの実行
以上で「コマンドの作成」および「コマンド実行に伴い走らせる処理」の設定が完了しました。
さっそくターミナルで今回設定したコマンドを実行してみましょう。
実行できました!
コマンドを作成したら何ができるようになるのか?
ここまで、Laravelでコマンドを作成する方法を解説してきました。
では、このコマンドを使って処理を実装できるようになったら、どんなことができるようになるのでしょうか。
もちろん、様々な用途があるとは思いますが、特に有効なのは「バッチ処理」です。
バッチ処理とは、「特定の時間に実行される特定の処理」のことです。
このバッチ処理が、今回解説したコマンドクラスを利用することで利用可能となります。
なぜなら、コマンドクラスにより、「コマンドを実行すれば特定の処理を実行する」状態は作れているため、後は「特定の処理を実行する時間」さえ指定すればバッチ処理が実行可能だからです。
「時間の指定」については、今回のテーマとは異なるので深入りはしませんが、crontabやcronjobによって設定が可能です。
この辺りも、また機会があればまとめてみたいと思います。
おわりに
最後に、今回の要点をまとめておきましょう。
- Laravelでコマンドクラスを作成することで、特定のコマンドで特定の処理を実行することが可能となる
- crontabやcronjobで実行時間と実行コマンド(コマンドクラスで作成したコマンド)を指定することで、バッチ処理が可能となる
今回は以上です。
少しでも参考になっていたら幸いです。