◉CLAUDE LABEN
●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした
記事一覧/API & SDK
⬡ API & SDK/2026-06-24上級

上限が倍になった日に決めたこと — 共有APIキーで定期ジョブを束ねる余白予算の設計

レート上限が倍になってもジョブ間隔を詰めなかった理由と、共有APIキーで複数の定期ジョブを束ねる「余白予算」の設計をまとめました。レスポンスヘッダーからの現状計測、ジョブ別の消費割り当て、予算を据え置いた判断の背景、本番運用で見えた落とし穴までを実コードとともに紹介します。

Claude API127レート制限6定期実行3キャパシティプランニング運用設計28

✦ プレミアム記事

上限が倍に引き上げられたという知らせを読んで、最初に頭をよぎったのは「では、ジョブの間隔を半分にできるな」という考えでした。Dolice Labs として複数のサイトに毎日決まった時刻で記事を流し込んでいる身としては、詰められる余地はそのまま運用の自由度です。

ところが、手元のログを開いて数分眺めているうちに、その手は止まりました。倍になったのは天井であって、私が実際に消費している量ではありません。詰めてよいかどうかは、天井ではなく「いま床から天井までどれだけ空いているか」で決まります。

この記事は、その日に私自身が引いた線の話です。レート上限を「使い切る対象」ではなく「予算として配る対象」に置き換えると、上限が動いても運用は驚くほど静かになります。共有 API キーで複数の定期ジョブを回している方に向けて、余白を測り、配り、据え置くまでの設計を、実際に使っているコードとともに整理します。

余白を「予算」として扱うと何が変わるか

レート上限の話は、しばしば 429 が出てからの対処、つまり再試行とバックオフの話に偏ります。それは事後の防御です。ここで扱いたいのは事前の配分、つまり「平常時にどこまで使うか」を先に決めておく話です。

両者は似て非なるものです。コストのペース配分は「今月いくらまで使うか」という金額の話で、消費すれば請求が増えます。一方の余白予算は「単位時間あたりの上限の何割まで使うか」という速度の話で、消費しても請求は変わりませんが、使い切ると後続のジョブや再試行が詰まります。

私が予算という言葉を選んだのは、余白が共有資源だからです。共有キーの下では、記事生成ジョブも Stripe のイベント処理も、同じ天井を分け合っています。片方が天井際まで使えば、もう片方は手元の上限が下がったかのように振る舞います。だからこそ、誰がどれだけ使ってよいかを先に決めておく価値があります。

現状をヘッダーから測る

予算を組む前に、いまの消費を知る必要があります。Claude API はレスポンスヘッダーに残量を載せて返してくれるので、推測ではなく実測から始められます。

主に見るのは次のヘッダーです。requests 系と tokens 系がそれぞれ独立して効く点に注意してください。

ヘッダー意味
anthropic-ratelimit-requests-limitその窓でのリクエスト数上限
anthropic-ratelimit-requests-remaining残りリクエスト数
anthropic-ratelimit-requests-reset残量が回復する時刻(RFC3339)
anthropic-ratelimit-tokens-limitその窓でのトークン上限
anthropic-ratelimit-tokens-remaining残りトークン数
anthropic-ratelimit-tokens-resetトークン残量が回復する時刻
retry-after429 のとき、待つべき秒数

まずは、すべての呼び出しの直後にこれらを記録する薄い層を一枚かませます。SDK のレスポンスからヘッダーを取り、構造化して残すだけの関数です。

// ratelimit.ts — レスポンスヘッダーから残量を読み取る
type RateSnapshot = {
  at: string;          // 計測時刻 (ISO)
  job: string;         // どのジョブか
  reqLimit: number;
  reqRemaining: number;
  reqResetSec: number; // reset までの秒数
  tokLimit: number;
  tokRemaining: number;
  tokResetSec: number;
};
 
function secUntil(iso: string | null): number {
  if (!iso) return 0;
  const ms = new Date(iso).getTime() - Date.now();
  return Math.max(0, Math.round(ms / 1000));
}
 
export function readSnapshot(job: string, headers: Headers): RateSnapshot {
  const num = (k: string) => Number(headers.get(k) ?? "0");
  return {
    at: new Date().toISOString(),
    job,
    reqLimit: num("anthropic-ratelimit-requests-limit"),
    reqRemaining: num("anthropic-ratelimit-requests-remaining"),
    reqResetSec: secUntil(headers.get("anthropic-ratelimit-requests-reset")),
    tokLimit: num("anthropic-ratelimit-tokens-limit"),
    tokRemaining: num("anthropic-ratelimit-tokens-remaining"),
    tokResetSec: secUntil(headers.get("anthropic-ratelimit-tokens-reset")),
  };
}

SDK 経由でヘッダーへ届く方法はクライアントによって異なりますが、生レスポンスを受け取れる形(withResponse 相当)で一度だけ呼び、そこからヘッダーを取り出すのが確実です。ここで得た RateSnapshot を、後段の会計と予算判断の両方で使います。

✦

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

この記事の続きを読む

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

この記事で得られること
✦anthropic-ratelimit-* ヘッダーから requests と tokens の残量・reset を読み、ジョブ別に消費を会計する実装
✦平常時に上限の何割まで使うか(目安70%)と、再試行・手動実行・バーストに残す余白を式で決める方法
✦上限が2倍になっても予算を据え置いた判断と、reset ウィンドウ・トークン上限先行・429 の帰属で踏んだ落とし穴
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ API & SDK2026-08-30
モデルIDを一括置換する前に、手元の CLI が抱えるカタログを引きます
新しい世代が出ると、前の世代のモデルIDが急に古く見えます。インストール済みの実行ファイルに埋め込まれたカタログを引き、一致・日付不一致・書式破損の三段に仕分けてから直す手順を、実測値とスクリプトつきでまとめました。
⬡ API & SDK2026-10-13
Haiku 5.5 は単価が下がるのに、4.5 換算で約 7.7 万トークンを超えると請求が跳ねます
Haiku 4.5 から 5.5 へ移すと、価格表だけ見れば約 1/10 です。ただし同じ文章が約 30% 多いトークンになり、入力が 10 万を超えた時点で単価が 5 倍になります。境目を 4.5 換算で計算し、実際に動かした出力と、移行時に直す 400 の項目を並べました。
⬡ API & SDK2026-10-08
Sonnet 4.5 の退役前に、コードに残った「400 になる引数」を一本のスクリプトで拾いました
claude-sonnet-4-5 は 11 月 30 日に退役します。モデル ID を書き換えるだけでは、budget_tokens・prefill・tool_choice などで 400 が返ります。公式の移行ガイドの該当箇所を正規表現にしたスキャナと、実行結果、直し方の順番をまとめました。