Webhook vs ポーリング — あなたに合うのはどっち?
こんにちは、チェウォンです。
システム間でデータをやり取りする方法は、主に2つあります。Webhookとポーリングです。名前は技術的に聞こえますが、コンセプトはとてもシンプルです。
前回の記事でWebhookについてお話ししました。今日はポーリングと比較して、あなたの状況に合うのはどちらか判断できるようにしましょう。
荷物配達のたとえ、再び
ポーリングは、配達ドライバーに1時間ごとに電話するようなもの。「荷物まだ?」まだ届いていなくても電話し続ける。「はい」と聞けるまでやめない。
Webhookは、玄関のチャイムがあるようなもの。荷物が届いたら、ドライバーがチャイムを鳴らす。聞く必要がない — 自動で通知される。
技術的に言うと:
- ポーリング:定期的に「新しいデータある?」と問い合わせる(Pull)
- Webhook:新しいデータが発生したら自動で通知される(Push)
比較表
| ポーリング | Webhook | |
|---|---|---|
| 仕組み | 定期的なリクエスト | イベント駆動の通知 |
| リアルタイム性 | 低い(間隔に依存) | 高い(ほぼ即時) |
| 効率 | 低い(空のレスポンスが多い) | 高い(必要なときだけ発動) |
| 実装 | 比較的簡単 | 受信サーバーが必要 |
| データの抜け | 間隔中に取りこぼす可能性 | 失敗時にリトライ可能 |
| サーバー負荷 | 高い(常時リクエスト) | 低い(イベント時のみ) |
| コスト | リクエスト数に比例 | イベント数に比例 |
| 注意点 | APIレート制限に注意 | 重複送信・順序保証なしの可能性 |
Webhookを使うときに知っておくべきこと
Webhookは効率的ですが、いくつか知っておくべき特性があります:
- 受信側のレート制限 — サーバーには1秒あたりのリクエスト上限がある場合があります。データが一気に届くと、一部が拒否されることがあります。稼働前に双方の処理上限を確認してください
- 重複配信 — ネットワーク障害で送信側が配信失敗と判断すると、同じデータを再送することがあります。重要なデータには
order_idのようなユニークIDで重複フィルタリングを行ってください - 順序の保証なし — Webhookはイベントの到着順序を保証しません。「注文更新」が「注文作成」より先に届くこともあります。タイムスタンプで順序を判断してください
- レスポンス時間 — Webhook送信側は通常5〜10秒以内のレスポンスを期待します。重い処理が必要な場合は、まず簡単な受信確認を返してから非同期で処理してください
これらの特性があるからこそ、以下で説明するように、実際の運用ではWebhookとポーリングを組み合わせるケースが多いのです。
ポーリングの方が合う場面
ポーリングは悪い方法ではありません。こんな場面では実はポーリングの方が適しています:
- 相手がWebhookに対応していない — まだWebhookを提供していないシステムもあります。その場合、ポーリングが唯一の選択肢です
- 過去データを一括取得したい — 「先月の注文を全部取得」はポーリング(APIクエリ)のユースケースです
- リアルタイム性が不要 — 1日1回の同期で十分なら、ポーリングで問題ありません
Webhookの方が合う場面
ほとんどのビジネスシナリオでは、Webhookの方が適しています:
- リアルタイム通知が必要 — 注文、決済、予約など、即座の対応が求められるもの
- コストを抑えたい — 「何かあった?」という無駄なリクエストがない
- 自動化を構築したい — 「注文が入る → Slackにアラート → 自動記録」のワークフロー
- 複数のデータソースを統合している — 各ソースがデータをプッシュしてくれるので、一箇所で管理できる
Webhookの最大のハードル:受信サーバー
Webhookの最大の障壁は、受け取るためのサーバーが必要ということです。
ポーリングなら、こちらからリクエストを送るだけ — シンプルなスクリプトで済みます。しかしWebhookは相手から送られてくるので、相手が送れるURLが必要です。通常、これはサーバーを運用または構築することを意味します。
3Min APIはまさにここを解決します。サーバーなしでWebhook受信用のURLを作成できます。数クリックでWebhookエンドポイントが完成です。
実践的な組み合わせ:Webhook + ポーリング
実際の現場では、両方を組み合わせて使うケースが多いです:
- リアルタイムデータはWebhookで
- 過去データの同期や取りこぼしの補完はポーリング(APIクエリ)で
たとえば、ECの注文データをWebhookでリアルタイムに受け取りつつ、毎日1回APIクエリで「取りこぼしがないか」確認する運用です。
3Min APIもこの組み合わせに対応しています。Webhookでデータを受け取り、必要なときにダッシュボードやAPIで保存されたデータを検索できます。
まとめ
- 速い自動データ取得が必要? → Webhook
- 過去データが必要、または相手がWebhook非対応? → ポーリング
- 最も信頼性の高い方法? → Webhook + ポーリングの組み合わせ
どちらが合うか迷ったら、まずWebhookから始めてみてください。ほとんどのビジネスユースケースでより効率的で、自動化の基盤になります。