workflow-management について
SGCarstrends の Web プロジェクト開発者向けの Vercel WDK ワークフロースキルです。定期的なデータ取得や SNS 投稿のワークフロー追加、デバッグ、変更方法を説明します。
主な機能
- 01ワークフローとステップの定義
- 02Vercel Cron による定期実行の設定
- 03API ルートからのワークフロー起動
- 04共通処理の再利用可能なステップ化
- 05失敗のデバッグとワークフローテストの作成
活用シーン
- 01定期データ取得ワークフローの追加
- 02既存ワークフローのロジックや予定の変更
- 03ワークフロー実行エラーの調査
- 04データソースや SNS 投稿ワークフローの追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ motormetrics/ motormetrics --skill workflow-managementインストール後、Claude Code で/workflow-managementを入力して読み込まれたか確認します。
詳細
ワークフロー管理スキル
このスキルは、apps/web/src/workflows/ にある Vercel WDK(Workflow Development Kit)のワークフローを扱う際に役立ちます。
このスキルを使用するタイミング
- データ取得用の新しいスケジュール済みワークフローを追加するとき
- ワークフローの実行エラーをデバッグするとき
- 既存のワークフローのスケジュールやロジックを変更するとき
- 更新パイプラインに新しいデータソースを統合するとき
- 新しいソーシャルメディア投稿ワークフローを追加するとき
ワークフローのアーキテクチャ
このプロジェクトでは、次の構成で Vercel WDK ワークフローを使用しています。
apps/web/src/workflows/
├── cars.ts # Car registration data workflow
├── coe.ts # COE bidding data workflow
├── deregistrations.ts # Deregistration data workflow
├── regenerate-post.ts # Blog post regeneration workflow
└── shared.ts # Shared workflow steps (social media, cache)
主なパターン
1. ワークフローの定義
ワークフローは Vercel WDK ディレクティブを使って定義します。
import { fetch } from "workflow";
export async function carsWorkflow(payload: CarsWorkflowPayload) {
"use workflow";
// Enable WDK's durable fetch for AI SDK
globalThis.fetch = fetch;
// Step 1: Process data
const result = await processCarsData();
// Step 2: Revalidate cache
await revalidateCarsCache(month, year);
// Step 3: Generate blog post
const post = await generateCarsPost(data, month);
return { postId: post.postId };
}
async function processCarsData(): Promise<UpdaterResult> {
"use step";
// Processing logic - each step is durable and can retry
return await updateCars();
}
2. ワークフローのスケジュール設定
ワークフローは、apps/web/vercel.json で設定された Vercel Cron スケジュールによって起動されます。
{
"crons": [
{ "path": "/api/workflows/cars", "schedule": "0 10 * * *" },
{ "path": "/api/workflows/coe", "schedule": "0 10 * * *" },
{ "path": "/api/workflows/deregistrations", "schedule": "0 10 * * *" }
]
}
3. API ルートとの統合
API ルートは、WDK の start() 関数を使ってワークフローを起動します。
import { start } from "workflow/api";
import { carsWorkflow } from "@web/workflows/cars";
export async function POST(request: Request) {
const payload = await request.json();
const run = await start(carsWorkflow, [payload]);
return Response.json({ message: "Workflow started", runId: run.runId });
}
4. 共有ステップ
共通の処理は shared.ts に切り出します。
export async function publishToSocialMedia(title: string, link: string) {
"use step";
await socialMediaManager.publishToAll({ message: `📰 ${title}`, link });
}
export async function revalidatePostsCache() {
"use step";
revalidateTag("posts:list", "max");
}
5. エラー処理
ステップは失敗時に自動で再試行されます。カスタムのエラー処理を行う場合は、次のようにします。
async function processData() {
"use step";
try {
const result = await updateData();
return result;
} catch (error) {
console.error("Step failed:", error);
throw error; // Re-throw for automatic retry
}
}
よくあるタスク
新しいワークフローを追加する
apps/web/src/workflows/にワークフローファイルを作成します"use workflow"ディレクティブを使ってワークフロー関数を定義します"use step"ディレクティブを使ってロジックをステップに分割しますapps/web/src/app/api/workflows/に API ルートを作成します- 必要に応じて
vercel.jsonに Vercel Cron スケジュールを追加します - ワークフローのロジックをテストするテストを追加します
ワークフローの失敗をデバッグする
- Vercel ダッシュボードでワークフローの実行ログを確認します
- Vercel の関数ログを確認します
- 環境変数が正しく設定されていることを確認します
- 開発サーバーを使って、ローカルでワークフローをテストします
- データベースへの接続と Redis の利用可能性を確認します
既存のワークフローを変更する
- 既存のワークフローの実装を確認します
- 変更が必要なステップを特定します
- エラー処理を維持しながら、ステップのロジックを更新します
- ローカルで変更をテストします
- デプロイして実行状況を監視します
環境変数
ワークフローでは通常、次の環境変数が必要です。
DATABASE_URL- PostgreSQL 接続UPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN- Redis- サービス固有のトークン(Discord webhook、Twitter API など)
ワークフローのテスト
ワークフローのテストを実行します。
pnpm -F @sgcarstrends/web test -- src/workflows
個々のワークフローをローカルでテストします。
# Start dev server
pnpm dev
# Trigger workflow via HTTP
curl -X POST http://localhost:3000/api/workflows/cars
参考資料
- Vercel WDK ドキュメント:https://vercel.com/docs/workflow-kit
- 関連ファイル:
apps/web/src/app/api/workflows/- ワークフローのルートハンドラーapps/web/src/config/platforms.ts- ソーシャルメディアの設定apps/web/vercel.json- Vercel Cron スケジュールapps/web/AGENTS.md- Web アプリケーションのドキュメント
ベストプラクティス
- 冪等性:データが重複することなく安全に再試行できるようにします
- ステップの粒度:ワークフローを
"use step"を使った、小さく目的の明確なステップに分割します - 永続的なフェッチ:AI SDK の呼び出しでは
globalThis.fetch = fetchを設定します - ロギング:デバッグ用に包括的なログを追加します
- テスト:ワークフローのロジックの単体テストを作成します
- 監視:Vercel ダッシュボードでワークフローの実行状況を追跡します
コメント
Markdown 対応