はい、かっこつけました。すみません。~~本当は503が出た瞬間、PCの前で「あぁぁぁあ!!」って叫んでお茶をぶちまけそうになりました。~~
みなさん、こんにちは!40代から始めたDIYとプログラミングの沼にどっぷり浸かっている、積み立てMASAです。🛠️✨ 今日は木工の話じゃなくて、最近僕を冷や汗まみれにした「Gemini APIの503エラー」について、人柱として共有させていただきます!
Gemini APIの「壁」にぶち当たった夜
最近、GAS(Google Apps Script)を使ってGemini APIと連携し、便利ツールを作ろうと意気込んでいたんです。DIYでいうところの「全自動木材カットマシン」を作ろうとして、設計図を引いているような気分ですね。
ところが、実装してテストを繰り返していると、急に返ってくるんです。 「503 Service Unavailable」の文字が。
「えっ、俺、なんか悪いことした!?」と一瞬パニックになりました。サーバーがダウンしているのか、Google様がご立腹なのか……。調べれば調べるほど、これは「一時的な過負荷」や「レート制限」が原因の可能性が高いことがわかりました。DIYで言えば、電動ドリルを無理な力で回しすぎて、ブレーカーが落ちたような状態です。~~ただ単に僕のコードがポンコツだっただけという説も濃厚です。~~
GASで「諦めない心」を実装する
503エラーが出たとき、一度の失敗でスクリプト全体を止めてしまうのは、DIYでいえば「釘を一本打ち損ねただけで家を解体する」ようなものです。
必要なのは、「あ、ダメだった? じゃあもう一回やってみるわ!」という柔軟な精神構造(リトライ処理)でした。GASでAPIを叩く際、ただUrlFetchApp.fetchを呼ぶだけじゃ足りないんです。エラーをキャッチし、適切に再試行するロジックが必要だったんですね。
泥沼から抜け出した「指数バックオフ」という賢い戦略
最初は「エラーが出たら即座に再試行!」と単純なループを組んだのですが、これだとサーバーにさらに負荷をかけてしまい、「追い打ちの503」という地獄絵図になりました。😂
そこで導入したのが「指数バックオフ」という技法。これは、再試行の間隔を少しずつ長くしていく方法です。
function callGeminiWithRetry(prompt) {
const maxRetries = 3;
let delay = 1000; // 最初は1秒待つ
for (let i = 0; i <= maxRetries; i++) {
try {
const response = UrlFetchApp.fetch(API_URL, options);
return JSON.parse(response.getContentText());
} catch (e) {
if (i === maxRetries) throw e;
Logger.log(`エラー発生! ${delay/1000}秒後にリトライします…`);
Utilities.sleep(delay);
delay *= 2; // 待機時間を倍にする(指数バックオフ)
}
}
}
このコードを書いたとき、「俺、ちょっとプログラマーっぽいぞ……!」と胸が熱くなりました。実際にこれを実装してからは、エラーでスクリプトが止まることが激減しました。失敗を織り込む、これぞエンジニアリングのDIY精神ですね!🛠️🔥
Gemini APIを飼い慣らすためのTips
最後に、僕のようなDIY初心者が同じ罠にハマらないための教訓です。
-
エラーハンドリングを標準装備にする:
try...catchはオプションじゃなくて必須です。 -
サーバーに優しく: 急激な連続アクセスは避け、適度な間隔(スリープ)を設けましょう。
-
ログを信じる:
Logger.logで何が起きているか可視化するだけで、解決までの時間は半分になります。
Gemini APIは強力な相棒です。たまに機嫌を損ねて「503」なんて言ってくるかもしれませんが、それは彼も頑張っている証拠。根気よく向き合って、最高のアウトプットを作り上げましょう!
おすすめのツール
今回、この問題に立ち向かう際に役立ったのは、Googleが提供している「Apps Scriptの公式リファレンス」と、有志が公開している「APIエラーハンドリングの設計パターン」のメモでした。
特に、指数バックオフの考え方を学んだおかげで、API連携だけでなく、スプレッドシートへの大量書き込みエラーなども怖くなくなりました。道具(ロジック)を知ることは、どんな分野でも武器になりますね!✨
|
価格:1980円 |
![]()
PROJECT: HUMAN BODY MAINTENANCE
“I live my code a retry at a time. It don’t matter if you win by an inch or a mile, winning’s winning.”
「俺の人生はリトライ単位だ。1インチ差だろうが1マイル差だろうが関係ねぇ。勝ちは勝ちだ。」



コメント