Gemini API 無料枠 × Cloudflare Workers AI で作る個人開発 AI チャット構成|レート制限回避と二段フォールバック設計

AI Gemini Cloudflare Web開発 LLM
結論

Gemini API の無料枠をメインで使用し、429 レート制限や通信障害時に Cloudflare Workers AI へ自動切替する二段フォールバックを組み取ることで、API 費用ゼロで安定した AI チャットが構築できます。

個人開発の Web アプリで AI チャット機能を公開する場合、大きな課題となるのが API 利用料金とレート制限です。

単一の AI API に依存すると、無料枠の上限に達した瞬間にサービスが全停止します。Gemini API と Cloudflare Workers AI の無料枠特性を組み合わせることで、費用を抑えつつ高い可用性を維持できます。

無料枠の特性と組み合わせ比較

主要な無料 LLM API の利用制限と特性の比較表です。

API / サービス無料枠の上限制限到達時の挙動主な用途
Gemini API (Flash系)15 RPM / 1,500 RPD / 1M TPMHTTP 429 レート制限エラーメイン処理(会話生成・高品質回答)
Cloudflare Workers AI1日 10,000 ニュートロン(約80回回答)Quota エラー(レスポンス拒否)バックアップ(緊急フォールバック用)
単一 API のみ使用枠の超過で即時サービス停止ユーザー画面にエラー表示テスト・ローカル開発のみ

Gemini API は 1 分間に 15 リクエスト(RPM)および 1 日 1,500 リクエスト(RPD)まで無料で利用できます。

メインを Gemini API に指定し、429 エラー(Too Many Requests)が発生したリクエストのみを Cloudflare Workers AI に流す設計にすることで、制限超過による画面停止を防ぐことが可能です。

二段フォールバックの実装手順

Edge サーバー(Cloudflare Workers / Pages Functions)で切り替えを行う具体的な構築手順です。

  1. 環境変数と binding の準備 env.GEMINI_API_KEY を設定し、wrangler.toml で Workers AI のバインディング(env.AI)を有効化します。

  2. 呼び出し処理の分離 Gemini API を呼ぶ関数と、Workers AI を呼ぶ関数をそれぞれ独立した非同期処理として定義します。

  3. Try-Catch による透過的切り替え メイン処理で Gemini API を呼び出し、429 レート制限や 500 系エラーをキャッチした場合にのみ Workers AI を呼び出します。

最小コード例(Cloudflare Worker / Pages Function)

export async function onRequestPost(context) {
  const { request, env } = context;
  const { messages } = await request.json();

  // 1. メイン(Gemini API)の呼び出し試行
  try {
    const geminiResponse = await fetchGeminiAPI(messages, env.GEMINI_API_KEY);
    if (geminiResponse.ok) {
      return geminiResponse;
    }
    console.warn(`Gemini API 呼び出し失敗: Status ${geminiResponse.status}`);
  } catch (error) {
    console.error("Gemini API エラー:", error);
  }

  // 2. フォールバック(Cloudflare Workers AI)の呼び出し
  try {
    const aiResponse = await env.AI.run("@cf/meta/llama-3.3-70b-instruct", {
      messages: messages,
      stream: true,
    });
    return new Response(aiResponse, {
      headers: { "Content-Type": "text/event-stream" },
    });
  } catch (fallbackError) {
    return new Response(
      JSON.stringify({ error: "現在 AI チャットが一時的に混み合っています。" }),
      { status: 503, headers: { "Content-Type": "application/json" } }
    );
  }
}

現場で起こる障害と対策(Failure Boundary)

無料枠運用で発生しやすいトラブルと対策です。

1. 短時間の連続アクセスによる 429 エラー連発

  • 発生現象: 同一 IP アナウンスメントから連続で連打リクエストが送信され、Gemini API の 15 RPM 制限を一瞬で超える。
  • 解決策: Edge サーバー側に IP ごとの簡単な日次・分次カウンターを設けるか、クライアント側で送信ボタンを連続押下できないように制御します。

2. バックアップ側のニュートロン消費に伴う制限

  • 発生現象: Gemini API が長時間の障害を起こした際、全リクエストが Workers AI に流れ込み、10,000 ニュートロンの無料枠を短時間で使い果たす。
  • 解決策: バックアップ側で送信する過去履歴メッセージのトークン数を絞り、プロンプトを軽量化することで 1 リクエストあたりのニュートロン消費量を最小化します。

当サイトで公開している /chat/(加賀チャット)でも、この二段フォールバック構成と過重アクセス防止の仕組みを採用して運用しています。実装例の詳細は 開発したAIチャット「加賀」について|無料枠で動かす技術構成とキャラクター設計 で解説しています。