LaravelのFortifyとSanctumの違いと使い分け!初心者向けに認証の仕組みをやさしく解説
生徒
「Laravelの認証を調べていたら、FortifyとSanctumという言葉が出てきました。どちらを使えばいいんですか?」
先生
「この二つは役割が少し違います。名前が並んで紹介されることが多いので、混乱しやすいですね。」
生徒
「プログラミング未経験なので、違いがまったく想像できません…」
先生
「大丈夫です。家の鍵と入館証に例えながら、順番に整理していきましょう。」
1. Laravelの認証機能を整理しよう
Laravelの認証とは、「ログインしているのは誰か」を確認する仕組みです。ユーザー名やメールアドレス、パスワードを使って本人かどうかを判断します。
Laravelには、認証を助けてくれる仕組みがいくつか用意されています。その中でも、FortifyとSanctumはよく名前が出てくる存在です。
まず大切なのは、「この二つは競合するものではなく、役割が違う」という点です。同じ認証でも、担当している仕事が異なります。
2. Laravel Fortifyとは何か?
Laravel Fortifyは、「ログイン処理そのもの」を担当する仕組みです。ユーザーが入力したメールアドレスとパスワードを確認し、正しければログイン状態にします。
Fortifyは、画面を持たない認証の裏側だけを提供します。つまり、「どうやってログインを判断するか」という中身だけを用意してくれます。
例えるなら、受付で身分証をチェックする係です。入館証が本物かどうかを確認し、問題なければ通してくれます。
3. Laravel Sanctumとは何か?
Laravel Sanctumは、「ログイン状態を安全に保つための仕組み」です。特に、API通信や別の画面からアクセスする場合に使われます。
Sanctumは、トークンという特別な合言葉を使って、「このアクセスは本人ですよ」と証明します。トークンとは、一時的な通行証のようなものです。
これは、建物に入るときに毎回身分証を出さず、入館証を首から下げて移動するイメージに近いです。
4. FortifyとSanctumの役割の違い
FortifyとSanctumの大きな違いは、どの場面を担当するかです。
Fortifyは「ログインするとき」に使われます。一方でSanctumは「ログインした後、その状態を使ってアクセスする」ときに使われます。
つまり、Fortifyは入り口の確認係、Sanctumは建物の中で使う通行証の管理係です。役割が違うので、混同しないことが大切です。
5. 初心者が混乱しやすいポイント
初心者がよく混乱するのは、「FortifyとSanctumのどちらかを選ばないといけない」と思ってしまう点です。
実際には、両方を一緒に使うこともあります。ただし、学習初期では「Fortifyはログイン処理」「Sanctumはログイン後の認証」と理解できていれば十分です。
細かい設定や高度な使い分けは、後から学ぶ内容なので、今は全体像をつかむことを優先しましょう。
6. Breezeとの関係を知ろう
Laravel Breezeを使った場合、内部ではFortifyが利用されています。つまり、BreezeはFortifyを使いやすくしたセットです。
そのため、Breezeでログインができているなら、すでにFortifyの仕組みを使っていることになります。
Sanctumは、API通信やスマートフォンアプリと連携する場合に登場することが多く、最初は意識しなくても問題ありません。
7. どう使い分ければいいのか
通常のWebサイトでログイン機能を作る場合は、Fortifyを使った仕組みで十分です。画面からログインし、ページを移動する流れに向いています。
一方で、画面を持たない通信や、外部から安全にアクセスしたい場合はSanctumが活躍します。
初心者の段階では、「Fortifyはログインの仕組み」「Sanctumは安全な証明書」というイメージを持つだけで、Laravelの認証がぐっと理解しやすくなります。
まとめ
LaravelのFortifyとSanctumの違いをもう一度整理する
ここまで、Laravelの認証機能の中でも特に初心者が混乱しやすいFortifyとSanctumの違いについて解説してきました。Laravelでログイン機能を作ろうとすると、BreezeやJetstream、Fortify、Sanctumなど、いくつもの名前が登場するため、最初は何が何だかわからなくなることが多いものです。
しかし、役割を整理してみると理解はそれほど難しくありません。Laravelの認証の流れは、大きく分けると「ログインを確認する処理」と「ログイン状態を維持する処理」に分かれます。この二つの役割を担当しているのがFortifyとSanctumです。
Fortifyはログイン処理の中心となる仕組みであり、ユーザーが入力したメールアドレスやパスワードを確認して本人かどうかを判断します。ログイン処理、パスワードリセット、ユーザー登録、メール確認など、認証の基本機能を裏側で担当しています。
一方、Sanctumはログインした後の通信を安全に保つための仕組みです。特にAPI通信を行う場合に利用されることが多く、トークンと呼ばれる仕組みを使ってアクセスを認証します。トークンは一時的な証明書のような役割を持ち、サーバーに対して「この通信は正しいユーザーから送られている」という証明になります。
このように整理すると、Fortifyはログインの入口を担当する仕組みであり、Sanctumはログイン後のアクセスを安全に管理する仕組みだと理解できます。どちらか一つだけを選ぶというよりも、目的に応じて組み合わせて利用されることが多いのが特徴です。
Laravel認証の全体イメージ
Laravelの認証の流れをイメージしやすくするために、処理の流れを簡単に整理してみましょう。ユーザーがログイン画面からメールアドレスとパスワードを入力すると、Fortifyがその情報を確認します。もし情報が正しければログイン状態が作られます。
その後、ユーザーがページを移動したりAPI通信を行ったりすると、その通信が本当にログインしているユーザーなのかを確認する必要があります。ここで活躍するのがSanctumです。Sanctumはトークンを使ってユーザーのアクセスを識別します。
このように、Laravelの認証は複数の仕組みが協力して動いています。Breezeのような認証スターターキットを使うと、これらの仕組みがあらかじめ設定されているため、初心者でも簡単にログイン機能を作ることができます。
Sanctumでトークンを発行するサンプル
API通信でよく使われるのが、Sanctumによるトークン認証です。ユーザーがログインした後にトークンを発行することで、そのトークンを使って安全な通信を行うことができます。
$user = Auth::user();
$token = $user->createToken('api-token');
return $token->plainTextToken;
上記のコードでは、ログインしているユーザーからトークンを発行しています。このトークンはAPI通信のときに送信することで、サーバー側はユーザーを識別できます。
APIリクエストの例
発行されたトークンは、HTTPヘッダーに設定して送信することで認証付き通信が可能になります。
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', '/api/user', [
'headers' => [
'Authorization' => 'Bearer ' . $token
]
]);
このようにトークンを送信することで、LaravelのSanctumはユーザーの認証を確認し、安全なAPI通信を実現します。スマートフォンアプリや外部システムとの連携では、このような仕組みがよく使われます。
Fortifyが担当するログイン処理の例
Fortifyはログインの処理そのものを担当しています。ログイン処理の基本的な流れは次のようになります。
use Illuminate\Support\Facades\Auth;
if (Auth::attempt([
'email' => $request->email,
'password' => $request->password
])) {
$request->session()->regenerate();
return redirect()->intended('dashboard');
}
この処理では、入力されたメールアドレスとパスワードを確認し、正しければログイン状態を作成しています。Laravelの認証処理は内部で安全な仕組みが組み込まれているため、セキュリティ面でも安心して利用できます。
初心者が覚えておくと理解しやすいポイント
Laravelの認証を理解するときに重要なのは、すべてを一度に覚えようとしないことです。特に初心者の段階では、次のようなポイントだけ覚えておくと理解が進みやすくなります。
Fortifyはログイン処理の中心となる仕組みであり、ユーザー認証の基本機能を担当していること。Sanctumはトークンを使った認証を行い、API通信などで安全なアクセスを実現すること。この二つの役割を区別して理解するだけで、Laravelの認証の全体像がかなり見えてきます。
また、Breezeを使った場合は内部でFortifyが利用されているため、初心者はまずBreezeを使ってログイン機能を作るところから始めると理解しやすくなります。その後、API開発やSPA開発を行う段階でSanctumを学ぶと、Laravelの認証システムをより深く理解できるようになります。
生徒
LaravelのFortifyとSanctumの違いがやっと分かってきました。最初はどちらかを選ばないといけないのかと思っていました。
先生
そこが初心者がよく勘違いするところですね。Fortifyはログイン処理を担当し、Sanctumはログイン後の認証を担当する仕組みです。
生徒
つまり、Fortifyはログインするときに使う仕組みで、SanctumはAPI通信のときなどにユーザーを識別するために使うんですね。
先生
その通りです。Laravelの認証は複数の仕組みが組み合わさって動いています。役割を分けて考えると理解しやすくなります。
生徒
Breezeを使うとFortifyが内部で使われているという話も理解できました。最初はBreezeでログイン機能を作ってみるのが良さそうですね。
先生
そうですね。まずはLaravelのログイン機能を実際に作ってみることが大切です。そのあとAPI開発を行う段階でSanctumを学べば、認証の仕組みがさらに理解できるようになります。
生徒
Laravelの認証の仕組みが整理できたので、FortifyとSanctumがどういう役割なのかイメージできるようになりました。これで認証の学習が進められそうです。
先生
その調子です。Laravelの認証はWeb開発でも重要な知識です。Fortifyによるログイン処理、Sanctumによるトークン認証、この二つを理解しておくとLaravelの開発がぐっとスムーズになります。