🔁
概念 #n8n #ユースケース #リトライ #データ同期 #レート制限 #堅牢性 #冪等性 📚 n8nワークフロー自動化

リトライ付きの堅牢なデータ同期フローを構築する

APIのレート制限・一時障害に対応するリトライロジックとエクスポネンシャルバックオフを実装し、24時間安定して動作するデータ同期ワークフローのパターン。

ユースケース概要

外部APIへのデータ同期で発生する一時的なエラー(503・429・タイムアウト)に自動でリトライし、永続的なエラーのみ担当者に通知する堅牢なフロー設計パターン。

解決する課題: API一時障害のたびに手動再実行が必要な状況をなくし、自己修復するワークフローを実現する

使用するn8nノード:

  • HTTP Request(Retry on Fail 設定)
  • Code(リトライ状態の管理)
  • Wait(エクスポネンシャルバックオフ)
  • IF(リトライ可能エラーと永続エラーの区別)

ワークフロー構成

パターン1: ノード組み込みリトライ(シンプル)

[HTTP Request]
  ↓ Settings → On Error: Retry on Fail
    Max Tries: 5
    Wait Between Tries: 3000ms

パターン2: カスタムリトライロジック(詳細制御)

[HTTP Request: API呼び出し(Error Output有効)]
  ├── 成功 → 後続処理
  └── エラー →
      [Code: リトライ回数カウントアップ]

      [IF: retryCount < 3 AND statusCode IN [429, 503, 504]]
        ├── true  →
        │   [Code: 待機時間計算(指数的バックオフ)]
        │       ↓
        │   [Wait: 計算された時間待機]
        │       ↓
        │   [HTTP Request: 再試行]
        └── false → [Slack: 永続エラー通知]

実装手順

パターン1: 組み込みリトライの設定

Node Settings:
  On Error: Retry on Fail
  Max Tries: 3
  Wait Between Tries: 5000 (5秒)

パターン2: 指数的バックオフの実装

リトライ回数の管理(Codeノード)

const retryCount = ($json._retryCount ?? 0) + 1;
const statusCode = parseInt($json.error?.httpCode ?? '0');

// リトライ可能なエラーコード
const retryableErrors = [429, 503, 504, 500];
const canRetry = retryableErrors.includes(statusCode) && retryCount <= 3;

// 指数的バックオフ: 2^retryCount * 1000ms (2s, 4s, 8s)
const waitMs = Math.pow(2, retryCount) * 1000;

return [{
  json: {
    ...$json,
    _retryCount: retryCount,
    _canRetry: canRetry,
    _waitMs: waitMs
  }
}];

待機時間の設定(Waitノード)

Wait Amount: {{ $json._waitMs }}
Wait Unit: Milliseconds

レート制限(429)への対応

Retry-Afterヘッダーがある場合はその値を待機時間として使用する:

const retryAfter = $input.first().headers?.['retry-after'];
const waitMs = retryAfter
  ? parseInt(retryAfter) * 1000
  : Math.pow(2, $json._retryCount) * 1000;

冪等性の確保

リトライしても安全なAPI設計のポイント:

  • POST ではなく PUT / PATCH でupsert操作にする
  • リクエストに Idempotency-Key ヘッダーを付与する(Stripe等で対応)
  • external_id でのupsertにし、重複作成を防ぐ

ポイント・注意事項

  • 429(レート制限)はリトライが有効だが、401(認証失敗)・404はリトライ不要
  • 指数的バックオフなしの連続リトライはレート制限をさらに悪化させる
  • リトライ上限に達した場合は必ず担当者への通知を実装する

関連機能

  1. 1. 🔄n8n概要 - ワークフロー自動化プラットフォーム
  2. 2. ⚙️n8nワークフローの基本(ノード・コネクション・実行)
  3. 3. n8nトリガーの種類(Webhook・スケジュール・イベント)
  4. 4. 🔀n8nロジック制御(フィルター・条件分岐・ループ・マージ)
  5. 5. 🌐n8n HTTP Request・API連携
  6. 6. 🔗n8n主要インテグレーション(Slack・Gmail・GitHub)
  7. 7. 🛡️n8nエラーハンドリング・デバッグ
  8. 8. 🤖n8n AI・LLMエージェント(Chain・Agent)
  9. 9. 💻n8n Codeノード・カスタム処理
  10. 10. 🏢n8nエンタープライズ機能(ソース管理・シークレット・チーム管理)
  11. 11. 🌤️毎朝SlackにAIで天気・ニュースを通知する
  12. 12. 📊GitHubのPRをGoogleシートに自動記録する
  13. 13. 📧新規ユーザー登録時にWelcomeメールを自動送信する
  14. 14. 💳StripeのWebhookで決済完了を検知して処理する
  15. 15. 📈スケジュールトリガーで週次レポートを自動生成する
  16. 16. 🎫Gmailトリガーでサポートメールを自動Notionチケット化する
  17. 17. 🎯条件分岐でリード属性に応じて担当者を振り分ける
  18. 18. 📨ループ処理でリストを走査し一括メール送信する
  19. 19. 📋複数APIのデータをマージして統合レポートを作成する
  20. 20. 🗄️外部REST APIからデータを取得してDBに保存する
  21. 21. 🔍GraphQL APIでGitHubのIssueを取得・加工する
  22. 22. 🔐Bearer認証付きAPIを呼び出してデータ同期する
  23. 23. SlackとNotionを連携したチームタスク管理フロー
  24. 24. 🤝GmailとHubSpotを連携したCRM自動化フロー
  25. 25. 🚀GitHubデプロイイベントをSlackに通知する
  26. 26. 🚨APIエラー発生時にSlackへアラートを送る
  27. 27. 🔁リトライ付きの堅牢なデータ同期フローを構築する
  28. 28. 📝エラーログをAirtableに自動記録する
  29. 29. 🤖LLMを使ったカスタマーサポート自動応答ボット
  30. 30. 🔎ドキュメントRAG検索システムを構築する
  31. 31. 📬AIでメール内容を自動分類・ルーティングする
  32. 32. 🔧JavaScriptで複雑なデータ変換処理を実装する
  33. 33. 📄npmライブラリを使ったPDF自動生成フロー
  34. 34. ✔️カスタムバリデーションロジックをCodeノードで実装する
  35. 35. 🗂️Gitでワークフローをバージョン管理する
  36. 36. 🌍環境変数で本番・ステージングを切り替える
  37. 37. 👥チームでのワークフロー共同管理フロー
  38. 38. 📋AIで履歴書を自動スクリーニング・スコアリングする
  39. 39. 🧾請求書PDFをOCRで自動データ入力・会計ソフト登録する
  40. 40. 📱ブログ記事→SNS自動投稿パイプラインを構築する
  41. 41. 📦Shopify注文処理を完全自動化する(在庫・配送・顧客通知)
  42. 42. 🔔予約リマインダーを自動送信してノーショーを削減する
  43. 43. 📊経営ダッシュボードを毎朝Slackに自動配信する
  44. 44. 🔭競合情報を自動収集してWeeklyレポートにまとめる
  45. 45. 🎉新入社員オンボーディングを完全自動化する

出典: https://docs.n8n.io/flow-logic/error-handling/