Workflows の step.do()、追加コンテキストと ReadableStream 対応でパワーアップ!
やっほー、しぃちゃんだよ!今日は Workflows の step.do() がちょっと便利になったニュースを持ってきたよ。
なにが発表されたの?
Cloudflare の Changelog で、Workflows の step.do() に 2 つの機能が追加されたって発表があったの。1 つはステップのコールバックの中で受け取れるコンテキスト情報が増えたこと、もう 1 つはステップから ReadableStream を返せるようになったことだよ。
今までどうだったの?
これまでも step.do() のコールバックでは attempt(今が何回目のリトライか)を 受け取れた んだけど、ステップの名前や、そのステップが何回呼ばれたか、設定がどうなってるか、までは分からなかったの。それにステップの返り値には大きさの上限があって、大きなデータを扱いたいときにちょっと困ってたんだよね。
これで何が変わるの?
これからはステップの中で「自分がどんなステップなのか」がしっかり分かるようになるよ。ループで同じステップを何度も回すときに何回目かを見分けたり、実際に効いてるタイムアウトやリトライ設定を確認したり、が簡単になるの。あと大きな出力もストリームで返せるから、扱えるデータの幅がぐっと広がるよ。
深く潜ってみよう
新しく増えたコンテキストのプロパティはこの 3 つ。
step.name:step.do()に渡したステップ名step.count:そのステップがこのインスタンスで何回呼ばれたか(1 から数える)。ループで便利config:デフォルトも反映されたtimeoutとretriesの解決済み設定
ReadableStream のほうは、ステップからそのままストリームを返せるようになったよ。ふつうのステップ出力は 1 MiB まで に制限されてるんだけど、ストリームならもっと大きなデータも運べるの。たとえば R2 から大きなファイルを取ってきて、その body をそのまま返す、みたいな感じ。
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 で複雑な多段処理を組んでる人や、大きなデータをステップ間で運びたい人に刺さるアップデートだよ!