コンテンツにスキップ

Edge Runtime

Next.js Edge RuntimeはMiddlewareに使用され、以下のAPIをサポートします。

ネットワークAPI

API説明
BlobBlobを表します
fetchリソースをフェッチします
FetchEventフェッチイベントを表します
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プラットフォーム非依存の形式で時間の単一の瞬間を表します
decodeURI以前にencodeURIまたは類似のルーチンによって作成されたURI(Uniform Resource Identifier)をデコードします
decodeURIComponent以前にencodeURIComponentまたは類似のルーチンによって作成されたURI(Uniform Resource Identifier)コンポーネントをデコードします
DOMExceptionDOMで発生するエラーを表します
encodeURIURI(Uniform Resource Identifier)を、特定の文字の各インスタンスをUTF-8エンコーディングを表す1、2、3、または4つのエスケープシーケンスに置き換えることでエンコードします
encodeURIComponentURI(Uniform Resource Identifier)コンポーネントを、特定の文字の各インスタンスをUTF-8エンコーディングを表す1、2、3、または4つのエスケープシーケンスに置き換えることでエンコードします
Errorステートメントの実行またはプロパティへのアクセスを試みたときに発生するエラーを表します
EvalErrorグローバル関数eval()に関して発生するエラーを表します
Float32Array32ビット浮動小数点数型配列を表します
Float64Array64ビット浮動小数点数型配列を表します
Function関数を表します
Infinity数学的な無限大の値を表します
Int8Array8ビット符号付き整数型配列を表します
Int16Array16ビット符号付き整数型配列を表します
Int32Array32ビット符号付き整数型配列を表します
Intl国際化およびローカライズ機能へのアクセスを提供します
isFinite値が有限数であるかどうかを判断します
isNaN値がNaNであるかどうかを判断します
JSONJavaScriptの値をJSON形式に変換する機能、およびJSON形式からJavaScriptの値に変換する機能を提供します
Map各値が一度しか出現しない値のコレクションを表します
Math数学関数と定数へのアクセスを提供します
Number数値データ型を表します
ObjectすべてのJavaScriptオブジェクトの基底であるオブジェクトを表します
parseFloat文字列引数を解析し、浮動小数点数を返します
parseInt文字列引数を解析し、指定された基数の整数を返します
Promise非同期操作の最終的な完了(または失敗)と、その結果の値を表します
Proxy基本的な操作(例: プロパティの検索、代入、列挙、関数呼び出しなど)のカスタム動作を定義するために使用されるオブジェクトを表します
queueMicrotask実行されるマイクロタスクをキューに入れます
RangeError値が許可された値のセットまたは範囲内にない場合に発生するエラーを表します
ReferenceError存在しない変数を参照したときに発生するエラーを表します
Reflect傍受可能なJavaScript操作のメソッドを提供します
RegExp正規表現を表し、文字の組み合わせにマッチングさせることができます
Set各値が一度しか出現しない値のコレクションを表します
値のコレクションを表し、各値は一度しか出現できませんsetInterval
関数を繰り返し呼び出し、各呼び出しの間に固定の時間遅延を設定しますsetTimeout
指定されたミリ秒数が経過した後に関数を呼び出すか、式を評価します汎用的な固定長生バイナリデータバッファを表します
SharedArrayBuffer文字のシーケンスを表します
structuredClone値のディープコピーを作成します
Symbolオブジェクトプロパティのキーとして使用される一意で不変のデータ型を表します
SyntaxError構文的に無効なコードを解釈しようとしたときに発生するエラーを表します
TypeError値が期待される型ではない場合に発生するエラーを表します
Uint8Array8ビット符号なし整数型配列を表します
Uint8ClampedArray0-255にクランプされた8ビット符号なし整数型配列を表します
Uint32Array32ビット符号なし整数型配列を表します
URIErrorグローバルURI処理関数が誤って使用された場合に発生するエラーを表します
URLオブジェクトURLを作成するための静的メソッドを提供するオブジェクトを表します
URLPatternURLパターンを表します
URLSearchParamsキーと値のペアのコレクションを表します
WeakMapキーが弱参照されるキーと値のペアのコレクションを表します
WeakSet各オブジェクトが一度しか出現しないオブジェクトのコレクションを表します
WebAssemblyWebAssemblyへのアクセスを提供します

Next.js固有のポリフィル

環境変数

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

非サポート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設定で特定のファイルを許可するようにチェックを緩和できます。

middleware.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、またはglobsの配列です。globsはアプリケーションのルートフォルダからの相対パスです。

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