Shiraude Code Docs
用語2026年9月19日バックオフリトライ指数バックオフジッターエラーハンドリング

バックオフとは?待ってから再挑戦する仕組み

バックオフは「ちょっと待ってからもう一度」

バックオフ(backoff)は、何かの処理が失敗したときに、すぐ再挑戦せず少し待ってからやり直すやり方のことです。さらに、失敗が続くたびに待ち時間を伸ばしていく方式を「指数バックオフ(exponential backoff)」と呼びます。1秒待ってダメなら2秒、それでもダメなら4秒、8秒……というふうに倍々で間隔を広げていくイメージですね。

言葉自体は英語の back off(引き下がる、距離を取る)から来ていて、まさに「いったん引いて、間を置く」という動作そのものを指しています。

電話がつながらないときの例え

人気のコンサートチケットの電話予約を想像してください。受付開始と同時に電話をかけて話し中だったとき、切って即リダイヤル、また話し中、また即リダイヤル……と繰り返しても、たいていつながりません。むしろ自分と同じことをしている人が大量にいるせいで、回線はますます混みます。

ここで「1回目がダメなら5秒待つ、次は10秒、次は20秒」と間隔を空けていけば、自分の再発信の回数が減って相手側の負荷が下がりますし、混雑のピークが過ぎたタイミングに自然と当たりやすくなります。これがバックオフの考え方です。

1回目失敗 → 1秒待つ
2回目失敗 → 2秒待つ
3回目失敗 → 4秒待つ
成功、または上限で諦める

なぜ「すぐ再挑戦」がまずいのか

失敗にはいろいろ種類がありますが、ネットワーク越しの処理でよくあるのは「相手が一時的に忙しい」「一瞬だけ通信が乱れた」といった、時間が経てば直るタイプの失敗です。こういう場合、再挑戦自体は正しい対処です。

問題は間隔です。間を置かずに叩き続けると、相手のサーバーにとっては失敗したリクエストがそのまま倍の負荷になって返ってくることになります。混んでいるから失敗しているのに、失敗したからさらに混ませる、という悪循環です。この現象は「再試行が雪だるま式に増える」状態として知られていて、バックオフはその予防策にあたります。

ランダムを混ぜる「ジッター」

もうひとつ大事なのが、待ち時間に少しランダムなブレを加える工夫です。これをジッター(jitter)と呼びます。

というのも、大勢のクライアントが同時に失敗して、全員が同じルールで「1秒後に再試行」すると、1秒後にまた全員が一斉に押し寄せてしまいます。信号待ちの車が青になった瞬間に一斉発進するのと同じで、混雑が解消しません。そこで「1秒前後、ただし人によって0.7秒だったり1.3秒だったり」とバラけさせると、負荷が時間的にならされます。

身近なところにも使われている

バックオフは特別な技術というより、通信や分散処理の世界では当たり前の作法です。Wi-Fiやイーサネットで複数の機器が同時に電波・回線を使おうとしてぶつかったとき、ランダムな時間待ってから再送する仕組みも同じ発想ですし、APIを呼ぶプログラムが「しばらく待ってから再試行してください」という応答を受け取ったときの振る舞いもこれです。

AIエージェントやコマンドラインツールを使っていて、内部で通信エラーが起きたときに「自動でリトライしています」といった挙動を見たことがあるなら、その裏側では多くの場合バックオフ付きの再試行が動いています。ユーザーからは「ちょっと固まったけど、勝手に復帰した」ように見えるやつですね。

押さえておきたい限界

バックオフは万能ではありません。たとえば入力内容が間違っていて失敗しているようなケースでは、何度待って再挑戦しても結果は同じです。待てば直る失敗か、待っても直らない失敗かを見分けることが前提になります。

また、待ち時間を無限に伸ばすわけにもいかないので、実際には「最大でも30秒まで」「再試行は5回まで」といった上限を決めて、そこを超えたら潔く失敗として扱うのが普通です。いつまでも粘られるより、早めに「ダメでした」と教えてもらった方が助かる場面は多いですから。

このページは役に立ちましたか?

バックオフとは?待ってから再挑戦する仕組み | Shiraude Code Docs