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