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
- ð ã¢ãã¯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
- 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
# ç°å¢å€æ°ã®èšå®ïŒãªãã·ã§ã³ïŒ
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 ã¹ããŒãããã®èªåçæ
- ãšã©ãŒãã³ããªã³ã°ãšãªãã©ã€æ©èœ
𧪠ãã¹ã
ãã¹ãå®è¡
# å
šãã¹ãå®è¡
pnpm test
# ãŠã©ããã¢ãŒãã§ãã¹ãå®è¡
pnpm test:watch
# ã«ãã¬ããžä»ããã¹ãå®è¡
pnpm test:coverage
# é¢é£ãã¹ãã®ã¿å®è¡ïŒå€æŽããããã¡ã€ã«ã«é¢é£ãããã¹ããæ€åºããŠå®è¡ïŒ
pnpm test:related src/path/to/changed-file.tsx
ãã¹ãæŠç¥
- åäœãã¹ã: ã³ã³ããŒãã³ããããã¯ããŠãŒãã£ãªãã£é¢æ°ã®ãã¹ã
- çµ±åãã¹ã: ããŒãžã¬ãã«ã§ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãã¹ã
- é¢é£ãã¹ãå®è¡:
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
Aseprite MCP
A server for programmatic interaction with Aseprite, enabling batch processing and automation for sprite creation and management.
MalwareBazaar MCP
Interface with Malware Bazaar to get real-time threat intelligence and sample metadata for cybersecurity research.
Remote MCP Server (Authless)
An example of a remote MCP server without authentication, deployable on Cloudflare Workers.
Infisical
Manage secrets and environment variables with Infisical's official MCP server.
Command-Line MCP Server
A secure MCP server for executing terminal commands with controlled directory access and command permissions.
AiCore Project
A unified framework for integrating various language models and embedding providers to generate text completions and embeddings.
Dify Workflow
A tool server for integrating Dify Workflows via the Model Context Protocol (MCP).
Socket
Scan dependencies for vulnerabilities and security issues using the Socket API.
MCP Server on Cloudflare
A template for deploying a remote MCP server on Cloudflare Workers without authentication.
Agentic Tools MCP Companion
A VS Code extension with a GUI for the agentic-tools-mcp server, enhancing task and memory management.