mcpField
I
inngest-cli

inngest-cli

github.com/inngest開発29827 回インストール4 週間前に更新
リポジトリ

inngest-cli について

inngest-cli は、Inngest CLI によるローカル開発、テスト、セルフホスト本番運用を扱う TypeScript 向けスキルです。Dev Server、Docker、トラブルシューティング、任意の MCP 接続を説明します。

主な機能

  1. 01ローカル Dev Server の起動と設定
  2. 02アプリ検出とサーブエンドポイント確認
  3. 03関数のローカルテストとイベント送信
  4. 04Inngest のセルフホスト本番運用
  5. 05ローカルと Cloud の MCP 接続設定

活用シーン

  1. 01ローカルサーバーを使った Inngest 関数の開発
  2. 02テストイベント送信とエンドポイント設定の確認
  3. 03セルフホスト環境での Inngest 運用

MCP 対応

ローカル Dev Server 操作用の任意の `inngest-dev` MCP 接続と、デプロイ済みリソース用の `inngest-cloud` を説明します。

インストール

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

$npx skills add https://github.com/inngest/inngest-skills --skill inngest-cli

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

同梱ファイルreferences/local-mcp.md

詳細

Inngest CLI

ローカル開発、テスト、セルフホスト型の本番環境で Inngest CLI を使いこなしましょう。CLI には Dev Server が用意されています。これは、Inngest Platform の機能をすべて備えたオープンソースのローカル版です。

これらのスキルは TypeScript に特化しています。 Python または Go については、言語固有のガイダンスが記載されている Inngest ドキュメントを参照してください。基本概念はすべての言語に共通です。

CLI のセットアップ、Dev Server のワークフロー、ローカルテスト、Docker、MCP、セルフホスト型サーバーの運用には、このスキルを使用してください。inngest api を使った実行/トレースの確認には、利用可能な場合は inngest-api-cli を使用してください。

インストール

# npx (recommended — always latest)
npx inngest-cli@latest dev

# yarn
yarn dlx inngest-cli@latest dev

# pnpm
pnpm dlx inngest-cli@latest dev

# Global install
npm install -g inngest-cli

# Docker
docker pull inngest/inngest

npm の設定でライフサイクルスクリプトが無効になっていてバイナリが見つからない場合は、npx --ignore-scripts=false inngest-cli@latest dev を実行して再試行してください。Bun はデフォルトでライフサイクルスクリプトをサポートしていないため、Bun プロジェクトでも CLI には npx を使用することをおすすめします。

inngest dev — ローカル Dev Server

Inngest のインメモリ版を起動します。ブラウザー UI は http://localhost:8288 で利用できます。

# Auto-discover apps on common ports/endpoints
npx inngest-cli@latest dev

# Specify your app URL
npx inngest-cli@latest dev -u http://localhost:3000/api/inngest

# Custom port
npx inngest-cli@latest dev -p 9999

# Multiple apps
npx inngest-cli@latest dev \
  -u http://localhost:3000/api/inngest \
  -u http://localhost:4000/api/inngest

# Disable auto-discovery (use with -u)
npx inngest-cli@latest dev --no-discovery -u http://localhost:3000/api/inngest
CLI フラグ
フラグ短縮形デフォルト説明
--sdk-url-uhttp://localhost:3000/api/inngestアプリのサーブエンドポイント URL
--port-p8288Dev Server のポート
--hostDev Server のホスト
--no-discoveryfalseアプリの自動検出を無効にします
--no-pollfalseアプリの変更をポーリングする機能を無効にします
--config設定ファイルのパス
--connect-gateway-port8289Connect ゲートウェイエンドポイントのポート
--persistfalse再起動後もデータを保持します
--poll-interval5アプリのポーリング確認間隔(秒)
--queue-workers100エグゼキューターワーカーの数
--retry-interval0線形リトライ間隔(秒)
--tick150エグゼキューターキューのポーリング間隔(ミリ秒)
自動検出

--no-discovery を指定しない場合、Dev Server は一般的なポートとエンドポイントを自動的にスキャンします。

スキャン対象のポート: 3000、3030 など、一般的な開発用ポート

スキャン対象のエンドポイント:

  • /api/inngest
  • /x/inngest
  • /.netlify/functions/inngest
  • /.redwood/functions/inngest

設定ファイル

プロジェクトのルートに inngest.json(または .yaml、.toml)を作成します。CLI はディレクトリを上にたどってファイルを検索します。

{
  "sdk-url": [
    "http://localhost:3000/api/inngest",
    "http://localhost:3030/api/inngest"
  ],
  "no-discovery": true
}
# inngest.yaml
sdk-url:
  - "http://localhost:3000/api/inngest"
  - "http://localhost:3030/api/inngest"
no-discovery: true

環境変数

変数説明
INNGEST_DEV=1 は Dev モードを有効にします(署名検証を無効化)。=0 は Cloud モードを強制します。URL(例:http://localhost:8288)も指定できます。未設定の場合、デフォルトで Cloud モードになります。
INNGEST_BASE_URLSDK と Inngest 間の通信に使用するホスト(例:http://localhost:8288)。ほとんどの場合、設定する必要はありません。
INNGEST_EVENT_KEYイベント送信に使用する認証キー。ローカルでは任意のダミー値を使用できます。Dev Server は検証しません。
INNGEST_SIGNING_KEYInngest とアプリ間のリクエストを保護します。本番環境では必須です。 同期先となる Inngest 環境を決定します。
INNGEST_SIGNING_KEY_FALLBACK署名キーのローテーションに使用するフォールバックキー(v3.18.0 以降)。
INNGEST_SERVE_ORIGINInngest がアプリに接続するためのオリジン URL 全体(例:https://my-app.com)。リクエストヘッダーから自動推定されます。AWS Lambda、プロキシ、トンネルを使用する場合は明示的に設定してください。
INNGEST_SERVE_PATHサーブエンドポイントの URL パス(例:/api/inngest)。ほとんどの場合、自動推定されます。
INNGEST_STREAMINGレスポンスストリーミング(true/false)を有効にします。Vercel とエッジランタイムでタイムアウト制限を延長します。
INNGEST_ENV対象となる Inngest 環境。一部のプラットフォームでは自動検出されます。

サーブエンドポイントのデバッグ

serve() エンドポイントが正しく設定されていることを確認します。

curl -s http://localhost:3000/api/inngest | jq
{
  "message": "Inngest endpoint configured correctly.",
  "hasEventKey": false,
  "hasSigningKey": false,
  "functionsFound": 3
}

functionsFound が 0 の場合は、関数が serve() の呼び出しに渡されていることを確認してください。

関数のローカルテスト

SDK 経由でイベントを送信する
import { Inngest } from "inngest";

const inngest = new Inngest({ id: "my-app" });

await inngest.send({
  name: "user/signup.completed",
  data: {
    userId: "user_123",
    email: "[email protected]",
  },
});
curl 経由でイベントを送信する
curl -X POST "http://localhost:8288/e/test" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "user/signup.completed",
    "data": {
      "userId": "user_123",
      "email": "[email protected]"
    }
  }'

URL パス内のイベントキー(上の例では test)には、ローカルで任意の値を指定できます。

@inngest/test による単体テスト

inngest@>=4.0.0 が必要です。

npm install -D @inngest/test
import { InngestTestEngine } from "@inngest/test";
import { helloWorld } from "./functions";

// Execute full function
const t = new InngestTestEngine({ function: helloWorld });
const { result } = await t.execute();
expect(result).toEqual("Hello World!");

// Test a single step
const { result: stepResult } = await t.executeStep("calculate-price");
expect(stepResult).toEqual(123);

// Assert step state
const { state } = await t.execute();
await expect(state["my-step"]).resolves.toEqual("output");
await expect(state["risky-step"]).rejects.toThrowError("failed");

// Mock events
const { result: eventResult } = await t.execute({
  events: [{ name: "demo/event.sent", data: { message: "Hi!" } }],
});

// Mock step responses
const { result: mockResult } = await t.execute({
  steps: [{ id: "external-api-call", handler() { return { status: "ok" }; } }],
});

// Mock sleep/waitForEvent (pause-inducing steps require mocking)
await t.execute({
  steps: [{ id: "wait-one-day", handler() {} }],
});

外部依存関係をモックするには、テストフレームワーク標準のモック機能(jest.mock、vi.mock など)を使用してください — @inngest/test は Inngest 固有のモックのみを処理します。

Docker セットアップ

スタンドアロン
docker run -p 8288:8288 -p 8289:8289 \
  inngest/inngest \
  inngest dev -u http://host.docker.internal:3000/api/inngest

ホストマシン上で実行されているアプリに到達するには host.docker.internal を使用します(Docker Desktop ではそのまま動作します)。Linux では、--add-host=host.docker.internal:host-gateway を追加するか、同等のホストアクセス方法を使用してください。

Docker Compose
services:
  app:
    build: ./app
    environment:
      - INNGEST_DEV=1
      - INNGEST_BASE_URL=http://inngest:8288
    ports:
      - "3000:3000"
  inngest:
    image: inngest/inngest
    command: "inngest dev -u http://app:3000/api/inngest"
    ports:
      - "8288:8288"
      - "8289:8289"

ポート 8288 はメインサーバーと UI です。ポート 8289 は connect() WebSocket ゲートウェイです。

重要: アプリで INNGEST_DEV=1 を設定してください — TypeScript SDK はデフォルトで Cloud モードになり、Dev Server をスキップします。

MCP サーバー(AI 開発ツール)

プラグインは、デプロイ済みリソースへの OAuth アクセス用に inngest-cloud をバンドルしています。 ローカル Dev Server MCP は、inngest-dev という名前の別のオプトイン接続です。 どちらも同じコーディングセッションで使用できます。ローカル MCP のセットアップや接続の トラブルシューティングについては、ローカル MCP セットアップをお読みください。

Dev Server 上のアプリと実行には、構成済みのローカル接続を使用してください (デフォルトでは inngest-dev。既存の接続がある場合はその名前を維持してください)。デプロイ済みリソースには inngest-cloud を使用し、目的のアカウントと環境を選択してください。対象が不明確な場合は、 どちらのサーバーを呼び出す前に解決してください。ローカルサーバーがオフラインであることを理由に、 ローカルから Cloud に切り替えないでください。

各サーバーのライブツールスキーマを確認してください。ローカルツールには、アプリ、関数、イベント、 実行、トレースの操作に加え、埋め込みドキュメント検索が含まれます。利用可否 と入力は、実行中の Dev Server のバージョンによって異なります。

inngest start — セルフホスト本番環境

Inngest をセルフホストの本番サーバーとして実行します。inngest dev とは異なります — これは本番ワークロード向けです。

inngest start --event-key <key> --signing-key <key>
フラグ短縮形デフォルト説明
--port-p8288サーバーポート
--signing-keyリクエスト署名用の 16 進キー(偶数文字数)
--event-keyアプリ用の認証キー(繰り返し指定可能)
--sdk-url-uアプリの serve URL(繰り返し指定可能)
--redis-uri外部 Redis 接続
--postgres-uri外部 PostgreSQL 接続
--sqlite-dirSQLite データベースディレクトリ
--poll-interval0アプリ同期のポーリング間隔(秒)
--queue-workers100エグゼキューターのワーカー数
--connect-gateway-port8289Connect ゲートウェイのポート
--retry-interval0線形リトライ間隔(秒)
--tick150エグゼキューターキューのポーリング間隔(ミリ秒)
--no-uiWeb UI と GraphQL API を無効化
--postgres-conn-max-idle-time5PostgreSQL アイドル接続の存続時間(分)
--postgres-conn-max-lifetime30PostgreSQL 接続の最大再利用時間(分)
--postgres-max-idle-conns10PostgreSQL の最大アイドル接続数
--postgres-max-open-conns100PostgreSQL の最大オープン接続数

--log-level、--verbose、--json などのグローバルフラグも使用できます。環境変数については、現在の CLI とデプロイのドキュメントに従ってください。すべてのフラグに INNGEST_ 環境変数の同等のものがあると想定しないでください。

デフォルトの永続化: インメモリ Redis + ./.inngest/main.db の SQLite。本番環境では、外部 Redis と PostgreSQL を使用してください。

デプロイワークフロー

ローカル開発 → 本番
  1. inngest dev でローカル開発 — キーは不要、本番向けのコード変更も不要
  2. ホスティングプラットフォームにアプリをデプロイ
  3. 次の 3 つの方法のいずれかで Inngest と同期:
# Option 1: Curl from CI/CD
curl -X PUT https://your-app.com/api/inngest --fail-with-body

# Option 2: Vercel/Netlify integrations (automatic on deploy)

# Option 3: Manual sync via Inngest Cloud dashboard
  1. 本番環境で環境変数を設定:
INNGEST_EVENT_KEY=<your-event-key>
INNGEST_SIGNING_KEY=<your-signing-key>

ローカル開発から本番環境への移行時にコード変更は不要です。SDK が環境を自動的に検出します。

プラットフォーム固有の注意点

プラットフォーム注意点
Expressexpress.json() ミドルウェアが必要です。デフォルトのボディ上限は 100kb なので、Inngest のペイロード(最大 4MB)を処理できるよう増やしてください
AWS LambdaINNGEST_SERVE_ORIGIN と INNGEST_SERVE_PATH を明示的に設定してください。自動推論は失敗します
Firebase Cloud FunctionsINNGEST_SERVE_PATH 環境変数を設定する必要があります
DigitalOcean Functionsserve() の設定で serveOrigin と servePath の両方が必要です
Cloudflare Workers(Wrangler --remote)Dev Server への接続にはトンネル(ngrok/localtunnel)が必要です
Supabase Edge FunctionsservePath は関数名と一致させる必要があります。Supabase がリクエストパスを書き換えます
Google Cloud Run(第1世代)公式にはサポートされていません。署名検証エラーが発生する可能性があります
DockerINNGEST_DEV=1 を設定する必要があります。SDK はデフォルトで Cloud モードになります
外部 Webhook(Stripe、Clerk)ローカルテストにはトンネルソリューション(ngrok、localtunnel)が必要です

クイックリファレンス

# Start dev server with auto-discovery
npx inngest-cli@latest dev

# Start with explicit app URL
npx inngest-cli@latest dev -u http://localhost:3000/api/inngest

# Check serve endpoint health
curl -s http://localhost:3000/api/inngest | jq

# Send test event via curl
curl -X POST http://localhost:8288/e/test -d '{"name": "test/event", "data": {}}'

# Sync after deploy (CI/CD)
curl -X PUT https://your-app.com/api/inngest --fail-with-body

# Self-hosted production
inngest start --event-key <key> --signing-key <key>

トラブルシューティング

問題原因解決策
Dev Server が関数を見つけられないアプリが起動していない、またはポートが間違っているまずアプリを起動してください。-u を使って正しい URL を指定します
デバッグ出力に functionsFound: 0 と表示される関数が serve() に渡されていないすべての関数が serve() に渡す配列に含まれているか確認してください
SDK が Dev Server ではなく Cloud に接続するINNGEST_DEV が設定されていない環境で INNGEST_DEV=1 を設定してください
関数が誤った Inngest 環境に同期される署名キーが間違っているINNGEST_SIGNING_KEY が対象環境と一致しているか確認してください
Inngest ダッシュボードにアプリが重複して表示されるアプリの id が変更されたnew Inngest({ id }) の id をデプロイ間で固定してください
Webhook イベントが Dev Server に届かないトンネルが構成されていない外部 Webhook ソースには ngrok または localtunnel を使用してください
ダッシュボードに「Unattached sync」と表示される自動同期がサイレントに失敗した統合ログを確認し、手動で再同期してください

SDK のインストールについては inngest-setup を、関数の構成については inngest-durable-functions を参照してください。

コメント