Skip to content

CLI リファレンス

SwallowKit CLI の全コマンドとオプションの詳細リファレンスです。

目次

swallowkit machine

AI / MCP 統合向けの machine-readable command group です。

使用法

bash
npx swallowkit machine <command> <subcommand> [options]

利用可能なコマンド

コマンド用途
inspect projectframework-owned project metadata を返す
inspect entitiesentity / schema metadata を返す
inspect routesBFF / Functions route metadata を返す
validate project構造化された validation violation を返す
generate modelcreate-model を非対話 JSON モードで実行する
generate scaffoldscaffold を非対話 JSON モードで実行する

bash
npx swallowkit machine inspect project
npx swallowkit machine validate project
npx swallowkit machine generate model todo --overwrite never
npx swallowkit machine generate scaffold todo --api-only

出力契約

  • stdout は常に 1 つの JSON
  • 非対話
  • 成功 / 失敗ともに構造化出力
  • generate model は overwrite policy(always または never)を明示する

アーキテクチャやレスポンス例の詳細は AI / MCP ガイド を参照してください。

swallowkit-mcp

AI コーディングエージェント向けの同梱 MCP stdio server です。

使用法

bash
npx swallowkit-mcp

公開される MCP Tools

  • swallowkit_inspect_project
  • swallowkit_inspect_entities
  • swallowkit_inspect_routes
  • swallowkit_validate_project
  • swallowkit_generate_model
  • swallowkit_scaffold_model

MCP server は swallowkit machine ... の thin adapter であり、独自の framework ロジックは持ちません。

swallowkit init

新しい SwallowKit プロジェクトを初期化します。

使用法

bash
npx swallowkit init [project-name] [options]
# or
pnpm dlx swallowkit init [project-name] [options]

引数

  • project-name (オプション): プロジェクト名。省略時はカレントディレクトリに初期化

オプション

オプション説明デフォルト
--template <template>使用テンプレートdefaultdefault
--next-version <version>Next.js バージョン例: 16.0.7, latestlatest
--cicd <provider>CI/CD プロバイダーgithub, azure, skip(プロンプト)
--backend-language <language>Azure Functions のバックエンド言語typescript, csharp, python(プロンプト)
--cosmos-db-mode <mode>Cosmos DB モードfreetier, serverless(プロンプト)
--vnet <option>ネットワークセキュリティoutbound, none(プロンプト)

対話モードと非対話モード

デフォルトでは、init は CI/CD、Azure Functions のバックエンド言語、Cosmos DB モード、ネットワーク設定を対話プロンプトで質問します。

フラグで直接指定するとプロンプトをスキップできます:

bash
# 完全非対話モード
npx swallowkit init my-app --cicd github --backend-language csharp --cosmos-db-mode serverless --vnet outbound

# 部分指定(--cicd のみ指定、残りはプロンプト表示)
npx swallowkit init my-app --cicd skip

VS Code 拡張機能やスクリプトなど、stdin が TTY でない環境から CLI を呼び出す場合に特に便利です。

不正な値を指定するとエラーになります:

❌ Invalid --cicd value: "invalid". Must be: github, azure, skip

対話プロンプト

フラグが未指定の場合、以下のプロンプトが表示されます:

  1. CI/CD プロバイダー: GitHub Actions、Azure Pipelines、またはスキップ
  2. バックエンド言語: TypeScript、C#、または Python
  3. Cosmos DB モード: Free Tier または Serverless
  4. ネットワークセキュリティ: VNet Integration または None

バックエンド言語ごとの補足

  • typescript: Functions は共有された Zod パッケージをそのまま利用します。
  • csharp / python: swallowkit scaffoldfunctions/openapi/ に OpenAPI を出力し、functions/generated/ にネイティブ生成されたバックエンド用スキーマ資産を生成します。

生成されるファイル

my-app/
├── app/                      # Next.js App Router
│   ├── api/greet/            # BFF サンプル
│   ├── layout.tsx
│   └── page.tsx
├── components/               # React コンポーネント
├── lib/
│   ├── api/backend.ts        # BFF クライアント (api.get/post/put/delete)
│   ├── database/             # Cosmos DB クライアント (オプション)
│   │   ├── client.ts         # CosmosClient
│   │   └── repository.ts     # リポジトリパターン
│   ├── models/               # データモデル
│   └── schemas/              # Zod スキーマ
├── functions/                # Azure Functions
│   ├── src/                  # TypeScript ハンドラー
│   ├── Crud/                 # C# ハンドラー
│   ├── blueprints/           # Python ハンドラー
│   ├── generated/            # C#/Python 向けネイティブ生成スキーマ資産
│   ├── openapi/              # C#/Python 向けに出力された OpenAPI
│   ├── host.json
│   └── local.settings.json
├── infra/                    # Bicep IaC
│   ├── main.bicep
│   ├── main.parameters.json
│   └── modules/
│       ├── staticwebapp.bicep
│       ├── functions.bicep
│       └── cosmosdb.bicep
├── .github/workflows/        # CI/CD (GitHub Actions の場合)
│   ├── static-web-app.yml
│   └── azure-functions.yml
├── .github/
│   ├── copilot-instructions.md   # GitHub Copilot 向け指示
│   └── instructions/             # Copilot レイヤー別ルール
│       ├── shared-models.instructions.md
│       ├── bff-routes.instructions.md
│       └── azure-functions.instructions.md
├── .env.local                # 環境変数
├── .env.example
├── next.config.js
├── swallowkit.config.js
├── staticwebapp.config.json
├── .mcp.json                # ローカル install 済み SwallowKit を使う project-scoped MCP bootstrap
├── AGENTS.md                 # コーディングエージェント向け指示書 (Codex)
├── CLAUDE.md                 # Claude Code 向け指示書
└── package.json

AI エージェント bootstrap / 指示ファイル

init コマンドは、複数の AI コーディングエージェント向けの指示ファイルに加え、repository MCP 自動検出に対応した runtime 向けの project-scoped MCP bootstrap も自動生成します。これらにより、AI エージェント(GitHub Copilot、Claude Code、OpenAI Codex など)がコードを生成・修正する際に、プロジェクトのアーキテクチャと規約に従います。

生成されるファイル一覧

ファイル対象エージェント説明
AGENTS.mdOpenAI Codex / 汎用エージェントアーキテクチャ全体仕様、規約、命名規則、CLI スキル
CLAUDE.mdClaude Codeクイックリファレンス + CLI コマンド(詳細は AGENTS.md を参照)
.mcp.jsonClaude Code / project MCP runtimeローカル install 済み swallowkit-mcp entrypoint の project-scoped launcher
.github/copilot-instructions.mdGitHub Copilot主要ルールのサマリー(Copilot が自動読み込み)
.github/instructions/shared-models.instructions.mdGitHub Copilotshared/models/** 向けレイヤー別ルール
.github/instructions/bff-routes.instructions.mdGitHub Copilotapp/api/** 向けレイヤー別ルール
.github/instructions/azure-functions.instructions.mdGitHub Copilotfunctions/** 向けレイヤー別ルール

生成される AGENTS.md の全文を以下に示します(日本語訳併記):

markdown
# AGENTS.md

This project was generated by **SwallowKit**.
All coding agents **must** follow the architecture and conventions described below.

<!-- このプロジェクトは SwallowKit で生成されました。すべてのコーディングエージェントは、以下に記載されたアーキテクチャと規約に従う必要があります。 -->

## Architecture Overview
<!-- アーキテクチャ概要 -->

This is a full-stack TypeScript application deployed on Azure with the following layers:

<!-- Azure 上にデプロイされるフルスタック TypeScript アプリケーションで、以下のレイヤーで構成されます: -->

```
Frontend (React / Next.js App Router)
  ↓ fetch('/api/{model}', ...)
BFF Layer (Next.js API Routes)
  ↓ HTTP → Azure Functions
Backend (Azure Functions with Cosmos DB bindings)

Azure Cosmos DB (Document Database)
```

### Project Structure
<!-- プロジェクト構造 -->

```
my-app/
├── app/                    # Next.js App Router
│   ├── api/               # BFF API routes (proxy to Azure Functions)
│   └── {model}/           # UI pages per model (list, detail, create, edit)
├── functions/             # Azure Functions (backend)
│   └── src/               # HTTP trigger handlers with Cosmos DB bindings
├── shared/                # Shared workspace package
│   ├── models/            # Zod schema definitions (single source of truth)
│   └── index.ts           # Re-exports all models
├── lib/
│   └── api/               # API client utilities (backend.ts, call-function.ts)
├── components/            # Shared React components
├── infra/                 # Bicep infrastructure-as-code files
│   ├── main.bicep
│   └── modules/
├── .mcp.json              # project-scoped MCP bootstrap using local installed SwallowKit
└── .github/workflows/     # CI/CD workflows (if configured)
```

## SwallowKit MCP / Machine Workflow

- This repository includes a project-scoped `.mcp.json` file that starts the locally installed SwallowKit MCP server on runtimes that auto-load project MCP configurations.
- Prefer the `swallowkit_*` MCP tools for framework-owned inspection, validation, and generation when they are available.
- If MCP is unavailable in your runtime, fall back to the machine CLI:
  - `npx swallowkit machine inspect project`
  - `npx swallowkit machine validate project`
  - `npx swallowkit machine generate scaffold <name> --api-only`
- Do not hand-edit framework-owned artifacts when the MCP or machine interface can generate or validate them for you.
- The local MCP bootstrap expects project dependencies to already be installed.

## Critical Design Principles
<!-- 重要な設計原則 -->

### 1. Next.js API Routes Are Strictly a BFF (Backend for Frontend)
<!-- Next.js API Routes は厳密に BFF(Backend for Frontend)である -->

- `app/api/` routes exist **only** to proxy requests to Azure Functions.
- **Never** place business logic, database access, or direct Cosmos DB calls in Next.js API routes.
- The BFF layer may validate input/output with Zod schemas before forwarding to Functions.
- Use the `callFunction` helper (`lib/api/call-function.ts`) or the `api` client (`lib/api/backend.ts`) to call Azure Functions.

<!--
- `app/api/` ルートは Azure Functions へのリクエストプロキシのためだけに存在します。
- ビジネスロジック、データベースアクセス、直接の Cosmos DB 呼び出しを Next.js API Routes に配置してはいけません。
- BFF レイヤーは、Functions に転送する前に Zod スキーマで入出力を検証できます。
- Azure Functions を呼び出すには `callFunction` ヘルパーまたは `api` クライアントを使用します。
-->

Example BFF route pattern:
<!-- BFF ルートのパターン例: -->

```typescript
// app/api/{model}/route.ts
import { callFunction } from '@/lib/api/call-function';
import { ModelSchema } from '@my-app/shared';
import { z } from 'zod/v4';

export async function GET() {
  return callFunction({
    method: 'GET',
    path: '/api/{model}',
    responseSchema: z.array(ModelSchema),
  });
}

export async function POST(request: NextRequest) {
  const body = await request.json();
  return callFunction({
    method: 'POST',
    path: '/api/{model}',
    body,
    inputSchema: ModelSchema.omit({ id: true, createdAt: true, updatedAt: true }),
    responseSchema: ModelSchema,
    successStatus: 201,
  });
}
```

### 2. Zod Schemas Are the Single Source of Truth
<!-- Zod スキーマが唯一の信頼できる情報源(Single Source of Truth) -->

- All data models are defined **once** as Zod schemas in `shared/models/`.
- TypeScript types are derived with `z.infer<typeof Schema>` — never define types separately.
- The same schema is used in **all three layers**: frontend (validation), BFF (input/output validation), and Azure Functions (request/response validation + Cosmos DB documents).
- The shared package (`@my-app/shared`) is consumed by both Next.js and Azure Functions as a workspace dependency.

<!--
- すべてのデータモデルは `shared/models/` に Zod スキーマとして一度だけ定義します。
- TypeScript の型は `z.infer<typeof Schema>` で導出します。型を別途定義してはいけません。
- 同じスキーマがフロントエンド、BFF、Azure Functions の 3 つのレイヤーすべてで使用されます。
- 共有パッケージ(`@my-app/shared`)は Next.js と Azure Functions の両方からワークスペース依存として使用されます。
-->

Model definition pattern:
<!-- モデル定義のパターン: -->

```typescript
// shared/models/{model}.ts
import { z } from 'zod/v4';

export const Todo = z.object({
  id: z.string(),
  name: z.string().min(1),
  // ... your fields
  createdAt: z.string().optional(),
  updatedAt: z.string().optional(),
});

export type Todo = z.infer<typeof Todo>;
export const displayName = 'Todo';
```

Key rules:
- Use the **Zod official pattern**: the schema constant and the TypeScript type share the same name.
- `id`, `createdAt`, and `updatedAt` are auto-managed by the backend. Mark them as `optional()` in the schema.
- Always re-export models from `shared/index.ts`.

<!--
重要なルール:
- Zod 公式パターンに従い、スキーマ定数と TypeScript 型は同じ名前にします。
- `id`、`createdAt`、`updatedAt` はバックエンドで自動管理されます。スキーマでは `optional()` として定義します。
- モデルは必ず `shared/index.ts` から再エクスポートします。
-->

### 3. Azure Functions Own All Business Logic and Data Access
<!-- Azure Functions がすべてのビジネスロジックとデータアクセスを担当 -->

- All CRUD operations and business logic live in `functions/src/`.
- Use Azure Functions Cosmos DB **input/output bindings** (`extraInputs`/`extraOutputs`) for reads and writes.
- Use the Cosmos DB SDK client directly **only** for delete operations (bindings do not support delete).
- Validate all data against Zod schemas before writing to Cosmos DB.
- The backend auto-generates `id` (UUID), `createdAt`, and `updatedAt` — never trust client-sent values for these fields.

<!--
- すべての CRUD 操作とビジネスロジックは `functions/src/` に配置します。
- 読み取り・書き込みには Cosmos DB の input/output bindings(`extraInputs`/`extraOutputs`)を使用します。
- Cosmos DB SDK クライアントを直接使用するのは削除操作のみです(bindings は delete をサポートしていません)。
- Cosmos DB への書き込み前に、すべてのデータを Zod スキーマで検証します。
- `id`(UUID)、`createdAt`、`updatedAt` はバックエンドで自動生成されます。クライアントからの値を信頼してはいけません。
-->

Azure Functions handler pattern:
<!-- Azure Functions ハンドラーのパターン: -->

```typescript
// functions/src/{model}.ts
import { app } from '@azure/functions';
import { ModelSchema } from '@my-app/shared';

const containerName = 'Models'; // PascalCase + 's'

app.http('{model}-get-all', {
  methods: ['GET'],
  route: '{model}',
  authLevel: 'anonymous',
  extraInputs: [{ type: 'cosmosDB', name: 'cosmosInput', containerName, ... }],
  handler: async (request, context) => {
    const documents = context.extraInputs.get('cosmosInput');
    const validated = z.array(ModelSchema).parse(documents);
    return { status: 200, jsonBody: validated };
  },
});
```

## Naming Conventions
<!-- 命名規則 -->

| Item | Convention | Example |
|------|-----------|--------|
| Model schema file | `shared/models/{kebab-case}.ts` | `shared/models/todo.ts` |
| Schema/type name | PascalCase (same name for both) | `export const Todo = z.object({...}); export type Todo = z.infer<typeof Todo>;` |
| Functions handler file | `functions/src/{kebab-case}.ts` | `functions/src/todo.ts` |
| Functions handler name | `{camelCase}-{operation}` | `todo-get-all`, `todo-create` |
| API route path | `/api/{camelCase}` | `/api/todo`, `/api/todo/{id}` |
| BFF route file | `app/api/{kebab-case}/route.ts` | `app/api/todo/route.ts` |
| BFF detail route | `app/api/{kebab-case}/[id]/route.ts` | `app/api/todo/[id]/route.ts` |
| UI page directory | `app/{kebab-case}/` | `app/todo/page.tsx` |
| React component | PascalCase | `TodoForm.tsx` |
| Cosmos DB container | PascalCase + 's' | `Todos` |
| Cosmos DB partition key | `/id` (default) | Customizable via `export const partitionKey` in model file |
| Bicep container file | `infra/containers/{kebab-case}-container.bicep` | `infra/containers/todo-container.bicep` |

<!--
| 項目 | 規則 | 例 |
|------|------|----|
| モデルスキーマファイル | `shared/models/{kebab-case}.ts` | `shared/models/todo.ts` |
| スキーマ/型名 | PascalCase(両方同じ名前) | `export const Todo = z.object({...}); export type Todo = z.infer<typeof Todo>;` |
| Functions ハンドラーファイル | `functions/src/{kebab-case}.ts` | `functions/src/todo.ts` |
| Functions ハンドラー名 | `{camelCase}-{operation}` | `todo-get-all`, `todo-create` |
| API ルートパス | `/api/{camelCase}` | `/api/todo`, `/api/todo/{id}` |
| BFF ルートファイル | `app/api/{kebab-case}/route.ts` | `app/api/todo/route.ts` |
| BFF 詳細ルート | `app/api/{kebab-case}/[id]/route.ts` | `app/api/todo/[id]/route.ts` |
| UI ページディレクトリ | `app/{kebab-case}/` | `app/todo/page.tsx` |
| React コンポーネント | PascalCase | `TodoForm.tsx` |
| Cosmos DB コンテナ | PascalCase + 's' | `Todos` |
| Cosmos DB パーティションキー | `/id`(デフォルト) | モデルファイルの `export const partitionKey` でカスタマイズ可能 |
| Bicep コンテナファイル | `infra/containers/{kebab-case}-container.bicep` | `infra/containers/todo-container.bicep` |
-->

## Adding New Models (SwallowKit CLI Skills)
<!-- 新しいモデルの追加(SwallowKit CLI スキル) -->

Use the SwallowKit CLI — do **not** manually create model files or CRUD boilerplate.

<!-- SwallowKit CLI を使用してください。モデルファイルや CRUD ボイラープレートを手動で作成してはいけません。 -->

### Skill: Create a new data model
<!-- スキル: 新しいデータモデルを作成 -->

```bash
npx swallowkit create-model <name>
# Multiple models at once:
# 複数のモデルを一度に作成:
npx swallowkit create-model user post comment
```

Creates `shared/models/<name>.ts` with a Zod schema template including `id`, `createdAt`, `updatedAt`.
Edit the generated file to add your domain-specific fields, then run scaffold.

<!-- `id`、`createdAt`、`updatedAt` を含む Zod スキーマテンプレート付きの `shared/models/<name>.ts` を作成します。生成されたファイルを編集してドメイン固有のフィールドを追加し、scaffold を実行します。 -->

### Skill: Generate full CRUD from a model
<!-- スキル: モデルから完全な CRUD を生成 -->

```bash
npx swallowkit scaffold shared/models/<name>.ts
```

Generates:
- Azure Functions handlers (`functions/src/<name>.ts`)
- BFF API routes (`app/api/<name>/route.ts`, `app/api/<name>/[id]/route.ts`)
- UI pages (`app/<name>/page.tsx`, detail, create, edit pages)
- Cosmos DB Bicep container config (`infra/containers/<name>-container.bicep`)

<!--
生成されるもの:
- Azure Functions ハンドラー(`functions/src/<name>.ts`)
- BFF API ルート(`app/api/<name>/route.ts`、`app/api/<name>/[id]/route.ts`)
- UI ページ(`app/<name>/page.tsx`、詳細、作成、編集ページ)
- Cosmos DB Bicep コンテナ設定(`infra/containers/<name>-container.bicep`)
-->

### Skill: Start development servers
<!-- スキル: 開発サーバーを起動 -->

```bash
npx swallowkit dev
```

Runs Next.js (http://localhost:3000) and Azure Functions (http://localhost:7071) concurrently.
Checks for Cosmos DB Emulator availability.

<!-- Next.js (http://localhost:3000) と Azure Functions (http://localhost:7071) を同時に起動します。Cosmos DB Emulator の可用性を確認します。 -->

### Skill: Provision Azure resources
<!-- スキル: Azure リソースをプロビジョニング -->

```bash
npx swallowkit provision --resource-group <name>
```

Deploys Bicep infrastructure: Static Web Apps, Functions, Cosmos DB, Storage, Managed Identity.

<!-- 実行時にプライマリリージョンと Static Web App リージョンを対話式に選択します。 -->

<!-- Bicep インフラをデプロイ: Static Web Apps、Functions、Cosmos DB、Storage、Managed Identity。 -->

### Typical workflow for "add a new feature/model"
<!-- 「新しい機能/モデルを追加する」典型的なワークフロー -->

1. `npx swallowkit create-model <name>`
2. Edit `shared/models/<name>.ts` — add fields <!-- フィールドを追加 -->
3. `npx swallowkit scaffold shared/models/<name>.ts`
4. `npx swallowkit dev` — verify at http://localhost:3000/<name> <!-- http://localhost:3000/<name> で確認 -->

## Do NOT
<!-- 禁止事項 -->

- **Do not** put business logic or database calls in `app/api/` routes. They are BFF only.
- **Do not** define TypeScript interfaces/types separately from Zod schemas. Always derive types with `z.infer<>`.
- **Do not** manually duplicate model definitions across layers. Use the shared package.
- **Do not** manually create CRUD boilerplate. Use `swallowkit scaffold`.
- **Do not** hardcode Cosmos DB connection strings. Use Managed Identity (`CosmosDBConnection__accountEndpoint`) in production and emulator settings locally.
- **Do not** change the partition key after a container is already created (it requires data migration). Configure it via `export const partitionKey` in model files before the first `swallowkit scaffold`.

<!--
- `app/api/` ルートにビジネスロジックやデータベース呼び出しを置かないでください。BFF 専用です。
- TypeScript の interface/type を Zod スキーマと別に定義しないでください。常に `z.infer<>` で導出します。
- モデル定義をレイヤー間で手動複製しないでください。共有パッケージを使用します。
- CRUD ボイラープレートを手動で作成しないでください。`swallowkit scaffold` を使用します。
- Cosmos DB 接続文字列をハードコードしないでください。本番では Managed Identity、ローカルではエミュレーター設定を使用します。
- コンテナ作成後にパーティションキーを変更しないでください(データ移行が必要です)。最初の `swallowkit scaffold` 実行前にモデルファイルの `export const partitionKey` で設定してください。
-->

## Technology Stack
<!-- 技術スタック -->

- **Frontend**: Next.js (App Router), React, TypeScript, Tailwind CSS
- **BFF**: Next.js API Routes (proxy only)
- **Backend**: Azure Functions (TypeScript, Node.js)
- **Database**: Azure Cosmos DB (NoSQL)
- **Schema**: Zod (shared across all layers via workspace package)
- **Infrastructure**: Bicep (IaC)
- **Hosting**: Azure Static Web Apps (frontend) + Azure Functions Flex Consumption (backend)
- **Auth**: Azure Managed Identity (no connection strings in production)
- **Monitoring**: Application Insights

<!--
- **フロントエンド**: Next.js (App Router), React, TypeScript, Tailwind CSS
- **BFF**: Next.js API Routes(プロキシ専用)
- **バックエンド**: Azure Functions (TypeScript, Node.js)
- **データベース**: Azure Cosmos DB (NoSQL)
- **スキーマ**: Zod(ワークスペースパッケージ経由で全レイヤーで共有)
- **インフラ**: Bicep (IaC)
- **ホスティング**: Azure Static Web Apps(フロントエンド)+ Azure Functions Flex Consumption(バックエンド)
- **認証**: Azure Managed Identity(本番で接続文字列不要)
- **監視**: Application Insights
-->

CLAUDE.md(Claude Code 向け)

CLAUDE.md は Claude Code 向けの簡潔なクイックリファレンスファイルです。詳細仕様は AGENTS.md を参照し、CLI コマンド表とワークフローの要約を含みます。

markdown
# CLAUDE.md

This file is for Claude Code. Read AGENTS.md in the project root for the full
architecture, conventions, and rules.

## Quick Reference
<!-- クイックリファレンス -->

- **Architecture**: Next.js (frontend) → BFF (API routes, proxy only)
  → Azure Functions (backend) → Cosmos DB
- **Schema**: Zod schemas in `shared/models/` are the single source of truth.
  Never define types separately.
- **BFF rule**: `app/api/` routes must ONLY proxy to Azure Functions via
  `callFunction()`. No business logic.
- **Backend rule**: All business logic and Cosmos DB access lives in
  `functions/src/`.

<!--
- **アーキテクチャ**: Next.js(フロントエンド)→ BFF(API ルート、プロキシのみ)→ Azure Functions(バックエンド)→ Cosmos DB
- **スキーマ**: `shared/models/` の Zod スキーマが唯一の信頼できる情報源。型を別途定義しない。
- **BFF ルール**: `app/api/` ルートは `callFunction()` 経由で Azure Functions にプロキシするだけ。ビジネスロジック禁止。
- **バックエンドルール**: すべてのビジネスロジックと Cosmos DB アクセスは `functions/src/` に配置。
-->

## SwallowKit MCP

- This repository includes a project-scoped `.mcp.json` that registers the locally installed SwallowKit MCP server for runtimes that support project MCP files.
- When the `swallowkit_*` tools are available, prefer them for inspect / validate / generate tasks.
- If MCP is unavailable, use `npx swallowkit machine ...` instead.

## SwallowKit CLI Commands
<!-- SwallowKit CLI コマンド -->

| Task | Command |
|------|---------|
| Create model | `npx swallowkit create-model <name>` |
| Generate CRUD | `npx swallowkit scaffold shared/models/<name>.ts` |
| Dev servers | `npx swallowkit dev` |
| Provision Azure | `npx swallowkit provision -g <rg>` |

## Workflow: Add a new model
<!-- ワークフロー: 新しいモデルを追加 -->

1. `npx swallowkit create-model <name>`
2. Edit `shared/models/<name>.ts` — add your fields
3. `npx swallowkit scaffold shared/models/<name>.ts`
4. `npx swallowkit dev` — verify at http://localhost:3000/<name>

.github/copilot-instructions.md(GitHub Copilot 向け)

このファイルは VS Code で GitHub Copilot が自動的に読み込みます。アーキテクチャの概要、主要ルール、命名規則、管理フィールドのサマリーに加え、framework 管理操作で使う MCP / machine-interface fallback も含みます。

.github/instructions/*.instructions.md(GitHub Copilot — レイヤー別)

これらのファイルは、applyTo glob パターンに一致するファイルを編集する際に GitHub Copilot が適用するコンテキスト固有のルールを提供します:

ファイル適用対象主要ルール
shared-models.instructions.mdshared/models/**Zod スキーマ規約、id/createdAt/updatedAt 管理、shared/index.ts からの再エクスポート
bff-routes.instructions.mdapp/api/**プロキシ専用ルール、callFunction() 使用、ビジネスロジック禁止
azure-functions.instructions.mdfunctions/**Cosmos DB bindings、Zod バリデーション、UUID 自動生成

パッケージマネージャーの自動検出

SwallowKit はパッケージマネージャーを自動的に選択します:

  • pnpm がインストール済みの場合 → 常に pnpm を優先
  • それ以外の場合 → npm を使用

生成されるプロジェクト(ロックファイル、ワークスペース設定、CI/CD スクリプト)は検出されたパッケージマネージャーに合わせて生成されます。

bash
# 新しいディレクトリに初期化(対話モード)
npx swallowkit init my-awesome-app

# 新しいディレクトリに初期化(非対話モード)
npx swallowkit init my-awesome-app --cicd github --cosmos-db-mode serverless --vnet outbound

# pnpm で実行
pnpm dlx swallowkit init my-awesome-app

# 初期化後
cd my-awesome-app

swallowkit create-model

shared/models/ 配下に 1 つ以上の Zod モデル雛形ファイルを生成します。

使用法

bash
npx swallowkit create-model <names...> [options]
# or
pnpm dlx swallowkit create-model <names...> [options]

引数

  • names...: 1 つ以上のモデル名

オプション

オプション説明デフォルト
--models-dir <dir>生成先のモデルディレクトリshared/models
--connector <name>指定した connector に紐づく connector 対応モデルを生成(なし)

このコマンドが行うこと

各モデル名について、次を行います:

  • shared/models/<name>.ts を生成
  • ファイル名は kebab-case、スキーマ名と型名は PascalCase に正規化
  • shared/index.ts が存在する場合は再エクスポートを追加
  • 初期スキーマに idnamecreatedAtupdatedAt を含める

例:

bash
npx swallowkit create-model todo category

生成される雛形:

typescript
import { z } from 'zod/v4';

export const Todo = z.object({
  id: z.string(),
  name: z.string().min(1),
  createdAt: z.string().optional(),
  updatedAt: z.string().optional(),
});

export type Todo = z.infer<typeof Todo>;
export const displayName = 'Todo';

Connector モデル

--connector を指定すると、生成される雛形に connector 固有のメタデータを含む connectorConfig エクスポートが追加されます:

  • RDB connector: tableidColumn フィールドを含む
  • API connector: endpoints マッピングを含む
  • いずれも operations 配列を含む(API はすべての操作、RDB は読み取り専用がデフォルト)
  • Zod スキーマの雛形が変更される(バックエンドによる createdAt/updatedAt の自動管理なし)

例:

bash
npx swallowkit create-model user --connector mysql
npx swallowkit create-model backlog-issue --connector backlog

既存ファイルがある場合

対象ファイルがすでに存在する場合は、上書きするかどうかを確認します。no を選ぶとそのモデルだけスキップされ、他のモデルの処理は続行されます。

典型的な流れ

bash
npx swallowkit create-model todo
# shared/models/todo.ts を編集
npx swallowkit scaffold shared/models/todo.ts

まず create-model でスキーマのひな形を作り、その後で業務要件に合わせて Zod モデルを編集してから scaffold を実行します。

swallowkit add-connector

外部データソースの connector を swallowkit.config.js に登録します。

使用法

bash
npx swallowkit add-connector <name> --type=<type> [options]
# or
pnpm dlx swallowkit add-connector <name> --type=<type> [options]

引数

  • name (必須): connector 名(config のキーとして使用)

オプション

オプション説明必須
--type <type>connector タイプ: rdb または apiはい
--provider <provider>RDB プロバイダー: mysql, postgres, sqlserver--type rdb の場合のみ
--connection-env <var>接続文字列の環境変数名--type rdb の場合のみ
--base-url-env <var>API ベース URL の環境変数名--type api の場合のみ
--auth-type <type>認証タイプ: apiKey, bearer, oauth2--type api の場合のみ
--auth-env <var>認証情報の環境変数名--type api の場合のみ
--auth-placement <placement>認証の配置先: query または header--type apiapiKey の場合のみ
--auth-param <name>API キーのパラメーター名--type apiapiKey の場合のみ

このコマンドが行うこと

  • 既存の swallowkit.config.js を読み込む
  • connectors セクションに connector 定義を追加
  • connectors セクションが存在しない場合は新規作成

bash
# MySQL RDB connector を追加
npx swallowkit add-connector mysql --type rdb --provider mysql --connection-env MYSQL_CONNECTION_STRING

# API キー認証の REST API connector を追加
npx swallowkit add-connector backlog --type api --base-url-env BACKLOG_API_BASE_URL --auth-type apiKey --auth-env BACKLOG_API_KEY --auth-placement query --auth-param apiKey

# Bearer トークン認証の REST API connector を追加
npx swallowkit add-connector github --type api --base-url-env GITHUB_API_BASE_URL --auth-type bearer --auth-env GITHUB_TOKEN

swallowkit add-auth

SwallowKit プロジェクトに認証・認可の基盤を構築します。

使用法

bash
npx swallowkit add-auth [options]
# or
pnpm dlx swallowkit add-auth [options]

オプション

オプション説明デフォルト
--provider <provider>認証プロバイダーcustom-jwtcustom-jwt

注: swaswa-custom は将来向けに予約された値で、現行の認証生成フローでは未実装です。

このコマンドが行うこと

  1. 共有認証モデルを生成(shared/models/auth.ts — LoginRequest, AuthUser, LoginResponse)
  2. 認証用 Functions を生成(login, me, logout)— 設定されたバックエンド言語に対応(TS/C#/Python)
  3. JWT ヘルパーユーティリティを生成(トークン検証・ロールチェック用)
  4. BFF ルートを生成(app/api/auth/login|logout|me/route.ts)— httpOnly Cookie 管理
  5. Next.js ミドルウェアを生成(middleware.ts)— Cookie ベースの認証チェックとリダイレクト
  6. ログインページを生成(app/login/page.tsx
  7. 認証用 React コンテキストを生成(lib/auth/auth-context.tsx)— useAuth フック付き
  8. lib/api/call-function.ts を更新 — Authorization ヘッダーの転送を追加
  9. swallowkit.config.jsauth セクションを追加(未設定の場合)
  10. バックエンドの依存パッケージをインストール(JWT ライブラリ + コネクタプロバイダーに対応する RDB ドライバー)

前提条件

  • ユーザーデータベース用のコネクタが swallowkit.config.js に登録されていること(例: PostgreSQL・MySQL・SQL Server を指す RDB コネクタ)
  • auth.customJwt.userConnector がそのコネクタ名を参照していること

bash
# カスタム JWT 認証をセットアップ(デフォルト)
npx swallowkit add-auth

# プロバイダーを明示的に指定
npx swallowkit add-auth --provider custom-jwt

典型的なワークフロー

bash
# 1. ユーザーデータベース用の RDB コネクタを追加
npx swallowkit add-connector userdb --type rdb --provider postgres --connection-env USERDB_CONNECTION_STRING

# 2. swallowkit.config.js に auth セクションを設定

# 3. add-auth を実行して認証基盤を一括生成
npx swallowkit add-auth

# 4. functions/local.settings.json に JWT_SECRET を設定

# 5. モデルに authPolicy を追加してロールベースアクセス制御を有効化
# 6. scaffold を再実行して Functions に認証ガードを注入
npx swallowkit scaffold shared/models/estimate.ts

# 7. モックコネクタで開発を開始(ユーザーデータもモック化される)
npx swallowkit dev --mock-connectors

💡 設定の詳細とアーキテクチャの概要については 認証ガイド をご参照ください。

swallowkit dev

開発サーバーを起動します(Next.js + Azure Functions)。

使用法

bash
npx swallowkit dev [options]
# or
pnpm dlx swallowkit dev [options]

オプション

オプション短縮説明デフォルト
--port <port>-pNext.js ポート3000
--functions-port <port>Azure Functions ポート7071
--host <host>ホスト名localhost
--open-oブラウザを自動的に開くfalse
--no-functionsFunctions をスキップfalse
--seed-env <environment>起動前に dev-seeds/<environment> から対応する Cosmos Emulator コンテナを置換(無効)
--mock-connectorsconnector モデル用のモックプロキシサーバーを起動false
--verbose-v詳細ログを表示false

動作

  1. Cosmos DB Emulator チェック: ローカルエミュレーターの起動を確認
  2. Cosmos DB 初期化:
    • 必要ならデータベースを作成
    • 必要ならモデル用コンテナを作成
    • --seed-env <environment> が指定され、dev-seeds/<environment>/ が存在する場合は、対応する JSON で各コンテナを置換
  3. Connector Mock Server--mock-connectors 有効時):
    • Functions ポート + 1(例: 7072)でプロキシサーバーを起動
    • connector モデルに一致するルート → Zod 生成のモックデータによるインメモリ CRUD
    • その他のルート → 実際の Azure Functions にプロキシ
    • dev-seeds JSON が利用可能な場合は初期データとして読み込み
    • BFF は設定変更なしで自動的にモックプロキシを経由
  4. Azure Functions 起動:
    • Azure Functions Core Tools の確認
    • 依存関係の自動インストール
    • functions/ ディレクトリで Functions を起動
    • Python バックエンド: ローカル実行環境の管理に uv を使い、.uv/ 配下にプロジェクトローカルな状態を保持しつつ、アプリ用の functions/.venv と Python スキーマ生成用の functions/.codegen-venv を作成
    • C# バックエンド: isolated worker のビルドが完了するまでコールドスタートが長めになるため、Functions URL は HTTP 応答できる状態になってから ready として表示
  5. Next.js 起動: 開発サーバーを起動

Dev Seed ワークフロー

Cosmos DB Emulator の状態をデバッグ用に再現したい場合は、環境ごとの seed データを使います:

bash
npx swallowkit create-dev-seeds local
# dev-seeds/local/*.json を編集
npx swallowkit dev --seed-env local

ルール:

  • ファイル名はスキーマファイルに対応します。例: shared/models/todo.ts -> dev-seeds/local/todo.json
  • 一致した seed ファイルは、対応する Cosmos コンテナの内容を丸ごと置き換えます
  • 一致する seed ファイルがないコンテナは変更されません
  • --seed-env を省略した場合、または環境ディレクトリが存在しない場合は、既存の Emulator データを保持します
  • 各ドキュメントには空でない文字列の id が必要です

例:

json
[
  {
    "id": "seed-todo-001",
    "name": "Seed todo one",
    "createdAt": "2026-03-21T00:00:00.000Z",
    "updatedAt": "2026-03-21T00:00:00.000Z"
  }
]

bash
# デフォルト設定で起動
npx swallowkit dev

# カスタムポートで起動
npx swallowkit dev --port 3001 --functions-port 7072

# ブラウザを自動的に開く
npx swallowkit dev --open

# Functions なしで Next.js のみ起動
npx swallowkit dev --no-functions

# seed 環境を指定して起動
npx swallowkit dev --seed-env local

# 詳細ログ付き
npx swallowkit dev --verbose

# connector モックサーバー付きで起動
npx swallowkit dev --mock-connectors

# モック connector と seed データを併用
npx swallowkit dev --mock-connectors --seed-env local

トラブルシューティング

Cosmos DB Emulator が見つからない:

Error: Cosmos DB Emulator is not running

解決策:

  • Windows: 公式サイトからインストール
  • Docker: docker run -p 8081:8081 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

Azure Functions Core Tools がない:

Error: Azure Functions Core Tools not found

解決策:

bash
npm install -g azure-functions-core-tools@4
# or
pnpm add -g azure-functions-core-tools@4

ポートが使用中:

Error: Port 3000 is already in use

解決策:

bash
npx swallowkit dev --port 3001

swallowkit scaffold

Zod スキーマから CRUD 操作を自動生成します。

使用法

bash
npx swallowkit scaffold <model-file> [options]
# or
pnpm dlx swallowkit scaffold <model-file> [options]

引数

  • model-file (必須): Zodスキーマを含むモデルファイルのパス

オプション

現在、オプションはありません。

Connector モデルの動作

モデルファイルに connectorConfig エクスポートが含まれている場合、scaffold は connector モデルとして検出します:

  • RDB connector モデル: functions/Connectors/(C#)または同等のディレクトリに SQL ベースの CRUD ハンドラーを生成
  • API connector モデル: HTTP クライアントハンドラーを生成
  • BFF ルートと React UI は通常のモデルと同一に生成
  • connector モデルでは Cosmos DB Bicep 生成をスキップ
  • 読み取り専用モデル(operations が getAll/getById のみ)は GET エンドポイントのみ生成

生成されるコード

1. Azure Functions (CRUD エンドポイント)

typescript
// functions/src/functions/{resource}.ts
- GET    /api/{resource}       - 全件取得
- GET    /api/{resource}/{id}  - ID で取得
- POST   /api/{resource}       - 作成
- PUT    /api/{resource}/{id}  - 更新
- DELETE /api/{resource}/{id}  - 削除

各エンドポイントは:

  • ✅ Cosmos DB input/output bindings を使用
  • ✅ Zod スキーマで自動検証
  • ✅ エラーハンドリング付き
  • ✅ TypeScript 型安全
  • ✅ ファクトリーパターン対応(共有 crud-factory.ts

2. Next.js BFF API Routes

typescript
// app/api/{resource}/route.ts
// app/api/{resource}/[id]/route.ts

各ルートは:

  • ✅ Azure Functions バックエンドを呼び出し
  • ✅ 自動スキーマ検証
  • ✅ エラーハンドリング

3. React コンポーネント(オプション)

typescript
// components/{Resource}List.tsx
// components/{Resource}Form.tsx

前提条件

モデルファイルの要件:

typescript
// lib/models/todo.ts
import { z } from 'zod';
import { BaseModel } from '@/lib/database/base-model';

// 1. Zod スキーマを定義
export const todoSchema = z.object({
  id: z.string(),
  text: z.string().min(1),
  completed: z.boolean().default(false),
  createdAt: z.string().default(() => new Date().toISOString()),
});

// 2. 型を推論
export type TodoType = z.infer<typeof todoSchema>;

// 3. BaseModel を継承
export class Todo extends BaseModel<TodoType> {
  constructor() {
    super(
      'AppDatabase',      // データベース名
      'Todos',            // コンテナ名
      todoSchema          // スキーマ
    );
  }
}

bash
# Todo モデルから CRUD を生成
npx swallowkit scaffold lib/models/todo.ts

# Product モデルから CRUD を生成
npx swallowkit scaffold lib/models/product.ts

生成後の使用

フロントエンドから使用:

typescript
import { api } from '@/lib/api/backend';
import type { TodoType } from '@/lib/models/todo';

// 全件取得
const todos = await api.get<TodoType[]>('/api/todos');

// 作成(バックエンドで検証)
const created = await api.post<TodoType>('/api/todos', {
  text: '牛乳を買う',
  completed: false
});

// 更新(バックエンドで検証)
const updated = await api.put<TodoType>('/api/todos/123', {
  completed: true
});

// 削除
await api.delete('/api/todos/123');

詳細

詳しくは Scaffold ガイド を参照してください。

swallowkit create-dev-seeds

shared/models/ の現在のスキーマから、指定したローカル環境向けの JSON seed テンプレートを生成します。

使用法

bash
npx swallowkit create-dev-seeds <environment> [options]
# or
pnpm dlx swallowkit create-dev-seeds <environment> [options]

引数

  • environment (必須): dev-seeds/ 配下に作成する seed 環境ディレクトリ名

オプション

オプション説明デフォルト
--models-dir <dir>スキーマを読むモデルディレクトリshared/models
--seeds-dir <dir>seed 環境を生成するベースディレクトリdev-seeds
--force既存の JSON seed ファイルを上書きfalse

生成内容

shared/models/ 配下の各スキーマについて、dev-seeds/<environment>/ に JSON ファイルを生成します:

text
dev-seeds/
  local/
    todo.json
    category.json

テンプレート値はスキーマの型から推測されます:

  • string -> サンプル文字列
  • number -> 0
  • boolean -> false
  • enum -> 最初の enum 値
  • ...At / date フィールド -> ISO 形式の時刻サンプル
  • ネストスキーマ -> ネストした JSON オブジェクト

典型的な流れ

bash
npx swallowkit create-model todo
npx swallowkit scaffold shared/models/todo.ts
npx swallowkit create-dev-seeds local
# dev-seeds/local/todo.json を編集
npx swallowkit dev --seed-env local

swallowkit provision

Azure リソースを Bicep でプロビジョニングします。

使用法

bash
npx swallowkit provision [options]
# or
pnpm dlx swallowkit provision [options]

オプション

オプション短縮説明必須
--resource-group <name>-gリソースグループ名
--subscription <id>サブスクリプション ID

リージョン選択

このコマンドは実行時に以下を対話式に選択します:

  • Functions / Cosmos DB 用のプライマリリージョン
  • Static Web App のリージョン

推奨の組み合わせ:

  • japaneast + eastasia
  • japanwest + eastasia
  • eastus2 + eastus2
  • westeurope + westeurope

プライマリリージョンの選択肢:

  • japaneast - 東日本
  • japanwest - 西日本
  • eastasia - 東アジア
  • southeastasia - 東南アジア
  • eastus - 米国東部
  • eastus2 - 米国東部2
  • westus2 - 米国西部2
  • centralus - 米国中部
  • westeurope - 西ヨーロッパ

Static Web App リージョンの選択肢:

  • eastasia - 日本向け推奨
  • westus2 - 米国西部2
  • centralus - 米国中部
  • eastus2 - 米国東部2
  • westeurope - 西ヨーロッパ

全リージョン一覧:

bash
az account list-locations --output table

生成されるリソース

  1. Azure Static Web Apps

    • SKU: Free
    • ビルド構成: standalone Next.js
  2. Azure Functions

    • プラン: Flex Consumption
    • ランタイム: Node.js 22
    • OS: Linux
  3. Azure Cosmos DB

    • モード: 初期化時に選択した Free Tier または Serverless
    • API: NoSQL
    • 一貫性: Session
  4. Azure Storage Account

    • Functions 用ストレージ
    • SKU: Standard_LRS
  5. Managed Identity

    • 種類: System-assigned
    • ロール: Cosmos DB Data Contributor

bash
# 基本的な使用
npx swallowkit provision --resource-group my-app-rg

# サブスクリプション指定
npx swallowkit provision \
  --resource-group my-app-rg \
  --subscription "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

プロビジョニング後の確認

bash
# リソース一覧を表示
az resource list --resource-group my-app-rg --output table

# Static Web Apps の URL を取得
az staticwebapp show \
  --name <swa-name> \
  --resource-group my-app-rg \
  --query "defaultHostname" -o tsv

# Functions の URL を取得
az functionapp show \
  --name <function-name> \
  --resource-group my-app-rg \
  --query "defaultHostName" -o tsv

Bicep ファイルのカスタマイズ

プロビジョニング前に infra/ の Bicep ファイルを編集できます:

bicep
// infra/modules/functions-flex.bicep

// インスタンスメモリサイズをカスタマイズ
resource flexFunctionsServer 'Microsoft.Web/sites@2023-12-01' = {
  // Flex Consumption プロパティ
}

編集後、swallowkit provision を再実行して変更を適用します。

トラブルシューティング

リソースグループが存在しない:

bash
# 作成
az group create --name my-app-rg --location japaneast

リージョンでリソースが利用できない:

bash
# 利用可能なリージョンを確認
az provider show --namespace Microsoft.Web \
  --query "resourceTypes[?resourceType=='staticSites'].locations" -o table

クォータ超過:

bash
# クォータを確認
az vm list-usage --location japaneast --output table

グローバルオプション

全コマンドで使用可能:

オプション説明
--helpヘルプを表示
--versionバージョンを表示

環境変数

CLI の動作を環境変数で制御:

変数説明デフォルト
SWALLOWKIT_LOG_LEVELログレベル (debug/info/warn/error)info
COSMOS_DB_ENDPOINTCosmos DB エンドポイントhttps://localhost:8081/
BACKEND_API_URLFunctions URLhttp://localhost:7071

次のステップ

Released under the MIT License.