【結論】OpenCode-Geminiの「Resource has been exhausted」は、ほとんどの場合「使用量(クォータ)・課金上限・レート制限(同時実行含む)」のいずれかで“使い切り/上限到達”している状態です。
この記事で扱うこと
OpenCode-Gemini(Gemini API キー利用)で、次のようなエラーが繰り返し出て止まるケースの原因と対処をまとめます。
Resource has been exhausted (e.g. check quota). [retrying in 46s]

エラーの意味(ざっくり)
「リソースを使い切りました」という直訳どおりで、APIが“これ以上処理できない(または処理してはいけない)”状態です。よくある内訳は次のとおりです。
- クォータ(使用量)を使い切った
- 課金(Billing)の上限/支払い/残高の問題で止められている
- レート制限(リクエスト数、トークン、同時実行数)に当たっている
【ポイント】「少し待てば直る」場合もありますが、何度も出続けるなら“待つ”より“上限の種類を特定して対処”が近道です。
よくある原因
原因1: 課金・残高・上限の問題
一定額(例: 1日/1ヶ月の上限)を設定していたり、想定より早く消費したりすると発生します。
【対処】Gemini API を管理しているコンソールで「使用量」「請求(Billing)」「上限(Limits)」を確認し、上限を引き上げるか、別のキー/プロジェクトに切り替えます。
原因2: レート制限(同時実行を含む)
OpenCode側が複数リクエストを並列で投げている、あるいは短い間隔で再試行していると、レート制限に当たり続けて“実質的に永久ループ”に見えることがあります。
【対処】
- 同時実行数を下げる(並列を1〜2にする)
- リトライは指数バックオフ + ジッターにする(例: 2s→4s→8s…、上限回数も設定)
- 失敗時にモデルを軽いものへフォールバックする(短期的に通りやすくなることがある)
原因3: APIキーの紐付け/権限/プロジェクト違い
同じキーを長く使っていると、プロジェクトを切り替えた、権限が変わった、上限設定が変わったなどで突然止まることもあります。
【対処】
- OpenCodeが参照しているAPIキーが“意図したもの”か再確認
- 可能なら新しいキーを作って差し替えて挙動を見る
すぐできるチェックリスト
【ポイント】まずは「クォータ/課金」→「レート制限」→「キー差し替え」の順で潰すと早いです。
- コンソールで使用量・請求ステータス・上限(Limits)を確認
- OpenCodeの同時実行数を下げる
- リトライ設定(待ち時間、最大回数)を確認
- 別のAPIキーに差し替えて再現するか確認
再発防止(運用のコツ)
- 予算上限(Budget/Limit)に到達する前にアラートを設定
- 高コストモデルは“必要な場面だけ”使う(普段は軽いモデルに寄せる)
- 失敗ログ(日時・モデル・推定トークン・並列数)を残して原因切り分けを速くする
まとめ
【結論】「Resource has been exhausted」は“API側の上限”が原因なので、まずは「クォータ/課金/レート制限」のどれに当たっているかを確認し、上限設定・並列・リトライ方式を調整するのが最短です。