Ccmmutty logo
Commutty IT
0 pv2 min read

【Laravel】簡単★自作コマンドの作り方

https://cdn.magicode.io/media/notebox/001000b0-870a-4a51-ab77-c8803b3345ba.jpeg

カスタムコマンドって?

Laravelには「php artisan」で始まる様々なコマンドが用意されています。クラスを作成する「make:〇〇」系コマンドはよく使いますね。
そんなコマンドを自作することができます。それがカスタムコマンドです。

カスタムコマンドをつくってみよう!

例として、ユーザーテーブルからユーザー名を取得してコンソールに出力するコマンドを作成していきます。

カスタムコマンドの作成

php artisan make:command UserName
UserNameの部分はクラス名になります。このコマンドを実行するとapp\Console\Commandsの下にファイルが作成されます。

コマンド名と説明文を設定

protected $signature = 'user:name {id}';
protected $description = 'ユーザー名を出力する';
$signatureはコマンド名です。自由につけて良いのですが、Laravelのデフォルトコマンド「make:〇〇」や「migrate:〇〇」のように、コマンド名にコロンを入れると、一覧表示した時にグループ化して表示してくれるのでオススメ。
コマンドに引数を付ける場合は{}で定義します。今回はidをキーにして名前を取得したいのでidを引数にしています。
$descriptionは「php artisan list」とかで一覧表示した時のコマンド説明文です。

実行する処理を記載

handle()の中に書いた処理が実行されます。この部分はコントローラとかに書くのと同じ要領で処理を書いていけばOKです。
今回は「ユーザーテーブルからユーザー名を取得してコンソールに出力する」処理を書いていきます。
public function handle()
{
    // 引数を取得
    $id = $this->argument('id');
    // idが一致するユーザーを取得
    $user = User::find($id);
    // ユーザー名を取得
    $userName = $user ? $user->name : '名無しさん';
    // コンソールに出力
    $this->info("ユーザー名: $userName");
}
(端折ってますが、Userモデルを定義してuse宣言している前提です。)
これでコマンド作成完了です!わお、簡単!

コマンドを実行してみよう!

php artisan user:name 1
自作したコマンドを実行してみましょう。
id=1のユーザーがいれば「ユーザー名: 〇〇」、該当ユーザーがいなければ「ユーザー名: 名無しさん」とコンソールに出力されていれば成功です。

Discussion

コメントにはログインが必要です。