Skip to content

はじめる

このページでは、SwallowKit プロジェクトを作成し、最初の CRUD フローを生成するまでの手順を説明します。

最終的に、1 つの Zod スキーマから生成された型付き BFF ルート、Azure Functions バックエンドハンドラー、React UI コンポーネントを持つ Next.js アプリケーションが動作する状態になります。

前提条件

  • Node.js 20 以上
  • pnpm(推奨)— corepack enable を実行するか npm install -g pnpm でインストール
    • npm でも動作します。SwallowKit はパッケージマネージャーを自動検出します(pnpm が利用可能なら優先)。
  • Azure Functions Core Tools 4.x — ローカル Functions 開発に必要
  • Azure Cosmos DB Emulator — ローカルデータストアに必要
    • Windows: ダウンロード
    • Docker: docker run -p 8081:8081 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

1. プロジェクトを作成する

bash
npx swallowkit init my-app
cd my-app
bash
pnpm dlx swallowkit init my-app
cd my-app

このコマンドは内部で create-next-app を実行し、その上に SwallowKit のプロジェクト構造を追加します。

対話プロンプトで以下を選択します:

オプションデフォルト
CI/CD プロバイダーgithub, azure, skip(対話で選択)
バックエンド言語typescript, csharp, python(対話で選択)
Cosmos DB モードfreetier, serverless(対話で選択)
ネットワークoutbound, none(対話で選択)

プロンプトをスキップするには、フラグで直接指定します:

bash
npx swallowkit init my-app --cicd github --backend-language typescript --cosmos-db-mode serverless --vnet none
bash
pnpm dlx swallowkit init my-app --cicd github --backend-language typescript --cosmos-db-mode serverless --vnet none

2. モデルを作成する

bash
npx swallowkit create-model todo
bash
pnpm swallowkit create-model todo

shared/models/todo.ts にテンプレートスキーマが生成されます。編集してフィールドを追加します:

typescript
// shared/models/todo.ts
import { z } from 'zod';

export const todo = z.object({
  id: z.string(),
  text: z.string().min(1).max(200),
  completed: z.boolean().default(false),
  createdAt: z.string().optional(),
  updatedAt: z.string().optional(),
});

export type Todo = z.infer<typeof todo>;

idcreatedAtupdatedAt はバックエンドが管理するフィールドです。スキーマでは optional() として定義します。

3. CRUD コードを生成する

bash
npx swallowkit scaffold todo
bash
pnpm swallowkit scaffold todo

生成されるファイル:

レイヤー生成ファイル
Azure Functionsfunctions/src/todo.ts(TypeScript バックエンド)
BFF ルートapp/api/todo/route.tsapp/api/todo/[id]/route.ts
UI ページapp/todo/page.tsxapp/todo/[id]/page.tsxapp/todo/new/page.tsxapp/todo/[id]/edit/page.tsx
UI コンポーネントapp/todo/_components/TodoForm.tsx
インフラinfra/containers/todo-container.bicep

C# バックエンドでは functions/Crud/TodoCrudFunctions.cs、Python では functions/blueprints/todo.py が生成されます。

4. 開発サーバーを起動する

bash
npx swallowkit dev
bash
pnpm swallowkit dev

起動するサーバー:

http://localhost:3000/todo を開くと生成された UI を確認できます。

5. 動作を確認する

  • http://localhost:3000/todo/new にアクセスして todo を作成する
  • フォームは BFF ルートに送信され、BFF が Azure Functions に転送する
  • データはローカルの Cosmos DB Emulator に保存される
  • 一覧ページに作成したアイテムが表示される

生成されたプロジェクト構成

initscaffold の後、プロジェクトは次のような構成になります:

my-app/
├── app/
│   ├── api/todo/          # BFF ルート(自動バリデーション、Functions へプロキシ)
│   └── todo/              # React ページとコンポーネント
├── shared/models/
│   └── todo.ts            # Zod スキーマ(単一のソース)
├── functions/src/
│   └── todo.ts            # Azure Functions CRUD ハンドラー
├── infra/
│   ├── main.bicep         # Azure リソース定義
│   └── containers/        # Cosmos DB コンテナ定義
├── lib/
│   └── api/               # BFF ヘルパー(callFunction)
└── .swallowkit/           # プロジェクトメタデータ

次のステップ

  • 基本概念 — スキーマ中心のアーキテクチャと BFF パターンを理解する
  • Scaffold ガイド — 高度な scaffold オプション、ネストスキーマ、複数モデル
  • ローカル開発 — Dev seeds、モックコネクタ、バックエンド別のセットアップ
  • Azure へのデプロイ — リソースのプロビジョニングと CI/CD 設定

Released under the MIT License.