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,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# APIテストルール
|
|
7
|
+
|
|
8
|
+
## Vitest
|
|
9
|
+
VitestはVite公式の高速なユニットテスト・モック・カバレッジツールです。本プロジェクトではAPI層・ドメイン層・ユースケース層・プレゼンテーション層のテストに利用します。
|
|
10
|
+
|
|
11
|
+
### 主な特徴・メリット
|
|
12
|
+
- Viteと同じビルド基盤を利用し、テストの起動・実行が非常に高速
|
|
13
|
+
- Jest互換API(describe, it, expect, vi など)で、Jest経験者もすぐに使える
|
|
14
|
+
- TypeScriptとの親和性が高い(型推論・型チェックが強力)
|
|
15
|
+
- モック・スナップショット・カバレッジ・UIテストなど多機能
|
|
16
|
+
- ホットリロード対応でTDDや開発体験が良い
|
|
17
|
+
|
|
18
|
+
### 環境変数
|
|
19
|
+
- テスト時は`APP_ENV=test`とする
|
|
20
|
+
- 環境変数の設定は`vite.config.ts`ファイルに記載されており、テスト実行時にこのファイルが読み込まれる
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## テストファイルの配置
|
|
24
|
+
コロケーションパターンで配置する
|
|
25
|
+
```
|
|
26
|
+
src/
|
|
27
|
+
└── server/
|
|
28
|
+
├── application/
|
|
29
|
+
│ └── useCases/
|
|
30
|
+
│ └── {機能名}/
|
|
31
|
+
│ ├── UseCase.ts # 実装
|
|
32
|
+
│ └── UseCase.test.ts # テスト
|
|
33
|
+
├── domain/
|
|
34
|
+
│ └── models/
|
|
35
|
+
│ └── {モデル名}/
|
|
36
|
+
│ ├── Model.ts # 実装
|
|
37
|
+
│ └── Model.test.ts # テスト
|
|
38
|
+
└── presentations/
|
|
39
|
+
└── {機能名}/
|
|
40
|
+
├── index.ts # 実装
|
|
41
|
+
└── index.test.ts # テスト
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### ファイル命名規則
|
|
45
|
+
- 実装ファイルと同じディレクトリに配置
|
|
46
|
+
- ファイル名は `{実装ファイル名}.test.ts`
|
|
47
|
+
- インテグレーションテストは `{実装ファイル名}.integration.test.ts`
|
|
48
|
+
|
|
49
|
+
## テストの構造
|
|
50
|
+
|
|
51
|
+
### テストケースの分類
|
|
52
|
+
```typescript
|
|
53
|
+
describe('機能名', () => {
|
|
54
|
+
describe('正常系', () => {
|
|
55
|
+
it('期待する動作の説明', async () => {
|
|
56
|
+
// テストケース
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe('異常系', () => {
|
|
61
|
+
it('エラーケースの説明', async () => {
|
|
62
|
+
// テストケース
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### テストケースの命名
|
|
69
|
+
- 正常系: 期待する動作を日本語で記述
|
|
70
|
+
- 例: `新規ユーザーの場合、会話を作成して応答を返すこと`
|
|
71
|
+
- 異常系: エラーの種類と期待する動作を日本語で記述
|
|
72
|
+
- 例: `MongoDBとの接続エラー時にエラーをスローすること`
|
|
73
|
+
|
|
74
|
+
## モック化のルール
|
|
75
|
+
|
|
76
|
+
### 外部依存のモック
|
|
77
|
+
- データベース接続
|
|
78
|
+
- 外部APIリクエスト
|
|
79
|
+
- 環境変数
|
|
80
|
+
- 現在時刻
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// モックの例
|
|
84
|
+
vi.mock(
|
|
85
|
+
'@/server/infrastructure/repositories/MongoLineMessageHistoryRepository',
|
|
86
|
+
() => ({
|
|
87
|
+
MongoLineMessageHistoryRepository: {
|
|
88
|
+
findByUserId: vi.fn(),
|
|
89
|
+
addMessage: vi.fn(),
|
|
90
|
+
},
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### テストデータ
|
|
96
|
+
- テストデータは各テストファイル内で定義
|
|
97
|
+
- 共通のテストデータファクトリーや、テスト用共通ロジックは/src/server/tests内に配置
|
|
98
|
+
- データは最小限の内容に留める
|
|
99
|
+
|
|
100
|
+
## アサーション
|
|
101
|
+
|
|
102
|
+
### 基本ルール
|
|
103
|
+
- 1つのテストケースにつき、1つの機能をテスト
|
|
104
|
+
- 複数の条件を確認する場合は、個別のテストケースに分割
|
|
105
|
+
- エッジケースを必ずテスト
|
|
106
|
+
- **テスト作成後は、必ずtestが通るかを確認**
|
|
107
|
+
|
|
108
|
+
### アサーションの種類
|
|
109
|
+
- 値の比較: `expect(result).toBe(expected)`
|
|
110
|
+
- オブジェクトの比較: `expect(result).toEqual(expected)`
|
|
111
|
+
- 関数呼び出しの確認: `expect(mockFn).toHaveBeenCalled()`
|
|
112
|
+
- エラーの確認: `expect(promise).rejects.toThrow()`
|
|
113
|
+
|
|
114
|
+
## APIエンドポイントのテスト
|
|
115
|
+
|
|
116
|
+
### エンドポイントテストの構造
|
|
117
|
+
```typescript
|
|
118
|
+
describe('APIエンドポイント', () => {
|
|
119
|
+
describe('POST /api/webhook/line/{botId}', () => {
|
|
120
|
+
it('正常なリクエストの場合、200を返すこと', async () => {
|
|
121
|
+
const response = await fetch(url, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: {
|
|
124
|
+
'Content-Type': 'application/json',
|
|
125
|
+
'x-line-signature': 'test',
|
|
126
|
+
},
|
|
127
|
+
body: JSON.stringify({
|
|
128
|
+
events: [{
|
|
129
|
+
type: 'message',
|
|
130
|
+
message: { type: 'text', text: 'こんにちは' },
|
|
131
|
+
source: { userId: 'test-user' },
|
|
132
|
+
replyToken: 'test-token',
|
|
133
|
+
}],
|
|
134
|
+
}),
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
expect(response.status).toBe(200);
|
|
138
|
+
expect(await response.json()).toEqual({ status: 'ok' });
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### テストすべき項目
|
|
145
|
+
1. 正常系
|
|
146
|
+
- 正常なリクエストに対する応答
|
|
147
|
+
- ペイロードの処理
|
|
148
|
+
- ヘッダーの検証
|
|
149
|
+
|
|
150
|
+
2. 異常系
|
|
151
|
+
- 不正なリクエストボディ
|
|
152
|
+
- 必須ヘッダーの欠落
|
|
153
|
+
- 認証エラー
|
|
154
|
+
- バリデーションエラー
|
|
155
|
+
|
|
156
|
+
3. エッジケース
|
|
157
|
+
- 空のペイロード
|
|
158
|
+
- 大きなペイロード
|
|
159
|
+
- 特殊文字を含むメッセージ
|
|
160
|
+
|
|
161
|
+
## テストの実行
|
|
162
|
+
|
|
163
|
+
### 実行コマンド
|
|
164
|
+
```bash
|
|
165
|
+
# 全てのテストを実行
|
|
166
|
+
npm test
|
|
167
|
+
|
|
168
|
+
# 特定のテストファイルを実行
|
|
169
|
+
npm test path/to/test.ts
|
|
170
|
+
|
|
171
|
+
# 監視モードで実行
|
|
172
|
+
npm test -- --watch
|
|
173
|
+
|
|
174
|
+
# カバレッジレポートを生成
|
|
175
|
+
npm test -- --coverage
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### CI/CD
|
|
179
|
+
- プルリクエスト時に全テストを実行
|
|
180
|
+
- カバレッジが80%未満の場合はビルドを失敗させる
|
|
181
|
+
- テスト失敗時はマージを禁止
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: コード規約 - コーディング規約とリファクタリング方針
|
|
3
|
+
globs: ["src/**/*.ts", "src/**/*.tsx"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
# コード規約
|
|
7
|
+
## ディレクトリ構造
|
|
8
|
+
```
|
|
9
|
+
src/
|
|
10
|
+
├── app/ # Next.js App Router
|
|
11
|
+
├── components/ # 共通コンポーネント
|
|
12
|
+
├── lib/ # ユーティリティ関数
|
|
13
|
+
├── styles/ # スタイル関連
|
|
14
|
+
└── types/ # 型定義
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## コーディング規約
|
|
18
|
+
|
|
19
|
+
### 命名規則
|
|
20
|
+
- ファイル名: kebab-case
|
|
21
|
+
- コンポーネント名: PascalCase
|
|
22
|
+
- 変数・関数名: camelCase
|
|
23
|
+
- 定数: UPPER_SNAKE_CASE
|
|
24
|
+
- 型・インターフェース: PascalCase
|
|
25
|
+
|
|
26
|
+
### コードスタイル
|
|
27
|
+
- インデント: 2スペース
|
|
28
|
+
- セミコロン: 必須
|
|
29
|
+
- クォート: シングルクォート
|
|
30
|
+
- 行の長さ: 100文字以内
|
|
31
|
+
- if文などの1行ブロックでも必ず中括弧({})を付けること(省略禁止)
|
|
32
|
+
- 例: NG → `if (user) return user;` / OK → `if (user) { return user; }`
|
|
33
|
+
|
|
34
|
+
### importパス
|
|
35
|
+
- 相対パス(`../../`)は使用禁止
|
|
36
|
+
- `@/`を使用した絶対パスを使用
|
|
37
|
+
- 例: `import { Component } from '@/components/Component'`
|
|
38
|
+
- 例: `import { useHook } from '@/hooks/useHook'`
|
|
39
|
+
|
|
40
|
+
### 型定義
|
|
41
|
+
- 明示的な型アノテーションを使用
|
|
42
|
+
- anyは使用禁止
|
|
43
|
+
- インターフェースはIプレフィックスを使用
|
|
44
|
+
- 型定義はtypesディレクトリに集約
|
|
45
|
+
|
|
46
|
+
## ツール設定
|
|
47
|
+
|
|
48
|
+
### TypeScript
|
|
49
|
+
- strictモードを有効化
|
|
50
|
+
- 型チェックはビルド時に実行
|
|
51
|
+
- 型定義は可能な限り厳密に
|
|
52
|
+
|
|
53
|
+
# 使用パッケージ一覧
|
|
54
|
+
**パッケージを更新したらこの一覧を必ず更新することをCursorから提案してください**
|
|
55
|
+
- TypeScript: 型安全な開発のためのメイン言語
|
|
56
|
+
- Next.js: フロントエンド/SSR/ルーティング
|
|
57
|
+
- React, react-dom: UIコンポーネント・SPA開発
|
|
58
|
+
- Prisma (@prisma/client, prisma): ORM・DBマイグレーション・型生成
|
|
59
|
+
- Vitest, @vitest/ui, @vitest/coverage-v8: ユニットテスト・モック・テストランナー
|
|
60
|
+
- Vite: フロントエンド開発環境・ビルドツール
|
|
61
|
+
- dotenv, dotenv-cli: 環境変数管理
|
|
62
|
+
- Biome (@biomejs/biome): Lint/Format/型チェック統合ツール
|
|
63
|
+
- Hono, @hono/node-server: APIサーバ・ミドルウェア
|
|
64
|
+
- MongoDB, mongoose: NoSQLデータベース・ODM
|
|
65
|
+
- @line/bot-sdk: LINE Messaging API連携
|
|
66
|
+
- openai: OpenAI API連携
|
|
67
|
+
- axios: HTTPクライアント
|
|
68
|
+
- eslint, eslint-config-next: Lintルール
|
|
69
|
+
- @types/*: 型定義パッケージ
|
|
70
|
+
- その他: 必要に応じて各層で利用するパッケージを適宜追加
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
# コミットルール
|
|
7
|
+
## コミット分割ルールの厳守について
|
|
8
|
+
|
|
9
|
+
- コミット分割ルールに違反した場合、重大なレビュープロセス阻害・履歴管理上の問題となるため、**絶対に違反しないこと**。
|
|
10
|
+
- 万一違反が発生した場合は、必ず即座に報告し、再発防止策(作業前の分割計画明示・コミット粒度の事前確認など)を徹底すること。
|
|
11
|
+
- 「まとめコミット」「複数目的の混在コミット」「コミット粒度の過剰肥大化」は**厳禁**。
|
|
12
|
+
- このルールは全開発者・AIアシスタントが例外なく厳守すること。
|
|
13
|
+
|
|
14
|
+
## コミットの流れ
|
|
15
|
+
- 「コミット前の確認事項」を参照してコミットに入れる常態か確認
|
|
16
|
+
- `git pull --rebase`で最新化
|
|
17
|
+
- git statusでコンテキストを確認
|
|
18
|
+
- 差分を「コミットの分割方針」に応じて分割し、具体的なコミット分割とその内容、コミットメッセージの合意を取る
|
|
19
|
+
- 分割された各コミットの内容は「コミット内容の確認事項」に留意する
|
|
20
|
+
- 合意したコミット方針でコミットを行う
|
|
21
|
+
- 忘れずに`git push`を行う
|
|
22
|
+
|
|
23
|
+
### コミットの分割方針
|
|
24
|
+
以下の場合は**必ず別々のコミットに分割してください**。違反した場合、重大なレビュープロセス阻害・履歴管理上の問題となるため、**絶対に違反しないこと**。万一違反が発生した場合は、必ず即座に報告し、再発防止策(作業前の分割計画明示・コミット粒度の事前確認など)を徹底すること。「まとめコミット」「複数目的の混在コミット」「コミット粒度の過剰肥大化」は**厳禁**。このルールは全開発者・AIアシスタントが例外なく厳守すること。
|
|
25
|
+
|
|
26
|
+
1. 異なる目的や種類の変更
|
|
27
|
+
- ソースコードの変更とドキュメントの更新
|
|
28
|
+
- 機能追加と設定ファイルの変更
|
|
29
|
+
- リファクタリングとバグ修正
|
|
30
|
+
|
|
31
|
+
2. 異なるコンポーネントやモジュールの変更
|
|
32
|
+
- 複数のマイクロサービスやコンポーネントの変更
|
|
33
|
+
- フロントエンドとバックエンドの変更
|
|
34
|
+
- インフラ構成とアプリケーションコードの変更
|
|
35
|
+
|
|
36
|
+
3. レビューの容易さを考慮した分割
|
|
37
|
+
- 大規模な変更は小さな論理的なまとまりに分割
|
|
38
|
+
- 設定変更とその設定を使用するコードの変更は分割
|
|
39
|
+
- テストコードの追加・更新は実装とは別のコミット
|
|
40
|
+
|
|
41
|
+
### コミット分割の具体例
|
|
42
|
+
|
|
43
|
+
以下のような変更がある場合:
|
|
44
|
+
- ディレクトリ構造の変更
|
|
45
|
+
- 実装の修正
|
|
46
|
+
- テストの追加
|
|
47
|
+
- 設定ファイルの更新
|
|
48
|
+
- ドキュメントの追加
|
|
49
|
+
|
|
50
|
+
このように分割します:
|
|
51
|
+
|
|
52
|
+
1. 構造的な変更
|
|
53
|
+
```bash
|
|
54
|
+
git commit -m "refactor: ディレクトリ構造の整理
|
|
55
|
+
|
|
56
|
+
- 関連するファイルを適切なディレクトリに移動
|
|
57
|
+
- 不要なファイルの削除
|
|
58
|
+
- ファイル名の統一"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
2. 実装の修正
|
|
62
|
+
```bash
|
|
63
|
+
git commit -m "fix: 実装の修正
|
|
64
|
+
|
|
65
|
+
- バグの修正内容
|
|
66
|
+
- 影響範囲
|
|
67
|
+
- 修正理由"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
3. テストの追加
|
|
71
|
+
```bash
|
|
72
|
+
git commit -m "test: テストの追加
|
|
73
|
+
|
|
74
|
+
- 追加したテストの概要
|
|
75
|
+
- テストでカバーする機能や条件
|
|
76
|
+
- 既存テストの修正点"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
4. 設定の更新
|
|
80
|
+
```bash
|
|
81
|
+
git commit -m "chore: 設定ファイルの更新
|
|
82
|
+
|
|
83
|
+
- 更新した設定項目
|
|
84
|
+
- 更新理由
|
|
85
|
+
- 影響範囲"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
5. ドキュメントの追加
|
|
89
|
+
```bash
|
|
90
|
+
git commit -m "docs: ドキュメントの追加
|
|
91
|
+
|
|
92
|
+
- 追加したドキュメントの概要
|
|
93
|
+
- 主な内容
|
|
94
|
+
- 参照すべき関連ドキュメント"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### コミットメッセージの形式
|
|
98
|
+
- プレフィックス: `feat:`, `fix:`, `docs:`, `style:`, `refactor:`, `test:`, `chore:`
|
|
99
|
+
- 日本語で記述
|
|
100
|
+
- 1行目に概要、2行目以降に詳細を記述
|
|
101
|
+
|
|
102
|
+
プレフィックスの使い分け:
|
|
103
|
+
- `feat:` : 新機能の追加
|
|
104
|
+
- `fix:` : バグ修正
|
|
105
|
+
- `docs:` : ドキュメントの更新
|
|
106
|
+
- `style:` : コードスタイルの修正(フォーマット等)
|
|
107
|
+
- `refactor:` : リファクタリング
|
|
108
|
+
- `test:` : テストの追加・修正
|
|
109
|
+
- `chore:` : ビルドプロセスやツールの変更
|
|
110
|
+
|
|
111
|
+
### コミットメッセージの例
|
|
112
|
+
|
|
113
|
+
良い例:
|
|
114
|
+
```bash
|
|
115
|
+
feat: ユーザー認証機能の追加
|
|
116
|
+
|
|
117
|
+
- JWT認証の実装
|
|
118
|
+
- ログイン・ログアウトエンドポイントの追加
|
|
119
|
+
- 認証ミドルウェアの実装
|
|
120
|
+
- テストケースの追加
|
|
121
|
+
|
|
122
|
+
影響範囲:
|
|
123
|
+
- /auth/*エンドポイント
|
|
124
|
+
- ミドルウェア
|
|
125
|
+
- ユーザーモデル
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
悪い例:
|
|
129
|
+
```bash
|
|
130
|
+
update files # 変更内容が不明確
|
|
131
|
+
|
|
132
|
+
fix some bugs # 具体的な修正内容が不明
|
|
133
|
+
|
|
134
|
+
various changes # 変更の種類や目的が不明確
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### コミットの粒度と単位
|
|
138
|
+
- 1つのコミットは1つの論理的な変更のみを含める
|
|
139
|
+
- 機能追加やバグ修正は1つずつコミット
|
|
140
|
+
- リファクタリングは機能変更と分けてコミット
|
|
141
|
+
- 複数のファイルを変更する場合も、関連する変更は1つのコミットにまとめる
|
|
142
|
+
- 1つのコミットの変更量は、レビューしやすい程度(100行程度)に抑える
|
|
143
|
+
- **コミット粒度の過剰肥大化・まとめコミットは禁止。違反時は必ず即座に報告し、再発防止策を徹底すること。**
|
|
144
|
+
|
|
145
|
+
### コミットのタイミング
|
|
146
|
+
- 機能の実装が完了した時点でコミット
|
|
147
|
+
- テストが通る状態でコミット
|
|
148
|
+
- 1日の作業終了時には必ずコミット
|
|
149
|
+
- 他の開発者と共有する前にコミット
|
|
150
|
+
- 大きな変更は小分けにしてコミット
|
|
151
|
+
- **コミットタイミングの逸脱やまとめコミットは禁止。**
|
|
152
|
+
|
|
153
|
+
### コミット前の確認事項
|
|
154
|
+
- コードがコンパイルできる状態か
|
|
155
|
+
- テストが通る状態か
|
|
156
|
+
- 不要なデバッグコードやコメントが残っていないか
|
|
157
|
+
|
|
158
|
+
### コミット内容の確認事項
|
|
159
|
+
- 変更内容がコミットメッセージと一致しているか
|
|
160
|
+
- 適切な粒度で分割されているか
|
|
161
|
+
- 関連する変更が漏れなくコミットされているか
|
|
162
|
+
|
|
163
|
+
### ブランチ戦略
|
|
164
|
+
- main: 本番環境用
|
|
165
|
+
- develop: 開発環境用
|
|
166
|
+
- feature/*: 機能開発用
|
|
167
|
+
- hotfix/*: 緊急修正用
|
|
168
|
+
|
|
169
|
+
### コミット分割ルールの厳守について
|
|
170
|
+
|
|
171
|
+
- 上記コミット分割ルールに違反した場合、重大なレビュープロセス阻害・履歴管理上の問題となるため、**絶対に違反しないこと**。
|
|
172
|
+
- 万一違反が発生した場合は、必ず即座に報告し、再発防止策(作業前の分割計画明示・コミット粒度の事前確認など)を徹底すること。
|
|
173
|
+
- 「まとめコミット」「複数目的の混在コミット」「コミット粒度の過剰肥大化」は**厳禁**。
|
|
174
|
+
- このルールは全開発者・AIアシスタントが例外なく厳守すること。
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 基本開発ルール - すべての作業で遵守すべき基本ルール
|
|
3
|
+
globs: ["**/*"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
# 基本開発ルール
|
|
7
|
+
## 重要:このルールは必ず守ってください
|
|
8
|
+
|
|
9
|
+
**このルールファイルの内容は、すべての作業において絶対的に遵守する必要があります。**
|
|
10
|
+
**ルールを無視したり、一部のみを適用したりすることは禁止されています。**
|
|
11
|
+
|
|
12
|
+
### ルール確認プロセス
|
|
13
|
+
1. 作業開始前に、必ずこのルールファイルを最初に確認してください
|
|
14
|
+
2. ルールの内容を理解し、すべての項目を遵守してください
|
|
15
|
+
3. ルールに従った作業計画を立ててください
|
|
16
|
+
4. 計画をユーザーに提示し、承認を得てください
|
|
17
|
+
|
|
18
|
+
**ルールを確認していない場合は、作業を開始しないでください。**
|
|
19
|
+
|
|
20
|
+
## 障害対応・再発防止の基本理念(Cursor/AIアシスタント向け)
|
|
21
|
+
|
|
22
|
+
- 作業の進め方や運用プロセスについてユーザーから指摘・指導、rulesの記載と行動の矛盾が発覚した場合、それを**Cursorにとって「障害」**と捉えること。
|
|
23
|
+
- 指摘内容を「一時的な例外」や「その場限りの対応」とせず、**必ずrulesファイル(.mdc等)を更新し、次回以降の進め方に再現性を持たせる**こと。
|
|
24
|
+
- **絶対に再発を防止することを基本理念とし、ルールファイルの更新・運用徹底を最優先で行動すること。**
|
|
25
|
+
- ルール更新後は、以降の全作業で新ルールを厳守し、同様の指摘が二度と発生しないよう徹底する。
|
|
26
|
+
|
|
27
|
+
# 作業の着手の流れ
|
|
28
|
+
|
|
29
|
+
あなたは高度な問題解決能力を持つ AI アシスタントです。タスクを効率的かつ正確に実行するために、以下の指示に従ってください。
|
|
30
|
+
|
|
31
|
+
まず、ユーザーから受け取った指示を確認します:
|
|
32
|
+
|
|
33
|
+
<instructions>
|
|
34
|
+
{{instructions}}
|
|
35
|
+
</instructions>
|
|
36
|
+
|
|
37
|
+
以下の指示に基づいて、以下のプロセスを進めてください:
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## 0. 作業開始準備
|
|
43
|
+
|
|
44
|
+
`git status` で現在の git のコンテキストを確認します。
|
|
45
|
+
差分が存在する場合は、「.cursor/rules/base-commit-rules.mdc」のコミットルールに従い、コミットを実行してください。
|
|
46
|
+
コミットの後は、pushも実行します。
|
|
47
|
+
|
|
48
|
+
**もし未コミットの差分がある場合、即座にコミット作業に入り、指示された内容についての作業(「0. 作業開始準備」より後の作業)は開始しないでください。**
|
|
49
|
+
|
|
50
|
+
## 1. 指示分析と計画、修正方針の確認
|
|
51
|
+
|
|
52
|
+
### タスク分析
|
|
53
|
+
**このセクションは必ず実行してください。省略や簡略化は禁止されています。**
|
|
54
|
+
|
|
55
|
+
タスク実行の前に、以下のタスク分析を必ず行ってください。
|
|
56
|
+
分析結果をもとに修正方針の確認を行い、実行してよいかどうかユーザに判断を仰いでください。
|
|
57
|
+
ただし、APIエンドポイントやディレクトリ構成、既存実装のread系調査(list_dir, read_file, codebase_search, file_search, grep_search など)は、ユーザー確認なしで自律的に実行すること。
|
|
58
|
+
|
|
59
|
+
**確認なしで勝手に修正作業を開始しないでください**
|
|
60
|
+
**また、分析の途中で既存ファイルや公式ドキュメントの調査が必要と判明した場合は分析の途中でもすぐに調査を開始し、その後タスク分析を継続すること**
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
## タスク内容の整理
|
|
64
|
+
目的、依頼内容をまず整理してください。
|
|
65
|
+
明らかな不明点や不足情報がある場合はその時点ですぐに問いかけを行ってください。
|
|
66
|
+
|
|
67
|
+
## 既存実装の確認
|
|
68
|
+
- 修正を行う前に、既存実装はどのようになっているか調査を行うこと
|
|
69
|
+
- 実装方針を合わせるため、実装を修正するファイルと同ディレクトリのファイルも確認して方針を踏襲すること
|
|
70
|
+
- 例
|
|
71
|
+
- 環境変数を追加する場合は、環境変数は現状どのような仕組みで適用されてるか確認する
|
|
72
|
+
- APIを実装する場合は、修正・作成する層のファイルと同じ階層のファイルをいくつか確認し、実装ルールを確認する
|
|
73
|
+
- タスク分析全体の完了を待たずにこの時点で即座に調査を行い、結果を出力
|
|
74
|
+
|
|
75
|
+
**実装確認はタスク分析完了した後に回さず、確認完了してから先の分析結果出力に進んでください。**
|
|
76
|
+
|
|
77
|
+
このセクションは後続のプロセス全体を導くものなので、十分な時間をかけてください。徹底的かつ包括的な分析を行ってください。
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
## 関連情報の確認
|
|
81
|
+
- SDKやフレームワーク等、特定のパッケージに依存する修正を行う場合は、公式ドキュメントを確認してから修正を行うこと
|
|
82
|
+
- 最初に確認を忘れた場合でも、エラーが起こった際などは自発的に確認すること
|
|
83
|
+
- タスク分析全体の完了を待たずにこの時点で即座に調査を行い、結果を出力
|
|
84
|
+
|
|
85
|
+
**関連情報の確認作業はタスク分析完了した後に回さず、確認完了してから先の分析結果出力に進んでください。**
|
|
86
|
+
|
|
87
|
+
このセクションは後続のプロセス全体を導くものなので、十分な時間をかけてください。徹底的かつ包括的な分析を行ってください。
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## 重複実装の防止
|
|
91
|
+
|
|
92
|
+
- 実装前に以下を調査し、修正対象箇所の判断を行ってください。
|
|
93
|
+
- 類似機能の存在
|
|
94
|
+
- 同一または類似の名前を持つ関数やコンポーネント
|
|
95
|
+
- 重複する API エンドポイント
|
|
96
|
+
- 共有できるプロセスの特定
|
|
97
|
+
- 修正しようとしている内容をすでに行っているファイルの探索
|
|
98
|
+
- タスク分析全体の完了を待たずにこの時点で即座に調査を行い、結果を出力
|
|
99
|
+
|
|
100
|
+
**重複実装の防止の確認作業はタスク分析完了した後に回さず、確認完了してから先の分析結果出力に進んでください。**
|
|
101
|
+
|
|
102
|
+
このセクションは後続のプロセス全体を導くものなので、十分な時間をかけてください。徹底的かつ包括的な分析を行ってください。
|
|
103
|
+
|
|
104
|
+
## 水平展開
|
|
105
|
+
- 実装方針を修正する場合、同じ実装方針の箇所を探索し、水平展開対象を探索
|
|
106
|
+
- 例
|
|
107
|
+
- パスや名称の修正を行ったら、修正されたパスや名称が使われている箇所を探索して修正対象とする
|
|
108
|
+
- APIのある層の実装課題を修正したら、同じ層の別ファイルにも同様の実装課題がある箇所を探索して、修正対象とする
|
|
109
|
+
- タスク分析全体の完了を待たずにこの時点で即座に調査を行い、水平展開対象を出力
|
|
110
|
+
|
|
111
|
+
**水平展開の確認作業はタスク分析完了した後に回さず、確認完了してから先の分析結果出力に進んでください。**
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## 修正対象の明示
|
|
115
|
+
分析した内容を踏まえて、修正対象となるファイルや画面を簡潔に整理してください
|
|
116
|
+
|
|
117
|
+
## 実装方針
|
|
118
|
+
分析した内容を踏まえて、実装方針を簡潔に整理してください
|
|
119
|
+
|
|
120
|
+
## 対応ステップ
|
|
121
|
+
- タスク実行にあたり必要な作業をステップ化してまとめる
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 2. タスク実行
|
|
125
|
+
|
|
126
|
+
- 特定されたステップを一つずつ実行する
|
|
127
|
+
- 各ステップを完了した後、進捗を簡潔に報告する
|
|
128
|
+
- 実装中は以下の点に注意する:
|
|
129
|
+
- 適切なディレクトリ構造の遵守
|
|
130
|
+
- わからないものがあれば @web を使用して適宜検索を行うこと
|
|
131
|
+
- 命名規則の一貫性
|
|
132
|
+
- 共有プロセスの適切な配置
|
|
133
|
+
- タスク実行の中で、コミットルールに応じてコミットを提案・実行すること
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 3. 品質管理と問題解決
|
|
138
|
+
|
|
139
|
+
- 各ステップのタスクの実装後、**必ず動作確認・検証記録を行い、その結果を明示的に報告すること**
|
|
140
|
+
- テストの実行、APIのcurl打鍵確認など
|
|
141
|
+
- 開発サーバの再起動を行う場合は、 すでに起動している開発サーバのプロセスをkillしてから起動を行うこと。
|
|
142
|
+
- 例)```pkill next && npm run dev```
|
|
143
|
+
- ただし、NextJSの場合は原則はホットリードが適用されるため、明らかに修正が反映されていない場合以外再起動は不要
|
|
144
|
+
- 動作確認方法がわからない場合は、ユーザに確認方法を質問すること**動作確認・検証記録をスキップして4. 最終確認に進まないこと**
|
|
145
|
+
|
|
146
|
+
- エラーや不整合が発生した場合は、以下のプロセスで対処する:
|
|
147
|
+
- 問題の分離と原因特定(ログ分析、デバッグ情報の確認)
|
|
148
|
+
- SDKやフレームワークに依存するエラーであれば、公式ドキュメントの確認や、Webで同様の事例がないかの確認を実施
|
|
149
|
+
- 修正方針の提案(ユーザに確認をとる)
|
|
150
|
+
- 対策の作成と実装
|
|
151
|
+
- 修正後の動作検証
|
|
152
|
+
- (さらにエラーが発生したら繰り返し)
|
|
153
|
+
|
|
154
|
+
- 検証結果を以下の形式で記録する:
|
|
155
|
+
a. 検証項目と期待される結果
|
|
156
|
+
b. 実際の結果と相違点
|
|
157
|
+
c. 必要な対策(該当する場合)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
## 4.ドキュメントの修正
|
|
161
|
+
- .cursor/rules以下の.mdcファイルについて、以下に該当する場合は修正を実施する
|
|
162
|
+
- 新規機能追加時、新規ディレクトリ追加時
|
|
163
|
+
- ディレクトリ構造、アーキテクチャ変更時
|
|
164
|
+
- 新規パッケージインストール時や、パッケージ削除・変更時
|
|
165
|
+
- rulesファイルの記載と異なる指示があったとき
|
|
166
|
+
- cursorのタスク実行の進め方に指摘があったとき
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
## 5. 最終確認
|
|
170
|
+
|
|
171
|
+
- すべてのタスクが完了したら、成果物全体を評価する
|
|
172
|
+
- 動作確認が完了していない場合は「## 3. 品質管理と問題解決」に戻る
|
|
173
|
+
- 元の指示との一貫性を確認し、必要に応じて調整を行う
|
|
174
|
+
- コミットルールに従い、コミットを提案する
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
## 6. 結果報告
|
|
178
|
+
|
|
179
|
+
最終結果を以下の形式で報告してください:
|
|
180
|
+
|
|
181
|
+
<最終結果>
|
|
182
|
+
|
|
183
|
+
# 実行結果報告
|
|
184
|
+
|
|
185
|
+
## 概要
|
|
186
|
+
|
|
187
|
+
[全体的な要約の簡単な説明]
|
|
188
|
+
|
|
189
|
+
## 実行ステップ
|
|
190
|
+
|
|
191
|
+
1. [ステップ 1 の説明と結果]
|
|
192
|
+
2. [ステップ 2 の説明と結果]
|
|
193
|
+
...
|
|
194
|
+
|
|
195
|
+
## 最終成果物
|
|
196
|
+
|
|
197
|
+
[成果物の詳細、該当する場合はリンク]
|
|
198
|
+
|
|
199
|
+
## 問題解決(該当する場合)
|
|
200
|
+
|
|
201
|
+
- 遭遇した問題と対応
|
|
202
|
+
- 今後の検討事項
|
|
203
|
+
|
|
204
|
+
## 注記と改善提案
|
|
205
|
+
|
|
206
|
+
- [観察事項や改善提案をリストアップ]
|
|
207
|
+
- 例
|
|
208
|
+
- 作業を進める中で、後回しにした事項や、懸念事項事項
|
|
209
|
+
- より堅牢、高セキュリティになる案
|
|
210
|
+
- リファクタリング方針(refactor-rules.mdc)に従ったリファクタリング案
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
## 重要な注意事項
|
|
214
|
+
|
|
215
|
+
- 既存の関連コードは指示がなくても確認する
|
|
216
|
+
- 不明点がある場合は、作業を始める前に必ず確認する
|
|
217
|
+
- 重要な決定や既存設計の変更が発生した場合は報告し、承認を得る
|
|
218
|
+
- 既存実装が場所によって複数の方針で実装されている場合はどの方針で実装するか確認する
|
|
219
|
+
- 予期しない問題が発生した場合は直ちに報告し、解決策を提案する
|
|
220
|
+
- **明示的に指示されていない変更は行わないでください。** 変更が必要と思われる場合は、まず提案として報告し、承認を得た後にのみ実装する
|
|
221
|
+
- **UI/UX デザインの変更(レイアウト、色、フォント、間隔など)は**、正当な理由を提示して承認を得た後でない限り**禁止されています**
|
|
222
|
+
- **技術スタックに記載されているバージョン**(API、フレームワーク、ライブラリなど)を**勝手に変更しないでください**。変更が必要な場合は、理由を明確に説明し、承認を待ってから変更を行ってください
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
## コミット分割の提案
|
|
226
|
+
- git statusで差分を確認する
|
|
227
|
+
- 発生した差分を、次項目にbase-rules.mdc内に記載されている「コミットルール」に基づいて、どのようなコミットメッセージのコミットにわけ、どのファイルをコミットに含めるのかの方針を立てて記載する
|
|
228
|
+
- 修正内容と、コミット分割に問題がなかった場合、ユーザの承諾を得たらコミット、pushを行うように反応を促すこと
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
</最終結果>
|