swallowkit 0.2.0-beta.1 → 0.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.ja.md +183 -183
- package/README.md +184 -184
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +17 -14
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/create-model.d.ts.map +1 -1
- package/dist/cli/commands/create-model.js +14 -11
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/deploy.js +3 -0
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +3 -0
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/index.d.ts +0 -2
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -5
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1885 -1490
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/provision.d.ts.map +1 -1
- package/dist/cli/commands/provision.js +3 -0
- package/dist/cli/commands/provision.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +131 -128
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +6 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +224 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/index.js +0 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +13 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +45 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/scaffold/functions-generator.js +351 -351
- package/dist/core/scaffold/model-parser.js +96 -96
- package/dist/core/scaffold/nextjs-generator.js +373 -373
- package/dist/core/scaffold/ui-generator.js +554 -554
- package/package.json +73 -73
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Takumasa Hirabayashi
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Takumasa Hirabayashi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ja.md
CHANGED
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
# SwallowKit
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/swallowkit)
|
|
4
|
-
[](https://www.npmjs.com/package/swallowkit)
|
|
5
|
-
[](./LICENSE)
|
|
6
|
-
|
|
7
|
-
[English](./README.md) | 日本語
|
|
8
|
-
|
|
9
|
-
**Azure 上の Next.js アプリケーション向けの型安全なスキーマ駆動開発ツールキット**
|
|
10
|
-
|
|
11
|
-
SwallowKit は、Zod スキーマを通じてエンドツーエンドの型安全性を維持しながら、外部の Azure Functions バックエンドを持つフルスタック Next.js アプリケーションを Static Web Apps で構築するための統合キットです。
|
|
12
|
-
|
|
13
|
-
Next.js の API ルートを BFF(Backend For Frontend)としての使用のみに制限し、ビジネスロジックは独立した Azure Functions にオフロードすることでクライアント・サーバー間の明確な分離を提供します。
|
|
14
|
-
|
|
15
|
-
Zod スキーマから自動的に CRUD 操作を生成する Scaffold 機能を備え、一貫した型定義で Next.js (Azure Static Web Apps)、Azure Functions、Cosmos DB を組み合わせた構成で、CRUD コードの自動生成から本番デプロイ・CI/CD までをサポートします。
|
|
16
|
-
|
|
17
|
-
> **注意**: このプロジェクトは活発に開発中です。将来のバージョンでAPIが変更される可能性があります。
|
|
18
|
-
|
|
19
|
-
## ✨ 主な特徴
|
|
20
|
-
|
|
21
|
-
- **🔄 Zod スキーマ共有** - フロントエンド、BFF、Azure Functions、Cosmos DB で同じスキーマを使用
|
|
22
|
-
- **⚡ CRUD コード生成** - `swallowkit scaffold` で Azure Functions + Next.js コードを自動生成
|
|
23
|
-
- **🛡️ 完全な型安全性** - クライアントからデータベースまでエンドツーエンド TypeScript
|
|
24
|
-
- **🎯 BFF パターン** - Next.js API Routes が BFF レイヤーとして機能、自動検証・リソース名推論
|
|
25
|
-
- **☁️ Azure 最適化** - Static Web Apps + Functions + Cosmos DB で最小コスト構成
|
|
26
|
-
- **🚀 簡単デプロイ** - Bicep IaC + CI/CD ワークフローを自動生成
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
## 📚 ドキュメント
|
|
30
|
-
|
|
31
|
-
- **[CLI リファレンス](./docs/cli-reference.ja.md)** - 全コマンドの詳細
|
|
32
|
-
- **[Scaffold ガイド](./docs/scaffold-guide.ja.md)** - CRUD コード生成
|
|
33
|
-
- **[Zod スキーマ共有ガイド](./docs/zod-schema-sharing-guide.ja.md)** - スキーマ設計
|
|
34
|
-
- **[デプロイガイド](./docs/deployment-guide.ja.md)** - Azure へのデプロイ
|
|
35
|
-
|
|
36
|
-
## 🚀 クイックスタート
|
|
37
|
-
|
|
38
|
-
### 1. プロジェクト作成
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npx swallowkit init my-app
|
|
42
|
-
cd my-app
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 2. モデルの作成
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npx swallowkit create-model todo
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
これにより `lib/models/todo.ts` が生成されます。必要なフィールドを追加してカスタマイズ:
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
// lib/models/todo.ts
|
|
55
|
-
import { z } from 'zod';
|
|
56
|
-
|
|
57
|
-
export const todoSchema = z.object({
|
|
58
|
-
id: z.string(),
|
|
59
|
-
text: z.string().min(1).max(200),
|
|
60
|
-
completed: z.boolean().default(false),
|
|
61
|
-
createdAt: z.string().optional(),
|
|
62
|
-
updatedAt: z.string().optional(),
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
export type Todo = z.infer<typeof todoSchema>;
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 3. CRUD コード生成
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
npx swallowkit scaffold lib/models/todo.ts
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
これで以下が自動生成されます:
|
|
75
|
-
- ✅ Azure Functions (CRUD エンドポイント + Cosmos DB バインディング)
|
|
76
|
-
- ✅ Next.js BFF API Routes (自動検証・リソース名推論)
|
|
77
|
-
- ✅ React コンポーネント (型安全なフォーム)
|
|
78
|
-
|
|
79
|
-
### 4. 開発サーバー起動
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
npx swallowkit dev
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
- Next.js: http://localhost:3000
|
|
86
|
-
- Azure Functions: http://localhost:7071
|
|
87
|
-
|
|
88
|
-
### 5. フロントエンドから使用
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
import { api } from '@/lib/api/backend';
|
|
92
|
-
import type { Todo } from '@/lib/models/todo';
|
|
93
|
-
|
|
94
|
-
// 全件取得 - BFFエンドポイントを呼び出し
|
|
95
|
-
const todos = await api.get<Todo[]>('/api/todos');
|
|
96
|
-
|
|
97
|
-
// 作成 - バックエンドで検証
|
|
98
|
-
const created = await api.post<Todo>('/api/todos', {
|
|
99
|
-
text: '牛乳を買う',
|
|
100
|
-
completed: false
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// 更新 - バックエンドで検証
|
|
104
|
-
const updated = await api.put<Todo>('/api/todos/123', { completed: true });
|
|
105
|
-
|
|
106
|
-
// 削除
|
|
107
|
-
await api.delete('/api/todos/123');
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## 🏗️ アーキテクチャ
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
114
|
-
│ Frontend (React) │
|
|
115
|
-
│ - Client Components │
|
|
116
|
-
│ - Server Components (SSR) │
|
|
117
|
-
└──────────────────────────┬───────────────────────────────────┘
|
|
118
|
-
│ api.post('/api/todos', data)
|
|
119
|
-
▼
|
|
120
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
121
|
-
│ BFF Layer (Next.js API Routes) │
|
|
122
|
-
│ - Auto Schema Validation (Zod) │
|
|
123
|
-
│ - Error Handling │
|
|
124
|
-
└──────────────────────────┬───────────────────────────────────┘
|
|
125
|
-
│ HTTP Request
|
|
126
|
-
▼
|
|
127
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
128
|
-
│ Azure Functions (Backend) │
|
|
129
|
-
│ - HTTP Triggers (CRUD) │
|
|
130
|
-
│ - Zod Validation (Re-check) │
|
|
131
|
-
│ - Business Logic │
|
|
132
|
-
│ - Cosmos DB Bindings │
|
|
133
|
-
└──────────────────────────┬───────────────────────────────────┘
|
|
134
|
-
│
|
|
135
|
-
▼
|
|
136
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
137
|
-
│ Azure Cosmos DB │
|
|
138
|
-
│ - NoSQL Database │
|
|
139
|
-
│ - Zod Schema Validation │
|
|
140
|
-
└─────────────────────────────────────────────────────────────┘
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**重要なパターン:**
|
|
144
|
-
- **BFF (Backend For Frontend)**: Next.js API Routes が Azure Functions へのプロキシ
|
|
145
|
-
- **共有スキーマ**: Zod スキーマをフロントエンド・BFF・Functions・DB で共有
|
|
146
|
-
- **型安全性**: Zod から TypeScript 型を自動推論
|
|
147
|
-
- **マネージド ID**: サービス間の安全な接続(接続文字列不要)
|
|
148
|
-
|
|
149
|
-
## 📦 前提条件
|
|
150
|
-
|
|
151
|
-
- Node.js 22.x
|
|
152
|
-
- Azure Cosmos DB Emulator (ローカル開発用)
|
|
153
|
-
- [公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/cosmos-db/emulator)
|
|
154
|
-
- Windows: [ダウンロード](https://aka.ms/cosmosdb-emulator)
|
|
155
|
-
- Docker: `docker run -p 8081:8081 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator`
|
|
156
|
-
|
|
157
|
-
## 🚀 Azure へのデプロイ
|
|
158
|
-
|
|
159
|
-
Next.js アプリを standalone モードで Azure Static Web Apps にデプロイし、バックエンド操作のために独立した Azure Functions に接続します。
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
# 1. リソースをプロビジョニング (Bicep IaC)
|
|
163
|
-
npx swallowkit provision --resource-group my-app-rg --location japaneast
|
|
164
|
-
|
|
165
|
-
# 2. CI/CD シークレットを設定 (詳細はデプロイガイド参照)
|
|
166
|
-
|
|
167
|
-
# 3. コードをプッシュして自動デプロイ
|
|
168
|
-
git push origin main
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
詳細は **[デプロイガイド](./docs/deployment-guide.ja.md)** を参照してください。
|
|
172
|
-
|
|
173
|
-
## ライセンス
|
|
174
|
-
|
|
175
|
-
MIT
|
|
176
|
-
|
|
177
|
-
## 🔗 関連リンク
|
|
178
|
-
|
|
179
|
-
- [Azure Static Web Apps](https://learn.microsoft.com/ja-jp/azure/static-web-apps/)
|
|
180
|
-
- [Azure Functions](https://learn.microsoft.com/ja-jp/azure/azure-functions/)
|
|
181
|
-
- [Azure Cosmos DB](https://learn.microsoft.com/ja-jp/azure/cosmos-db/)
|
|
182
|
-
- [Next.js](https://nextjs.org/)
|
|
183
|
-
- [Zod](https://zod.dev/)
|
|
1
|
+
# SwallowKit
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/swallowkit)
|
|
4
|
+
[](https://www.npmjs.com/package/swallowkit)
|
|
5
|
+
[](./LICENSE)
|
|
6
|
+
|
|
7
|
+
[English](./README.md) | 日本語
|
|
8
|
+
|
|
9
|
+
**Azure 上の Next.js アプリケーション向けの型安全なスキーマ駆動開発ツールキット**
|
|
10
|
+
|
|
11
|
+
SwallowKit は、Zod スキーマを通じてエンドツーエンドの型安全性を維持しながら、外部の Azure Functions バックエンドを持つフルスタック Next.js アプリケーションを Static Web Apps で構築するための統合キットです。
|
|
12
|
+
|
|
13
|
+
Next.js の API ルートを BFF(Backend For Frontend)としての使用のみに制限し、ビジネスロジックは独立した Azure Functions にオフロードすることでクライアント・サーバー間の明確な分離を提供します。
|
|
14
|
+
|
|
15
|
+
Zod スキーマから自動的に CRUD 操作を生成する Scaffold 機能を備え、一貫した型定義で Next.js (Azure Static Web Apps)、Azure Functions、Cosmos DB を組み合わせた構成で、CRUD コードの自動生成から本番デプロイ・CI/CD までをサポートします。
|
|
16
|
+
|
|
17
|
+
> **注意**: このプロジェクトは活発に開発中です。将来のバージョンでAPIが変更される可能性があります。
|
|
18
|
+
|
|
19
|
+
## ✨ 主な特徴
|
|
20
|
+
|
|
21
|
+
- **🔄 Zod スキーマ共有** - フロントエンド、BFF、Azure Functions、Cosmos DB で同じスキーマを使用
|
|
22
|
+
- **⚡ CRUD コード生成** - `swallowkit scaffold` で Azure Functions + Next.js コードを自動生成
|
|
23
|
+
- **🛡️ 完全な型安全性** - クライアントからデータベースまでエンドツーエンド TypeScript
|
|
24
|
+
- **🎯 BFF パターン** - Next.js API Routes が BFF レイヤーとして機能、自動検証・リソース名推論
|
|
25
|
+
- **☁️ Azure 最適化** - Static Web Apps + Functions + Cosmos DB で最小コスト構成
|
|
26
|
+
- **🚀 簡単デプロイ** - Bicep IaC + CI/CD ワークフローを自動生成
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## 📚 ドキュメント
|
|
30
|
+
|
|
31
|
+
- **[CLI リファレンス](./docs/cli-reference.ja.md)** - 全コマンドの詳細
|
|
32
|
+
- **[Scaffold ガイド](./docs/scaffold-guide.ja.md)** - CRUD コード生成
|
|
33
|
+
- **[Zod スキーマ共有ガイド](./docs/zod-schema-sharing-guide.ja.md)** - スキーマ設計
|
|
34
|
+
- **[デプロイガイド](./docs/deployment-guide.ja.md)** - Azure へのデプロイ
|
|
35
|
+
|
|
36
|
+
## 🚀 クイックスタート
|
|
37
|
+
|
|
38
|
+
### 1. プロジェクト作成
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx swallowkit init my-app
|
|
42
|
+
cd my-app
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 2. モデルの作成
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx swallowkit create-model todo
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
これにより `lib/models/todo.ts` が生成されます。必要なフィールドを追加してカスタマイズ:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// lib/models/todo.ts
|
|
55
|
+
import { z } from 'zod';
|
|
56
|
+
|
|
57
|
+
export const todoSchema = z.object({
|
|
58
|
+
id: z.string(),
|
|
59
|
+
text: z.string().min(1).max(200),
|
|
60
|
+
completed: z.boolean().default(false),
|
|
61
|
+
createdAt: z.string().optional(),
|
|
62
|
+
updatedAt: z.string().optional(),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
export type Todo = z.infer<typeof todoSchema>;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3. CRUD コード生成
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npx swallowkit scaffold lib/models/todo.ts
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
これで以下が自動生成されます:
|
|
75
|
+
- ✅ Azure Functions (CRUD エンドポイント + Cosmos DB バインディング)
|
|
76
|
+
- ✅ Next.js BFF API Routes (自動検証・リソース名推論)
|
|
77
|
+
- ✅ React コンポーネント (型安全なフォーム)
|
|
78
|
+
|
|
79
|
+
### 4. 開発サーバー起動
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx swallowkit dev
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- Next.js: http://localhost:3000
|
|
86
|
+
- Azure Functions: http://localhost:7071
|
|
87
|
+
|
|
88
|
+
### 5. フロントエンドから使用
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { api } from '@/lib/api/backend';
|
|
92
|
+
import type { Todo } from '@/lib/models/todo';
|
|
93
|
+
|
|
94
|
+
// 全件取得 - BFFエンドポイントを呼び出し
|
|
95
|
+
const todos = await api.get<Todo[]>('/api/todos');
|
|
96
|
+
|
|
97
|
+
// 作成 - バックエンドで検証
|
|
98
|
+
const created = await api.post<Todo>('/api/todos', {
|
|
99
|
+
text: '牛乳を買う',
|
|
100
|
+
completed: false
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// 更新 - バックエンドで検証
|
|
104
|
+
const updated = await api.put<Todo>('/api/todos/123', { completed: true });
|
|
105
|
+
|
|
106
|
+
// 削除
|
|
107
|
+
await api.delete('/api/todos/123');
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 🏗️ アーキテクチャ
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
114
|
+
│ Frontend (React) │
|
|
115
|
+
│ - Client Components │
|
|
116
|
+
│ - Server Components (SSR) │
|
|
117
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
118
|
+
│ api.post('/api/todos', data)
|
|
119
|
+
▼
|
|
120
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
121
|
+
│ BFF Layer (Next.js API Routes) │
|
|
122
|
+
│ - Auto Schema Validation (Zod) │
|
|
123
|
+
│ - Error Handling │
|
|
124
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
125
|
+
│ HTTP Request
|
|
126
|
+
▼
|
|
127
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
128
|
+
│ Azure Functions (Backend) │
|
|
129
|
+
│ - HTTP Triggers (CRUD) │
|
|
130
|
+
│ - Zod Validation (Re-check) │
|
|
131
|
+
│ - Business Logic │
|
|
132
|
+
│ - Cosmos DB Bindings │
|
|
133
|
+
└──────────────────────────┬───────────────────────────────────┘
|
|
134
|
+
│
|
|
135
|
+
▼
|
|
136
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
137
|
+
│ Azure Cosmos DB │
|
|
138
|
+
│ - NoSQL Database │
|
|
139
|
+
│ - Zod Schema Validation │
|
|
140
|
+
└─────────────────────────────────────────────────────────────┘
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**重要なパターン:**
|
|
144
|
+
- **BFF (Backend For Frontend)**: Next.js API Routes が Azure Functions へのプロキシ
|
|
145
|
+
- **共有スキーマ**: Zod スキーマをフロントエンド・BFF・Functions・DB で共有
|
|
146
|
+
- **型安全性**: Zod から TypeScript 型を自動推論
|
|
147
|
+
- **マネージド ID**: サービス間の安全な接続(接続文字列不要)
|
|
148
|
+
|
|
149
|
+
## 📦 前提条件
|
|
150
|
+
|
|
151
|
+
- Node.js 22.x
|
|
152
|
+
- Azure Cosmos DB Emulator (ローカル開発用)
|
|
153
|
+
- [公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/cosmos-db/emulator)
|
|
154
|
+
- Windows: [ダウンロード](https://aka.ms/cosmosdb-emulator)
|
|
155
|
+
- Docker: `docker run -p 8081:8081 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator`
|
|
156
|
+
|
|
157
|
+
## 🚀 Azure へのデプロイ
|
|
158
|
+
|
|
159
|
+
Next.js アプリを standalone モードで Azure Static Web Apps にデプロイし、バックエンド操作のために独立した Azure Functions に接続します。
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# 1. リソースをプロビジョニング (Bicep IaC)
|
|
163
|
+
npx swallowkit provision --resource-group my-app-rg --location japaneast
|
|
164
|
+
|
|
165
|
+
# 2. CI/CD シークレットを設定 (詳細はデプロイガイド参照)
|
|
166
|
+
|
|
167
|
+
# 3. コードをプッシュして自動デプロイ
|
|
168
|
+
git push origin main
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
詳細は **[デプロイガイド](./docs/deployment-guide.ja.md)** を参照してください。
|
|
172
|
+
|
|
173
|
+
## ライセンス
|
|
174
|
+
|
|
175
|
+
MIT
|
|
176
|
+
|
|
177
|
+
## 🔗 関連リンク
|
|
178
|
+
|
|
179
|
+
- [Azure Static Web Apps](https://learn.microsoft.com/ja-jp/azure/static-web-apps/)
|
|
180
|
+
- [Azure Functions](https://learn.microsoft.com/ja-jp/azure/azure-functions/)
|
|
181
|
+
- [Azure Cosmos DB](https://learn.microsoft.com/ja-jp/azure/cosmos-db/)
|
|
182
|
+
- [Next.js](https://nextjs.org/)
|
|
183
|
+
- [Zod](https://zod.dev/)
|