Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Cron Trigger で時間を意識したアプリケーションを作る

最終更新 Markdown で表示Agent セットアップ

Cloudflare Workflows は、非同期で耐久性のあるプロセスを管理する強力な手段です。scheduled handler でタスクを明示的にスケジュールし、step.sleep で実行を一時停止できるため、時間を意識した高度なアプリケーションを構築できます。

Workflows を使うと、ユーザーを待たせずに非同期プロセスを開始できます。addInteraction 関数がその例です。INTERACTION Workflow の新しいインスタンスを作成します。

src/index.tsxaddInteraction 関数を探します。

こちらを参照

この関数は、ユーザーがダジャレに反応したとき(いいねなど)に呼ばれます。インタラクション処理を直接行わず、処理を Workflow に任せます。

src/workflows/interaction.tsInteractionWorkflow 定義を確認します。この Workflow は、ユーザー / セッションの存在確認や、データベースへのインタラクション記録などを行います。

こちらを参照

リーダーボードのコード

バックグラウンド処理のよくある用途は、データの集計と結果のキャッシュです。リーダーボードの構築がその例です。

src/workflows/leaderboard.tsLeaderboardWorkflow を確認します。この Workflow は、トレンドのダジャレを探すデータベースクエリを実行し、結果を Cloudflare KV(Key-Value Store)に保存します。

こちらを参照

この Workflow は、リーダーボードデータを更新するために定期実行できます。

Wrangler の設定

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 を使ってください。

Puntificator: AI でダジャレを自動生成する

Workflows は、AI モデルとの連携を含む、より複雑な多段階プロセスにも使えます。PuntificatorWorkflow は、AI で新しいダジャレを生成し、評価する例です。

src/workflows/puntificator.tsPuntificatorWorkflow 定義を確認します。

こちらを参照

この Workflow には、次のステップがあります。

  1. トレンドのダジャレを取得する
  2. AI モデルでトレンドに基づく新しいダジャレを作る
  3. 別の AI モデルで、作ったダジャレの品質を評価する
  4. 一定の評価基準を満たした場合だけ保存する

重要な点として、この Workflow には step.sleep の呼び出しがあります。

こちらを参照

このステップは、指定した時間だけ Workflow の実行を一時停止します。公開したダジャレへのユーザー反応を待ってから、人気に応じて次の処理をする場合に便利です。

ネストした Workflows

Workflows は別の Workflow を起動できます。小さなモジュールから複雑なプロセスを組み立てられます。

PuntificatorWorkflow で、PUBLISH Workflow を呼び出している箇所を探します。

こちらを参照

ある Workflow が別の Workflow を起動する例です。関心の分離とモジュール設計が可能になります。

src/workflows/publish.tsPublishWorkflow を確認します。

こちらを参照

この Workflow はダジャレの公開処理を担います。データベースへの保存と、サイト上での表示が含まれると考えられます。

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-trendsjudge-punsave-punpublishwait-for-publishSleeping 状態)などのステップを確認できます。

役に立ちましたか?