【Laravel11】Artisan Consoleのコマンドラインオプション

Laravel

前回の記事の続きです。Laravel11のArtisan Consoleのコマンドラインオプションについての解説です。公式ドキュメントに書かれていない内容もあります。

環境は前回のものを引き続き使用していきます。

この記事のゴール

Artisan Cosoleのコマンドラインオプションの使い方がわかる

オプションの基本的な使い方

コマンドラインオプションの設定は「$signature」に記述します。

    protected $signature = 'app:foo {--opt}';

波括弧で囲まれた部分に「–」に続けてオプション名を記述します。

この場合、オプション名は「opt」になります。

「handle()」メソッド側でのオプションの受取は

$this->option('opt')

のように「option()」メソッドの引数にオプション名を指定します。

この設定の場合、オプションの値は「true」「false」の論理値になります。

「handle()」メソッドを修正します。

    public function handle()
    {
        var_dump($this->option('opt'));
    }

オプション付きで実行してみます。

php artisan app:foo --opt

「true」が出力されました。

オプションなしで実行してみます。

「false」が出力されました。

つまり、オプションはデフォルトで省略可能です。

今回の設定ではオプションは値を受け取らない設定です。

オプションの値を指定して実行すると叱られます。

オプションの値指定可設定

次のようにすると、オプションに値を渡すことができます。

    protected $signature = 'app:foo {--opt=}';

オプション名の後ろに「=」を付けます。

実行してみます。

オプション省略時と値指定しない場合はNULL出力、

値指定の場合は値が表示されました。

オプションのデフォルト値設定

「=」に続けてデフォルト値を設定できます。

    protected $signature = 'app:foo {--opt=bar}';

実行してみます。

オプション省略時にデフォルト値が適用されています。

複数のオプション設定

次のように複数のオプションを設定可能です。

引数との組み合わせも可能です。

    protected $signature = 'app:foo {bar} {--opt1=baz} {--opt2=qux}';

「handle()」も修正しておきます。

    public function handle()
    {
        var_dump(
            $this->arguments(),
            $this->options(),
        );
    }

実行してみます。

オプションに値を渡すことができています。

「options()」メソッドは他にもデフォルトで設定されているオプションが出力されます。

オプションショートカット設定

オプション名のショートカットが設定可能です。

    protected $signature = 'app:foo {--O|optimize}';

この場合、「–optimize」オプションのショートカットとして

「-O」が使えるようになります。

「handle()」メソッドを修正しておきます。

    public function handle()
    {
        var_dump($this->option('optimize'));
    }

実行してみます。

「–optimize」でも「-O」でも「optimize」オプションに適用されます。

オプションの受取処理は「option(‘optimize’)」となります。

ショートカット名での受け取りはできません。

「option(‘O’)」とすると叱られます。

次のように値を受け入れるオプションの場合は注意が必用です。

    protected $signature = 'app:foo {--O|optimize=bar}

ショートカットオプション「-O」に値を渡す場合は、

「-O」の直後に続けて「-Obaz」のように指定します。

配列オプション設定

引数同様に、同じ属性のオプションの値を複数指定させる際に

配列オプションの設定が可能です。

    protected $signature = 'app:foo {--id=*}';

「handle()」メソッドを修正しておきます。

    public function handle()
    {
        var_dump($this->option('id'));
    }

実行してみます。

php artisan app:foo --id=1 --id=2

同じオプション「id」への複数の値が配列で渡されます。

オプションの説明記述

引数同様に、オプション名の後ろに「 : 」に続けて引数の説明を記述できます。

コロンの前後には半角スペースが必用です。

長くなる場合、改行もできますが、

1オプション1行にしないと認識してもらえません。

    protected $signature = 'app:foo
        {--O|optimize=bar : 最適化オプションです。}';

「–help」オプション指定で実行すると確認できます。

今回は以上です。

コメント

タイトルとURLをコピーしました