Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

inngest

キューやワーカーの管理不要でサーバーレス優先のバックグラウンドジョブ、イベント駆動ワークフロー、耐久性のある実行を実現するInngestの専門スキル。

description の原文を見る

Inngest expert for serverless-first background jobs, event-driven workflows, and durable execution without managing queues or workers.

SKILL.md 本文

Inngest インテグレーション

サーバーレスファーストのバックグラウンドジョブ、イベント駆動型ワークフロー、キューやワーカーを管理しないダラブルな実行のための Inngest エキスパート。

原則

  • イベントはプリミティブ - すべてはキューではなくイベントからトリガーされる
  • ステップはあなたのチェックポイント - 各ステップの結果はダラブルに保存される
  • スリープはハックではない - Inngest のスリープはリアルなもので、スレッドをブロックしない
  • リトライは自動 - ただしポリシーはあなたが制御する
  • 関数は単なる HTTP ハンドラー - HTTP を提供するどこにでもデプロイできる
  • コンカレンシーはファーストクラスの関心事 - ダウンストリームサービスを保護する
  • Idempotency キーは重複を防止 - クリティカルな操作に使用する
  • ファンアウトはビルトイン - 1つのイベントは多くの関数をトリガーできる

機能

  • inngest-functions
  • event-driven-workflows
  • step-functions
  • serverless-background-jobs
  • durable-sleep
  • fan-out-patterns
  • concurrency-control
  • scheduled-functions

スコープ

  • redis-queues -> bullmq-specialist
  • workflow-orchestration -> temporal-craftsman
  • message-streaming -> event-architect
  • infrastructure -> infra-architect

ツーリング

コア

  • inngest
  • inngest-cli

フレームワーク

  • nextjs
  • express
  • hono
  • remix
  • sveltekit

デプロイメント

  • vercel
  • cloudflare-workers
  • netlify
  • railway
  • fly-io

パターン

  • step-functions
  • event-fan-out
  • scheduled-cron
  • webhook-handling

パターン

基本的な関数セットアップ

Next.js での型付きイベントを使用した Inngest 関数

いつ使うか: 任意の Next.js プロジェクトで Inngest を開始する場合

// lib/inngest/client.ts
import { Inngest } from 'inngest';

export const inngest = new Inngest({
  id: 'my-app',
  schemas: new EventSchemas().fromRecord<Events>(),
});

// イベントを型で定義
type Events = {
  'user/signed.up': { data: { userId: string; email: string } };
  'order/placed': { data: { orderId: string; total: number } };
};

// lib/inngest/functions.ts
import { inngest } from './client';

export const sendWelcomeEmail = inngest.createFunction(
  { id: 'send-welcome-email' },
  { event: 'user/signed.up' },
  async ({ event, step }) => {
    // ステップ 1: ユーザー詳細を取得
    const user = await step.run('get-user', async () => {
      return await db.users.findUnique({ where: { id: event.data.userId } });
    });

    // ステップ 2: ウェルカムメールを送信
    await step.run('send-email', async () => {
      await resend.emails.send({
        to: user.email,
        subject: 'Welcome!',
        template: 'welcome',
      });
    });

    // ステップ 3: 24時間待機、その後にヒントを送信
    await step.sleep('wait-for-tips', '24h');

    await step.run('send-tips', async () => {
      await resend.emails.send({
        to: user.email,
        subject: 'Getting Started Tips',
        template: 'tips',
      });
    });
  }
);

// app/api/inngest/route.ts (Next.js App Router)
import { serve } from 'inngest/next';
import { inngest } from '@/lib/inngest/client';
import { sendWelcomeEmail } from '@/lib/inngest/functions';

export const { GET, POST, PUT } = serve({
  client: inngest,
  functions: [sendWelcomeEmail],
});

マルチステップワークフロー

並列ステップとエラーハンドリングを含む複雑なワークフロー

いつ使うか: 複数のサービスやロングウェイトを含む処理

export const processOrder = inngest.createFunction(
  {
    id: 'process-order',
    retries: 3,
    concurrency: { limit: 10 },  // 最大10件の注文を同時処理
  },
  { event: 'order/placed' },
  async ({ event, step }) => {
    const { orderId } = event.data;

    // 並列ステップ - 両方同時に実行
    const [inventory, payment] = await Promise.all([
      step.run('check-inventory', () => checkInventory(orderId)),
      step.run('validate-payment', () => validatePayment(orderId)),
    ]);

    if (!inventory.available) {
      // 直接呼び出しの代わりにイベントを送信 (ファンアウトパターン)
      await step.sendEvent('notify-backorder', {
        name: 'order/backordered',
        data: { orderId, items: inventory.missing },
      });
      return { status: 'backordered' };
    }

    // 支払いを処理
    const charge = await step.run('charge-payment', async () => {
      return await stripe.charges.create({
        amount: event.data.total,
        customer: payment.customerId,
      });
    });

    // 注文を発送
    await step.run('ship-order', () => fulfillment.ship(orderId));

    return { status: 'completed', chargeId: charge.id };
  }
);

スケジュール/Cron 関数

スケジュールで実行される関数

いつ使うか: 日次レポートやクリーンアップジョブのような繰り返しタスク

export const dailyDigest = inngest.createFunction(
  { id: 'daily-digest' },
  { cron: '0 9 * * *' },  // 毎日午前9時 UTC
  async ({ step }) => {
    // ダイジェストを望むすべてのユーザーを取得
    const users = await step.run('get-users', async () => {
      return await db.users.findMany({
        where: { digestEnabled: true },
      });
    });

    // 各ユーザーに送信 (子イベントを作成)
    await step.sendEvent(
      'send-digests',
      users.map(user => ({
        name: 'digest/send',
        data: { userId: user.id },
      }))
    );

    return { sent: users.length };
  }
);

// 個別のダイジェスト送信を処理する別の関数
export const sendDigest = inngest.createFunction(
  { id: 'send-digest', concurrency: { limit: 50 } },
  { event: 'digest/send' },
  async ({ event, step }) => {
    // ... 個別のダイジェストを送信
  }
);

Idempotency を使用したウェブフックハンドラー

重複排除でウェブフックを安全に処理

いつ使うか: Stripe、GitHub、またはその他のウェブフックを処理する場合

export const handleStripeWebhook = inngest.createFunction(
  {
    id: 'stripe-webhook',
    // Stripe イベント ID で重複排除
    idempotency: 'event.data.stripeEventId',
  },
  { event: 'stripe/webhook.received' },
  async ({ event, step }) => {
    const { type, data } = event.data;

    switch (type) {
      case 'checkout.session.completed':
        await step.run('fulfill-order', async () => {
          await fulfillOrder(data.session.id);
        });
        break;

      case 'customer.subscription.deleted':
        await step.run('cancel-subscription', async () => {
          await cancelSubscription(data.subscription.id);
        });
        break;
    }
  }
);

ロング処理を伴う AI パイプライン

チャンク化された作業を使用したマルチステップ AI 処理

いつ使うか: 数分かかる AI ワークフロー

export const processDocument = inngest.createFunction(
  {
    id: 'process-document',
    retries: 2,
    concurrency: { limit: 5 },  // API 使用量を制限
  },
  { event: 'document/uploaded' },
  async ({ event, step }) => {
    // ステップ 1: テキストを抽出 (時間がかかる可能性)
    const text = await step.run('extract-text', async () => {
      return await extractTextFromPDF(event.data.fileUrl);
    });

    // ステップ 2: 埋め込み用にチャンク化
    const chunks = await step.run('chunk-text', async () => {
      return chunkText(text, { maxTokens: 500 });
    });

    // ステップ 3: 埋め込みを生成 (API レート制限)
    const embeddings = await step.run('generate-embeddings', async () => {
      return await openai.embeddings.create({
        model: 'text-embedding-3-small',
        input: chunks,
      });
    });

    // ステップ 4: ベクターDB に保存
    await step.run('store-vectors', async () => {
      await vectorDb.upsert({
        vectors: embeddings.data.map((e, i) => ({
          id: `${event.data.documentId}-${i}`,
          values: e.embedding,
          metadata: { chunk: chunks[i] },
        })),
      });
    });

    return { chunks: chunks.length, status: 'indexed' };
  }
);

検証チェック

Inngest serve ハンドラーが存在

重要度: CRITICAL

メッセージ: Inngest がイベントを受信するには serve ハンドラーが必要

修正アクション: serve() エクスポート付きで app/api/inngest/route.ts を作成

関数が serve に登録されている

重要度: ERROR

メッセージ: すべての Inngest 関数が serve() 呼び出しで登録されていることを確認

修正アクション: 関数を serve() の functions 配列に追加

Step.run に説明的な名前が付いている

重要度: WARNING

メッセージ: ステップ名は kebab-case で説明的であるべき

修正アクション: 'fetch-user' または 'send-email' などの説明的なステップ名を使用

waitForEvent がタイムアウトを持つ

重要度: ERROR

メッセージ: waitForEvent は無限待機を防ぐためにタイムアウトが必要

修正アクション: タイムアウトオプションを追加: { timeout: '24h' }

関数がコンカレンシー制限を持つ

重要度: WARNING

メッセージ: ダウンストリームサービスを保護するためにコンカレンシー制限の追加を検討

修正アクション: 関数設定に concurrency: { limit: 10 } を追加

イベント型が定義されている

重要度: WARNING

メッセージ: Inngest クライアントはタイプ安全性のためにイベントスキーマを定義すべき

修正アクション: 追加: schemas: new EventSchemas().fromRecord<Events>()

関数がユニークな ID を持つ

重要度: CRITICAL

メッセージ: すべての Inngest 関数は一意の ID を持つ必要

修正アクション: 関数設定に id: 'my-function-name' を追加

スリープが期間文字列を使用

重要度: WARNING

メッセージ: step.sleep は ' 1h' または '30m' などの期間文字列を使用すべき、ミリ秒ではなく

修正アクション: 期間文字列を使用: step.sleep('wait', '1h')

リトライポリシーが設定されている

重要度: WARNING

メッセージ: 失敗処理のためにリトライポリシー設定を検討

修正アクション: retries: 3 または retries: { attempts: 3, backoff: { ... } } を追加

支払い関数の Idempotency キー

重要度: ERROR

メッセージ: 支払い関連の関数は idempotency キーを使用すべき

修正アクション: 関数設定に idempotency: 'event.data.orderId' を追加

コラボレーション

デリゲーショントリガー

  • redis|queue infrastructure|bullmq -> bullmq-specialist (既存のインフラを使用した Redis ベースのキューが必要)
  • saga|compensation|rollback|long-running workflow -> temporal-craftsman (補償を伴う複雑なワークフロー調整が必要)
  • event sourcing|event store|cqrs -> event-architect (イベントソーシングパターンが必要)
  • vercel|deploy|production -> vercel-deployment (デプロイメント設定が必要)
  • database|schema|data model -> supabase-backend (イベントデータ用のデータベースが必要)
  • api|endpoint|route -> backend (イベントをトリガーするための API が必要)

Vercel Background Jobs

スキル: inngest, nextjs-app-router, vercel-deployment

ワークフロー:

1. Inngest 関数を定義 (inngest)
2. Next.js で serve ハンドラーをセットアップ (nextjs-app-router)
3. 関数タイムアウトを設定 (vercel-deployment)
4. デプロイしてテスト (vercel-deployment)

AI パイプライン

スキル: inngest, ai-agents-architect, supabase-backend

ワークフロー:

1. AI ワークフローステップを設計 (ai-agents-architect)
2. Inngest の耐久性で実装 (inngest)
3. 結果をデータベースに保存 (supabase-backend)
4. API 失敗のリトライを処理 (inngest)

ウェブフック処理

スキル: inngest, stripe-integration, backend

ワークフロー:

1. ウェブフックを受信 (backend)
2. Idempotency で Inngest に送信 (inngest)
3. 支払いロジックを処理 (stripe-integration)
4. アプリケーション状態を更新 (backend)

メール自動化

スキル: inngest, email-systems, supabase-backend

ワークフロー:

1. ユーザーアクションからイベントをトリガー (inngest)
2. step.sleep でドリップメールをスケジュール (inngest)
3. リトライ付きでメールを送信 (email-systems)
4. メール状態を追跡 (supabase-backend)

スケジュール済みタスク

スキル: inngest, backend, analytics-architecture

ワークフロー:

1. Cron トリガーを定義 (inngest)
2. 処理ロジックを実装 (backend)
3. データを集約してレポート (analytics-architecture)
4. アラート付きで障害を処理 (inngest)

関連スキル

相性の良いスキル: nextjs-app-router, vercel-deployment, supabase-backend, email-systems, ai-agents-architect, stripe-integration

いつ使うか

  • ユーザーが言及または暗示: inngest
  • ユーザーが言及または暗示: serverless background job
  • ユーザーが言及または暗示: event-driven workflow
  • ユーザーが言及または暗示: step function
  • ユーザーが言及または暗示: durable execution
  • ユーザーが言及または暗示: vercel background job
  • ユーザーが言及または暗示: scheduled function
  • ユーザーが言及または暗示: fan out

制限事項

  • このスキルは、タスクが上記で説明されたスコープと明確に一致する場合にのみ使用
  • 出力を環境固有の検証、テスト、またはエキスパートレビューの代替物として扱わない
  • 必要な入力、権限、安全性の境界、または成功基準が不足している場合は、説明を求めて停止

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
sickn33
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: sickn33 · sickn33/antigravity-awesome-skills · ライセンス: MIT