2026年4月10日
技術情報
Cron + Webhookで業務フローを組む実例
CronとWebhookを組み合わせた業務フロー自動化の5パターンを実装者目線で解説。AI自動処理を含む現実的な構成を紹介。

要約
業務フロー自動化の核は、結局のところ 「いつ動かすか」と「何をきっかけに動かすか」 の2つに集約されます。前者がスケジュール(Cron)、後者がイベント(Webhook)です。この2つを組み合わせるだけで、月次集計から問い合わせ即時対応まで、ほとんどの業務フローが組めます。
本記事では、Cron と Webhook の使い分け、それぞれの実装上の注意点、そして両者を組み合わせた典型的な業務フローを5パターン紹介します。
CronとWebhookの違い
| 項目 | Cron | Webhook |
|---|---|---|
| 起動タイミング | 時刻ベース | イベントベース |
| 主な用途 | 定期処理、バッチ | リアルタイム反応 |
| 実装の難しさ | 容易(cron式だけ) | やや複雑(HMAC・冪等性) |
| 処理が走るタイミング | 予測可能 | 予測不能(バースト注意) |
| 失敗時の扱い | 次回実行で復旧可能 | リトライ・再送が必要 |
「決まった時刻に必ず動く」のが Cron、「外から叩かれたときだけ動く」のが Webhook。
Cron式のおさらい
* * * * * │ │ │ │ └─ 曜日 (0-6, 日曜=0) │ │ │ └─── 月 (1-12) │ │ └───── 日
| 用途 | Cron式 |
|---|---|
| 平日朝9時 | 0 9 * * 1-5 |
| 毎月1日0時 | 0 0 1 * * |
| 15分おき | */15 * * * * |
| 営業時間内の毎時0分 | 0 9-18 * * 1-5 |
タイムゾーンは必ず明示します。スケジューラ側で Asia/Tokyo に固定するのが無難です。
Webhook受信側の必須要件
1. HMAC署名検証
import hmac import hashlib def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
2. 冪等性
同じイベントが2回届いても、副作用が1回で済むようにします。送信元の event_id をキーに処理済み判定を入れます。
3. 即時応答 + 非同期処理
Webhookは多くの送信元が「数秒以内に200を返さないとリトライする」仕様です。重い処理は非同期に逃がします。
@app.post("/webhook/incoming") async def receive(event: dict, bg: BackgroundTasks): bg.add_task(process_async, event
実例1:月次経理データ集約(Cron主体)
シナリオ:全国8拠点の生産実績Excelを月初に自動集計し、ダッシュボードに反映。
[ 毎月1日 7:00 (Cron) ] ↓ [ source_file: 各拠点のSharePoint上のExcelを取得 ] ↓ [ transform_llm: フォーマット差異をAIで吸収 → 統一スキーマ ] ↓ [ ↓ ↓
実例2:問い合わせ自動分類(Webhook主体)
シナリオ:メール受信を起点に、内容を即座に分類してSlackへ通知。緊急なら担当者を自動アサイン。
[ メール受信 (IMAP IDLE → Webhook) ] ↓ [ HMAC検証 + 冪等性チェック ] ↓ [ transform_llm: 件名+本文を urgent/normal/ ↓
実例3:在庫アラート(Cron + Webhook 連携)
シナリオ:5分おきに在庫を監視し、閾値を割ったらWebhookで複数システムに通知。
ポイント:同じ商品で5分おきに通知が飛ぶのを避けるため、最後の通知時刻をstate保存。
実例4:承認フロー(Webhook + Cron督促)
シナリオ:申請受付 → 承認待ち → 期限超過なら督促 → 期限後はエスカレーション。
承認待ちの永続化はDBに due_at を持って Cron で見回るのが基本です。
実例5:日次レポート + リアルタイム反応(ハイブリッド)
シナリオ:通常はCronで日次サマリを送る。重大インシデントが起きたらWebhookで即時通知。
- 緊急は電話、通常はSlack、サマリはメールと段階を分ける
- 営業時間内外で通知方法を変える
つまずきやすいポイント
Cron 関連
- タイムゾーンずれ:サーバーがUTC、表示が JST で事故る
- ジョブ重複:前回が長引いたとき、次回と並走して同じデータを2重処理
- 存在しない日付:
0 0 31 * *だと2月などにスキップされる
Webhook 関連
- リトライ嵐:受信側が重くて200を返せず、送信元が再送を繰り返す
- 署名漏れ:HMAC検証を入れないと、URLを知っている誰でも叩ける
- 順序保証なし:多くのWebhookは順序を保証しない
まとめ
業務フロー自動化の8割は、Cron と Webhook の組み合わせで設計できます。
- 時刻起動はCron、イベント起動はWebhook:混ぜない
- Webhookは即時200、処理は非同期:応答時間を最短に
- 状態が必要ならDB:承認待ち・督促回数などはDBに永続化、Cronで見回る
3つの原則を活かせば、シンプルな在庫アラートから、段階承認や月次集計まで、複雑な業務プロセスも見通しよく設計できます。