
UI Prototype
ð æŠèŠ
ãã®ãããžã§ã¯ãã¯ãã¢ãã³ãªæããç®æããReact + TypeScript + Material-UI (MUI)ã䜿çšããWebã¢ããªã±ãŒã·ã§ã³ã§ããèªèšŒæ©èœãå€èšèªå¯Ÿå¿ããã¹ãç°å¢ãMSWïŒMock Service WorkerïŒã䜿ã£ãã¢ãã¯APIãFigma MCPãµãŒããŒãšã®é£æºãªã©ã®æ©èœãå«ãã§ããŸãã
âš äž»ãªç¹åŸŽ
- ð èªèšŒã·ã¹ãã : èªèšŒãšã»ãã·ã§ã³ç®¡ç
- ð å€èšèªå¯Ÿå¿: æ¥æ¬èªã»è±èªå¯Ÿå¿ïŒreact-i18nextïŒ
- ð§ª å æ¬çãã¹ã: Vitest + React Testing Library + Playwright E2E
- ð ã¢ãã¯API: MSW ã«ããéçºæã®APIã¢ãã¯
- ðš Figma飿º: MCP ãµãŒããŒã«ãããã¶ã€ã³ã¢ã»ããååŸ
- ð± ã¬ã¹ãã³ã·ããã¶ã€ã³: ã¢ãã€ã«ã»ãã¹ã¯ããã察å¿ïŒãããªã«ã§ããŠãªãïŒ
ð æè¡ã¹ã¿ãã¯
- Frontend: React 19, TypeScript
- UI Framework: Material-UI (MUI)
- Build Tool: Vite
- State Management: TanStack Query (React Query)
- Routing: React Router
- Testing: Vitest, React Testing Library, Playwright
- Mocking: MSW (Mock Service Worker)
- Internationalization: react-i18next
- Code Generation: Orval (OpenAPI)
- Package Manager: pnpm
ð ã¯ã€ãã¯ã¹ã¿ãŒã
åææ¡ä»¶
- Node.js (v22) â»ãããžã§ã¯ãã«ããèªå管ç
- pnpm (v10.12.4) â»ãããžã§ã¯ãã«ããèªå管ç
ããŒãžã§ã³ç®¡ç:
- Node.js:
.npmrcã«ãã v22.17.0 ãèªåããŠã³ããŒãã»äœ¿çš- pnpm:
packageManagerãã£ãŒã«ãã«ãã v10.12.4 ãæšå¥šéçºè ãæåã§ããŒãžã§ã³ã管çããå¿ èŠã¯ãããŸããã
ã€ã³ã¹ããŒã«ãšå®è¡
# äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«
pnpm install
# E2Eãã¹ãçšãã©ãŠã¶ã®ã€ã³ã¹ããŒã«ïŒååã®ã¿ïŒ
pnpm test:e2e:install
# ç°å¢å€æ°ã®èšå®ïŒãªãã·ã§ã³ïŒ
cp .env.sample .env
# .envãã¡ã€ã«ãç·šéããŠAPI URLãªã©ãèšå®
# OpenAPIã¹ããŒãããã³ãŒããšã¢ãã¯ãçæïŒååãŸãã¯ã¹ããŒãæŽæ°æïŒ
pnpm gen:api
# éçºãµãŒããŒã®èµ·å
pnpm devã¢ããªã±ãŒã·ã§ã³ã¯ http://localhost:5173 ã§èµ·åããŸãã
ð ãããžã§ã¯ãæ§æ
src/
âââ adapters/ # å€éšãµãŒãã¹ãšã®æ¥ç¶å±€
â âââ axios.ts # HTTP ã¯ã©ã€ã¢ã³ãèšå®
â âââ generated/ # OpenAPI ããçæãããã³ãŒã
â âââ mocks/ # MSW ã¢ãã¯å®çŸ©
â âââ repositories/ # ããŒã¿ã¢ã¯ã»ã¹å±€
âââ app/ # ã¢ããªã±ãŒã·ã§ã³èšå®
â âââ providers/ # Context Providers
â âââ router/ # ã«ãŒãã£ã³ã°èšå®
â âââ types/ # ã¢ããªã±ãŒã·ã§ã³åå®çŸ©
âââ domain/ # ããžãã¹ããžãã¯å±€
â âââ constants/ # 宿°å®çŸ©
â âââ errors/ # ãšã©ãŒåå®çŸ©
â âââ models/ # ãã¡ã€ã³ã¢ãã«
â âââ utils/ # ãŠãŒãã£ãªãã£é¢æ°
âââ i18n/ # åœéåèšå®
â âââ config.ts # i18n èšå®
â âââ hooks/ # 翻蚳ããã¯
â âââ locales/ # èšèªãã¡ã€ã«
âââ presentations/ # ãã¬ãŒã³ããŒã·ã§ã³å±€
âââ components/ # å
±éã³ã³ããŒãã³ã
âââ hooks/ # ã«ã¹ã¿ã ããã¯
âââ layouts/ # ã¬ã€ã¢ãŠãã³ã³ããŒãã³ã
âââ pages/ # ããŒãžã³ã³ããŒãã³ãã¢ãŒããã¯ãã£ã®ç¹åŸŽ
- Clean Architecture: ãã¡ã€ã³é§åèšèšã®ååã«åºã¥ããå±€åé¢
- Repository Pattern: ããŒã¿ã¢ã¯ã»ã¹ã®æœè±¡å
- Provider Pattern: äŸåæ§æ³šå ¥ãšã³ã³ããã¹ã管ç
- Custom Hooks: ããžãã¹ããžãã¯ã®åå©çšæ§
ð§ äž»èŠæ©èœ
èªèšŒã·ã¹ãã
- JWT ããŒã¹ã®èªèšŒ
- ã»ãã·ã§ã³ç®¡çãšèªåæŽæ°
- ãã°ã€ã³/ãã°ã¢ãŠãæ©èœ
- èªèšŒç¶æ ã«åºã¥ãã«ãŒãã£ã³ã°
å€èšèªå¯Ÿå¿
- æ¥æ¬èªã»è±èªå¯Ÿå¿
- react-i18next ã«ããåçèšèªåæ¿
- åå®å šãªç¿»èš³ããŒ
APIéä¿¡
- Axios ããŒã¹ã®HTTPã¯ã©ã€ã¢ã³ã
- OpenAPI ã¹ããŒãããã®èªåçæ
- ãšã©ãŒãã³ããªã³ã°ãšãªãã©ã€æ©èœ
𧪠ãã¹ã
ãã¹ãå®è¡
# åäœãã¹ãïŒVitestïŒ
pnpm test # å
šãã¹ãå®è¡
pnpm test:watch # ãŠã©ããã¢ãŒã
pnpm test:coverage # ã«ãã¬ããžä»ãå®è¡
pnpm test:related src/path/to/changed-file.tsx # é¢é£ãã¹ãã®ã¿å®è¡
# E2Eãã¹ãïŒPlaywrightïŒ
pnpm test:e2e:install # ãã©ãŠã¶ã€ã³ã¹ããŒã«ïŒååã®ã¿ïŒ
pnpm test:e2e # å
šE2Eãã¹ãå®è¡
pnpm test:e2e:ui # ã€ã³ã¿ã©ã¯ãã£ãã¢ãŒã
pnpm test:e2e:debug # ãããã°ã¢ãŒãE2Eãã¹ãã®è©³çް:
playwright/README.mdãåç §ããŠãã ãããååå®è¡æ:
pnpm test:e2e:installã§Playwrightãã©ãŠã¶ïŒChromiumãFirefoxãWebKitïŒãã€ã³ã¹ããŒã«ããŠãã ããã
ãã¹ãæŠç¥
- åäœãã¹ã: ã³ã³ããŒãã³ããããã¯ããŠãŒãã£ãªãã£é¢æ°ã®ãã¹ã
- çµ±åãã¹ã: ããŒãžã¬ãã«ã§ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãã¹ã
- E2Eãã¹ã: Playwright ã«ããå®éã®ãã©ãŠã¶ã§ã®ãšã³ãããŒãšã³ããã¹ã
- é¢é£ãã¹ãå®è¡:
test:relatedã³ãã³ãã«ããå¹ççãªãã¹ãå®è¡- 倿Žããããã¡ã€ã«ã«é¢é£ãããã¹ããã¡ã€ã«ã®ã¿ãèªåæ€åºã»å®è¡
- CI/CDç°å¢ã§ã®é«éãªãã£ãŒãããã¯ã«ãŒããå®çŸ
- 䞊åå®è¡ïŒshardïŒã«ãããã¹ãæéã®ççž®
- ã¢ãã¯æŠç¥:
- MSW ã«ãã API ã¬ã¹ãã³ã¹ã®ã¢ãã¯
- Repository ã¬ãã«ã§ã®éšåçãªã¢ãã¯
- ãã¹ããŠãŒãã£ãªãã£ã«ããå ±éå
ãã¹ãæ§æ
src/__fixtures__/: ãã¹ãçšã®ãã«ããŒãšã¢ãã¯ããŒã¿src/__tests__/: ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãã¹ã- åãã£ã¬ã¯ããªã®
__tests__/: ã³ã³ããŒãã³ãã»ããã¯åäœã®ãã¹ã
ð MCP (Model Context Protocol) 飿º
ãã®ãããžã§ã¯ãã§ã¯ãMCP ãµãŒããŒã䜿çšã㊠AI ããŒã«ãšé£æºããéçºãå¹çåã§ããŸãã
èšå®ãã¡ã€ã«
ãããžã§ã¯ãã§ã¯2çš®é¡ã®MCPèšå®ãã¡ã€ã«ã䜿çšããŸãïŒ
.mcp.json: Claude Code ãããžã§ã¯ãåäœã® MCP èšå®.vscode/mcp.json: VSCode / GitHub Copilot çšã® MCP èšå®
äž¡æ¹ã®ãã¡ã€ã«ã¯åã MCP ãµãŒããŒãèšå®ããŠããŸãããç°ãªãããŒã«ã§äœ¿çšãããŸãã
å©çšå¯èœãªMCPãµãŒããŒ
1. Figma MCP ãµãŒããŒ
Figma ãã¶ã€ã³ãã¡ã€ã«ããçŽæ¥ã¢ã»ãããååŸã§ããŸãã
ã»ããã¢ãã:
Figma ã® Personal Access Token ãèšå®ã«è¿œå ããŠãã ããïŒ
{
"servers": {
"figma": {
"type": "http",
"url": "https://mcp.figma.com/mcp"
}
}
}å©ç𿹿³:
AI ããŒã«ã§ Figma ãã¶ã€ã³ããã³ã³ããŒãã³ããå®è£ ïŒ
Figma URL: https://www.figma.com/file/YOUR_FILE_KEY/...
ãã®Figmaãã¶ã€ã³ãåèã«ãLoginButtonã³ã³ããŒãã³ããå®è£
ããŠãã ããã
- styled.tsx ã«ã¹ã¿ã€ã«å®çŸ©ããŸãšãã
- Material-UIããŒã¹ã§å®è£
- ã¬ã¹ãã³ã·ã察å¿
- Figmaã®è²ã»ãµã€ãºã»äœçœãåæ å©çšå¯èœãªæ©èœ:
- Figma ãã¡ã€ã«ã®ã¬ã€ã¢ãŠãæ å ±ååŸ
- Figma ããã®ç»åã»ã¢ã€ã³ã³ããŠã³ããŒã
2. Playwright MCP ãµãŒããŒ
E2Eãã¹ãã®èªåçæãšãã©ãŠã¶æäœãæ¯æŽããŸãã
ã»ããã¢ãã:
æ¢ã«èšå®æžã¿ã§ãã.vscode/playwright-config.json ã§èšå®ãã«ã¹ã¿ãã€ãºã§ããŸãã
{
"servers": {
"playwright": {
"type": "stdio",
"command": "pnpm",
"args": [
"dlx",
"@playwright/mcp@latest",
"--config",
".vscode/playwright-config.json"
]
}
}
}å©ç𿹿³:
AI ããŒã«ã§ Playwright ãã¹ããçæã»å®è¡ïŒ
ãã°ã€ã³ããŒãžã®E2Eãã¹ããäœæããŠãã ããã
- ã¡ãŒã«ãšãã¹ã¯ãŒããå
¥å
- ãã°ã€ã³ãã¿ã³ãã¯ãªãã¯
- ããã·ã¥ããŒãã«ãªãã€ã¬ã¯ããããããšã確èªå©çšå¯èœãªæ©èœ:
- Playwright ãã¹ãã³ãŒãã®èªåçæ
- ãã©ãŠã¶æäœã®ã¹ã¯ãªããäœææ¯æŽ
- Page Object Model ãã¿ãŒã³ã®å®è£ æ¯æŽ
ð§ éçºããŒã«è©³çް
MSW (Mock Service Worker) ã»ããã¢ãã
éçºæã®APIã¢ãã¯ã䜿çšããããã®èšå®ïŒ
# MSWã®åæåïŒå
¬éãã£ã¬ã¯ããªã«Service Workerãã¡ã€ã«ãçæïŒ
pnpm msw:initãã®ã³ãã³ãã«ãã public/mockServiceWorker.js ãçæããããã©ãŠã¶ã§ã®APIã¢ãã¯ãæå¹ã«ãªããŸãã
å©çšå¯èœãªã¹ã¯ãªãã
pnpm dev # éçºãµãŒããŒèµ·å
pnpm build # ãããã¯ã·ã§ã³ãã«ã
pnpm type-check # åãã§ãã¯
pnpm lint # ESLintå®è¡
pnpm format:check # Prettierã«ãããã©ãŒããããã§ãã¯ïŒãã§ãã¯ã®ã¿ïŒ
pnpm format:fix # Prettierã«ããã³ãŒããã©ãŒãããïŒã³ãŒããèªåæŽåœ¢ïŒ
pnpm preview # ãã«ãçµæããã¬ãã¥ãŒ
pnpm test # ãã¹ãå®è¡
pnpm test:run # watch ã¢ãŒããªãã§å®è¡
pnpm test:coverage # ã«ãã¬ããžä»ããã¹ã
pnpm test:related # é¢é£ãã¹ãã®ã¿å®è¡ïŒæå®ãã¡ã€ã«ã«é¢é£ãããã¹ããæ€åºïŒ
pnpm gen:api # OpenAPIããã³ãŒããšã¢ãã¯ãçæ
pnpm msw:init # MSW Service Workeråæåã³ãŒãçæ (Orval)
OpenAPI ã¹ããŒãããAPIã¯ã©ã€ã¢ã³ããšMSWã¢ãã¯ãèªåçæïŒ
# OpenAPI ã¹ããŒãããåãšAPIã¯ã©ã€ã¢ã³ããMSWã¢ãã¯ãçæ
pnpm gen:apiOrvalã«ãã以äžãèªåçæãããŸãïŒ
- APIã¯ã©ã€ã¢ã³ã:
src/adapters/generated/ã«åå®å šãªAPIã¯ã©ã€ã¢ã³ã - TypeScriptåå®çŸ©: OpenAPIã¹ããŒãã«åºã¥ããåå®çŸ©
- MSWã¢ãã¯:
src/adapters/mocks/handlers/ã«ã¢ãã¯ãã³ãã©ãŒ
èšå®ãã¡ã€ã«: schema/orval.config.ts
ç°å¢å€æ°èšå®
ãããžã§ã¯ãã§ã¯ç°å¢å€æ°ã䜿çšããŠAPI URLãªã©ãèšå®ã§ããŸãïŒ
# .env.sampleãã³ããŒããŠ.envãã¡ã€ã«ãäœæ
cp .env.sample .envå©çšå¯èœãªç°å¢å€æ°:
VITE_API_BASE_URL: API ã®ããŒã¹URLïŒããã©ã«ã:http://localhost:3000/apiïŒ
ç°å¢å¥ã®èšå®äŸ:
# éçºç°å¢
VITE_API_BASE_URL=http://localhost:3000/api
# æ¬çªç°å¢
VITE_API_BASE_URL=https://api.your-domain.com/api
# ã¹ããŒãžã³ã°ç°å¢
VITE_API_BASE_URL=https://staging-api.your-domain.com/apiç°å¢å€æ°ã¯èªåçã«Axiosã®baseURLãšMSWã¢ãã¯ãã³ãã©ãŒã®äž¡æ¹ã«é©çšãããŸãã
éçºç°å¢ã®èšå®
- ESLint: ã³ãŒãå質ã®ç¶æ
- TypeScript: åå®å šæ§ã®ç¢ºä¿
- Vite: é«éãªéçºäœéš
- pnpm: å¹ççãªããã±ãŒãžç®¡ç
# äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«
pnpm install
# E2Eãã¹ãçšãã©ãŠã¶ã®ã€ã³ã¹ããŒã«ïŒååã®ã¿ïŒ
pnpm test:e2e:install
# ç°å¢å€æ°ã®èšå®ïŒãªãã·ã§ã³ïŒ
cp .env.sample .env
# .envãã¡ã€ã«ãç·šéããŠAPI URLãªã©ãèšå®
# OpenAPIã¹ããŒãããã³ãŒããšã¢ãã¯ãçæïŒååãŸãã¯ã¹ããŒãæŽæ°æïŒ
pnpm gen:api
# éçºãµãŒããŒã®èµ·å
pnpm devNo common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under MITâ you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub â