こんにちは、かつコーチです。
前回はEloquentのキャスト・アクセサ・ミューテタの使い分けを解説しました。
今回からは新しいテーマ、「認証・セキュリティ」に入っていきます。
Laravelで会員登録・ログイン機能を作ろうとすると、必ずぶつかるのが「Breeze」「Jetstream」「Fortify」「Sanctum」という似た名前のパッケージたちです。
実は当ブログには以前「【Laravel】認証機能まとめ」という記事を掲載していましたが、今回はその内容を2026年時点の情報で整理し直したアップデート版としてお届けします。
「結局どれを使えばいいの?」という悩みを、判断軸とともにすっきり解決していきましょう。
Laravelの認証パッケージが4つもある理由
なぜ1つに統一されていないのか
Laravel本体にも最低限のログイン機能の仕組みは用意されていますが、実際の開発では、目的に応じてこれら4つのパッケージを組み合わせて使うのが一般的です。
というのも、「シンプルな個人開発」と「チーム機能を持つSaaS」と「スマホアプリ向けAPI」では、必要な認証の形がまったく違うからです。
Laravelはこの違いを1つの巨大なパッケージで無理に解決するのではなく、用途別に分けたパッケージを提供することで、必要な機能だけを選んで導入できるようにしています。
その結果、初学者から見ると「どれが自分に必要なのか分からない」という悩みが生まれやすくなっています。
4つのパッケージの立ち位置
まずは全体像をつかむために、4つのパッケージがそれぞれ何を提供しているのかを整理します。
- Breeze:ログイン画面のUIを含む、軽量でシンプルな認証機能一式
- Jetstream:Breezeよりも高機能で、チーム管理や2段階認証まで含む認証機能一式
- Fortify:画面(UI)を持たない、認証のバックエンド処理だけを提供するパッケージ
- Sanctum:API・SPA(シングルページアプリケーション)向けのトークン認証を提供するパッケージ
ここで押さえておきたいのは、BreezeとJetstreamは「UIも欲しい人向け」、FortifyとSanctumは「バックエンドだけ欲しい人向け」という大まかな住み分けです。
比較表で見る4つの違い
提供範囲・向いているケースの一覧
具体的な違いを比較表にまとめました。
| パッケージ | 提供範囲 | UI | チーム機能・2FA | 向いているケース |
|---|---|---|---|---|
| Breeze | ログイン画面+認証ロジック | あり(Blade/Tailwind、Vue/React選択可) | なし | シンプルな認証をすぐ実装したい人、Laravel初挑戦の人 |
| Jetstream | Breezeより高機能な認証機能一式 | あり(Livewire/Inertia) | あり | チーム管理や2段階認証が必要な中〜大規模アプリ |
| Fortify | 認証のバックエンド処理のみ | なし | あり(設定次第) | 独自デザインのUIを組みたい人、UIは自作したい人 |
| Sanctum | APIトークン認証・SPA認証 | なし | ー | モバイルアプリ・SPA向けのAPI認証が必要なとき |
この表からも分かる通り、BreezeとJetstreamは「UIまで含めてすぐ使いたい」パッケージ、FortifyとSanctumは「バックエンドの認証ロジックだけを部品として使いたい」パッケージという構図になっています。
実は、Jetstreamは内部的にFortifyを土台にして作られています。
つまり「Fortify(土台)+UI+チーム機能」がJetstreamという関係性です。
それぞれの選び方:判断軸を明確にする
初めてならBreeze
Laravelで初めて認証機能を実装するなら、まずはBreezeを選ぶのが無難です。
composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install
npm run dev
インストールコマンドを実行するだけで、ログイン・会員登録・パスワードリセットといった一通りの画面とロジックがすぐに手に入ります。
生成されるコードの量も少なく、「認証機能が内部でどう動いているか」を追いやすいのも、学習段階では大きなメリットです。
私が初めてLaravelの認証機能を触ったときも、まずBreezeで全体の流れを掴んでから、少しずつカスタマイズしていく進め方をしました。
いきなりJetstreamのような高機能なパッケージから入ると、生成されるファイルの多さに圧倒されてしまうので、初学者にはBreezeから触ることをおすすめします。
チーム機能や2段階認証が必要ならJetstream
複数人でチームを組んで使うSaaS的なアプリや、セキュリティ要件として2段階認証(2FA)が必須なアプリを作る場合は、Jetstreamが選択肢に入ります。
composer require laravel/jetstream
php artisan jetstream:install livewire
# または
php artisan jetstream:install inertia
php artisan migrate
npm install
npm run build
インストール時に、Livewireベース(Bladeに近い書き方)とInertiaベース(Vue/React寄りの書き方)のどちらかを選べます。
チームメンバーの招待機能やAPIトークンの発行画面など、Breezeにはない機能が最初から揃っている分、生成されるコード量も多くなります。
「認証以外の管理機能もまとめて揃えたい」という要件がある場合に向いていますが、逆にシンプルなアプリにはやや過剰になりやすい点は覚えておきましょう。
独自UIを組みたいならFortify単体
「デザインは自社のデザインシステムに完全に合わせたい」「Bladeではなく完全に独自のフロントエンドを組みたい」という場合は、Fortify単体を選びます。
composer require laravel/fortify
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
php artisan migrate
Fortifyは画面(View)を一切含まず、ログイン・登録・パスワードリセットなどのバックエンド処理(ルートとコントローラのロジック)だけを提供します。
そのため、フォームのHTMLやCSSはすべて自分で用意する必要がありますが、その分デザインの自由度は最も高くなります。
「BreezeやJetstreamは便利だけど、デザインの縛りがある」と感じたら、Fortifyでバックエンドだけ借りて画面は完全に自作する、という選択肢を検討しましょう。
API/SPA認証はSanctum
スマホアプリや、フロントエンドをVue/ReactでSPAとして切り離して作る場合は、Sanctumを使います。
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Sanctumは、APIリクエストのたびに送信するトークンを発行・検証する仕組みを提供します。
<?php
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (\Illuminate\Http\Request $request) {
return $request->user();
});
auth:sanctumミドルウェアを指定するだけで、有効なトークンを持つリクエストだけがこのエンドポイントにアクセスできるようになります。
BreezeやJetstreamのようなセッションベースの認証と違い、Sanctumは「サーバーとフロントエンドが別ドメインで動く」構成にも対応できる点が特徴です。
なお、SanctumはBreezeやJetstreamと排他的な関係ではなく、「画面のログインはBreeze、モバイルアプリからのAPIアクセスはSanctum」というように組み合わせて使うことも珍しくありません。
選び方を整理するフローチャート
判断のステップ
最後に、選び方をステップ形式で整理しておきます。
- APIやスマホアプリからのアクセスが必要か? → 必要ならSanctumを検討する(他のパッケージと併用も可)
- 画面(ログイン・登録フォーム)のUIが欲しいか? → 不要ならFortify単体
- チーム機能・2段階認証などの高度な機能が必要か? → 必要ならJetstream
- とにかくシンプルに、すぐ動く認証機能が欲しいか? → Breeze
初学者のうちは、まず4番の「Breezeでシンプルに始める」を選び、必要になったタイミングで他のパッケージを検討する、という進め方が最も挫折しにくいです。
つまずきやすいポイント:Fortifyだけ入れて「画面がない」と焦る
❌ Before:Fortifyを入れただけでログイン画面が出ると思い込む
composer require laravel/fortify
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
php artisan migrate
# この後ブラウザで /login にアクセスしても真っ白なエラー画面になる
私が最初にFortifyを試したとき、「これで認証機能が使えるようになるはず」と思い込んでブラウザで/loginにアクセスしたところ、ビューが見つからないというエラーが表示されて戸惑いました。
Fortifyは名前が似ているBreezeと違い、画面(View)を一切含んでいないため、/loginに対応するBladeファイルなどを自分で用意しない限り、そのままでは何も表示されません。
✅ After:Fortifyを使う場合は自分でビューを用意することを前提に導入する
<?php
// FortifyServiceProvider の boot() メソッド内で、
// どのビューを使うかを明示的に指定する必要がある
use Laravel\Fortify\Fortify;
Fortify::loginView(function () {
return view('auth.login'); // 自分で用意したビュー
});
Fortify::registerView(function () {
return view('auth.register');
});
Fortify::loginView()のように、表示するビューを明示的に指定するコードを自分で書く必要があります。
「Fortify=すぐ動く認証機能」ではなく「Fortify=認証ロジックの部品」だと理解しておけば、この戸惑いは避けられます。
まとめ
この記事は、以前公開していた「【Laravel】認証機能まとめ」を、2026年時点の情報とあらためての判断軸で整理し直したアップデート版です。
パッケージそのものの役割は大きく変わっていませんが、「結局どれを選べばいいか」を明確にすることを意識して再構成しました。
この記事のポイント
- Breeze・Jetstreamは「UIまで含めてすぐ使いたい」人向け、Fortify・Sanctumは「バックエンドだけ部品として使いたい」人向け
- 初めてならBreeze、チーム機能や2FAが必要ならJetstream、独自UIを組みたいならFortify単体、API/SPA認証はSanctumという判断軸で選ぶ
- JetstreamはFortifyを土台にして作られているため、両者は対立する選択肢ではなく発展関係にある
- SanctumはBreeze/Jetstreamと併用できる(画面はセッション認証、APIはトークン認証、という組み合わせも一般的)
- Fortifyは画面を持たないため、導入しただけではログイン画面は表示されず、自分でビューを用意する必要がある
次に読むべき記事
認証パッケージの選び方が分かったところで、次は実際にSanctumを使ってAPI認証を実装していきましょう。
→ 次の記事:Laravel SanctumでAPI認証を実装する