ある日、Googleから約70万円の請求が来ました。

正確には、Google Places APIを使った営業自動化バッチが約11日間止まらずに動き続けていました。エラーで落ちたのではありません。むしろ正常に動いていた。正常に動き続けた結果、APIリクエストが積み上がり、請求額が一気に膨らみました。

この記事は、AI自動化やAIエージェントを事業に入れるなら必ず考えるべき「終了条件」「予算上限」「監視」の話です。技術的に難しい事故ではありません。だからこそ怖い事故でした。


何を自動化しようとしていたのか

やろうとしていたのは、店舗向け営業の前工程です。

Googleマップ上の店舗情報を取得し、業種とエリアの組み合わせから見込み客リストを作る。その後、問い合わせフォームを探し、案内文を送る。人間がやると時間がかかる作業なので、Google Places APIとブラウザ自動操作を使って自動化しようとしていました。

対象は、30業種 × 62エリア。合計すると約1,860パターンです。

この組み合わせから店舗リストを作り、フォーム営業につなげる。発想としては自然でした。小規模事業では、人を増やす前に仕組みで営業の母数を増やしたくなります。AIと自動化ツールを使えば、かなりの部分は実装できます。

問題は、自動化したことではありません。

止め方を設計していなかったことです。


原因は while true とリード自動補充

バッチの構造は、平たく書くとこうでした。

while true
  リードを送信する
  残件数がゼロなら bulk-search を実行する
  Google Places APIでリードを補充する
  送信を再開する
done

送るリードがなくなったら、自動でリードを補充する。これは一見、親切な設計です。夜中にリストが枯渇しても、翌朝また動いている。営業の前工程が止まらない。

でも、この設計には終了条件がありませんでした。

  • 今日は何件まで
  • 今月は何円まで
  • 何回補充したら止める
  • 新規リードが一定数以下なら止める
  • API使用量が異常なら止める

こうしたブレーキがないまま、「足りなくなったら補充する」を組み込んでいました。

さらに同種のバッチが2並列で動いていました。1本でも危ないループが、2本同時に走っていたわけです。約11日間、誰も止めませんでした。


失敗の本質は「エラーが出なかったこと」

この事故で怖かったのは、システムが壊れていなかったことです。

APIは正常にレスポンスを返す。バッチも落ちない。ログ上は処理が進んでいる。こうなると、人間は「ちゃんと動いている」と判断しがちです。

でも、コストの観点では異常でした。

AI自動化では、エラーよりも「正常に動き続ける異常」のほうが危険なことがあります。特に従量課金APIを含む処理では、失敗時だけではなく成功時にもコストが積み上がります。

APIリクエスト、LLMのトークン、画像生成、動画生成、ブラウザ自動化、メール送信、ストレージ転送。どれも、仕組みが大きくなるほど「動けば動くほど課金される」領域です。

「動いているから大丈夫」ではありません。

「どこまで動いたら止まるか」が設計されているかが大事です。


すぐに止めたこと

請求に気づいてから、最初にやったのは新しい改善ではなく停止です。

まず、対象バッチを止めました。次に、二重起動していたプロセスと自動起動設定を確認しました。APIキーの利用状況を見て、どの処理がリクエストを生んでいるのかを切り分けました。

そのうえで、再起動しても同じことが起きないように、運用側の前提を変えました。

  • 自動起動を一度止める
  • APIキーの用途を分ける
  • バッチごとの実行上限を入れる
  • 補充処理の回数上限を入れる
  • コスト異常を人間が見られる状態にする
  • 「残件数ゼロなら補充」だけでなく「補充しても新規が少なければ終了」を入れる

特に重要なのは、AIにコードを書かせる場合でも、予算と終了条件は人間が先に決めることです。AIは「動くコード」を速く作れます。ただし、そのコードが事業上どこまで動いていいかは、AIではなく事業側が決める必要があります。


再発防止チェックリスト

従量課金APIを含むAI自動化を作るなら、最低限これだけは確認したほうがいいです。

1. ループの終了条件があるか

while true を使うなら、抜ける条件を別で持つ必要があります。

  • 最大実行時間
  • 最大処理件数
  • 最大リクエスト数
  • 最大補充回数
  • 連続失敗回数
  • 新規成果が出ない場合の停止条件

「いつか自然に終わるはず」は終了条件ではありません。

2. 1回の実行コストを見積もったか

1リクエストあたりの金額だけを見ると小さく見えます。でも、組み合わせ数、並列数、再試行回数、ループ回数を掛けると一気に膨らみます。

今回で言えば、30業種 × 62エリアという時点で、1回の補充バッチに約1,860回の検索が含まれていました。ここにループと並列起動が乗ると、想定を超える速度でコストが増えます。

3. APIキーの用途を分けているか

検証用、本番用、高コスト処理用を同じキーにすると、どの処理が原因かわかりにくくなります。小規模でも、用途ごとにキーやプロジェクトを分けるだけで、事故時の切り分けが速くなります。

4. 予算アラートを設定しているか

クラウドやAPIの管理画面で、月額予算とアラートを設定しておくべきです。最新の設定方法や名称はサービス側で変わるため、運用前に必ず管理画面で確認します。

大事なのは、「請求が来てから気づく」状態を避けることです。

5. 人間が見るログになっているか

ログは残すだけでは不十分です。

何件処理したか、いくら相当のAPIを使ったか、前回から増えすぎていないか。人間が見て判断できる粒度で出しておく必要があります。

自動化は、人間が見なくていい仕組みではありません。人間が見るべき場所を減らし、見るべき数字を絞る仕組みです。


AI自動化は「止まる設計」まで含めて実装

今回の失敗で学んだのは、AI自動化は速く作れるほど危ないということです。

Claude CodeやCodexのような開発支援AIを使うと、以前なら数日かかっていたバッチが数時間で組めます。エラーが出ても、貼り付ければ修正案が返ってくる。実装スピードは明らかに上がります。

ただ、そのぶん「自分が隅々まで読んでいないコード」が本番で動く可能性も上がります。

だから、AI時代の実装では、機能要件だけでは足りません。

  • 何をするか
  • いつ止まるか
  • いくらまで使っていいか
  • 誰が見るか
  • 異常時にどこを切るか

ここまで決めて、初めて事業で使える自動化になります。


PROST AI実装ログとして公開する理由

この話は、格好いい成功事例ではありません。むしろ、かなり痛い失敗です。

でも、AI活用を事業に入れるなら、こういう実装上の失敗こそ共有したほうがいいと思っています。「AIで自動化できます」「AIエージェントで営業できます」という話は増えました。ただ、その裏側で発生するコスト、暴走、品質、権限管理まで話されることはまだ少ない。

PROSTでは、AIを使ってSNS運用、動画制作、営業、経理、サイト制作の仕組みを作っています。その中でうまくいったことも、今回のように失敗したことも、実装ログとして残していきます。

AI自動化で大事なのは、魔法のツールを探すことではありません。

小さく作る。動かす。止め方を決める。数字を見る。直す。

このループを、事業の中にどう入れるかです。


PROSTでは、AI自動化・AIエージェント・SNS運用・制作パイプラインを、実際の業務フローに合わせて小さく設計します。「自分の事業でもAIを入れたいが、コストや暴走が怖い」という方は、AI活用相談で現在の業務と導入順を一緒に整理できます。