Skip to content

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

Cloudflare Workers

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

Cloudflare Workers は、サーバーレスコードを Cloudflare のグローバルネットワークへすぐにデプロイできます。

Cloudflare Workers は、実行モデルとアーキテクチャがほかのサーバーレスコンピューティングプロバイダーと大きく異なります。

Workers でできること

1 つの Worker プロジェクトのロジックは、開発者が望むだけ複雑にも単純にもできます。小規模なプロジェクトは、単一ルートで 小さな HTML ページを返す Worker のようなものです。より複雑な Worker プロジェクトは、複数ドメイン、各ドメインの複数ルート、ルートごとの異なるロジックにまたがります。アーキテクチャの複雑さは開発者が決めます。

アプリケーションは、複数の Worker が連携し、エンドユーザーに 1 つの体験を届ける構成にもできます。Workers はストレージ、メディア、AI など、ほかの Cloudflare Developer Platform の機能とも統合できます。詳細は Developer Platform モジュール で学びます。

ランタイム

Workers ランタイム は、JavaScript 標準に準拠し、Web と相互運用できるように設計されています。Workers ランタイムは V8 エンジン(Chromium と Node.js が使うエンジンと同じ)を使い、オープンソース版の workerd があります。

実行

Cloudflare Workers ランタイムは、Cloudflare のグローバルネットワーク のすべてのデータセンターで動きます。すべての Worker は独自の isolate 内で実行されます。isolate アーキテクチャが Workers を効率的にしています。

Isolates

Workers は isolates を使います。isolate は軽量なコンテキストで、コードがアクセスできる変数と、安全に実行できる環境を提供します。isolate を、関数を実行するサンドボックスと考えることもできます。

1 つのランタイムインスタンスは、数百から数千の isolate を実行し、それらの間をシームレスに切り替えられます。各 isolate のメモリは完全に分離されているため、ランタイム上の他の信頼できないコードやユーザーが書いたコードから、それぞれのコードが保護されます。isolate は非常に速く起動するようにも設計されています。関数ごとに仮想マシンを作るのではなく、既存の環境内に isolate を作成します。このモデルにより、仮想マシンモデルのコールドスタートがなくなります。

他のサーバーレスプロバイダーは、言語ランタイムのインスタンスをそれぞれ実行する コンテナ化されたプロセス を使います。一方、Workers はコンテナ起動時に JavaScript ランタイムのオーバーヘッドを一度だけ負担します。Workers のプロセスは、個別のオーバーヘッドをほぼゼロのまま、実質的に無制限のスクリプトを実行できます。任意の isolate は、コンテナや仮想マシン上の Node プロセスより約 100 倍速く起動できます。特に、起動時のメモリ消費は isolate の方が 1 桁少なくなります。

スケジューリングとルーティング
スケジューリングとルーティング
HTTP クライアント
HTTP クライアント
HTTP サーバー
HTTP サーバー
インバウンド
HTTP プロキシ
[Not supported by viewer]
アウトバウンド
HTTP プロキシ
[Not supported by viewer]
スーパーバイザー
[Not supported by viewer]
メインランタイムプロセス
メインランタイムプロセス
外側のサンドボックス
外側のサンドボックス
ディスク
ディスク
コントロールプレーン
[Not supported by viewer]
HTTP
[Not supported by viewer]
Cap'n Proto RPC
[Not supported by viewer]
プロセス内呼び出し
[Not supported by viewer]
その他
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
プロセス
サンドボックス
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
スケジューリングとルーティング
スケジューリングとルーティング
プロセス
サンドボックス
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
スケジューリングとルーティング
スケジューリングとルーティング

リクエストごとのコンピュート

ほとんどの Workers は、デフォルトの Workers フローのバリエーションです。

export default {
	async fetch(request, env, ctx) {
		return new Response('Hello World!');
	},
};
export default {
	async fetch(request, env, ctx): Promise<Response> {
		return new Response('Hello World!');
	},
} satisfies ExportedHandler<Env>;

ES modules 構文 で書いた Workers では、*.workers.dev サブドメインまたは Cloudflare 管理ドメインへのリクエストが Cloudflare のいずれかのデータセンターで受信されると、そのリクエストは Worker コードに定義した fetch() ハンドラー を、受け取ったリクエストとともに呼び出します。Response オブジェクトを返すことで、リクエストに応答できます。

まとめ

このページで次を学びました。

  • Worker プロジェクトの構成の基本
  • Cloudflare ネットワーク上での Workers 実行の基礎
  • リクエストから応答までの流れの実行

次のモジュールでは、最初の Worker を構築し、Cloudflare のグローバルネットワークにデプロイします。

関連リソース

フィードバック

このラーニングパスの改善、または不足・誤りの報告は、GitHub で issue を作成してください。

コミュニティ

Cloudflare Developer Platform の Discord コミュニティ で質問し、作っているものを共有し、ほかの開発者とプラットフォームについて話し合えます。

役に立ちましたか?