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-05-07上級

Claude Agent SDK の Transactional Outbox 実装 — 「副作用の取りこぼし」を本番でゼロにする設計

Claude Agent SDK で発生する「DBには書かれたのにメール/決済/通知が飛ばなかった」事故を防ぐため、Transactional Outbox パターンを Postgres と Cloudflare Queues を例に本番品質で実装する手順をまとめます。

claude-agent-sdk6transactional-outboxproduction87reliability14postgresqueues

プレミアム記事

「ユーザー登録は成功したのにウェルカムメールが飛んでいない」「注文DBには記録されたのに決済が走っていない」— Claude Agent SDK で書いたエージェントが本番に出ると、こういう「副作用の取りこぼし」が必ず一度は起こります。

私自身、4サイト分のメンバーシップを Claude Agent SDK と Stripe で動かしていて、最初の3ヶ月で似た事故を3回出しました。原因は毎回同じで、ツール内で db.insert(...)sendEmail(...) を続けて呼んでいて、前者が成功した直後にプロセスが落ちると、後者がそのまま消えるのです。冪等性キーを正しくつけても、そもそも呼ばれなかった処理は冪等性では救えません

この問題を構造的に解くのが Transactional Outbox パターンです。マイクロサービス文献では古典的なパターンですが、Claude Agent SDK のようにツール実行とDB更新が同居する世界での具体的な作り方は、まとまった日本語資料が少ないのが現状です。本記事は、私が本番運用で実際に組んだ構成を、Postgres と Cloudflare Queues を例に、そのままコピーして動く形でまとめたものです。

なぜ Agent SDK で「副作用の取りこぼし」が起きるのか

エージェントが落ちる原因はいくつかありますが、Outbox を語るうえで知っておきたいのは次の3つです。

  1. ツール内 await の途中でループが死ぬ: db.insert の直後、sendMail の前で SDK タイムアウトや OOM が起きると、外部副作用は走らないままDBだけが進みます
  2. モデル応答が壊れて再開がスキップされる: ツール結果のJSONパースエラーで Agent ループが新しいセッションとして再起動すると、モデルからは「もうそのツールは呼んだ」と見えるためリトライされません
  3. 手動で停止 → 翌日再開: Claude Agent SDK のセッション再開で会話履歴は復元されますが、未送信のメールはどこにも残っていないので、人間が気づくまで永久に飛びません

冪等性(前回記事 Claude Agent SDK で冪等性を設計する で詳しく扱いました)は「同じ副作用が二度走らない」を保証する技術ですが、ここで必要なのは 「副作用が必ず一度は走る」 を保証する技術です。Outbox はまさにそれを担います。

Transactional Outbox パターンとは

ひとことで言えば、「副作用を直接実行する代わりに、副作用を実行する依頼を業務データと同じトランザクションで outbox テーブルに書く」 だけのパターンです。

[Agent ツール]
    │
    ├─ BEGIN
    ├─ INSERT INTO orders ...
    ├─ INSERT INTO outbox (topic, payload) VALUES ('mail.send', ...)
    └─ COMMIT
              │
              ▼
[Outbox Dispatcher]
    │
    ├─ SELECT 未配信レコード
    ├─ Cloudflare Queues / SNS / Kafka に送信
    └─ UPDATE outbox SET dispatched_at = now()
              │
              ▼
[Consumer]
    └─ 実際にメール送信・決済・Slack通知 等

業務データと「副作用の依頼書」が同じトランザクションでコミットされるので、コミットされたなら依頼書は必ずある が成り立ちます。あとは依頼書を読んで非同期に副作用を起こすだけのジョブ(Dispatcher)が、 at-least-once でそれを送り出します。Consumer 側を冪等に作っておけば、結果として exactly-once 相当の振る舞いが手に入ります。

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

この記事の続きを読む

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

この記事で得られること
Agent ループのクラッシュやタイムアウトで「DBには記録されたのに副作用が一度も実行されなかった」というタイプの事故を、原理的に防げる設計が手に入ります
Postgres + Cloudflare Queues を使った Outbox テーブル・ディスパッチャ・コンシューマの実装を、コピーすれば動く形で持ち帰れます
順序保証・重複排除・観測メトリクス・段階的な導入手順まで揃うので、既存の Claude Agent SDK アプリに今日から組み込めます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-06-14
Claude Agent SDK のツールを冪等にする — 二重実行を止める冪等性キーと Outbox の実装メモ
Claude Agent SDK のリトライやセッション再開で決済を二重処理する事故を防ぐ実装メモ。決定的な冪等性キー・Outbox・軽量ラッパーの3パターンを、動くコードと運用メトリクスつきで設計します。
API & SDK2026-06-27
Claude API のストリーミングが「エラーも出さずに」止まるとき — 沈黙する停止を検知して途中から続ける運用メモ
Claude API のストリーミングが例外も出さずに無言で止まる「沈黙停止」を、トークン間隔のウォッチドッグで検知し、受信済みテキストを引き継いで途中から再開する実装と、長時間の自動運用で崩れないためのタイムアウト予算の設計をまとめます。
API & SDK2026-05-08
Claude Agent SDKでサーガパターンを実装する — 補償トランザクションと冪等性の設計
Claude Agent SDKで複数ステップのワークフローを安全に組み立てる実践ガイド。補償トランザクション・冪等性キー・部分失敗時の状態復元を、本番環境で動かしてきた構成パターンとともに紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →