Astro + Workers

Page content

了解です 👍
「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)