All Articles

Laravel:コマンドでできること

Laravelのコマンドに関することをメモしていきます。

シグネチャ

php artisanでコマンドを実行するときのシグネチャを定義します。 シグネチャを定義するには、Illuminate/Console/Command$signatureに文字列を設定します。

Laravel Command

引数もオプションも必要としないコマンドは下記のようなシグネチャを定義します。 コロンを挟んで、前の方にコマンドの分類(例:route,auth,make)を表す文字列を指定します。 コロンを挟んで、後の方に実際の動作(clear,crate)を指定します。

protected $signature = 'hoge:fuga';

実際にコマンドを使う場合は下記のようになります。

php artisan hoge:fuga

Laravel Command 引数をつける

引数を必要とするコマンドは下記のようなシグネチャを定義します。 引数の指定には、必須・任意の指定とデフォルトの指定が可能です。

  • 必須の引数: 引数のキーを{}で囲います。コード上でキーを使って引数を取得します。
  • 任意の引数: 引数のキーを{}で囲い、キーの末尾に?を付けます。コード上でキーを使って引数を取得します。
  • 任意の引数(デフォルト値有り): 引数のキーを{}で囲い、キーの末尾に=とデフォルト値を付けます。コード上でキーを使って引数を取得します。
  • 配列の引数: 引数のキーを{}で囲い、キーの末尾に*を付けます。コード上でキーを使って引数配列を取得します。

また、下記のルールがあるため、引数の順番、複数設定ができるできないがあるので注意が必要です。

  • 同じキーを指定することはできない。
  • 必須引数と任意引数を同時に設定する場合は、必須引数の後に任意引数を指定する必要があります。
  • 配列引数を複数個設定することはできない。
  • 配列引数を含む場合は、配列引数を一番最後に定義する必要がある。
  • 引数と複数設定した場合は、前から順にキーに割り当てられる。

また、キーの後にスペースを一つ空けて:をつけることでargの説明文を追加することができます。

// 必須の引数
protected $signature = 'hoge:fuga {arg : argの説明}';
// 任意の引数
protected $signature = 'hoge:fuga {arg? : argの説明}';
// デフォルト値有りの引数
protected $signature = 'hoge:fuga {arg=default : argの説明}';
// 配列の引数
protected $signature = 'hoge:fuga {arg* : argの説明}';
// 任意の配列の引数
protected $signature = 'hoge:fuga {arg* : argの説明}';
// デフォルト値有りの配列の引数
protected $signature = 'hoge:fuga {arg=*1,2: argの説明}';

実際にコマンドを使う場合は下記のようになります。

php artisan hoge:fuga 1
php artisan hoge:fuga

引数の値を、コード上で取得するには下記のようにします。

public function handle()
{
    $arg = $this->argument('arg');
    $this->info(json_encode($arg));
    $argument = $this->argument();
    $this->info(json_encode($argument));
}

引数と配列引数を同時に設定する

引数と配列引数を色々な設定するとどうなるのかを実際に調べました。 定義

// 必須-必須
protected $signature = 'hoge:fuga {arg1} {arg2}';
// 必須-任意
protected $signature = 'hoge:fuga {arg1} {arg2?}';
// 必須-配列
protected $signature = 'hoge:fuga {arg1} {arg2*}';
// 必須-任意-任意配列
protected $signature = 'hoge:fuga {arg1} {arg2?} {arg2*?}';
// 任意-任意
protected $signature = 'hoge:fuga {arg1?} {arg2?}';

結果

public function handle()
{
    $argument = $this->argument();
    $this->info(json_encode($argument));
}

Laravel Command オプションをつける

オプションを必要とするコマンドは下記のようなシグネチャを定義します。 オプションの指定には、論理値・数値・文字列・配列を受け取る記述方法があります。

  • オプション(論理値): オプションのキーを{}で囲います。コード上でキーを使ってオプションを取得します。
  • オプション(数値・文字列): オプションのキーを{}で囲い、キーの末尾に=を付けます。コード上でキーを使ってオプションを取得します。
  • オプション(デフォルト値有り): オプションのキーを{}で囲い、キーの末尾に=とデフォルト値を付けます。コード上でキーを使ってオプションを取得します。
  • オプション(配列): オプションのキーを{}で囲い、キーの末尾に=*を付けます。コード上でキーを使ってオプション配列を取得します。
  • オプション(デフォルト配列): オプションのキーを{}で囲い、キーの末尾に=*を付け、デフォルト値をカンマ区切りで指定します。コード上でキーを使ってオプション配列を取得します。

また、キーの後にスペースを一つ空けて:をつけることで、オプションの説明文を追加することができます。

// オプション(論理値)
protected $signature = 'hoge:fuga {--option_1 : optionの説明}';
// オプション(数値・文字列)
protected $signature = 'hoge:fuga {--option_2= : optionの説明}';
// オプション(デフォルト値有り)
protected $signature = 'hoge:fuga {--option_3=default : optionの説明}';
// オプション(配列)
protected $signature = 'hoge:fuga {--option_4=* : optionの説明}';
// オプション(デフォルト配列)
protected $signature = 'hoge:fuga {--option_5=*1,2 : optionの説明}';

実際にコマンドを使う場合は下記のようになります。

php artisan hoge:fuga --option_1
php artisan hoge:fuga --option_2=hoge
php artisan hoge:fuga --option_3
php artisan hoge:fuga --option_4=1 --option_4=2
php artisan hoge:fuga --option_5

オプションの値を、コード上で取得するには下記のようにします。

public function handle()
{
    $option = $this->option('option_1');
    $this->info(json_encode($option));
    $options = $this->options();
    $this->info(json_encode($options));
}

Laravel Command プロンプト

Laravel Commandをプログラムから実行する

ログの出力