Laravelでセッションflashメッセージを表示する方法|初心者向け解説
生徒
「Laravelでフォーム送信後に成功メッセージを表示したいんですが、どうすればいいですか?」
先生
「それにはセッションに情報を一時的に保存するflashメッセージという仕組みを使います。簡単ですよ!」
生徒
「何をどう書けばいいんですか?」
先生
「では手順を一つずつ見ていきましょう!」
1. flashメッセージとは?
flashメッセージは、セッションに「一度だけ」保存される情報です。たとえば、フォーム送信後に「送信完了しました!」というメッセージを一度だけ表示し、その後は消えます。
「セッション」は、複数のページをまたいで一時的に情報を保存しておく仕組みです。
2. コントローラでflashメッセージを設定する方法
コントローラでデータ処理後、次のように書くとflashメッセージが設定できます:
return redirect()
->back()
->with('success', '登録が完了しました!');
このwith('success', ...)がflashメッセージをセッションに保存する部分です。
3. ビューでflashメッセージを表示する方法
次に、Bladeテンプレートにメッセージ表示を追加します:
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@ifでセッションにsuccessがあるかチェックし、あればdivでメッセージを表示します。
4. エラーメッセージを表示する例
同様にエラー用のflashメッセージも使えます:
return redirect()
->back()
->with('error', 'エラーが発生しました');
Bladeでは次のように書きます:
@if (session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
5. Bootstrapで見た目を整える方法
Bootstrapのalertクラスで見た目を整えられます:
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
これで緑色のメッセージが表示され、✕ボタンで閉じられるようになります。
6. flashメッセージの表示を共通化しよう
表示用のBladeを部分テンプレートにして@includeで呼ぶと便利です:
<!-- resources/views/partials/flash.blade.php -->
@if (session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
@if (session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
メインのビューでは次のように@includeします:
@include('partials.flash')
これでどのページにも簡単に表示できます。
7. 注意点とベストプラクティス
- flashメッセージは「一回限り」。リロードすると消えます。
- 多言語対応する場合は、
__('登録が完了しました!')のように翻訳対応できます。 - CSSフレームワークに応じて
alertクラスを変更しましょう。
まとめ
ここまで、Laravelでセッションを利用した flash メッセージの基本的な考え方から、 コントローラでの設定方法、Bladeテンプレートでの表示方法、Bootstrapを使った見た目の調整、 さらに部分テンプレートによる共通化までを順番に学んできました。 flashメッセージは、LaravelでWebアプリケーションを作るうえで非常に登場回数の多い仕組みです。 フォーム送信後の「登録が完了しました」「更新に成功しました」「エラーが発生しました」といった 一時的な通知をユーザーに伝えるために欠かせません。
特に重要なのは、flashメッセージが「一度だけ表示される」という点です。
通常のセッションと違い、次のリクエストで自動的に消えるため、
フォーム送信後やリダイレクト後の画面にぴったりの仕組みになっています。
Laravelでは redirect()->with() を使うだけで簡単に flash メッセージを設定できるため、
初心者の方でもすぐに実装できるのが大きな魅力です。
こうしたシンプルさは、Laravelが多くの開発者に選ばれている理由の一つでもあります。
Bladeテンプレート側では、session('キー') を使って flash メッセージの存在を確認し、
条件分岐で表示を切り替えるだけで対応できます。
これにより、サーバー側の処理と画面表示の役割がはっきり分かれ、
コードの見通しが良くなります。
また、Bootstrapの alert クラスを使えば、
成功・エラー・警告といったメッセージを色分けして表示でき、
ユーザーにとって分かりやすい画面を作ることができます。
実務レベルのLaravel開発では、flashメッセージの表示処理を毎回各ビューに書くのではなく、
部分テンプレートとして共通化するのが一般的です。
@include を使って一か所にまとめておけば、
デザイン変更やメッセージの追加・修正も簡単に行えます。
この考え方は、flashメッセージに限らず、
LaravelやBlade全体でとても重要な設計のポイントになります。
「同じ処理を何度も書かない」という意識を持つことで、
保守しやすく、読みやすいコードを書くことができるようになります。
また、flashメッセージはユーザー体験を向上させるための重要な要素です。 何が成功したのか、なぜ失敗したのかが画面上で明確に伝わることで、 ユーザーは安心して操作を続けることができます。 特にフォーム送信後に何も表示されない場合、 ユーザーは「本当に送信できたのかな?」と不安になってしまいます。 その不安を解消するためにも、flashメッセージは積極的に活用したい仕組みです。
flashメッセージ実装の基本例を振り返る
最後に、Laravelでよく使われる flash メッセージの基本的な実装例を改めて確認してみましょう。 コントローラでメッセージを設定し、Bladeで表示するという流れを理解しておくことが大切です。
return redirect()
->back()
->with('success', '登録が完了しました!');
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
このように、Laravelの flash メッセージは非常にシンプルな記述で実装できます。 まずはこの基本形をしっかり身につけ、 そのうえでBootstrapによる装飾や部分テンプレートによる共通化に挑戦してみましょう。 小さな積み重ねが、実務で通用するLaravelスキルにつながっていきます。
生徒
「flashメッセージって、ただの通知だと思っていましたが、 ユーザーに安心感を与える大事な役割があるんですね。」
先生
「その通りです。ユーザーは画面の反応を見て次の行動を決めます。 flashメッセージは、その判断材料を分かりやすく伝えるための仕組みなんです。」
生徒
「redirectとwithを使うだけで実装できるのは、思ったより簡単でした。」
先生
「Laravelは、よく使う処理を簡単に書けるように設計されています。 flashメッセージもその代表例ですね。」
生徒
「部分テンプレートにして共通化する考え方も勉強になりました。 これからは同じ表示を何度も書かないようにします。」
先生
「それはとても良い意識です。 flashメッセージを使いこなせるようになると、 Laravelでのフォーム処理が一段と分かりやすくなりますよ。」