Laravel Breezeでいい感じのログイン認証が作れる話

<link href="/path/to/hoge.css" rel="stylesheet"></link>


# いきさつ
最近PHPのMVC方式のフレームワークである，[**Laravel**](http://laravel.jp/)にめちゃくちゃハマっております．
そしてLaravelの中には色んなパッケージが入ってるわけですが，その中でログイン認証機能などが便利に作成できる**Laravel Breeze**というものがあります．今回はそれを使ってみた上での備忘録です．

# そもそもLaravelとはなんなのか
前述の通り，LaravelはPHPのフレームワークです．MVC方式なのでデータベースを使用したWebアプリケーションがわかりやすく作れます．

<img width="50%" alt="larave.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/1ed27506-1b15-2f89-076f-d15540ed164e.png">

さらにArtisanと呼ばれるコマンドを使用することによってデータベースの操作，マイグレーションの実行，Dockerfileの自動生成，その他便利なLaravel用ライブラリのインストールなどを一括で行うことができます．また，バリデーションやミドルウェアの作成も標準対応しており，こちらも簡単に実装することができます．

# そしてLaravel Breezeとは
Laravelのライブラリ群の中に**Laravel Breeze**というものがあります．これはLaravelのログイン認証機能などを作成するときに使われるライブラリで，これを使用することで認証らへんの実装が簡単に行うことができます．

Laravel7まではLaravel/uiというものでReact.jsやVue.jsを使ってこれらの機能の実装を行なっていましたが，Laravel8からこのライブラリが公式で**非推奨**になり，代わりにJetStream機能が導入されました．しかしこれはLivewireやInertiaなどを使用しているので勉強するべき部分が多く，正直初心者には習得が難しいところがあります．なのでその後に新しく追加されたLaravel Breezeというもので比較的シンプルにログイン認証などの実装を行うことができるようになりました．

# 開発環境
- MacOS Monterey version 12.6
- PHP 8.1.12
- Composer 2.4.4
- Laravel Framework 9.39.0
- Docker version 20.10.8
- docker-compose version 1.29.2
# 実際にLaravel Breezeを使ってみよう
Laravel Breezeの便利さを実感してみましょう．まず，laravelのプロジェクトを立ち上げます．

```
curl -s "https://laravel.build/example-app?php=81" | bash
```

プロジェクトが立ち上がりましたら，Laravel Sailを起動してDockerコンテナを構築してデーモンを起動します．

```
cd example-app
./vendor/bin/sail up -d
```
この状態で[127.0.0.1](http://127.0.0.1)に接続するとサーバが立ち上がっているのがわかります．
<img width="80%" alt="larave.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/e2318589-cd9b-0eaa-2fac-a787c4f74cf9.png">



そして次にComposer経由でLaravel Breezeのパッケージをインストールします．

```
./vendor/bin/sail composer require laravel/breeze --dev
./vendor/bin/sail artisan breeze:install
```

更に，ユーザ情報を格納するテーブルを作ります．
Laravel Breezeをインストールすると，自動的にUsersというテーブルを作成する**マイグレーションファイル(データベースの設計書のようなもの)** が作られます．これをマイグレートすることでデータベースに必要なテーブルが作られることになります．
```
./vendor/bin/sail artisan migrate
```
これで準備は整いました．

ここでもう一度[127.0.0.1](http://127.0.0.1)に接続すると右上にログインと新規登録のリンクが二つできているのがわかります．

<img width="60%" alt="larave.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/ab59a2de-5ddc-e265-246e-4854b98814f1.png">

これでもうログイン認証機能自体は完成しました．とても簡単ですね．
では，ここで新規登録画面からユーザを登録してみましょう．右上の新規登録のリンクから新規登録の画面に飛んでください．

<img width="60%" alt="laravel.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/0b75f8c9-53fc-3030-0852-1bbb5cb5b515.png">

するとフォームが出てきます．ここに名前，メールアドレス，パスワードを入力して登録をすると，
<img width="60%" alt="laravel.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/b0347a78-43c3-59ed-862c-057ee2bb3ca3.png">


<img width="60%" alt="laravel.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881461/f77f80d3-4af3-0fb8-592e-6c3f95be7356.png">

ダッシュボード画面が作成されているのがわかります．この画面をいじって自分の作りたいWebページにしていきます．

このようにLaravel Breezeを使用すると自分で一から作るよりも安全に認証機能の実装を行うことができます．
また，ユーザデータはAuthという独自のクラスで取り扱われているので，このクラスの機能を使えばログイン状態の保持やテーブル上でのidの取得などが簡単に行うことができ，ユーザデータに対する処理も容易に行えます．

##
LaravelにはこのBreeze以外にもサブスクを実装させたいときに使われる[**Laravel Cashier**](https://readouble.com/laravel/8.x/ja/billing.html), GUIでプロジェクトを管理することができる[**Voyager**](https://voyager.devdojo.com/)などの便利なライブラリなどが多く存在しているのでぜひ色々調べてみるのもいいかもしれません．

参考：

https://reffect.co.jp/laravel/laravel8-breeze