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
フレームワーク標準で組み込まれており、直感的なメソッドで利用可能
- Rails:https://railsguides.jp/action_controller_overview.html#flash
- Laravel:https://laravel.com/docs/session#flash-data
Express/NestJS(Node.js)
標準機能には含まれないため、connect-flash ライブラリを使用するのが一般的
- connect-flash:https://github.com/jaredhanson/connect-flash
Next.js(React.js)
複数のアプローチが存在
URL クエリパラメータ
redirect('/dashboard?msg=success') のように遷移し、クライアント側で取得する
Cookie
サーバー側で処理を行い、Cookie をセットしてからリダイレクトする
各フレームワークの比較まとめ
| フレームワーク | 標準サポート | 実装方法 | セッション依存 |
|---|---|---|---|
| Rails | ◎ | 標準メソッド | あり |
| Laravel | ◎ | 標準メソッド | あり |
| Express/NestJS | △ | connect-flash | あり |
| Next.js | △ | Cookie / クエリパラメータ | なし(Cookie等) |