CLOUDFLARE

Cloudflare for SaaS +
Workers for Platforms

マルチテナント SaaS を Cloudflare でつくる

2026/07/02 - Norimitsu Takahashi

本日のアジェンダ

01Cloudflare for SaaS とは
02Workers for Platforms とは
03構成と実装
04デモサイト
05キャッシュ戦略
06ユースケース
2

全体像

Cloudflare for SaaS
顧客のドメインで SaaS を提供。SSL 証明書の自動発行、カスタムホスト名管理
Workers for Platforms
テナントごとに隔離された Worker を動的デプロイ。API 経由で無制限にスケール
組み合わせの価値
顧客ドメインのアクセスをテナント専用 Worker にルーティング。CMS / EC / LP ビルダーの基盤
3
01

Cloudflare for SaaS とは

顧客のドメインで SaaS を提供する仕組み

SaaS プロバイダーが、自社のインフラ上で顧客独自のドメインを受け入れる機能

機能
  • 顧客のドメイン (例: mystore.example.com) で SaaS サービスを提供
  • SSL 証明書を自動発行・更新。顧客側の作業は CNAME 追加のみ
  • 全顧客のトラフィックを 1 つのオリジンに集約 (Fallback Origin)
利用事例
  • Shopify: 顧客独自ドメインでネットショップを運営
  • BASE: 独自ドメインの EC ストアを Cloudflare 経由で配信
  • WordPress VIP / WP Engine: マネージドホスティングで独自ドメイン対応
  • 本デモ: cffs.nori-labo.com を norimiso.net のインフラで配信
5

Custom Hostname と Fallback Origin

Fallback Origin = 顧客ドメインのリクエストを受け止めるデフォルトの宛先

顧客側 (例: shop.example.com)
  • DNS に CNAME を追加:
    shop.example.com CNAME fallback.saas.com
  • これだけで SSL 証明書が自動発行される
  • 顧客は Cloudflare アカウント不要
SaaS プロバイダー側 (例: saas.com)
  • Fallback Origin (fallback.saas.com) を Proxied A レコードで作成
  • Custom Hostname に shop.example.com を登録
  • Worker Route で全リクエストを Workers が処理
  • ホスト名に応じてテナント別コンテンツを返却
6
02

Workers for Platforms とは

テナント Worker とは

TENANT WORKER
  • SaaS の各顧客 (テナント) 専用に動作する Worker
  • プラットフォーム側が API で動的にデプロイ・更新・削除
  • 顧客ごとに異なるコード、異なる Static Assets を持てる
  • Dispatch Namespace という隔離されたコンテナに格納
デプロイ方法
  • REST API または TypeScript SDK でプログラマティックにデプロイ
  • SaaS の管理画面や CI/CD パイプラインから自動実行
  • wrangler deploy --dispatch-namespace でも可能
  • Dispatcher Worker がホスト名やパスでテナント Worker を呼び分け
8

Dispatch Worker と Tenant Worker

Workers for Platforms は 2 種類の Worker で構成される。「門番」と「住人」の関係

Dispatch Worker (門番)
  • すべてのリクエストを最初に受け取る 1 つの Worker
  • ホスト名やパスを見て、どのテナントに転送するか決定
  • 認証・キャッシュ・ログなどの共通処理を担当
  • プラットフォーム側が管理する 信頼された Worker

例: cffs-dispatcher が Hono でルーティングし、R2 配信やキャッシュ制御も行う

Tenant Worker (住人)
  • 各テナント (顧客) 専用の 隔離された Worker
  • Dispatch Namespace に格納され、API で動的にデプロイ
  • テナント固有のコード・Static Assets を持てる
  • Untrusted mode でリソース制限 (CPU・リクエスト数)

例: cffs-tenant-norimiso が /api/info を返し、Static Assets (index.html) を配信

9

似ている機能との違い

Workers for Platforms は「プラットフォーム事業者がテナントのコードを本番運用する」ための仕組み

Workers for Platforms
テナントごとに本番 Worker をデプロイ。CMS / EC / SaaS の基盤。テナント数無制限、Untrusted mode で隔離
Sandbox SDK (Dynamic Workers)
AI が生成したコードを安全に実行するサンドボックス。一時的な実行向け。Vibe Coding、コードインタープリター
通常の Workers
開発者が wrangler deploy でデプロイ。1 アカウント 500 Worker 上限。自社サービスのバックエンド向け
10

通常の Workers との機能比較

通常の Workers
  • アカウントあたり 500 Worker 上限
  • テナント追加のたびに再デプロイ
  • セキュリティ隔離は手動
Workers for Platforms
  • Dispatch Namespace 内は Worker 数無制限
  • API で動的にテナント Worker をデプロイ
  • Untrusted mode で自動セキュリティ隔離
  • テナント別 CPU / リクエスト制限
11
03

構成と実装

リクエストフロー

User
1
ドメインにアクセス
cffs.norimiso.net または cffs.nori-labo.com
Cloudflare
2
Custom Hostname 解決
Cloudflare for SaaS がホスト名をマッチ
3
Dispatcher へ転送
Fallback Origin 経由でルーティング
Workers
4
テナント Worker 呼び出し
Workers for Platforms で動的 dispatch
5
コンテンツ返却
R2 / D1 からテナント固有のデータ取得
13

デモサイトの構成図

USERS cffs.norimiso.net Worker Route (自社ゾーン) cffs.nori-labo.com Custom Hostname CLOUDFLARE EDGE Cloudflare for SaaS Custom Hostname (nori-labo.com) WORKERS FOR PLATFORMS cffs-dispatcher Hono + Cache API + Images | Dispatch Worker (trusted) DISPATCH NAMESPACE: cffs-production cffs-tenant-norimiso Tenant A: Static Assets + /api/info cffs-tenant-norilabo Tenant B: Static Assets + /api/info cffs-contents D1 (Content API) Cache Edge PoP Images WebP / AVIF R2 STORAGE norimiso/ norilabo/ content.html (Astro) hero.jpg → Images
14

構成コンポーネント

cffs-dispatcher
Dispatch Worker (Hono)。ホスト名ルーティング、Cache API + Cache Tags、Images binding (WebP/AVIF 自動変換)、R2 配信、D1 取得
cffs-tenant-*
Tenant Worker。Workers for Platforms の Dispatch Namespace に格納。テナント固有の Static Assets と API を提供
cffs-contents
Content API Worker。D1 データベースからドメインに応じたコンテンツを返却
15

Static Assets と R2 の使い分け

Static Assets は通常の Workers でも使える。Workers for Platforms 限定ではない

Static Assets
  • wrangler deploy でコードと一緒にアップロード
  • ETag・Brotli 圧縮・304 が自動で効く
  • env.ASSETS.fetch() で Worker から読み取り
  • SPA (React/Vue) + API のフルスタック構成に最適
  • ストレージ 無料 (25 MiB/ファイル、最大 100K ファイル)

デモ: Tenant Worker の index.html は Static Assets で配信

R2 (Object Storage)
  • API / CLI で個別にアップロード (デプロイとは独立)
  • 読み書き可能 (get/put/delete)
  • 最大 5 TB/オブジェクト、S3 互換 API
  • ユーザーアップロード・動画・バックアップ向き
  • キャッシュは自分で Cache API 等を組む

デモ: レストランページ (Astro ビルド) は R2 に格納

16
04

デモサイト

デモサイト

cffs.norimiso.net

SaaS プロバイダー側

  • 東京都の区データを表示 (D1)
  • からあげ店のレストランページ (Astro ビルド → R2 配信)
cffs.nori-labo.com

顧客ドメイン側 (Cloudflare for SaaS 経由)

  • 大阪府の区データを表示 (D1)
  • 寿司店のレストランページ (Astro ビルド → R2 配信)

両サイトとも同じ Dispatcher Worker (Hono) を経由。ホスト名で切り替え。画像は Images binding で WebP/AVIF に自動変換

18
05

キャッシュ戦略

Workers Cache API でエッジキャッシュを制御

Dispatcher Worker (Hono) が caches.default を使い、R2/D1 レスポンスをエッジ PoP にキャッシュ

Cache API の基本
  • caches.default でゾーンキャッシュを操作
  • cache.match() でヒット確認、cache.put() で書き込み
  • Cache-Control: max-age で TTL 制御
  • R2 コンテンツ: 3600 秒、動的ページ: 300 秒、画像: 86400 秒
Cache Tags (Enterprise)
  • Cache-Tag ヘッダーでテナント単位のタグを付与
  • 例: tenant:norimiso,type:r2
  • Cloudflare API でタグ単位のパージが可能
  • WfP の Untrusted Worker では caches.default 無効 → Dispatcher で管理
  • Images binding: R2 画像を Accept ヘッダで WebP/AVIF に自動変換

X-Cache: HIT/MISS ヘッダーでキャッシュ状態を可視化

20

マルチテナントキャッシュとパージ

顧客ドメインのキャッシュは SaaS プロバイダーのゾーンで一元管理

Cloudflare for SaaS + キャッシュ
  • cffs.nori-labo.com へのリクエストも norimiso.net ゾーンのキャッシュに保存
  • 顧客は Cloudflare アカウント不要 (DNS CNAME を向けるだけ)
  • URL が異なるため、テナント間でキャッシュが混ざらない
  • キャッシュはエッジ PoP ごとに保持 (日本、US、EU...)
パージ API
  • POST /api/purge エンドポイント (Bearer 認証)
  • パス指定: 特定 URL のキャッシュを個別削除
  • ホスト指定: テナント単位でまとめて削除
  • Cache Tags: Cloudflare API でタグベースの一括パージ (Enterprise)

コンテンツ更新 (R2 アップロード / D1 UPDATE) の後にパージ API を呼ぶだけで即時反映

21
06

ユースケース

Cloudflare for SaaS + Workers for Platforms で実現できること

CMS / サイトビルダー
顧客が独自ドメインでウェブサイトを公開。テナント Worker がテンプレートとコンテンツを配信。R2 に画像・CSS・HTML を格納
EC プラットフォーム
テナントごとに商品データ・決済設定・デザインが異なるネットショップ。Shopify モデルを自前で構築可能
ホワイトラベル SaaS
1 つのアプリを複数の企業ブランドで提供。ドメイン・ロゴ・色を顧客ごとにカスタマイズ。コードベースは共通

顧客数が増えてもインフラ変更不要。API で Custom Hostname と Tenant Worker を追加するだけでスケール

23
THANK YOU

マルチテナント SaaS を
グローバルに展開

Cloudflare for SaaS + Workers for Platforms