create-einja-app 0.1.1
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/README.md +307 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1041 -0
- package/dist/cli.js.map +1 -0
- package/package.json +62 -0
- package/templates/turborepo-pandacss/.biomeignore +15 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/biome-format.sh +49 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/design-doc-check.sh +61 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/detect-secrets.sh +62 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/large-file-warning.sh +42 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/playwright-resize.sh +36 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/typecheck.sh +37 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/validate-git-commit.sh +239 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/warn-index-ts.sh +34 -0
- package/templates/turborepo-pandacss/.claude/hooks/einja/warn-relative-import.sh +48 -0
- package/templates/turborepo-pandacss/.claude/settings.json +174 -0
- package/templates/turborepo-pandacss/.claude/skills/create-einja-app-release/SKILL.md +186 -0
- package/templates/turborepo-pandacss/.claude/skills/dev-cli-release/SKILL.md +173 -0
- package/templates/turborepo-pandacss/.cursor/commands/spec-create.md +227 -0
- package/templates/turborepo-pandacss/.cursor/commands/start-dev.md +98 -0
- package/templates/turborepo-pandacss/.cursor/commands/task-exec.md +287 -0
- package/templates/turborepo-pandacss/.cursor/commands/task-vibe-kanban-loop.md +532 -0
- package/templates/turborepo-pandacss/.cursor/commands/update-docs-by-task-specs.md +448 -0
- package/templates/turborepo-pandacss/.cursor/mcp.json +45 -0
- package/templates/turborepo-pandacss/.cursor/rules/api-rules.mdc +171 -0
- package/templates/turborepo-pandacss/.cursor/rules/api-test-rules.mdc +181 -0
- package/templates/turborepo-pandacss/.cursor/rules/base-code.mdc +70 -0
- package/templates/turborepo-pandacss/.cursor/rules/base-commit-rules.mdc +174 -0
- package/templates/turborepo-pandacss/.cursor/rules/base-design.mdc +12 -0
- package/templates/turborepo-pandacss/.cursor/rules/base-rules.mdc +231 -0
- package/templates/turborepo-pandacss/.cursor/rules/error-handling-rules.mdc +188 -0
- package/templates/turborepo-pandacss/.cursor/rules/refactor-rules.mdc +93 -0
- package/templates/turborepo-pandacss/.dockerignore +126 -0
- package/templates/turborepo-pandacss/.einja-sync.json +35 -0
- package/templates/turborepo-pandacss/.env.ci +25 -0
- package/templates/turborepo-pandacss/.env.example +35 -0
- package/templates/turborepo-pandacss/.env.personal.example +27 -0
- package/templates/turborepo-pandacss/.envrc +4 -0
- package/templates/turborepo-pandacss/.gitattributes +5 -0
- package/templates/turborepo-pandacss/.husky/pre-commit +1 -0
- package/templates/turborepo-pandacss/.lintstagedrc.js +24 -0
- package/templates/turborepo-pandacss/.mcp.json +45 -0
- package/templates/turborepo-pandacss/.node-version +1 -0
- package/templates/turborepo-pandacss/.templateignore +60 -0
- package/templates/turborepo-pandacss/.vscode/extensions.json +3 -0
- package/templates/turborepo-pandacss/CLAUDE.md +415 -0
- package/templates/turborepo-pandacss/README.md +322 -0
- package/templates/turborepo-pandacss/apps/web/middleware.ts +28 -0
- package/templates/turborepo-pandacss/apps/web/next.config.ts +10 -0
- package/templates/turborepo-pandacss/apps/web/package.json +80 -0
- package/templates/turborepo-pandacss/apps/web/panda.config.ts +114 -0
- package/templates/turborepo-pandacss/apps/web/postcss.config.cjs +6 -0
- package/templates/turborepo-pandacss/apps/web/public/file.svg +1 -0
- package/templates/turborepo-pandacss/apps/web/public/globe.svg +1 -0
- package/templates/turborepo-pandacss/apps/web/public/next.svg +1 -0
- package/templates/turborepo-pandacss/apps/web/public/vercel.svg +1 -0
- package/templates/turborepo-pandacss/apps/web/public/window.svg +1 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/dashboard/page.tsx +79 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/data/_components/UserTable.tsx +203 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/data/page.tsx +57 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/layout-client.tsx +31 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/layout.tsx +17 -0
- package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/profile/page.tsx +59 -0
- package/templates/turborepo-pandacss/apps/web/src/app/api/auth/[...nextauth]/route.ts +3 -0
- package/templates/turborepo-pandacss/apps/web/src/app/api/auth/signup/route.ts +70 -0
- package/templates/turborepo-pandacss/apps/web/src/app/error.tsx +106 -0
- package/templates/turborepo-pandacss/apps/web/src/app/favicon.ico +0 -0
- package/templates/turborepo-pandacss/apps/web/src/app/global-error.tsx +110 -0
- package/templates/turborepo-pandacss/apps/web/src/app/globals.css +121 -0
- package/templates/turborepo-pandacss/apps/web/src/app/layout.tsx +28 -0
- package/templates/turborepo-pandacss/apps/web/src/app/not-found.tsx +54 -0
- package/templates/turborepo-pandacss/apps/web/src/app/page.module.css +165 -0
- package/templates/turborepo-pandacss/apps/web/src/app/page.test.tsx +52 -0
- package/templates/turborepo-pandacss/apps/web/src/app/page.tsx +284 -0
- package/templates/turborepo-pandacss/apps/web/src/app/signin/page.tsx +296 -0
- package/templates/turborepo-pandacss/apps/web/src/app/signup/page.tsx +395 -0
- package/templates/turborepo-pandacss/apps/web/src/application/use-cases/UserUseCases.test.ts +229 -0
- package/templates/turborepo-pandacss/apps/web/src/application/use-cases/UserUseCases.ts +115 -0
- package/templates/turborepo-pandacss/apps/web/src/components/auth/login-button.tsx +35 -0
- package/templates/turborepo-pandacss/apps/web/src/components/auth/logout-button.tsx +24 -0
- package/templates/turborepo-pandacss/apps/web/src/components/auth/user-avatar.test.tsx +68 -0
- package/templates/turborepo-pandacss/apps/web/src/components/auth/user-avatar.tsx +43 -0
- package/templates/turborepo-pandacss/apps/web/src/components/dashboard/dashboard-stats.tsx +128 -0
- package/templates/turborepo-pandacss/apps/web/src/components/providers/query-provider.tsx +30 -0
- package/templates/turborepo-pandacss/apps/web/src/components/providers/session-provider.tsx +12 -0
- package/templates/turborepo-pandacss/apps/web/src/components/shared/Sidebar.tsx +175 -0
- package/templates/turborepo-pandacss/apps/web/src/components/shared/header.tsx +166 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/accordion.tsx +64 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/alert-dialog.tsx +135 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/alert.tsx +60 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/aspect-ratio.tsx +9 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/avatar.tsx +41 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/badge.tsx +39 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/breadcrumb.tsx +101 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/button.tsx +56 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/card.tsx +75 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/checkbox.tsx +29 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/data-table.tsx +189 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/dialog-hook.tsx +210 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/dialog.tsx +129 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/drawer.tsx +124 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/dropdown-menu.tsx +228 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/form.tsx +152 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/hover-card.tsx +38 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/input.tsx +21 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/label.tsx +21 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/pagination.tsx +105 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/popover.tsx +42 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/progress.tsx +28 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/select.tsx +170 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/separator.tsx +28 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/skeleton.tsx +13 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/sonner.tsx +25 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/table.tsx +92 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/tabs.tsx +54 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/textarea.tsx +18 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/tooltip.tsx +57 -0
- package/templates/turborepo-pandacss/apps/web/src/components/ui/typography.tsx +158 -0
- package/templates/turborepo-pandacss/apps/web/src/lib/auth/guard.ts +36 -0
- package/templates/turborepo-pandacss/apps/web/src/lib/auth/index.ts +22 -0
- package/templates/turborepo-pandacss/apps/web/src/lib/prisma.ts +3 -0
- package/templates/turborepo-pandacss/apps/web/src/lib/utils.ts +6 -0
- package/templates/turborepo-pandacss/apps/web/test/globals.d.ts +1 -0
- package/templates/turborepo-pandacss/apps/web/test/matchers.d.ts +1 -0
- package/templates/turborepo-pandacss/apps/web/test/setup.ts +22 -0
- package/templates/turborepo-pandacss/apps/web/tsconfig.json +37 -0
- package/templates/turborepo-pandacss/apps/web/vitest.config.ts +20 -0
- package/templates/turborepo-pandacss/apps/web/vitest.d.ts +2 -0
- package/templates/turborepo-pandacss/biome.json +60 -0
- package/templates/turborepo-pandacss/components.json +21 -0
- package/templates/turborepo-pandacss/docker-compose.yml +27 -0
- package/templates/turborepo-pandacss/middleware.ts +32 -0
- package/templates/turborepo-pandacss/next.config.ts +10 -0
- package/templates/turborepo-pandacss/package-lock.json +9346 -0
- package/templates/turborepo-pandacss/package.json +64 -0
- package/templates/turborepo-pandacss/packages/config/package.json +41 -0
- package/templates/turborepo-pandacss/packages/config/panda.config.ts +114 -0
- package/templates/turborepo-pandacss/packages/config/src/index.ts +24 -0
- package/templates/turborepo-pandacss/packages/config/src/worktree-config-loader.ts +129 -0
- package/templates/turborepo-pandacss/packages/config/src/worktree-config.ts +75 -0
- package/templates/turborepo-pandacss/packages/config/tsconfig.build.json +19 -0
- package/templates/turborepo-pandacss/packages/config/tsconfig.json +24 -0
- package/templates/turborepo-pandacss/packages/config/typescript/base.json +19 -0
- package/templates/turborepo-pandacss/packages/front-core/package.json +24 -0
- package/templates/turborepo-pandacss/packages/front-core/src/auth/config.ts +84 -0
- package/templates/turborepo-pandacss/packages/front-core/src/auth/index.ts +5 -0
- package/templates/turborepo-pandacss/packages/front-core/src/auth/types/next-auth.d.ts +20 -0
- package/templates/turborepo-pandacss/packages/front-core/src/auth/utils.ts +29 -0
- package/templates/turborepo-pandacss/packages/front-core/src/context/index.ts +2 -0
- package/templates/turborepo-pandacss/packages/front-core/src/hooks/index.ts +2 -0
- package/templates/turborepo-pandacss/packages/front-core/src/index.ts +4 -0
- package/templates/turborepo-pandacss/packages/front-core/src/utils/index.ts +2 -0
- package/templates/turborepo-pandacss/packages/front-core/tsconfig.json +14 -0
- package/templates/turborepo-pandacss/packages/server-core/package.json +32 -0
- package/templates/turborepo-pandacss/packages/server-core/prisma/schema.prisma +102 -0
- package/templates/turborepo-pandacss/packages/server-core/prisma/seed.ts +67 -0
- package/templates/turborepo-pandacss/packages/server-core/prisma.config.ts +8 -0
- package/templates/turborepo-pandacss/packages/server-core/src/__generated__/fabbrica/index.d.ts +270 -0
- package/templates/turborepo-pandacss/packages/server-core/src/__generated__/fabbrica/index.js +484 -0
- package/templates/turborepo-pandacss/packages/server-core/src/core/result.test.ts +78 -0
- package/templates/turborepo-pandacss/packages/server-core/src/core/result.ts +53 -0
- package/templates/turborepo-pandacss/packages/server-core/src/domain/.gitkeep +0 -0
- package/templates/turborepo-pandacss/packages/server-core/src/domain/entities/User.test.ts +232 -0
- package/templates/turborepo-pandacss/packages/server-core/src/domain/entities/User.ts +105 -0
- package/templates/turborepo-pandacss/packages/server-core/src/domain/repository-interfaces/IUserRepository.ts +101 -0
- package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/client.ts +15 -0
- package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/mappers/UserMapper.test.ts +278 -0
- package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/mappers/UserMapper.ts +103 -0
- package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/repositories/UserRepository.test.ts +317 -0
- package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/repositories/UserRepository.ts +169 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/factories/index.ts +22 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/factories/user.factory.ts +123 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/fixtures/users.ts +92 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/helpers/date.ts +49 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/helpers/password.ts +50 -0
- package/templates/turborepo-pandacss/packages/server-core/src/testing/index.ts +26 -0
- package/templates/turborepo-pandacss/packages/server-core/tsconfig.json +14 -0
- package/templates/turborepo-pandacss/packages/server-core/vitest.config.ts +15 -0
- package/templates/turborepo-pandacss/packages/ui/package.json +37 -0
- package/templates/turborepo-pandacss/packages/ui/src/accordion.tsx +66 -0
- package/templates/turborepo-pandacss/packages/ui/src/alert-dialog.tsx +157 -0
- package/templates/turborepo-pandacss/packages/ui/src/alert.tsx +66 -0
- package/templates/turborepo-pandacss/packages/ui/src/aspect-ratio.tsx +11 -0
- package/templates/turborepo-pandacss/packages/ui/src/avatar.tsx +53 -0
- package/templates/turborepo-pandacss/packages/ui/src/badge.tsx +46 -0
- package/templates/turborepo-pandacss/packages/ui/src/breadcrumb.tsx +108 -0
- package/templates/turborepo-pandacss/packages/ui/src/button.tsx +59 -0
- package/templates/turborepo-pandacss/packages/ui/src/card.tsx +92 -0
- package/templates/turborepo-pandacss/packages/ui/src/checkbox.tsx +32 -0
- package/templates/turborepo-pandacss/packages/ui/src/data-table.tsx +216 -0
- package/templates/turborepo-pandacss/packages/ui/src/dialog-hook.tsx +226 -0
- package/templates/turborepo-pandacss/packages/ui/src/dialog.tsx +143 -0
- package/templates/turborepo-pandacss/packages/ui/src/drawer.tsx +135 -0
- package/templates/turborepo-pandacss/packages/ui/src/dropdown-menu.tsx +257 -0
- package/templates/turborepo-pandacss/packages/ui/src/form.tsx +168 -0
- package/templates/turborepo-pandacss/packages/ui/src/hover-card.tsx +44 -0
- package/templates/turborepo-pandacss/packages/ui/src/input.tsx +21 -0
- package/templates/turborepo-pandacss/packages/ui/src/label.tsx +24 -0
- package/templates/turborepo-pandacss/packages/ui/src/lib/utils.ts +6 -0
- package/templates/turborepo-pandacss/packages/ui/src/pagination.tsx +126 -0
- package/templates/turborepo-pandacss/packages/ui/src/popover.tsx +48 -0
- package/templates/turborepo-pandacss/packages/ui/src/progress.tsx +31 -0
- package/templates/turborepo-pandacss/packages/ui/src/select.tsx +185 -0
- package/templates/turborepo-pandacss/packages/ui/src/separator.tsx +28 -0
- package/templates/turborepo-pandacss/packages/ui/src/skeleton.tsx +13 -0
- package/templates/turborepo-pandacss/packages/ui/src/sonner.tsx +25 -0
- package/templates/turborepo-pandacss/packages/ui/src/table.tsx +116 -0
- package/templates/turborepo-pandacss/packages/ui/src/tabs.tsx +66 -0
- package/templates/turborepo-pandacss/packages/ui/src/textarea.tsx +18 -0
- package/templates/turborepo-pandacss/packages/ui/src/tooltip.tsx +61 -0
- package/templates/turborepo-pandacss/packages/ui/src/typography.tsx +187 -0
- package/templates/turborepo-pandacss/packages/ui/tsconfig.json +20 -0
- package/templates/turborepo-pandacss/panda.config.ts +114 -0
- package/templates/turborepo-pandacss/pnpm-lock.yaml +9032 -0
- package/templates/turborepo-pandacss/pnpm-workspace.yaml +11 -0
- package/templates/turborepo-pandacss/postcss.config.cjs +6 -0
- package/templates/turborepo-pandacss/prisma/schema.prisma +82 -0
- package/templates/turborepo-pandacss/public/file.svg +1 -0
- package/templates/turborepo-pandacss/public/globe.svg +1 -0
- package/templates/turborepo-pandacss/public/next.svg +1 -0
- package/templates/turborepo-pandacss/public/vercel.svg +1 -0
- package/templates/turborepo-pandacss/public/window.svg +1 -0
- package/templates/turborepo-pandacss/scripts/cli-template-update.ts +387 -0
- package/templates/turborepo-pandacss/scripts/env-show.ts +129 -0
- package/templates/turborepo-pandacss/scripts/env.ts +555 -0
- package/templates/turborepo-pandacss/scripts/init.sh +92 -0
- package/templates/turborepo-pandacss/scripts/setup-dev.ts +640 -0
- package/templates/turborepo-pandacss/scripts/template-update.ts +277 -0
- package/templates/turborepo-pandacss/scripts/worktree/dev.ts +872 -0
- package/templates/turborepo-pandacss/test/globals.d.ts +1 -0
- package/templates/turborepo-pandacss/test/setup.ts +22 -0
- package/templates/turborepo-pandacss/tsconfig.json +46 -0
- package/templates/turborepo-pandacss/turbo.json +57 -0
- package/templates/turborepo-pandacss/vitest.config.ts +20 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "タスク仕様書をfeature仕様書とsteering仕様書に反映。ARGUMENTS: タスク仕様書ディレクトリパス(複数可、カンマ区切り)"
|
|
3
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# タスク仕様書からドキュメント反映コマンド
|
|
7
|
+
|
|
8
|
+
## あなたの役割
|
|
9
|
+
|
|
10
|
+
タスク仕様書(`docs/specs/tasks/` 配下)から設計情報を抽出し、以下の2つの階層に反映する専門エージェントです:
|
|
11
|
+
|
|
12
|
+
1. **Feature仕様書**(`docs/specs/features/<feature-name>/`)- 機能レベルの設計
|
|
13
|
+
2. **Steering仕様書**(`docs/einja/steering/`)- プロジェクト全体の設計
|
|
14
|
+
|
|
15
|
+
タスク仕様書の内容を構造化して抽出し、適切な階層のドキュメントにインテリジェントにマージします。
|
|
16
|
+
|
|
17
|
+
## 実行フロー
|
|
18
|
+
|
|
19
|
+
### 1. タスク仕様書の検証と読み込み
|
|
20
|
+
|
|
21
|
+
**入力形式**:
|
|
22
|
+
```
|
|
23
|
+
/update-docs-by-task-specs <task-spec-dir-path> [<task-spec-dir-path2> ...]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**処理**:
|
|
27
|
+
- 指定されたディレクトリパスを解析(カンマ区切り対応)
|
|
28
|
+
- 各ディレクトリに以下のファイルが存在するか確認:
|
|
29
|
+
- `requirements.md`(必須)
|
|
30
|
+
- `design.md`(必須)
|
|
31
|
+
- `tasks.md`(オプション)
|
|
32
|
+
- ファイルが存在しない場合はエラーを表示して終了
|
|
33
|
+
- 各ファイルを読み込み、構造化された情報を抽出
|
|
34
|
+
|
|
35
|
+
### 2. 機能(Feature)の判定【対話的】
|
|
36
|
+
|
|
37
|
+
各タスクspecについて、どの機能(Feature)に関連するかを判定します。
|
|
38
|
+
|
|
39
|
+
**判定手順**:
|
|
40
|
+
1. タスクディレクトリ名とrequirements.mdの内容を分析
|
|
41
|
+
2. 既存の`docs/specs/features/`ディレクトリをスキャン
|
|
42
|
+
3. 以下の候補をユーザーに提示:
|
|
43
|
+
- 既存の機能(例: `login`, `signup`など)
|
|
44
|
+
- 新規機能作成(機能名を入力)
|
|
45
|
+
- Steeringのみ反映(機能specには反映しない)
|
|
46
|
+
|
|
47
|
+
**AskUserQuestionを使用**:
|
|
48
|
+
```
|
|
49
|
+
質問: "タスク『{タスク名}』はどの機能に関連しますか?"
|
|
50
|
+
選択肢:
|
|
51
|
+
- login(既存)
|
|
52
|
+
- signup(既存)
|
|
53
|
+
- 新規機能を作成
|
|
54
|
+
- Steeringのみ反映
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. Feature仕様書への反映【Task → Feature】
|
|
58
|
+
|
|
59
|
+
機能が指定された場合、`docs/specs/features/<feature-name>/`に反映します。
|
|
60
|
+
|
|
61
|
+
#### 3.1 機能ディレクトリの作成確認
|
|
62
|
+
|
|
63
|
+
**機能specディレクトリが存在しない場合**:
|
|
64
|
+
- ユーザーに確認:「機能spec『{feature-name}』を新規作成しますか?」
|
|
65
|
+
- 承認されたら以下を作成:
|
|
66
|
+
```
|
|
67
|
+
docs/specs/features/<feature-name>/
|
|
68
|
+
├── requirements.md
|
|
69
|
+
├── design.md
|
|
70
|
+
└── tasks.md
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### 3.2 requirements.md への反映
|
|
74
|
+
|
|
75
|
+
**対象**: `docs/specs/features/<feature-name>/requirements.md`
|
|
76
|
+
|
|
77
|
+
**タスクspecから抽出する情報**(`requirements.md`から):
|
|
78
|
+
- **ビジネス価値**(ビジネス価値セクション)
|
|
79
|
+
- **ユーザーストーリー**(ユーザーストーリーセクション)
|
|
80
|
+
- **受け入れ基準**(各ストーリーの受け入れ基準)
|
|
81
|
+
- **成功指標**(成功指標セクション)
|
|
82
|
+
- **非機能要件**(非機能要件セクション)
|
|
83
|
+
|
|
84
|
+
**反映形式**:
|
|
85
|
+
```markdown
|
|
86
|
+
## タスク: {タスク名} ({日付})
|
|
87
|
+
|
|
88
|
+
**反映日時**: {現在日時}
|
|
89
|
+
**ソース**: {タスクspecパス}
|
|
90
|
+
|
|
91
|
+
### ビジネス価値
|
|
92
|
+
{抽出した内容}
|
|
93
|
+
|
|
94
|
+
### ユーザーストーリー
|
|
95
|
+
{抽出した内容}
|
|
96
|
+
|
|
97
|
+
### 受け入れ基準
|
|
98
|
+
{抽出した内容}
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**マージロジック**:
|
|
104
|
+
- 既存内容の最後に追記(セクションが存在する場合)
|
|
105
|
+
- セクションが存在しない場合は新規作成
|
|
106
|
+
- 同じタスクからの重複反映を防止(タスク名+日付でチェック)
|
|
107
|
+
|
|
108
|
+
#### 3.3 design.md への反映
|
|
109
|
+
|
|
110
|
+
**対象**: `docs/specs/features/<feature-name>/design.md`
|
|
111
|
+
|
|
112
|
+
**タスクspecから抽出する情報**(`design.md`から):
|
|
113
|
+
- **API仕様**(APIエンドポイントセクション)
|
|
114
|
+
- **コンポーネント設計**(コンポーネントとインターフェースセクション)
|
|
115
|
+
- **シーケンス図**(シーケンス図セクション)
|
|
116
|
+
- **テスト設計**(テスト設計セクション)
|
|
117
|
+
- **実装上の注意点**(実装上の注意点セクション)
|
|
118
|
+
|
|
119
|
+
**反映形式**:
|
|
120
|
+
```markdown
|
|
121
|
+
## タスク: {タスク名} ({日付})
|
|
122
|
+
|
|
123
|
+
**反映日時**: {現在日時}
|
|
124
|
+
**ソース**: {タスクspecパス}
|
|
125
|
+
|
|
126
|
+
### API仕様
|
|
127
|
+
{抽出した内容}
|
|
128
|
+
|
|
129
|
+
### コンポーネント設計
|
|
130
|
+
{抽出した内容}
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### 3.4 tasks.md への反映
|
|
136
|
+
|
|
137
|
+
**対象**: `docs/specs/features/<feature-name>/tasks.md`
|
|
138
|
+
|
|
139
|
+
**タスクspecから抽出する情報**(`tasks.md`から):
|
|
140
|
+
- タスク一覧(Phase別)
|
|
141
|
+
- 依存関係情報
|
|
142
|
+
- 完了基準
|
|
143
|
+
|
|
144
|
+
**反映形式**:
|
|
145
|
+
```markdown
|
|
146
|
+
## タスク: {タスク名} ({日付})
|
|
147
|
+
|
|
148
|
+
**反映日時**: {現在日時}
|
|
149
|
+
**ソース**: {タスクspecパス}
|
|
150
|
+
|
|
151
|
+
### 実装タスク
|
|
152
|
+
{抽出したタスクリスト}
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 4. Steering仕様書への反映【Task → Steering】
|
|
158
|
+
|
|
159
|
+
すべてのタスクspecは、Steering仕様書にも反映されます。
|
|
160
|
+
|
|
161
|
+
#### 4.1 architecture.md への反映
|
|
162
|
+
|
|
163
|
+
**対象**: `docs/einja/steering/architecture.md`
|
|
164
|
+
|
|
165
|
+
**タスクspecから抽出する情報**(`design.md`から):
|
|
166
|
+
- **システム構成図**(Mermaid図を含む)
|
|
167
|
+
- **データフロー図**
|
|
168
|
+
- **技術スタック表**
|
|
169
|
+
- **パッケージ構造と依存関係**
|
|
170
|
+
- **デプロイメント戦略**
|
|
171
|
+
- **アーキテクチャパターン**(Clean Architecture、Repository Patternなど)
|
|
172
|
+
- **開発ワークフロー**
|
|
173
|
+
|
|
174
|
+
**反映形式**:
|
|
175
|
+
```markdown
|
|
176
|
+
## {タスク名} ({日付})
|
|
177
|
+
|
|
178
|
+
**反映日時**: {現在日時}
|
|
179
|
+
**ソース**: {タスクspecパス}
|
|
180
|
+
|
|
181
|
+
### システム構成
|
|
182
|
+
{抽出した構成図とMermaid}
|
|
183
|
+
|
|
184
|
+
### 技術スタック
|
|
185
|
+
{抽出した技術スタック表}
|
|
186
|
+
|
|
187
|
+
### アーキテクチャパターン
|
|
188
|
+
{抽出したパターン説明}
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**マージロジック**:
|
|
194
|
+
- ファイルが空またはTODOのみの場合、目次構造を作成してから追記
|
|
195
|
+
- 既存の同名セクションがある場合、タスクごとのサブセクションとして追記
|
|
196
|
+
- Mermaid図は`<!-- Task: {タスク名} -->`コメントでラベル付け
|
|
197
|
+
|
|
198
|
+
#### 4.2 db-design.md への反映
|
|
199
|
+
|
|
200
|
+
**対象**: `docs/einja/steering/db-design.md`
|
|
201
|
+
|
|
202
|
+
**タスクspecから抽出する情報**(`design.md`から):
|
|
203
|
+
- **ERD図**(Entity-Relationship Diagram)
|
|
204
|
+
- **Prismaスキーマ定義**
|
|
205
|
+
- **リポジトリパターン実装**
|
|
206
|
+
- **データアクセス層設計**
|
|
207
|
+
- **インデックス戦略**
|
|
208
|
+
- **マイグレーション戦略**
|
|
209
|
+
|
|
210
|
+
**反映形式**:
|
|
211
|
+
```markdown
|
|
212
|
+
## {タスク名} ({日付})
|
|
213
|
+
|
|
214
|
+
**反映日時**: {現在日時}
|
|
215
|
+
**ソース**: {タスクspecパス}
|
|
216
|
+
|
|
217
|
+
### データベーススキーマ
|
|
218
|
+
{抽出したスキーマ定義}
|
|
219
|
+
|
|
220
|
+
### ERD
|
|
221
|
+
{抽出したERD図}
|
|
222
|
+
|
|
223
|
+
### リポジトリパターン
|
|
224
|
+
{抽出したリポジトリ設計}
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### 4.3 product.md への反映
|
|
230
|
+
|
|
231
|
+
**対象**: `docs/einja/steering/product.md`
|
|
232
|
+
|
|
233
|
+
**タスクspecから抽出する情報**:
|
|
234
|
+
- **ビジネス価値と目標**(`requirements.md`から)
|
|
235
|
+
- **ユーザーストーリー概要**(`requirements.md`から)
|
|
236
|
+
- **主要API仕様**(`design.md`から)
|
|
237
|
+
- **成功指標とKPI**(`requirements.md`から)
|
|
238
|
+
- **タイムラインとフェーズ**(`requirements.md`から)
|
|
239
|
+
|
|
240
|
+
**反映形式**:
|
|
241
|
+
```markdown
|
|
242
|
+
## {タスク名} ({日付})
|
|
243
|
+
|
|
244
|
+
**反映日時**: {現在日時}
|
|
245
|
+
**ソース**: {タスクspecパス}
|
|
246
|
+
|
|
247
|
+
### ビジネス価値
|
|
248
|
+
{抽出した内容}
|
|
249
|
+
|
|
250
|
+
### 主要機能
|
|
251
|
+
{抽出したユーザーストーリー概要}
|
|
252
|
+
|
|
253
|
+
### 成功指標
|
|
254
|
+
{抽出したKPI}
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 5. インテリジェントマージの詳細ロジック
|
|
260
|
+
|
|
261
|
+
#### 5.1 重複チェック
|
|
262
|
+
|
|
263
|
+
各ファイルの先頭または各セクションで、以下のパターンを検索:
|
|
264
|
+
```markdown
|
|
265
|
+
## タスク: {タスク名} ({日付})
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
- 同じタスク名+日付が見つかった場合、重複として扱う
|
|
269
|
+
- ユーザーに確認:「タスク『{タスク名}』は既に反映済みです。上書きしますか?」
|
|
270
|
+
- 上書き: 既存セクションを削除して新規追加
|
|
271
|
+
- スキップ: 反映をスキップ
|
|
272
|
+
- 差分マージ: 変更部分のみ更新(推奨)
|
|
273
|
+
|
|
274
|
+
#### 5.2 セクション構造の維持
|
|
275
|
+
|
|
276
|
+
**空ファイルまたはTODOのみの場合**:
|
|
277
|
+
1. 標準的な目次構造を作成
|
|
278
|
+
2. 各セクションにタスクの内容を追記
|
|
279
|
+
|
|
280
|
+
**既存内容がある場合**:
|
|
281
|
+
1. 既存のセクション構造を解析
|
|
282
|
+
2. 対応するセクションを見つけて追記
|
|
283
|
+
3. セクションが存在しない場合、適切な位置に新規作成
|
|
284
|
+
|
|
285
|
+
**目次構造例(architecture.md)**:
|
|
286
|
+
```markdown
|
|
287
|
+
# システムアーキテクチャ
|
|
288
|
+
|
|
289
|
+
## 概要
|
|
290
|
+
|
|
291
|
+
## システム構成
|
|
292
|
+
|
|
293
|
+
### タスク: Monorepo Setup (20251104)
|
|
294
|
+
...
|
|
295
|
+
|
|
296
|
+
## 技術スタック
|
|
297
|
+
|
|
298
|
+
### タスク: Monorepo Setup (20251104)
|
|
299
|
+
...
|
|
300
|
+
|
|
301
|
+
## デプロイメント戦略
|
|
302
|
+
|
|
303
|
+
### タスク: Monorepo Setup (20251104)
|
|
304
|
+
...
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### 5.3 Mermaid図の扱い
|
|
308
|
+
|
|
309
|
+
**図の識別**:
|
|
310
|
+
- 各Mermaid図の直前にコメントを追加:
|
|
311
|
+
```markdown
|
|
312
|
+
<!-- Task: {タスク名} ({日付}) -->
|
|
313
|
+
```mermaid
|
|
314
|
+
...
|
|
315
|
+
```
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**複数タスクの図の統合**:
|
|
319
|
+
- 同種の図(例: システム構成図)が複数ある場合、並列配置
|
|
320
|
+
- 重複や矛盾がある場合、ユーザーに確認して統合提案
|
|
321
|
+
|
|
322
|
+
### 6. ユーザー確認・承認
|
|
323
|
+
|
|
324
|
+
すべての変更内容を処理した後、以下を実行:
|
|
325
|
+
|
|
326
|
+
1. **変更サマリーの表示**:
|
|
327
|
+
```markdown
|
|
328
|
+
## 変更サマリー
|
|
329
|
+
|
|
330
|
+
### Feature仕様書
|
|
331
|
+
- features/login/requirements.md: 3セクション追加
|
|
332
|
+
- features/login/design.md: 5セクション追加
|
|
333
|
+
|
|
334
|
+
### Steering仕様書
|
|
335
|
+
- steering/architecture.md: 7セクション追加
|
|
336
|
+
- steering/db-design.md: 4セクション追加
|
|
337
|
+
- steering/product.md: 3セクション追加
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
2. **各ファイルの詳細プレビュー**(オプション):
|
|
341
|
+
- ユーザーが詳細を確認したい場合、各ファイルのdiffを表示
|
|
342
|
+
|
|
343
|
+
3. **最終確認**:
|
|
344
|
+
- 「これらの変更を確定しますか?」
|
|
345
|
+
- 承認されたら、すべてのファイルを更新
|
|
346
|
+
- 却下された場合、変更をキャンセル
|
|
347
|
+
|
|
348
|
+
### 7. エラーハンドリング
|
|
349
|
+
|
|
350
|
+
**タスクspecが見つからない場合**:
|
|
351
|
+
```
|
|
352
|
+
エラー: タスク仕様書が見つかりません
|
|
353
|
+
パス: {指定パス}
|
|
354
|
+
確認事項:
|
|
355
|
+
- パスが正しいか確認してください
|
|
356
|
+
- requirements.md と design.md が存在するか確認してください
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**requirements.md/design.md がない場合**:
|
|
360
|
+
```
|
|
361
|
+
警告: {ファイル名}が見つかりません
|
|
362
|
+
タスク: {タスク名}
|
|
363
|
+
対応: このタスクの反映をスキップして続行しますか?
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**機能spec作成時の競合**:
|
|
367
|
+
```
|
|
368
|
+
警告: 機能spec『{feature-name}』は既に存在しますが、内容が空です
|
|
369
|
+
対応: 既存ファイルを上書きして反映しますか?
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
## 重要な原則
|
|
373
|
+
|
|
374
|
+
### 情報の忠実性
|
|
375
|
+
- タスクspecの内容を改変せず、忠実に抽出して反映する
|
|
376
|
+
- 要約や意訳は最小限にし、原文をできるだけ保持する
|
|
377
|
+
- コードブロック、図表は完全な形で転記する
|
|
378
|
+
|
|
379
|
+
### トレーサビリティ
|
|
380
|
+
- すべての反映内容に「ソース」情報を記録する
|
|
381
|
+
- タスク名と日付を明記し、後から追跡可能にする
|
|
382
|
+
- 変更履歴が明確にわかるようにする
|
|
383
|
+
|
|
384
|
+
### 非破壊的マージ
|
|
385
|
+
- 既存の内容を削除しない(ユーザー確認がある場合を除く)
|
|
386
|
+
- 追記を基本とし、上書きは最小限にする
|
|
387
|
+
- 重複チェックを徹底し、不要な反復を避ける
|
|
388
|
+
|
|
389
|
+
### 対話的な処理
|
|
390
|
+
- 判断が必要な場合は必ずユーザーに確認する
|
|
391
|
+
- 機能の判定、新規作成、重複処理などで対話する
|
|
392
|
+
- 最終確認を必ず行い、ユーザーの承認を得る
|
|
393
|
+
|
|
394
|
+
### 段階的な実行
|
|
395
|
+
- 1つのタスクspecずつ処理する
|
|
396
|
+
- 各ステップの結果を明確に表示する
|
|
397
|
+
- エラーが発生しても他のタスクspecの処理を継続する
|
|
398
|
+
|
|
399
|
+
## 出力フォーマット
|
|
400
|
+
|
|
401
|
+
処理完了後、以下の形式でレポートを表示:
|
|
402
|
+
|
|
403
|
+
```markdown
|
|
404
|
+
# タスク仕様書反映完了
|
|
405
|
+
|
|
406
|
+
## 処理したタスク
|
|
407
|
+
1. ✅ Monorepo Setup (20251104)
|
|
408
|
+
- Feature: なし(Steeringのみ)
|
|
409
|
+
- 反映先: architecture.md, db-design.md, product.md
|
|
410
|
+
|
|
411
|
+
2. ✅ Login Authentication (20251105)
|
|
412
|
+
- Feature: login
|
|
413
|
+
- 反映先: features/login/*, steering/*
|
|
414
|
+
|
|
415
|
+
## 反映サマリー
|
|
416
|
+
|
|
417
|
+
### Feature仕様書
|
|
418
|
+
- **features/login/requirements.md**: 3セクション追加(412行)
|
|
419
|
+
- **features/login/design.md**: 5セクション追加(823行)
|
|
420
|
+
- **features/login/tasks.md**: 1セクション追加(156行)
|
|
421
|
+
|
|
422
|
+
### Steering仕様書
|
|
423
|
+
- **steering/architecture.md**: 7セクション追加(1,245行)
|
|
424
|
+
- **steering/db-design.md**: 4セクション追加(567行)
|
|
425
|
+
- **steering/product.md**: 3セクション追加(334行)
|
|
426
|
+
|
|
427
|
+
## 次のステップ
|
|
428
|
+
- 反映された内容を確認してください
|
|
429
|
+
- 必要に応じて手動で調整してください
|
|
430
|
+
- 変更をコミットする場合は、明確なコミットメッセージを記述してください
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
## 使用例
|
|
434
|
+
|
|
435
|
+
### 例1: 単一タスクの反映
|
|
436
|
+
```
|
|
437
|
+
/update-docs-by-task-specs docs/specs/tasks/monorepo/20251104-monorepo-turborepo-nextjs-setup
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### 例2: 複数タスクの反映
|
|
441
|
+
```
|
|
442
|
+
/update-docs-by-task-specs docs/specs/tasks/task1,docs/specs/tasks/task2,docs/specs/tasks/task3
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### 例3: スペース区切り
|
|
446
|
+
```
|
|
447
|
+
/update-docs-by-task-specs docs/specs/tasks/monorepo/20251104-monorepo-turborepo-nextjs-setup docs/specs/tasks/auth/20251105-login-feature
|
|
448
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"vibe_kanban": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": ["-y", "vibe-kanban@latest", "--mcp"]
|
|
6
|
+
},
|
|
7
|
+
"codex": {
|
|
8
|
+
"type": "stdio",
|
|
9
|
+
"command": "codex",
|
|
10
|
+
"args": ["mcp-server"]
|
|
11
|
+
},
|
|
12
|
+
"context7": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["-y", "@upstash/context7-mcp"]
|
|
15
|
+
},
|
|
16
|
+
"playwright": {
|
|
17
|
+
"type": "stdio",
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["-y", "@playwright/mcp", "--isolated"]
|
|
20
|
+
},
|
|
21
|
+
"serena": {
|
|
22
|
+
"command": "uvx",
|
|
23
|
+
"args": [
|
|
24
|
+
"--from",
|
|
25
|
+
"git+https://github.com/oraios/serena",
|
|
26
|
+
"serena-mcp-server",
|
|
27
|
+
"--context",
|
|
28
|
+
"ide-assistant",
|
|
29
|
+
".",
|
|
30
|
+
"--enable-web-dashboard=false"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"github": {
|
|
34
|
+
"type": "http",
|
|
35
|
+
"url": "https://api.githubcopilot.com/mcp/",
|
|
36
|
+
"headers": {
|
|
37
|
+
"Authorization": "Bearer ${GITHUB_TOKEN}"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"asana": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["mcp-remote", "https://mcp.asana.com/sse"]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
# API開発ルール
|
|
7
|
+
## ディレクトリ構成(1つ下の粒度の例・各階層の説明付き)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
src/
|
|
11
|
+
├── server/
|
|
12
|
+
│ ├── domain/ # ドメイン層:ビジネスロジック・エンティティ・リポジトリ/サービスIF
|
|
13
|
+
│ │ ├── models/ # ドメインモデル(エンティティ・値オブジェクト)
|
|
14
|
+
│ │ ├── repositories/ # ドメインリポジトリインターフェース
|
|
15
|
+
│ │ └── services/ # ドメインサービスインターフェース
|
|
16
|
+
│ ├── application/ # アプリケーション層:ユースケース
|
|
17
|
+
│ │ └── useCases/ # ユースケース実装
|
|
18
|
+
│ ├── infrastructure/ # インフラ層: DB・外部サービス連携・マッパー
|
|
19
|
+
│ │ ├── adapters/ # 外部サービス・DB接続ラッパー
|
|
20
|
+
│ │ ├── repositories/ # ドメインリポジトリIFの実装(DBアクセス等)
|
|
21
|
+
│ │ ├── prisma/ # Prisma関連(Client, Repository, schema, migrations)
|
|
22
|
+
│ │ ├── mapper/ # 型変換の責務を担う(DB型・外部サービスの型 ⇔ ドメイン型)
|
|
23
|
+
│ │ └── config/ # 環境変数・設定
|
|
24
|
+
│ └── presentations/ # プレゼンテーション層: Honoアプリ(各botやWebhookのハンドラ)
|
|
25
|
+
└── app/
|
|
26
|
+
└── api/ # Next.js App RouterのAPIエンドポイント
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#### 原則
|
|
32
|
+
- ドメイン層は外部の型に依存しない
|
|
33
|
+
- 外部の型をimportしない
|
|
34
|
+
- 外部の型を知らない
|
|
35
|
+
- アプリケーション層(UseCase)は型変換を行わない
|
|
36
|
+
- 型変換はインフラ層のMapperに委譲
|
|
37
|
+
- ビジネスロジックに集中
|
|
38
|
+
- インフラ層のAdapterは必要に応じてMapperを使用
|
|
39
|
+
- 外部サービスとの通信時に型変換
|
|
40
|
+
- DB操作時に型変換
|
|
41
|
+
- 型変換のロジックはMapper層に集約
|
|
42
|
+
- 重複を避ける
|
|
43
|
+
- 一貫性を保つ
|
|
44
|
+
- テスト容易性を確保
|
|
45
|
+
|
|
46
|
+
# API設計
|
|
47
|
+
|
|
48
|
+
## RESTful API
|
|
49
|
+
- リソースベースのURL設計
|
|
50
|
+
- HTTPメソッドの適切な使用
|
|
51
|
+
- ステータスコードの適切な使用
|
|
52
|
+
|
|
53
|
+
## エンドポイント命名規則
|
|
54
|
+
- 複数形の名詞を使用
|
|
55
|
+
- 小文字のハイフン区切り
|
|
56
|
+
- バージョン管理はURLに含める
|
|
57
|
+
|
|
58
|
+
## リクエスト/レスポンス
|
|
59
|
+
- JSON形式を使用
|
|
60
|
+
- 日時はISO 8601形式
|
|
61
|
+
- エラーレスポンスは統一フォーマット
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# HonoによるAPI実装ルール
|
|
65
|
+
|
|
66
|
+
## 実装ルール
|
|
67
|
+
- Honoの`app`インスタンスは`src/server/presentations/xxx/index.ts`で定義し、**メソッドチェーン形式で記述すること**
|
|
68
|
+
- APIエンドポイント(`src/app/api/**/route.ts`)では`handle(app)`でHonoアプリをエクスポート
|
|
69
|
+
- ルーティングはHonoの`app.route()`や`app.use()`を活用し、botごとに分岐
|
|
70
|
+
- 共通ミドルウェア(署名検証・Webhookパース等)は`src/server/presentations/middleware/`に実装し、`app.use()`で適用
|
|
71
|
+
- API仕様コメントはJSDoc形式で`app.post()`等の直前に記載
|
|
72
|
+
|
|
73
|
+
## 記載例
|
|
74
|
+
```ts
|
|
75
|
+
// src/server/presentations/line-webhook/index.ts
|
|
76
|
+
const app = new Hono<{ Variables: { rawBody: string } }>()
|
|
77
|
+
.use('*', createLineWebhookMiddleware())
|
|
78
|
+
/**
|
|
79
|
+
* @endpoint POST /api/webhook/line/:channelId
|
|
80
|
+
* @description LINEのWebhookエンドポイント。チャンネルIDをパラメータとして受け取り、対応するチャンネルのメッセージを処理する
|
|
81
|
+
*/
|
|
82
|
+
.post('/api/webhook/line/:channelId', async (c) => {
|
|
83
|
+
const channelId = c.req.param('channelId');
|
|
84
|
+
|
|
85
|
+
export default app;
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 命名・記法
|
|
89
|
+
- ファイル名・ディレクトリ名はkebab-case
|
|
90
|
+
- Honoの`app`インスタンス名は`app`で統一
|
|
91
|
+
- ミドルウェアは`createXxxMiddleware`で命名
|
|
92
|
+
- presentation層の各ファイル先頭に、対応APIエンドポイントをコメントで明記
|
|
93
|
+
|
|
94
|
+
## レイヤー間の依存関係
|
|
95
|
+
- 外側のレイヤーは内側のレイヤーに依存
|
|
96
|
+
- 依存性逆転の原則を適用
|
|
97
|
+
- インターフェースを介して通信
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# レイヤードアーキテクチャ
|
|
101
|
+
## ユースケース(UseCase)実装方針
|
|
102
|
+
|
|
103
|
+
- ユースケースはオブジェクトリテラル形式でexportする(例:`export const XxxUseCase = { ... }`)
|
|
104
|
+
- メソッド単位でasync関数を定義する(例:`processMessage: async (...) => { ... }`)
|
|
105
|
+
- 依存リポジトリやアダプタは直接importして利用し、引数で渡すDIは原則使わない
|
|
106
|
+
- ユースケース名は「XxxUseCase」とする
|
|
107
|
+
|
|
108
|
+
## domain層 設計方針
|
|
109
|
+
- モデルはinterface+クラス(IUser, UserModel等)、不変性・ファクトリメソッド重視
|
|
110
|
+
- リポジトリ/サービスはinterfaceで定義し、ドメインモデルを引数・返り値に使う
|
|
111
|
+
- ドメイン層はビジネスロジック・エンティティ・リポジトリ/サービスIFのみ、インフラ層の実装には依存しない
|
|
112
|
+
- 責務分離を徹底
|
|
113
|
+
|
|
114
|
+
## Domain層とInfra層の責務分離
|
|
115
|
+
|
|
116
|
+
- Domain層はビジネスロジック・エンティティ・リポジトリインターフェースのみを持つ
|
|
117
|
+
- Infra層はDBアクセス・外部サービス連携・リポジトリ実装のみを持つ
|
|
118
|
+
- Domain層→Infra層への依存はinterface経由で行い、逆依存は持たない
|
|
119
|
+
|
|
120
|
+
## infra層 設計方針
|
|
121
|
+
- adapters/: 外部サービスやDB接続のラッパー(MongoAdapter, LineAdapter, OpenAIAdapter等)
|
|
122
|
+
- repositories/: ドメイン層インターフェースを実装するリポジトリ(オブジェクトリテラル形式でexport、DBアクセス・外部サービス連携のみ責務、変換はinfra/mapperで行う)
|
|
123
|
+
- prisma/: PrismaClient, PrismaUserRepository, schema.prisma, migrations等
|
|
124
|
+
- mapper/: DB型⇔ドメイン型の変換(userMapper等)
|
|
125
|
+
- config/: 環境変数や設定
|
|
126
|
+
- アダプタは接続・状態管理を担い、オブジェクトリテラル形式でexport
|
|
127
|
+
- PrismaClientはシングルトン、型は@prisma/clientからimport、変換はmapperで行う
|
|
128
|
+
|
|
129
|
+
### Prisma利用方針
|
|
130
|
+
- Prismaの型(User, UserCreateInput, UserUpdateInput等)は@prisma/clientからimportして利用する
|
|
131
|
+
- DBから取得した値はUser型(PrismaUser型)として扱い、ドメインモデルへの変換はMapper経由で行う
|
|
132
|
+
- Prismaの自動生成フィールド(id, createdAt, updatedAt)はcreate時に省略し、取得時のみ利用する
|
|
133
|
+
- PrismaClientは開発環境のみシングルトン化し、型は@prisma/clientからimport、変換はmapperで行う
|
|
134
|
+
|
|
135
|
+
### Mapper設計方針
|
|
136
|
+
#### 責務
|
|
137
|
+
- ドメイン層とインフラ層間の型変換に関するすべての責務を担う
|
|
138
|
+
- ドメイン層は外部の型(DB・外部サービス)を知らない
|
|
139
|
+
- 変換の種類:
|
|
140
|
+
- DB型 ⇔ ドメイン型
|
|
141
|
+
- 外部サービスSDKの型 ⇔ ドメイン型
|
|
142
|
+
- APIレスポンス/リクエスト型 ⇔ ドメイン型
|
|
143
|
+
- ORMによる自動生成型(Prismaを用いてるUserドメインの場合、UserCreateInput, UserUpdateInput等)を返却型として明示し、型安全を担保する
|
|
144
|
+
- MapperはDB型→ドメイン型に変換する関数(toModel)、ドメイン型→Prisma入力型(prismaの場合は`toPrismaCreate`/`toPrismaUpdate`)など用途ごとに明確に分割する
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
#### 命名規則
|
|
148
|
+
- `xxxMapper.ts`の形式(例:`messageMapper.ts`, `userMapper.ts`)
|
|
149
|
+
- 変換メソッドは`toXxx`の形式(例:`toCoreMessages`, `toPrismaUser`)
|
|
150
|
+
|
|
151
|
+
# セキュリティ
|
|
152
|
+
|
|
153
|
+
## データ保護
|
|
154
|
+
- 入力値のバリデーション
|
|
155
|
+
- SQLインジェクション対策
|
|
156
|
+
- XSS対策
|
|
157
|
+
|
|
158
|
+
# パフォーマンス
|
|
159
|
+
|
|
160
|
+
## キャッシュ戦略
|
|
161
|
+
- 適切なキャッシュヘッダーの設定
|
|
162
|
+
- CDNの活用
|
|
163
|
+
- データベースクエリの最適化
|
|
164
|
+
|
|
165
|
+
## モニタリング
|
|
166
|
+
- ログの適切な出力
|
|
167
|
+
- エラートレースの実装
|
|
168
|
+
- パフォーマンスメトリクスの収集
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|