UIXHERO

フォーカス管理 (Focus Management)

モーダルを開いたら、フォーカスはどこへ行く?動的UIにおけるフォーカスの制御は、キーボードユーザーとスクリーンリーダーユーザーの「現在地」を守る設計原則。

2026年2月17日
更新: 2026年8月27日
12
by Dengen Yosho(DGYS)
フォーカス管理 (Focus Management)

モーダルダイアログが開きました。Tabキーを押すと——フォーカスはモーダルの外、のコンテンツに移動してしまいます。スクリーンリーダーユーザーは「今どこにいるのか」が完全にわからなくなります。

よくある失敗パターンは「動的な変化にフォーカスを追従させない」ことです。モーダルを開いてもフォーカスが移動しない。モーダルを閉じてもフォーカスが元の場所に戻らない。SPAでページ遷移してもフォーカスがページ先頭に移動しない——これらはすべて、フォーカス管理の失敗です。

フォーカス管理が不適切なUIは、キーボードユーザーとスクリーンリーダーユーザーを「迷子」にします。視覚的にはUIが変化しているのに、フォーカスが追従していないため、ユーザーは「今何が起きているのか」「次にどこを操作すればいいのか」がわかりません。

1. 原則の定義

フォーカス管理(Focus Management)とは、モーダル・ドロップダウン・ページ遷移・動的コンテンツ更新などのUI変化に合わせて、キーボードフォーカスを適切な要素に移動・制御し、ユーザーが常に「現在地」を把握できるよう設計する原則。

本質は「UIの変化とフォーカスを同期させること」です。視覚的なUIの変化はマウスユーザーには目で見えます。しかしキーボードユーザー・スクリーンリーダーユーザーにとっては、フォーカスが移動しなければ「変化が起きた」ことすら認識できません。フォーカスはキーボードユーザーの「カーソル」であり、常にUIの状態と同期している必要があります。

2. いつ使うか(適用場面)

特に重要になるケース

  • モーダル・ダイアログの開閉: 開いたとき→モーダル内の最初のフォーカス可能な要素にフォーカスを移動。閉じたとき→モーダルを開いたトリガー要素にフォーカスを戻す。
  • フォーカストラップ: モーダルが開いている間、Tabキーがモーダル内でのみ循環し、背景のコンテンツにフォーカスが移動しないようにする。
  • SPAのページ遷移: ページ遷移後、フォーカスをページ先頭の見出し(<h1>)またはメインコンテンツの先頭に移動し、スクリーンリーダーがページ変化を認識できるようにする。
  • 動的コンテンツ更新: フォームのバリデーションエラー・成功メッセージなど、動的に追加されたコンテンツをaria-liveでスクリーンリーダーに通知する。

トレードオフが起きる場面

  • 自動フォーカスの煩わしさ: ページ読み込み時に自動でフォーカスを移動させると、スクリーンリーダーユーザーには便利だが、マウスユーザーには予期しないスクロールが発生することがある。
  • 実装の複雑さ: ・フォーカス復元は、JavaScriptで実装する必要があり、ネストしたモーダルなど複雑なUIでは実装が難しい。

3. なぜ重要か(設計判断の核)

フォーカスはキーボードユーザーの「カーソル」だ。UIが変化するたびに、カーソルも追従しなければならない。

設計判断の基準

  • 「このUI変化(モーダル開閉・ページ遷移)の後、フォーカスはどこにあるべきか?」→ 答えられなければ、フォーカス管理が設計されていない。
  • 「モーダルを閉じた後、ユーザーは元の場所に戻れるか?」→ 戻れなければ、フォーカス復元を実装する。

優先順位の考え方

  • 1. モーダルのフォーカストラップ(最優先): モーダルが開いている間、フォーカスがモーダル外に逃げないようにする。
  • 2. モーダル閉じた後のフォーカス復元: 閉じるボタンを押した後、モーダルを開いたトリガー要素にフォーカスを戻す。
  • 3. 動的コンテンツのaria-live通知: エラーメッセージ・成功通知など、動的に追加されたコンテンツをスクリーンリーダーに通知する。

例外条件

  • ページ読み込み時の自動フォーカスは、によって適切な場所が異なる。検索ページなら検索フィールド、記事ページなら見出しなど、ユーザーの目的に合わせて判断する。

4. 具体の設計ルール(チェックリスト)

最低ライン(Must - これ守らないと危険)

これがないと、キーボードユーザーはモーダルや動的UIで迷子になります。

理想ライン(Better - できると強い/プロの品質)

「使える」を超えて「スクリーンリーダーでも快適」な状態です。

5. UI例

同じ「モーダルダイアログ」でも、フォーカス管理の設計でキーボードユーザーの体験は大きく変わります。

改善プロセス

  1. モーダルを開いたときにフォーカスを移動する: JavaScriptでmodalElement.focus()またはfirstFocusableElement.focus()を呼び出し、モーダルが開いた瞬間にフォーカスをモーダル内に移動する。
  2. フォーカストラップを実装する: モーダルが開いている間、Tabキーのイベントをインターセプトし、フォーカスがモーダル内の最初と最後の要素の間でのみ循環するよう制御する。
  3. モーダルを閉じたときにフォーカスを復元する: モーダルを開いたトリガー要素への参照を保持し、閉じるときにtriggerElement.focus()を呼び出してフォーカスを戻す。

この原則を実装で見る

この原則が実装でどう形になるかを、GUNJO の部品で確かめられます。

6. 関連リンク

7. まとめ

今日から直せる一手 担当しているサービスのモーダルを開き、Tabキーを押してみてください。フォーカスがモーダルの外に逃げるなら、フォーカストラップが実装されていません。まずこの一点を修正してください。

チームに共有するなら一言 「モーダルを開いたとき、フォーカスはどこへ行く?この問いに答えられないUIは、キーボードユーザーを迷子にしている。」

更新のお知らせ

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

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

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

UIXHEROに頼めることを見る

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

記事をシェア

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

最終更新: 2026年8月27日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

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

あわせて読みたい

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

コントラストと可読性 (Contrast & Readability)

「おしゃれ」と「読めない」は違う。薄いグレーの文字、低コントラストのボタン——視覚的に美しくても読めないUIは、全ユーザーの体験を損なう。WCAGに基づくコントラスト設計の原則。

2026年2月17日
8

代替テキスト・ARIA (Alt Text & ARIA)

スクリーンリーダーが「画像」と読み上げるだけのUIは、視覚障害者にとって意味がない。alt属性とARIAで、すべてのユーザーに同等の情報を届ける設計原則。

2026年2月17日
9

認知特性への配慮 (Cognitive Accessibility)

ADHD・ディスレクシア・高齢者——認知特性の多様性を前提にしたUIは、すべてのユーザーの認知負荷を下げる。シンプルな言葉・明確な構造・予測可能な動作で「考えさせない」設計原則。

2026年2月17日
8

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

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

リクエストを送る