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.
Files changed (235) hide show
  1. package/README.md +307 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +1041 -0
  4. package/dist/cli.js.map +1 -0
  5. package/package.json +62 -0
  6. package/templates/turborepo-pandacss/.biomeignore +15 -0
  7. package/templates/turborepo-pandacss/.claude/hooks/einja/biome-format.sh +49 -0
  8. package/templates/turborepo-pandacss/.claude/hooks/einja/design-doc-check.sh +61 -0
  9. package/templates/turborepo-pandacss/.claude/hooks/einja/detect-secrets.sh +62 -0
  10. package/templates/turborepo-pandacss/.claude/hooks/einja/large-file-warning.sh +42 -0
  11. package/templates/turborepo-pandacss/.claude/hooks/einja/playwright-resize.sh +36 -0
  12. package/templates/turborepo-pandacss/.claude/hooks/einja/typecheck.sh +37 -0
  13. package/templates/turborepo-pandacss/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
  14. package/templates/turborepo-pandacss/.claude/hooks/einja/validate-git-commit.sh +239 -0
  15. package/templates/turborepo-pandacss/.claude/hooks/einja/warn-index-ts.sh +34 -0
  16. package/templates/turborepo-pandacss/.claude/hooks/einja/warn-relative-import.sh +48 -0
  17. package/templates/turborepo-pandacss/.claude/settings.json +174 -0
  18. package/templates/turborepo-pandacss/.claude/skills/create-einja-app-release/SKILL.md +186 -0
  19. package/templates/turborepo-pandacss/.claude/skills/dev-cli-release/SKILL.md +173 -0
  20. package/templates/turborepo-pandacss/.cursor/commands/spec-create.md +227 -0
  21. package/templates/turborepo-pandacss/.cursor/commands/start-dev.md +98 -0
  22. package/templates/turborepo-pandacss/.cursor/commands/task-exec.md +287 -0
  23. package/templates/turborepo-pandacss/.cursor/commands/task-vibe-kanban-loop.md +532 -0
  24. package/templates/turborepo-pandacss/.cursor/commands/update-docs-by-task-specs.md +448 -0
  25. package/templates/turborepo-pandacss/.cursor/mcp.json +45 -0
  26. package/templates/turborepo-pandacss/.cursor/rules/api-rules.mdc +171 -0
  27. package/templates/turborepo-pandacss/.cursor/rules/api-test-rules.mdc +181 -0
  28. package/templates/turborepo-pandacss/.cursor/rules/base-code.mdc +70 -0
  29. package/templates/turborepo-pandacss/.cursor/rules/base-commit-rules.mdc +174 -0
  30. package/templates/turborepo-pandacss/.cursor/rules/base-design.mdc +12 -0
  31. package/templates/turborepo-pandacss/.cursor/rules/base-rules.mdc +231 -0
  32. package/templates/turborepo-pandacss/.cursor/rules/error-handling-rules.mdc +188 -0
  33. package/templates/turborepo-pandacss/.cursor/rules/refactor-rules.mdc +93 -0
  34. package/templates/turborepo-pandacss/.dockerignore +126 -0
  35. package/templates/turborepo-pandacss/.einja-sync.json +35 -0
  36. package/templates/turborepo-pandacss/.env.ci +25 -0
  37. package/templates/turborepo-pandacss/.env.example +35 -0
  38. package/templates/turborepo-pandacss/.env.personal.example +27 -0
  39. package/templates/turborepo-pandacss/.envrc +4 -0
  40. package/templates/turborepo-pandacss/.gitattributes +5 -0
  41. package/templates/turborepo-pandacss/.husky/pre-commit +1 -0
  42. package/templates/turborepo-pandacss/.lintstagedrc.js +24 -0
  43. package/templates/turborepo-pandacss/.mcp.json +45 -0
  44. package/templates/turborepo-pandacss/.node-version +1 -0
  45. package/templates/turborepo-pandacss/.templateignore +60 -0
  46. package/templates/turborepo-pandacss/.vscode/extensions.json +3 -0
  47. package/templates/turborepo-pandacss/CLAUDE.md +415 -0
  48. package/templates/turborepo-pandacss/README.md +322 -0
  49. package/templates/turborepo-pandacss/apps/web/middleware.ts +28 -0
  50. package/templates/turborepo-pandacss/apps/web/next.config.ts +10 -0
  51. package/templates/turborepo-pandacss/apps/web/package.json +80 -0
  52. package/templates/turborepo-pandacss/apps/web/panda.config.ts +114 -0
  53. package/templates/turborepo-pandacss/apps/web/postcss.config.cjs +6 -0
  54. package/templates/turborepo-pandacss/apps/web/public/file.svg +1 -0
  55. package/templates/turborepo-pandacss/apps/web/public/globe.svg +1 -0
  56. package/templates/turborepo-pandacss/apps/web/public/next.svg +1 -0
  57. package/templates/turborepo-pandacss/apps/web/public/vercel.svg +1 -0
  58. package/templates/turborepo-pandacss/apps/web/public/window.svg +1 -0
  59. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/dashboard/page.tsx +79 -0
  60. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/data/_components/UserTable.tsx +203 -0
  61. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/data/page.tsx +57 -0
  62. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/layout-client.tsx +31 -0
  63. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/layout.tsx +17 -0
  64. package/templates/turborepo-pandacss/apps/web/src/app/(authenticated)/profile/page.tsx +59 -0
  65. package/templates/turborepo-pandacss/apps/web/src/app/api/auth/[...nextauth]/route.ts +3 -0
  66. package/templates/turborepo-pandacss/apps/web/src/app/api/auth/signup/route.ts +70 -0
  67. package/templates/turborepo-pandacss/apps/web/src/app/error.tsx +106 -0
  68. package/templates/turborepo-pandacss/apps/web/src/app/favicon.ico +0 -0
  69. package/templates/turborepo-pandacss/apps/web/src/app/global-error.tsx +110 -0
  70. package/templates/turborepo-pandacss/apps/web/src/app/globals.css +121 -0
  71. package/templates/turborepo-pandacss/apps/web/src/app/layout.tsx +28 -0
  72. package/templates/turborepo-pandacss/apps/web/src/app/not-found.tsx +54 -0
  73. package/templates/turborepo-pandacss/apps/web/src/app/page.module.css +165 -0
  74. package/templates/turborepo-pandacss/apps/web/src/app/page.test.tsx +52 -0
  75. package/templates/turborepo-pandacss/apps/web/src/app/page.tsx +284 -0
  76. package/templates/turborepo-pandacss/apps/web/src/app/signin/page.tsx +296 -0
  77. package/templates/turborepo-pandacss/apps/web/src/app/signup/page.tsx +395 -0
  78. package/templates/turborepo-pandacss/apps/web/src/application/use-cases/UserUseCases.test.ts +229 -0
  79. package/templates/turborepo-pandacss/apps/web/src/application/use-cases/UserUseCases.ts +115 -0
  80. package/templates/turborepo-pandacss/apps/web/src/components/auth/login-button.tsx +35 -0
  81. package/templates/turborepo-pandacss/apps/web/src/components/auth/logout-button.tsx +24 -0
  82. package/templates/turborepo-pandacss/apps/web/src/components/auth/user-avatar.test.tsx +68 -0
  83. package/templates/turborepo-pandacss/apps/web/src/components/auth/user-avatar.tsx +43 -0
  84. package/templates/turborepo-pandacss/apps/web/src/components/dashboard/dashboard-stats.tsx +128 -0
  85. package/templates/turborepo-pandacss/apps/web/src/components/providers/query-provider.tsx +30 -0
  86. package/templates/turborepo-pandacss/apps/web/src/components/providers/session-provider.tsx +12 -0
  87. package/templates/turborepo-pandacss/apps/web/src/components/shared/Sidebar.tsx +175 -0
  88. package/templates/turborepo-pandacss/apps/web/src/components/shared/header.tsx +166 -0
  89. package/templates/turborepo-pandacss/apps/web/src/components/ui/accordion.tsx +64 -0
  90. package/templates/turborepo-pandacss/apps/web/src/components/ui/alert-dialog.tsx +135 -0
  91. package/templates/turborepo-pandacss/apps/web/src/components/ui/alert.tsx +60 -0
  92. package/templates/turborepo-pandacss/apps/web/src/components/ui/aspect-ratio.tsx +9 -0
  93. package/templates/turborepo-pandacss/apps/web/src/components/ui/avatar.tsx +41 -0
  94. package/templates/turborepo-pandacss/apps/web/src/components/ui/badge.tsx +39 -0
  95. package/templates/turborepo-pandacss/apps/web/src/components/ui/breadcrumb.tsx +101 -0
  96. package/templates/turborepo-pandacss/apps/web/src/components/ui/button.tsx +56 -0
  97. package/templates/turborepo-pandacss/apps/web/src/components/ui/card.tsx +75 -0
  98. package/templates/turborepo-pandacss/apps/web/src/components/ui/checkbox.tsx +29 -0
  99. package/templates/turborepo-pandacss/apps/web/src/components/ui/data-table.tsx +189 -0
  100. package/templates/turborepo-pandacss/apps/web/src/components/ui/dialog-hook.tsx +210 -0
  101. package/templates/turborepo-pandacss/apps/web/src/components/ui/dialog.tsx +129 -0
  102. package/templates/turborepo-pandacss/apps/web/src/components/ui/drawer.tsx +124 -0
  103. package/templates/turborepo-pandacss/apps/web/src/components/ui/dropdown-menu.tsx +228 -0
  104. package/templates/turborepo-pandacss/apps/web/src/components/ui/form.tsx +152 -0
  105. package/templates/turborepo-pandacss/apps/web/src/components/ui/hover-card.tsx +38 -0
  106. package/templates/turborepo-pandacss/apps/web/src/components/ui/input.tsx +21 -0
  107. package/templates/turborepo-pandacss/apps/web/src/components/ui/label.tsx +21 -0
  108. package/templates/turborepo-pandacss/apps/web/src/components/ui/pagination.tsx +105 -0
  109. package/templates/turborepo-pandacss/apps/web/src/components/ui/popover.tsx +42 -0
  110. package/templates/turborepo-pandacss/apps/web/src/components/ui/progress.tsx +28 -0
  111. package/templates/turborepo-pandacss/apps/web/src/components/ui/select.tsx +170 -0
  112. package/templates/turborepo-pandacss/apps/web/src/components/ui/separator.tsx +28 -0
  113. package/templates/turborepo-pandacss/apps/web/src/components/ui/skeleton.tsx +13 -0
  114. package/templates/turborepo-pandacss/apps/web/src/components/ui/sonner.tsx +25 -0
  115. package/templates/turborepo-pandacss/apps/web/src/components/ui/table.tsx +92 -0
  116. package/templates/turborepo-pandacss/apps/web/src/components/ui/tabs.tsx +54 -0
  117. package/templates/turborepo-pandacss/apps/web/src/components/ui/textarea.tsx +18 -0
  118. package/templates/turborepo-pandacss/apps/web/src/components/ui/tooltip.tsx +57 -0
  119. package/templates/turborepo-pandacss/apps/web/src/components/ui/typography.tsx +158 -0
  120. package/templates/turborepo-pandacss/apps/web/src/lib/auth/guard.ts +36 -0
  121. package/templates/turborepo-pandacss/apps/web/src/lib/auth/index.ts +22 -0
  122. package/templates/turborepo-pandacss/apps/web/src/lib/prisma.ts +3 -0
  123. package/templates/turborepo-pandacss/apps/web/src/lib/utils.ts +6 -0
  124. package/templates/turborepo-pandacss/apps/web/test/globals.d.ts +1 -0
  125. package/templates/turborepo-pandacss/apps/web/test/matchers.d.ts +1 -0
  126. package/templates/turborepo-pandacss/apps/web/test/setup.ts +22 -0
  127. package/templates/turborepo-pandacss/apps/web/tsconfig.json +37 -0
  128. package/templates/turborepo-pandacss/apps/web/vitest.config.ts +20 -0
  129. package/templates/turborepo-pandacss/apps/web/vitest.d.ts +2 -0
  130. package/templates/turborepo-pandacss/biome.json +60 -0
  131. package/templates/turborepo-pandacss/components.json +21 -0
  132. package/templates/turborepo-pandacss/docker-compose.yml +27 -0
  133. package/templates/turborepo-pandacss/middleware.ts +32 -0
  134. package/templates/turborepo-pandacss/next.config.ts +10 -0
  135. package/templates/turborepo-pandacss/package-lock.json +9346 -0
  136. package/templates/turborepo-pandacss/package.json +64 -0
  137. package/templates/turborepo-pandacss/packages/config/package.json +41 -0
  138. package/templates/turborepo-pandacss/packages/config/panda.config.ts +114 -0
  139. package/templates/turborepo-pandacss/packages/config/src/index.ts +24 -0
  140. package/templates/turborepo-pandacss/packages/config/src/worktree-config-loader.ts +129 -0
  141. package/templates/turborepo-pandacss/packages/config/src/worktree-config.ts +75 -0
  142. package/templates/turborepo-pandacss/packages/config/tsconfig.build.json +19 -0
  143. package/templates/turborepo-pandacss/packages/config/tsconfig.json +24 -0
  144. package/templates/turborepo-pandacss/packages/config/typescript/base.json +19 -0
  145. package/templates/turborepo-pandacss/packages/front-core/package.json +24 -0
  146. package/templates/turborepo-pandacss/packages/front-core/src/auth/config.ts +84 -0
  147. package/templates/turborepo-pandacss/packages/front-core/src/auth/index.ts +5 -0
  148. package/templates/turborepo-pandacss/packages/front-core/src/auth/types/next-auth.d.ts +20 -0
  149. package/templates/turborepo-pandacss/packages/front-core/src/auth/utils.ts +29 -0
  150. package/templates/turborepo-pandacss/packages/front-core/src/context/index.ts +2 -0
  151. package/templates/turborepo-pandacss/packages/front-core/src/hooks/index.ts +2 -0
  152. package/templates/turborepo-pandacss/packages/front-core/src/index.ts +4 -0
  153. package/templates/turborepo-pandacss/packages/front-core/src/utils/index.ts +2 -0
  154. package/templates/turborepo-pandacss/packages/front-core/tsconfig.json +14 -0
  155. package/templates/turborepo-pandacss/packages/server-core/package.json +32 -0
  156. package/templates/turborepo-pandacss/packages/server-core/prisma/schema.prisma +102 -0
  157. package/templates/turborepo-pandacss/packages/server-core/prisma/seed.ts +67 -0
  158. package/templates/turborepo-pandacss/packages/server-core/prisma.config.ts +8 -0
  159. package/templates/turborepo-pandacss/packages/server-core/src/__generated__/fabbrica/index.d.ts +270 -0
  160. package/templates/turborepo-pandacss/packages/server-core/src/__generated__/fabbrica/index.js +484 -0
  161. package/templates/turborepo-pandacss/packages/server-core/src/core/result.test.ts +78 -0
  162. package/templates/turborepo-pandacss/packages/server-core/src/core/result.ts +53 -0
  163. package/templates/turborepo-pandacss/packages/server-core/src/domain/.gitkeep +0 -0
  164. package/templates/turborepo-pandacss/packages/server-core/src/domain/entities/User.test.ts +232 -0
  165. package/templates/turborepo-pandacss/packages/server-core/src/domain/entities/User.ts +105 -0
  166. package/templates/turborepo-pandacss/packages/server-core/src/domain/repository-interfaces/IUserRepository.ts +101 -0
  167. package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/client.ts +15 -0
  168. package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/mappers/UserMapper.test.ts +278 -0
  169. package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/mappers/UserMapper.ts +103 -0
  170. package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/repositories/UserRepository.test.ts +317 -0
  171. package/templates/turborepo-pandacss/packages/server-core/src/infrastructure/database/repositories/UserRepository.ts +169 -0
  172. package/templates/turborepo-pandacss/packages/server-core/src/testing/factories/index.ts +22 -0
  173. package/templates/turborepo-pandacss/packages/server-core/src/testing/factories/user.factory.ts +123 -0
  174. package/templates/turborepo-pandacss/packages/server-core/src/testing/fixtures/users.ts +92 -0
  175. package/templates/turborepo-pandacss/packages/server-core/src/testing/helpers/date.ts +49 -0
  176. package/templates/turborepo-pandacss/packages/server-core/src/testing/helpers/password.ts +50 -0
  177. package/templates/turborepo-pandacss/packages/server-core/src/testing/index.ts +26 -0
  178. package/templates/turborepo-pandacss/packages/server-core/tsconfig.json +14 -0
  179. package/templates/turborepo-pandacss/packages/server-core/vitest.config.ts +15 -0
  180. package/templates/turborepo-pandacss/packages/ui/package.json +37 -0
  181. package/templates/turborepo-pandacss/packages/ui/src/accordion.tsx +66 -0
  182. package/templates/turborepo-pandacss/packages/ui/src/alert-dialog.tsx +157 -0
  183. package/templates/turborepo-pandacss/packages/ui/src/alert.tsx +66 -0
  184. package/templates/turborepo-pandacss/packages/ui/src/aspect-ratio.tsx +11 -0
  185. package/templates/turborepo-pandacss/packages/ui/src/avatar.tsx +53 -0
  186. package/templates/turborepo-pandacss/packages/ui/src/badge.tsx +46 -0
  187. package/templates/turborepo-pandacss/packages/ui/src/breadcrumb.tsx +108 -0
  188. package/templates/turborepo-pandacss/packages/ui/src/button.tsx +59 -0
  189. package/templates/turborepo-pandacss/packages/ui/src/card.tsx +92 -0
  190. package/templates/turborepo-pandacss/packages/ui/src/checkbox.tsx +32 -0
  191. package/templates/turborepo-pandacss/packages/ui/src/data-table.tsx +216 -0
  192. package/templates/turborepo-pandacss/packages/ui/src/dialog-hook.tsx +226 -0
  193. package/templates/turborepo-pandacss/packages/ui/src/dialog.tsx +143 -0
  194. package/templates/turborepo-pandacss/packages/ui/src/drawer.tsx +135 -0
  195. package/templates/turborepo-pandacss/packages/ui/src/dropdown-menu.tsx +257 -0
  196. package/templates/turborepo-pandacss/packages/ui/src/form.tsx +168 -0
  197. package/templates/turborepo-pandacss/packages/ui/src/hover-card.tsx +44 -0
  198. package/templates/turborepo-pandacss/packages/ui/src/input.tsx +21 -0
  199. package/templates/turborepo-pandacss/packages/ui/src/label.tsx +24 -0
  200. package/templates/turborepo-pandacss/packages/ui/src/lib/utils.ts +6 -0
  201. package/templates/turborepo-pandacss/packages/ui/src/pagination.tsx +126 -0
  202. package/templates/turborepo-pandacss/packages/ui/src/popover.tsx +48 -0
  203. package/templates/turborepo-pandacss/packages/ui/src/progress.tsx +31 -0
  204. package/templates/turborepo-pandacss/packages/ui/src/select.tsx +185 -0
  205. package/templates/turborepo-pandacss/packages/ui/src/separator.tsx +28 -0
  206. package/templates/turborepo-pandacss/packages/ui/src/skeleton.tsx +13 -0
  207. package/templates/turborepo-pandacss/packages/ui/src/sonner.tsx +25 -0
  208. package/templates/turborepo-pandacss/packages/ui/src/table.tsx +116 -0
  209. package/templates/turborepo-pandacss/packages/ui/src/tabs.tsx +66 -0
  210. package/templates/turborepo-pandacss/packages/ui/src/textarea.tsx +18 -0
  211. package/templates/turborepo-pandacss/packages/ui/src/tooltip.tsx +61 -0
  212. package/templates/turborepo-pandacss/packages/ui/src/typography.tsx +187 -0
  213. package/templates/turborepo-pandacss/packages/ui/tsconfig.json +20 -0
  214. package/templates/turborepo-pandacss/panda.config.ts +114 -0
  215. package/templates/turborepo-pandacss/pnpm-lock.yaml +9032 -0
  216. package/templates/turborepo-pandacss/pnpm-workspace.yaml +11 -0
  217. package/templates/turborepo-pandacss/postcss.config.cjs +6 -0
  218. package/templates/turborepo-pandacss/prisma/schema.prisma +82 -0
  219. package/templates/turborepo-pandacss/public/file.svg +1 -0
  220. package/templates/turborepo-pandacss/public/globe.svg +1 -0
  221. package/templates/turborepo-pandacss/public/next.svg +1 -0
  222. package/templates/turborepo-pandacss/public/vercel.svg +1 -0
  223. package/templates/turborepo-pandacss/public/window.svg +1 -0
  224. package/templates/turborepo-pandacss/scripts/cli-template-update.ts +387 -0
  225. package/templates/turborepo-pandacss/scripts/env-show.ts +129 -0
  226. package/templates/turborepo-pandacss/scripts/env.ts +555 -0
  227. package/templates/turborepo-pandacss/scripts/init.sh +92 -0
  228. package/templates/turborepo-pandacss/scripts/setup-dev.ts +640 -0
  229. package/templates/turborepo-pandacss/scripts/template-update.ts +277 -0
  230. package/templates/turborepo-pandacss/scripts/worktree/dev.ts +872 -0
  231. package/templates/turborepo-pandacss/test/globals.d.ts +1 -0
  232. package/templates/turborepo-pandacss/test/setup.ts +22 -0
  233. package/templates/turborepo-pandacss/tsconfig.json +46 -0
  234. package/templates/turborepo-pandacss/turbo.json +57 -0
  235. 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
+