ã³ãŒãã£ã³ã°çšããã³ããã®æžãæ¹10ãã¿ãŒã³ â AI ãæå€§éã«æŽ»ããããã³ãããšã³ãžãã¢ãªã³ã°
ã³ãŒãã£ã³ã°çšããã³ããã®åããã°ä¿®æ£ã»ãªãã¡ã¯ã¿ã»æ°æ©èœå®è£ ã»ãã¹ãçæãªã©10ãã¿ãŒã³ã§è§£èª¬ãClaude CodeãCopilotãCursorãªã©åAIããŒã«ã§ã®äœ¿ãåãã玹ä»ããŸãã
ãªãã³ãŒãã£ã³ã°çšããã³ããã«ãåããå¿ èŠãªã®ã
ãAI ã«ã³ãŒããæžããããã©ãæåŸ éãã®çµæã«ãªããªãâŠã ãã®åå ã®å€ãã¯ãããã³ããã®æžãæ¹ã«ãããŸããåã䜿ãã ãã§ãAIã®åºåå質ã¯åçã«åäžããŸãã
AIã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãïŒClaude CodeãGitHub CopilotãCursor ãªã©ïŒã®åºåå質ã¯ãããã³ããã®è³ªã«å€§ããå·Šå³ãããŸããææ§ãªæç€ºãåºããšææ§ãªçµæãè¿ããå ·äœçãªæç€ºãåºããšå ·äœçãªçµæãè¿ããŸããããã³ããã®åºæ¬çãªèãæ¹ã«ã€ããŠã¯ããã³ãããšã³ãžãã¢ãªã³ã°å®è·µã¬ã€ããåèã«ããŠãã ããã
ããã³ããã®è³ªãšåºåå質ã®é¢ä¿
ææ§ãªããã³ãã â åããã©åŸ®åŠãªã³ãŒã â æçŽãã«æéãããã
å
·äœçãªããã³ãã â æåŸ
éãã®ã³ãŒã â ããã«äœ¿ãã
ã³ãŒãã£ã³ã°çšããã³ããã®åºæ¬æ§é
è¯ãã³ãŒãã£ã³ã°ããã³ããã«ã¯ã以äžã®4èŠçŽ ãå«ãŸããŠããŸãã
| èŠçŽ | 説æ | äŸ |
|---|---|---|
| ã³ã³ããã¹ã | èæ¯æ å ±ãæè¡ã¹ã¿ã㯠| ãTypeScript + React ã®ãããžã§ã¯ãã§ã |
| ã¿ã¹ã¯ | å ·äœçã«ãã£ãŠã»ããããš | ããã°ã€ã³æ©èœãå®è£ ããŠãã ããã |
| å¶çŽæ¡ä»¶ | å®ã£ãŠã»ããã«ãŒã« | ãZustand ã䜿ããanyåã¯äœ¿ããªãã |
| åºååœ¢åŒ | æåŸ ããåºåã®åœ¢ | ããã¹ãä»ãã§ããã¡ã€ã«ããšã«åããŠã |
ãã¿ãŒã³1: ãã°ä¿®æ£ããã³ãã
å
以äžã®ãã°ãä¿®æ£ããŠãã ããã
## çç¶
[äœãèµ·ããŠããã]
## æåŸ
ãããåäœ
[æ¬æ¥ã©ããªãã¹ãã]
## åçŸæé
1. [æé 1]
2. [æé 2]
3. [æé 3]
## ãšã©ãŒã¡ãã»ãŒãžïŒããã°ïŒ
[ãšã©ãŒãã°ãã¹ã¿ãã¯ãã¬ãŒã¹]
## é¢é£ãã¡ã€ã«
[ãã¡ã€ã«ãã¹]
å®äŸ
以äžã®ãã°ãä¿®æ£ããŠãã ããã
## çç¶
ãŠãŒã¶ãŒãããã£ãŒã«ç»é¢ã§ãç»åã¢ããããŒãåŸã«ãã¬ãã¥ãŒãæŽæ°ãããªãã
ããŒãžããªããŒããããšæ£ãã衚瀺ãããã
## æåŸ
ãããåäœ
ç»åã¢ããããŒãåŸããªããŒããªãã§ãã¬ãã¥ãŒãæ°ããç»åã«æŽæ°ãããã
## åçŸæé
1. /profile ã«ã¢ã¯ã»ã¹
2. ãç»åã倿Žããã¿ã³ãã¯ãªãã¯
3. æ°ããç»åãéžæããŠã¢ããããŒã
4. ã¢ããããŒãæåã®ããŒã¹ãã衚瀺ããããããã¬ãã¥ãŒã¯å€ãç»åã®ãŸãŸ
## ãšã©ãŒã¡ãã»ãŒãž
ã³ã³ãœãŒã«ã«ãšã©ãŒãªã
## é¢é£ãã¡ã€ã«
src/components/ProfileImageUploader.tsx
src/hooks/useProfile.ts
ð¡ Tips: ãã°ä¿®æ£ããã³ããã§ã¯ãåçŸæé ããšãæåŸ ãããåäœããæç¢ºã«ããããšãæãéèŠã§ããAIã¯ãã®å·®åããåå ãæšæž¬ããŸãã
ãã¿ãŒã³2: ãªãã¡ã¯ã¿ãªã³ã°ããã³ãã
å
以äžã®ã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŠãã ããã
## 察象
[ãã¡ã€ã«ãã¹ãŸãã¯ã³ãŒã]
## çŸç¶ã®åé¡ç¹
[ãªããªãã¡ã¯ã¿ãå¿
èŠã]
## ãªãã¡ã¯ã¿ã®æ¹é
[ã©ã®ããã«ãªãã¡ã¯ã¿ãããã]
## å¶çŽ
- [倿ŽããŠã¯ãããªãããš]
- [ç¶æãã¹ãã€ã³ã¿ãŒãã§ãŒã¹]
å®äŸ
以äžã®ã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŠãã ããã
## 察象
src/services/orderService.ts
## çŸç¶ã®åé¡ç¹
- 1ã€ã®é¢æ°ã200è¡ãè¶
ããŠãã
- 泚æäœæãåšåº«ç¢ºèªã決æžåŠçãéç¥éä¿¡ã1ã€ã®createOrder颿°ã«æ··åš
- ãŠããããã¹ããæžããªãæ§é
## ãªãã¡ã¯ã¿ã®æ¹é
- åäžè²¬ä»»ã®ååã«åºã¥ããŠé¢æ°ãåå²
- åã¹ããããç¬ç«ãã颿°ã«åãåºã
- äŸåæ§æ³šå
¥ãã¿ãŒã³ã䜿ããã¹ã¿ãã«ã«ãã
## å¶çŽ
- createOrder 颿°ã®åŒæ°ãšæ»ãå€ã®åã¯å€ããªã
- æ¢åã®APIã¬ã¹ãã³ã¹ã«åœ±é¿ãäžããªã
- 段éçã«ãªãã¡ã¯ã¿å¯èœãªåœ¢ã«ãã
ãã¿ãŒã³3: æ°æ©èœå®è£ ããã³ãã
å
以äžã®æ°æ©èœãå®è£
ããŠãã ããã
## æ©èœæŠèŠ
[äœãå®è£
ããã]
## ãŠãŒã¶ãŒã¹ããŒãªãŒ
[誰ããäœã®ããã«ãäœããããã]
## æè¡èŠä»¶
- [䜿çšããæè¡ã»ã©ã€ãã©ãª]
- [ããŒã¿æ§é ]
- [APIèšèš]
## åãå
¥ãåºæº
- [ ] [åºæº1]
- [ ] [åºæº2]
- [ ] [åºæº3]
## åè
[æ¢åã®é¡äŒŒæ©èœããã¶ã€ã³ã¢ãã¯ç]
å®äŸ
以äžã®æ°æ©èœãå®è£
ããŠãã ããã
## æ©èœæŠèŠ
ããã°èšäºã®ãããããæ©èœ
## ãŠãŒã¶ãŒã¹ããŒãªãŒ
èªè
ãšããŠãæ°ã«å
¥ã£ãèšäºã«ããããããæŒããŠãèè
ã«ãã£ãŒãããã¯ãäŒãããã
## æè¡èŠä»¶
- ããã³ã: React + Zustand
- API: Next.js Route Handlers
- DB: Prisma + PostgreSQL
- èªèšŒãªãïŒIPããŒã¹ã®ã¬ãŒãå¶éã§éè€é²æ¢ïŒ
- ãªã¢ã«ã¿ã€ã æŽæ°äžèŠïŒããŒãžãªããŒãã§åæ ã§OKïŒ
## åãå
¥ãåºæº
- [ ] èšäºããŒãžã«ããããããã¿ã³ã衚瀺ããã
- [ ] ã¯ãªãã¯ãããšã«ãŠã³ãã+1ããã
- [ ] åãIPããåãèšäºãžã®éè€ãããã¯24æéã«1åãŸã§
- [ ] ãããæ°ãDBã«æ°žç¶åããã
- [ ] ãã¿ã³ã«ã¯ã¢ãã¡ãŒã·ã§ã³ããã
ãã¿ãŒã³4: ãã¹ãçæããã³ãã
å
以äžã®ã³ãŒãã«å¯Ÿãããã¹ããæžããŠãã ããã
## ãã¹ã察象
[ãã¡ã€ã«ãã¹ãŸãã¯ã³ãŒã]
## ãã¹ããã¬ãŒã ã¯ãŒã¯
[䜿çšãããã¬ãŒã ã¯ãŒã¯]
## ãã¹ãæ¹é
- [ã«ããŒãããã±ãŒã¹]
- [ãšããžã±ãŒã¹]
- [ã¢ãã¯ã®æ¹é]
## å«ããã¹ããã¹ãã±ãŒã¹
1. [æ£åžžç³»: xxx]
2. [ç°åžžç³»: xxx]
3. [å¢çå€: xxx]
å®äŸ
以äžã®ã³ãŒãã«å¯Ÿãããã¹ããæžããŠãã ããã
## ãã¹ã察象
src/utils/dateFormatter.ts
## ãã¹ããã¬ãŒã ã¯ãŒã¯
Vitest
## ãã¹ãæ¹é
- åãã©ãŒããã¿ãŒã®æ£åžžç³»ãç¶²çŸ
- ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãèæ
®
- nullãundefinedã®å
¥åããã¹ã
- ã¢ãã¯: Date.now() ãåºå®å€ã«ã¢ãã¯
## å«ããã¹ããã¹ãã±ãŒã¹
1. æ£åžžç³»: æ¥ä»æåå â ãã©ãŒãããæžã¿æåå
2. æ£åžžç³»: Dateãªããžã§ã¯ã â ãã©ãŒãããæžã¿æåå
3. ç°åžžç³»: nullå
¥å â ããã©ã«ãå€ãè¿ã
4. ç°åžžç³»: äžæ£ãªæ¥ä»æåå â ãšã©ãŒãã¹ããŒ
5. å¢çå€: 幎æ«å¹Žå§ïŒ12/31 â 1/1ïŒ
6. å¢çå€: é幎ïŒ2/29ïŒ
ãã¿ãŒã³5: ã³ãŒãã¬ãã¥ãŒããã³ãã
å
以äžã®ã³ãŒããã¬ãã¥ãŒããŠãã ããã
## ã¬ãã¥ãŒèгç¹
1. [ãã°ã®å¯èœæ§]
2. [ã»ãã¥ãªãã£]
3. [ããã©ãŒãã³ã¹]
4. [å¯èªæ§]
5. [ãã¹ã¿ããªãã£]
## ã³ã³ããã¹ã
[ãã®ã³ãŒãã®åœ¹å²ã倿Žã®èæ¯]
## ç¹ã«ç¢ºèªããŠã»ããç¹
[æžå¿µããŠããç®æ]
å®äŸ
以äžã®ã³ãŒããã¬ãã¥ãŒããŠãã ããã
## ã¬ãã¥ãŒèгç¹
1. SQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ããªãã
2. N+1ã¯ãšãªãçºçããŠããªãã
3. ãšã©ãŒãã³ããªã³ã°ãé©åã
4. TypeScriptã®åãæ£ãã䜿ãããŠããã
## ã³ã³ããã¹ã
ãŠãŒã¶ãŒæ€çŽ¢APIã®æ°èŠå®è£
ãããã³ããšã³ãã®ãªãŒãã³ã³ããªãŒãæ©èœããåŒã°ããã
ãªã¯ãšã¹ãé »åºŠã¯é«ãïŒããŒã¹ãããŒã¯ããšããã ãdebounce 300ms ããïŒã
## ç¹ã«ç¢ºèªããŠã»ããç¹
- æ€çŽ¢ã¯ãšãªã®ãµãã¿ã€ãºãååã
- é«é »åºŠã¢ã¯ã»ã¹ã«èããããã©ãŒãã³ã¹ã
ãã¿ãŒã³6: APIèšèšããã³ãã
å
以äžã®èŠä»¶ã§APIãèšèšããŠãã ããã
## æ©èœ
[APIãæäŸããæ©èœ]
## ãšã³ããã€ã³ãäžèЧ
[æ³å®ããŠãããšã³ããã€ã³ã]
## èšèšæ¹é
- [RESTful / GraphQL]
- [èªèšŒæ¹åŒ]
- [ããŒãžã§ãã³ã°]
## èæ
®äºé
- [ããŒãžããŒã·ã§ã³]
- [ã¬ãŒãå¶é]
- [ãšã©ãŒã¬ã¹ãã³ã¹åœ¢åŒ]
å®äŸ
以äžã®èŠä»¶ã§REST APIãèšèšããŠãã ããã
## æ©èœ
ããã°èšäºã®CRUD API
## ãšã³ããã€ã³ãïŒæ³å®ïŒ
- èšäºäžèЧã®ååŸ
- èšäºè©³çްã®ååŸ
- èšäºã®äœæ
- èšäºã®æŽæ°
- èšäºã®åé€
- èšäºã®æ€çŽ¢
## èšèšæ¹é
- RESTful
- JWTèªèšŒïŒäœæã»æŽæ°ã»åé€ã®ã¿ïŒ
- ããŒãžã§ãã³ã°: URLãã¹æ¹åŒïŒ/api/v1/ïŒ
## èæ
®äºé
- ã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³
- ã¬ãŒãå¶é: èªèšŒãã100req/minãèªèšŒãªã20req/min
- ãšã©ãŒã¬ã¹ãã³ã¹: RFC 7807 æºæ
- ã¬ã¹ãã³ã¹ã«ã¯HATEOASãªã³ã¯ãå«ãã
ãã¿ãŒã³7: DB ã¹ããŒãèšèšããã³ãã
å
以äžã®èŠä»¶ã§ããŒã¿ããŒã¹ã¹ããŒããèšèšããŠãã ããã
## èŠä»¶
[管çãããããŒã¿ã®æŠèŠ]
## ãšã³ãã£ãã£
[æ³å®ããããŒãã«/ã³ã¬ã¯ã·ã§ã³]
## å¶çŽ
- [DB: PostgreSQL / MySQL / MongoDB]
- [ORM: Prisma / TypeORM / Drizzle]
- [ããã©ãŒãã³ã¹èŠä»¶]
## ã¯ãšãªãã¿ãŒã³
[ããå®è¡ãããã¯ãšãªã®çš®é¡]
å®äŸ
以äžã®èŠä»¶ã§PostgreSQLã¹ããŒããPrisma圢åŒã§èšèšããŠãã ããã
## èŠä»¶
ECãµã€ãã®åå管çã·ã¹ãã
## ãšã³ãã£ãã£
- ååïŒproductsïŒ
- ã«ããŽãªïŒcategoriesïŒâ éå±€æ§é ãã
- ååç»åïŒproduct_imagesïŒâ 1ååã«è€æ°ç»å
- åšåº«ïŒinventoryïŒâ SKUåäœ
- ã¬ãã¥ãŒïŒreviewsïŒ
## å¶çŽ
- PostgreSQL 16 + Prisma
- ååæ°: æå€§10äžä»¶
- ãœããããªãŒã察å¿
- å€èšèªå¯Ÿå¿ïŒå°æ¥ïŒ
## ã¯ãšãªãã¿ãŒã³
- ã«ããŽãªå¥ã®ååäžèЧïŒããŒãžããŒã·ã§ã³ä»ãïŒ
- ååã®å
šææ€çŽ¢
- åšåº«æ°ã§ã®çµã蟌ã¿
- ã¬ãã¥ãŒã®å¹³åã¹ã³ã¢ã§ã®ãœãŒã
ãã¿ãŒã³8: ãšã©ãŒãã³ããªã³ã°èšèšããã³ãã
å
以äžã®ã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒãã³ããªã³ã°æŠç¥ãèšèšã»å®è£
ããŠãã ããã
## ã¢ããªã±ãŒã·ã§ã³
[ã¢ããªã®æŠèŠ]
## çŸç¶ã®åé¡
[ä»ã®ãšã©ãŒãã³ããªã³ã°ã®èª²é¡]
## èŠä»¶
- [ãŠãŒã¶ãŒãžã®ãšã©ãŒè¡šç€º]
- [ãã°èšé²]
- [ãªãã©ã€æŠç¥]
- [ãšã©ãŒéç¥]
å®äŸ
Next.js App Router ã®ãšã©ãŒãã³ããªã³ã°æŠç¥ãèšèšã»å®è£
ããŠãã ããã
## ã¢ããªã±ãŒã·ã§ã³
SaaSåã®ãããžã§ã¯ã管çããŒã«ïŒNext.js 15 + TypeScriptïŒ
## çŸç¶ã®åé¡
- try-catch ãåæã«ãã©ãã©ã«æžãããŠãã
- ãšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã«åããã«ãã
- ãšã©ãŒãã°ãæ§é åãããŠããªã
- APIãšã©ãŒã®ã¬ã¹ãã³ã¹åœ¢åŒãçµ±äžãããŠããªã
## èŠä»¶
- ã°ããŒãã«ãšã©ãŒããŠã³ããªïŒerror.tsxïŒã®å®è£
- ã«ã¹ã¿ã ãšã©ãŒã¯ã©ã¹ã®éå±€èšèš
- API Route ã§ã®çµ±äžãšã©ãŒã¬ã¹ãã³ã¹
- Sentry ãžã®ãšã©ãŒéä¿¡
- ãŠãŒã¶ãŒåãã®åããããããšã©ãŒã¡ãã»ãŒãž
- ãªãã©ã€å¯èœãªãšã©ãŒã®èªåãªãã©ã€ïŒæå€§3åãææ°ããã¯ãªãïŒ
ãã¿ãŒã³9: ããã©ãŒãã³ã¹æé©åããã³ãã
å
以äžã®ããã©ãŒãã³ã¹åé¡ãåæã»æ¹åããŠãã ããã
## åé¡
[äœãé
ãããå
·äœçãªæ°å€]
## èšæž¬çµæ
[Lighthouseããããã¡ã€ã©çã®çµæ]
## æè¡ã¹ã¿ãã¯
[䜿çšããŠããæè¡]
## å¶çŽ
- [倿Žå¯èœãªç¯å²]
- [UXãžã®åœ±é¿ãæå°éã«]
å®äŸ
以äžã®ããŒãžã®ããã©ãŒãã³ã¹ãæ¹åããŠãã ããã
## åé¡
ãããããŒãžã®è¡šç€ºãé
ã
## èšæž¬çµæïŒLighthouseïŒ
- FCP: 3.1ç§
- LCP: 5.4ç§
- TBT: 920ms
- CLS: 0.12
- ãã³ãã«ãµã€ãº: 1.8MBïŒgzipåŸ380KBïŒ
## æè¡ã¹ã¿ãã¯
Next.js 15, React 19, Tailwind CSS, Framer Motion, ç»å20æ
## å¶çŽ
- ãã¶ã€ã³ã®å€§å¹
倿Žã¯äžå¯
- Framer Motionã®ã¢ãã¡ãŒã·ã§ã³ã¯ç¶æããã
- ç»åã®å質ã¯èš±å®¹ç¯å²å
ã§æé©åOK
ãã¿ãŒã³10: ããã¥ã¡ã³ãã»ã³ã¡ã³ãçæããã³ãã
å
以äžã®ã³ãŒãã«ããã¥ã¡ã³ã/ã³ã¡ã³ãã远å ããŠãã ããã
## 察象
[ãã¡ã€ã«ãã¹ãŸãã¯ã³ãŒã]
## ããã¥ã¡ã³ã圢åŒ
[JSDoc / TSDoc / PHPDoc / docstring]
## å«ããŠã»ããæ
å ±
- [颿°ã®èª¬æ]
- [ãã©ã¡ãŒã¿ã®èª¬æ]
- [æ»ãå€ã®èª¬æ]
- [䜿çšäŸ]
- [泚æäºé
]
å®äŸ
以äžã®TypeScriptã¢ãžã¥ãŒã«ã«TSDocã³ã¡ã³ãã远å ããŠãã ããã
## 察象
src/utils/validation.ts
## ããã¥ã¡ã³ã圢åŒ
TSDoc
## å«ããŠã»ããæ
å ±
- å颿°ã®ç®çãšåäœèª¬æ
- ãã©ã¡ãŒã¿ã®åã»èª¬æã»å¶çŽ
- æ»ãå€ã®èª¬æ
- 䜿çšäŸïŒ@exampleïŒ
- ã¹ããŒããå¯èœæ§ã®ãããšã©ãŒïŒ@throwsïŒ
- ããªããŒã·ã§ã³ã«ãŒã«ã®å
·äœçãªæ¡ä»¶
AIããŒã«å¥ã®ããã³ããã®æžãåã
åããŒã«ã®ç¹åŸŽãšæé©ãªããã³ãã
| ããŒã« | ç¹åŸŽ | ããã³ããã®ã³ã |
|---|---|---|
| Claude Code | ãããžã§ã¯ãå šäœãææ¡ã察話ç | ãã¡ã€ã«ãã¹ãå ·äœçã«æå®ã段éçã«äŸé Œ |
| GitHub Copilot | ãšãã£ã¿çµ±åãè£å®ãåŸæ | ã³ã¡ã³ãã§ã®æç€ºã颿°ã·ã°ããã£ã®å è¡èšè¿° |
| Cursor | Cmd+K ã§ã€ã³ã©ã€ã³ç·šé | éžæç¯å²ãæç¢ºã«ã倿Žã®æå³ãç°¡æœã« |
| ChatGPT | æ±çšçãäŒè©±ãåŸæ | ã³ãŒãå šäœãããŒã¹ããèæ¯æ å ±ãäžå¯§ã« |
Claude Code åãã®ã³ã
# ã³ã³ããã¹ããè±å¯ãªããã³ãã
claude "src/api/auth.ts ã®login颿°ã«ã¬ãŒãå¶éã远å ããŠãã ããã
æ¢åã®rateLimiterããã«ãŠã§ã¢ïŒsrc/middleware/rateLimiter.tsïŒãåå©çšãã
ãã°ã€ã³å€±ææã¯5å/15åã§å¶éããããŠãã ããã
ãã¹ãã远å ããŠãã ããã"
# CLAUDE.mdã§ã«ãŒã«ãäºåå®çŸ©
# â ããã³ããã«ã«ãŒã«ãæ¯åæžãå¿
èŠããªããªã
GitHub Copilot åãã®ã³ã
// Copilot ã¯ã³ã¡ã³ãã§æç€ºãããšè£å®ç²ŸåºŠãäžãã
// ãŠãŒã¶ãŒã®ã¡ãŒã«ã¢ãã¬ã¹ãããªããŒã·ã§ã³ãã颿°
// - RFC 5322 æºæ
// - æ¥æ¬èªãã¡ã€ã³ã¯é察å¿
// - æå€§é·ã¯254æå
function validateEmail(email: string): boolean {
// â ããã§Copilotãè£å®ãææ¡
}
Cursor åãã®ã³ã
# Cmd+K ã§ã€ã³ã©ã€ã³ç·šéããéã®ããã³ããäŸ
# ã·ã³ãã«ã§å
·äœçã«
"ãã®é¢æ°ã«ãšã©ãŒãã³ããªã³ã°ã远å "
# 倿Žã®æå³ãæç¢ºã«
"try-catchã§å²ã¿ãã«ã¹ã¿ã ãšã©ãŒãã¹ããŒ"
# å¶çŽãäŒãã
"æ¢åã®ErrorHandlerã¯ã©ã¹ã䜿ã£ãŠ"
ããã³ããæ¹åã®ãã§ãã¯ãªã¹ã
ããã³ãããæžããããéä¿¡åã«ãã®ãã§ãã¯ãªã¹ãã§ç¢ºèªããŸãããã
åºæ¬ãã§ãã¯
- ã³ã³ããã¹ããå«ãŸããŠããïŒæè¡ã¹ã¿ãã¯ããã¡ã€ã«ãã¹ïŒ
- ã¿ã¹ã¯ãæç¢ºã§å ·äœç
- å¶çŽæ¡ä»¶ãæèšããŠãã
- æåŸ ããåºå圢åŒãæå®ããŠãã
å質ãã§ãã¯
- ææ§ãªè¡šçŸã䜿ã£ãŠããªãïŒãããæãã«ãâãããã©ãŒãã³ã¹ã20%æ¹åãïŒ
- å¿ èŠãªæ å ±ãäžè¶³ããŠããªã
- è€æ°ã®ã¿ã¹ã¯ã1ã€ã®ããã³ããã«è©°ã蟌ãã§ããªã
- ããªãããããããã®ãã®èæ¯ãå«ããŠãã
å¿çšãã§ãã¯
- ãšããžã±ãŒã¹ãžã®èšåããã
- ãã¹ãã®èŠåŠãæèšããŠãã
- æ¢åã³ãŒããšã®æŽåæ§ã«è§ŠããŠãã
- 段éçã«äŸé Œããæ§æã«ãªã£ãŠããïŒå€§ããªã¿ã¹ã¯ã®å ŽåïŒ
ããããã¢ã³ããã¿ãŒã³ãšæ¹åäŸ
ã¢ã³ããã¿ãŒã³1: ææ§ãããããã³ãã
# Bad
"èªèšŒæ©èœãäœã£ãŠ"
# Good
"JWT ããŒã¹ã®ãã°ã€ã³ã»ãã°ã¢ãŠãAPIãå®è£
ããŠãã ããã
æè¡ã¹ã¿ãã¯: Express + TypeScript + Prisma + PostgreSQL
ãšã³ããã€ã³ã: POST /api/auth/login, POST /api/auth/logout
ããŒã¯ã³æå¹æé: ã¢ã¯ã»ã¹ããŒã¯ã³15åããªãã¬ãã·ã¥ããŒã¯ã³7æ¥"
ã¢ã³ããã¿ãŒã³2: æ å ±ãå€ãããŠçŠç¹ããŒããã
# BadïŒ1ã€ã®ããã³ããã«å
šéšè©°ã蟌ãïŒ
"èªèšŒæ©èœããŠãŒã¶ãŒç®¡çããããã£ãŒã«ç·šéããã¹ã¯ãŒããªã»ããã
2FAãOAuth飿ºãã»ãã·ã§ã³ç®¡çãå
šéšå®è£
ããŠãã ãã"
# GoodïŒæ®µéçã«äŸé ŒïŒ
"ãŸã JWT èªèšŒã®åºç€ãå®è£
ããŠãã ããã
次ã®ã¹ãããã§å奿©èœã远å ããŠãããŸãã
Phase 1: ãã°ã€ã³ã»ãã°ã¢ãŠãïŒä»åïŒ
Phase 2: ãã¹ã¯ãŒããªã»ããïŒæ¬¡åïŒ
Phase 3: OAuth飿ºïŒãã®æ¬¡ïŒ"
ã¢ã³ããã¿ãŒã³3: ãã¬ãã£ãæç€ºã ã
# BadïŒäœãããŠã»ãããäžæç¢ºïŒ
"anyåã䜿ããªãã§ãconsole.logãå
¥ããªãã§ã
var ã䜿ããªãã§ã==ã䜿ããªãã§"
# GoodïŒããžãã£ããªæç€ºã«å€æïŒ
"TypeScriptã® strict ã¢ãŒãã«æºæ ããŠãã ããã
- æç€ºçãªåå®çŸ©ã䜿çš
- ãã®ã³ã°ã¯æ¢åã®loggerãŠãŒãã£ãªãã£ã䜿çš
- const/let ã䜿çšïŒvarã¯äžå¯ïŒ
- å³å¯ç䟡æŒç®åïŒ===ïŒã䜿çš"
ãŸãšã â è¯ãããã³ããã¯ãå ·äœçã»æ§é çã»æ®µéçã
ã³ãŒãã£ã³ã°çšããã³ããã®å質ãäžããããã«ã以äžã®3ååãæèããŸãããã
| åå | å®è·µæ¹æ³ |
|---|---|
| å ·äœç | æè¡ã¹ã¿ãã¯ããã¡ã€ã«ãã¹ãæ°å€ç®æšãæèš |
| æ§é ç | åïŒãã³ãã¬ãŒãïŒã䜿ããå¿ èŠãªæ å ±ãæŒããªãäŒãã |
| 段éç | 倧ããªã¿ã¹ã¯ã¯åå²ããŠã1ã€ãã€äŸé Œãã |
ãã®èšäºã§ç޹ä»ãã10ãã¿ãŒã³ã®ãã³ãã¬ãŒããæå ã«çœ®ããŠããã°ãAIã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãã®åºåå質ã確å®ã«åäžããŸããæåã¯åããã®ãŸãŸäœ¿ããæ £ããŠãããèªåã®ãããžã§ã¯ãã«åãããŠã«ã¹ã¿ãã€ãºããŠãããŸããããAIã«ããã³ãŒãè£å®ãããã«äœ¿ãããªãããæ¹ã¯ãAIã³ãŒãè£å®ã®ã³ããããããŠã芧ãã ããã