Cloudflare Workflows は、非同期で耐久性のあるプロセスを管理する強力な手段です。scheduled handler でタスクを明示的にスケジュールし、step.sleep で実行を一時停止できるため、時間を意識した高度なアプリケーションを構築できます。
関連コンテンツ
詳細を確認する場合は、次のページを参照してください。
Workflows を使うと、ユーザーを待たせずに非同期プロセスを開始できます。addInteraction 関数がその例です。INTERACTION Workflow の新しいインスタンスを作成します。
src/index.tsx の addInteraction 関数を探します。
この関数は、ユーザーがダジャレに反応したとき(いいねなど)に呼ばれます。インタラクション処理を直接行わず、処理を Workflow に任せます。
src/workflows/interaction.ts の InteractionWorkflow 定義を確認します。この Workflow は、ユーザー / セッションの存在確認や、データベースへのインタラクション記録などを行います。
バックグラウンド処理のよくある用途は、データの集計と結果のキャッシュです。リーダーボードの構築がその例です。
src/workflows/leaderboard.ts の LeaderboardWorkflow を確認します。この Workflow は、トレンドのダジャレを探すデータベースクエリを実行し、結果を Cloudflare KV(Key-Value Store)に保存します。
この Workflow は、リーダーボードデータを更新するために定期実行できます。
Wrangler の設定ファイルで、Worker と Workflows を構成します。KV 名前空間などのリソースへのバインディング定義や、Workflow のスケジュール設定も含みます。
このエピソードのリポジトリは、トップレベルの [triggers] セクションと、メイン Worker の scheduled handler という従来のパターンで、タイマーに合わせて LEADERBOARD_WORKFLOW インスタンスを作成します。
現在の Workflows プロジェクトでは、通常、バインディング上で Workflow を直接スケジュールできます。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"workflows": [
{
"name": "leaderboard-workflow",
"binding": "LEADERBOARD_WORKFLOW",
"class_name": "LeaderboardWorkflow",
"schedules": [
"*/30 * * * *"
]
}
]
}[[workflows]]
name = "leaderboard-workflow"
binding = "LEADERBOARD_WORKFLOW"
class_name = "LeaderboardWorkflow"
schedules = ["*/30 * * * *"]Workflow インスタンスを作成するかどうかを決める前にカスタムロジックが必要な場合だけ、別の Cron Trigger と scheduled handler を使います。Workflow のスケジュールを設定するときは、最新の Wrangler を使ってください。
Workflows は、AI モデルとの連携を含む、より複雑な多段階プロセスにも使えます。PuntificatorWorkflow は、AI で新しいダジャレを生成し、評価する例です。
src/workflows/puntificator.ts の PuntificatorWorkflow 定義を確認します。
この Workflow には、次のステップがあります。
- トレンドのダジャレを取得する
- AI モデルでトレンドに基づく新しいダジャレを作る
- 別の AI モデルで、作ったダジャレの品質を評価する
- 一定の評価基準を満たした場合だけ保存する
重要な点として、この Workflow には step.sleep の呼び出しがあります。
このステップは、指定した時間だけ Workflow の実行を一時停止します。公開したダジャレへのユーザー反応を待ってから、人気に応じて次の処理をする場合に便利です。
Workflows は別の Workflow を起動できます。小さなモジュールから複雑なプロセスを組み立てられます。
PuntificatorWorkflow で、PUBLISH Workflow を呼び出している箇所を探します。
ある Workflow が別の Workflow を起動する例です。関心の分離とモジュール設計が可能になります。
src/workflows/publish.ts の PublishWorkflow を確認します。
この Workflow はダジャレの公開処理を担います。データベースへの保存と、サイト上での表示が含まれると考えられます。
wrangler コマンドラインツールで、Workflow を手動起動し、実行状態と出力を確認できます。
PuntificatorWorkflow を手動で起動するコマンドは次のとおりです。
npx wrangler workflows trigger puntificatorこのコマンドは Workflow のインスタンスをキューに入れます。成功メッセージとインスタンス ID が返ります。
Workflow の最新インスタンスを確認するコマンドは次のとおりです。
npx wrangler workflows instances describe puntificator latestこのコマンドは、指定した Workflow の直近の実行の詳細を表示します。開始時刻、終了時刻、所要時間、状態、各ステップの状態を含みます。create-new-pun-based-on-trends、judge-pun、save-pun、publish、wait-for-publish(Sleeping 状態)などのステップを確認できます。