🦓

Laravel Breezeを使ってユーザー認証を作る

2023/10/15に公開

はじめに

Laravel Breezeを使ってユーザー認証を作っていきます。
Laravel BreezeはLaravelを使用したユーザー認証システムのパッケージです。

Breezeがデフォルトで提供している機能:
1. ユーザー登録
2. ログイン
3. パスワードリセット
4. メール認証
5. アカウント編集

https://laravel.com/docs/10.x/starter-kits

環境

PHP 8.x
Laravel 10.x
MySQL 8.x

tl;dr

phpとcomposerをインストールされていることを前提で進めていきます。

  1. 新規Laravelプロジェクトを作成する
  2. Breezeをインストールする
  3. Breezeの設定スクリプトを実行する
  4. DBのマイグレーション
  5. フロントエンドリソースのコンパイル
  6. ユーザー認証機能を確認する
  7. 日本語化する

新規Laravelプロジェクトを作成する

laravel-breezeディレクトリ内に作っていきます。

composer create-project --prefer-dist laravel/laravel .      
Creating a "laravel/laravel" project at "./"
Installing laravel/laravel (v10.2.6)
...

Breezeをインストールする

composer require laravel/breeze

./composer.json has been updated
Running composer update laravel/breeze
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking laravel/breeze (v1.25.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading laravel/breeze (v1.25.0)
  - Installing laravel/breeze (v1.25.0): Extracting archive
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi

   INFO  Discovering packages.  

......

85 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force

   INFO  No publishable resources for tag [laravel-assets].  

No security vulnerability advisories found.
Using version ^1.25 for laravel/breeze

Breezeの設定スクリプトを実行する

認証機能を試すだけなのでフロントはBladeを使います。

➜    php artisan breeze:install

 ┌ Which Breeze stack would you like to install? ───────────────┐
 │ Blade with Alpine                                            │
 └──────────────────────────────────────────────────────────────┘

 ┌ Would you like dark mode support? ───────────────────────────┐
 │ No                                                           │
 └──────────────────────────────────────────────────────────────┘

 ┌ Which testing framework do you prefer? ──────────────────────┐
 │ PHPUnit                                                      │
 └──────────────────────────────────────────────────────────────┘


   INFO  Installing and building Node dependencies.  


added 111 packages, and audited 112 packages in 31s

21 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

> build
> vite build

vite v4.4.11 building for production...
✓ 47 modules transformed.
public/build/manifest.json             0.26 kB │ gzip:  0.13 kB
public/build/assets/app-f88a056c.css  30.13 kB │ gzip:  5.85 kB
public/build/assets/app-87fccfb9.js   72.00 kB │ gzip: 26.73 kB
✓ built in 1.27s


   INFO  Breeze scaffolding installed successfully.  

routes/web.phpにルート、app/http/controllers/authにコントローラー、resources/views/authにビューファイルを追加されました。

DBをマイグレーションする

ユーザーテーブルが作成されたことを確認します。

➜  laravel-breeze php artisan migrate

   WARN  The database 'laravel-breeze' does not exist on the 'mysql' connection.  

 ┌ Would you like to create it? ────────────────────────────────┐
 │ Yes                                                          │
 └──────────────────────────────────────────────────────────────┘

   INFO  Preparing database.  

  Creating migration table ......................................... 58ms DONE

   INFO  Running migrations.  

  2014_10_12_000000_create_users_table ............................. 44ms DONE
  2014_10_12_100000_create_password_reset_tokens_table ............. 49ms DONE
  2019_08_19_000000_create_failed_jobs_table ....................... 37ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ............ 50ms DONE

フロントエンドリソースのコンパイル

npm install

added 5 packages, and audited 112 packages in 5s

21 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities


➜   npm run dev

> dev
> vite

Port 5173 is in use, trying another one...

  VITE v4.4.11  ready in 368 ms

  ➜  Local:   http://127.0.0.1:5174/
  ➜  Network: use --host to expose
  ➜  press h to show help

  LARAVEL v10.28.0  plugin v0.8.1

  ➜  APP_URL: http://localhost

ユーザー認証機能を確認する

早速認証機能を試してみます。
認証周りのルートを確認します。

➜   php artisan route:list
  GET|HEAD  login ............................................................. login › Auth\AuthenticatedSessionController@create
  POST      login ...................................................................... Auth\AuthenticatedSessionController@store
  POST      logout .......................................................... logout › Auth\AuthenticatedSessionController@destroy
  PUT       password ............................................................ password.update › Auth\PasswordController@update
  GET|HEAD  profile ........................................................................ profile.edit › ProfileController@edit
  PATCH     profile .................................................................... profile.update › ProfileController@update
  DELETE    profile .................................................................. profile.destroy › ProfileController@destroy
  GET|HEAD  register ............................................................. register › Auth\RegisteredUserController@create
  POST      register ......................................................................... Auth\RegisteredUserController@store
  POST      reset-password ..................................................... password.store › Auth\NewPasswordController@store
  GET|HEAD  reset-password/{token} ............................................ password.reset › Auth\NewPasswordController@create
  GET|HEAD  sanctum/csrf-cookie ................................ sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
  GET|HEAD  verify-email ............................................ verification.notice › Auth\EmailVerificationPromptController
  GET|HEAD  verify-email/{id}/{hash} ............................................ verification.verify › Auth\VerifyEmailController

サーバーを起動します。

➜  php artisan serve 

   INFO  Server running on [http://127.0.0.1:8000].  

  Press Ctrl+C to stop the server

/registerにアクセスしてみます。
以下の画面を表示されました。登録していきます。

登録されましたら自動的にログインされ、/dashboardにリダイレクトされるとの設定ですね。

routes/web.php
...
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

ユーザー名をクリックするとプロフィールの編集とログアウトメニューがあります。

Image from Gyazo

ログアウトをクリックするとルートディレクトリに遷移されます。
ページの右上のLog inRegisterが表示されます。
こちらのリンクはwelcome.blade.php内にあります。

/loginにアクセスするとログインフォームが表示されます。

日本語化する

Breezeの日本語化したパッケージも用意されているので、Breezeをインストールした上でこちらのパッケージをインストールします。

➜  composer require askdkc/breezejp --dev
./composer.json has been updated
Running composer update askdkc/breezejp
Loading composer repositories with package information
Updating dependencies
...
Using version ^1.7 for askdkc/breezejp

breezejpを使用します:

➜  php artisan breezejp

Laravel Breeze用に日本語翻訳ファイルを準備します
config/app.phpのlocaleをjaにします

 GitHubリポジトリにスターの御協力をお願いします🙏 (yes/no) [yes]: 
 
 (ブラウザが開いてこのGitHubリポが開きます。スター頂けると励みになります)
 
 Thank you! / ありがとう💓
日本語ファイルのインストールが完了しました!

公式のreadmeによりますと:

Laravelの言語設定やタイムゾーン設定が自動で行われます
Breezejpはphp artisan breezejpコマンド実行時にLaravelの設定ファイルconfig/app.phpのlocaleを自動でenからjaに変更します👍
ついでにTimezoneの設定も日本向けに直します🕛
具体的にはインストール時に自動でこうなりますので、特に何もしないでもOK👀✨💓

すごく便利ですね!

config/app.php
-'timezone' => 'UTC',
-'localel => 'en',
-'faker_locale' => 'en_US'

+'timezone' => 'Asia/Tokyo',
+'localel => 'ja',
+'faker_locale' => 'ja_JP'

追加された日本語はlang/から確認できます:

https://github.com/askdkc/breezejp

日本語のパッケージを使わない場合、手動で翻訳ファイルを作成し指定することもできます。
lang/locales/jaを参考してみてください。
https://github.com/Laravel-Lang/lang

終わりに

Laravel Breezeを使ったユーザー認証でした。

Discussion