カテゴリ: Symfony 更新日: 2026/03/09

SymfonyのFlashメッセージ完全ガイド!初心者でもわかる通知の仕組みと使い方

SymfonyのFlashメッセージの使い方(ユーザーへの通知)
SymfonyのFlashメッセージの使い方(ユーザーへの通知)

先生と生徒の会話形式で理解しよう

生徒

「Symfonyでボタンを押したときに『保存しました』みたいな通知って出せるんですか?」

先生

「はい、Symfonyでは『Flashメッセージ』という仕組みを使って、ユーザーに一時的な通知を表示することができますよ。」

生徒

「Flashメッセージって何ですか?難しくないですか?」

先生

「大丈夫です。とてもシンプルな仕組みなので、初心者の方でもすぐに使えるようになりますよ。では一緒に見ていきましょう!」

1. Flashメッセージとは?

1. Flashメッセージとは?
1. Flashメッセージとは?

Flashメッセージ(フラッシュメッセージ)とは、Symfonyで一時的にユーザーへ通知を伝えるための仕組みです。最大の特徴は「一度だけ表示されて、自動的に消える」点にあります。たとえば、フォーム送信後に「登録が完了しました」「更新に失敗しました」といった結果を、次の画面で分かりやすく伝えたいときによく使われます。

通常、画面遷移(ページ移動)をすると、直前の処理結果は消えてしまいます。しかしFlashメッセージを使うことで、ページを移動したあとでも処理結果をユーザーに伝えられるようになります。「今の操作が成功したのか失敗したのか」を知らせる役割を持つ、と考えるとイメージしやすいでしょう。

仕組みとしては、メッセージを一時的にセッションへ保存し、次の画面で表示したあとに自動で削除されます。そのため、何度も同じ通知が表示されることはありません。

たとえば、コントローラで次のようにFlashメッセージを設定すると、次のページで一度だけ表示されます。


$this->addFlash('success', '登録が完了しました');

この1行だけで「通知をセットする」ことができるのがFlashメッセージの魅力です。難しい処理はなく、初心者でもユーザーに分かりやすいフィードバックを簡単に追加できる便利な機能だと覚えておきましょう。

2. Flashメッセージが使われる場面

2. Flashメッセージが使われる場面
2. Flashメッセージが使われる場面

Flashメッセージは、「ユーザーの操作結果をその場で分かりやすく伝えたいとき」に活躍します。特に、画面遷移を伴う処理では結果が見えにくくなるため、Flashメッセージがあることでユーザーは安心して操作を続けられます。

実際によく使われる場面としては、次のようなケースがあります。

  • ユーザー登録や会員情報の更新が正常に完了したことを伝えたいとき
  • フォーム入力に不備があり、処理が失敗したことを知らせたいとき
  • ログイン・ログアウト後に、状態が切り替わったことを表示したいとき
  • データ削除や変更など、重要な操作が完了したことを確認してもらいたいとき

たとえば「保存ボタンを押したけれど、ちゃんと保存できたのか不安…」という状況でも、画面上に「保存しました」と表示されれば、ユーザーは迷わず次の操作に進めます。このように、Flashメッセージは操作結果を補足する役割を持っています。

初心者のうちは、「処理が終わったあとに一言メッセージを出したい場面」でFlashメッセージを使う、と覚えておくと理解しやすいでしょう。

3. Flashメッセージをコントローラで設定する方法

3. Flashメッセージをコントローラで設定する方法
3. Flashメッセージをコントローラで設定する方法

Flashメッセージは、Symfonyのコントローラで「通知文を一時的に保存する」ことで使えるようになります。ポイントは、処理が終わったタイミングでメッセージをセットしておき、次の画面で表示させる流れにすることです。難しく考えず、「保存できたよ」「失敗したよ」と一言メモを残すイメージでOKです。

基本は、コントローラ内でaddFlash()を呼び出します。たとえば「保存に成功しました」と表示したい場合は、次のように書きます。


use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class SampleController extends AbstractController
{
    #[Route('/flash/set', name: 'flash_set')]
    public function setFlashMessage(): Response
    {
        // 1回だけ表示したいメッセージをセット
        $this->addFlash('success', 'データの保存に成功しました!');

        // 次の画面へ移動(移動先でメッセージが表示される)
        return $this->redirectToRoute('flash_show');
    }
}

addFlash()最初の引数はメッセージの種類(ラベル)です。ここで指定したsuccesserrorが、表示側でデザインを変える目印になります。2番目の引数が、実際に画面へ出したい文章です。

そして大事なのが、addFlash()のあとにredirectToRoute()などで画面遷移を入れることです。Flashメッセージは「次のリクエストで表示して消える」仕組みなので、同じ画面をそのまま表示するより、リダイレクトの形にすると分かりやすく確実です。

4. Twigテンプレートでメッセージを表示する方法

4. Twigテンプレートでメッセージを表示する方法
4. Twigテンプレートでメッセージを表示する方法

Flashメッセージをセットしただけでは、画面には何も出ません。最後に「表示する側」として、Twigテンプレートに出力の処理を書いておく必要があります。やることはシンプルで、Symfonyが用意しているapp.flashesをループして、メッセージを順番に画面へ表示するだけです。

まずは基本形です。コントローラでaddFlash('success', '...')のように登録したメッセージを、次のように取り出して表示します。


{% for label, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}

ここでのポイントは2つあります。1つ目は、labelsuccess / error / warningのような「種類」が入ること。2つ目は、同じ種類のメッセージが複数入る場合があるので、messagesをもう一段ループしていることです。

また、表示の見た目を整えるなら、Bootstrapのアラートと相性が良いです。たとえばsuccessなら緑、dangerなら赤というように、メッセージの種類ごとに直感的に区別できます。上の例はalert alert-{{ label }}としているので、ラベル名をそのままクラスに流し込めて手軽です。

初めてのうちは、まずこのTwigを「表示したいページ」に貼り付けて、通知が出ることを確認しましょう。通知が一度表示されたら消えるのがFlashメッセージの仕様なので、リロードして消えるのも正常な動きです。

5. 実際の表示イメージ

5. 実際の表示イメージ
5. 実際の表示イメージ

たとえば、フォームでデータを保存したあとに画面が切り替わると、ページ上部などにFlashメッセージが次のように表示されます。ユーザーは「ちゃんと処理できたか」を一目で確認できるので、安心して次の操作に進めます。

まずは、画面に出るメッセージのイメージです(成功したときの例)。


✅ データの保存に成功しました!

次に、初心者向けの超シンプルなサンプルです。コントローラで「成功しました」とセットして、別のページへ移動するだけで、移動先で1回だけ通知が出ます。


$this->addFlash('success', 'データの保存に成功しました!');
return $this->redirectToRoute('flash_show');

ポイントは「一度だけ表示される」ことです。表示されたあとは自動で消えるので、同じ通知が何度も出てユーザーを混乱させません。保存・更新・削除など、結果をはっきり伝えたい場面でFlashメッセージを入れておくと、アプリ全体の使いやすさがぐっと上がります。

6. Flashメッセージの種類とデザインの工夫

6. Flashメッセージの種類とデザインの工夫
6. Flashメッセージの種類とデザインの工夫

Flashメッセージの種類(label)には、よく以下のようなものが使われます:

  • success(成功)→ 緑色で表示
  • error または danger(エラー)→ 赤色で表示
  • warning(注意)→ 黄色で表示
  • info(情報)→ 青色で表示

Bootstrapと一緒に使うことで、視覚的にもわかりやすくなります。

7. Flashメッセージの注意点

7. Flashメッセージの注意点
7. Flashメッセージの注意点

Flashメッセージは一度だけ表示されるのが特徴です。画面をリロードしたり、別のページに移動すると消えてしまいます。

また、メッセージが設定されるのは「リダイレクト後」の画面である必要があります。そのため、addFlash()を設定したあとにはredirectToRoute()などで画面遷移を行うのが一般的です。

8. Flashメッセージが表示されないときのチェックポイント

8. Flashメッセージが表示されないときのチェックポイント
8. Flashメッセージが表示されないときのチェックポイント

もしFlashメッセージが表示されないときは、次の点をチェックしてみましょう:

  • リダイレクト先のテンプレートにapp.flashesのループがあるか?
  • セッションが有効になっているか?
  • addFlash()を記述したあとにきちんとリダイレクトしているか?

エラーが出ている場合は、Symfonyのログファイル(var/log/dev.log)も確認してみましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.7
Java&Spring記事人気No7
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点