UI Prototype
A modern web application prototype built with React, TypeScript, and Material-UI, featuring authentication, internationalization, and Figma integration.
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__/: ã³ã³ããŒãã³ãã»ããã¯åäœã®ãã¹ã
ðš Figma MCP (Model Context Protocol) 飿º
ãã®ãããžã§ã¯ãã§ã¯ãFigma MCP ãµãŒããŒãšé£æºããŠããã¶ã€ã³ãã¡ã€ã«ããçŽæ¥ã¢ã»ãããååŸã§ããŸãã
ã»ããã¢ãã
- å¿ èŠãªèšå®ãã¡ã€ã«ã®æºå
.vscode/mcp.sample.json ãåèã«ãããªãã®èšå®ã«åãã㊠.vscode/mcp.json ãäœæããŠãã ããïŒ
{
"servers": {
"Framelink Figma MCP": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"figma-developer-mcp",
"--figma-api-key=<<your-figma-api-key>>",
"--stdio"
]
}
}
}
- Figma Personal Access Token ã®èšå®
Figma ã® Personal Access Token ãç°å¢å€æ°ãŸãã¯èšå®ãã¡ã€ã«ã«èšå®ããŠãã ããã
å©ç𿹿³
GitHub Copilot ã§ Figma ãã¶ã€ã³ããã³ã³ããŒãã³ããå®è£ ïŒ
䜿çšäŸããã³ãã:
Figma URL: https://www.figma.com/file/YOUR_FILE_KEY/...
ãã®Figmaãã¶ã€ã³ãåèã«ãLoginButtonã³ã³ããŒãã³ããå®è£
ããŠãã ããã
- styled.tsx ã«ã¹ã¿ã€ã«å®çŸ©ããŸãšãã
- Material-UIããŒã¹ã§å®è£
- ã¬ã¹ãã³ã·ã察å¿
- Figmaã®è²ã»ãµã€ãºã»äœçœãåæ
ãã®ããã³ããã«ãããFigma ãã¶ã€ã³ã®æ å ±ãååŸããé©åãªã¹ã¿ã€ã«ã³ã³ããŒãã³ããšããŠå®è£ ããããšæããŸãã
å©çšå¯èœãªMCPæ©èœ
mcp_framelink_fig_get_figma_data: Figma ãã¡ã€ã«ã®ã¬ã€ã¢ãŠãæ å ±ååŸmcp_framelink_fig_download_figma_images: Figma ããã®ç»åã»ã¢ã€ã³ã³ããŠã³ããŒã
ð§ éçºããŒã«è©³çް
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:api
Orvalã«ãã以äžãèªåçæãããŸãïŒ
- 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: å¹ççãªããã±ãŒãžç®¡ç
Related Servers
Angular MCP Server
An MCP server for accessing the official Angular documentation.
TCC
Automatically generates MCP servers from OpenAPI specifications, enabling conversational AI agents to interact with existing web systems.
Stata MCP
Run Stata commands and execute .do files directly from VS Code and Cursor, with AI assistant integration.
Apple HIG
Provides instant access to Apple's Human Interface Guidelines, with content auto-updated periodically.
Remote MCP Server (Authless)
An example of a remote MCP server deployable on Cloudflare Workers without authentication.
Remote MCP Server Kindler
A template for deploying a remote MCP server without authentication on Cloudflare Workers.
Remote MCP Server (Authless)
An example of a remote MCP server deployable on Cloudflare Workers, without authentication.
SourceSync.ai
An MCP server for the SourceSync.ai API to manage and synchronize source code context.
Galley MCP Server
Integrates Galley's GraphQL API with MCP clients. It automatically introspects the GraphQL schema for seamless use with tools like Claude and VS Code.
Composer Package README MCP Server
Fetches comprehensive information about Composer packages from Packagist, including READMEs, metadata, and search functionality.