Lang x Lang

Edge and Node.js Runtimes

Next.js の context において、 runtime は実行中の code が利用できるライブラリ、API、一般的な機能のセットを指します。

server 上には、アプリケーションの code の一部がレンダリングされる二つの runtimes があります:

  • Node.js Runtime (default)は、すべての Node.jsAPI とエコシステムからの互換性のあるパッケージにアクセスできます。
  • Edge Runtimeは、Web APIsを基にしています。

Runtime Differences

runtime を選択する際に考慮すべき多くの点があります。この表は、一目で主な違いを示しています。差異についてより詳しい分析を希望する場合は、以下のセクションをチェックしてください。

ノードサーバーレスEdge
冷起動/通常
HTTP ストリーミングはいはいはい
IO全て全てfetch
スケーラビリティ/高い最高
セキュリティ通常高い高い
レイテンシ通常最低
npm パッケージすべてすべてより小さなサブセット
Static Renderingはいはいいいえ
Dynamic Renderingはいはいはい
データ再検証 w/ fetchはいはいはい

Edge Runtime

Next.js では、軽量な Edge Runtime は使用可能な Node.jsAPI の一部です。

Edge Runtime は、小さくてシンプルな機能で低遅延で dynamic な、カスタマイズされたコンテンツを提供する必要がある場合に最適です。EdgeRuntime の速度は、リソースの最小限の使用から来ていますが、それは多くのシナリオで制限となることがあります。

例えば、Edge Runtime で実行される code はVercel では 1MB から 4MB を超えない 、この制限にはインポートされたパッケージ、フォント、ファイルが含まれ、デプロイメントインフラストラクチャによって変動します。また、全ての Node.jsAPI を Edge Runtime はサポートしていないため、いくつかのnpmパッケージが動作しない可能性があります。例えば、「Module not found: Can't resolve 'fs'」または類似の error があります。これらの API やパッケージを利用する必要がある場合は、Node.js runtime の利用をお勧めします。

Node.js Runtime

Node.js runtime を使用すると、すべての Node.js API と、それに依存するすべての npm パッケージにアクセスできます。しかし、Edge runtime を使用する routes の start と比べて起動速度は速くありません。

あなたの Next.js アプリケーションを Node.js server にデプロイすると、インフラストラクチャの管理、スケーリング、設定が 必要になります。代わりに、Vercel のような server レスプラットフォームにあなたの Next.js アプリケーションをデプロイすることを検討することができます。これにより、これらの問題を代わりに処理してくれます。

server レス Node.js

Serverless は、Edge Runtime よりも複雑な計算処理を扱うスケーラブルなソリューションが必要な場合に最適です。例えば、Vercel の Serverless Functions を使用すると、インポートされたパッケージ、フォント、ファイルを含めて、全体の code size は50MB です。

Edge を使用する routes と比較してのデメリットは、Serverless Functions が起動してリクエストの処理を開始するまでに数百ミリ秒かかることです。あなたのサイトが受け取るトラフィックの量によっては、これは関数が頻繁に"warm"でないため、頻繁に発生する可能性があります。

Examples

セグメント Runtime オプション

あなたの Next.js アプリケーションで個々の route セグメントに対して runtime を指定することができます。それを行うために、runtimeという名前の variable を宣言して export してください。 variable は string でなければならず、 'nodejs' または 'edge' runtime のどちらかの value を持つ必要があります。

次の例は、runtimeを export し、その value が'edge'であるページの route セグメントを示しています:

app/page.tsx
export const runtime = 'edge' // 'nodejs' (default) | 'edge'
app/page.js
export const runtime = 'edge' // 'nodejs' (default) | 'edge'

また、 layout レベルでruntimeを定義することもできます。これにより、その layout の下にあるすべての routes は edge runtime で実行されます。

app/layout.tsx
export const runtime = 'edge' // 'nodejs' (default) | 'edge'
app/layout.js
export const runtime = 'edge' // 'nodejs' (default) | 'edge'

セグメント runtime が 設定されていない 場合、 default の nodejs runtime が使用されます。 Node.js runtime から変更する予定がない場合、 runtime オプションを使用する必要はありません。

Node.js ドキュメント Edge ドキュメントを参照して、利用可能な API の完全なリストをご覧ください。両方の runtimes も、デプロイメントのインフラストラクチャによりますが、streamingもサポート可能です。

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use