<Script>
この API リファレンスは、Script コンポーネントで利用可能なプロパティの使用方法を理解するのに役立ちます。機能と使用方法については、スクリプトの最適化ページをご覧ください。
プロパティ
Script コンポーネントで利用可能なプロパティの概要は次のとおりです:
プロパティ | 例 | 型 | 必須 |
---|---|---|---|
src | src="http://example.com/script" | 文字列 | インラインスクリプトを使用しない場合に必要 |
strategy | strategy="lazyOnload" | 文字列 | - |
onLoad | onLoad={onLoadFunc} | 関数 | - |
onReady | onReady={onReadyFunc} | 関数 | - |
onError | onError={onErrorFunc} | 関数 | - |
必須プロパティ
<Script />
コンポーネントには、以下のプロパティが必要です。
src
外部スクリプトのURLを指定するパス文字列。これは、絶対的な外部URLまたは内部パスのいずれかです。インラインスクリプトを使用しない限り、src
プロパティは必須です。
オプションプロパティ
<Script />
コンポーネントは、必須プロパティ以外にも多くのプロパティを受け入れます。
strategy
スクリプトの読み込み戦略。使用できる戦略は4種類あります:
beforeInteractive
: Next.jsのコードや任意のページのハイドレーションが発生する前に読み込みます。afterInteractive
: (デフォルト) ページ上のいくつかのハイドレーション後に早期に読み込みます。lazyOnload
: ブラウザのアイドル時間中に読み込みます。worker
: (実験的) Web ワーカーで読み込みます。
beforeInteractive
beforeInteractive
戦略で読み込むスクリプトは、サーバーからの初期HTMLに注入され、任意のNext.jsモジュールより前にダウンロードされ、ページのハイドレーション前に配置された順序で実行されます。
この戦略のスクリプトは、事前に読み込まれ、任意の一次コードより前にフェッチされますが、その実行はページのハイドレーションをブロックしません。
beforeInteractive
スクリプトは、Document
コンポーネント(pages/_document.js
)内に配置する必要があり、サイト全体で必要なスクリプト(つまり、アプリケーション内の任意のページがサーバーサイドで読み込まれたときにスクリプトが読み込まれる)を読み込むように設計されています。
この戦略は、ページの一部でも対話可能になる前にフェッチする必要のある重要なスクリプトにのみ使用する必要があります。
補足:
beforeInteractive
のスクリプトは、コンポーネント内のどこに配置されているかに関わらず、常にHTMLドキュメントのhead
内に注入されます。
できるだけ早く読み込む必要があるbeforeInteractive
スクリプトの例:
- ボット検出器
- クッキー同意マネージャー
afterInteractive
afterInteractive
戦略を使用するスクリプトは、HTMLにクライアントサイドで注入され、ページ上のいくつかの(または全ての)ハイドレーション後に読み込まれます。これはScript コンポーネントのデフォルト戦略であり、できるだけ早く読み込む必要があるが、一次のNext.jsコードの前ではないスクリプトに使用する必要があります。
afterInteractive
スクリプトは、任意のページまたはレイアウト内に配置でき、ブラウザでそのページ(またはページグループ)が開かれたときにのみ読み込みおよび実行されます。
afterInteractive
に適したスクリプトの例:
- タグマネージャー
- 分析ツール
lazyOnload
lazyOnload
戦略を使用するスクリプトは、ブラウザのアイドル時間中にHTMLにクライアントサイドで注入され、ページ上のすべてのリソースがフェッチされた後に読み込まれます。この戦略は、早期に読み込む必要がないバックグラウンドまたは低優先度のスクリプトに使用する必要があります。
lazyOnload
スクリプトは、任意のページまたはレイアウト内に配置でき、ブラウザでそのページ(またはページグループ)が開かれたときにのみ読み込みおよび実行されます。
すぐに読み込む必要がなく、lazyOnload
でフェッチできるスクリプトの例:
- チャットサポートプラグイン
- ソーシャルメディアウィジェット
worker
警告:
worker
戦略はまだ安定しておらず、app
ディレクトリでは動作しません。注意して使用してください。
worker
戦略を使用するスクリプトは、メインスレッドを解放し、クリティカルな一次リソースのみを処理することを保証するために、Web ワーカーにオフロードされます。この戦略は任意のスクリプトに使用できますが、すべてのサードパーティスクリプトをサポートすることは保証されていない高度な使用例です。
worker
戦略を使用するには、next.config.js
でnextScriptWorkers
フラグを有効にする必要があります:
worker
スクリプトは現在のところpages/
ディレクトリでのみ使用できます:
onLoad
警告:
onLoad
はまだ Server Components では動作せず、Client Components でのみ使用できます。さらに、onLoad
はbeforeInteractive
と一緒に使用できません – 代わりにonReady
の使用を検討してください。
一部のサードパーティスクリプトでは、スクリプトの読み込みが完了した後にコンテンツをインスタンス化したり関数を呼び出したりするために、ユーザーが JavaScript コードを一度実行する必要があります。afterInteractive
または lazyOnload
を読み込み戦略として使用している場合、onLoad
プロパティを使用して読み込み後にコードを実行できます。
lodash メソッドをライブラリの読み込み後にのみ実行する例は以下の通りです。
onReady
警告:
onReady
はまだ Server Components では動作せず、Client Components でのみ使用できます。
一部のサードパーティスクリプトでは、スクリプトの読み込み完了後、およびコンポーネントがマウントされるたびに(例えばルートナビゲーション後)、ユーザーが JavaScript コードを実行する必要があります。onReady
プロパティを使用して、スクリプトの最初の読み込み時とその後の各コンポーネント再マウント時にコードを実行できます。
コンポーネントがマウントされるたびに Google Maps JS 埋め込みを再インスタンス化する例は以下の通りです:
onError
警告:
onError
はまだ Server Components では動作せず、Client Components でのみ使用できます。onError
はbeforeInteractive
読み込み戦略と一緒に使用できません。
スクリプトの読み込みに失敗した場合に捕捉するのに役立つことがあります。これらのエラーは onError
プロパティで処理できます:
バージョン履歴
バージョン | 変更点 |
---|---|
v13.0.0 | beforeInteractive と afterInteractive が app をサポートするように修正されました。 |
v12.2.4 | onReady プロパティが追加されました。 |
v12.2.2 | beforeInteractive を使用した next/script を _document に配置できるようになりました。 |
v11.0.0 | next/script が導入されました。 |