UIXHERO

Toast(トースト通知)

ユーザーの操作を妨げずに、システムの処理結果を一過性で伝える軽量な通知UI。モーダル・アラートとの使い分け。

2026年2月26日
更新: 2026年9月14日
約13分
by Dengen Yosho(DGYS)

作業の中断を一切強要せず、「結果」だけを静かに一過性でするためのコンポーネント。

この記事を読むと、トースト・アラート・モーダルの正確な使い分けや、消滅のタイミング・A11y要件が自分でできるようになります。


1. UI例(Preview / Live)

実装で見る(GunjoUI)

この部品を、デザインシステム GUNJO の実装で確かめられます。

2. 定義(Definition)

画面の隅(下部や上部)に一定時間表示され、自動的に消える一時的なフィードバック用の小さなメッセージ。

Alert(インライン)との違い:インラインのアラートは画面の一部に鎮座し「消さない限り出続ける(またはが解決するまで消えない)」のに対し、トーストはユーザーの操作と無関係にタイムアウトで消滅する。


3. 使い分け(When to use / When NOT to use)

3.1 When to use

  • アクションの成功(「保存しました」「コピーしました」等)、確実なフィードバックを返したいとき
  • ユーザーの現在のタスクや画面滞在を一切邪魔したくないとき
  • 即座の対応を求めない、システムからの情報共有のとき

3.2 When NOT to use

  • 致命的なエラーや、ユーザーが「必ず読んで対応しなければならない」クリティカルな問題(AlertDialogや固定のAlertを使うべき)
  • 長文のメッセージ(数秒で読める短い文章にすべき)
  • 「元に戻す(Undo)」等のアクションが必要だが、時間が短すぎて押せない・あるいは頻繁に押す場合

3.3 代替UI(Alternatives)

  • 解決を強要する警告・エラー → Alert / Inline Banner
  • 破壊的アクションの確認・同意 → AlertDialog / Dialog

4. 設計判断の核(Decision Principles)

「見逃されても致命的でない」情報か?

判断の優先順位:① 見逃しリスクの許容度 → ② メッセージの短さ → ③ 自動消滅までの時間

  • トーストは「気づかない」「読む前に消える」リスクが常に伴うため、重大なエラー通知やユーザーアクション待ちのフローに組み込んではならない。

5. 状態設計(States)

5.1 必須状態(Required)

  • Success(成功):アイコン(✓等)を伴い、アクションが無事完了したことを伝える
  • Info(通知):中立な情報(例:バックグラウンドでの受信等)を伝える

5.2 条件付き状態(Conditional)

  • Warning/Error(エラー):保存の軽微な失敗等。ただし重大なエラー(決済失敗等)には原則使わず、使う場合はタイムアウトの自動消滅を無効化する工夫が必要
  • Hover (Pause):マウスオーバー中、消滅のカウントダウンタイマーが一時停止している状態
状態必須何を伝えるか
Success✅正常に完了。次の操作へ移ってよいという安心感
Info✅知っておくべきだが、特にすぐ行動しなくてよい事実
rning / Error—軽微な失敗やリトライ可能な事象。※致命的なものには使用不可
Hover (Pause)—読んでいる途中で勝手に消えないための配慮

6. バリエーション設計(Variants)

メッセージの種類・緊急度に合わせてバリアントを選ぶ。

バリアント目的
Simple Toastアイコンと1行のテキストのみ。最も基本的でノイズが少ない
Toast with Actionメッセージの横に「Undo(元に戻す)」や「再試行」ボタンを持つ
Descriptive Toast1行のタイトルと、短い説明文(2行程度)を持つやや詳細な通知

禁止パターン:トースト内部に長い入力フォームを配置したり、長大なエラーの内容を全て書き連ねる。


7. パターン集(Good / Bad / How to fix)

7.0 よく崩れる設計パターン(3つ)

  • 消えないトースト:「完了しました」というメッセージが出たまま消えず、裏のボタンを永遠に隠し続ける
  • 重要情報の見逃し:決済失敗など「絶対に見逃してはいけないエラー」を数秒で消えるトーストで出す
  • 連打スパム:毎回の保存等でトーストが無限に積み重なり、画面が埋め尽くされる

7.1 Bad(典型3つ)

  • 「プロフィールの更新に失敗しました。パスワードは8文字以上で記号を含み、メールアドレスは……」という長大な説明が3秒で消滅する
  • ユーザーが操作(閉じるボタン押下)しない限り絶対に消えない邪魔な成功トースト
  • 画面中央の真ん中に巨大なトーストが出て、元のテキストを覆い隠す

7.2 Good(対になる3つ)

  • フォームの上部に赤文字で「入力を確認してください」と固定表示し(インラインAlert)、成功時のみToastの「保存しました」を使用する
  • 成功時は3〜5秒(文字数による)で自然に消え、フェードアウトして邪魔にならない
  • 画面の左下または右下に配置され、重ねて出ても最大3つ程度で古いものから消えていく

7.3 How to fix(手順)

  1. 返すべきフィードバックが「成功(見逃してもOK)」か「失敗(修正が必要)」かを分ける
  2. 失敗の場合はインラインのAlertやエラー文に変更し、自動消滅させない設計に切り替える
  3. トーストの文言は10〜20文字程度(主語+動詞)に極限まで圧縮する
  4. 実装時に Auto-dismiss(自動消滅)処理を入れる

8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


9. アクセシビリティ要件(必須)

Keyboard

  • トースト内部にアクション(Undo等)がある場合、出た瞬間にTabキーで到達できるようにするか、ショートカットを提供すること

Focus

  • トーストが出現した際、基本的にフォーカスは奪わない(現在の作業を邪魔しないのがトーストの要件であるため)

Screen Reader

  • トーストが表示された際、フォーカスを移動させなくても等しくテキストが読み上げられるよう、コンテナに role="status" や role="alert"(エラー用)、または aria-live="polite"(エラーなら "assertive")を適切に設定する

Touch / Pointer

  • スマホ等の小さい画面では、トースト本体を左右にスワイプ(Swipe to dismiss)で直感的に消せるようにする

Contrast / Readability

  • 文字とのコントラスト比は4.5:1以上を確保する
  • 背景のコンテンツに溶け込まないよう、BorderやShadowで物理的な「浮き」を作る

10. 実装メモ(Implementation Notes)

  • React等のSPAでは、全画面共通の ToastProvider をRootに置き、状態(配列)を一元管理してどこからでも toast('メッセージ') と呼べる構造が一般的
  • framer-motion やCSSを使って、出没時のイージングを入れると高品質に見える
  • A11y要件の aria-live は、DOMに追加された瞬間でないと読み上げられないことがあるため、Toastのラッパー自体は常にレンダリングしておき、中身を動的に注入する手法が確実

11. 関連リンク


12. まとめ

Toastは「通知スパム」にならないさじ加減がすべてです。ユーザーの作業を止めないという最大の恩恵を生かすため、「短い文言」「適切な表示時間」、そして「見逃されても構わない情報に限定する」という基本方針を守りましょう。

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年9月14日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

Day Band(いちにちの帯)

1日を1本の帯にして、時間帯を面で、節目を印で、いまの時刻とつまみを重ねて見せるUIコンポーネント。器が1日に固定されることの意味、4つの層の重ね方、印のラベルと時刻の数字を分ける理由、触った瞬間に動かさない理由を解説する。

2026年9月14日
約24分

Live Badge(LIVEの札)

隣の数字がいまの値かどうかを示す小さな札。状態を表す語を枠で囲って独立させる理由、明滅と色を補助に留める理由、実時間から外れたときに「古い」ではなく「いつの値か」を出す設計判断とARIA実装を解説する。

2026年9月14日
約21分

Time Transport(時間の操作盤)

いま映している時刻を、名前をつけた速さの段で動かし、決まった幅で飛ばし、ひと押しで「いま」へ戻すための操作盤。速さを連続値にしない理由、向きをアイコンに持たせる理由、状態を大きい表示の色で示さない理由を解説する。

2026年9月14日
約25分

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る