今回の記事では、Laravel Fortifyで作成する認証機能の基本実装を取り上げて見たいと思います!
なお、今回のブログ記事で取り上げた内容に対応したGitHubリポジトリも用意しました。
「Laravel BreezeがLaravel12から推奨されなくなったと聞いて難民になりそう…」
そんな方にお役立てできれば幸いです!
目次
Laravel Fortifyとは?
Laravel Fortifyとは、Laravelアプリケーションのための認証機能パッケージセットです。
要するに、ログイン、ユーザー登録、メール認証などに代表される認証機能を実現するための「バックエンド実装部分のみ」を一通りまるっと提供してくれるライブラリです。
Laravelには認証機能を実装するためのパッケージが複数存在します。代表的なものとしてLaravel FortifyとLaravel Breezeなどがあります。
Laravel Fortifyの最大の特徴は、UIが生成されない・フロントエンド非依存である、ということです。つまりUI・画面は一切提供されません。
なぜ今Laravel Fortifyなのか?
Laravel12(2025年にリリース)において、Laravelにまつわるシステムに大きな変化がありました!(というかLaravelには大きな変化が定期的に起きている印象ですが…)
Laravelにはスターターキットというものが存在します。要するにLaravelで新しく開発をするときによく使う機能を最初からセットアップしてくれる「テンプレ」のようなものです。
認証機能でいえば、
- ログイン
- ユーザー登録
- パスワードリセット
- メール認証
などの画面や機能を1から作ることなく、コマンド実行で一括で用意することができるというものでした。
実はLaravel11までは、スターターキットにおいてLaravel Breezeを利用する選択肢が存在していました。
ところが、Laravel12では選択肢からLaravel Breezeが外れてしまったのです。
新しいアプリケーション スターター キットの導入により、Laravel Breeze と Laravel Jetstream は追加のアップデートを受けられなくなります。(日本語訳)
Laravelの公式ドキュメントにも、確かに事実上Laravel Breezeは非推奨となる記述が書かれていました。
Laravel BreezeのGitHubリポジトリを見ても
This starter kit is for Laravel 11.x and prior. For our latest starter kits, check out: https://laravel.com/starter-kits.
と書かれています。
だからこそ今、注目すべきがLaravel Fortifyなのです!
Laravel12からのスターターキットを見るに、フロントエンド・UIについてはReact・Vue・あるいはLivewireを使って書くことを想定したものになっています。
だからこそ、UI画面に依存するLaravel Breezeはサポートから外れてしまったのでしょう。
※要するにLaravelも「フロントエンド・UIはReactとかで作ってねー」という思想になりつつあるということでしょうか…
しかし、UIに依存しないLaravel Fortifyは、この思想にもしっかりと合致し、まさにこれからの時代に最適なLaravelの認証機能パッケージと言えるのではないかと思います!
備考
※ちなみに既存のLaravel 11以前のプロジェクトでLaravel Breezeを使っている場合は、 そのまま使い続けることは可能です。
Laravel12においてもサポートはされないもののインストールすることができるという情報は目にしました。ただし、新規アップデートは期待できないので、 Laravelの新規プロジェクトではFortifyや新しいスターターキットの採用を検討した方が良いでしょう。
また、Laravel12のスターターキットを利用する場合、Laravel Fortifyをインストールする必要はありません。
Laravel Fortify のインストール
では、Laravel Fortifyのインストール方法について見ていきましょう!
1. Fortify パッケージのインストール
以下のコマンドを実行して、Fortify パッケージをインストールします。
composer require laravel/fortify
2. Fortify のインストールとファイル生成
以下のコマンドを実行して、Fortify の設定ファイル、サービスプロバイダ、マイグレーションを生成します。
php artisan fortify:install
これにより、
config/fortify.php
app/Providers/FortifyServiceProvider.php
app/Actions/Fortify
フォルダの中身のファイルdatabase/migrations
フォルダの中に新しいマイグレーションファイル
が生成されます。
また、
bootstrap/providers.php
の中身が更新されます。
3. マイグレーションの実行
生成されたマイグレーションを実行して、データベースに Fortify の必要なテーブル(またはカラム)を追加します。
php artisan migrate
以下のような表示が出ればOKです!
INFO Running migrations.
YYYY_MM_DD_hhmmss_add_two_factor_columns_to_users_table 37.66ms DONE
Laravel Fortify関連の各ファイルの役割
さて、Laravel Fortifyをインストールすることで新たに生成されたファイル、結構たくさんあったと思います!
それぞれが何をするファイルなのかをざっくり見て行きたいと思います!
config/fortify.php
まずはconfig/fortify.php
についてです。これはLaravel Fortify
の基本設定を管理するファイルです。
一番重要なのはfeatures
の設定です!デフォルトでは以下のような記述がなされています。
'features' => [
Features::registration(), // ユーザー登録機能
Features::resetPasswords(), // パスワードリセット機能
Features::emailVerification(), // メール認証機能
Features::updateProfileInformation(), // プロフィール更新機能
Features::updatePasswords(), // パスワード変更機能
Features::twoFactorAuthentication([ // 二要素認証機能
'confirm' => true,
'confirmPassword' => true,
]),
],
例えば、仮に「メール認証機能は使わない」という場合は、Features::emailVerification()
をコメントアウトすることになります。
このように、機能のON/OFFを制御したり、他にも'views' => true
に代表されるように、フロントエンド・UIをLaravel内で記載するかどうかの基本値を設定することができたりなど、各種基本設定を行うことができるようになっています!
app/FortifyServiceProvider.php
次にapp/FortifyServiceProvider.php
を見てみましょう!このファイルは、Laravel Fortify
のコアを司るといっても過言ではないファイルです!
具体的には「Laravel Fortify」
を使った認証機能がどう動くかをコントロールするためのファイルです!
一例を見てみましょう!FortifyServiceProvider.php
のboot
関数に以下のような記述を追加するとします。
Fortify::loginView(function () {
return view('pages.auth.login');
});
この処理においては、「ログイン画面として実際のどのViewファイルを表示するか」を定義しています。
app/Actions/Fortify
次に、app/Actions/Fortify
配下のファイルです。これらは、実際の処理を行う箇所です。認証機能のデフォルトの動きをカスタマイズしたい場合は、この辺りのファイルを編集することになります!
- CreateNewUser.php → ユーザー登録時の処理
- UpdateUserPassword.php → パスワード変更時の処理
- UpdateUserProfileInformation.php → プロフィール更新時の処理
- ResetUserPassword.php → パスワードリセット時の処理
YYYY_MM_DD_hhmmss_add_two_factor_columns_to_users_table.php
最後にマイグレーションファイルですが、このマイグレーションファイルはusersテーブルに2要素認証用のカラムを追加するものになっています!
具体的には以下のカラムが追加されます。
- two_factor_secret
- two_factor_recovery_codes
- two_factor_confirmed_at
※二要素認証は、パスワードに加えて、スマホアプリ(Google Authenticatorなど)で 生成される6桁の数字を入力することで、セキュリティを強化する仕組みです。 使わない場合でも、これらのカラムが追加されること自体は問題ありません!
Laravel Fortifyを使った基本的な認証機能の作成
では、ここからは新規登録、ログイン、ログアウト機能を題材にして、Larave Fortifyを使った基本的な認証機能を作成していきましょう!
以下の状態を前提とします。
- php artisan migrateコマンドを実行済でDB内にusersテーブルが存在する
- CSSにはtailwind.cssを利用。既にtailwind.cssが利用できる環境は存在している。
- メールアドレスとパスワードでのログインを基本とする
- 新規登録時にはユーザー名も入力する
- ViewファイルにはBladeを採用し、viewファイルの構成はGitHubリポジトリの内容に準ずる
- 認証関連ページのURLは以下の通りとする
- ログイン・・・/login
- 新規登録・・・/register
- 認証後の画面・・・/home

FortifyServiceProvider.phpの設定
まずはProviderファイルを編集します!
app/Providers/FortifyServiceProvider.php
のboot
メソッドに、以下のような記述を追加し、どの画面でどのviewを表示するかを教えてあげましょう!
public function boot(): void
{
/* 以下の記述を追加 */
Fortify::registerView(function () {
return view('pages.auth.register');
});
Fortify::loginView(function () {
return view('pages.auth.login');
});
/* 以上の記述を追加 */
}
これで、認証関連のログイン(/login)および新規登録(/register)において、どのファイルで画面を表示すればいいかを定義することができます。
web.phpの設定
Laravel Fortifyの責任範囲は認証機能関連のみです!
ということで、ログイン後の画面についての設定はFortifyServiceProvider.php
で行うことができないため、routes/web.php
に以下のような記述を実施し、ログイン後の画面表示設定を行います!
Route::middleware(['auth'])->group(function () {
Route::get('/home', function () {
return view('pages.auth.home');
})->name('home');
});
config/fortify.phpの調整
ログイン後の画面が/homeであること、そしてログアウト後のリダイレクト先を/loginにするために、config/fortify.phpにも以下の記述をしてあげましょう!
'home' => '/home',
'redirects' => ['logout' => 'login',],
Viewファイルの用意
あとは、ログイン画面・新規登録画面・ログイン後の画面をそれぞれ用意してあげればOKです!
viewファイルを全てこの記事上に記載すると、それだけでかなりのスペースをとってしまいます。
そのため、GitHubリポジトリに今回の記事の内容の完成形ファイルを掲載しました!
この中にviewファイルの中身も載せているので、参考にしてください!
resources/views/pages/auth
の中にviewファイルは全て入れています!
動作確認
ここまでできれば基本的な実装は完了!
以下の手順で動作確認を行なってみましょう!(筆者はphp artisan serveでサーバ起動して動作確認をしました)
/register
で新規登録画面が表示される- 入力フォームにユーザー名・メールアドレスとパスワードを入力
- ボタンを押してユーザー登録が実施され、
/home
が表示されることを確認 /home
にあるログアウトボタンを押してログアウトがなされることを確認/login
でメールアドレスとパスワードを使用してログインができることを確認
おつかれさまでした!
まとめ
ということで、今回はLaravel Fortify
について、そしてLaravel Fortify
を使った基本的な認証機能の実装の仕組みを見ていきました!
Laravel Fortifyを使って実際の制作も行なってみていますが、個人的には非常に使い勝手が良さそうで、フロントエンド非依存型なのが僕としてはむしろメリットだなと思いました!