Laravelでartisanコマンドを作ってみる
公開: 2023-12-28
Artisan Consoleコマンドを初めて作るとき用の基本手順をまとめました。
コマンドを作成する
ドキュメント: Artisan Console - Laravel 10.x - The PHP Framework For Web Artisans
make:command
Artisanコマンドで必要なクラスを生成します。
php artisan make:command SampleCommand
app/Console/Commands
ディレクトリにSampleCommand.php
が生成されます。
次に、必要なプロパティ・関数を書いていきます。
-
$signature
: ここに指定した文字列がコマンドになります。 -
$description
: コマンドの説明文(省略可) -
handle()
: コマンドで実行する処理内容を書きます
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SampleCommand extends Command
{
protected $signature = 'app:sample-command';
protected $description = 'コマンドを学ぶためのサンプルコマンドです。';
public function handle()
{
$this->info('サンプルコマンドを実行しました。');
}
}
コマンド実行して出力を確かめます。
$ php artisan app:sample-command
サンプルコマンドを実行しました。
app:
部分はコマンドの名前空間です。同じようなコマンドをまとめることが出来ます。php artisan migrate:refresh
とかmigrate:status
とかのイメージです。
ちなみに、$description
に指定した説身分は、php artisan list
でコマンドリストを表示した時や、php artisan help コマンド名
でヘルプを確認した時などに表示されます。
引数を渡す
コマンドの後ろに、波かっこ{}
で引数名を指定できます。
argument
メソッドで入力値を受け取ります。
protected $signature = 'app:sample-command {arg}';
public function handle()
{
$argument = $this->argument('arg');
$this->info("引数は {$argument} です。");
}
$ php artisan app:sample-command test
引数は test です。
引数を任意にしたりデフォルト値を設定することもできます。
- 任意にする:
{arg?}
- デフォルト値を設定:
{arg=default value}
また、{arg*}
のように*
を使って複数の値を渡すことも出来ます。
protected $signature = 'app:sample-command {arg*}';
public function handle()
{
$arguments = $this->argument('arg');
$sum = 0;
foreach ($arguments as $value) {
if (!is_numeric($value)) {
$this->error("エラー: '{$value}' は数値ではありません。数値を入力してください。");
continue;
}
$sum += $value;
}
$this->info("合計値: {$sum}");
}
コマンドに続いて引数をスペース区切りで指定して実行します
$ php artisan app:sample-command 1 2 3 4 5
合計値: 15
早見表
コマンド作成
php artisan make:command SampleCommand
テンプレ
class SampleCommand extends Command
{
protected $signature = 'app:sample-command';
protected $description = 'ここにコマンドの説明を書いてください。';
public function handle()
{
// ここに処理内容を書きます
}
}
コマンド実行方法
php artisan app:sample-command
引数を任意(オプショナル)にする
protected $signature = 'app:sample-command {arg?}';
引数にデフォルト値を設定する
protected $signature = 'app:sample-command {arg=default value}';
引数を可変長引数にする
protected $signature = 'app:sample-command {arg*}';
実行はスペース区切り
php artisan app:sample-command 1 2 3 4 5
引数の受け取り
$this->argument('arg');
コンソールへ出力
// メソッド名の目的に合ったANSI規格の色でテキストが出力されます
$this->info('緑色のテキスト出力されます');
$this->newLine(); // 1行分
$this->error('エラー文です。赤くなります');
$this->warn('警告文です。黄色になります。');
$this->newLine(2); // 2行分出力
$this->question('青色のテキスト出力されます');
$this->line('色なしのプレーンテキストです');
他にも沢山まとめることがありますが、ちょっと次回にします。。。