Menu

エッジランタイム

Next.js には、アプリケーションで使用できる 2 つのサーバーランタイムがあります。

  • Node.js Runtime(デフォルト)。すべての Node.js API にアクセスでき、アプリケーションのレンダリングに使用されます。
  • Edge Runtime。より限定されたAPI セットを含み、Proxyで使用されます。

注意事項

  • Edge Runtime はすべての Node.js API をサポートしていません。一部のパッケージは期待通りに動作しない可能性があります。
  • Edge Runtime は Incremental Static Regeneration(ISR)をサポートしていません。
  • 両方のランタイムはデプロイアダプタに応じてストリーミングをサポートできます。

リファレンス

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 のライターを表します

Crypto API

API説明
cryptoプラットフォームの暗号化機能へのアクセスを提供します
CryptoKey暗号化キーを表します
SubtleCryptoハッシング、署名、暗号化、復号化などの一般的な暗号化プリミティブへのアクセスを提供します

Web 標準 API

API説明
AbortController1 つ以上の DOM リクエストを必要に応じて中止できます
Array値の配列を表します
ArrayBuffer汎用の固定長の生のバイナリデータバッファを表します
Atomicsアトミック操作を静的メソッドとして提供します
BigInt任意の精度を持つ整数を表します
BigInt64Array64 ビット符号付き整数の型付き配列を表します
BigUint64Array64 ビット符号なし整数の型付き配列を表します
Boolean論理値を表し、true または false のいずれかの値を持ちます
clearIntervalsetInterval() の呼び出しで以前に設定された時間指定の繰り返し動作をキャンセルします
clearTimeoutsetTimeout() の呼び出しで以前に設定された時間指定の繰り返し動作をキャンセルします
consoleブラウザのデバッグコンソールへのアクセスを提供します
DataViewArrayBuffer の汎用ビューを表します
Dateプラットフォーム非依存の形式で単一の時点を表します
decodeURIencodeURI またはこれに類するルーチンで作成された URI(Uniform Resource Identifier)をデコードします
decodeURIComponentencodeURIComponent またはこれに類するルーチンで作成された URI コンポーネントをデコードします
DOMExceptionDOM で発生するエラーを表します
encodeURIURI の各文字のインスタンスを、その UTF-8 エンコーディングを表す 1 つ、2 つ、3 つ、または 4 つのエスケープシーケンスに置き換えて、URI をエンコードします
encodeURIComponentURI コンポーネントの各文字のインスタンスを、その UTF-8 エンコーディングを表す 1 つ、2 つ、3 つ、または 4 つのエスケープシーケンスに置き換えて、URI コンポーネントをエンコードします
Errorステートメントの実行またはプロパティへのアクセス時に発生するエラーを表します
EvalErrorグローバル関数 eval() に関して発生するエラーを表します
Float32Array32 ビット浮動小数点数の型付き配列を表します
Float64Array64 ビット浮動小数点数の型付き配列を表します
Function関数を表します
Infinity数学的無大値を表します
Int8Array8 ビット符号付き整数の型付き配列を表します
Int16Array16 ビット符号付き整数の型付き配列を表します
Int32Array32 ビット符号付き整数の型付き配列を表します
Intl国際化とローカライゼーション機能へのアクセスを提供します
isFinite値が有限数かどうかを判定します
isNaN値が NaN であるかどうかを判定します
JSONJavaScript の値を JSON 形式に、または JSON 形式から変換する機能を提供します
Map各値が 1 回だけ発生するような値の集合を表します
Math数学関数と定数へのアクセスを提供します
Number数値を表します
Objectすべての JavaScript オブジェクトのベースであるオブジェクトを表します
parseFloat文字列引数をパースし、浮動小数点数を返します
parseInt文字列引数をパースし、指定した基数の整数を返します
Promise非同期操作の最終的な完了(または失敗)とその結果の値を表します
Proxy基本的な操作(プロパティ参照、割り当て、列挙、関数呼び出しなど)のカスタム動作を定義するために使用されるオブジェクトを表します
queueMicrotask実行するマイクロタスクをキューに入れます
RangeError値が許可される値の範囲内にない場合に発生するエラーを表します
ReferenceError存在しない変数を参照するときに発生するエラーを表します
Reflectインターセプト可能な JavaScript 操作のメソッドを提供します
RegExp正規表現を表し、文字の組み合わせをマッチできます
Set各値が 1 回だけ発生するような値の集合を表します
setInterval各呼び出し間に固定の時間遅延を持つ関数を繰り返し呼び出します
setTimeout指定されたミリ秒数の後に関数を呼び出すか、式を評価します
SharedArrayBuffer汎用の固定長の生のバイナリデータバッファを表します
String文字のシーケンスを表します
structuredClone値の深いコピーを作成します
Symbolオブジェクトプロパティのキーとして使用される一意で不変のデータ型を表します
SyntaxError構文的に無効なコードを解釈しようとするときに発生するエラーを表します
TypeError値が期待された型ではないときに発生するエラーを表します
Uint8Array8 ビット符号なし整数の型付き配列を表します
Uint8ClampedArray0~255 にクランプされた 8 ビット符号なし整数の型付き配列を表します
Uint32Array32 ビット符号なし整数の型付き配列を表します
URIErrorグローバル URI ハンドリング関数が不適切な方法で使用されたときに発生するエラーを表します
URLオブジェクト URL を作成するために使用される静的メソッドを提供するオブジェクトを表します
URLPatternURL パターンを表します
URLSearchParamsキー/値ペアの集合を表します
WeakMapキーが弱参照のキー/値ペアの集合を表します
WeakSet各オブジェクトが 1 回だけ発生するようなオブジェクトの集合を表します
WebAssemblyWebAssembly へのアクセスを提供します

Next.js 固有のポリフィル

環境変数

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

稀なケースでは、コードが動的コード評価ステートメント(実行時に到達できず、ツリーシェーキングで削除できないもの)を含む、またはインポートする可能性があります。 Proxy 設定で特定のファイルのチェックを緩和できます。

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

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

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