Laravelでartisanコマンドを作ってみる

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('色なしのプレーンテキストです');

他にも沢山まとめることがありますが、ちょっと次回にします。。。