# 実行時ロードのコードも耐久実行！@cloudflare/dynamic-workflows が登場！

やっほー、しぃちゃんだよ！今日はサーバーレスがまたひとつ賢くなるお話を持ってきたよ。

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

Cloudflare の Changelog からのお知らせだよ。[@cloudflare/dynamic-workflows](https://github.com/cloudflare/dynamic-workflows) っていう新しいライブラリを使うと、[Dynamic Worker](https://developers.cloudflare.com/dynamic-workers/) の中で [Workflow](https://developers.cloudflare.com/workflows/) を動かせるようになったの。実行時に読み込まれるコードでも、ちゃんと耐久実行(durable execution)ができるのがポイントだよ。

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

Worker Loader は Dynamic Workers を必要なときにオンデマンドで読み込む仕組みなんだけど、ここに耐久性の難しさがあったの。Workflow はステップとステップの間で何時間も、ときには何日も眠ることがあるよね。目を覚ました頃には、最初に読み込んだ Dynamic Worker のコードはもうメモリに残っていない…。これだと続きを動かせなくて困っちゃう。

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

このライブラリは、各 Workflow インスタンスに「どの Dynamic Worker を読み込めばいいか」を示すメタデータ(たとえばテナント ID)をタグ付けしておくの。そして Workflow が目を覚ましたときに、Worker Loader 経由でぴったりの Dynamic Worker を読み直してくれるんだよ。

Dynamic Workers はオンデマンドで作られるから、Workflow を1つずつ事前登録したり個別に管理したりしなくていいの。永続化やリトライは Workflows エンジンが裏でぜんぶ面倒を見てくれて、Workflow のコード自体はいつも通りに書けるのがうれしいところ。

こんな場面で活躍しそうだよ：

- テナントごとに独自の自動化(オンボーディングや承認フロー、請求リトライなど)を持つ SaaS プラットフォーム
- 実行時に複数ステップの計画を組み立て、再起動をまたいだり人の承認を待ったりする AI エージェント基盤
- お客さんが自分の処理ロジックを投げ込み、ステップごとに進捗を保存するマルチテナントなジョブ処理

## 深く潜ってみよう

使い方はこんな感じで、`createDynamicWorkflowEntrypoint` でエントリポイントを作るよ。

```ts
import { createDynamicWorkflowEntrypoint } from "@cloudflare/dynamic-workflows";

export const DynamicWorkflow = createDynamicWorkflowEntrypoint(
  async ({ env, metadata }) => {
    const stub = loadTenant(env, metadata.tenantId);
    return stub.getEntrypoint("TenantWorkflow");
  },
);
```

ここで作るエントリポイントの名前は、Wrangler 設定の workflows バインディングの class_name と一致させる必要があるよ。テナントのコードを読み込むときに `wrapWorkflowBinding` で包んでおくと、以降の create() には自動で { tenantId } のタグが付くから、あとはふつうの Workflow バインディングと同じように使えるの。もっと詳しい流れは [Dynamic Workflows のガイド](https://developers.cloudflare.com/dynamic-workers/usage/dynamic-workflows/) を見てね。

## まとめ

- @cloudflare/dynamic-workflows で、Dynamic Worker の中でも Workflow を耐久実行できるようになったよ
- Workflow インスタンスにメタデータをタグ付けして、目覚めたときに正しい Dynamic Worker を読み直す仕組み
- 事前登録なしでテナントごとの Workflow が動かせて、永続化とリトライはエンジンにおまかせ
- マルチテナントな SaaS や、実行時にコードを組み立てる AI エージェント基盤を作っている人にぴったりだよ！
