plan-4ging

2026/03/29

フラッシュメッセージとは

次のリクエストで1回だけ表示されるメッセージのこと
セッションに一時的に保存され、表示されたタイミングで削除される

① POST /users(ユーザー登録実行)
 ↓ バリデーション成功
② セッションに flash を保存
  flash[:notice] = "登録が完了しました"
 ↓
③ GET /dashboard にリダイレクト(302)
 ↓
④ /dashboard のページを表示する際に flash を読み取り
  「登録が完了しました」をページ上部に表示
 ↓
⑤ flash をセッションから削除(次のリクエストでは表示されない)

どのような時に使うべきか

使うべき場面

  • フォーム送信・データ操作の結果通知
    • 「登録が完了しました」「削除しました」
  • バリデーションエラー・失敗の通知
    • 「入力内容に誤りがあります」
  • 認証・認可に関する通知
    • 「ログインしました」「このページには権限が必要です」

使うべきでない場面

  • ページをリロードしても表示し続けたい情報
    • flash ではなくページ本体のデータとして管理
  • 非同期通信(Ajax/Fetch)のレスポンス
    • JSON で状態を返し、フロントエンドのステート(Toast 等)で処理する
  • 複数ページにわたって保持したい情報
    • 通常のセッション変数や DB を使用

各フレームワークでの実装

Ruby on Rails / Laravel

フレームワーク標準で組み込まれており、直感的なメソッドで利用可能

Express/NestJS(Node.js)

標準機能には含まれないため、connect-flash ライブラリを使用するのが一般的

Next.js(React.js)

複数のアプローチが存在

URL クエリパラメータ

redirect('/dashboard?msg=success') のように遷移し、クライアント側で取得する

Cookie
サーバー側で処理を行い、Cookie をセットしてからリダイレクトする

各フレームワークの比較まとめ

フレームワーク標準サポート実装方法セッション依存
Rails標準メソッドあり
Laravel標準メソッドあり
Express/NestJSconnect-flashあり
Next.jsCookie / クエリパラメータなし(Cookie等)

参考