Edge Runtime (エッジランタイム)

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

ネットワーク API

API説明
BlobBlob オブジェクトを表現
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',
    // サードパーティモジュール function-bind 内のすべてを許可するために glob を使用
    '/node_modules/function-bind/**',
  ],
}

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

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