Gemini APIの利用制限を自分のサービスに設け、すべての呼び出し経路で確かめる

AIを呼ぶ前に、回数と長さの上限を置く

AI機能をサービスに入れる際、今回の実装で優先したのは、利用が増えても予算の内側で動かせるようにすることだった。請求のアラートは反映が数時間遅れるため、その手前で呼び出し回数と入力・出力の長さを制限する方針を取った。

対象は、英語学習アプリの Words Admin と、資格の学習計画ツールの合格ロードマップ。どちらも Gemini API を呼ぶ機能がある。2026年10月8日から13日にかけて、それぞれに利用制限を実装し、上限に達した場合や回数を数えられない場合の動作を確かめた。

ここでいう「利用制限」は、主にサービスの中で自分たちが設けた上限を指す。Google側の上限も鍵の側の制限として使ったが、それだけに任せず、利用者ごと、サービス全体、入力の長さなど、呼び出し前に判断できる箇所で止める構成にした。

予算から決める上限と、実使用から決める上限

合格ロードマップでは、先に最悪の月額を見積もり、その内側で動かすための回数と長さを決めた。2026年10月8日の記録には、次の制限と確認方法が残っている。

歯止め 値 確かめ方
サイト全体 1日150回(サーバ側で強制。画面の申告は使わない。数えられなければ呼ばない=503) 151回目が止まるテスト
1人 1日5回(ログイン必須・匿名は 401) 6回目が止まるテスト
実行環境 同時に1つ・30秒で打ち切り・出力は800トークンまで・本文500字・指示3,000字で切る コードの定数

回数だけでなく、実行時間と文章の長さにも上限を置いた。サイト全体の回数はサーバ側で強制し、画面から申告された値は使わない。カウンタが読めない場合も、呼び出しを通さず停止する。

一方、Words Adminでは実使用を確認してから上限を決めた。直近7日の利用は、AI-Phraseが9回、翻訳などが18回、AI-Recallが7回。AI-Phraseの1回の実トークン数は181で、内訳は入力65、出力116だった。

この実測に加えて、入力と出力が大きい場合の月額も見積もり、利用者ごとの1日上限と、全利用者合計で1日300回の上限を置いた。実際に使われた量と、大きな入力を含む条件を分けて見たうえで、呼び出せる回数を決めた形だ。

断る条件だけでなく、枠を消費する順番も決める

Words Adminで見直したのは、上限の値だけではない。以前は回数を数え損ねた場合、上限なしで呼び出しを通す作りだった。これではデータベースが不調な日に、利用者ごとと全体の両方の上限が外れる。そのため、「数えられないときは実行しない」動作に変更した。

判定の順番も揃えた。まず利用者ごとの上限を確認し、そこを通った呼び出しだけが全体の枠を消費する。逆の順番では、自分の上限を超えた利用者の操作で、全体の枠まで消費してしまう。

入力の長さについては、抜き出し機能を8,000字まで、読解チェックを配列200件・合計600字までとした。上限を超えた入力は切り詰めずに断る。黙って文章を削ると答えが変わるためだ。件数の確認も切り詰める前に行い、長さを理由に断った回は1日の枠を消費しない。

連打への制限は60秒に3回までとし、断った回は数に入れず、残り秒数を返す。さらに、作成から24時間以内の無料口座は1日3回に制限した。通常の上限は抜き出し10回、読解チェック5回だが、作成直後は低い上限を適用する。有料口座にはこの制限を掛けず、作成時刻が分からない場合は低い方に倒した。

これらは、単に「上限超過なら断る」という処理ではない。どの条件を先に確認し、断った操作でどの枠を消費させないかまで含めて、利用制限として実装した。

上限の実装場所ではなく、呼び出し経路を確かめる

2026年10月13日、毎朝の通知を初めて送った日に、全体の上限を通らない経路が見つかった。通知の実例は次のとおりだ。

🤖 Words AI: Gemini 10回 ≒ $0.0037
 ・断り6回(連打2/新規口座2/長すぎ2)・全体の枠 18/300

これは初回送信時の利用と推定費用を示す記録であり、月額の保証値ではない。また、この日に「全体の枠」に含まれていない呼び出しが判明したため、表示された枠の数字だけで、すべての経路を数えられているとは判断できなかった。

全利用者合計の上限は、HTTPで呼ぶ入口にしか入っていなかった。アプリから直接呼ぶ読解チェック、単語の補強、例文の3つは全体の枠を通らず、その分は通知の集計にも入っていなかった。

修正では、3つの経路にも同じ順番で全体の上限を適用した。全体の上限で断った場合は利用者の枠を減らさず、払い戻しのなかった1か所には、断る時点で枠を戻す処理を加えた。また、別の部品を使う1か所は共通の計測箇所を通らなかったため、そこだけ直接数えるようにした。

本番では、関数からの呼び出しで全体の枠が19→20、別の部品の経路でも30→31になることを確認した。ローカルの模擬環境では上限を1に下げ、4/4で拒否され、全体と本人の枠が減らないことを確かめた。上限を大きくした対照では2/2で通った。

上限に達した状態を作るために、本番のカウンタへ300を書き込むことはしなかった。その間に来た実際の利用者まで断ることになるため、上限の値を下げる方法で試験した。利用制限の確認は、ローカルの模擬環境と本番で15/15。新規口座の制限も、口座の古さ以外を揃え、既存口座は通り、作成直後の口座は断られることを確認した。

合格ロードマップでは別の判断も行った。前払い未購入で、残高が0のため呼び出しが402で止まることを確認していた。10月12日時点では、画面からAIの欄を外して「準備中」と表示した。上限の仕組みは残し、前払い後にその内側で動かせる状態にした。

業務に置き換えると

社内チャットや問い合わせの一次返信にAIを入れる場合も、今回の記録から点検できるのは次の項目だ。

  • 最悪の月額を先に計算し、その内側に収まる回数を、1人・全体・鍵の側で制限しているか。
  • 回数を数えられないときに停止するか。また、断った操作で利用枠を減らしていないか。
  • AIを呼ぶ経路をすべて挙げ、それぞれが上限の判定と集計を通ることを確かめたか。
  • 毎日の回数と費用を確認できるか。取得できなかった日は0とせず、取得不可と理由を示しているか。

今回、上限の処理が存在することと、すべての呼び出しがその処理を通ることは別だった。制限を設けた後は、経路ごとに呼び出し、枠の増減と拒否時の動作まで確かめる。その確認が、設定した上限を実際の運用で働かせるために必要だった。

この記事は、TechAthletes が自社のサービスを作る中で記録した実測をもとに書いています。業務への導入のご相談は 仕事の窓口 で受け付けています。

AI と数学をまとめて読むなら
運営している解説サイト PaperLens に、AI・半導体・計算アルゴリズム・AIのための数学の教科書と論文解説があります。読み放題は月額 ¥490。
PaperLens を見る →
※ PaperLens は当サイトの運営者が作っているサービスです。
✨ Claudeエージェントを複数走らせるならAgent Desk
Terminal tile manager for macOS。全ソース付き $10 買切り。
Agent Desk を見る →

投稿者 TechAthletes 編集部

TechAthletes は、AI・クラウド・開発ツールの技術記事を公開しているメディアです。記事内の商品リンクには広告(アフィリエイトリンク)が含まれます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

Click to listen highlighted text!