OpenAICloudflare Developer Platform2026/07/09 12:00

Workflows - Workflows now supports delay functions when retrying

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

Workflowsがリトライ時の遅延を関数で指定可能に

Key Points

  • 動的な遅延関数対応
  • エラー/attemptで適応的に待機
  • 文字列/数値/Promiseを返せる

Summary

  • Cloudflare Workflowsのステップリトライで、従来の固定遅延に加え動的な遅延関数(retries.delay)を渡せるようになりました。
  • 遅延関数は({ ctx, error })を受け取り、ctx.attemptやエラー内容に基づいて次の遅延を計算できます。
  • 返り値は期間文字列(例: "10 seconds")、数値、または期間を解決するPromiseを返せます。
await step.do("sync customer", {
  retries: {
    limit: 5,
    delay: ({ ctx, error }) => {
      if (error.message.includes("rate limit")) {
        return `${ctx.attempt * 30} seconds`; // レート制限時は長めに待つ
      }
      return "10 seconds"; // 短いネットワークエラーは早めに再試行
    }
  }
}, async () => { await syncCustomer() });

Key Points

  • 遅延をエラー種別(rate limitやネットワークエラー等)や試行回数に応じて適応可能。
  • APIレスポンスの Retry-After ヘッダ等を解析して、ベンダー推奨の待機時間を反映できる。
  • 外部のキューやスケジューラを使わず、Workflows内で再試行ロジックを簡潔に実装できる。
  • JavaScript/TypeScriptで利用可能。ctx.attempt と error オブジェクトを利用して実装するのが基本パターン。

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

Workflows - 再試行時に遅延関数をサポート

Workflows — 再試行時に遅延関数をサポート

Workflows では、各ステップの組み込み再試行動作を構成できます。従来は秒・分・時間などの固定遅延や、constant、linear、exponential といったバックオフ戦略を設定できました。ステップの再試行は、動的な遅延関数をサポートするようになりました。

retries.delay に関数を渡すことで、単にベース遅延とバックオフ戦略を選ぶ代わりに、失敗した試行(attempt)や投げられた error から次の遅延を計算できます。これにより、再試行の動作を障害の種類に応じて調整できます。たとえば、レート制限エラーの後は長めに待ち、短時間のネットワーク障害の後は早めに再試行する、という処理が可能です。下流 API がエラー内で Retry-After 値を返すような場合にも、遅延関数でその指示に従わせることができます。

JavaScript

await step.do("sync customer", {
  retries: {
    limit: 5,
    delay: ({ ctx, error }) => {
      if (error.message.includes("rate limit")) {
        return `${ctx.attempt * 30} seconds`;
      }
      return "10 seconds";
    },
  },
}, async () => {
  await syncCustomer();
});

TypeScript

await step.do("sync customer", {
  retries: {
    limit: 5,
    delay: ({ ctx, error }) => {
      if (error.message.includes("rate limit")) {
        return `${ctx.attempt * 30} seconds`;
      }
      return "10 seconds";
    },
  },
}, async () => {
  await syncCustomer();
});

ポイント

  • 動的な遅延関数は、duration の文字列(例: "10 seconds")、数値、または duration に解決する Promise を返すことができます。
  • 再試行ロジックを別にキューやスケジューラで実装することなく、適応的な再試行を実現できます。

詳細は Sleeping and retrying を参照してください。