CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/API & SDK
API & SDK/2026-03-25上級

Claude API × Cloudflare Workers でエッジAIマイクロサービスを構築する

Claude APIとCloudflare Workersを組み合わせて、低レイテンシ・高スケーラビリティのAIマイクロサービスを構築する方法を解説。エッジコンピューティングによるAIアプリケーション設計パターンを実装コード付きで紹介します。

claude-api81cloudflare-workers5edge-computingmicroservices2production87serverless

プレミアム記事

AIアプリケーションの開発において、ユーザー体験を左右する最大の要因の一つがレスポンス速度です。従来のサーバーレスアーキテクチャでは、リクエストが特定のリージョンに集中し、地理的に離れたユーザーほど遅延が大きくなるという課題がありました。

Cloudflare Workersは世界300以上のエッジロケーションでコードを実行でき、ユーザーに最も近いノードで処理を行います。これにClaude APIの高度な推論能力を組み合わせることで、低レイテンシかつスケーラブルなAIマイクロサービスを実現できます。

以下では Claude API と Cloudflare Workers で本番グレードの AI マイクロサービスを組む際の設計パターンと実装を、動作するコード例とともに追っていきます。

この記事で学べること:

  • Cloudflare Workers上でClaude APIを呼び出す基本アーキテクチャ
  • ストリーミングレスポンスによるリアルタイムUI連携
  • KV・D1・R2を活用したキャッシュ戦略とコスト最適化
  • レート制限・エラーハンドリング・リトライの実装
  • 複数のAIエンドポイントを束ねるAPIゲートウェイパターン

対象読者: Claude APIの基本的な使い方を理解しており、Cloudflare Workersの経験がある中〜上級エンジニア。


基本アーキテクチャ — Workers から Claude API を呼び出す

まず、最もシンプルな構成として、Cloudflare Workerから直接Claude APIを呼び出すパターンを見ていきます。

プロジェクトのセットアップ

# Wrangler CLIでプロジェクトを作成
npm create cloudflare@latest claude-edge-service -- --type worker-typescript
cd claude-edge-service
 
# Anthropic SDKをインストール
npm install @anthropic-ai/sdk
 
# APIキーをシークレットとして登録
npx wrangler secret put ANTHROPIC_API_KEY

基本的なWorkerの実装

// src/index.ts
import Anthropic from "@anthropic-ai/sdk";
 
interface Env {
  ANTHROPIC_API_KEY: string;
}
 
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // CORSプリフライト対応
    if (request.method === "OPTIONS") {
      return new Response(null, {
        headers: {
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "POST, OPTIONS",
          "Access-Control-Allow-Headers": "Content-Type",
        },
      });
    }
 
    if (request.method !== "POST") {
      return new Response("Method not allowed", { status: 405 });
    }
 
    try {
      const { message, model } = await request.json<{
        message: string;
        model?: string;
      }>();
 
      const client = new Anthropic({ apiKey: env.ANTHROPIC_API_KEY });
 
      // Claude APIを呼び出し
      const response = await client.messages.create({
        model: model || "claude-sonnet-4-6",
        max_tokens: 1024,
        messages: [{ role: "user", content: message }],
      });
 
      const text =
        response.content[0].type === "text" ? response.content[0].text : "";
 
      return new Response(JSON.stringify({ response: text }), {
        headers: {
          "Content-Type": "application/json",
          "Access-Control-Allow-Origin": "*",
        },
      });
    } catch (error) {
      console.error("API Error:", error);
      return new Response(
        JSON.stringify({ error: "Internal server error" }),
        { status: 500, headers: { "Content-Type": "application/json" } }
      );
    }
  },
};

この基本パターンだけでも、世界中のエッジロケーションからClaude APIにアクセスできるエンドポイントが完成します。しかし、本番環境ではこれだけでは不十分です。次のセクション以降で、プロダクション品質に必要な要素を一つずつ追加していきます。


ストリーミングレスポンスの実装

Claude APIのストリーミング機能を活用すると、トークンが生成されるたびにクライアントにリアルタイムで送信できます。ユーザーは回答の完了を待たずに、テキストが流れるように表示される体験を得られます。

// src/streaming.ts — ストリーミング対応エンドポイント
import Anthropic from "@anthropic-ai/sdk";
 
interface Env {
  ANTHROPIC_API_KEY: string;
}
 
async function handleStreamingRequest(
  request: Request,
  env: Env
): Promise<Response> {
  const { message, systemPrompt } = await request.json<{
    message: string;
    systemPrompt?: string;
  }>();
 
  const client = new Anthropic({ apiKey: env.ANTHROPIC_API_KEY });
 
  // ReadableStreamを使ったSSE(Server-Sent Events)の実装
  const stream = new ReadableStream({
    async start(controller) {
      const encoder = new TextEncoder();
 
      try {
        const response = client.messages.stream({
          model: "claude-sonnet-4-6",
          max_tokens: 2048,
          system: systemPrompt || "You are a helpful assistant.",
          messages: [{ role: "user", content: message }],
        });
 
        // ストリーミングイベントを処理
        response.on("text", (text) => {
          const data = JSON.stringify({ type: "text_delta", text });
          controller.enqueue(encoder.encode(`data: ${data}\n\n`));
        });
 
        // ストリーム完了時の処理
        const finalMessage = await response.finalMessage();
        const usage = {
          input_tokens: finalMessage.usage.input_tokens,
          output_tokens: finalMessage.usage.output_tokens,
        };
        const doneData = JSON.stringify({ type: "done", usage });
        controller.enqueue(encoder.encode(`data: ${doneData}\n\n`));
        controller.close();
      } catch (error) {
        const errData = JSON.stringify({
          type: "error",
          message: error instanceof Error ? error.message : "Unknown error",
        });
        controller.enqueue(encoder.encode(`data: ${errData}\n\n`));
        controller.close();
      }
    },
  });
 
  return new Response(stream, {
    headers: {
      "Content-Type": "text/event-stream",
      "Cache-Control": "no-cache",
      Connection: "keep-alive",
      "Access-Control-Allow-Origin": "*",
    },
  });
}
 
export { handleStreamingRequest };

クライアント側の受信コード

// フロントエンド側(Next.js / React)
async function streamChat(message: string) {
  const response = await fetch("https://your-worker.workers.dev/stream", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ message }),
  });
 
  const reader = response.body?.getReader();
  const decoder = new TextDecoder();
 
  while (reader) {
    const { done, value } = await reader.read();
    if (done) break;
 
    const chunk = decoder.decode(value);
    const lines = chunk.split("\n").filter((line) => line.startsWith("data: "));
 
    for (const line of lines) {
      const data = JSON.parse(line.slice(6));
      if (data.type === "text_delta") {
        // UIにテキストを追加表示
        appendToChat(data.text);
      } else if (data.type === "done") {
        // トークン使用量をログに記録
        console.log("Usage:", data.usage);
      }
    }
  }
}

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Claude API を Cloudflare Workers で運用する エッジコンピューティング・AI マイクロサービス・アーキテクチャ
グローバル低遅延・従量課金・自動スケーリングを実現する サーバーレス AI システムの構築
エッジでの推論実行と クラウド統合による ハイブリッド AI インフラの運用方法
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-05-02
Claude API の本番運用で予算上限を確実に守る — 日次トークン超過を検知して自動停止するサーキットブレーカー設計
Claude API のコストを「気づいたら月10万円超過」で終わらせない、サーキットブレーカーパターンの実装ガイドです。Cloudflare Workers + KV / Durable Objects で日次・月次予算を強制し、停止・劣化・通知の3戦略を切り替えるコードを示します。
API & SDK2026-04-30
Claude APIをCloudflare Queuesで非同期処理する:障害復旧と優先度制御を含めた本番設計
Claude APIをCloudflare Queuesで非同期処理する本番グレードのパイプライン設計を、Producer/Consumer両方の動作コード・障害時のリトライ戦略・優先度制御・コスト制御まで含めて解説します。
API & SDK2026-07-13
Claude API の同時実行を束ねる — シングルフライトで重複推論とキャッシュ・スタンピードを防ぐ
同一プロンプトが同時に何度も Claude へ飛ぶ重複推論を、シングルフライト(request coalescing)で束ねる設計です。プロセス内・分散環境の実装、ジッター付きリトライ、負のキャッシュまで実測付きでまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →