Edge Runtime

Next.js の Edge Runtime は標準的な Web API をベースとしており、以下の API をサポートしています:

ネットワーク API

API説明
Blobバイナリデータを表す
fetchリソースを取得する
FetchEventフェッチイベントを表す
Fileファイルを表す
FormDataフォームデータを表す
HeadersHTTP ヘッダーを表す
RequestHTTP リクエストを表す
ResponseHTTP レスポンスを表す
URLSearchParamsURL 検索パラメータを表す
WebSocketWebSocket 接続を表す

エンコーディング API

API説明
atobbase-64 エンコード文字列をデコード
btoa文字列を base-64 でエンコード
TextDecoderUint8Array を文字列にデコード
TextDecoderStreamストリーム用のチェーン可能デコーダー
TextEncoder文字列を Uint8Array にエンコード
TextEncoderStreamストリーム用のチェーン可能エンコーダー

ストリーム API

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

暗号 API

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

Web標準API

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

Next.js 固有のポリフィル

環境変数

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

サポートされていない API

Edge Runtime には以下のような制限があります:

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

以下の JavaScript 言語機能は無効化されており、動作しません:

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

まれなケースとして、コードに(またはインポートしたモジュールに)ランタイム時に到達できない動的コード評価ステートメントが含まれており、ツリーシェイキングで除去できない場合があります。 Middleware または Edge API Route のエクスポート設定で特定のファイルを許可するようにチェックを緩和できます:

export const config = {
  runtime: 'edge', // Edge API Routes 専用
  unstable_allowDynamic: [
    // 単一ファイルを許可
    '/lib/utilities.js',
    // glob を使用して function-bind サードパーティモジュール内のすべてを許可
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamicglob、または glob の配列で、特定のファイルに対する動的コード評価を無視します。glob はアプリケーションのルートフォルダを基準にします。

これらのステートメントが Edge で実行されると、ランタイムエラーが発生することに注意してください。