Astro + Workers
了解です 👍
「wrangler.toml が見つからない」= かなりよくある状況です 🚀
原因はほぼ次のどれかです。
🏆 原因①:Workerプロジェクトではない場所にいる
👉 wrangler.toml は
⚡ Worker プロジェクトのルートにだけ存在します
📌 正しい場所の例
ai-api/
├ src/
├ package.json
├ wrangler.toml ← ★ここ
└ node_modules/
🔍 今いる場所を確認
pwd
Windows の場合:
cd
📌 フォルダ移動
Worker を作ったフォルダへ:
cd ai-api
🏆 原因②:まだ Worker を作っていない
👉 wrangler.toml は自動生成されます
Worker作成コマンド
npm create cloudflare@latest
作成後:
Project name: ai-api
Template: Worker only
👉 完了すると自動生成
🏆 原因③:新しい形式では wrangler.json / wrangler.jsonc
2025以降は TOML 以外も使われます。
🔍 プロジェクト内を確認
dir
または
ls
📄 見つかる可能性
wrangler.toml
wrangler.json
wrangler.jsonc
👉 JSON形式ならそれを編集
🏆 原因④:Astroプロジェクトにいる
👉 フロント側には存在しません
ai-saas/ ← Astro
ai-api/ ← Worker(ここ)
🏆 最も確実な確認方法
📌 wrangler 設定ファイルを検索
Windows:
dir /s wrangler.*
Mac / Linux:
find . -name "wrangler.*"
🏆 ファイルが本当にない場合
👉 手動作成してOK
📄 wrangler.toml を新規作成
Workerフォルダで:
notepad wrangler.toml
またはエディタで新規作成
📄 最低構成(コピペ可)
name = "ai-api"
main = "src/index.js"
compatibility_date = "2026-03-16"
🏆 D1 を使う場合の完全形
name = "ai-api"
main = "src/index.js"
compatibility_date = "2026-03-16"
"d1_databases": [
{
"binding": "ai_db",
"database_name": "ai-db",
"database_id": "ここにID"
}
]
🏆 保存後の確認
npx wrangler deploy
👉 エラーが出なければOK 🎉
💎 超重要ポイント
Workerコード側は binding 名を使う
env.DB
👉 binding = “DB” と一致させる
🚀 99%の人が最短で直る方法
👉 Workerプロジェクトを作り直す
npm create cloudflare@latest
🧠 補足:Workers の基本構造
Worker project
├ src/index.js
├ wrangler.toml
├ package.json
必要なら👇
🔥 「Cloudflare Workers 完全初期セットアップ」
🔥 「Astro + Workers を一発で動かす方法」
🔥 「Next.js を Workers に最短デプロイ」
🔥 「Vercelより高速な構成」
🔥 「業務用AI SaaS完成テンプレ」
もし可能なら教えてください👇
👉 今いるフォルダ名
👉 実行したコマンド
👉 画面の表示
それだけで
💎 どこで詰まっているか100%特定できます 🚀
ここは Cloudflare D1 で最もつまずくポイントなので、
💡「コマンド実行 → ID取得 → wrangler.toml設定 → 動作確認」まで
画面の意味レベルで完全解説します 🚀
🏆 D1 の database_id 設定【完全手順】
① D1 データベースを作成
プロジェクトフォルダ(Worker側)で実行:
npx wrangler d1 create ai-db
② 出力の見方(超重要)
実行すると、次のような表示が出ます:
✅ Successfully created DB 'ai-db'
database_id = "12ab34cd-56ef-78gh-90ij-klmnopqrstuv"
Add the following to your wrangler.toml:
[[d1_databases]]
binding = "DB"
database_name = "ai-db"
database_id = "12ab34cd-56ef-78gh-90ij-klmnopqrstuv"
🔑 database_id とは?
👉 Cloudflare側のDBを識別する「世界唯一のID」
Worker から DB を呼び出すための接続先
③ wrangler.toml の場所
Workerプロジェクト内にあります:
ai-api/
├ src/
├ package.json
└ wrangler.toml ← ここ
④ wrangler.toml に追加する
📄 例(完全形)
name = "ai-api"
main = "src/index.js"
compatibility_date = "2026-03-16"
[[d1_databases]]
binding = "DB"
database_name = "ai-db"
database_id = "12ab34cd-56ef-78gh-90ij-klmnopqrstuv"
🧠 各項目の意味
🔹 binding = “DB”
👉 Worker内で使う変数名
env.DB
としてアクセスできる
🔹 database_name = “ai-db”
👉 作成したDBの名前
(識別用・必須)
🔹 database_id = “xxxxx”
👉 Cloudflare内部の接続ID
(これがないと接続不可)
⑤ Worker から使う方法
設定後、Workerコードで:
const result = await env.DB
.prepare("SELECT 1")
.all()
👉 env.DB = binding 名
⑥ 設定ミス時のエラー例
❌ database_id を入れていない
Error: D1 binding not found
❌ IDが間違っている
Error: Database does not exist
⑦ DB一覧を確認する方法
npx wrangler d1 list
👉 出力:
Name | Database ID
ai-db | 12ab34cd-56ef-78gh-90ij-klmnopqrstuv
💡 ここからIDをコピーしてもOK
⑧ 後から ID を取得する方法
npx wrangler d1 info ai-db
⑨ テーブル作成(確認用)
npx wrangler d1 execute ai-db --command "
CREATE TABLE test (
id INTEGER PRIMARY KEY,
name TEXT
);
"
npx wrangler d1 execute ai-db --command "CREATE TABLE test (id INTEGER PRIMARY KEY,name TEXT);"
⑩ ローカル開発で使う場合
npm run dev
👉 Wrangler が自動でローカルDBを作る
🏆 最終チェック(これで100%動く)
✔ wrangler.toml に追加した
✔ database_id が正しい
✔ binding 名が一致している
✔ Worker で env.DB を使っている
💎 実は重要:本番DBとローカルDB
Cloudflare D1 は:
ローカル → SQLite(ローカル)
本番 → Cloudflare Edge DB
👉 database_id は 本番用の接続先
🚀 よくある最強パターン(業務SaaS)
ユーザー
↓
Worker API
↓
D1(業務データ)
必要なら👇
🔥 「D1 + 認証付き完全テンプレ」
🔥 「D1でユーザー管理を作る方法」
🔥 「ログイン機能の実装手順」
🔥 「KVとの使い分け」
🔥 「本番で壊れないDB設計」
👉 どこまで作りますか?
「業務用SaaSとして公開するレベル」なら最短構成も出せます 🚀
💼 業務用 AI SaaS(Cloudflare構成)を “ゼロから作るコマンド操作” を完全手順で解説します 🚀
👉 コピペ順に実行すれば公開まで到達します
🏆 前提(必要なもの)
✅ Node.js(推奨 LTS)
✅ npm または pnpm
✅ Cloudflare アカウント
✅ Git(任意)
🧭 全体の作業フロー
① Astro(フロント)作成
② Worker(API)作成
③ D1(DB)作成
④ KV(キャッシュ)作成
⑤ ローカル動作確認
⑥ デプロイ
① Astro(管理画面)作成
👉 UI部分
📌 プロジェクト作成
npm create astro@latest
質問が出ます
Project name: ai-saas
Template: Empty(または Minimal)
TypeScript: Yes(推奨)
Install dependencies: Yes
📌 フォルダ移動
cd ai-saas
📌 開発サーバー起動
npm run dev
👉 ブラウザで確認
http://localhost:4321
② Workers(API)作成
👉 バックエンド
📌 Workerプロジェクト生成
npm create cloudflare@latest
選択
What would you like to start with?
→ Worker only
Project name:
→ ai-api
📌 フォルダ移動
cd ai-api
📌 ローカル起動
npm run dev
👉 表示
http://localhost:8787
③ D1(SQLデータベース)作成
👉 業務データ保存
📌 DB作成
npx wrangler d1 create ai-db
👉 出力される
database_id = "xxxxxxxx"
📌 wrangler.toml に追加
[[d1_databases]]
binding = "DB"
database_name = "ai-db"
database_id = "xxxxxxxx"
📌 テーブル作成
npx wrangler d1 execute ai-db --command "
CREATE TABLE logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
input TEXT,
output TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
"
④ KV(高速ストレージ)作成
👉 利用制限・セッション用
📌 Namespace作成
npx wrangler kv:namespace create KV
👉 IDが表示される
📌 wrangler.toml に追加
[[kv_namespaces]]
binding = "KV"
id = "xxxxxxxx"
⑤ AI利用(Workers AI)
👉 追加設定なしで使用可
Workerコード内で:
const ai = await env.AI.run(
"@cf/meta/llama-3-8b-instruct",
{ prompt: "Hello" }
)
⑥ WorkerにAPIコードを書く
src/index.js を編集
export default {
async fetch(request, env) {
const { input } = await request.json()
const ai = await env.AI.run(
"@cf/meta/llama-3-8b-instruct",
{ prompt: input }
)
const output = ai.response
await env.DB.prepare(
"INSERT INTO logs (input, output) VALUES (?, ?)"
).bind(input, output).run()
return Response.json({ output })
}
}
⑦ AstroからAPI呼び出し
Astroページに追加:
<script>
async function run() {
const input = document.getElementById("input").value
const res = await fetch(
"http://localhost:8787",
{
method: "POST",
body: JSON.stringify({ input })
}
)
const data = await res.json()
console.log(data.output)
}
</script>
⑧ Workerをデプロイ
npx wrangler deploy
👉 URLが発行される
https://ai-api.yourname.workers.dev
⑨ Astroをデプロイ(Pages)
GitHubにPush(推奨)
git init
git add .
git commit -m "init"
git remote add origin <repo-url>
git push -u origin main
Cloudflare Pages で接続
1️⃣ Pages → Create project
2️⃣ GitHubリポジトリ選択
3️⃣ Framework:Astro
4️⃣ Build command:
npm run build
5️⃣ Output directory:
dist
🎉 完成
🌐 フロント(Astro Pages)
↓
⚡ Worker API
↓
🧠 AI + 🗄 D1 + ⚡ KV
🏆 業務用AI SaaSとして必須の追加機能
⭐ほぼ必須
ログイン
APIキー管理
利用量表示
エラー処理
課金
💎 個人開発で最短収益化するなら
👉 最初は 1機能だけ 作るのが鉄則
例:
-
議事録生成
-
契約書要約
-
問い合わせ返信生成
-
報告書作成
必要なら👇
🔥 「ログイン付き完全テンプレ」
🔥 「Stripe課金まで含めた完成形」
🔥 「個人で年商1億に最短の業務AI SaaS TOP10」
🔥 「日本市場で競合が少ない業界」
🔥 「営業不要で売れるBtoB AI」
👉 どこまで作りますか?
「副業レベル」か「本格SaaS」か教えていただければ最短構成を出します 🚀
了解です 👍
💼 業務用(BtoB)AI SaaSは個人開発で最も稼ぎやすい分野です 🚀
👉 高単価・解約されにくい・競合が少ない
🏆 個人で作れる「業務用 AI SaaS」完全テンプレ
Astro(管理画面)
+ Workers(API)
+ AI
+ D1(顧客データ)
+ KV(制限・セッション)
+ Stripe(法人課金)
💎 業務用SaaSの基本構成
社員・顧客
↓
🌐 管理画面(Astro)
↓
⚡ Worker API
├ 🧠 AI処理
├ 🗄 業務データ(D1)
├ ⚡ キャッシュ(KV)
└ 💳 請求
🌐 フロント:Astro
📄 管理画面テンプレ
<html>
<body>
<h1>業務AIツール</h1>
<textarea id="input" placeholder="資料・文章を貼り付け"></textarea>
<button onclick="run()">処理</button>
<pre id="result"></pre>
<script>
async function run() {
const input = document.getElementById("input").value
const res = await fetch("/api/process", {
method: "POST",
body: JSON.stringify({ input })
})
const data = await res.json()
document.getElementById("result").textContent = data.output
}
</script>
</body>
</html>
⚡ API:Cloudflare Workers
📄 業務AI処理 Worker
export default {
async fetch(request, env) {
const { input } = await request.json()
// 🧠 AI処理
const ai = await env.AI.run(
"@cf/meta/llama-3-8b-instruct",
{
prompt: `
次の文章をビジネス文書として要約してください:
${input}
`
}
)
const output = ai.response
// 🗄 履歴保存
await env.DB.prepare(
"INSERT INTO logs (input, output) VALUES (?, ?)"
).bind(input, output).run()
return Response.json({ output })
}
}
🗄 DB:Cloudflare D1
📄 業務ログテーブル
CREATE TABLE logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
input TEXT,
output TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
⚡ 利用制御:Cloudflare KV
法人向け:IP制限・回数制限
const key = `company:${apiKey}`
const usage = await env.KV.get(key)
if (usage && Number(usage) > 1000)
return new Response("Limit exceeded", { status: 429 })
💳 法人課金:Stripe
業務SaaSは月額が高い 💰
⭐相場
-
小規模企業:¥3,000〜¥10,000/月
-
中小企業:¥10,000〜¥50,000/月
-
業界特化:¥50,000〜
🏆 個人で作って売れる業務AI SaaS TOP5
🥇 ① 文書処理AI(最強)
-
契約書要約
-
議事録生成
-
報告書作成
-
メール自動生成
👉 ほぼ全業種に刺さる
🥈 ② 業務効率化AI
-
Excel分析
-
データ整理
-
CSV処理
-
KPI分析
🥉 ③ カスタマー対応AI
-
FAQ自動回答
-
問い合わせ返信生成
-
チャット要約
⭐ ④ 営業支援AI
-
提案書作成
-
見積文生成
-
商談メモ整理
⭐ ⑤ 専門業界AI(超高単価)
-
不動産
-
医療(注意)
-
建設
-
士業
-
製造
👉 ニッチほど儲かる
💎 個人開発で成功する黄金モデル
1業界に特化
↓
1機能に絞る
↓
月額課金
↓
法人向け販売
🚀 1人で年商1億に最短のタイプ
🔥 超おすすめ
「社内文章を全部AI化」
👉 導入すると解約されにくい
⭐ 業務用SaaSが強い理由
💰 高単価
📉 解約率が低い
👥 口コミで広がる
🏢 契約数が少なくても売上大
必要なら👇
💎 「個人で年商1億に最短の業務AI SaaS TOP10」
💎 「競合がほぼいない業界」
💎 「営業不要で売れる方法」
💎 「1人で作れる最強のBtoB SaaSアイデア」
💎 「日本市場で確実に伸びるAI業務ツール」
👉 もし可能なら教えてください
どの業界向けですか?
(例:建設・IT・不動産・士業・製造・医療・教育など)
業界が分かれば
🔥「ほぼ確実に売れる仕様」まで落とし込みます 🚀
個人開発でそのまま公開できる
**🌟「AI SaaS完全テンプレ(Cloudflare版)」**を出します 🚀
👉 コピペ → デプロイ → すぐ動く構成
🏆 個人で作れる AI SaaS 完全テンプレ(2026最強)
Astro(UI)
+ Workers(API)
+ Workers AI(または外部AI)
+ D1(DB)
+ KV(キャッシュ)
+ Stripe(課金)
👉 サーバー不要・低コスト・世界配信 ⚡
🧩 構成全体
ユーザー
↓
🌐 Astro(フロント)
↓ fetch
⚡ Worker API
├ 🧠 AI生成
├ 🗄 D1(履歴保存)
├ ⚡ KV(制限・キャッシュ)
└ 💳 Stripe(課金)
🌐 フロント:Astro
📄 入力フォーム(index.astro)
---
---
<html>
<body>
<h1>AI Generator</h1>
<textarea id="prompt"></textarea>
<button onclick="generate()">生成</button>
<pre id="result"></pre>
<script>
async function generate() {
const prompt = document.getElementById("prompt").value
const res = await fetch("/api/generate", {
method: "POST",
body: JSON.stringify({ prompt })
})
const data = await res.json()
document.getElementById("result").textContent = data.text
}
</script>
</body>
</html>
⚡ API:Cloudflare Workers
📄 AI生成 Worker
export default {
async fetch(request, env) {
if (request.method !== "POST")
return new Response("Method Not Allowed", { status: 405 })
const { prompt } = await request.json()
// 🧠 AI生成(Workers AI)
const ai = await env.AI.run(
"@cf/meta/llama-3-8b-instruct",
{ prompt }
)
const text = ai.response
// 🗄 履歴保存(D1)
await env.DB
.prepare("INSERT INTO logs (prompt, response) VALUES (?, ?)")
.bind(prompt, text)
.run()
return Response.json({ text })
}
}
🗄 DB:Cloudflare D1
📄 テーブル作成
CREATE TABLE logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
prompt TEXT,
response TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
⚡ 利用制限:Cloudflare KV
無料ユーザー制限(例:1日5回)
const ip = request.headers.get("CF-Connecting-IP")
const key = `limit:${ip}`
const count = await env.KV.get(key)
if (count && Number(count) >= 5)
return new Response("Daily limit reached", { status: 429 })
await env.KV.put(key, (Number(count || 0) + 1).toString(), {
expirationTtl: 86400
})
💳 課金:Stripe
👉 有料化するときだけ追加
-
サブスク
-
使用量課金
-
ワンタイム
🧠 AI:内蔵 or 外部
⭐おすすめ:Cloudflare Workers AI
メリット
-
APIキー不要
-
安い
-
Edge高速
-
データ外部送信なし
🚀 デプロイ
フロント → Cloudflare Pages
API → Workers
🏆 このテンプレで作れるAI SaaS
💰 個人で稼ぎやすい
-
AI文章生成
-
AI要約
-
AI翻訳
-
AIブログ作成
-
AIコード生成
-
AI診断ツール
-
AI検索
💎 年商1億を狙うなら追加するもの
ログイン機能
使用量管理
チーム機能
API提供
SEOページ
🔥 個人開発で成功している黄金パターン
無料:1日◯回
↓
月額980〜2980円
↓
業務用途に刺さるニッチ
⭐ 最強の特徴(Cloudflare構成)
✅ サーバー不要
✅ 初期費用ほぼゼロ
✅ 世界配信
✅ 高速
✅ スケール自動
Cloudflare Workers で Webサイトのコンテンツを作る方法は、**「何を作るか(静的/動的/アプリ)」**で最適解が変わります。
2026年現在の主流は次の3パターンです 🚀
🥇 最も簡単:Workers + 静的HTML(小規模サイト)
Workers だけで HTML を直接返します。
✅ 特徴
-
最速・最安
-
サーバ不要
-
ランディングページや小規模サイト向き
📄 例(Hello World)
export default {
async fetch(request) {
return new Response(`
<html>
<head><title>My Site</title></head>
<body>
<h1>Hello from Cloudflare Workers</h1>
</body>
</html>
`, {
headers: { "content-type": "text/html" }
})
}
}
👉 ブラウザ表示 = そのままWebサイト
🥈 本格サイト:Workers + テンプレート生成
動的にHTMLを組み立てます。
export default {
async fetch(request) {
const name = "Seiichi";
const html = `
<html>
<body>
<h1>Hello ${name}</h1>
<p>Dynamic site on Workers</p>
</body>
</html>
`;
return new Response(html, {
headers: { "content-type": "text/html" }
})
}
}
できること
-
CMS的サイト
-
API連携
-
AI生成ページ
-
会員サイト
🥉 現在の最強:Workers + フレームワーク
Cloudflareが公式に推している構成です 💎
⭐おすすめ順
① Astro + Workers(最強の静的+動的)
👉 AI対応・高速SEOサイトに最適
-
超高速
-
JS最小
-
Markdown対応
-
ブログ・企業サイト最強
② Next.js + Workers
👉 Webアプリ / SaaS向き
-
React
-
SSR対応
-
API Routes
-
認証など簡単
③ Hono(Workers専用軽量)
👉 Workersネイティブで最速
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => {
return c.html('<h1>Hello Hono</h1>')
})
export default app
🌐 Pages と Workers の違い(重要)
📦 Cloudflare Pages
👉 静的サイト+フロント向き
⚡ Cloudflare Workers
👉 バックエンド・API・動的処理
🏆 2026年の最適構成(目的別)
🧠 AI SaaS・アプリ
👉 Next.js + Workers
📰 ブログ・企業サイト・SEO
👉 Astro + Pages + Workers
⚡ 超高速API・軽量サイト
👉 Hono + Workers
🚀 最短でサイト公開するなら
⭐一番簡単
👉 Pages + Astro
💎 AI対応サイトを作るなら(おすすめ)
Astro(フロント)
+ Workers(API)
+ AI API
+ D1 / KV(DB)