◉GEMINI LABEN
●3.8 FLASH — 3.7 Flash は 10/08 に非推奨に。旧モデルへの要求は 3.8 Flash へ自動で回されます●NANO 2.1 — gemini-nano-banana-2.1 が GA。gemini-3.1-flash-image は非推奨で停止日は未発表●DEADLINE — veo-3.1 の preview と gemini-omni-flash-preview は 10/22、Deep Research エージェントは 10/23 に停止(残り12〜13日)●Q&A — Gemini CLI でサブエージェントが MAX_TURNS で止まっても成功と報告される、という報告が出ています●TTS/LIVE — 2.5 系の音声・TTS 系プレビューは 11/17 に停止、残り38日●NEW — 停止日のない非推奨をどう扱うか。画像モデルの移行先を3つの条件で選び直す●3.8 FLASH — 3.7 Flash は 10/08 に非推奨に。旧モデルへの要求は 3.8 Flash へ自動で回されます●NANO 2.1 — gemini-nano-banana-2.1 が GA。gemini-3.1-flash-image は非推奨で停止日は未発表●DEADLINE — veo-3.1 の preview と gemini-omni-flash-preview は 10/22、Deep Research エージェントは 10/23 に停止(残り12〜13日)●Q&A — Gemini CLI でサブエージェントが MAX_TURNS で止まっても成功と報告される、という報告が出ています●TTS/LIVE — 2.5 系の音声・TTS 系プレビューは 11/17 に停止、残り38日●NEW — 停止日のない非推奨をどう扱うか。画像モデルの移行先を3つの条件で選び直す
記事一覧/Workspace 連携
◧ Workspace 連携/2026-07-08上級

Apps Script の Gemini 自動化が月末に必ず止まる — UrlFetch 日次上限を溶かさない予算ガバナー設計

Apps Script から Gemini を呼ぶ自動化は、6分上限やトリガー本数とは別に UrlFetch の日次呼び出し上限で静かに止まります。件数が増えた日だけ落ちる問題を、日次予算ガバナーとバックログ繰り越しで捌き切る設計と動くコードにまとめます。

Apps Script12Gemini API246UrlFetchAppGoogle Workspace21自動化28

✦ プレミアム記事

月末になると、決まって同じ自動化が止まっていました。

私は個人開発でいくつかのアプリを運営していて、そのうちのいくつかはユーザーレビューへの返信文の下書きや、壁紙の新規追加分へのタグ付けを Apps Script から Gemini に投げて回しています。ふだんは何事もなく流れているのに、月のうち数日だけ、実行ログに見慣れないエラーが残る。しかも決まって、レビューがどっと増えた翌日でした。

最初はレート制限(429)を疑いました。けれど 429 なら指数バックオフで捌けるはずです。ログをたどると、止まっていたのは Gemini 側ではなく Apps Script 側でした。Service invoked too many times for one day: urlfetch ——UrlFetch の日次呼び出し上限に当たっていたのです。

この記事は、6分の実行上限でもトリガー本数の上限でもない、UrlFetchApp の日次呼び出し上限という第3の天井に焦点を当てます。件数が平常運転のうちは見えず、増えた日だけ牙をむくこの制約を、日次予算ガバナーとバックログの繰り越しで静かに捌き切る設計を、動くコードと実測シミュレーションでまとめます。

3つ目の天井は「1日に何回 UrlFetch を呼べるか」

Apps Script で Gemini 自動化を組むと、規模が大きくなるにつれて別々の上限に順番にぶつかります。よく知られているのは実行時間とトリガーですが、UrlFetch の日次上限はその陰に隠れがちです。

ぶつかる制約何が上限かconsumer (gmail.com)Google Workspace
実行時間上限1回の実行の最長時間6 分 / 実行30 分 / 実行
トリガー合計実行時間1日のトリガー総実行時間90 分 / 日6 時間 / 日
UrlFetch 日次呼び出し1日に UrlFetch を呼べる回数20,000 回 / 日100,000 回 / 日

実行時間の壁は、処理を分割して次のトリガーへ引き継げば越えられます。トリガー本数の壁は、単一ディスパッチャに束ねれば越えられます。けれど UrlFetch の日次上限だけは性質が違います。分割しても束ねても、1日に発行できる呼び出しの総数は変わらないからです。Gemini を1件ごとに1回呼ぶ設計なら、その日に処理する件数がそのまま上限に効きます。

実行時間やトリガー本数の詰まりについては、以前に別の記事で扱いました。この記事は、それらをすべて解決してもなお残る「1日に呼べる回数」の問題を扱います。関連する設計としてApps Script の6分実行上限を越える分割と冪等性の設計と時間主導型トリガーを一本のディスパッチャに束ねる設計も併せてご覧いただければ、3つの天井が別物であることがはっきりします。

素朴な実装は、増えた日に上限を溶かす

まず、私が最初に書いていた素朴な処理を示します。トリガーが起きるたびに、未処理の行をすべて拾って Gemini に投げる——ふだんはこれで足ります。

// Before: 未処理を毎回まとめて処理する(増えた日に落ちる)
function enrichPendingRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('reviews');
  const rows = sheet.getDataRange().getValues();
 
  for (let i = 1; i < rows.length; i++) {
    if (rows[i][STATUS_COL]) continue;      // 済みは飛ばす
    const draft = callGemini(rows[i][TEXT_COL]);   // ← 1件ごとに UrlFetch 1回
    sheet.getRange(i + 1, STATUS_COL + 1).setValue('done');
    sheet.getRange(i + 1, DRAFT_COL + 1).setValue(draft);
  }
}
 
function callGemini(text) {
  const res = UrlFetchApp.fetch(GEMINI_ENDPOINT, {
    method: 'post',
    contentType: 'application/json',
    headers: { 'x-goog-api-key': 'YOUR_API_KEY' },
    payload: JSON.stringify({ contents: [{ parts: [{ text: text }] }] }),
    muteHttpExceptions: true,
  });
  return JSON.parse(res.getContentText()).candidates[0].content.parts[0].text;
}

このコードには、増えた日に必ず露呈する弱点があります。未処理件数に上限がないのです。ふだん1日3,000件なら 3,000 回強の UrlFetch で済みますが、機能リリース直後にレビューが 40,000 件増えた翌日は、43,000 件を一度に処理しようとして 46,000 回を超える UrlFetch を発行します。20,000 回の壁の手前で urlfetch の日次上限に達し、実行は途中で例外を投げて止まります。

さらに厄介なのは、止まる位置が毎回違うことです。何件目で落ちるかは、その日に他のスクリプトが何回 UrlFetch を使ったかにも左右されます。手前で止まった分は翌日に持ち越されますが、素朴な実装は「どこまで進んだか」を予算の観点で持っていないので、翌日もまた全件を一気に投げて同じ壁に当たる——月末の数日、これを繰り返していたわけです。

✦

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

この記事の続きを読む

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

この記事で得られること
✦6分実行上限・トリガー本数とは別の第3の天井である UrlFetch 日次呼び出し上限(consumer 20,000 回/日)が、件数が増えた日だけ自動化を落とす仕組みを再現コードで理解できます
✦Script Properties に日次予算台帳を持たせ、タイムゾーン境界でリセットする token-bucket 型ガバナーの完全な Apps Script コードを、そのまま貼って使えます
✦急増した日のバックログを翌日以降へ繰り越して捌き切る設計を、決定論シミュレーションの実数値(スパイク後3日で解消)つきで検証できます
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◧ Workspace 連携2026-10-03
Sheets から呼ぶ Gemini の月額を、年末の値上げ日をまたいで Apps Script で割り出す
スプレッドシートから Gemini API を呼んでいる方へ。呼び出しごとのトークン数を台帳タブに残し、2026年12月31日で終わる導入価格と2027年1月1日からの標準価格の二段で月額を見積もる Apps Script を、動かした出力つきで書き残します。
◧ Workspace 連携2026-09-08
Workspace Studio に4つのステップが増えました。私は返信系だけ日を分けて開けます
Workspace Studio に Drive のコピー・移動と、Chat・メールの返信という4つのステップが追加されました。管理コントロールが機能より先に届く日程を手がかりに、取り消せる操作と取り消せない操作を別の日に開ける手順をまとめます。
◧ Workspace 連携2026-09-01
Gemini の新機能が Workspace に出てこないとき、待ちと不具合を切り分ける順序
告知された Gemini の新機能が自分の Workspace に現れないとき、それが段階展開の途中なのか設定の問題なのかを、リリーストラックと展開ペースから機械的に判定する手順と Apps Script の台帳をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます