本文へスキップ
  1. TOP
  2. Web制作
  3. 実務知識
  4. 外部サービス連携で、失敗・遅延・重複をどう扱うか

04 / GROW

育てるフェーズの実務知識

外部サービス連携で、失敗・遅延・重複をどう扱うか

正常時だけでなく、検知・再試行・照合・手動復旧までを設計する

二つの外部システム間で同期と再処理を行う仕組み

PRACTICAL KNOWLEDGE 実務知識

WRITTEN BY

FHW制作チーム

反省会と日々の制作記録をもとに、担当スタッフが実際に迷い、確認し、判断した過程を整理しています。

開発中に一件のデータを送受信できれば、接続自体は確認できます。しかし本番運用では、接続先の停止、通信の遅延、認証期限、想定外の値、大量データ、同じ通知の再送などが起こります。

外部サービスは自社サイトと同じタイミングで動き、同じ方法で復旧できるとは限りません。

私たちが外部連携を確認するとき、一件の送受信に成功しても「完成」とは考えません。むしろ確認したいのは、その先です。失敗をどう検知し、利用者への影響をどう抑え、後から正しい状態へどう戻すかまでを完成条件にします。

最初に、どこを正とするかを決める

同じ会員、求人、商品、問い合わせ情報を複数のシステムで編集できると、どちらの値を採用するか判断できません。項目ごとに、登録元、正となる場所、更新方向、反映タイミングを決めます。

一方向同期でも、Web側で追加する公開状態や表示用の情報がある場合は、外部データと自社データを分けます。外部側の更新で自社側の補足まで消えないよう、所有する項目を明確にします。

一件を識別するキーと、処理を識別する番号を分ける

同じ利用者や商品を判断する外部IDに加え、同じ連携処理が再送されたかを判断する識別子を持たせます。通信が途中で切れると、送信側は失敗と判断して同じ内容を再送する場合があります。

同じ処理を複数回受け取っても結果が一つになるよう、既に処理済みかを確認します。古いデータが後から到着して新しい値を戻さないよう、更新時刻や版も判断材料にします。

全件同期と差分同期の役割を分ける

差分同期は処理量を減らせますが、一度取りこぼしたデータがそのまま残る可能性があります。全件同期は整合性を戻しやすい一方、件数が多いと時間と負荷が増えます。

日常は差分同期を行い、定期的または必要時に全件照合できる構成を検討します。処理件数、追加、更新、変更なし、除外、失敗を分けて記録します。

通信の失敗と、データの失敗を分ける

接続できない、時間切れ、認証エラーなどは通信上の失敗です。接続できても、必須項目不足、存在しない選択肢、文字数超過、関連先が見つからない場合はデータ上の失敗です。

通信エラーは時間を置いた再試行で直る場合がありますが、不正なデータを同じまま何度再送しても直りません。エラーの種類ごとに、自動再試行、運用担当者の確認、接続先への問い合わせを分けます。

部分失敗の状態を残す

百件のうち一件だけ失敗したとき、全件を止めるのか、正常な九十九件を進めるのかは業務によって異なります。重要なのは、成功した範囲と失敗した範囲を追えることです。

正常行だけ進める場合は、失敗データの識別子、理由、受信値、再処理状態を残します。複数システムをまたぐ処理では、単純なデータベースの巻き戻しだけでは元に戻らないことがあります。

利用者への表示と、内部の処理状態を分ける

外部連携が完了するまで時間がかかる場合、画面上で「完了」と表示すると誤解を招きます。受付済み、処理中、連携済み、確認が必要、再処理中など、利用者に必要な状態を整理します。

利用者には次の行動が分かる案内を出し、運用担当者には調査に必要な処理番号と状態を残します。連携先が停止しても、受付データを失わず後から送れる構成を検討します。

失敗を担当者へ知らせる

エラーをログへ残すだけでは、誰も気づかないことがあります。一定件数の失敗、連続した通信エラー、最終成功時刻の遅れ、認証期限など、通知する条件を決めます。

通知には、発生時刻、対象処理、件数、影響、再試行状況、確認先を含めます。一件ごとに大量通知すると重要な障害が埋もれるため、集約や優先度も検討します。

接続仕様と認証の変化も運用へ含める

外部サービスのAPI仕様、認証方法、権限、利用上限は将来も同じとは限りません。アクセストークンやAPIキーを公開部分へ置かず、更新期限と保管場所、変更担当を決めます。

仕様変更の案内を誰が確認し、検証環境で何を試し、本番へいつ反映するかも連携の運用です。接続できなくなってから調べ始めるのではなく、バージョン、利用量、認証期限を定期確認へ含めます。

手動同期と再実行を安全に用意する

自動処理が失敗したとき、運用担当者が対象期間や対象データを限定して再実行できると復旧が早くなります。ただし、無条件の全件同期ボタンは負荷や重複の原因になります。

実行権限、対象範囲、事前確認、二重実行防止、処理中表示、結果履歴を用意します。再実行前に元データを修正する必要がある場合は、どちらのシステムで修正するかを案内します。

定期的に、両側の件数と代表データを照合する

エラーが出ていなくても、一部の更新だけ欠けることがあります。最終成功時刻、処理件数、外部側と自社側の総数、更新時刻、代表データを定期的に照合します。

差異が見つかったときに、元データ、連携ログ、保存値、公開画面を順に追えるようにします。監視は接続の生存確認だけでなく、情報が正しく流れているかを確認するものです。

この方法が向いているケース

  • 会員や顧客情報を外部システムから同期する
  • フォームや応募情報をCRMへ送る
  • 商品、求人、物件などを定期取得する
  • 決済や通知など外部処理の結果を受け取る
  • 複数のCMSや業務システムで公開状態を揃える

連携を減らした方がよいケース

更新頻度が低く、件数も少なく、担当者が安全に確認できる場合は、手動取込や管理画面更新の方が保守しやすいことがあります。

外部サービスに必要なAPIや契約がない場合も、画面操作の自動化で無理につながず、CSVや確認工程を含む別の受け渡しを検討します。

運用チェック

  • 項目ごとの正となるシステムと更新方向を決めたか
  • データと連携処理の識別子を分けたか
  • 重複受信や古いデータの再送を防げるか
  • 全件同期と差分同期の役割を決めたか
  • 通信エラーとデータエラーを分けたか
  • 部分失敗と再処理状態を追えるか
  • 最終成功時刻や連続失敗を通知できるか
  • 対象を限定して安全に再実行できるか
  • 両側の件数と代表データを定期照合しているか