コンテンツにスキップ

Edge Runtime

Next.js Edge Runtimeは、ミドルウェアに使用され、以下の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論理エンティティを表し、`true`と`false`の2つの値を持つことができます
clearInterval`setInterval()`への呼び出しによって以前に確立された、時間指定の繰り返しアクションをキャンセルします
clearTimeout`setTimeout()`への呼び出しによって以前に確立された、時間指定の繰り返しアクションをキャンセルします
consoleブラウザのデバッグコンソールへのアクセスを提供します
DataView`ArrayBuffer`の汎用ビューを表します
Dateプラットフォームに依存しない形式で、時間の特定の瞬間を表します
decodeURI`encodeURI`または類似のルーチンによって以前に作成されたURI (Uniform Resource Identifier) をデコードします
decodeURIComponent`encodeURIComponent`または類似のルーチンによって以前に作成されたURI (Uniform Resource Identifier) コンポーネントをデコードします
DOMExceptionDOMで発生するエラーを表します
encodeURIUTF-8文字のエンコーディングを表す1、2、3、または4つのエスケープシーケンスによって、特定の文字の各インスタンスを置き換えることで、URI (Uniform Resource Identifier) をエンコードします
encodeURIComponentUTF-8文字のエンコーディングを表す1、2、3、または4つのエスケープシーケンスによって、特定の文字の各インスタンスを置き換えることで、URI (Uniform Resource Identifier) コンポーネントをエンコードします
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汎用的な固定長バイナリデータバッファを表します
String文字のシーケンスを表します
structuredClone値のディープコピーを作成します
Symbolオブジェクトプロパティのキーとして使用される、ユニークで不変のデータ型を表します
SyntaxError構文的に無効なコードを解釈しようとしたときに発生するエラーを表します
TypeError値が期待される型ではない場合に発生するエラーを表します
Uint8Array8ビット符号なし整数の型付き配列を表します
Uint8ClampedArray0-255にクランプされた8ビット符号なし整数の型付き配列を表します
Uint32Array32ビット符号なし整数の型付き配列を表します
URIErrorグローバルURI処理関数が誤った方法で使用された場合に発生するエラーを表します
URLオブジェクトURLを作成するために使用される静的メソッドを提供するオブジェクトを表します
URLPatternURLパターンを表します
URLSearchParamsキー/値のペアのコレクションを表します
WeakMapキーが弱参照されるキー/値のペアのコレクションを表します
WeakSet各オブジェクトが一度しか出現しないオブジェクトのコレクションを表します
WebAssemblyWebAssemblyへのアクセスを提供します

Next.js固有のPolyfills

環境変数

process.envを使用して、`next dev`と`next 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モジュールをコンパイルし、インスタンス化します

まれに、コードに動的なコード評価ステートメントが含まれる(またはインポートされる)ことがありますが、これらは*ランタイムで到達できない*か、ツリーシェイキングによって削除できません。ミドルウェア設定で特定のファイルを許可するようにチェックを緩和できます。

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

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