
çæAI PRã¬ãã¥ãŒ pr-agentããCodeRabbitãžã®ä¹ãæã
â»ãã®èšäºã¯èªåãæå±ããçµç¹ã§æžãã以äžã®èšäºã®ã³ããŒã§ããæçš¿ããèšäºã¯å人ã®èäœç©ãšããŠèªããã°ã«ã³ããŒããŠè¯ãã«ãŒã«ãšããŠããŸãã
https://tech-blog.mitsucari.com/entry/2025/03/25/091758
ããã«ã¡ã¯ãããã«ãªCTOã®å¡æ¬ããšãã€ãã³ãŒ(@tsukaby0) ã§ãã
ããã«ãªã§ã¯AIãç©æ¥µæŽ»çšããŠéçºå¹çãçç£æ§ãé«ããããšæ¥ã æ¹åãããŠããŸããä»åã¯çæAIã³ãŒãã¬ãã¥ãŒããŒã«ã«é¢ãã話ãããããšæããŸãã
ã³ãŒãã¬ãã¥ãŒããŒã«ããã³æŽå²
2022幎ã«ChatGPTããªãªãŒã¹ããããã®åŸ2023幎ã¯çæAIå 幎ãšãªã£ãããã«æããŠããŸãã2023幎ãš2024幎ã«æ§ã ãªçæAIããŒã«ããµãŒãã¹ãç»å ŽããŸãããAIã«ããã³ãŒãã¬ãã¥ãŒããã®ãã¡ã®1ã€ã§ãã
çæAIã®ããã©ãŒãã³ã¹ãè¯ããããçæAIã«ã³ãŒãã®ã¬ãã¥ãŒããããããšãããã®ã§ã話ã¯åçŽã§ããããã®ãããªããŒã«ã¯æ°ãããã®ã§ã¯ãªãããããªãã«æŽå²ããããŸãã
äŸãã°FindBugsãšãããããªãã°æ€åºããŒã«ãéç解æããŒã«ãæãããããŸããããã¯æ£ç¢ºã«ã¯AIã§ã¯ãªããã«ãŒã«ããŒã¹ã®æ€åºããã¿ãŒã³ãããã§ãããç®çãšããŠã¯AIã³ãŒãã¬ãã¥ãŒãšåãã§ãåé¡ã®æ©æçºèŠãèªååã«ãã人éã®è² è·è»œæžã§ãã
FindBugsã¯ãµãŒãã¹ã§ã¯ãªãããŒã«ã§ãããCode ClimateãšãããããªæåãªãµãŒãã¹ããããŸãïŒâ»çè ã¯å©çšããããšã¯ãããŸããããŸããã³ãŒãã¬ãã¥ãŒãµãŒãã¹ãšèšãããã¯å質管çãµãŒãã¹ãšããæ¹ãè¿ãã§ãïŒã
æè¿ã®Code ClimateãçæAIã§ã¯ãªããšæããŸããããã®åŸã«åŸã ã«AIãšåŒã¹ãé åã«çºå±ããŠãããŸãããäŸãã°ãAmazon CodeGuru Securityãšãããã®ããããŸããããã¯ä»¥åã¯CodeGuru Reviewerãšãã補ååã ã£ãã¯ãã§ãããããå€ãã£ãã®ã ãšæããŸããããã¯æ©æ¢°åŠç¿ã«ãããã¿ãŒã³ãããã§èªåã§ã¬ãã¥ãŒãããããšãããã®ã§ããã€ãŸãã¯AIã¬ãã¥ãŒããŒã«ã§ãã
æ©æ¢°åŠç¿ãå ¥ã£ãŠãã段éããAIã¬ãã¥ãŒãšèšã£ãŠãéèšã§ã¯ãªããšæããŸãã®ã§ããã®é åã¯5,6幎åãããããšèšãããã§ããè¿å¹Žã§ã¯ããã«æ©æ¢°åŠç¿ã®æŽŸç圢ãšãèšããçæAIãå ¥ã£ãŠããããšããç¶æ³ã§ãã
pr-agent
çæAIã«ã³ãŒãã¬ãã¥ãŒãããããã®ã¯ããã€ããããŸããäŸãã°æè¿è©±é¡ã®ChatGPT o1-proãClaude Codeããããã䜿ãclineãªã©ãåºçŸ©ã®æå³ã§ã¯ã¬ãã¥ãŒããŒã«ãšèšãããã§ãããä»åã¯èªåã§GitHub PRãã¬ãã¥ãŒãããã®ã察象ãšããŸãã
ãããå®çŸããããŒã«ã«pr-agentãšãããã®ããããŸããããã¯ChatGPTçã®API tokenãäžããŠãããã䜿ã£ãŠã¬ãã¥ãŒããPRã«æ å ±ãä»ã足ããšãããã®ã§ãã
pr-agentã«ã€ããŠã¯ä»¥äžã®èšäºãåèã«ãªããŸãã
https://recruit.gmo.jp/engineer/jisedai/blog/chatgpt-pr-agent-github-actions/
https://zenn.dev/taroshun32/articles/pr-agent-pull-request-ai-review
pr-agentãéçšããŠã¿ã
ãŸããpr-agentã®è¯ããšããã¯äœã³ã¹ãã§å§ãããããšããããšã§ããäœæãããPRã®éãªã©ã«ããããŸãããããã«ãªç€Ÿã®å ŽåãæãããããŒã å šäœã§$10çšåºŠã§ãããããã¯åŸè¿°ããCodeRabbitãšæ¯èŒããŠå§åçã«å®ãã§ãããŸããã·ã¹ãã ããã³ãããäžããããã®ã§æ¥æ¬èªåããç¹å®ã®ã«ãŒã«ãæã蟌ãããšãã§ããŸãã
ãã ããéçšããŠã¿ãŠãåŒç€ŸãšããŠã¯æåŸ ããå¹æã¯åŸãããŸããã§ããã以äžã¯å®éã«äžéšã®éçºã¡ã³ããŒã«ãã¢ãªã³ã°ããçµæã§ãã
ãŸããpr-agentã¯æ®å¿µãªããçŸæç¹ã§ã¯è¡åäœã®ææãè¡ãæ©èœãæã£ãŠããŸãããã€ãŸã人éãšåãããã«ããã¯ããå€ããã¹ãããšãããããªãã现ããææã¯ã§ããŸããã
次ã«PRã®èŠçŽãè¡ãæ©èœããããŸãããããŸãå¿ èŠæ§ãæããŸããã§ããã
ãã®ããã«PRã®descriptionã«èªåã§èŠçŽå 容ãèšè¿°ããŠãããŸããããã®çšåºŠã®æ å ±ã¯èªåã§æžãã»ãã粟床ãé«ãããAIã«ã¯ãŸã ä»»ããããªããªãšæããŸããããŸããããããã®çšåºŠã®å 容ã§ããã°ã³ãŒããèŠãã°èªæãªã®ã§descriptionã«æžãå¿ èŠã¯ãªãããããšã¯å¥ã®ã¿ã¹ã¯ã®èæ¯ãªã©ã®ã³ã³ããã¹ãæ å ±ãPRã«ã¯æžããããšããã§ãããªãããããã®ããããããã®ãããªã©ããããããã¯åœç¶ã§ããAIã¯èªã¿åããŸããã
ãããã£ãçç±ããèŠçŽã¯ããŸã䟡å€ãæããŠããŸããã§ããã
次ã«èå¿ã®PRã¬ãã¥ãŒã§ãããããã¯ç²ŸåºŠãäœãããŸãã«ã¹ã¿ãã€ãºãé£ãããšæããŸããã
äŸãã°ä»¥äžã®ããã«PRã«ã³ã¡ã³ããè¿œå ãããŠã¬ãã¥ãŒãããŸãã
secrets.ymlã«ããŒãã³ãŒããã¹ãã§ã¯ãªããšããã®ã¯ãã®éããªã®ã§ãããããã«ãªã®å Žåãdevç°å¢ã®ã·ãŒã¯ã¬ããã«é¢ããŠã¯æŒæŽ©ããŠããªã¹ã¯ãäœããç°å¢å€æ°ç®¡çãéã¿ãŠçŽæ¥åã蟌ãã§è¯ãããšãšããŠããŸããããã¯è³åŠäž¡è«ãããšæããŸãããçæ³ã§ã¯ãªãã®ã§æ¹åãã¹ãç¹ã§ã¯ãããŸãããäžèŠãªææã ãšæããŸãã
Code smellã®ããŒãã³ãŒãããããã¹ã詳现ã¯å²æããŸãããããã¯å¯Ÿå¿ããªããŠè¯ãé¡ã®ãã®ã§ãã
ãã®ãããªææã«å¯ŸããŠAIã«åŠç¿ããããããã³ãããã¥ãŒãã³ã°ããŠããç°¡åãªæ¹æ³ããªãé¢åã§ãã
ãããã£ãçç±ããããŸã掻çšãããªãç¶æ ãç¶ããŠããŸããã
CodeRabbitãžã®ä¹ãæã
pr-agentãšã¯å¥ã«CodeRabbitãšãããã®ããããŸããããšããšã¯pr-agentãšåããOSSã§ãã£ãããã§ãããããæãå¢ã«è£œååããããã§ããä»ã§ã¯ã¢ãŒã«ã€ãããããªããžããªãããã ãã§æŽæ°ãããŠããªãã¯ããªã®ã§å©çšããå Žåã¯è£œåãå¥çŽããããšãªããŸãã
CodeRabbitã®å°å ¥ã«ã€ããŠã¯ä»¥äžã®èšäºãåèã«ãªããŸãã
https://qiita.com/ysk91_engineer/items/47cff12d0625f003d50d
è¡åäœã®ã¬ãã¥ãŒã¯è¯ãã§ãããã¬ãã¥ãŒç²ŸåºŠãæµç³ã«è£œåçã®ã»ããé«ãã§ãããããæåŸ ãæãŠãŸãããããã£ãçç±ããä¹ãæããŠã¿ãããšã«ããŸãããä¹ãæãã¯GitHubã®integrationã¢ããªãšããŠæäŸãããŠããããã30åçšåºŠã®æäœã§ããã«çµãããŸãã
CodeRabbitãéçšããŠã¿ã
ãŸã14æ¥ã®ãã©ã€ã¢ã«ãã§ããç¹ãè¯ãã§ããããã®åŸããã©ã€ã¢ã«çµäºåŸã¯GitHubã®ããŒã ã¡ã³ããŒå šå¡ã®seatãè²·ãããæ°éæå®ã§seatãè²·ããããšããããšãéžã¹ãŸããã€ãŸããPRã®æ°ãå°ãªãããããã¯ã³ãŒãã¬ãã¥ãŒã®å¿ èŠæ§ãäœããããŒãžã£ãã·ãã¢ã¬ãã«ã«ã¯seatãå²ãåœãŠãã«ããžã¥ãã¢ãããã«ã«ã ãseatãå²ãåœãŠãŠãã³ã¹ãåæžãããšããããšãã§ããŸãã
äŸ¡æ Œã«ã€ããŠã¯ä»¥äžã«ããéãLiteã$12/mo/user, Proã$24/mo/userãªã®ã§ãpr-agentã«æ¯ã¹ããšããªãé«ãã§ããããããæ2000åã»ã©ã§ã¬ãã¥ã¯ãŒã®ã³ã¹ããåæžã§ãããšèãããšãè²·ãåŸãšãèšããŸãã
https://www.coderabbit.ai/pricing
èŠçŽæ©èœã¯pr-agentãšã»ãšãã©åãã§ããããã¯ç®æ°ãããã®ã¯ç¹ã«ãããŸããã
以äžã¯ã³ã¡ã³ãã»ã¬ãã¥ãŒã®äŸã§ãã
ä»åã®PRçšåºŠã§ããã°ã·ãŒã±ã³ã¹å³ã¯äžèŠã§ããããã€ãºã§ãããç¶æ³ã«ãã£ãŠã¯äœ¿ãããã§ãããŸããPRã®èæ¯ã«è©³ãããªããžã¥ãã¢ãšã³ãžãã¢ãªã©ãã¬ãã¥ãŒããå Žåã¯åèã«ãªããããããŸããã
ã¬ãã¥ãŒã®ç²ŸåºŠã¯äžãã£ããããªæ°ãããŠããŸããããããã§ãããpr-agentãšéã£ãŠCodeRabbitã®éçºåŽã§RAGã ãšãã·ã¹ãã ããã³ããã ãšãã®ãã¥ãŒãã³ã°ãé 匵ã£ãŠãããŠããã®ããªãšæã£ãŠããŸããäŸãã°åãPRã§ä»¥äžã®ãããªææãnitsãšããŠåºãããŸããã
ãã®PRã¯CIã§jsonãã¡ã€ã«ããã§ãã¯ããŠvalidãã©ãã確ããããšããåçŽãªãã®ã§ãããç§ã®ãã¹ã«ãã£ãŠtypoã«ãªã£ãŠããéšåããã£ããææããŠãããŠããŸã(EmacsããŒãã€ã³ããªã®ã§ããŸã«äžèŠã«fãæ··å ¥ãã)ããŸãããã¡ã€ã«åã«ã¹ããŒã¹ãããã±ãŒã¹ã®èª¬æããããŠããŸãããã®ææã¯ãããã察å¿ããã»ã©ã®ãã®ã§ã¯ãªãã§ããã確ãã«ãã®æžå¿µã¯ãããŸããã
ä»åã¯ããããnitsã ã£ãã®ã§è¡åäœã§ã®ææã«ãªããŸããã§ãããã以äžã®äŸã®ããã«è¡åäœã§ã®ææãè¡ã£ãŠãããŠããŸãã
ãã®ææã¯çã£åœãªãã®ã§ãããã®ãé°ã§ã¬ãã¥ã¯ãŒã®è² æ
ãå®éã«ïŒã€æžã£ãŠããŸãããŸãã coderabbitai[bot] marked this conversation as resolved.
ã Addressed in commit 827b068
ãšããããã«ãä¿®æ£ã³ããããèªåã§æ€ç¥ããŠèªåã§Resolveã«ããŠãããŠããŸããããã¯æ¥œã§ããã§ããã
ãã¡ããã粟床ã¯äžãã£ããã®ã®ãäžèŠãªææãååšããŸãã
ãã®ææã¯ä»¥äžã®ãããªã³ãŒãã
export const ComponentA: React.FC = () => {
return (
<div>
å®éã«ã¯é·ãã³ãŒããçç¥
</div>
);
}
以äžã®ããã«æžãæãããšãã«
export const ComponentA: React.FC = () => {
if (fooFeatureFlag) {
return (
<div>
å®éã«ã¯é·ãã³ãŒã_ver2ãçç¥
</div>
);
} else {
return (
<div>
å®éã«ã¯é·ãã³ãŒããçç¥
</div>
);
}
}
code cloneããããããšææããããã®ã§ãã確ãã«çã£åœãªææã§ãããfeatureFlagã«ãã£ãŠåå²ããŠãããå ã®ããžãã¯ãå€ããããªãããããããŠããã ãã§ãéè€ã¯äžæçãªãã®ã ããåé¡ãªããšãã解説ãããŠããŸããããã«å¿ããŠCodeRabbitãLearningããŠããŸãããå®éã«ãããä»åŸã©ã®çšåºŠå¹ããŠããããŸã§ã¯ææ¡ã§ããŠããŸããããpr-agentããã¯é¥ãã«åŠç¿ããã¥ãŒãã³ã°ã¯ç°¡åã«æããŸããæåŸ ãæãŠãŸããã
ãªããAIã«å¯Ÿããåœä»€ã¯ä»¥äžã®ããŒãžã§ä»æ§ãèšå®ã確èªã§ããŸãã
[https://docs.coderabbit.ai/guides/review-instructions/]
åŠç¿ç¶æ³ã«ã€ããŠã¯Web GUIäžã®Learningsã§ç¢ºèªã§ããŸãã
äœè«
ããŒã ã¡ã³ããŒããã®CodeRabbitãžã®ææã軜ãå ±æããŸãã
- ããšã ããã£ãããè¿ä¿¡ãããšç¡æ©è³ªã§ãªãåçãè¿ã£ãŠãããšããã«å°ããŠãŒã¢ã¢ãæããã楜ãã
- pr-agentæ代ããã¬ãã¥ãŒã®å質ãé«ããªã£ã
- 䜿ãã
ãŸããå¥ã®äœè«ã§ãããFeature Flagã£ãŠäœïŒãšããæ¹ã¯ä»¥äžã®èšäºã埡芧ãã ããã
https://tech-blog.mitsucari.com/entry/2025/02/06/094201
ãŸãšã
- pr-agentãå°å ¥ããŠäœã³ã¹ãã§è¯ãã£ããã®ã®ãäžæã䜿ãããªããªãã£ããæ©èœäžè¶³ã ãšæãã
- CodeRabbitã«ä¹ãæããŠã³ã¹ãã¯å¢ãããã®ã®ãäžå®æåŸ ããå¹æãAIã«ããèªåã¬ãã¥ãŒãå®çŸã§ããããã«ãªã£ã
çŸåšãããã«ãªã§ã¯ITãšã³ãžãã¢ãåéããŠããŸããããã«ãªã¯çæAIãç©æ¥µçã«æŽ»çšããéçºè äœéšãå¹çåäžãå³ã£ãŠããŸããèå³ã®ããæ¹ã¯ãã²ãæ°è»œã«ãé£çµ¡ãã ããïŒ