Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Web 標準

最終更新 Markdown で表示Agent セットアップ

JavaScript 標準

Cloudflare Workers ランタイムは V8 JavaScript および WebAssembly エンジンの上に構築されています。Workers ランタイムは少なくとも週 1 回更新され、少なくとも Google Chrome の安定版リリースが現在使っている V8 のバージョンになります。そのため、トランスパイラーなしで最新の JavaScript 機能を安全に使えます。

現在の Google Chrome 安定版がサポートする 標準組み込みオブジェクト は、次の主な例外を除き、すべてサポートされます。


Web 標準とグローバル API

次のメソッドは Worker Global Scope に従って利用できます。

Base64 ユーティリティメソッド

  • atob()

    • base-64 エンコードされたデータ文字列をデコードします。
  • btoa()

    • バイナリデータの文字列から、base-64 エンコードされた ASCII 文字列を作成します。

タイマー

  • setInterval()

    • 指定したミリ秒が経過するたびに関数を実行するようスケジュールします。
  • clearInterval()

  • setTimeout()

    • 指定した時間のあとで関数を実行するようスケジュールします。
  • clearTimeout()

  • scheduler.wait()

    • 指定したミリ秒のあとで解決する Promise を返します。setTimeout()await 可能な代替です。

performance.timeOriginperformance.now()

  • performance.timeOrigin

    • 高分解能の time origin を返します。Workers は UNIX epoch を time origin として使うため、performance.timeOrigin は常に 0 を返します。
  • performance.now()

    • performance.timeOrigin からの経過ミリ秒を表す DOMHighResTimeStamp を返します。Workers は意図的に performance.now() の精度を下げ、最後の I/O の時刻を返し、コード実行中には進みません。このため、かつ performance.timeOrigin が常に 0 であるため、performance.now() は常に Date.now() と等しくなり、Worker 内での時間の経過について一貫した見方を提供します。

EventTargetEvent

EventTargetEvent API を使うと、オブジェクトがイベントを発行し、購読できます。

AbortControllerAbortSignal

AbortControllerAbortSignal API は、非同期操作をキャンセルするための共通モデルを提供します。

Fetch グローバル

  • fetch()
    • ネットワークからリソースを取得する処理を開始します。Fetch API を参照してください。

Encoding API

TextEncoderTextDecoder はどちらも UTF-8 のエンコード / デコードに対応しています。

詳細は MDN ドキュメントを参照してください

TextEncoderStreamTextDecoderStream クラスも利用できます。


URL API

URL API は、HTTP および HTTPS スキームに準拠する URL をサポートします。

詳細は MDN ドキュメントを参照してください


Compression Streams

CompressionStreamDecompressionStream クラスは、deflate、deflate-raw、gzip の圧縮方式に対応しています。

詳細は MDN ドキュメントを参照してください


URLPattern API

URLPattern API は、扱いやすいパターン構文で URL を照合する仕組みを提供します。

詳細は MDN ドキュメントを参照してください


Intl

Intl API を使うと、日付、時刻、数値などを、指定したロケール(言語と地域)で使われる形式に整形できます。

詳細は MDN ドキュメントを参照してください


global_navigator compatibility flag を設定すると、navigator.userAgent プロパティが 'Cloudflare-Workers' という値で利用できます。たとえば、コードが Workers 環境で動いていることを確実に判定するために使えます。

未処理の Promise 拒否

拒否ハンドラーが付いていない JavaScript Promise が拒否されると、グローバルスコープは unhandledrejection イベントを発行します。

JavaScript Promise の拒否が遅れて処理されたとき(unhandledrejection イベント発行後に拒否ハンドラーが付いたとき)、グローバルスコープは rejectionhandled イベントを発行します。

worker.jsjs
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");

Web File System Access API

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 ドキュメント を参照してください。

役に立ちましたか?