メインコンテンツまでスキップ

Edge Runtime

Next.js Edge Runtimeはミドルウェアで使用され、以下のAPIをサポートしています:

ネットワークAPI

API説明
BlobBlobを表します
fetchリソースを取得します
FetchEventfetchイベントを表します
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または類似のルーチンによって以前に作成されたUniform Resource Identifier(URI)をデコードします
decodeURIComponentencodeURIComponentまたは類似のルーチンによって以前に作成されたUniform Resource Identifier(URI)コンポーネントをデコードします
DOMExceptionDOMで発生するエラーを表します
encodeURI特定の文字の各インスタンスをUTF-8エンコーディングのエスケープシーケンスに置き換えることによってUniform Resource Identifier(URI)をエンコードします
encodeURIComponent特定の文字の各インスタンスをUTF-8エンコーディングのエスケープシーケンスに置き換えることによってUniform Resource Identifier(URI)コンポーネントをエンコードします
Errorステートメントの実行またはプロパティへのアクセスを試みたときに発生するエラーを表します
EvalErrorグローバル関数eval()に関するエラーを表します
Float32Array32ビット浮動小数点数の型付き配列を表します
Float64Array64ビット浮動小数点数の型付き配列を表します
Function関数を表します
Infinity数学的な無限大の値を表します
Int8Array8ビット符号付き整数の型付き配列を表します
Int16Array16ビット符号付き整数の型付き配列を表します
Int32Array32ビット符号付き整数の型付き配列を表します
Intl国際化とローカライズ機能へのアクセスを提供します
isFinite値が有限数かどうかを判断します
isNaN値がNaNかどうかを判断します
JSONJavaScriptの値をJSON形式に変換したり、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特有のポリフィル

環境変数

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.ts
export const config = {
unstable_allowDynamic: [
// 単一のファイルを許可します
'/lib/utilities.js',
// グロブを使用して、function-bindサードパーティモジュール内のすべてを許可します
'**/node_modules/function-bind/**',
],
}

unstable_allowDynamicは、特定のファイルの動的コード評価を無視するグロブまたはグロブの配列です。グロブはアプリケーションのrootフォルダに対して相対的です。

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