brand logo

ドキュメント

useRouteAnnouncer

このコンポーザブルはページタイトルの変更を監視し、それに応じてアナウンサーメッセージを更新します。

このコンポーザブルは Nuxt v3.12+ で利用可能です。

説明

ページタイトルの変更を監視し、それに応じてアナウンサーメッセージを更新するコンポーザブルです。<NuxtRouteAnnouncer>によって使用され、制御可能です。Unhead の dom:rendered にフックしてページのタイトルを読み取り、それをアナウンサーメッセージとして設定します。

パラメータ

  • politeness: スクリーンリーダーのアナウンスの緊急度を設定します: off(アナウンスを無効にする)、polite(静寂を待つ)、または assertive(即座に中断する)。(デフォルトは polite)。

プロパティ

message

  • type: Ref<string>
  • description: アナウンスするメッセージ

politeness

  • type: Ref<string>
  • description: スクリーンリーダーのアナウンス緊急度レベル offpolite、または assertive

メソッド

set(message, politeness = "polite")

アナウンスするメッセージとその緊急度レベルを設定します。

polite(message)

politeness = "polite" でメッセージを設定します。

assertive(message)

politeness = "assertive" でメッセージを設定します。

pages/index.vue

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

NuxtのuseRouteAnnouncerとは?アクセシビリティ向上のための強力なツール

Webアクセシビリティの向上は、現代のWeb開発において欠かせない要素です。特に画面読み上げソフト(スクリーンリーダー)を利用するユーザーにとって、ページ遷移時の情報提供は重要な課題です。NuxtのuseRouteAnnouncerは、ページタイトルの変更を監視し、それに応じてスクリーンリーダーに読み上げるメッセージを自動的に更新するコンポーザブルです。

これにより、ユーザーはページ遷移が発生したことを即座に認識でき、よりスムーズでストレスの少ない操作体験を実現できます。特にSPA(シングルページアプリケーション)での動的なページ遷移において、アクセシビリティを確保するための強力な手段となります。


まず結論:useRouteAnnouncerのポイント

  • ページタイトルの変化を監視し、スクリーンリーダー向けのアナウンスメッセージを自動更新する
  • アナウンスの緊急度(politeness)をoffpoliteassertiveから選択可能
  • 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アプリのアクセシビリティを一歩前進させることができます。ぜひ積極的に取り入れてみてください。