業務自動化・iPaaS・RPA

エラー処理設計とは|5xxだけ送り直すと、235件を取りこぼした

エラー処理設計とは何を決めるのか失敗はどう分ければよいのか分け方を間違えると何が起きるのか

失敗には送り直せば通るものと、何度送っても通らないものがあります。この2つを分けないと、どちらかで損をします。

1000件の失敗を仕分けて数えました。番号が500番台のものだけ送り直すと235件を取りこぼします。1種類足すだけで1000件すべて正しく分かれました。

この記事の要点

  • 5xxだけだと765/1000しか正しく分かれない
  • 取りこぼしは235件
  • 429を足すと1000/1000
  • 全部送り直すと無駄が1484回

5xxだけ送り直すと、235件を取りこぼした

失敗1000件を3通りの分け方で仕分けました。1種類の扱いを変えるだけで結果が大きく動きます。

エラー処理設計で分け方を変えると何が変わるのかを、実際に走らせて数えました。用意したのは8種類の失敗、合計1000件です。

それぞれの種類に送り直せば通るかどうかを持たせています。分け方が正しいかを、この性質と突き合わせて数えました。

javascript
const WAYS = [
  ['全部を送り直す', () => 'temp'],
  ['5xx だけ送り直す', (e) => (e.code >= 500 ? 'temp' : 'perm')],
  ['5xx と 429 を送り直す', (e) => (e.code >= 500 || e.code === 429 ? 'temp' : 'perm')],
];
text
失敗 1000件。うち送り直せば通るもの 629件・何度送っても通らないもの 371件

分け方                  正しく分けられた  取りこぼし  無駄な送り直し
全部を送り直す                     629 / 1000          0件           1484回
5xx だけ送り直す                  765 / 1000        235件              0回
5xx と 429 を送り直す            1000 / 1000          0件              0回

コード  内容                  件数  送り直せば通るか
  429  要求が多すぎます              235件          はい
  503  一時的に利用できません           187件          はい
  400  項目の形式が違います            141件         いいえ
  404  宛先が見つかりません            108件         いいえ

上の表を見てください。番号が500番台のものだけ送り直すと、235件を取りこぼしました

落ちているのは1種類だけ

取りこぼした235件は、すべて429という1つの種類でした。この種類だけを足すと1000件すべて正しく分かれます。

429は400番台です。番号の範囲だけで見ると送り直しても無駄な側に入ります。ところが実際は待てば通ります。

全部送り直す場合

1行目は取りこぼしが0件です。代わりに1484回の無駄な送り直しが出ました。

宛先が見つからない、形式が違うといった失敗を5回ずつ繰り返した結果です。相手にも自分にも負担がかかります。

1種類の扱いで、取りこぼしが235件から0件になる。

単位: 件5xxだけ・取りこぼし235件全部を送り直す・取りこぼし0件5xxと429・取りこぼし0件失敗1000件での実測。全部を送り直す方式では、別に1484回の無駄な送り直しが発生した。
図1 ── 分け方ごとの取りこぼしと無駄
出典MDN「429 Too Many Requests」2026-08-18 確認
status code indicates the client has sent too many requests in a given amount of time.
原文MDN「429 Too Many Requests」 この内容の有効期限2027-02-18

エラー処理設計とは何を決めるのか

失敗を種類ごとに分け、それぞれをどう扱うかを決めます。分け方が決まっていないと、扱いも決まりません。

エラー処理設計は、失敗を分けて、それぞれの扱いを決めることです。

最初の分け目

いちばん大事な分け目は送り直せば通るかどうかです。ここが決まれば、扱いも決まります。

  1. 送り直せば通る。待ってから送り直す
  2. 何度送っても通らない。送り直さず、別の置き場に移す
  3. 分からない。回数を区切って送り直し、駄目なら移す
  4. そもそも失敗として扱わない。すでに登録済みなど

4番目を見落としがちです。すでに登録されているという応答は、二重に届いた場合には成功として扱えます。

分けるための材料

番号だけが手がかりではありません。どれだけ待てばよいかを示す情報が付いてくることがあります。

MDNも429について、もう一度要求する前にどれだけ待つべきかを示すため、この応答に見出し情報が含まれることがあると説明しています。付いていれば、待ち時間を自分で決める必要がありません。

どこに効く制限か

同じ429でも、相手のシステム全体が混んでいるのか、特定の宛先だけなのかで対処が変わります。

MDNは、この仕組みを要求の速さを落とすよう相手に求めるものだと説明しています。相手全体が混んでいるなら、送る量そのものを落とす必要があります。

余談 この計測での注意

失敗の種類と割合はこちらで置いた値です。実際の割合は相手のシステムと自分の使い方で変わります。ここで見せているのは、割合が偏っている種類を1つ落とすと結果が大きく動くという関係です。まず自分の失敗を種類ごとに数えてください。

出典MDN「429 Too Many Requests」2026-08-18 確認
header may be included to this response to indicate how long a client should wait before making the request again.
原文MDN「429 Too Many Requests」 この内容の有効期限2027-02-18

分け方は、実際に返ってきた失敗から決める

先に網羅的な分類を作る必要はありません。実際に返ってきた種類を数えて、多いものから決めていけば足ります。

エラー処理設計を始めるとき、すべての失敗を先に想定しようとすると終わりません。実際に返ってきたものから決めます。

数えるところから

前の節の計測では、8種類のうち429だけで235件と最も多くなりました。上位から見ていけば、少ない手数で大半が片付きます。

数えるには記録が要ります。失敗の内容を残していないと、どの種類が多いかも分かりません。

握りつぶすと数えられない

よくあるのは、失敗を捕まえて何もせずに次へ進む作りです。処理は止まりませんが、記録も残りません。

この状態では、前の節のような表が作れません。分けようがないので、設計そのものが始められません。

進め方

  1. 失敗の内容を記録する。番号と本文を残す
  2. 種類ごとに数える。多い順に並べる
  3. 上から3種類だけ決める。全部を決めない
  4. 残りは回数を区切って移す。分からないものの既定

4番目があるので、3番目を全部やる必要はありません。決めていない種類も、既定の扱いで安全側に倒れます。移した先の扱いはデッドレターキューの記事で扱っています。

記録がなければ数えられず、数えられなければ分けられない。

充足 2 / 4失敗の内容を記録している種類ごとに数えられないと、どこから手を付けるか決まらない分からない失敗の既定の扱いがある全種類を決めなくても、回数を区切って移せば安全側に倒れる番号の範囲だけで送り直しを決めている429は4xxだが送り直せば通る。実測では235件を取りこぼした失敗を捕まえて何もせず進んでいる記録が残らないので、分け方を決める材料が手に入らない失敗1000件・8種類での実測にもとづく。全部を送り直す方式では無駄が1484回だった。
図2 ── エラー処理設計の点検項目
出典MDN「429 Too Many Requests」2026-08-18 確認
This mechanism of asking the client to slow down the rate of requests is commonly called
原文MDN「429 Too Many Requests」 この内容の有効期限2027-02-18

よくある質問

全部送り直せばよいのでは
取りこぼしは0件になりますが、通らないものを繰り返します。この計測では1484回が無駄になりました。
番号の範囲で分けてはいけないのですか
429が抜けます。4xxですが送り直せば通る種類で、この計測では235件と最も多い失敗でした。
どこまで細かく分ければよいですか
実際に返ってくる種類を数えてからで足ります。この計測でも8種類のうち1つを足しただけで全部分かれました。
何を根拠に分けるのですか
番号だけでなく、待ち時間を示す情報が付いているかも手がかりになります。

まとめ

  • 失敗を送り直せるかどうかで分ける設計
  • 5xxだけだと235件を取りこぼす
  • 429を足すと1000/1000
  • 全部送り直すと無駄が1484回

今日から始められること

  1. 実際に返ってきた失敗を、種類ごとに数える
  2. 多い順に並べて、上から3種類だけ見る
  3. その3種類が送り直せるかどうかを決める
  4. 決めた内容を、送り直しの処理に反映する

実務で組んだエラー処理設計のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る