ClaudeCloudflare Developer Platform2026/05/01 0:00

Workflows, Workers - Run Workflows inside Dynamic Workers with the @cloudflare/dynamic-workflows library

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

claudejamodel: claude-haiku-4-5

@cloudflare/dynamic-workflows ライブラリでDynamic Worker内でWorkflowを実行可能に

Key Points

  • Dynamic Worker内でのWorkflow実行が可能
  • メタデータベースの自動再読み込み機構
  • マルチテナント対応の動的ワークフロー

Summary

@cloudflare/dynamic-workflows ライブラリにより、Dynamic Worker内でWorkflowを実行し、ランタイムで読み込まれるコードの耐久性を確保できるようになりました。

Key Points

  • 動的ワーカーの永続性: Worker Loaderがオンデマンドで読み込むDynamic Worker内でも、Workflowが数時間~数日のスリープ後に再開される際に、メタデータを使用して正しいDynamic Workerを再読み込み
  • 事前登録不要: Workflowを事前に登録する必要がなく、必要に応じてDynamic Worker内でWorkflowコードを読み込み、エンジンが永続化とリトライを自動処理
  • ユースケース: SaaS プラットフォーム(テナント別の自動化)、AI エージェントフレームワーク(ランタイム生成の複数ステップ計画)、マルチテナントジョブシステム(顧客別の処理ロジック)に対応
  • 透過的な実装: Workflowコード自体はルーティングの影響を受けず、通常通り動作

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

claudejamodel: claude-haiku-4-5

@cloudflare/dynamic-workflows ライブラリを使用して Dynamic Workers 内で Workflows を実行

@cloudflare/dynamic-workflows ライブラリを使用して Dynamic Workers 内で Workflows を実行

2026年5月1日

@cloudflare/dynamic-workflows ↗ を使用して、Dynamic Worker 内で Workflow を実行できるようになりました。これにより、実行時に読み込まれるコードの耐久性のある実行が保証されます。

概要

Worker Loader は Dynamic Workers をオンデマンドで読み込みますが、これまでは耐久性が課題でした。Dynamic Worker 内でも、Workflow は複数のステップ間で数時間から数日間スリープする可能性があり、再開時には元の Dynamic Worker コードはメモリに存在しなくなります。

このライブラリは、各 Workflow インスタンスにメタデータでタグを付けることで、どの Dynamic Worker を読み込むかを識別し(例:テナント ID)、Workflow が再開するたびに Worker Loader を通じて一致する Dynamic Worker を再読み込みすることで、この問題を解決します。

主な特徴

  • Dynamic Workers はオンデマンドで作成されるため、各 Workflow を事前に登録したり、個別に管理したりする必要がありません
  • 必要な時点で Dynamic Worker に Workflow コードを読み込むと、Workflows エンジンが背後で永続性と再試行を処理します
  • Workflow コード自体はルーティングの影響を受けず、通常通り動作します

ユースケース

これにより、Workflow コード自体が動的なパターンが可能になります。以下の場合に特に有用です:

  • SaaS プラットフォーム:各テナントが独自のオートメーション(オンボーディング シーケンス、承認チェーン、請求再試行ロジックなど)を定義する場合
  • AI エージェント フレームワーク:エージェントが実行時にマルチステップ プランを生成・実行し、再起動後も存続し、ツール呼び出し間で人間の承認を待つ場合
  • マルチテナント ジョブ システム:各顧客が独自の処理ロジックを送信し、すべてのステップが進捗を永続化し、失敗時に再試行する場合

実装例

import {
  createDynamicWorkflowEntrypoint,
  DynamicWorkflowBinding,
  wrapWorkflowBinding,
  type WorkflowRunner,
} from "@cloudflare/dynamic-workflows";

export { DynamicWorkflowBinding };

interface Env {
  WORKFLOWS: Workflow;
  LOADER: WorkerLoader;
}

function loadTenant(env: Env, tenantId: string) {
  return env.LOADER.get(tenantId, async () => ({
    compatibilityDate: "2026-01-01",
    mainModule: "index.js",
    modules: {
      "index.js": await fetchTenantCode(tenantId),
    },
    // Dynamic Worker は実際の Workflow バインディングと同じように使用します。
    // すべての create() は自動的に { tenantId } でタグ付けされます。
    env: {
      WORKFLOWS: wrapWorkflowBinding({ tenantId }),
    },
  }));
}

// エントリポイント名は、Wrangler 設定ファイルの workflows バインディング内の `class_name` と一致する必要があります。
export const DynamicWorkflow = createDynamicWorkflowEntrypoint<Env>(
  async ({ env, metadata }) => {
    const stub = loadTenant(env, metadata.tenantId as string);
    return stub.getEntrypoint("TenantWorkflow") as unknown as WorkflowRunner;
  },
);

export default {
  fetch(request: Request, env: Env) {
    const tenantId = request.headers.get("x-tenant-id")!;
    return loadTenant(env, tenantId).getEntrypoint().fetch(request);
  },
};

詳細情報

詳細なウォークスルーについては、Dynamic Workflows ガイドを参照してください。