<NuxtRouteAnnouncer>
<NuxtRouteAnnouncer> コンポーネントは、ルート変更を支援技術に知らせるためにページタイトルを持つ隠し要素を追加します。
このコンポーネントは Nuxt v3.12+ で利用可能です。
使用方法
<NuxtRouteAnnouncer/> を app.vue または layouts/ に追加して、支援技術にページタイトルの変更を知らせることでアクセシビリティを向上させます。これにより、スクリーンリーダーに依存するユーザーにナビゲーションの変更が通知されます。
<template>
<NuxtRouteAnnouncer />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
スロット
ルートアナウンサーのデフォルトスロットを通じてカスタムHTMLやコンポーネントを渡すことができます。
<template>
<NuxtRouteAnnouncer>
<template #default="{ message }">
<p>{{ message }} was loaded.</p>
</template>
</NuxtRouteAnnouncer>
</template>
プロパティ
atomic: スクリーンリーダーが変更のみを通知するか、全コンテンツを通知するかを制御します。更新時に全コンテンツを読み上げるには true に設定し、変更のみの場合は false にします。(デフォルトはfalse)politeness: スクリーンリーダーの通知の緊急度を設定します:off(通知を無効)、polite(静寂を待つ)、またはassertive(即座に中断)。(デフォルトはpolite)
このコンポーネントはオプションです。 :br 完全なカスタマイズを実現するには、ソースコードに基づいて独自のものを実装できます。
useRouteAnnouncer composable を使用して、基礎となるアナウンサーインスタンスにフックし、カスタムの通知メッセージを設定できます。
tips
このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。
NuxtRouteAnnouncer とは?アクセシビリティ向上のための必須コンポーネント
ウェブアクセシビリティの重要性が高まる中、Nuxt.js でのルーティング変更を支援技術に正しく伝えることは非常に大切です。NuxtRouteAnnouncer は、ページ遷移時にスクリーンリーダーなどの支援技術に対して「ページタイトルが変わった」ことを通知するための隠し要素を自動的に追加します。これにより、視覚に頼らないユーザーも現在のページ内容を正確に把握でき、ユーザー体験が大きく向上します。
特にシングルページアプリケーション(SPA)では、URLは変わってもページ全体の再読み込みが発生しないため、支援技術に変化を伝える仕組みが必要です。NuxtRouteAnnouncer はこの課題をシンプルに解決し、アクセシビリティ対応のハードルを下げてくれます。
まず結論:NuxtRouteAnnouncer のポイント
- ページ遷移時にスクリーンリーダーへページタイトルの変更を自動通知
app.vueやレイアウトファイルに一度設置すれば全ページで有効atomicとpolitenessの2つのプロパティで通知の挙動を細かく制御可能- カスタムメッセージをスロットで柔軟に差し替えられる
- 公式の
useRouteAnnouncercomposable と組み合わせて高度な通知も実装可能
いつ使うべきか?使わない方がよいケースは?
使うべきケース
- SPA や SSR+CSR ハイブリッドで、ページ遷移時に支援技術に変化を伝えたい場合
- アクセシビリティ対応を強化し、スクリーンリーダーユーザーの利便性を高めたいとき
- ページタイトルが動的に変わるサイトで、ユーザーに現在のページ情報を正確に伝えたい場合
使わない方がよいケース
- 既に独自のアクセシビリティ通知ロジックを実装していて、重複する恐れがある場合
- ページタイトルが固定で変わらず、ルート変更の通知が不要なシンプルなサイト
- ルート変更時に通知が逆にユーザー体験を損なう可能性がある特殊なUI設計の場合
実務でよくあるユースケースとサンプルコード
1. 基本的な導入例
app.vue に NuxtRouteAnnouncer を追加するだけで、全ページのルート変更を支援技術に通知可能です。
<template>
<NuxtRouteAnnouncer />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
これだけで、スクリーンリーダーはページタイトルの変化を検知し、ユーザーに読み上げます。
2. 通知の緊急度を調整する
politeness プロパティで通知の優先度を設定できます。例えば、即時通知が必要な場合は assertive を指定します。
<template>
<NuxtRouteAnnouncer politeness="assertive" />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
静かな環境を優先したい場合はデフォルトの polite のままにします。
3. カスタムメッセージを表示する
スロットを使って、通知メッセージをカスタマイズすることも可能です。例えば、ページ名に加えて「ページが読み込まれました」と付け加えたい場合:
<template>
<NuxtRouteAnnouncer>
<template #default="{ message }">
<p>{{ message }} が読み込まれました。</p>
</template>
</NuxtRouteAnnouncer>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
よくある落とし穴・注意点
SSR と CSR のハイドレーション問題
NuxtRouteAnnouncer は SSR で初期レンダリングされるため、クライアント側でのハイドレーション時に内容が変わると警告が出ることがあります。これは支援技術向けの非表示要素の内容が動的に変わるためです。通常は問題ありませんが、カスタムメッセージを頻繁に変える場合は注意が必要です。
パフォーマンスへの影響
NuxtRouteAnnouncer 自体は非常に軽量でパフォーマンスへの影響はほぼありません。ただし、atomic を true にするとスクリーンリーダーが毎回全文を読み上げるため、ユーザー体験に影響する可能性があります。通常は false(変更部分のみ通知)が推奨されます。
過剰な通知はユーザーの混乱を招く
通知の頻度や内容が多すぎると、スクリーンリーダーユーザーにとって逆に煩わしくなることがあります。必要最低限の情報に絞り、適切な politeness レベルを設定しましょう。
まとめ
NuxtRouteAnnouncer は Nuxt アプリケーションにおけるアクセシビリティ強化のための強力なツールです。ルート変更時にページタイトルの変化を支援技術に確実に伝え、スクリーンリーダーユーザーの利便性を大幅に向上させます。基本的な導入は非常に簡単で、app.vue に設置するだけで効果を発揮します。用途に応じて atomic や politeness を調整し、必要に応じてカスタムメッセージを設定することで、より良いユーザー体験を提供できます。
アクセシビリティ対応は継続的な改善が重要です。NuxtRouteAnnouncer を活用して、より多くのユーザーに優しいウェブサイトを目指しましょう。
アクセシビリティ対応は単なる法令遵守だけでなく、ユーザー満足度やSEOにも良い影響を与えます。NuxtRouteAnnouncer はその第一歩として最適なコンポーネントです。
※このページは Nuxt.js 公式ドキュメントの翻訳ページです。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/api/components/nuxt-route-announcer