1.はじめに
Laravelでログインやログアウトのルーティングを 「api.php に書いても動くけど、それでいいの?」 と悩んだことはありませんか?
この記事では、login / logout はなぜ web.php に書くのが原則なのか を整理して解説します。
Laravel × React でポートフォリオを開発する中でこの点に迷ったので、同じように悩む方の参考になればと思い、まとめました。
急いでいる人のために
先に結論
✅ これだけは覚えて
• Cookieセッション使うなら → web.php
• トークン認証なら → api.php
2.web.phpとapi.phpの違い
✔️ web.php
webミドルウェアグループ
・セッション管理
・CSRF保護
・クッキー暗号化
フォーム認証やセッション管理が必要な処理は、web.php に書くのが原則です。
✔️ api.php
apiミドルウェアグループ
・ステートレス
・セッションを使わない
・CSRF保護なし
トークン認証などの API ルートは基本的に api.php に書きます。
3.login / logoutがweb.php推奨の理由
1️⃣ セッションを使うから
・Laravelのデフォルト認証(Cookieセッションベース)はログイン状態をサーバー側で管理します。
・ログイン後にセッションIDがCookieとしてクライアントに送信されます。
・ログアウトはセッションを破棄する処理です。
👉 このセッション機能は web ミドルウェアで提供されているため、web.php に書く必要があります。
2️⃣ CSRF保護が必要だから
・フォームPOSTにはCSRFトークンが必要です。
・Laravelの webミドルウェアはCSRFを自動で検証してくれます。
👉 一方、api.php ではCSRF保護が無効なため、フォーム送信では危険です。
4.逆にapi.phpに書くパターン
・モバイルアプリや SPA でトークン認証(例:JWT、SanctumのAPIトークン)を使う場合
・サーバー側でセッションを持たず、ステートレスで運用したいとき
✅ このような場合は api.php へのルーティングが適しています。
5.まとめ
・フォームログイン・セッション管理あり → web.php
・トークンベース・ステートレスAPI → api.php
✅ Cookieセッション認証 → web.php
✅ トークン認証 → api.php
6.個人的運用
私も現在、Laravel Sanctumを使ってポートフォリオ開発を行っていますが、ログインやログアウトのルートは web.php に記述しています。
Sanctumはトークン認証にも対応していますが、SPA向けのCookieセッション認証モードでは、セッション管理やCSRF保護が必要です。
そのため、私のプロジェクトでは web.php を使用する方針としています。
7.終わりに
以上、Laravelのルーティング設計で迷いがちな「web.php と api.php の使い分け」。
login / logoutは、Cookieセッションを活用してCSRF保護するためにweb.phpに書くのが原則です。
どなたかの参考になれば幸いです!