0Pricing
JavaScript Academy · レッスン

リトライとバックオフのパターン

失敗する非同期処理を遅延を挟んで数回リトライし、指数バックオフと小さなジッターを追加します。明確な最大回数で停止します。

「リトライとバックオフのパターン」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。

なぜ再試行するのか

目標:小規模で制御しやすい再試行を追加します。

  • シンプルな再試行ループ
  • 指数バックオフ
  • 小さなジッター
  • 最大試行回数を明確にする
リトライとバックオフのパターン — イラスト1

遅延ヘルパー

試行の間に一時停止するための小さな遅延ヘルパーが必要です。

// delay: resolve after ms
function delay(ms) {
  return new Promise(function (resolve) {
    setTimeout(function () { resolve(); }, ms);
  });
}

async function demoDelay() {
  console.log("wait...");
  await delay(5);
  console.log("done");
}

demoDelay();
リトライとバックオフのパターン — イラスト2

不安定な処理を偽装する

この偽のタスクを使うと、実際のネットワーク呼び出しなしで再試行を練習できます。

// Unstable task: fails first N times, then succeeds
function makeUnstable(failCount, value) {
  let left = failCount;
  return async function run() {
    if (left > 0) {
      left = left - 1;
      throw new Error("temporary");
    }
    return value;
  };
}

const sometimes = makeUnstable(2, "OK");
sometimes().catch(function (e) { console.log("first:", e.message); });
リトライとバックオフのパターン — イラスト3

固定再試行ループ

固定間隔:試行の間に毎回同じ時間だけ待ち、最大試行回数に達したら停止します。

// Retry a few times with a fixed wait
async function retryFixed(fn, tries, waitMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        await delay(waitMs);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const result = await retryFixed(job, 3, 5);
  console.log("fixed result:", result);
})();
リトライとバックオフのパターン — イラスト4

指数バックオフ

バックオフ:試行するたびに待ち時間を増やし、急増を避けるために小さなジッターを加えます。

// Exponential backoff with a tiny jitter
function jitter(ms) {
  const wiggle = Math.floor(Math.random() * 3); // 0..2
  return ms + wiggle;
}

async function retryBackoff(fn, tries, baseMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        const wait = jitter(baseMs * Math.pow(2, i - 1));
        await delay(wait);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const value = await retryBackoff(job, 4, 3);
  console.log("backoff result:", value);
})();
リトライとバックオフのパターン — イラスト5

再試行のヒント

ヒント:

  • 一時的なエラー(タイムアウトやレート制限)の場合にのみ再試行します。
  • 入力が不正な場合は再試行しないでください。
  • 試行回数は少なく(3~5回)し、失敗は簡潔にログへ記録します。
リトライとバックオフのパターン — イラスト6

再試行とバックオフのクイズ

簡単な確認:バックオフの基礎です。

リトライとバックオフのパターン — イラスト7

まとめ

まとめ:固定再試行ループを作成し、小さなジッターを加えた指数バックオフを実装しました。また、アプリの応答性を保つために最大試行回数を設定しました。

リトライとバックオフのパターン — イラスト8

よくある質問

「リトライとバックオフのパターン」レッスンは無料ですか?

はい。「リトライとバックオフのパターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。

「リトライとバックオフのパターン」で何を学びますか?

失敗する非同期処理を遅延を挟んで数回リトライし、指数バックオフと小さなジッターを追加します。明確な最大回数で停止します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「リトライとバックオフのパターン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. async関数の作成、try/catch、並列処理と逐次処理
  2. AbortControllerによるタイムアウトと中止
  3. リトライとバックオフのパターン
← JavaScript Academyに戻る