Laravel SailとLaravel Breezeでさくっとログイン機能を実装する

# Laravel SailとLaravel Breezeでさくっとログイン機能を実装する

Laravel Sailを利用するとLaravelのDocker開発環境が構築できます。
Laravel8からは更にLaravel BreezeやLaravel Jetstreamなどの認証機能やアプリケーションのスタータキットが提供されています。

これらを利用すると、ものすごく簡単にアプリケーションの開発がスタートできたので手順をまとめてみました。

## Laravel Sailについて

Laravel Sailについては[こちら](https://qiita.com/kai_kou/items/0e773aaf50698dd5a93f)をご参考ください。


## 前提条件

### Dockerがインストールされていること

```console
> docker -v
> docker-compose -v
```

### curlがインストールされていること

```console
curl --version
```

インストールされていなかったらインストールします。

```console:mac
> brew install curl
```

```console:Linux/Windows(WSL)
> sudo apt install -y curl
```

## Laravel Sailで開発環境構築

アプリケーション名(`hoge_app`)は任意の名前にできます。

```console
> cd 任意のディレクトリ
> curl -s https://laravel.build/hoge_app | bash

# 途中で端末にパスワードを求められるので入力
Please provide your password so we can make some final adjustments to your application's permissions.

Password:
```

環境変数ファイル(`.env`)の設定を変更します。ここでは`MAIL_FROM_ADDRESS` を変更してLaravelからメール送信ができるようにしています。

```txt:.env
-MAIL_FROM_ADDRESS=null
+MAIL_FROM_ADDRESS=hoge@example.com
```

`sail` コマンドでDockerコンテナを起動します。
初回はイメージのダウンロードやビルドで時間がかかります。

```console
> cd hoge_app
> ./vendor/bin/sail up -d
(略)
Creating hoge_app_selenium_1    ... done
Creating hoge_app_mysql_1       ... done
Creating hoge_app_meilisearch_1 ... done
Creating hoge_app_mailhog_1      ... done
Creating hoge_app_redis_1       ... done
Creating hoge_app_laravel.test_1 ... done
```

コンテナが起動したらブラウザで動作確認します。

- laravel: http://localhost/
- MailHog: http://localhost:8025/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/d68907af-4de2-2fee-1aa6-55306b166794.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/277f274d-db8f-3fe1-0496-ab042f133f4c.png)

## Laravel Breezeのインストール

Laravel Breezeパッケージをインストールします。

```console
> ./vendor/bin/sail composer require laravel/breeze --dev
> ./vendor/bin/sail php artisan breeze:install
> ./vendor/bin/sail npm install
> ./vendor/bin/sail npm run dev
```

パッケージがインストールできたらマイグレーションを実行します。

```console
> ./vendor/bin/sail php artisan migrate

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (43.49ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (27.58ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (30.88ms)
```

これでログインに関する画面やダッシュボードが実装されました。
ウェルカム画面をみると右上にリンクが追加されているのが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/28c38796-0335-a168-4f82-a307b2586c5f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/4e79f4a0-9f6c-d775-1bf8-41ff2f282a82.png)


## Laravel Breezeの日本語化

このままだと英語表記となっていますので、日本語化対応してみます。
日本語化には公式ではありませんが下記リポジトリを利用させてもらいます。

Laravel-Lang/lang: List of 76 languages for Laravel Framework 4, 5, 6, 7 and 8, Laravel Jetstream and Laravel Fortify.
https://github.com/Laravel-Lang/lang

パッケージとして提供されているので、`composer` コマンドでインストールできます。
インストール後、設定ファイルをコピーします。

```console
> ./vendor/bin/sail composer require laravel-lang/lang:~8.0
> cp -r ./vendor/laravel-lang/lang/src/ja/ resources/lang/ja/
> cp ./vendor/laravel-lang/lang/json/ja.json resources/lang/
```

Laravelアプリの設定ファイル(`config/app.php`)でタイムゾーンと言語設定を変更します。

```php:config/app.php
-    'timezone' => 'UTC',
+    'timezone' => 'Asia/Tokyo',
-    'locale' => 'en',
+    'locale' => 'ja',
```

画面を確認するとほぼほぼ日本語化されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/a5e60ab5-0d57-c7d8-7258-c16296c2b7a3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/2aab30a1-991a-986a-7c86-8fc8dbd6b73e.png)

日本語化されていない箇所については`resources/lang/ja.json` に設定を追加することで、日本語化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/1bf7ab76-5927-7cd5-c8d8-bc73cca92826.png)

```json:resources/lang/ja.json
-    "You may not leave a team that you created.": "自身が作成したチームを離れることはできません。"
+    "You may not leave a team that you created.": "自身が作成したチームを離れることはできません。",
+    "Whoops! Something went wrong.": "おっと、サーバーで何か問題が発生しました。"
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/f43f4bfc-65ee-82f8-ee76-e0638f2b5495.png)

エラーメッセージに含まれる項目名を日本語にしたい場合、`resources/lang/ja/validation.php` にある`attributes` に設定を追加することで、日本語化できます。

```json:resources/lang/ja/validation.php
-    'attributes' => [],
+    'attributes' => [
+        'password' => 'パスワード',
+    ],
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/0c604a7b-c146-bcd9-9694-9fe4f1ad5986.png)

## まとめ

Laravelの開発環境構築からログイン関連の画面追加をしてみましたが、設定ファイルを編集するだけで簡単に用意することができました。
また、`./vendor/bin/sail` コマンドを利用することで、Dockerコンテナに入る必要がないことも個人的には感動がありました。


## 参考

Laravelの開発環境をDockerで構築しようとしたら公式さんがLaravel Sailって素敵ツールを提供してくれていました - Qiita
https://qiita.com/kai_kou/items/0e773aaf50698dd5a93f

Laravel-Lang/lang: List of 76 languages for Laravel Framework 4, 5, 6, 7 and 8, Laravel Jetstream and Laravel Fortify.
https://github.com/Laravel-Lang/lang

Laravel Breezeで「シンプルな」ログイン機能をインストール – console dot log
https://blog.capilano-fw.com/?p=8301

Laravel Jetstream の各種フォームを日本語化する – console dot log
https://blog.capilano-fw.com/?p=7930

Laravelの言語を日本語に変更 - Qiita
https://qiita.com/mitashun/items/160784ce352cf529f853

【Laravel】初めての認証（Laravel8でJetstreamを使う） - Qiita
https://qiita.com/manbolila/items/498aae00f3574c72f031