Cloudflareでコンテンツエージェントを動かす最安コスト分析
Cloudflare Workers + Claude API上でコンテンツ生成・翻訳パイプライン全体を、Sonnet 3.5なら約$0.50/記事、Haikuなら約$0.12/記事で動かせます。Cloudflareの無料枠は1日10万リクエストを処理できます。スケールが求める時だけ課金されます。制約は長時間LLM呼び出しのコールドスタートレイテンシーで、Queuesが解決します。
毎週水曜。28,400人以上の読者。無駄なし。
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
目次
2026年5月更新。
TL;DR: Cloudflare Workers + Claude API上でコンテンツ生成・翻訳パイプライン全体を、Sonnet 3.5なら約$0.50/記事、Haikuなら約$0.12/記事で動かせます。Cloudflareの無料枠は1日10万リクエストを処理できます。スケールが求める時だけ課金されます。制約は長時間LLM呼び出しのコールドスタートレイテンシーで、Queuesが解決します。
[オペレーターの視点] 私はalejandrorioja.comでまさにこのパイプラインを動かしています。TypeScript Workerが記事を書き、12の翻訳ジョブを並列展開し、すべてをKVに保存する——すべて1回のHTTP呼び出しで起動します。コストの詳細と構成方法を解説します。
AWSやVercelではなくCloudflareを選ぶ理由
AWS LambdaはGB秒単位で課金します。VercelはHobbyプランで実行ごとに課金し、厳しいレート制限があります。どちらもスケール時のコールドスタートが予測不能です。
Cloudflare WorkersはコンテナではなくV8アイソレートで動作します。コールドスタートはサブミリ秒です。無料枠は実用的:1日10万リクエスト、リクエストあたり10ms CPUタイム(ウォールクロック時間はより長い)。有料プランは月$5で1000万リクエスト。
AIコンテンツパイプラインでは、Workersのコンピュート費用はほぼゼロです。本当のコストはClaude APIです。最適化すべき変数はそれだけです。
アーキテクチャ(テキスト図)
HTTPトリガー(cronまたはwebhook)
│
▼
Worker: オーケストレーター
│
├─ ジョブメタデータをKVに書き込む(ステータス: "pending")
│
└─ ENジョブ1件をキューに積む
│
▼
キュー: content-jobs
│
┌──────┴──────┐
▼ ▼
Worker: ライター Worker: トランスレーター(×12ロケール)
│ │
▼ ▼
Claude API Claude API
│ │
└──────┬─────────────┘
▼
KV: posts/{slug}/{locale}
│
▼
Webhook → GitHub → デプロイオーケストレーターWorkerがエントリーポイントです。KVに初期ステータスレコードを書き込み、Cloudflare Queueにジョブをプッシュします。QueueのファンアウトがライターWorker(EN)を起動し、ENの本文が完成したら12のトランスレーターWorkerを並列起動します。すべてが{slug}/{locale}をキーとしてKVに格納されます。最終的なwebhookがGitHub Actionsデプロイを起動します。
Cloudflareコスト表
| リソース | 無料枠 | 有料($5/月) | 実際の使用量 |
|---|---|---|---|
| Workersリクエスト数 | 10万/日 | 1000万/月 | 約500/日 |
| Workers CPU時間 | 10ms/リクエスト | 30s/リクエスト | 約8ms/リクエスト |
| KV読み取り | 10万/日 | 1000万/月 | 約2K/日 |
| KV書き込み | 1K/日 | 100万/月 | 約300/日 |
| キューメッセージ | — | 100万/月(含) | 約300/月 |
| KVストレージ | 1 GB | 1 GB(含) | 約200 MB |
月10記事を公開するサイトでは、Cloudflareの請求は無料枠で**$0**です。Workersは無料。そのボリュームでのKV読み書きも無料。私が使う唯一の有料機能はQueues——$5/月のWorkers Paidプランが必要ですが、そのプランには100万件のキューメッセージが含まれています。
私のCloudflare請求:月5ドル固定、月約3,000記事まで変わらず。
Claude APIコスト表
ここが本当にお金のかかるところです。1記事あたりの詳細分解。
EN生成(1記事、約1500語):
| モデル | 入力トークン | 出力トークン | コスト |
|---|---|---|---|
| Claude Haiku 3.5 | 約2,000 | 約2,500 | $0.005 |
| Claude Sonnet 3.5 | 約2,000 | 約2,500 | $0.042 |
12翻訳(各約1500語):
| モデル | 入力トークン(×12) | 出力トークン(×12) | コスト |
|---|---|---|---|
| Claude Haiku 3.5 | 約24,000 | 約30,000 | $0.054 |
| Claude Sonnet 3.5 | 約24,000 | 約30,000 | $0.500 |
1記事あたり合計(EN + 12翻訳):
| モデル | 合計コスト |
|---|---|
| Claude Haiku 3.5 | 約$0.059 |
| Claude Sonnet 3.5 | 約$0.542 |
EN生成にはSonnetを使い(正規記事の品質が重要)、翻訳にはHaikuを使います(ソーステキストはすでに書かれており、モデルは忠実に翻訳するだけです)。このブレンドアプローチで実際のコストは約$0.10/記事になります。
TypeScript Worker:オーケストレーター
// src/workers/orchestrator.ts
import { Queue } from "@cloudflare/workers-types";
interface Env {
CONTENT_QUEUE: Queue;
POSTS_KV: KVNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const { slug, topic } = await request.json<{ slug: string; topic: string }>();
// 初期ステータスを書き込む
await env.POSTS_KV.put(
`status:${slug}`,
JSON.stringify({ status: "pending", createdAt: Date.now() })
);
// EN生成ジョブをキューに積む
await env.CONTENT_QUEUE.send({
type: "generate",
slug,
topic,
locale: "en",
});
return Response.json({ queued: true, slug });
},
};TypeScript Worker:ライター + トランスレーター
// src/workers/content-processor.ts
interface Env {
CONTENT_QUEUE: Queue;
POSTS_KV: KVNamespace;
ANTHROPIC_API_KEY: string;
}
const LOCALES = ["ar","de","es","fr","hi","it","ja","ko","nl","pt","ru","zh"];
export default {
async queue(batch: MessageBatch<ContentJob>, env: Env): Promise<void> {
for (const msg of batch.messages) {
const job = msg.body;
if (job.type === "generate") {
const post = await generatePost(job.topic, env.ANTHROPIC_API_KEY);
await env.POSTS_KV.put(`post:${job.slug}:en`, post);
// 翻訳をファンアウト
for (const locale of LOCALES) {
await env.CONTENT_QUEUE.send({
type: "translate",
slug: job.slug,
locale,
sourceText: post,
});
}
}
if (job.type === "translate") {
const translated = await translatePost(
job.sourceText,
job.locale,
env.ANTHROPIC_API_KEY,
// コスト削減のため翻訳にはHaikuを使用
"claude-haiku-3-5-20241022"
);
await env.POSTS_KV.put(`post:${job.slug}:${job.locale}`, translated);
}
msg.ack();
}
},
};
async function generatePost(topic: string, apiKey: string): Promise<string> {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": apiKey,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify({
model: "claude-sonnet-3-5-20241022",
max_tokens: 4096,
messages: [{ role: "user", content: `Write a detailed blog post about: ${topic}` }],
}),
});
const data = await res.json<{ content: Array<{ text: string }> }>();
return data.content[0].text;
}
async function translatePost(
text: string,
locale: string,
apiKey: string,
model: string
): Promise<string> {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": apiKey,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify({
model,
max_tokens: 4096,
messages: [
{
role: "user",
content: `Translate the following blog post to ${locale}. Preserve all markdown. Keep code blocks in English.\n\n${text}`,
},
],
}),
});
const data = await res.json<{ content: Array<{ text: string }> }>();
return data.content[0].text;
}代替案との比較
| プラットフォーム | 基本料金 | リクエストあたりコスト | コールドスタート | TypeScript DX |
|---|---|---|---|---|
| Cloudflare Workers | $0〜$5/月 | ほぼゼロ | サブミリ秒 | 優秀 |
| AWS Lambda | $0(制限あり) | $0.20/100万リクエスト | 100ms〜1s | 良好 |
| Vercel Functions | $0(制限あり) | 使用量ベース | 200ms〜2s | 良好 |
| 自己ホストVPS | $5〜$20/月 | $0 | なし(常時稼働) | 任意 |
| Fly.io Machines | $0(制限あり) | GB秒あたり | 約500ms | 良好 |
自己ホストはCloudflareが負ける唯一のケースです。$6/月のHetzner VPSはコールドスタートなし、リクエストあたりコストなしでNode 24/7を動かします。ただしデプロイ、稼働率、スケーリングは自己管理が必要です。私のボリュームでは、Workersがすべてを無料で処理します。
AWS Lambdaの比較は紙面では競争力があるように見えますが、Lambdaの最大実行時間15分は長いLLMチェーンにとって実際の制約です。WorkersにはPaidプランでCPUリミット30秒があります——Queuesを使って非同期作業をするため、単一のLambdaをブロックしない運用では問題ありません。
状態管理のためのKV
KVはCloudflareのグローバル分散キーバリューストアです。読み取りはどこでも高速(エッジキャッシュ)。書き込みは60秒以内にグローバルに伝播します。
コンテンツパイプラインでは、3つのキーパターンを使います:
// ジョブステータス
await kv.put(`status:${slug}`, JSON.stringify({ status, updatedAt: Date.now() }));
// 記事コンテンツ
await kv.put(`post:${slug}:${locale}`, markdownContent);
// 一覧用インデックス
const index = await kv.get<string[]>("index:posts", "json") ?? [];
await kv.put("index:posts", JSON.stringify([...index, slug]));私のスケールでのKVコスト:$0。無料枠は1日1K書き込みと10万読み取りを提供します。1ヶ月あたり約300件のKVエントリを書き込みます(25記事 × 13ロケール = 325)。制限にはるか及びません。
月100記事以上を12言語で公開する場合、月約3.9万回の書き込みに達しますが——$5の有料プランに含まれる100万/月をまだ下回ります。
オペレーターの結論
完全なコンテンツパイプライン——生成、翻訳、保存、デプロイ——のインフラコストは月$5.10です($5 Cloudflare Workers Paid + 月10記事で$0.10 Claude API)。それだけです。サーバー管理なし、コンテナオーケストレーションなし、プロビジョニングされた同時実行性のしきい値に達するLambdaコールドスタートによる予想外の請求なし。
混合モデル戦略(ENにSonnet、翻訳にHaiku)で翻訳品質を落とすことなくClaudeのコストを80%削減できます。自分のボリュームで計算してみてください。Cloudflare + Claude Haikuがファウンダースケールでこの種のパイプラインを動かす本当に最安の方法だとわかるはずです。
毎週水曜。28,400人以上の読者。無駄なし。
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
AIプレイブックをメールでお届け
毎週水曜。28,400人以上の読者。無駄なし。
Check your inbox.
We sent you a confirmation email — click the link inside to complete your subscription. Check spam if you don't see it within a minute.
You're subscribed.
Welcome — the next edition lands in your inbox soon.
You're already on the list — look for it every Wednesday.