LaravelのBladeで認証状態によって表示を切り替える方法(@auth, @guest)を初心者向けに解説!
生徒
「LaravelのBladeテンプレートで、ログインしている人とログインしていない人で表示を変えたいんですが、どうやればいいですか?」
先生
「いい質問ですね。LaravelのBladeには、ログイン状態を簡単に判定して表示を切り替えるための便利なディレクティブが用意されています。それが @auth と @guest です。」
生徒
「具体的にはどうやって使うんですか?」
先生
「それでは、基本から順番に説明しますね!」
1. LaravelのBladeテンプレートとは?
Blade(ブレード)は、Laravelで使われるテンプレートエンジンです。テンプレートエンジンとは、HTMLの中にPHPのコードをわかりやすく書ける仕組みのこと。普通のPHPよりもシンプルに書けるので、初心者にも扱いやすい特徴があります。
Bladeには、いくつか特別な命令(ディレクティブ)があり、今回は認証状態を判定するための @auth と @guest について解説します。
2. 認証状態とは?
認証状態とは、ユーザーがログインしているかどうかの状態のことです。例えば、ウェブサイトにメールアドレスとパスワードでログインすると「認証済み」になります。逆にログインしていない人は「ゲスト」と呼ばれます。
認証状態によって表示を切り替えれば、ログインしている人にはマイページを見せて、ログインしていない人にはログインフォームを見せる、といったことができます。
3. @auth ディレクティブの使い方
@auth は「ユーザーがログインしているとき」に中のHTMLやコードを表示します。ログイン済みのユーザー向けの表示をしたい時に使います。
@auth
<p>こんにちは、ログインユーザーさん!</p>
@endauth
このように書くと、ログインしている人だけ「こんにちは、ログインユーザーさん!」というメッセージが表示されます。
4. @guest ディレクティブの使い方
@guest は「ユーザーがログインしていないとき」に中のHTMLやコードを表示します。つまり、まだログインしていない訪問者(ゲスト)向けの表示をするために使います。
@guest
<p>ログインしてください!</p>
@endguest
この場合、ログインしていない人だけに「ログインしてください!」と表示されます。
5. @auth と @guest を組み合わせた表示切り替え
通常は、ログインしている人にはログアウトボタンやマイページへのリンクを表示し、ログインしていない人にはログインボタンを表示したいですよね。Bladeでは簡単に書けます。
@auth
<p>ようこそ、{{ Auth::user()->name }} さん!</p>
<a href="/logout">ログアウト</a>
@endauth
@guest
<a href="/login">ログイン</a>
<a href="/register">新規登録</a>
@endguest
ここで Auth::user()->name はログインしているユーザーの名前を取得するコードです。ログインユーザーだけに名前を表示できます。
6. なぜBladeで認証状態を判定するのが便利なの?
PHPだけで書く場合は、認証状態を判定するコードが複雑になりがちですが、Bladeの@authや@guestを使うととてもシンプルに書けます。これにより、ビューの見た目がスッキリして管理もしやすくなります。
また、コードを読む人も「この部分はログインしている人だけに表示されるんだな」とすぐ理解できるので、メンテナンス性もアップします。
7. もし認証機能をまだ設定していない場合は?
Laravelには簡単に認証機能を導入できる仕組みがあります。初心者には Laravel Breeze や Laravel Jetstream といったパッケージがおすすめです。これらを使うと、ユーザー登録やログイン機能が簡単にセットアップできます。
認証機能がないと @auth や @guest は正しく動かないので、まずは認証の導入を考えましょう。
8. 注意点と補足
- @auth と @guest はBladeでしか使えません。PHPファイルなどでは別の方法で認証を判定します。
- Bladeの中で
{{ Auth::user() }}を使う際は、ユーザーがログインしていることが前提なので、必ず@auth内で使うようにしましょう。ログインしていない時に使うとエラーになります。 - ログイン状態を判定する他の方法として、
auth()->check()やauth()->guest()というPHP関数もありますが、Bladeではディレクティブを使う方が簡単です。
まとめ
Bladeで認証状態による表示切り替えを理解しよう
この記事では、LaravelのBladeテンプレートを使って、ユーザーの認証状態に応じて表示内容を切り替える方法について詳しく解説してきました。
Webアプリケーションでは、ログインしているユーザーとログインしていないユーザーで、見せる情報や操作できる内容を変える場面が非常に多くあります。
例えば、ログイン済みのユーザーにはマイページやログアウトボタンを表示し、未ログインのユーザーにはログインフォームや新規登録リンクを表示するといったケースです。
こうした処理を分かりやすく、安全に実装できるのが、LaravelのBladeが提供する @auth と @guest ディレクティブです。
Bladeテンプレートは、HTMLの中にPHPの処理をシンプルに書ける仕組みで、可読性が高く、初心者でも扱いやすいのが特徴です。
その中でも @auth は「ログインしているときだけ表示する」、@guest は「ログインしていないときだけ表示する」という役割を持っています。
if文を使って認証状態を判定する方法もありますが、Bladeディレクティブを使うことで、コードの意図が一目で分かるようになり、テンプレート全体がとても読みやすくなります。
これは、個人開発だけでなく、チーム開発においても大きなメリットになります。
実務でよく使われる表示切り替えの考え方
実際の開発現場では、ナビゲーションメニューやヘッダー部分で @auth と @guest が頻繁に使われます。
ログイン中のユーザーにはユーザー名やログアウトリンクを表示し、ゲストにはログインや新規登録への導線を表示することで、ユーザー体験が大きく向上します。
また、Blade内で Auth::user() を使ってユーザー情報を表示する場合は、必ず @auth の中で使うことが重要です。
認証されていない状態でユーザー情報にアクセスするとエラーになるため、表示制御とセットで考える必要があります。
認証機能そのものがまだ導入されていない場合でも、Laravelには Breeze や Jetstream といった便利なスターターキットが用意されています。
これらを使えば、ログインや新規登録の機能を短時間で用意でき、すぐに @auth や @guest を使った表示切り替えを試すことができます。
Bladeによる認証状態の判定は、Laravelを使ったWeb開発では基本中の基本となる知識なので、早い段階でしっかり理解しておくことが大切です。
認証状態による表示切り替えのサンプル
最後に、Bladeでよく使われる認証状態の表示切り替え例を改めて整理してみましょう。 ログインしているユーザーとゲストで、表示されるリンクが変わる基本的な構成です。
@auth
<p>ようこそ、{{ Auth::user()->name }} さん</p>
<a href="/logout">ログアウト</a>
@endauth
@guest
<a href="/login">ログイン</a>
<a href="/register">新規登録</a>
@endguest
このように書くだけで、Laravelが自動的に認証状態を判定し、適切な表示を行ってくれます。 複雑な条件分岐を書かなくてもよいため、テンプレートがすっきりし、後から見返したときも理解しやすくなります。 Bladeのディレクティブを正しく使うことで、見た目とロジックの役割分担が明確になり、保守性の高いコードを書くことができます。
生徒
「@auth と @guest を使うだけで、ログイン状態ごとの表示切り替えができるのは便利ですね。 if文を書かなくていいので、Bladeがすごく読みやすくなりました。」
先生
「そうですね。Bladeのディレクティブは、表示の意図がはっきり分かるのが大きな利点です。 特に認証まわりは、@auth と @guest を使うのが基本になります。」
生徒
「ログインしているときだけユーザー名を表示したり、ゲストにはログインリンクを出したりする理由もよく分かりました。」
先生
「その理解はとても大切です。 ユーザー体験を意識した表示切り替えは、Webアプリの使いやすさに直結しますからね。」
生徒
「これからLaravelで画面を作るときは、まず @auth と @guest を使えないか考えてみます。」
先生
「それは良い考えです。 Bladeでの認証状態の扱いを身につければ、Laravel開発が一段と楽になりますよ。」