Laravel8で追加された認証の種類が多いけどどれを選ぶべきなのか?

Laravel7までは**Laravel UI**しか無かったのに
https://readouble.com/laravel/7.x/ja/authentication.html
Laravel8になってからなんか色んな選択肢が増えた。

**認証バックエンドライブラリ**
* [Laravel Sanctum](https://readouble.com/laravel/8.x/ja/sanctum.html)
* [Laravel Fortify](https://readouble.com/laravel/8.x/ja/fortify.html)

**アプリケーションスターターキット**
* [Laravel Jetstream](https://readouble.com/jetstream/1.0/ja/installation.html)
* [Laravel Breeze](https://readouble.com/laravel/8.x/ja/starter-kits.html)
* [Laravel UI](https://readouble.com/laravel/8.x/ja/frontend.html)
https://readouble.com/laravel/8.x/ja/starter-kits.html




https://readouble.com/laravel/8.x/ja/authentication.html

## ざっくり各種パッケージの説明

### Laravel Sanctum
**APIトークン**、**SPA認証**、**チームの機能**など盛りだくさん

### Laravel Jetstream
https://readouble.com/jetstream/1.0/ja/api.html
https://readouble.com/jetstream/1.0/ja/authentication.html
Laravel JetstreamはファーストパーティとしてLaravel SanctumとLaravel Fortifyを統合しているアプリケーションスターターキット。

https://readouble.com/jetstream/1.0/ja/installation.html
jetstreamをインストールする際に**Livewire**か**Inertia.js**を選ぶ必要がある。

**機能**
'--teams'オプションの説明
https://readouble.com/jetstream/1.0/ja/teams.html
メール認証
https://reffect.co.jp/laravel/laravel-email-verification


https://reffect.co.jp/laravel/laravel-jetstream

#### Livewire
https://laravel-livewire.com/

##### 特徴
* ページをリロードすることなくページの更新することができる。
* Bladeに拡張する感じなので、学習コストがかかる。
* Laravelのみでしか使えない。
* UIはTailwind CSS

https://reffect.co.jp/laravel/laravel-livewire

vue.jsとかでやることを無理やりphpだけでやろうとしてる感がする。

#### Inertia.js
https://inertiajs.com/

##### 特徴
* Vue Routerは使わない
* API(axios)を使わずにvue.jsとControllerをつないでくれるイメージ
* UIはTailwind CSS

https://reffect.co.jp/laravel/laravel-inertia-js
https://reffect.co.jp/laravel/laravel-inertia-js-crud
https://qiita.com/Ayumu_Usu/items/9bc9c8684222f2eed7cd
https://qiita.com/Ayumu_Usu/items/9bc9c8684222f2eed7cd

*****

## Laravel Fortify
https://readouble.com/laravel/8.x/ja/fortify.html
シンプルな認証機能。
Laravel UIのバックエンドほどんど同じ機能だと思う。

## Laravel Breeze
https://readouble.com/laravel/8.x/ja/starter-kits.html

Laravel BreezeはファーストパーティとしてLaravel Fortifyを統合しているアプリケーションスターターキット。

#### 特徴
* フロントは**Blade**でUI部分は**Tailwind CSS**
* フロント部分は**Inertia.js**に変更可能
 
## Laravel UI
https://readouble.com/laravel/8.x/ja/frontend.html
Bootstrap、React、Vueの中から好きなUIを選べる。
後は基本的なAuthに必要なControllerとかが自動で生成される。

Laravel8ではこちらは推奨されていない模様。

*****

## まとめ
コアのバックエンド部分のみ必要でフロントは自分で作る場合は**Laravel Sanctum**か**Laravel Fortify**のみをインストールすれば良さそう。
もしAPI認証、二段階認証などの機能が必要な場合は**Laravel Sanctum**、シンプルな認証機能だけなら**Laravel Fortify**という感じで選べばいいと思う。

アプリケーションスターターキットを使わない実装例(Laravel Sanctum + Vue.js)
https://qiita.com/hikkappi/items/b95626bb51bbf2ebcd2d

UIもできているものを使いたい場合は**Laravel Jetstream**か**Laravel Breeze**を選択する。
こちらの選び方はバックエンドのファーストパーティとして**Laravel Sanctum**か**Laravel Fortify**どちらを使いたいかによって変わってくる。

### Laravel FortifyとLaravel Sanctum
>一部の開発者は、Laravel SanctumとLaravel Fortifyの違いについて混乱します。 ２つのパッケージは２つの関連はあるが別々の問題を解決するため、Laravel FortifyとLaravel Sanctumは相互に排他的、もしくは競合するパッケージではありません。
Laravel Sanctumは、APIトークンの管理と、セッションCookieまたはトークンを使用した既存のユーザーの認証のみに関係しています。 Sanctumは、ユーザー登録、パスワードのリセットなどを処理するルートを提供していません。
APIを提供するアプリケーション、またはシングルページアプリケーションのバックエンドとして機能するアプリケーションの認証レイヤーを自前で構築しようとしている場合は、Laravel Fortify（ユーザー登録、パスワードのリセットなど）およびLaravel Sanctum（APIトークン管理、セッション認証）の両方を利用すのは完全に可能です。

引用元: https://readouble.com/laravel/8.x/ja/fortify.html

### API認証をしたいケース
API認証をしたい場合はLaravel Sanctumを選択したほうがいいと思います。
https://reffect.co.jp/laravel/laravel-sanctum-token

※ **Laravel Fortify**でも自分で作れば二段階認証できる。
https://turningp.jp/programing/php/laravel/fortify-2fa


##　参考
* https://planning-a.jp/topics/9882
* https://zenn.dev/localdisk/articles/a338175e913410