コンテンツにスキップ

Edge Runtime

Next.js には、アプリケーションで使用できる 2 つのサーバーランタイムがあります。

  • Node.js Runtime (デフォルト) は、すべての Node.js API にアクセスでき、アプリケーションのレンダリングに使用されます。
  • Edge Runtime は、より限定されたAPI セットを含み、Proxy で使用されます。

注意点

  • Edge Runtime は、すべての Node.js API をサポートしているわけではありません。一部のパッケージは期待どおりに動作しない場合があります。
  • Edge Runtime は、増分静的再生成 (ISR) をサポートしていません。
  • デプロイメントアダプターによっては、両方のランタイムでストリーミングをサポートできます。

リファレンス

Edge Runtime は、次の API をサポートしています。

ネットワーク API

API説明
Blobブロブを表します。
fetchリソースを取得します。
FetchEventfetch イベントを表します。
Fileファイルを表現します。
FormDataフォームデータを表します。
HeadersHTTP ヘッダーを表します。
RequestHTTP リクエストを表します。
ResponseHTTP レスポンスを表します。
URLSearchParamsURL の検索パラメータを表します。
WebSocketWebSocket 接続を表します。

エンコーディング API

API説明
atobBase64 でエンコードされた文字列をデコードします。
btoa文字列を Base64 でエンコードします。
TextDecoderUint8Array を文字列にデコードします。
TextDecoderStreamストリーム用の連鎖可能なデコーダー。
TextEncoder文字列を Uint8Array にエンコードします。
TextEncoderStreamストリーム用の連鎖可能なエンコーダー。

ストリーム API

API説明
ReadableStream読み込み可能なストリームを表します。
ReadableStreamBYOBReaderReadableStream のリーダーを表します。
ReadableStreamDefaultReaderReadableStream のリーダーを表します。
TransformStream変換ストリームを表します。
WritableStream書き込み可能なストリームを表します。
WritableStreamDefaultWriterWritableStream のライターを表します。

暗号 API

API説明
cryptoプラットフォームの暗号化機能へのアクセスを提供します。
CryptoKey暗号化キーを表します。
SubtleCryptoハッシュ、署名、暗号化、復号化などの一般的な暗号プリミティブへのアクセスを提供します。

Web 標準 API

API説明
AbortController必要に応じて、1 つ以上の DOM リクエストを中止できるようにします。
Array値の配列を表します。
ArrayBuffer固定長生の生のバイナリデータバッファを汎用的に表します。
Atomics静的メソッドとしてアトミック操作を提供します。
BigInt任意精度の整数を表します。
BigInt64Array64ビット符号付き整数の型配列を表します。
BigUint64Array64ビット符号なし整数の型配列を表します。
Boolean論理エンティティを表し、truefalse の 2 つの値を持つことができます。
clearIntervalsetInterval() の呼び出しによって以前に設定された、繰り返し実行されるタイマーアクションをキャンセルします。
clearTimeoutsetTimeout() の呼び出しによって以前に設定された、繰り返し実行されるタイマーアクションをキャンセルします。
consoleブラウザのデバッグコンソールへのアクセスを提供します。
DataViewArrayBuffer の汎用ビューを表します。
Dateプラットフォームに依存しない形式で、単一の瞬間を表します。
decodeURIencodeURI または同様のルーチンによって以前に作成された Uniform Resource Identifier (URI) をデコードします。
decodeURIComponentencodeURIComponent または同様のルーチンによって以前に作成された Uniform Resource Identifier (URI) コンポーネントをデコードします。
DOMExceptionDOM で発生するエラーを表します。
encodeURIUTF-8 エンコーディングで文字を表す 1、2、3、または 4 つのエスケープシーケンスに特定の文字の各インスタンスを置き換えることにより、Uniform Resource Identifier (URI) をエンコードします。
encodeURIComponentUTF-8 エンコーディングで文字を表す 1、2、3、または 4 つのエスケープシーケンスに特定の文字の各インスタンスを置き換えることにより、Uniform Resource Identifier (URI) コンポーネントをエンコードします。
Errorステートメントの実行中またはプロパティへのアクセス中に発生するエラーを表します。
EvalErrorグローバル関数 eval() に関して発生するエラーを表します。
Float32Array32ビット浮動小数点数の型配列を表します。
Float64Array64ビット浮動小数点数の型配列を表します。
Function関数を表します。
Infinity数学的な無限大の値 (Infinity) を表します。
Int8Array8ビット符号付き整数の型配列を表します。
Int16Array16ビット符号付き整数の型配列を表します。
Int32Array32ビット符号付き整数の型配列を表します。
Intl国際化およびローカリゼーション機能へのアクセスを提供します。
isFinite値が有限数であるかどうかを判断します。
isNaN値が NaN であるかどうかを判断します。
JSONJavaScript 値と JSON 形式との間で変換する機能を提供します。
Map各値が 1 回だけ出現する可能性のある値のコレクションを表します。
Math数学関数と定数へのアクセスを提供します。
Number数値型を表します。
Objectすべての JavaScript オブジェクトの基盤となるオブジェクトを表します。
parseFloat文字列引数を解析し、浮動小数点数を返します。
parseInt文字列引数を解析し、指定された基数の整数を返します。
Promise非同期操作の最終的な完了(または失敗)とその結果の値を表します。
Proxy基本的な操作(プロパティの検索、代入、列挙、関数呼び出しなど)のカスタム動作を定義するために使用されるオブジェクトを表します。
queueMicrotask実行されるマイクロタスクをキューに入れます。
RangeError値が許可された値のセットまたは範囲内にない場合に発生するエラーを表します。
ReferenceError存在しない変数が参照された場合のエラーを表します。
Reflectインターセプト可能な JavaScript 操作のためのメソッドを提供します。
RegExp文字の組み合わせを照合できる正規表現を表します。
Set各値が 1 回だけ出現する可能性のある値のコレクションを表します。
setInterval指定された時間間隔で関数を繰り返し呼び出します。
setTimeout指定されたミリ秒数後に関数を呼び出すか、式を評価します。
SharedArrayBuffer固定長生の生のバイナリデータバッファを汎用的に表します。
String文字のシーケンスを表します。
structuredClone値のディープコピーを作成します。
Symbolオブジェクトプロパティのキーとして使用される、ユニークで不変なデータ型を表します。
SyntaxError構文的に無効なコードを解釈しようとした場合のエラーを表します。
TypeError予期される型とは異なる値であった場合のエラーを表します。
Uint8Array8ビット符号なし整数の型配列を表します。
Uint8ClampedArray0-255 の範囲にクランプされた8ビット符号なし整数の型配列を表します。
Uint32Array32ビット符号なし整数の型配列を表します。
URIErrorグローバル URI 処理関数が誤った方法で使用された場合のエラーを表します。
URLオブジェクト URL を作成するための静的メソッドを提供するオブジェクトを表します。
URLPatternURL パターンを表します。
URLSearchParamsキーと値のペアのコレクションを表します。
WeakMapキーが弱く参照されているキー/値ペアのコレクションを表します。
WeakSet各オブジェクトが 1 回だけ出現する可能性のあるオブジェクトのコレクションを表します。
WebAssemblyWebAssembly へのアクセスを提供します。

Next.js 固有のポリフィル

環境変数

process.env を使用して、next devnext build の両方で環境変数にアクセスできます。

サポートされていない API

Edge Runtime には、いくつかの制限があります。

  • ネイティブ Node.js API はサポートされていません。たとえば、ファイルシステムの読み書きはできません。
  • node_modules は、ES Modules を実装しており、ネイティブ Node.js API を使用しない限り、使用できます
  • require の直接呼び出しは許可されていません。代わりに ES Modules を使用してください。

次の JavaScript 言語機能は無効になっており、機能しません

API説明
eval文字列として表される JavaScript コードを評価します。
new Function(evalString)引数として提供されたコードで新しい関数を作成します。
WebAssembly.compileバッファソースから WebAssembly モジュールをコンパイルします。
WebAssembly.instantiateバッファソースから WebAssembly モジュールをコンパイルおよびインスタンス化します。

まれに、コードに(またはインポートによって)動的なコード評価ステートメントが含まれている場合がありますが、これは実行時に到達できず、ツリーシェイクによって削除できないことがあります。Proxy 設定で特定のファイルに対してチェックを緩和することができます。

proxy.ts
export const config = {
  unstable_allowDynamic: [
    // allows a single file
    '/lib/utilities.js',
    // use a glob to allow anything in the function-bind 3rd party module
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic は、glob(または glob の配列)であり、特定のファイルに対する動的なコード評価を無視します。glob はアプリケーションのルートフォルダからの相対パスです。

これらのステートメントが Edge で実行された場合、エラーが発生し、実行時エラーを引き起こすことに注意してください。