Laravel makeコマンド一覧

php artisan:make 〇〇コマンドを、間違えて打ったら一覧が出てきたので、ひとつずつメモします。  
できたファイルも紹介です。（あんまり見ないやつだけ）

Laravel5.8だぞ！

## よく使う
### `make:controller`  
Controllerを作成できる  

### `make:model`  
モデルを作成できる 
（私はModelsというディレクトリで切って使うことが多いです）

### `make:mail`  
メール送信Classを作成できる  

### `make:request`  
バリデーションを作成できる  

### `make:migration`  
DBのマイグレーションファイルを作成できる  

### `make:seeder`  
DBのseederを作成できる  



## たまに使う
### `make:command`  
Artisanで打てるコマンドを書くファイルができる  

```php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}
```

### `make:policy`
ポリシーを作成するのですが、ポリシーってなんぞ？  

例えば、権限がたくさんあり、かつ、通常の登録・更新・削除処理のあるシステムの場合、通常であれば、routeで権限ごとにOKかNGを判定します。  

* 権限Aは登録・更新・削除OK
* 権限Bは、自分で作成した登録なら、登録・更新・削除できるけど、他の人作ったやつはなんもできん  

このような感じで、ちょいと権限回りが複雑になってきたときに、活躍するやつです！
コントローラー超きれいなるね！

### `make:factory`
テストデータを作成するときに使います。 
名前とか、メールアドレスとか適用に生成してつっこんでくれます。  

## プロジェクトの立ち上げ時に使う
### `make:auth`  
これ打っちゃえば、ログイン機能できちゃう


## 本来であればよく使うべき
### `make:test`  
テストコード書くときに使うはずなんですけど、あまりテストコードを書かないので...


## 全然使ったことなかった
### `make:job`  

ジョブをキューに入れられるそうですが、キューに入れたいのは、今のところメール送信の場面でしか出くわしたことがないです。
メールは、MailableClassだけでキューに入れられるので、これはあまり使わないかもです。

```php
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class TestJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
    }
}

```

### `make:notification`  
通知を作成するときに、使用します。 
（パスワードリセットメールもこれを使っています） 
ん、普通のメール送信じゃダメなの？なにが違うの？  

```php
<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class TestNotification extends Notification
{
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('The introduction to the notification.')
                    ->action('Notification Action', url('/'))
                    ->line('Thank you for using our application!');
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

```

### `make:rule`
え、なんなん、こいつもバリデージョンで使うん！？  

Laravelのバリデージョンは、標準で`required`や`max`など便利なルールがついていますが、 この他によく使う独自バリデーションルールを作成したいときに使うそうです。
（例えば、時刻が60分単位かチェックするなど）

私も独自バリデーションルール追加したことありますが、この方法ではなく[Laravelドキュメント](https://readouble.com/laravel/5.8/ja/validation.html)の「拡張の使用」の方を使っていました。  

というか、「拡張の使用」ってなんぞ？と思ったら、「Using Extensions」のことらしいけど、どっちもパッと理解できず...  

次はこのコマンドも使ってみようかな。

```php
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class TestRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        //
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The validation error message.';
    }
}

```


### `make:event`
### `make:listener`
### `make:channel`
イベント・リスナー・ぶろーどきゃすと？

イベント・リスナーの使いどころは...？  
公式ドキュメントより  
> たとえば、注文を配送するごとにSlack通知をユーザーへ届けたいとします。  
> 注文の処理コードとSlackの通知コードを結合する代わりに、`OrderShipped`イベントを発行し、  
> リスナがそれを受け取り、Slack通知へ変換するように実装できます。

`OrderShipped`というはのは、発送済みという意味か...!!  
多分、注文処理終わる→Slackに通知するという処理を一連で書かずとも、イベントとリスナを紐づけてなんかできるってこと？  

ブロードキャストは、放送するという意味で、リアルタイムに更新したいアプリなどを作成するときに使うみたい。。

### `make:resource`
> API構築時、Eloquentモデルと、アプリケーションユーザーに対して実際に返信するJSONリスポンスとの間に、トランスレーション層を設置することが必要となります。  
> Laravelのリソースクラスは、モデルやモデルコレクションを記述しやすく簡単に、JSONへと変換してくれます。

...全く理解できない上に、使いどころも分からず。。  
API構築って、routes > api.phpにルーティング書いて、Controller用意して、returnしたら自動でjsonに変換されて返ってくるやん？  
それとは違う話なんかなぁ...

```php
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class TestResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

```

### `make:provider`
普段からすごくお世話になってる気がするんだけど... 
「初期起動処理」のときに動くやつみたいです。  

私は、`ViewComposer`で画面で共通で使用する値の処理を書くときにしか使ったことありません。。  

```php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class TestProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

```

### `make:middleware`
この方も普段からとてもお世話になっているのでは...? 
ミドルウェアというのは、`app/Http/Kernel.php`から呼び出されています。  
ただ、`app/Http/Kernel.php`にすでに書かれているので事足りているので、自分で追加したことはありません...

```php
<?php

namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

```

### `make:exception`
きっと独自で例外処理を書きたいときに使うんだろう...

### `make:observer`
モデルに対して、登録されたとき、更新されたときに動く処理を書くそうですが、使いどころは不明です。



## まとめ
というわけで、普段ドキュメントを読むところから始めない上に、ドキュメントが理解できない私のボロが見える感じになりました。。  
こういう事象に出くわしたときに、どう対処したらいいのか判断できるように、引き出しを増やす必要ありです。