brand logo

ドキュメント

onNuxtReady

onNuxtReady コンポーザブルは、アプリの初期化が完了した後にコールバックを実行することを可能にします。

onNuxtReady はクライアントサイドでのみ実行されます。 :br アプリの初期レンダリングをブロックしないコードを実行するのに理想的です。

plugins/ready.client.ts
export default defineNuxtPlugin(() => {
  onNuxtReady(async () => {
    const myAnalyticsLibrary = await import('my-big-analytics-library')
    // myAnalyticsLibrary を使って何かをする
  })
})

アプリの初期化後でも「安全」に実行できます。この場合、コードは次のアイドルコールバックで実行されるように登録されます。

tips

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

onNuxtReady の補足解説:初期化完了後に安全に処理を実行する

Nuxt アプリケーションの開発において、初期化処理が完了したタイミングで何かしらの処理を実行したいケースは多くあります。例えば、外部ライブラリの読み込みや、ユーザーの行動解析の初期化などです。しかし、これらの処理を早すぎる段階で実行すると、アプリの初期レンダリングに影響を与えたり、SSR(サーバーサイドレンダリング)との整合性が崩れたりするリスクがあります。

onNuxtReady は、こうした課題を解決するために用意されたコンポーザブルで、クライアントサイドでの Nuxt アプリの初期化が完了した後に安全に処理を実行できる仕組みを提供します。これにより、パフォーマンスを損なわずに必要な処理を遅延実行できるため、ユーザー体験の向上やコードの安定性に寄与します。


まず結論:onNuxtReady のポイント

  • Nuxt アプリの初期化完了後(クライアントサイド)にコールバックを実行できる
  • 初期レンダリングをブロックせず、パフォーマンスに配慮した処理が可能
  • 外部ライブラリの遅延読み込みや、初期化処理のタイミング調整に最適
  • SSR では実行されず、クライアント専用の処理に限定される
  • アプリの状態が安定した後に処理を行うため、Hydration エラーのリスクを軽減

いつ使うべきか?使わない方がよいケースは?

使うべきケース

  • 外部ライブラリの遅延読み込み
    大きなライブラリを初期ロード時に読み込むとパフォーマンスが低下するため、初期化完了後に読み込みたい場合。

  • ユーザー行動解析や広告タグの初期化
    ページの表示に影響を与えず、ユーザーの操作開始後に解析処理を始めたいとき。

  • クライアント専用の副作用処理
    DOM 操作やブラウザ API を使う処理で、SSR では実行できないもの。

使わない方がよいケース

  • SSR での初期化が必要な処理
    サーバーサイドでのデータフェッチやレンダリングに影響する処理は onNuxtReady ではなく、asyncDatauseFetch などを使うべき。

  • 即時に実行したい処理
    ページの初期表示に必須の処理は、onNuxtReady で遅延させるとユーザー体験が悪化する可能性がある。


実務でよくあるユースケースとサンプルコード

1. 大きな解析ライブラリの遅延読み込み

export default defineNuxtPlugin(() => {
  onNuxtReady(async () => {
    const analytics = await import('my-big-analytics-library')
    analytics.init({ trackingId: 'UA-XXXXXX' })
  })
})

初期表示を高速化しつつ、解析は後から安全に開始できます。

2. クライアント専用の UI 初期化処理

export default defineNuxtPlugin(() => {
  onNuxtReady(() => {
    // ブラウザの API を使った UI 初期化
    const tooltipElements = document.querySelectorAll('.tooltip')
    tooltipElements.forEach(el => {
      // 独自のツールチップ初期化処理
      initializeTooltip(el)
    })
  })
})

SSR では実行できない DOM 操作を、初期化完了後に行います。

3. 広告タグの動的挿入

export default defineNuxtPlugin(() => {
  onNuxtReady(() => {
    const script = document.createElement('script')
    script.src = 'https://ads.example.com/script.js'
    document.head.appendChild(script)
  })
})

広告スクリプトを遅延ロードし、初期表示のパフォーマンスを確保。


よくある落とし穴・注意点

SSR と CSR の違いに注意

onNuxtReady はクライアントサイドでのみ実行されるため、サーバーサイドでの処理が必要な場合は使えません。サーバーとクライアントで処理を分ける必要がある場合は、process.clientprocess.server を併用してください。

Hydration エラーのリスク

初期レンダリング後に DOM を操作する処理は、Hydration(サーバーからクライアントへの状態引き継ぎ)時に不整合を起こす可能性があります。onNuxtReady は初期化完了後に実行されるため比較的安全ですが、DOM の状態を大きく変える処理は慎重に行いましょう。

パフォーマンスへの影響

onNuxtReady 内の処理は初期表示後のアイドルタイムに実行されることが多いですが、重い処理を詰め込みすぎるとユーザー操作のレスポンスに影響が出ることがあります。必要最低限の処理に留め、可能なら Web Worker などの活用も検討してください。


まとめ

onNuxtReady は Nuxt アプリのクライアント初期化完了後に安全に処理を実行できる強力なコンポーザブルです。外部ライブラリの遅延読み込みやクライアント専用の副作用処理に最適で、初期レンダリングのパフォーマンスを損なわずに機能拡張が可能です。ただし、SSR での処理や即時実行が必要な処理には向かないため、用途を見極めて使い分けることが重要です。

適切に活用すれば、Nuxt アプリのパフォーマンスと安定性を両立できるため、ぜひ実務での導入を検討してください。