Tech Notebook
一覧に戻る

Gemini APIの基本解説:RPM・TPMなどの制限値と活用法

Gemini APIとは

Googleの「Gemini API」は、最先端のマルチモーダルAIモデルであるGeminiを、独自のアプリケーションやWebサービスに統合するための開発者向けAPIです。テキスト生成だけでなく、画像、音声、動画、コードなどの多様な入力を高度に処理できる点が特徴です。

個人開発からエンタープライズ向けのシステム構築まで幅広く活用されていますが、APIを安定して運用するためには、Googleが設けている「レートリミット(利用制限)」の仕組みを正しく理解することが不可欠です。

API制限を理解する最重要用語:RPM・TPM・RPDとは?

Gemini APIの利用料金プラン(無料枠および従量課金制)やシステム設計において、以下の3つの単位が頻繁に登場します。これらはAPIの過剰な呼び出しを防ぎ、サービスの公平な利用を担保するために設定されています。

1. RPM (Requests Per Minute)

RPMは「Requests Per Minute」の略で、「1分間あたりに実行できるAPIリクエストの最大回数」を指します。例えば、無料枠のGemini 1.5 Flashで「15 RPM」と設定されている場合、1分間に15回までしかAPIを呼び出すことができません。これを1秒あたりに換算すると4秒に1回のペースとなるため、短時間に連続してリクエストを送ると、即座に制限に達しエラーが発生します。

2. TPM (Tokens Per Minute)

TPMは「Tokens Per Minute」の略で、「1分間あたりに処理できるトークンの最大数」を表します。トークンとは、AIがテキストを処理する際の最小単位(単語や文字の構成要素)です。リクエスト回数(RPM)が上限以下であっても、1回あたりのプロンプトが非常に長文であったり、AIからの出力が膨大であったりする場合、このTPMの制限に引っかかることがあります。

3. RPD (Requests Per Day)

RPDは「Requests Per Day」の略で、「1日(24時間)あたりに実行できるAPIリクエストの最大回数」を指します。主に無料枠(Free Tier)における1日の合計利用上限として設定されており、これを超えると翌日までAPIの利用ができなくなります。

Gemini APIの基本的な呼び出し方法

Pythonを使用してGemini API(Google GenAI SDK)を呼び出す基本的なコード例は以下の通りです。APIキーは事前にGoogle AI Studioで取得しておく必要があります。

import os
from google import genai

# APIクライアントの初期化(環境変数 GEMINI_API_KEY が自動で参照されます)
client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Gemini APIのRPM制限を回避するためのベストプラクティスを3つ教えてください。",
)

print(response.text)

レートリミット(429 Too Many Requests)への対策

APIの制限値(RPMやTPM)を超えると、ステータスコード 429 Too Many Requests エラーが返されます。本番環境でこのエラーによるサービス停止を防ぐためには、以下の対策を実装することが推奨されます。

  • エクスポネンシャル・バックオフ(指数バックオフ): エラーを検知した際、再試行までの待機時間を「1秒、2秒、4秒、8秒...」のように段階的に増やしていくアルゴリズムです。これにより、APIサーバーへの負荷集中を避けつつ自動復旧を図れます。
  • セマンティックキャッシュの利用: 過去に送信された類似の質問と回答のペアをデータベース(Redisなど)にキャッシュしておくことで、同一のリクエストに対してAPIを再度呼び出す必要性を減らし、RPMを節約します。
  • キューイングとレートリミッターの実装: アプリケーション側にキュー(Queue)を導入し、APIへのリクエスト送信ペースをプログラムで能動的に「最大毎秒○回」のように制御します。

まとめ

Gemini APIは強力なAI処理能力を提供しますが、そのポテンシャルを最大限に活かすためにはRPMやTPM、RPDといった制限値を考慮した設計が不可欠です。構築するアプリケーションの規模に応じて、適切なプランを選択し、エラーハンドリングを強固に実装しましょう。

参考URL