コンテンツにスキップ

Edge Runtime

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

  • Node.js ランタイム (デフォルト) は、すべての 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必要に応じて 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 で発生するエラーを表します
encodeURI特定の文字の各インスタンスを、その文字の UTF-8 エンコーディングを表す 1、2、3、または 4 つのエスケープシーケンスに置き換えることによって Uniform Resource Identifier (URI) をエンコードします
encodeURIComponent特定の文字の各インスタンスを、その文字の UTF-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数値(numeric value)を表します
Objectすべての JavaScript オブジェクトの基盤となるオブジェクトを表します
parseFloat文字列引数を解析し、浮動小数点数を返します
parseInt文字列引数を解析し、指定された基数(radix)の整数を返します
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 で実行された場合、エラーが発生し、実行時エラーを引き起こすことに注意してください。