TERASU_for_SaaS配信基盤_開発依頼書
TERASU for SaaS 配信基盤 開発依頼書 v1
顧客HPを「1つの基盤」で量産配信する(100〜1000社・最大5万ドメイン)。 Cloudflare Pagesの100プロジェクト上限を回避し、顧客の独自ドメインを自動登録。別セッションで実装するための自己完結ドキュメント。
2026-06-08 大串決定:サーバーは Cloudflareで確定。顧客HP配信を Pages(顧客ごと1プロジェクト)→ for SaaS(マルチテナント1基盤) へ移行。Vercel/レンタルサーバーは不採用。理由=静的HP量産に最適・帯域無制限・100ホスト名まで$0・5万ドメイン対応。出典 TERASU_配信アーキテクチャ構想。
2026-06-08 Phase1〜3 実装完了・本番稼働
本番: https://terasu-platform.y-ogushi.workers.dev / リポ~/dev/terasu-platform/(GitHub未push)
実装済: 配信(Host→D1→KV/R2)・管理ダッシュボード(顧客CRUD/サイト差替/公開切替)・バージョン管理+1クリックロールバック・Custom Hostnames連携コード・移行スクリプト(scripts/migrate.mjs)
リソース: D1terasu-platform/ KVSITES/ R2terasu-assets(アカウント y-ogushi@scale-group.co.jp)
2026-06-08 追記:① Custom Hostnames 有効化完了(ダッシュボードでCloudflare for SaaS を Activate=$0開始 → fallback originsaas.scale-group.co.jp+DNS(proxied)+Worker Routesaas.scale-group.co.jp/*→terasu-platform+secretCF_API_TOKEN/CF_ZONE_ID設定 → 登録APIテスト成功・クリーンアップ済)。② 監視cron 稼働(/5・死活→自動ロールバック)。
※学び: Custom Hostnamesは「Workers Paid必須」ではなく SSL/TLS→Custom Hostnames→Enable が必要(全プラン$0・100ドメインまで)。
残は実顧客の運用のみ*: 顧客登録+独自ドメイン追加(管理画面の独自ドメインボタン → 顧客がCNAMEをsaas.scale-group.co.jpへ → SSL自動発行)+既存HP移行(scripts/migrate.mjs)。料金=100ドメインまで$0/超過$0.10月。
クイックアクセス(依頼サマリ)
依頼サマリ
| 項目 | 値 |
|---|---|
| 名称 | TERASU 配信基盤(for SaaS) |
| ゴール | 全顧客HPを1基盤で配信・独自ドメイン自動登録・量産対応 |
| 実装 | 3フェーズ(MVP→自動登録/管理画面→移行・本番化)|
| 想定工数 | 10〜15営業日(フル装備)|
| 新規リポジトリ(推奨)|~/dev/terasu-platform/(Drive外・Git連携を本番経路に)|
| 配信 | Cloudflare Workers + Custom Hostnames(for SaaS)|
| データ | D1(テナント管理)/ KV(HTML)/ R2(画像・アセット)|
| コスト | 100社まで $0 / 1000社 約 $90/月 + Workers Paid $5/月 |
| 主担当 | 別セッションで実装 |
1. 別セッション開始時のキックオフプロンプト(コピペ用)
TERASU for SaaS 配信基盤の開発を進めます。
【依頼書】
~/Obsidian/SCALE-Brain/40_新規事業/TERASU/TERASU_for_SaaS配信基盤_開発依頼書.md
【新規リポジトリ(推奨)】
~/dev/terasu-platform/ ← Drive外・GitHub: scale-group-jp/terasu-platform
(Drive配下に置かない=同期事故/100プロジェクト上限回避。Git連携を唯一の本番経路に)
【スタック】
Cloudflare Workers(配信) + D1(テナント) + KV(HTML) + R2(画像) + Custom Hostnames API(独自ドメイン)
【作業前に読むべきもの】
1. この依頼書 全文
2. <a href="/n/9bdf860f61.html" class="wikilink">TERASU_配信アーキテクチャ構想</a>(背景・段階ロードマップ)
3. <a href="/n/d12b18c838.html" class="wikilink">TERASU_技術・作り方の説明</a>(顧客HPは静的HTML/CSS/JS)
4. グローバル CLAUDE.md(退化禁止・デプロイ前バックアップ・preview必須は社内ツール除外)
2. 背景・目的
| 観点 | 内容 |
|---|---|
| 現状 | 顧客HPを 顧客ごとにCloudflare Pages 1プロジェクトで配信 |
| 課題 | Pagesは ソフトリミット100プロジェクト/アカウント。デモ+自社システム+顧客HPで もうすぐ上限(2026-06-08 大串) |
| 目的 | 1つの配信基盤で全顧客HPを配信(マルチテナント)。顧客が増えてもPagesプロジェクト枠を消費しない |
| ゴール規模 | 100〜1000社(将来5万社まで) |
3. アーキテクチャ
| 要素 | 役割 |
|---|---|
| Cloudflare Workers | リクエストの Host ヘッダ → 顧客ID解決 → 該当サイトのHTMLを配信 |
| D1(SQLite) | テナント(顧客)管理・ドメイン・公開ステータス・バージョン |
| KV | 各顧客サイトの HTML(高速読み出し) |
| R2 | 画像・アセットのストレージ |
| Custom Hostnames API(for SaaS) | 顧客の独自ドメインを自動登録(最大5万・100まで$0)+ SSL自動発行 |
配信フロー(直列):
顧客ドメインへのアクセス → Worker が Host で顧客ID解決(D1) → KVからHTML取得 → R2の画像と合わせて配信 → SSLはCustom Hostnameで自動
4. 機能要件(フェーズ別)
Phase 1:配信MVP(最優先・動作の核)
- [ ] Worker:Host ヘッダ → 顧客ID解決 → KVのHTML配信
- [ ] D1スキーマ作成(tenants / sites)
- [ ] KVに顧客HTML、R2に画像を格納する仕組み
- [ ] 1社分を手動登録して、テスト独自ドメインで表示確認
- [ ] テンプレHTML × 顧客データ分離の格納形式を確定
Phase 2:独自ドメイン自動登録 + 管理ダッシュボード
- [ ] Custom Hostnames API 連携(ドメイン追加 → DNS案内(CNAME) → SSL自動発行)
- [ ] 管理ダッシュボード(顧客サイト一覧・新規登録・HTML差し替え・公開/非公開)
- [ ] 顧客サイトのバージョン管理(差し替え履歴・1クリックロールバック)
Phase 3:既存Pages移行 + 本番化・事故防止
- [ ] 既存Pages顧客HPの 移行スクリプト(HTML/asset抽出 → D1/KV/R2へ流し込み)
- [ ] ドメインを for SaaS へ向け替え(DNS切替)→ 検証 → 切替 → 旧Pages削除(枠解放)
- [ ] デプロイ経路一元化(管理画面/Git経由のみ・直接アップロード封じ)
- [ ] ver番号チェック+自動復旧(自社HP monitorと同方式・巻き戻り事故防止)
5. データ設計(D1・最小案)
| テーブル | 主なカラム |
|---|---|
tenants |
id, 顧客名, primary_domain, status(public/private), created_at |
sites |
id, tenant_id, kv_key(HTML参照), version, published_at |
custom_hostnames |
id, tenant_id, hostname, cf_hostname_id, ssl_status |
- HTML本体 → KV(key例:
site:{tenant_id}:{version}) - 画像・アセット → R2(path例:
{tenant_id}/assets/...)
6. Custom Hostnames(独自ドメイン)フロー
- 管理画面で顧客ドメインを追加 → Cloudflare API に Custom Hostname 登録
- 顧客に CNAME設定を案内(顧客のドメイン → TERASU基盤のフォールバックオリジン)
- Cloudflare が所有権確認 → SSL証明書を自動発行
- 以後、そのドメインへのアクセスは Worker が該当顧客サイトを配信
- 料金:100ホスト名まで$0、101以降 1件 $0.10/月
7. セキュリティ・事故防止(必須)
- 本番反映は管理画面 or Git経由のみ(
wrangler ... --prod直叩き等の直接アップロードを封じる → 古い版で巻き戻る事故を構造的に防止) - 各顧客サイトに ver番号 を持たせ、監視+自動復旧(自社TERASU公式HPで2回起きた巻き戻り事故の教訓・_SCALE_TERASU_HP_バージョン管理表)
- ステージング → 本番の2段(外販に直結するため preview 相当を必須)
8. コスト
| 規模 | 配信コスト | 補足 |
|---|---|---|
| 〜100社 | $0(Custom Hostnames無料枠) | + Workers Paid $5/月程度 |
| 1000社 | 約$90/月(100社超分 × $0.10) | 月売上1000万に対し誤差 |
| 〜5万社 | 従量 | 上限5万ドメイン |
→ 100社未満の今、前倒しで移行してもコスト増なし(無料枠内)。
9. 並行アクション(基盤完成までの保険)
- Cloudflare Pages のソフトリミット100を引き上げ申請(無料・フォーム申請)。基盤が出来るまでの当面、Pages運用が詰まらないようにする。
- 申請先:Cloudflare ダッシュボード → Pages → 上限到達時の案内 or アカウントチーム/Limit Increase Request Form
10. 進め方
- 今:このリポジトリ作成(
~/dev/terasu-platform/)→ Phase 1(配信MVP・1社で表示確認) - Phase 2(自動登録・管理画面)→ Phase 3(既存移行・本番化)
- 移行完了後:顧客HPは for SaaS、Pagesは自社システム/デモ用に温存
関連
- TERASU_配信アーキテクチャ構想 — 背景・段階ロードマップ(決定の母体)
- TERASU_技術・作り方の説明 — 顧客HPは静的HTML/CSS/JS
- _SCALE_TERASU_HP_バージョン管理表 — 巻き戻り事故・monitor自動復旧
- 31_システム開発部/_SCALE_全システム配置マップ — 新リポジトリ登録先
- memory:
project_terasu_hosting_decision.md(サーバー=Cloudflare for SaaS確定)