16 ポイント 投稿者 GN⁺ 2025-12-12 | 1件のコメント | WhatsAppで共有
  • Toast通知UI は、アクセシビリティ上の問題により GitHub ではもはや推奨されていない
  • 自動的に消える 一時的な通知の仕組み は、視覚的・機能的アクセシビリティ基準(WCAG)に違反するおそれがある
  • GitHub は、バナー(banner)ダイアログ(dialog) などの 持続的でアクセシブルなフィードバック方法 を代替案として提示
  • Toast には、大画面、マルチタスク、バナー無視現象 など、ユーザビリティ上の問題も多数ある
  • アクセシビリティと一貫したユーザー体験のため、Primerデザインシステム全体でToastの使用を中止

Toastの概要

  • Toast は、画面下部の隅に一時的に表示される 小さな長方形の通知ウィンドウ で、ユーザーまたはシステムの操作によってトリガーされる
  • 一定時間が経過すると自動的に消える仕組みで、アクセシビリティとユーザビリティの問題 を内包している
  • GitHub はこうした理由から、より安定的でアクセシブルなコミュニケーション方法 を推奨している

Toastの代替案

  • 用途に応じて適切なUIを選ぶ必要がある
    • 単純な成功通知は、追加のフィードバックがなくても 結果画面そのもので確認可能
    • 複雑な作業では、バナー段階的なコンテンツ表示 で成功状態を伝える
    • 失敗した操作では、バナー または ダイアログ を通じてエラー情報を提供する
  • フォーム送信 の場合、単純なフォームは追加確認不要で、複雑なフォームでは 中間確認ページバナー を使う
  • 入力検証 には、Primer の既存の フォーム検証コンポーネント を活用する
  • 長時間かかる作業 は、バナーまたはメール・プッシュ通知など 別チャネル を通じて完了状態を伝える
  • セッションの非同期化 が発生した場合は、ダイアログやバナーで 再読み込みの必要性 を案内する

アクセシビリティに関する考慮事項 (Accessibility Considerations)

  • Toast UI は、複数の WCAG達成基準 に違反する可能性がある
    • 2.2.1 Timing Adjustable (A) : ユーザーが自分で閉じるまで維持されるべき
    • 1.3.2 Meaningful Sequence (A) : DOM順序と視覚的順序の不一致により、支援技術利用時に混乱が生じる
    • 2.1.1 Keyboard (A) : キーボードでトースト内のインタラクションを操作できなければならない
    • 4.1.3 Status Messages (AA) : 支援技術に対して非侵襲的に存在を知らせる必要がある
  • そのほか違反する可能性のある基準
    • 1.4.4 Resize text (AA) : テキストサイズを変更した際に、画面の遮蔽やオーバーフローが発生するおそれ
    • 1.4.10 Reflow (AA) : 水平スクロール時にもキーボードアクセシビリティの確保が必要
    • 2.4.3 Focus Order (A) : フォーカス順序が混乱する可能性
    • 3.2.4 Consistent Identification (AA) : コードの一貫性を維持する必要がある

ユーザビリティに関する考慮事項 (Usability Considerations)

  • 大画面 では、Toast が視界の外に位置して認識されない場合がある
  • 自動消去 の場合、ユーザーが別の作業中だとメッセージを見逃すおそれがある
  • UIの遮蔽: Toast が下部ボタンなど重要な要素を覆ってしまうことがある
  • 画面拡大を使うユーザー は、拡大領域の外にある Toast を見られない可能性がある
  • ワーキングメモリの問題: 自動的に消えるため情報を再確認できない
  • バナー無視現象: 過剰な使用によってユーザーが無視する傾向がある
  • 位置の不一致: トリガーされたUIとToastの物理的距離により、関連性が分かりにくくなる
  • 誤った閉じる動作: Escキーで他のUIまで一緒に閉じてしまう問題が起こりうる

追加の参考資料

1件のコメント

 
GN⁺ 2025-12-12
Hacker Newsのコメント
  • アクセシビリティについて講義している最中、クリック後に3秒の遅延が発生して、まったく反応がないように感じる状況を経験した
    • バナーをクリックすると何の表示もないまま待たされ、あとから無関係なページに移動するような形で、かなりもどかしかった
    • 読み込み中であることを知らせるフィードバックの欠如が問題だと思う
    • ある人は、それは単なる `` リンクで、ページが不必要に重いために生じる遅延にすぎないと言っていた
    • 別の人は、遅い4Gでも即座に反応するとして、ブラウザーやネットワークの問題である可能性を挙げた
  • GitHub Primer の文書を興味深く読んだ
    • すべてに同意しなくても学ぶ点はあり、勘でやるよりはるかに良いと感じた
    • ちなみに Apple と Android もそれぞれデザインガイドラインを提供している
  • ついにこうしたトレンドが広がってほしい
    • トースト通知のせいで見逃したメッセージがあまりにも多かった
    • 別のユーザーは、「トーストはアクセシビリティ上の問題があるため使用を推奨しない」という文言に全面的に同意し、通知センターがあればまだましだが、それでも良くないやり方だと強調した
  • 私はトーストを非妨害な確認用としては好むが、重要な情報を伝える用途には不適切だと思う
    • 別の人は、トーストの使用文脈を具体的に分けて説明していた
      • ボタンをクリックした直後の反応 → ボタン自体でフィードバックを出すほうがよく
      • ショートカットキーへの反応 → 問題ない
      • 時間のかかる作業の完了通知 → 問題ないが、永続的な通知一覧が必要
      • ページ表示時の警告表示 → 重要なら、ページ内で恒久的な通知として見せるべき
    • React ではグローバルな toast() 呼び出しが簡単なため乱用されがちだが、useAlerts() のような構造に変えるほうがはるかに良いと提案していた
  • トーストは私にとって止血帯のような存在
    • 緊急の問題を一時的に抑えるには有用だが、長期的に維持すべきではない
    • 新しいプロジェクトでフィードバックが不足しているときに一時的に付けて、UI を改善しながら一つずつ取り除いていく形で使うべき
    • GitHub のような大きな組織にはこうした応急処置は不要だが、小さなチームでは事情が異なるかもしれない
  • GitHub の文書にあった「大量の Issue 作成時には追加のフィードバックが必要だ」という部分が気に入った
    • GitHub Actions にもこうしたフィードバックがあるとよい。実行後に結果が表示されるまであまりにも時間がかかる
  • UI 全体の行動ログとしてトーストを活用するアイデアが気に入った
    • クリックするたびに消えるフィードバックの代わりに、Sonner のようにうまく実装された例がある
  • ブラウザー側でトーストのネイティブサポートを検討すべき時期かもしれない
    • タイミング調整、通知センター、スクリーンリーダー統合など、アクセシビリティ改善が可能だと思う
    • 視覚的には問題なくても、すぐ消えすぎて見逃すことが多い
    • 視覚障害者が直面する問題を直接理解するのは難しいが、彼らのアクセシビリティを高める方法は知りたい
  • トーストの利点は実装が簡単でデザイン負担が少ないこと
    • 欠点は見逃しやすく、ほかの情報に重なってしまう危険があること
    • 余裕があるなら、トーストはすべてなくすほうがよいと思う
    • 別の人は、「簡単に作れるからこそ、問題解決を装った場当たり的な対処として乱用される」と指摘した
    • また別の人は、トーストを単なる安心感のためのフィードバックとして使っていたと言っていた
    • 一方で、「トーストは重要度の低いイベントに即時フィードバックを与える有用な手段であり、モーダルや固定領域より効率的だ」と主張する人もいた
    • ツールの乱用を理由に完全に排除する白黒思考を批判していた
  • 「GitHub のトースト削除はアクセシビリティにとって悪い知らせだ」という記事を見た
    • ある人はその主張を奇妙だと感じていた
      • GitHub がトーストをやめた代わりに W3C を通じてブラウザー標準を作るべきだった、というのは飛躍だと思う
      • すでに作成されたアイテムがリストに表示されるだけでも十分なフィードバックだと考えている
    • 別の人は、「トーストがアクセシビリティと UX に悪いと言いながら、GitHub がそれをブラウザーに標準化しなかったと批判するのは矛盾している」と述べていた