ããããèšå®ãã¡ã€ã«ã«æžããŠããããããAIãšãŒãžã§ã³ãCursor/Clineã§ã®ãã¹ãçææ¹åã®èšé²ã (2025幎1æçŸåš)
ã¯ããã«
ããã«ã¡ã¯ãUbieã§QAãšã³ãžãã¢ãããŠãã ackey ã§ãã
æšå¹Žã®12æããã¢ããªããŒã å
šäœã®éçºã»éçšçç£æ§æ¹åãæ
ãããŒã ã«æå±ããŠããŸãã
æ¬èšäºã§ã¯ãAIãšãŒãžã§ã³ãã䜿ã£ããã¹ãã³ãŒãçæã«ãããã¡ãã£ãšãã工倫äºäŸãã玹ä»ããŸãã
2025幎åé æç¹ã§ã®è©Šè¡é¯èª€ã®èšé²ãšããŠããŸããçæAIæä»£ãçãæãããšãããQAãšã³ãžãã¢ã®åãçµã¿ãšããŠåèã«ãªãã°å¹žãã§ãã
AIãšãŒãžã§ã³ããšã®ãããšãã§æãã課é¡
Ubieã§ã¯CursorãClineãªã©éçºAIãšãŒãžã§ã³ãã®ãã©ã€ã¢ã«ãäžéšã®ãããžã§ã¯ãã§éå§ããŠããããã¯ãAIãšãŒãžã§ã³ããªãã®éçºã¹ã¿ã€ã«ã«ã¯æ»ããªãç¶æ ã«ãªãã€ã€ãããŸãã
ã¢ããªããŒã ã§ãAIãšãŒãžã§ã³ãã®å©çšã¯æŽ»çºã§ãæ°æ©èœéçºãããã¹ãã³ãŒãã®çæãŸã§å¹ åºã掻çšãããŠããŸããQAãšã³ãžãã¢ã®ç§ãäž»ã«ãã¹ãäœææè[1]ã§AIãšãŒãžã§ã³ããæŽ»çšãå§ããå®è£ å¹çã¯ç¢ºãã«åäžããŸããããããåæã«ããããžã§ã¯ãåºæã®æèãçè§£ãããããšã®é£ãããæããŠããŸããã
AIãšãŒãžã§ã³ãã®åºåã«ããã課é¡äŸ
ãããã®ãã¹ããæžããŠãhogehogeã®ãã¹ããåèã«ããŠãããšãé¡ããããšãAIãæåã«åºããŠããææ¡ã«ã¯ä»¥äžã®ãããªèª²é¡ããããŸããã
- ãããžã§ã¯ãå ±éèšå®ã®çè§£äžè¶³
// äžèŠãªã¢ãã¯å®çŸ©ã®äŸïŒjest.config.mjsã§æ¢ã«èšå®æžã¿ïŒ
jest.mock('@/assets/icons/example.svg', () => 'SvgMock');
- ãã¹ãã±ãŒã¹åœåã®ã°ãã€ãã»æåŸ å€ãäžæç
// æåŸ
çµæãæœè±¡çã§ãäžæçãªåœå
it('ã¹ããããã¿ã³ã¯ãªãã¯æã«æ£ããåŠçãå®è¡ããã', async () => { ... });
- èŠçŽ ã®æ€çŽ¢æ¹æ³ã®ã°ãã€ã
// èŠçŽ æ€çŽ¢ã§ã¯ `getByRole`ãåªå
çã«äœ¿ã£ãŠã»ããããTestIdãèšå®ããŠããŸã
screen.getByTestId('login-button');
äžèšã®ãããªã¡ãã£ãšãããºã¬ãèµ·ãããã³ã«ãããããäžèŠãªã®ã§æ¶ããŠããæåŸ å€ãå ·äœçãã€æçåããŠããæ¡ä»¶äžèŽãããšãã®ãã¹ãã ãã§ãªããæ¡ä»¶äžäžèŽæã®ãã¹ããè¶³ããŠããªã©è¿œå ã®æç€ºãããå¿ èŠãããããäžçºã§äžå®ã®ã¯ãªãªãã£ã®ææ¡ãã»ãã...ããšæ©ãã§ããŸããã
詊ãã工倫ïŒèšå®ãã¡ã€ã«ã«ããã³ã³ããã¹ãã®å ±æ
ããŒã å
ã§çžè«ãããšããããåAIãšãŒãžã§ã³ãã®èšå®ãã¡ã€ã«ã«èšèŒã§ãããããšæããŠãããã詊ããŠã¿ãããšã«ããŸããã

slackã§çžè«ããæ§å
ïŒåèïŒå ¬åŒããã¥ã¡ã³ã
- https://docs.cursor.com/context/rules-for-ai
- https://github.com/cline/cline/tree/main/docs/prompting#clinerules-file-
èšå®ãã¡ã€ã«ã®äœæããã»ã¹
-
AIã䜿ã£ããããå°ã®äœæ by QAãšã³ãžãã¢
- æ¢åã®ãã¹ãã³ãŒããšç€Ÿå ã®ç¥èŠè³æãå ¥åæ å ±ãšããŠããã¿ãŒã³ã®æœåºãAIã«äŸé Œ
- AIãšå¯Ÿè©±ãããªãããã«ããŒããŠã»ãããã¹ã芳ç¹ãæŽç
-
ããŒã å ã§AIã®ãããå°ãã¬ãã¥ãŒ
- ã¢ããªéçºãšã³ãžãã¢ïŒReact Nativeã®ãäœæ³ããã¹ããã©ã¯ãã£ã¹ã®èгç¹
- QAãšã³ãžãã¢ïŒãã¹ãã®ç¶²çŸ æ§ãä¿å®æ§ã®èгç¹
ãã€ã³ããšããŠã¯ãæåããå®ç§ãç®æãããæ¢åã®è³ç£ã掻ãããŠæäœéå®ã£ãŠã»ããã«ãŒã«ãåçãšããŠæ€èšãããšããã§ããçæããããŒãžãŸã§ã®æéã¯çŽ1æ¥ã»ã©ã§ããã
èšå®ãã¡ã€ã«ã®äž»ãªãã€ã³ã
以äžã®ãããªé ç®ãèšèŒããŸãã (èŠçŽãã€äžéšæç²)ïŒ
# Testing Rules
## 1. ãã¹ããã¡ã€ã«ã®åºæ¬æ§é
- ãã¡ã€ã«é
眮ã»åœåèŠåïŒ`{ComponentName}.test.tsx`ïŒ
- çšéå¥åºæ¬ã€ã³ããŒãïŒéåžž/GraphQL/ã«ã¹ã¿ã ããã¯ïŒ
- ãã¹ããã¡ã€ã«ãã³ãã¬ãŒãïŒdescribeãããã¯ãsetupPage颿°ïŒ
## 2. ã¢ãã¯ãã¿ãŒã³
- èªåèšå®ãããã¢ãã¯ïŒSVGïŒ
- ãã䜿ãã¢ãã¯ãã¿ãŒã³ïŒã³ã³ããŒãã³ããã«ã¹ã¿ã ããã¯ãã¹ãã¬ãŒãžãGraphQLïŒ
- ç¶æ
管çã¢ãã¯ïŒjotaiïŒ
## 3. èŠçŽ ã®æ€çŽ¢åªå
é äœ
1. Role-based â screen.getByRole('button', { name: 'ãã¿ã³å' })
2. ããã¹ãããŒã¹ â screen.getByText('衚瀺ããã¹ã')
3. TestIDïŒæçµææ®µïŒâ screen.getByTestId('test-id')
## 4. ãã¹ãã±ãŒã¹ãã¿ãŒã³
- 衚瀺ã»é衚瀺確èªïŒåçãªèŠçŽ ãæ¡ä»¶ã«ãã衚瀺å€åïŒ
- ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³
- éåæåŠçïŒããŒãã£ã³ã°ãAPIã¬ã¹ãã³ã¹ïŒ
- ããã²ãŒã·ã§ã³ãã¢ãŒãã«
- ç¶æ
管çãã¹ã (ã¹ãã¬ãŒãžæäœ)
- ãšã©ãŒãã³ããªã³ã°
## 5. ãã¹ãã±ãŒã¹åœåèŠå
'[æ¡ä»¶]ã®ãšãã[å
·äœçãªæåŸ
çµæ]'
- äŸ 'ããã·ã¥éç¥ã¿ããæãéç¥ããŒã¿ãæ¢èªã«æŽæ°ãéç¥è©³çްç»é¢ã«é·ç§»ãã'
## 6. ãã¹ã芳ç¹ããšã«æããŠã»ãããã€ã³ã(å¿
é ã»æšå¥šå¥)
- ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³
- ããŒã¿ãã§ãã
- ç¶æ
ã«ãã衚瀺確èª
- ãã©ãŒã æäœ
- ããŒã¿æç¡ã«ãã確èª
- ã³ã³ããŒãã³ãé飿º
- ã¢ã¯ã»ã·ããªãã£
- æ¡ä»¶åå²ã«ãã確èªãã¿ãŒã³ (äŸ:æ¡ä»¶ãæºããå Žåã®æå/æ¡ä»¶ãæºãããªãå Žåã®æå)
å¹æãšæ°ã¥ã
ãããã®èšå®ãã¡ã€ã«ã远å ããããšã§ãAIãšãŒãžã§ã³ããžã®æç€ºããhogehogeãã¡ã€ã«ã®ãã¹ããæžããŠããšãã£ãã·ã³ãã«ãªãã®ã§ãããããžã§ã¯ãã®ãã¹ãããªã·ãŒãçè§£ããå®è£ ãææ¡ããŠãããããã«ãªããã¬ãã¥ãŒãæçŽãã®æéãæå°éã§æžãããã«ãªããŸããã
å°å ¥åŸã®äž»ãªæ¹åç¹ã¯ä»¥äžã®2ã€ã§ãã
-
AIãšãŒãžã§ã³ããçæãããã¹ãã³ãŒãã®åæå質ãåäž
- ãããžã§ã¯ãã®ã«ãŒã«ïŒã¢ãã¯ã®èšå®ãªã©ïŒãçè§£ããå®è£
- ãã¹ãã®ç®çãæç¢ºãªåœåãžã®æ¹å
- ãã¹ã芳ç¹ã®ãã€ã³ããæãããã¹ãå 容ãž
-
ãã¹ãäœæããã»ã¹ã®å¹çå
- AIãžã®è¿œå æç€ºã1åçšåºŠã§æžãããã«ïŒä»¥åã¯3ïœ5åã®è¿œå æç€ºãå¿ èŠïŒ
- 圢åŒé¢ã§ã®è¿œå æç€ºãæžãã人éã¯ããã¹ãã±ãŒã¹ã®åŠ¥åœæ§ç¢ºèªãã®ã¬ãã¥ãŒã«æ³šåã§ããããã«
ã¢ããªéçºãšã³ãžãã¢ããããæ°ããæ©èœã远å ããæããAIãšãŒãžã§ã³ãã«é Œãã°é«å質ãªãã¹ããäœã£ãŠãããã®ã§ãéçºã®é床ãšè³ªãäžãã£ãããšåã³ã®å£°ãããããŸããã

ç¬ããæ¢ãŸããªãã¢ããªéçºãšã³ãžãã¢
ãšã¯ãããçŸæç¹ïŒ2025幎åé ïŒã ããããåŸãããéå®çãªææãšãæããŠããŸãã
ç¹ã«Clineã¯æ¯èŒçå
·äœçãã€äžå¯§ãã«æç€ºãããªããšãããžã§ã¯ãæèã«ãã£ãææ¡ãäžçºã§åŸãããªã課é¡ããã£ãã®ã§ãä»åã®èšå®ãã¡ã€ã«ã«ããåæåè³ªãæ¹åã§ããŸãããä»åŸã®AIã®ç²ŸåºŠæ¹åã«ãããèšå®ãã¡ã€ã«ã§ãããŸã§çްããæå®ãããšãæ°ã®å¹ããææ¡ãããŠãããäžçã¯ããã«æ¥ãããªäºæãããŸãã
ãããã«
å°ããªå·¥å€«ã§ã¯ãããŸãããAIãšãŒãžã§ã³ããæŽ»çšãããã¹ãçæã®å¹çåã«ãããéçºé床ãšãããã¯ãå質ã®åäžã«ã€ãªãã£ãäºäŸã玹ä»ããŸãããä»åŸãAIããŒã«ã¯æ¥éãªé²åãç¶ããŠãããšæããŸããããã®æã ã§ãä»ã§ãã工倫ããçŽ æ©ãèŠã€ãç©ã¿éããŠããããšãæèããŠãããããšæããŸãã
çããã®ãããžã§ã¯ãã§ãã䌌ããããªå·¥å€«ãç°ãªãã¢ãããŒããããã°ããã²æããŠããã ãããšå¬ããã§ãã
çŸåšãUbieã§ã¯ãããªãæ¹åããããããããQAãšã³ãžãã¢ã®æ¡çšã匷åããŠããŸãã
LLMãæŽ»çšããQA掻åã®ã¢ããããŒãã«èå³ã®ããæ¹ããã²äžç·ã«åããŸããã?
äžèšåéãXã®DM ã§ãé£çµ¡ããã ãããšå¬ããã§ãã ã«ãžã¥ã¢ã«é¢è«ã倧æè¿ã§ã!!
-
çŸåšã¢ããªããŒã ã§ã¯ãReact Nativeã®ã€ã³ãã°ã¬ãŒã·ã§ã³ãã¹ããäžå¿ã«ãã¹ãæ¡å ãé²ããŠãããæ°èŠæ©èœã¯ã¢ããªéçºãšã³ãžãã¢ãæ¢åæ©èœã¯QAãšã³ãžãã¢+æ¥åå§èšãšã³ãžãã¢ãšããåæ ã§äœæ¥ãæ åœããŠããŸããåãçµã¿ã®èæ¯ã«ã€ããŠã¯ä»¥äžãåç §â https://zenn.dev/ubie_dev/articles/6b73f18420861f â©ïž
Ubieæ ªåŒäŒç€Ÿã®ããã¯ããã°ã§ãã æ¡çšæ å ±ïŒrecruit.ubie.life
Discussion