オレンジ色のケーブルが接続されたパッチパネル
技術解説

画像生成APIの外部呼び出しをSREはどう設計するか バッチ処理のコスト・障害対策

目次を見る

社内コンテンツ基盤やマーケティング用ツールから、Google Nano Banana(Gemini系の画像生成モデル)やOpenRouter(複数のLLM・画像生成モデルを単一APIで呼び出せる中継サービス)のような外部AI APIを呼び出す仕組みを作る相談が増えています。

こうした仕組みは「ブログ記事をInstagram用のカルーセル画像に自動変換する」といった、一見フロントエンドの話に見える用途から始まることが多いです。ただし実装の中身は、外部APIへのバッチリクエスト・レート制御・コスト管理という、インフラ担当者が普段CI/CDパイプラインや外部SaaS連携で扱っている問題そのものです。社内で「画像生成を自動化したい」という依頼が来たとき、SRE(Site Reliability Engineering、信頼性を保ちながらシステムを運用する職能)の視点で何を確認し、どう設計を選べばよいかを整理します。

どんな場面でこの判断が必要になるか

典型的なのは、マーケティングチームやコンテンツチームから「ブログ記事一覧からSNS投稿画像を自動生成するバッチを動かしたい」という依頼を受けるケースです。

記事数が数十本から数百本にのぼる場合、1記事につき見出し(H2)ごとに1枚のスライド画像を生成する設計だと、呼び出し回数は一気に数千件規模になります。ここで何も考えずに全件を一括実行すると、外部APIのレート制限に引っかかったり、想定外の課金が発生したりします。

この手の「社内ツールから外部AI APIをバッチで叩く」構成は、画像生成に限らず今後も増えていきます。判断軸を一度整理しておくと、次に似た依頼が来たときにも使い回せます。

判断軸

呼び出し頻度とバッチサイズ

1回のバッチで何件のAPI呼び出しが発生するかを先に見積もります。1記事6見出しなら1記事あたり6リクエスト、100記事処理すれば600リクエストです。同時実行数を制御しないと、外部API側のレート制限(単位時間あたりのリクエスト上限)に即座に到達します。

モデルの選択とコストの比例関係

OpenRouterのような中継サービス経由だと、同じNano Banana系でも複数のモデルバリエーションから選べます。参考情報ではフル機能版とは別に軽量版の gemini-3.1-flash-lite-image の利用が案内されており、大量バッチ処理では軽量モデルを使う判断が明示されています。1枚あたりの単価が下がる代わりに画質や指示追従性が落ちるトレードオフがあるため、用途ごとに使い分ける前提で設計する必要があります。

失敗時の再実行可能性(冪等性)

数百件規模のバッチ処理では、途中でAPI側のタイムアウトやレート制限エラーが必ず発生します。失敗した行だけを再実行できる設計かどうかが、障害対応の仕組み化における最重要ポイントです。参考情報の構成では、各記事の生成ステータスを「Idea」「Generated」で管理するテーブル構造が紹介されていますが、これはまさに「どこまで処理が完了したか」を外部に状態として持たせる設計です。

APIキー管理と認証の一元化

OpenRouterのような中継型APIを使う利点は、画像生成モデルを切り替えてもAPIキーが1つで済む点です。裏側のモデルプロバイダーが変わっても、呼び出し側のコードは Authorization: Bearer ヘッダーの形式を変える必要がありません。これはマイクロサービス構成で外部SaaS連携を一本化する設計パターンと同じ考え方です。

選択肢の比較

外部AI画像生成をどう組み込むかは、大きく3つの方式に分かれます。それぞれインフラ側の運用負荷が異なります。

方式呼び出し構成運用上の注意点
中継API経由(OpenRouter等)1つのAPIキーで複数モデルを呼び分け中継サービス自体の可用性・レイテンシが追加される
モデル提供元に直接接続Google等のAPIを個別契約し直接呼び出しキー管理・課金体系がモデルごとにバラバラになる
自前ホスティング(OSSモデル等)GPU基盤を自社で確保して推論インフラコストと運用工数が最も高い

中継API経由の場合、中継サービスが落ちたりレスポンスが遅延したりするリスクが、呼び出し元のバッチ処理全体の信頼性に直結します。ここをどうSLO(Service Level Objective、サービスが満たすべき品質目標)に落とし込むかが次の論点です。

ケース別の推奨

月間数百件規模のバッチ生成で、画質より速度とコストを優先するなら、中継API+軽量モデルの組み合わせを選びます。レート制限に対してはリトライ間隔を指数バックオフ(失敗のたびに待機時間を倍々に延ばす再試行方式)で実装し、同時実行数は中継サービスのドキュメントに明記された上限の7〜8割程度に抑えるのが無難です。

社外に出せないデータや記事本文を扱うなら、中継API経由は避け、モデル提供元との直接契約か自前ホスティングを検討します。中継サービスを経由すると、プロンプトに含めた記事本文が中継事業者のログに残る可能性があるため、情報の取り扱いポリシーを事前に確認する必要があります。

処理対象が数千件を超え、日次で継続運用するなら、ステータス管理をlocalStorage(ブラウザ内の簡易データ保存領域)のような揮発性の仕組みに留めず、Terraformなどで管理するデータベース(DynamoDBやCloud SQL等)に移行すべきタイミングです。IaC(Infrastructure as Code、インフラ構成をコードで管理する手法)でテーブル定義やIAM権限を管理しておけば、担当者が変わっても再現性のある運用ができます。

あえて見送るべき条件

次のような条件では、外部AI API連携を急いで本番導入しない判断もありえます。

  • 月間呼び出し件数が数十件程度で、手動運用のコストの方が明らかに低い場合
  • APIコストの上限設定(spending limit)を中継サービス側で設定できない、または社内の承認フローが整っていない場合
  • 生成結果の品質ばらつきをチェックする人的レビュー体制がまだ用意できていない場合
  • 障害時に「どこまで処理が終わっていたか」を追跡する仕組み(ログ・ステータステーブル)を用意する前にバッチ化だけ急いでいる場合

特に最後の項目は見落とされがちです。オブザーバビリティ(システム内部の状態を外部から観測できるようにする設計思想)が欠けたまま自動化だけ進めると、失敗した100件のうちどれが未処理かを手作業で突き合わせる羽目になります。

導入前に確認すること

外部AI API連携のバッチ処理を検討するなら、まず次の3点を確認してください。

  • 利用予定の中継API(OpenRouter等)のレート制限値とリトライポリシーを公式ドキュメントで確認する
  • 1回のバッチ実行で発生するリクエスト数とモデル単価から、月間コストの上限を試算する
  • 失敗した処理だけを再実行できるステータス管理の仕組み(DBテーブルでもログでも可)を先に用意する

この3点さえ押さえておけば、依頼されたバッチ処理がPoC(概念実証)で終わるか、継続運用に耐える仕組みになるかの分かれ目を自分で判断できるはずです。

参考

How to Convert Long Blog Lists Into Instagram Carousels With Nano Banana, AI HTML, and OpenRouter

この記事について: 本記事は AI を活用して作成し、forva AI 編集部が内容を確認・監修しています。

AI 駆動開発のご相談は forva AI へ。まずはお気軽にどうぞ。