Edge Runtime
Next.js Edge Runtimeはミドルウェアで使用され、以下のAPIをサポートしています:
ネットワークAPI
API | 説明 |
---|---|
Blob | Blobを表します |
fetch | リソースを取得します |
FetchEvent | fetchイベントを表します |
File | ファイルを表します |
FormData | フォームデータを表します |
Headers | HTTPヘッダーを表します |
Request | HTTPリクエストを表します |
Response | HTTPレスポンスを表します |
URLSearchParams | URL検索パラメータを表します |
WebSocket | WebSocket接続を表します |
エンコーディングAPI
API | 説明 |
---|---|
atob | base-64エンコードされた文字列をデコードします |
btoa | 文字列をbase-64でエンコードします |
TextDecoder | Uint8Arrayを文字列にデコードします |
TextDecoderStream | ストリーム用のチェーン可能なデコーダ |
TextEncoder | 文字列をUint8Arrayにエンコードします |
TextEncoderStream | ストリーム用のチェーン可能なエンコーダ |
ストリームAPI
API | 説明 |
---|---|
ReadableStream | 読み取り可能なストリームを表します |
ReadableStreamBYOBReader | ReadableStreamのリーダーを表します |
ReadableStreamDefaultReader | ReadableStreamのリーダーを表します |
TransformStream | 変換ストリームを表します |
WritableStream | 書き込み可能なストリームを表します |
WritableStreamDefaultWriter | WritableStreamのライターを表します |
暗号API
API | 説明 |
---|---|
crypto | プラットフォームの暗号機能へのアクセスを提供します |
CryptoKey | 暗号鍵を表します |
SubtleCrypto | ハッシュ、署名、暗号化、復号化などの一般的な暗号プリミティブへのアクセスを提供します |
Web標準API
API | 説明 |
---|---|
AbortController | 1つ以上のDOMリクエストを必要に応じて中止することができます |
Array | 値の配列を表します |
ArrayBuffer | 汎用の固定長の生のバイナリデータバッファを表します |
Atomics | 静的メソッドとしてアトミック操作を提供します |
BigInt | 任意の精度を持つ整数を表します |
BigInt64Array | 64ビット符号付き整数の型付き配列を表します |
BigUint64Array | 64ビット符号なし整数の型付き配列を表します |
Boolean | 論理エンティティを表し、true とfalse の2つの値を持つことができます |
clearInterval | setInterval() の呼び出しによって以前に確立されたタイミングのある繰り返しアクションをキャンセルします |
clearTimeout | setTimeout() の呼び出しによって以前に確立されたタイミングのある繰り返しアクションをキャンセルします |
console | ブラウザのデバッグコンソールへのアクセスを提供します |
DataView | ArrayBuffer の汎用ビューを表します |
Date | プラットフォームに依存しない形式で単一の瞬間を表します |
decodeURI | encodeURI または類似のルーチンによって以前に作成されたUniform Resource Identifier(URI)をデコードします |
decodeURIComponent | encodeURIComponent または類似のルーチンによって以前に作成されたUniform Resource Identifier(URI)コンポーネントをデコードします |
DOMException | DOMで発生するエラーを表します |
encodeURI | 特定の文字の各インスタンスをUTF-8エンコーディングのエスケープシーケンスに置き換えることによってUniform Resource Identifier(URI)をエンコードします |
encodeURIComponent | 特定の文字の各インスタンスをUTF-8エンコーディングのエスケープシーケンスに置き換えることによってUniform Resource Identifier(URI)コンポーネントをエンコードします |
Error | ステートメントの実行またはプロパティへのアクセスを試みたときに発生するエラーを表します |
EvalError | グローバル関数eval() に関するエラーを表します |
Float32Array | 32ビット浮動小数点数の型付き配列を表します |
Float64Array | 64ビット浮動小数点数の型付き配列を表します |
Function | 関数を表します |
Infinity | 数学的な無限大の値を表します |
Int8Array | 8ビット符号付き整数の型付き配列を表します |
Int16Array | 16ビット符号付き整数の型付き配列を表します |
Int32Array | 32ビット符号付き整数の型付き配列を表します |
Intl | 国際化とローカライズ機能へのアクセスを提供します |
isFinite | 値が有限数かどうかを判断します |
isNaN | 値がNaN かどうかを判断します |
JSON | JavaScriptの値を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 | 値が期待される型でない場合に発生するエラーを表します |
Uint8Array | 8ビット符号なし整数の型付き配列を表します |
Uint8ClampedArray | 0-255にクランプされた8ビット符号なし整数の型付き配列を表します |
Uint32Array | 32ビット符号なし整数の型付き配列を表します |
URIError | グローバルURI処理関数が誤って使用されたときに発生するエラーを表します |
URL | オブジェクトURLを作成するために使用される静的メソッドを提供するオブジェクトを表します |
URLPattern | URLパターンを表します |
URLSearchParams | キー/値ペアのコレクションを表します |
WeakMap | キーが弱参照されるキー/値ペアのコレクションを表します |
WeakSet | 各オブジェクトが一度だけ出現するオブジェクトのコレクションを表します |
WebAssembly | WebAssemblyへのアクセスを提供します |
Next.js特有のポリフィル
環境変数
process.env
を使用して、next dev
とnext 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で実行されると、ランタイムエラーをスローして発生させることに注意してください。