Cloudflare Workers は、サーバーレスコードを Cloudflare のグローバルネットワークへすぐにデプロイできます。
Cloudflare 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 を効率的にしています。
Workers は isolates を使います。isolate は軽量なコンテキストで、コードがアクセスできる変数と、安全に実行できる環境を提供します。isolate を、関数を実行するサンドボックスと考えることもできます。
1 つのランタイムインスタンスは、数百から数千の isolate を実行し、それらの間をシームレスに切り替えられます。各 isolate のメモリは完全に分離されているため、ランタイム上の他の信頼できないコードやユーザーが書いたコードから、それぞれのコードが保護されます。isolate は非常に速く起動するようにも設計されています。関数ごとに仮想マシンを作るのではなく、既存の環境内に isolate を作成します。このモデルにより、仮想マシンモデルのコールドスタートがなくなります。
他のサーバーレスプロバイダーは、言語ランタイムのインスタンスをそれぞれ実行する コンテナ化されたプロセス ↗ を使います。一方、Workers はコンテナ起動時に JavaScript ランタイムのオーバーヘッドを一度だけ負担します。Workers のプロセスは、個別のオーバーヘッドをほぼゼロのまま、実質的に無制限のスクリプトを実行できます。任意の isolate は、コンテナや仮想マシン上の Node プロセスより約 100 倍速く起動できます。特に、起動時のメモリ消費は isolate の方が 1 桁少なくなります。
ほとんどの 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 のグローバルネットワークにデプロイします。
- コンテナなしのクラウドコンピューティング ↗ — Cloudflare の文脈で、コンテナと isolate の違いを説明するブログ記事です。
- Workers の仕組み — Workers ランタイムと、従来のブラウザーおよび Node.js の違いを学びます。
- キャッシュの仕組み — Workers が Cloudflare キャッシュとどうやり取りするかを学びます。
このラーニングパスの改善、または不足・誤りの報告は、GitHub で issue を作成 ↗してください。
Cloudflare Developer Platform の Discord コミュニティ ↗ で質問し、作っているものを共有し、ほかの開発者とプラットフォームについて話し合えます。