# Workflows の step.do()、追加コンテキストと ReadableStream 対応でパワーアップ！

やっほー、しぃちゃんだよ！今日は [Workflows](https://developers.cloudflare.com/workflows/) の `step.do()` がちょっと便利になったニュースを持ってきたよ。

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

Cloudflare の Changelog で、[Workflows](https://developers.cloudflare.com/workflows/) の `step.do()` に 2 つの機能が追加されたって発表があったの。1 つはステップのコールバックの中で受け取れる**コンテキスト情報が増えた**こと、もう 1 つはステップから **`ReadableStream` を返せるようになった**ことだよ。

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

これまでも `step.do()` のコールバックでは `attempt`（今が何回目のリトライか）を [受け取れた](https://developers.cloudflare.com/changelog/post/2026-03-06-step-context-available/) んだけど、ステップの名前や、そのステップが何回呼ばれたか、設定がどうなってるか、までは分からなかったの。それにステップの返り値には大きさの上限があって、大きなデータを扱いたいときにちょっと困ってたんだよね。

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

これからはステップの中で「自分がどんなステップなのか」がしっかり分かるようになるよ。ループで同じステップを何度も回すときに何回目かを見分けたり、実際に効いてるタイムアウトやリトライ設定を確認したり、が簡単になるの。あと大きな出力もストリームで返せるから、扱えるデータの幅がぐっと広がるよ。

## 深く潜ってみよう

新しく増えたコンテキストのプロパティはこの 3 つ。

- `step.name`：`step.do()` に渡したステップ名
- `step.count`：そのステップがこのインスタンスで何回呼ばれたか（1 から数える）。ループで便利
- `config`：デフォルトも反映された `timeout` と `retries` の解決済み設定

`ReadableStream` のほうは、ステップからそのままストリームを返せるようになったよ。ふつうのステップ出力は [1 MiB まで](https://developers.cloudflare.com/workflows/reference/limits/) に制限されてるんだけど、ストリームならもっと大きなデータも運べるの。たとえば R2 から大きなファイルを取ってきて、その `body` をそのまま返す、みたいな感じ。

```ts
const largePayload = await step.do("fetch-large-file", async () => {
  const object = await env.MY_BUCKET.get("large-file.bin");
  return object.body;
});
```

ただし注意点として、ストリームで返した出力も Workflow インスタンスのストレージ制限にはちゃんとカウントされるから、そこは覚えておいてね。

## まとめ

- Cloudflare の Workflows の `step.do()` に、追加のステップコンテキストと `ReadableStream` 対応が入ったよ
- コンテキストには `step.name`・`step.count`・`config` が増えて、ループや設定確認がやりやすくなったの
- ステップから `ReadableStream` を返せば、1 MiB を超える大きな出力も扱える（ただしストレージ制限にはカウント）

Workflows で複雑な多段処理を組んでる人や、大きなデータをステップ間で運びたい人に刺さるアップデートだよ！
