Laravel Breezeとは?インストールからログイン・登録機能の構築・日本語化まで徹底解説

実装・応用テクニック

Laravel Breeze(ララベル・ブリーズ)は、ユーザー登録やログイン、パスワードリセットといったWebアプリケーションに不可欠な認証機能一式を最小限かつシンプルに構築できるLaravel公式スターターキットです。

Laravel Jetstreamのようにパッケージ内部に処理が隠蔽される構成とは異なり、Breezeはルーティング・コントローラ・ビュー(BladeやInertia)の全ソースコードをご自身のプロジェクト内に直接展開します。そのため、「ブラックボックスがなくコードの仕組みを理解しやすい」「デザインや入力項目を自由に変更しやすい」という大きなメリットがあり、Laravel初学者から実務開発まで幅広く選ばれています。

本記事では、Laravel Breezeの概要や選べるフロントエンドスタックの違いから、実際のインストール手順、動作確認、日本語化、認証機能の実践的な使い方、よくあるトラブル対処法までを網羅して分かりやすく解説します。

Laravel Breezeで構築できる認証機能一覧

Breezeをインストールすると、以下の認証機能が最初から完全に実装された状態でプロジェクトに組み込まれます。

機能 概要・特徴 対応コントローラ・ルート
ユーザー登録(Register) 名前・メールアドレス・パスワードを入力して新規アカウントを作成し、自動ログインします。 RegisteredUserController
/register
ログイン・ログアウト(Login / Logout) 登録済みメールアドレスとパスワードで認証します。「ログイン状態を保持する(Remember Me)」機能やログイン試行回数制限(レートリミット)も標準装備されています。 AuthenticatedSessionController
/login, /logout
パスワードリセット(Password Reset) パスワードを忘れた際に再設定用メールリンクを送信し、安全に新しいパスワードへ更新します。 PasswordResetLinkController
NewPasswordController
/forgot-password, /reset-password
メールアドレス認証(Email Verification) 登録直後に確認メールを送信し、リンクをクリックするまで特定ページへのアクセスを制限できます(設定で有効化可能)。 EmailVerificationPromptController
VerifyEmailController
/verify-email
パスワード再確認(Confirm Password) パスワード変更や課金情報の変更など、セキュリティ上重要な操作を行う直前にパスワードの再入力を要求します。 ConfirmablePasswordController
/confirm-password
プロフィール編集・アカウント削除 ユーザー名やメールアドレスの更新、パスワード変更、アカウントの完全削除(確認モーダル付き)を行えます。 ProfileController
/profile

選べるフロントエンドスタックと特徴

php artisan breeze:installコマンドを実行する際、プロジェクトの要件に合わせて以下のフロントエンドスタックから自由に選択できます。

スタック名 構成技術 特徴・おすすめの用途
blade Bladeテンプレート + Tailwind CSS 最も標準的でシンプル。JavaScriptフレームワークを必要とせず、Laravel標準のBladeで画面を構築したい場合に最適です。
livewire Livewire + Tailwind CSS Bladeライクな構文でリアクティブなSPA風UIを実現します。Livewireを中心としたフルスタックPHP開発に最適です。
livewire-functional Livewire(Volt / 関数型記法) Voltを使用した単一ファイルコンポーネント形式のLivewire構成です。
react Inertia.js + React + Tailwind CSS Inertia.jsを介してReactコンポーネントをフロントエンドに使用します。ルーティングや認証ロジックはLaravel側のままSPAを構築できます。
vue Inertia.js + Vue 3 + Tailwind CSS Inertia.jsを介してVue 3コンポーネントを使用するSPA構成です。
api Laravel Sanctum(バックエンドのみ) Next.js、Nuxt、React Native、Flutterなどの外部フロントエンドと連携するためのトークン認証APIエンドポイントのみを生成します。

また、インストール時には以下のような追加オプションを指定することも可能です。

  • --dark:ダークモード対応スタイルの有効化
  • --typescript:React/VueスタックでTypeScriptを採用
  • --ssr:Inertia.jsでサーバーサイドレンダリング(SSR)をサポート
  • --pest:テストフレームワークにPestの認証テストコードを生成

Laravel Breezeのインストール手順(ステップ解説)

ここからは、最も利用頻度の高い「Bladeスタック」を例に、Breezeを導入して認証画面を動作させるまでの手順をステップ順に解説します。

前提環境

  • PHP 8.2以上
  • Composer 2.x
  • Node.js(v18以上)および npm
  • データベース(SQLite、MySQL、PostgreSQLなど)

Step 1: Laravelプロジェクトの作成

新規にLaravelプロジェクトを作成する場合は、ターミナルで以下のコマンドを実行します。

composer create-project laravel/laravel breeze-demo
cd breeze-demo

※既存のプロジェクトに導入する場合は、プロジェクトのルートディレクトリに移動してください。

Step 2: Laravel Breezeパッケージの追加

Composerを使ってBreezeを開発依存パッケージ(--dev)としてインストールします。

composer require laravel/breeze --dev

Step 3: Breezeのセットアップ(Artisanコマンド)

Artisanコマンドを実行して、認証用のファイル一式を展開します。

php artisan breeze:install blade

コマンドの対話プロンプトでダークモードの有無やテストフレームワーク(Pest / PHPUnit)の選択が求められた場合は、矢印キーでお好みの構成を選択してください。

このコマンドにより、認証用コントローラ、Bladeビュー、ルート定義(routes/auth.php)が生成され、同時にnpm installおよびフロントエンドビルド設定が自動実行されます。

Step 4: データベースのマイグレーション

認証に必要なusersテーブルやpassword_reset_tokensテーブルを作成するため、マイグレーションを実行します。

php artisan migrate

※Laravel 11以降でSQLiteを使用している場合、初期状態で自動作成されたdatabase/database.sqliteにテーブルが作成されます。

Step 5: 開発サーバーの起動と動作確認

フロントエンドのCSS/JSをリアルタイムでコンパイルするViteと、Laravelのローカル開発サーバーをそれぞれ起動します。

ターミナル1(Viteビルド):

npm run dev

ターミナル2(Laravelサーバー):

php artisan serve

ブラウザで http://localhost:8000 にアクセスすると、トップ画面の右上に「Log in」および「Register」のリンクが表示されます。

  • http://localhost:8000/register:ユーザー登録画面
  • http://localhost:8000/login:ログイン画面
  • http://localhost:8000/dashboard:ログイン後のダッシュボード

実際に登録を行い、ログイン・ダッシュボードの表示・ログアウトができることを確認してください。

Laravel Sail(Docker)環境の場合のコマンド:
Sailをご利用の場合は、コマンドの先頭に ./vendor/bin/sail を付与して実行します。
./vendor/bin/sail composer require laravel/breeze --dev
./vendor/bin/sail php artisan breeze:install blade
./vendor/bin/sail php artisan migrate
./vendor/bin/sail npm install && ./vendor/bin/sail npm run dev
詳しくはLaravel Sailとは?初心者向け導入・起動停止・よく使うコマンド・Dockerとの関係を徹底解説をご覧ください。

生成される主要ファイルとディレクトリ構成

Breezeをインストールすると、プロジェクト内に以下のファイルが生成されます。すべてのコードが直接配置されているため、必要に応じて自由に中身を閲覧・編集できます。

app/
└── Http/
    └── Controllers/
        ├── Auth/
        │   ├── AuthenticatedSessionController.php  # ログイン・ログアウト処理
        │   ├── RegisteredUserController.php        # 会員登録処理
        │   ├── PasswordResetLinkController.php     # パスワードリセットリンク送信
        │   ├── NewPasswordController.php           # 新パスワード更新処理
        │   ├── EmailVerificationNotificationController.php # 確認メール再送
        │   ├── VerifyEmailController.php           # メール検証処理
        │   ├── ConfirmablePasswordController.php   # パスワード再確認
        │   └── PasswordController.php              # パスワード変更
        └── ProfileController.php                   # プロフィール編集・削除

resources/
└── views/
    ├── auth/                                       # ログイン・登録・リセット等の各画面
    │   ├── login.blade.php
    │   ├── register.blade.php
    │   ├── forgot-password.blade.php
    │   ├── reset-password.blade.php
    │   └── verify-email.blade.php
    ├── layouts/                                    # アプリ全体のレイアウト(app, guest)
    ├── components/                                 # フォームやボタン等の共通Bladeコンポーネント
    └── dashboard.blade.php                         # ログイン後ダッシュボード

routes/
├── web.php                                         # トップやdashboard、profileのルート定義
└── auth.php                                        # 認証関連のルート定義一式

Breeze導入後の実践的な使い方とコード例

1. 認証必須ルートの保護(auth ミドルウェア)

ログインしたユーザーのみに閲覧を許可したいページは、authミドルウェアを適用してルートを保護します。

use App\Http\Controllers\ArticleController;

// 単一ルートの保護
Route::get('/articles/create', [ArticleController::class, 'create'])
    ->middleware(['auth']);

// グループでまとめて保護
Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');

    Route::resource('articles', ArticleController::class);
});

未ログイン状態でこれらのページにアクセスすると、自動的にログイン画面(/login)へリダイレクトされます。

2. Bladeビュー内でのログイン状態の判定とユーザー情報表示

Bladeテンプレート内では、@auth@guest ディレクティブを使ってログイン状態に応じた表示の切り替えが可能です。

@auth
    <!-- ログイン中のみ表示 -->
    <p>ようこそ、{{ Auth::user()->name }} さん!</p>
    <a href=\"{{ route('profile.edit') }}\">マイページ</a>
    
    <form method=\"POST\" action=\"{{ route('logout') }}\">
        @csrf
        <button type=\"submit\">ログアウト</button>
    </form>
@endauth

@guest
    <!-- 未ログイン時のみ表示 -->
    <a href=\"{{ route('login') }}\">ログイン</a>
    <a href=\"{{ route('register') }}\">会員登録</a>
@endguest

3. メールアドレス確認(Email Verification)の有効化

ユーザー登録後にメールアドレスの実在確認を必須にしたい場合は、以下の2ステップで簡単に有効化できます。

① `App\Models\User` モデルで `MustVerifyEmail` を実装:

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    // ...
}

② ルートに `verified` ミドルウェアを追加:

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

これだけで、メールアドレスの確認リンクをクリックするまで指定ページへのアクセスが制限され、確認メール案内画面(verify-email.blade.php)が表示されます。

Laravel Breezeを日本語化する方法

デフォルトのBreezeは英語表記となっているため、実務で使う際は日本語化を行います。Laravel 9以降の標準ディレクトリ構成であるルート直下のlang/ディレクトリを使って設定します。

Step 1: 言語ファイルを公開する

まず、Laravel標準の認証エラーメッセージやバリデーションメッセージ用ファイルを生成します。

php artisan lang:publish

コマンドの詳細はlang:publish — 言語ファイルを公開するコマンドでも解説しています。実行後、lang/en/が作成されるため、これをlang/ja/にコピーします。

cp -r lang/en lang/ja

lang/ja/auth.phpを編集し、認証エラー時の文言を日本語にします。

<?php

return [
    'failed' => '認証情報が登録内容と一致しません。',
    'password' => '入力されたパスワードが正しくありません。',
    'throttle' => 'ログイン試行回数が多すぎます。:seconds秒後に再試行してください。',
];

Step 2: 画面ラベル翻訳用(lang/ja.json)の作成

BreezeのBladeテンプレートでは、__('Email')__('Password')のようにJSON形式の翻訳キーが使用されています。プロジェクトルート直下のlang/ja.jsonを作成して翻訳を定義します。

{
    \"Name\": \"お名前\",
    \"Email\": \"メールアドレス\",
    \"Password\": \"パスワード\",
    \"Confirm Password\": \"パスワード(確認用)\",
    \"Current Password\": \"現在のパスワード\",
    \"New Password\": \"新しいパスワード\",
    \"Remember me\": \"ログイン状態を保持する\",
    \"Forgot your password?\": \"パスワードをお忘れですか?\",
    \"Log in\": \"ログイン\",
    \"Log Out\": \"ログアウト\",
    \"Register\": \"新規会員登録\",
    \"Already registered?\": \"既にアカウントをお持ちの方はこちら\",
    \"Profile\": \"プロフィール\",
    \"Save\": \"保存する\",
    \"Saved.\": \"保存しました。\",
    \"Delete Account\": \"アカウントを削除する\"
}

Step 3: アプリケーションの言語設定を日本語に変更

.envファイルのロケール設定をjaに変更します。

APP_LOCALE=ja
APP_FALLBACK_LOCALE=ja

設定後、ブラウザをリロードすると、ログイン画面や登録画面の各ラベルが日本語で表示されます。

よくあるトラブルと解決策

Q1: CSSやデザインが崩れる・スタイルが適用されない

原因: Vite開発サーバーが停止しているか、アセットがビルドされていません。
対処法: 開発時は別のターミナルで npm run dev を常時起動してください。本番環境や静的ビルドを行う場合は npm run build を実行します。

Q2: 会員登録画面にオリジナルの入力項目(電話番号など)を追加したい

対処法: 以下の4箇所を修正します。

  1. マイグレーション: database/migrations/xxxx_create_users_table.php にカラムを追加(例: $table->string('phone')->nullable();)してマイグレーション実行。
  2. モデル: app/Models/User.php$fillable 配列にカラム名を追加。
  3. Bladeビュー: resources/views/auth/register.blade.php に入力フォームを追加。
  4. コントローラ: app/Http/Controllers/Auth/RegisteredUserController.phpstore() メソッド内でバリデーションルールと User::create() の登録配列に項目を追加。

Q3: BreezeとJetstream、Fortifyのどれを選ぶべき?

パッケージ コードの配置 おすすめのシチュエーション
Laravel Breeze すべてプロジェクト内に展開 シンプルに認証を始めたい場合、自分でコードを完全に把握・カスタマイズしたい小〜中規模Webアプリ
Laravel Jetstream 一部コア機能はパッケージ内に隠蔽 最初から二要素認証(2FA)、チーム機能、APIトークン管理(Sanctum)が必須の本格的なSaaS開発
Laravel Fortify ビューなし(ヘッドレス) フロントエンド(Next.jsや独自CSS等)を完全にゼロから作り、認証バックエンドロジックのみ流用したい場合

※Jetstreamの詳細はjetstream:install — Jetstreamをインストールするコマンド、Fortifyの詳細はfortify:install — Fortifyをインストールするコマンドをご参照ください。

まとめ

Laravel Breezeは、余計な依存を持たず、シンプルかつクリーンに認証機能を構築できる公式の推奨スターターキットです。

  • 全コードが直接生成されるため、ブラックボックスがなく自由にカスタマイズ可能
  • Blade、Livewire、React、Vue、APIと多彩なスタックに対応
  • 日本語化や項目の追加も容易で、実務案件の土台としても最適

認証機能を手早く、かつ確実に見通しよく構築したい場合は、ぜひLaravel Breezeを活用してみてください。

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント