useRouteAnnouncer
このコンポーザブルはページタイトルの変更を監視し、それに応じてアナウンサーメッセージを更新します。
このコンポーザブルは Nuxt v3.12+ で利用可能です。
説明
ページタイトルの変更を監視し、それに応じてアナウンサーメッセージを更新するコンポーザブルです。<NuxtRouteAnnouncer>によって使用され、制御可能です。Unhead の dom:rendered にフックしてページのタイトルを読み取り、それをアナウンサーメッセージとして設定します。
パラメータ
politeness: スクリーンリーダーのアナウンスの緊急度を設定します:off(アナウンスを無効にする)、polite(静寂を待つ)、またはassertive(即座に中断する)。(デフォルトはpolite)。
プロパティ
message
- type:
Ref<string> - description: アナウンスするメッセージ
politeness
- type:
Ref<string> - description: スクリーンリーダーのアナウンス緊急度レベル
off、polite、またはassertive
メソッド
set(message, politeness = "polite")
アナウンスするメッセージとその緊急度レベルを設定します。
polite(message)
politeness = "polite" でメッセージを設定します。
assertive(message)
politeness = "assertive" でメッセージを設定します。
例
tips
このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。
NuxtのuseRouteAnnouncerとは?アクセシビリティ向上のための強力なツール
Webアクセシビリティの向上は、現代のWeb開発において欠かせない要素です。特に画面読み上げソフト(スクリーンリーダー)を利用するユーザーにとって、ページ遷移時の情報提供は重要な課題です。NuxtのuseRouteAnnouncerは、ページタイトルの変更を監視し、それに応じてスクリーンリーダーに読み上げるメッセージを自動的に更新するコンポーザブルです。
これにより、ユーザーはページ遷移が発生したことを即座に認識でき、よりスムーズでストレスの少ない操作体験を実現できます。特にSPA(シングルページアプリケーション)での動的なページ遷移において、アクセシビリティを確保するための強力な手段となります。
まず結論:useRouteAnnouncerのポイント
- ページタイトルの変化を監視し、スクリーンリーダー向けのアナウンスメッセージを自動更新する
- アナウンスの緊急度(politeness)を
off、polite、assertiveから選択可能 setメソッドで任意のメッセージと緊急度を動的に設定できる- Nuxt v3.12以降で利用可能
<NuxtRouteAnnouncer>コンポーネントと組み合わせて使うことで効果的に動作
いつ使うべき?使わない方がよいケースは?
使うべきケース
- SPAでページ遷移時に画面読み上げユーザーに変化を伝えたい場合
- ページタイトルが動的に変わるアプリケーションでアクセシビリティを強化したい場合
- 画面遷移のたびにスクリーンリーダーに明確なフィードバックを与えたい場合
使わない方がよいケース
- 静的なマルチページサイトで、ページ遷移がフルリロードされる場合(ブラウザの標準動作で十分)
- すでに独自のアクセシビリティ対応が完璧に実装されている場合
- ページタイトルが頻繁に変わりすぎて、逆にユーザーに混乱を与える恐れがある場合
実務でよくあるユースケースとサンプルコード
1. ページ遷移時にタイトルを読み上げてユーザーに通知
const { message, politeness, set } = useRouteAnnouncer({
politeness: 'polite'
})
watch(() => useRoute().fullPath, (newPath) => {
set(`ページが ${newPath} に遷移しました。`)
})
この例では、ルートのパスが変わるたびにスクリーンリーダーに「ページが /about に遷移しました」などと読み上げさせることができます。
2. フォーム送信後に結果を即座に通知(assertive)
const { assertive } = useRouteAnnouncer()
function onSubmit() {
// フォーム送信処理
assertive('送信が完了しました。ありがとうございます。')
}
フォーム送信など重要なイベント後に即座に読み上げてほしい場合は、assertiveを使うと良いでしょう。
3. カスタムメッセージを動的に切り替える
const { set } = useRouteAnnouncer()
function updateAnnouncement(status: string) {
if (status === 'loading') {
set('読み込み中です。しばらくお待ちください。', 'polite')
} else if (status === 'error') {
set('エラーが発生しました。再度お試しください。', 'assertive')
} else {
set('操作が完了しました。', 'polite')
}
}
状態に応じてアナウンスメッセージと緊急度を切り替えられます。
よくある落とし穴・注意点
SSRとCSRの違いによる影響
useRouteAnnouncerはクライアントサイドで動作し、ページタイトルの変更を監視します。サーバーサイドレンダリング(SSR)時には動作しないため、初期表示時のアナウンスは期待できません。CSRでのページ遷移時に効果を発揮することを理解しておきましょう。
Hydration時のタイミング問題
NuxtのHydration(サーバーからクライアントへの状態引き継ぎ)中にタイトルが変わると、スクリーンリーダーが誤った情報を読み上げることがあります。Hydration完了後にアナウンスを行うように工夫することが望ましいです。
パフォーマンスへの影響
頻繁にメッセージを更新するとスクリーンリーダーの読み上げが多発し、ユーザーにとって逆効果になることがあります。必要なタイミングでのみアナウンスを行うように設計しましょう。
アナウンスの緊急度設定に注意
offにするとアナウンスが無効になるため、必要な場面で誤って設定しないようにassertiveは即座に読み上げるため、ユーザーの操作を妨げる可能性があるので多用は避ける
まとめ
NuxtのuseRouteAnnouncerは、SPAにおけるアクセシビリティ向上に非常に役立つコンポーザブルです。ページタイトルの変化を検知してスクリーンリーダーに適切なメッセージを伝えることで、視覚障害のあるユーザーにも快適なナビゲーション体験を提供できます。
ただし、SSRとの兼ね合いや読み上げの頻度、緊急度の設定には注意が必要です。実務ではページ遷移通知や重要イベントのフィードバックに活用し、ユーザーの操作感を損なわないように設計しましょう。
アクセシビリティ対応は継続的な改善が求められますが、useRouteAnnouncerを活用することでNuxtアプリのアクセシビリティを一歩前進させることができます。ぜひ積極的に取り入れてみてください。
※このページは Nuxt.js 公式ドキュメントの翻訳ページです。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/api/composables/use-route-announcer