Laravel コマンド 調べてみた
Laravelのコマンド
Laravelでコンソールアプリケーションを実装するためには、コマンドを作成する必要があります。
Laravelでコマンドを作成するには、
①クロージャーでコマンドを作成する
②クラスでコマンドを作成する
上記2つの方法があります。
クロージャーでコマンドを作成する
Laravelでは、routes/console.phpにクロージャーでコマンドを作成することができます。
routes/console.php
<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
Artisan::command('allnightnippon', function () { ・・・①
$this->comment('オールナイトニッポン'); ・・・②
return 0; ・・・③
})->describe('オールナイトニッポンを出力します'); ・・・④
①artisanファザードでコマンドを作成します。第一引数にコマンドを、第二引数にクロージャーでコマンドが呼び出された時の処理を実装します。
②commentメソッドでは、引数の文字列を出力します。
commentメソッド以外にも使用できるメソッドはたくさんあるので、詳しくは公式ドキュメントをご参照ください。
③コマンドが正常に実行されると返り値で0を返します。
④describeメソッドでコマンドの説明を追加できます。
作成したコマンドを実行します。
php artisan allnightnippo
オールナイトニッポン
オールナイトニッポンの文言が出力されました。
ちなみに、以下コマンドを実行するとコマンド一覧が出力され、describeメソッドで設定した文言を確認することができます。
php artisan list
allnightnippon オールナイトニッポンを出力します
以上がクロージャーでコマンドを作成する方法です。
単純なコマンドはクロージャーで作成すれば良いのですが、複雑な処理が絡むコマンドをクロージャーで作成するには無理が出てきます。
そのため、次に説明するクラスでコマンドを作成する方法が一般的なコマンドの作成方法です。
クラスでコマンドを作成する
以下コマンドを実行することで、雛形のファイルがApp/Console/Commands配下に作成されます。
php artisan make:command ファイル名
以下、コマンド処理を実装したファイル例になります。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class AllNightNipponCommand extends Command
{
protected $signature = 'allnightnippon:class {programName?} {--allnightnippon0}'; ・・・①
protected $description = 'クラスで作成したオールナイトニッポン番組名が出力されます。'; ・・・②
public function __construct()
{
parent::__construct();
}
public function handle(): int ・・③
{
$programName = $this->argument('programName'); ・・・④
if (!empty($programName)) {
$programName = $programName . 'の';
}
$allnightnipponl0 = $this->option('allnightnippon0'); ・・・⑤
$this->comment($programName . 'オールナイトニッポン' . ($allnightnipponl0 ? '0': '')); ・・・⑥
return 0;
}
}
①signatureプロパティでコマンド名を指定します。{}内に引数やオプションを設定することができます。
上記の例では引数に{programName?}を設定しています。?をつけることで引数の省略が可能になります。
{–allnightnippon0}をコマンドとして設定しています。
②descriptionプロパティでコマンドの説明を設定します。
③handleメソッドでコマンドの処理を実装します。
④引数で設定した値は、argumentメソッドで取得することができます。
⑤オプションで指定した値は、optionメソッドで所得することができます。
⑥commentメソッドで出力をします。
上記コマンドを実行します。
php artisan allnightnippon:class オードリー
オードリーのオールナイトイベント
php artisan allnightnippon 佐久間宣行 --annnightnippon0
佐久間宣行のオールナイトイベント0
以上!!!!!!!