mcpField
W
workflow-automation

workflow-automation

github.com/sickn33開発48.7k1.5k 回インストール今日更新
リポジトリ

workflow-automation について

Agent の自動化を堅牢に設計するためのスキルです。n8n、Temporal、Inngest などの基盤とワークフローパターンを扱い、永続実行や要件に応じた選択を重視します。

主な機能

  1. 01n8n、Temporal、Inngest の比較
  2. 02逐次・並列ワークフローの解説
  3. 03オーケストレーター・ワーカー方式
  4. 04永続実行と障害復旧の説明
  5. 05外部処理の重複防止と検証

活用シーン

  1. 01イベント駆動のバックグラウンド処理設計
  2. 02復旧可能な決済フローの構築
  3. 03文書分析の並列実行計画
  4. 04ワークフロー自動化基盤の選定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill workflow-automation

インストール後、Claude Code で/workflow-automationを入力して読み込まれたか確認します。

同梱ファイルreferences/detailed-guide.md

詳細

ワークフロー自動化

ワークフロー自動化は、AI エージェントの信頼性を支えるインフラです。 永続的な実行がなければ、10 ステップの決済フロー中にネットワークが不調になると、 資金が失われ、顧客の不満を招きます。永続的な実行があれば、ワークフローは 中断したところから正確に再開します。

このスキルでは、脆弱なスクリプトを本番環境に対応した自動化へと変える プラットフォーム(n8n、Temporal、Inngest)とパターン (逐次実行、並列実行、オーケストレーター・ワーカー)を扱います。

重要なポイント:各プラットフォームで重視するトレードオフは異なります。n8n は 使いやすさ、Temporal は正確性、Inngest は開発者体験を最適化しています。 話題性ではなく、実際のニーズに基づいて選択してください。

信頼性とサンプルの制限

永続性があっても、外部への処理が厳密に 1 回だけ実行されるとは限りません。決済・配送のヘルパーは、安定した操作キーをプロバイダーに渡し、成功したかどうかが不明な場合は照合する必要があります。メールには、アウトボックスまたは重複排除の仕組みが必要です。サンプルは、SDK のシグネチャがバージョンによって異なる、不完全な断片です。インストール済みの型定義に照らして検証し、テスト用アカウントを使用してください。また、ペイロードや認証情報をワークフローの履歴やログに残さないでください。

詳細ガイド

このスキルを実行する前に、詳細ガイドをお読みください。ガイドには、完全な手順と参考資料が記載されています。安全対策、前提条件、検証要件は必須事項として扱ってください。特定の作業に絞る場合は関連するセクションを読み、最初から最後まで作業する場合はガイド全体をお読みください。

Inngest の例(TypeScript)

import { inngest } from "./client";

export const processOrder = inngest.createFunction(
  { id: "process-order" },
  { event: "order/created" },
  async ({ event, step }) => {
    // Step 1: Validate order
    const validated = await step.run("validate-order", async () => {
      return validateOrder(event.data.order);
    });

    // Step 2: Process payment (durable - survives crashes)
    const payment = await step.run("process-payment", async () => {
      return chargeCard(validated.paymentMethod, validated.total, { idempotencyKey: `order-${event.data.orderId}-payment` });
    });

    // Step 3: Create shipment
    const shipment = await step.run("create-shipment", async () => {
      return createShipment(validated.items, validated.address);
    });

    // Step 4: Send confirmation
    await step.run("send-confirmation", async () => {
      return sendEmail(validated.email, { payment, shipment });
    });

    return { success: true, orderId: event.data.orderId };
  }
);

Temporal の例(TypeScript)

import { proxyActivities } from '@temporalio/workflow';
import type * as activities from './activities';

const { validateOrder, chargeCard, createShipment, sendEmail } =
  proxyActivities<typeof activities>({
    startToCloseTimeout: '30 seconds',
    retry: {
      maximumAttempts: 3,
      backoffCoefficient: 2,
    }
  });

export async function processOrderWorkflow(order: Order): Promise<void> {
  const validated = await validateOrder(order);
  const payment = await chargeCard(validated.paymentMethod, validated.total, { idempotencyKey: `order-${order.id}-payment` });
  const shipment = await createShipment(validated.items, validated.address);
  await sendEmail(validated.email, { payment, shipment });
}

Inngest の例

export const analyzeDocument = inngest.createFunction(
  { id: "analyze-document" },
  { event: "document/uploaded" },
  async ({ event, step }) => {
    // Run analyses in parallel
    const [security, performance, compliance] = await Promise.all([
      step.run("security-analysis", () =>
        analyzeForSecurityIssues(event.data.document)
      ),
      step.run("performance-analysis", () =>
        analyzeForPerformance(event.data.document)
      ),
      step.run("compliance-analysis", () =>
        analyzeForCompliance(event.data.document)
      ),
    ]);

    // Aggregate results
    const report = await step.run("generate-report", () =>
      generateReport({ security, performance, compliance })
    );

    return report;
  }
);

Temporal の例

export async function orchestratorWorkflow(task: ComplexTask) {
  // Orchestrator decides what work needs to be done
  const plan = await analyzeTask(task);

  // Dispatch to specialized worker workflows
  const results = await Promise.all(
    plan.subtasks.map(subtask => {
      switch (subtask.type) {
        case 'create':
          return executeChild(createWorkerWorkflow, { args: [subtask] });
        case 'modify':
          return executeChild(modifyWorkerWorkflow, { args: [subtask] });
        case 'delete':
          return executeChild(deleteWorkerWorkflow, { args: [subtask] });
      }
    })
  );

  // Aggregate results
  return aggregateResults(results);
}

使用する場面

  • ユーザーが workflow について言及している、または示唆している
  • ユーザーが automation について言及している、または示唆している
  • ユーザーが n8n について言及している、または示唆している
  • ユーザーが temporal について言及している、または示唆している
  • ユーザーが inngest について言及している、または示唆している
  • ユーザーが step function について言及している、または示唆している
  • ユーザーが background job について言及している、または示唆している
  • ユーザーが durable execution について言及している、または示唆している
  • ユーザーが event-driven について言及している、または示唆している
  • ユーザーが scheduled task について言及している、または示唆している
  • ユーザーが job queue について言及している、または示唆している
  • ユーザーが cron について言及している、または示唆している
  • ユーザーが trigger について言及している、または示唆している

制限事項

  • 上記の説明にある範囲と明確に一致するタスクに限り、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント