Cloudflare Workers ランタイムは V8 JavaScript および WebAssembly エンジンの上に構築されています。Workers ランタイムは少なくとも週 1 回更新され、少なくとも Google Chrome の安定版リリースが現在使っている V8 のバージョンになります。そのため、トランスパイラーなしで最新の JavaScript 機能を安全に使えます。
現在の Google Chrome 安定版がサポートする 標準組み込みオブジェクト ↗ は、次の主な例外を除き、すべてサポートされます。
- セキュリティ上の理由で、次は使えません。
eval()new FunctionWebAssembly.compile↗WebAssembly.compileStreaming↗- バッファー引数を取る
WebAssembly.instantiate↗ WebAssembly.instantiateStreaming↗
Date.now()は最後の I/O の時刻を返します。コード実行中には進みません。
次のメソッドは Worker Global Scope ↗ に従って利用できます。
-
atob()
- base-64 エンコードされたデータ文字列をデコードします。
-
btoa()
- バイナリデータの文字列から、base-64 エンコードされた ASCII 文字列を作成します。
-
setInterval()
- 指定したミリ秒が経過するたびに関数を実行するようスケジュールします。
-
clearInterval()
setInterval()↗ で設定した繰り返し実行をキャンセルします。
-
setTimeout()
- 指定した時間のあとで関数を実行するようスケジュールします。
-
clearTimeout()
setTimeout()↗ で設定した遅延実行をキャンセルします。
-
- 指定したミリ秒のあとで解決する Promise を返します。
setTimeout()のawait可能な代替です。
- 指定したミリ秒のあとで解決する Promise を返します。
-
performance.timeOrigin
- 高分解能の time origin を返します。Workers は UNIX epoch を time origin として使うため、
performance.timeOriginは常に0を返します。
- 高分解能の time origin を返します。Workers は UNIX epoch を time origin として使うため、
-
performance.now()
performance.timeOriginからの経過ミリ秒を表すDOMHighResTimeStampを返します。Workers は意図的にperformance.now()の精度を下げ、最後の I/O の時刻を返し、コード実行中には進みません。このため、かつperformance.timeOriginが常に0であるため、performance.now()は常にDate.now()と等しくなり、Worker 内での時間の経過について一貫した見方を提供します。
EventTarget ↗ と Event ↗ API を使うと、オブジェクトがイベントを発行し、購読できます。
AbortController ↗ と AbortSignal ↗ API は、非同期操作をキャンセルするための共通モデルを提供します。
- fetch()
- ネットワークからリソースを取得する処理を開始します。Fetch API を参照してください。
TextEncoder と TextDecoder はどちらも UTF-8 のエンコード / デコードに対応しています。
TextEncoderStream ↗ と TextDecoderStream ↗ クラスも利用できます。
URL API は、HTTP および HTTPS スキームに準拠する URL をサポートします。
CompressionStream と DecompressionStream クラスは、deflate、deflate-raw、gzip の圧縮方式に対応しています。
URLPattern API は、扱いやすいパターン構文で URL を照合する仕組みを提供します。
Intl API を使うと、日付、時刻、数値などを、指定したロケール(言語と地域)で使われる形式に整形できます。
global_navigator compatibility flag を設定すると、navigator.userAgent ↗ プロパティが 'Cloudflare-Workers' という値で利用できます。たとえば、コードが Workers 環境で動いていることを確実に判定するために使えます。
拒否ハンドラーが付いていない JavaScript Promise が拒否されると、グローバルスコープは unhandledrejection ↗ イベントを発行します。
JavaScript Promise の拒否が遅れて処理されたとき(unhandledrejection イベント発行後に拒否ハンドラーが付いたとき)、グローバルスコープは rejectionhandled ↗ イベントを発行します。
addEventListener("unhandledrejection", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});
addEventListener("rejectionhandled", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});global_navigator compatibility flag を設定すると、navigator.sendBeacon(...) ↗ API を使い、少量のデータを含む HTTP POST リクエストを Web サーバーへ送れます。この API は、分析や診断情報をベストエフォートで非同期送信するための手段です。
たとえば、次のコードを
const promise = fetch("https://example.com", {
method: "POST",
body: "hello world",
});
ctx.waitUntil(promise);navigator.sendBeacon(...) に置き換えられます。
navigator.sendBeacon("https://example.com", "hello world");enable_web_file_system compatibility flag を設定すると、Workers は Web File System Access API ↗ をサポートします。Worker 環境内の仮想ファイルシステムに対して、ファイルとディレクトリの読み書きができます。この API は node:fs モジュール と同じインメモリ仮想ファイルシステムへアクセスしますが、Node.js 互換性を有効にする必要はありません。
const root = await navigator.storage.getDirectory();
export default {
async fetch(request) {
const fileHandle = await root.getFileHandle("hello.txt", { create: true });
const writable = await fileHandle.createWritable();
await writable.write("Hello, world!");
await writable.close();
const file = await fileHandle.getFile();
const contents = await file.text();
return new Response(contents, { status: 200 });
},
};この API の使い方は MDN ドキュメント ↗ を、仮想ファイルシステムの構造と制限は node:fs ドキュメント を参照してください。