# Cron 用 Worker はもう卒業！Workflows のバインディングから直接スケジュールできるよ

やっほー、しぃちゃんだよ！ 今日は「定期実行のためだけに Worker を1個用意する」っていう地味な手間がなくなる、うれしいアップデートを見つけたから紹介するね。

## なにが発表されたの？

Cloudflare の Changelog から、[Workflows](https://developers.cloudflare.com/workflows/) の新しい使い方の話だよ。これまでは Workflow を定期的に走らせたいとき、[Workers](https://developers.cloudflare.com/workers/) の scheduled ハンドラ（cron トリガー）を別に用意して、そこから Workflow を起動する必要があったの。

それが、`wrangler.jsonc` の Workflow バインディングに cron スケジュールを **直接** 書けるようになったんだよ。時間になると、新しい Workflow インスタンスが自動で作られて走るの。

## 今までどうだったの？

定期実行させたいだけなのに、

- スケジュール用の Worker を1個作って
- その scheduled ハンドラの中から Workflow を叩く

っていう「橋渡し役」のコードが必要だったの。やりたいことは「1時間おきに走らせて」だけなのに、余分な部品がひとつ増えてたんだね。

## これで何が変わるの？

バインディングに `schedules` を書くだけで済むようになったよ。しかも同じ Workflow に複数の cron パターンを並べられるの。しぃちゃんが見た例だと、こんな3つが1つのバインディングに付いてたよ。

- `0 * * * *` … 毎正時（1時間おき）
- `*/15 * * * *` … 15分おき
- `0 9 * * MON-FRI` … 平日の朝9時

データベースのバックアップ、請求書の生成、レポートの集計、お掃除ジョブみたいな「定期的にやりたい仕事」を、Workflows の得意技（リトライ内蔵・複数ステップの永続実行・タイムアウト設定）を活かしたまま回せるようになるの。

## 深く潜ってみよう

設定は `wrangler.jsonc` にこう書くだけだよ。

```json
{
  "workflows": [
    {
      "name": "my-scheduled-workflow",
      "binding": "MY_WORKFLOW",
      "class_name": "MyScheduledWorkflow",
      "schedules": ["0 * * * *", "*/15 * * * *", "0 9 * * MON-FRI"]
    }
  ]
}
```

あとは `WorkflowEntrypoint` を継承したクラスの `run()` を書けば、各スケジュールのたびにそれが自動で呼ばれるの。中では `step.do()` を使って、ステップ単位で `retries`（回数・待ち時間・バックオフ）や `timeout` を細かく指定できるよ。もし途中のステップがコケても、そのステップだけを設定どおりにリトライしてくれるから安心なの。

トリガーまわりの詳しい書き方は [Trigger Workflows](https://developers.cloudflare.com/workflows/build/trigger-workflows/) の開発者ガイドにまとまってるよ。

## まとめ

- Workflow バインディングに `schedules` で cron を **直接** 書けるようになった
- 定期実行用の別 Worker（scheduled ハンドラ）が要らなくなる
- 1つの Workflow に複数の cron パターンを付けられる
- 各スケジュールごとに新しい Workflow インスタンスが自動生成される

定期バッチを Cloudflare で組んでる人、これから組みたい人にはスッと刺さるアップデートだね。週明けに `wrangler.jsonc` をちょっと直すだけで試せそうだよ！
