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-23上級

Claude API の 529 Overloaded を本番アプリで吸収する — レジリエンス実装パターン

529 Overloaded は単発のリトライでは止まりません。累計5,000万DLのアプリ運用で踏んできた失敗を踏まえ、ユーザー体験を落とさずに吸収するためのキュー化・モデル切替・フォールバック設計をコード付きで整理します。

api38overloaded25292resilience8production87fallback7

プレミアム記事

朝のラッシュ帯にステータスページが青色なのに、自社アプリだけ 529 を浴び続ける、という時間帯があります。アーティスト・クリエイターの廣川政樹です。個人開発で 2014 年から続けているアプリ事業は累計 5,000 万ダウンロードを超えましたが、Claude API を本番に組み込んでから一番の難物だったのが、まさにこの「自分のクォータに余裕があるのに 529 だけが断続的に降ってくる」現象でした。429 と同じ感覚で指数バックオフを書いただけでは、ユーザー側の体感が「とにかく重い」「ボタンを押しても応答が来ない」という最悪の体験になります。

529 Overloaded は、回避ではなく吸収する設計が必要なエラーです。Anthropic 公式の挙動説明をベースに、私が iOS / Android で配信中のアプリ群(壁紙系・写真系・ライティング系)と社内ツールで採用している実装パターンを、コードと運用メトリクスを交えてまとめます。

529 の振る舞いは「アプリ側の混雑」とは別軸にある

429 と 529 はステータス番号が近いため混同されがちですが、性格はまったく違います。429 は自分のリクエスト頻度・トークン使用量がプランの上限に当たった結果なので、自分側で減らせば直ります。一方の 529 は Anthropic のキャパシティが一時的に逼迫したときに返るため、自分のトラフィックを減らしても回復しません。混雑が抜けるまで、待つか、別のリソースに逃がすか、ユーザー操作の流れから外すかのいずれかが必要になります。

私のアプリで実測した範囲では、529 はピーク帯(UTC 13〜16 時 / JST 22〜翌 1 時)に短時間で集中する傾向があります。直近 30 日のリトライログを集計したところ、529 の発生時間は全体の 4.2% に留まっていましたが、そのうち 78% が UTC 13〜16 時のわずか 3 時間に集中していました。逆に同じ時間帯の 429 比率は普段とほぼ変わらず、自分のレート制限とは独立した分布をしていました。この事実は、後述するモデル切替を「時間帯ヒューリスティクス」と組み合わせる根拠になります。

まず「リトライしてはいけない 529」を仕分ける

529 を見たら即座に指数バックオフでリトライ、と書きたくなりますが、それでは破綻するケースがあります。私が経験した中で危険度が高いのは次の三つです。

第一に、同期 UI のなかでブロッキングしてリトライしているケース。ユーザーは数秒待つ覚悟がないので、3 回も指数バックオフを回すと体感は完全にフリーズです。第二に、ストリーミングの途中で 529 が返って既に部分応答を返してしまっているケース。何も考えずに再呼び出しすると、ユーザーには「同じ文章の続きが二回流れた」ように見えます。第三に、ツール呼び出しの結果送信時に発生した 529 です。これは会話履歴を破壊する原因になるため、tool_result ブロックの形式整合性を保ったまま再送する専用パスが必要です。

実装では、まず「ユーザー操作の同期パス上か」「結果送信中か」「ストリーミング中か」をフラグで持ち、リトライ判定を分岐させます。

import anthropic
from anthropic import APIStatusError
import random
 
class RetryDecision:
    def __init__(self, should_retry: bool, delay: float, reason: str):
        self.should_retry = should_retry
        self.delay = delay
        self.reason = reason
 
def classify_529(err: APIStatusError, ctx: dict) -> RetryDecision:
    # ストリーミング中で部分応答を既にユーザーへ見せた場合は再呼び出ししない
    if ctx.get("partial_streamed"):
        return RetryDecision(False, 0, "partial response already delivered")
 
    # ツール結果の送信フェーズ中は専用の再送パスへ
    if ctx.get("phase") == "tool_result_submit":
        return RetryDecision(False, 0, "tool result phase — repair path")
 
    # 同期 UI でユーザーが画面を見て待っている場合はリトライ回数を制限
    if ctx.get("sync_ui"):
        attempts = ctx.get("attempts", 0)
        if attempts >= 1:
            return RetryDecision(False, 0, "sync UI — defer to async queue")
        return RetryDecision(True, 1.5 + random.random(), "sync UI — single retry")
 
    # 非同期パスでは指数バックオフ + ジッタ
    attempts = ctx.get("attempts", 0)
    base = min(2 ** attempts, 32)
    return RetryDecision(True, base + random.random() * 2, f"async backoff x{attempts}")

sync_ui モードでは原則 1 回だけ短く待って、ダメだったら諦めて非同期キューへ流すのが要点です。後述しますが、ここでユーザーには「下書きを引き継いで処理を継続中です」というプレースホルダ UX を出せるように設計します。

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

この記事の続きを読む

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

この記事で得られること
529 と 429 の根本的な違いを踏まえた、リトライしてはいけないケースの判定
ユーザー操作を止めずに吸収する非同期キュー+プレースホルダ UX の設計
Sonnet と Haiku を温度感のあるフォールバックで切り替える実装コード
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-04-22
Claude API の 529 Overloaded エラーが頻発する時の現実的な対処法
Claude API で突発的に増える 529 Overloaded エラーは、429 レート制限とは原因も対処法も違います。実装とインフラの両面から効くバックオフと、並行稼働中の本番サービスで使える現実的な打ち手をまとめます。
API & SDK2026-03-27
Claude API プロダクション耐障害設計パターン — モデルルーティング・サーキットブレーカー・フォールバック戦略の実装ガイド
Claude APIを本番運用で支える耐障害設計の実装パターン。サーキットブレーカー、モデルルーティング、フォールバックチェーン、リトライ戦略、ディザスタリカバリをTypeScriptの実装コードと、Dolice Labs 4サイト並行運用で得た運用知見で整理しました。
API & SDK2026-06-15
モデルが予告なく使えなくなる日に備える — 引退・撤回・過負荷を一つのステートマシンで扱うルーター設計
あるモデルが、技術的な障害ではなく外部都合で短時間のうちに使えなくなる。引退・撤回・一時的な過負荷という三種の「使えない」を一つの可用性ステートマシンで扱い、自動運用を止めないルーターを TypeScript と Python の動くコードで設計します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →