
OpenAI Codex ã®äœ¿ãæ¹
以äžã®èšäºãé¢çœãã£ãã®ã§ãç°¡åã«ãŸãšããŸããã
åå
1. Codex
ãCodexãã¯ã¯ã©ãŠãããŒã¹ã®ãœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ãšãŒãžã§ã³ãã§ããããã°ä¿®æ£ããã³ãŒãã¬ãã¥ãŒãããªãã¡ã¯ã¿ãªã³ã°ãããŠãŒã¶ãŒããã®ãã£ãŒãããã¯ã«åºã¥ããã³ãŒãä¿®æ£ããªã©ã«å©çšã§ããŸããå®äžçã®ãœãããŠã§ã¢éçºåãã«æé©åããão3ãæèŒããŠããŸãã
OpenAIã§ã¯ãéçºè ãèªãäž»å°æš©ãæ¡ããé¢åãªäœæ¥ããšãŒãžã§ã³ãã«å§ä»»ããæªæ¥ãä¿¡ããŠããŸãããCodexããç¬èªã®ç°å¢ã§åäœãããªããžããªã§ãã«ãªã¯ãšã¹ããäœæããŠããããšããããã®æªæ¥ã®å ããèŠããŠããŸãã
2. GitHubã®æ¥ç¶
ãCodexããšãŒãžã§ã³ãã«GitHubãªããžããªãžã®ã¢ã¯ã»ã¹ãèš±å¯ããã«ã¯ãGitHubã¢ããªãçµç¹ã«ã€ã³ã¹ããŒã«ããŠãã ãããå¿ èŠãªæš©éã¯ãããªããžããªã®ã¯ããŒã³äœæããšããã«ãªã¯ãšã¹ãã®ããã·ã¥ãã®2ã€ã§ããã¢ããªã¯ããŠãŒã¶ãŒã®èš±å¯ãªãã«ãªããžããªã«æžã蟌ã¿ãè¡ãããšã¯ãããŸããã
çµç¹å ã®åãŠãŒã¶ãŒã¯ããCodexãã䜿çšããåã« GitHub ã¢ã«ãŠã³ãã§èªèšŒããå¿ èŠããããŸããèªèšŒåŸãChatGPTã¯ãŒã¯ã¹ããŒã¹ã¬ãã«ã§GitHubãªããžããªãšç°å¢ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããŸããã€ãŸããããŒã ã¡ã€ãããªããžããªãžã®ã¢ã¯ã»ã¹ãèš±å¯ããå Žåãã¯ãŒã¯ã¹ããŒã¹ãå ±æããŠããéãããã®ãªããžããªã§ãCodexãã¿ã¹ã¯ãå®è¡ã§ããããã«ãªããŸãã
3. Codex ã®ããã¿
ããã³ãããæå®ãããšããšãŒãžã§ã³ãã¯ç¬èªã®ç°å¢ã§äœæ¥ãéå§ããŸããçŽ8ïœ10ååŸããšãŒãžã§ã³ãã¯å·®åãè¿ããŸãã
ããã³ããã¯ã確èªãæ±ããããšãã³ãŒããã®ã©ã¡ãã§ãå®è¡ã§ããŸãã ã確èªãæ±ããããéžæãããšããCodexãã¯ãªããžããªã®èªã¿åãå°çšããŒãžã§ã³ãã¯ããŒã³ããèµ·åãé«éåããåŸç¶ã®ã¿ã¹ã¯ãæäŸããŸããäžæ¹ã ãã³ãŒããã§ã¯ããšãŒãžã§ã³ããå®è¡ããã³ãã¹ãã§ããæ¬æ Œçãªç°å¢ãäœæãããŸãã
(1) ãchatgpt.com/codexãã«ã¢ã¯ã»ã¹ããŠã¿ã¹ã¯éä¿¡ã
(2) ãbase imageãåºã¥ããŠæ°ããDockerã³ã³ãããèµ·åã
ãªããžããªãä»»æã®branchãŸãã¯shaã«ã¯ããŒã³ããæå®ãããworkdirããã»ããã¢ããã¹ã¯ãªãããå®è¡ããŸãã
(3) ãããã¯ãŒã¯ã¢ã¯ã»ã¹ãç¡å¹åã
ãšãŒãžã§ã³ãã¯ãã以éãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ã§ããªããªããŸãã
(4) ãšãŒãžã§ã³ãã¯ã¿ãŒããã«ã³ãã³ããã«ãŒãã§å®è¡ã
ã³ãŒããèšè¿°ãããã¹ããå®è¡ããåäœç¢ºèªã詊ã¿ãŸãããšãŒãžã§ã³ãã¯ãAGENTS.mdãã¡ã€ã«ã§å®çŸ©ãããlintã³ãã³ããŸãã¯ãã¹ãã³ãã³ããéµå®ããããšããŸãããšãŒãžã§ã³ãã¯ãæå®ãããã¿ãŒããã«ãŸãã¯CLIããŒã«ä»¥å€ã®ç¹å¥ãªããŒã«ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã
(5) ãšãŒãžã§ã³ããã¿ã¹ã¯ãå®äºãããšãå·®åãŸãã¯äžé£ã®ãã©ããŒã¢ããã¿ã¹ã¯ã衚瀺ã
ãã«ãªã¯ãšã¹ãïŒPRïŒãéããããã©ããŒã¢ããã³ã¡ã³ãã§è¿ä¿¡ããŠè¿œå ã®å€æŽãäŸé Œããããéžæã§ããŸãã
4. Codex ã«ã¿ã¹ã¯éä¿¡
ãªããžããªãæ¥ç¶ããããæ¬¡ã®2ã€ã®ã¢ãŒãã®ããããã䜿çšããŠã¿ã¹ã¯éä¿¡ããŸãã
ã»Askã¢ãŒã (確èªãæ±ãã)
ãã¬ã€ã³ã¹ããŒãã³ã°ãç£æ»ãã¢ãŒããã¯ãã£ã«é¢ãã質åã«äœ¿çšããŸãã
ã»Codeã¢ãŒã (ã³ãŒã)
èªåãªãã¡ã¯ã¿ãªã³ã°ããã¹ããä¿®æ£ãé©çšãããå Žåã«äœ¿çšããŸãã
以äžã¯ãCodex ã䜿ãå§ããããã®ã¿ã¹ã¯äŸã§ãã
4-1. Askã¢ãŒãã®ã¿ã¹ã¯äŸ
ãAskã¢ãŒããã䜿çšãããšãã³ãŒãã®å€æŽãªãã§ãã¢ããã€ã¹ãæŽå¯ãåŸãããšãã§ããŸãã
ã»ãªãã¡ã¯ã¿ãªã³ã°ã®ææ¡
ãCodexã ã¯ãããã¡ã€ã«åå²ãã颿°æœåºããããã¥ã¡ã³ã匷åããªã©ãæ§é çãªæ¹åã«ã€ããŠã®ãã¬ã€ã³ã¹ããŒãã³ã°ã«åœ¹ç«ã¡ãŸãã
<hairiest file in my codebase> ãèŠãŠãã ããã
ãããåå²ãããã¹ãããæ©èœãåé¢ããããã®ããè¯ãæ¹æ³ãææ¡ããŠãã ããã
ã»Q&Aãšã¢ãŒããã¯ãã£ã®çè§£
ãCodexãã¯ãã³ãŒãããŒã¹ã«é¢ãã詳现ãªè³ªåã«çãããã€ã¢ã°ã©ã ãçæããŸãã
ã¯ã©ã€ã¢ã³ããšã³ããã€ã³ãããããŒã¿ããŒã¹ãŸã§ã®å®å šãªãªã¯ãšã¹ããããŒãææžåããmeâârmaidjs ãã€ã¢ã°ã©ã ãäœæããŠãã ããã
4-2. Codeã¢ãŒãã®ã¿ã¹ã¯äŸ
ãCodexãã§ã³ãŒããç©æ¥µçã«å€æŽãããã«ãªã¯ãšã¹ããæºåããå Žåã¯ããCodeã¢ãŒããã䜿çšããŸãã
ã»ã»ãã¥ãªãã£è匱æ§
ãCodexãã¯ãè€éãªããžãã¯ãç£æ»ããã»ãã¥ãªãã£äžã®æ¬ é¥ãçºèŠããããšã«åªããŠããŸãã
<my package> ã«ã¡ã¢ãªå®å šæ§ã®è匱æ§ããããŸããçºèŠããŠä¿®æ£ããŠãã ããã
ã»ã³ãŒãã¬ãã¥ãŒ
ãã«ãªã¯ãšã¹ãã®URLã«.diffã远å ããããã³ããã«å«ããŸãããCodexãã¯ã³ã³ããå
ã«ããããèªã¿èŸŒã¿ãŸãã
ç§ã®ã³ãŒããã¬ãã¥ãŒããŠæ¹åç¹ãææ¡ããŠãã ãããdiffã¯ä»¥äžã®éãã§ãã
<diff>
ã»ãã¹ãã®è¿œå
æåã®å€æŽãå®è£
ããåŸãã¿ãŒã²ãããçµã£ããã¹ãçæã宿œããŸãã
ç§ã®ãã©ã³ãããã以äžã®ãã¡ã€ã«ã®ãã¹ãã远å ããŠãã ããã
<files>
ã»ãã°ä¿®æ£
ãCodexããåé¡ãç¹å®ããŠä¿®æ£ããã«ã¯ãéåžžãã¹ã¿ãã¯ãã¬ãŒã¹ã ãã§ååã§ãã
<my package> å ã®ãã°ãèŠã€ããŠä¿®æ£ããŸãã
ã»è£œåãšUIã®ä¿®æ£
ãCodexãã¯ãã©ãŠã¶ãã¬ã³ããªã³ã°ããããšã¯ã§ããŸãããã軜埮ãªUIã®äžå
·åãä¿®æ£ã§ããŸãã
ãªã³ããŒãã£ã³ã°ããŒãžã®ã¢ãŒãã«ãäžå€®ã«é 眮ãããŠããŸãããä¿®æ£ããŠãã ããã
5. é«åºŠãªèšå®
ãCodexãã¯ããã«äœ¿çšã§ããŸãããã«ã¹ã¿ã ç°å¢ãæå®ããŠãšãŒãžã§ã³ãã«ãäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ããã³ã³ãã€ã«ããlintãããã¹ããããµãŒãã¹ã®èµ·åãããããžã§ã¯ãã®ããŒãºã«åãããŠå®è¡ãããããšãã§ããŸãã
5-1. ç°å¢ã®äœæ
ããã©ã«ãã§ã¯ããšãŒãžã§ã³ãã¯ãŠãããŒãµã«ã€ã¡ãŒãžãå®è¡ããDockerã³ã³ããå ã§å®è¡ãããŸããäž»èŠãªèšèªïŒPythonãGoãRustãJavaãRubyïŒãããªã€ã³ã¹ããŒã«ãããŠããŸããããŒã¹ãšãªãDockerfileãåç §ããŠãã ããã
5-2. ã»ããã¢ããã³ãã³ãã®è¿œå
ãªããžããªã /workspace ãã£ã¬ã¯ããªã«ã¯ããŒã³ãããåŸãæå®ããããã¹ãŠã®ã»ããã¢ããã³ãã³ããå®è¡ãããŸãã
ãšãŒãžã§ã³ãããæè¯ã®çµæãåŸãã«ã¯ãäŸåé¢ä¿ (ãããªãã¯ãšãã©ã€ããŒã)ãlint ãã¬ãŒã ã¯ãŒã¯ããŠããããã¹ãã®å®è¡ã«å¿ èŠãªãã®ããã¹ãŠã€ã³ã¹ããŒã«ããŠãã ãããã»ããã¢ããã³ãã³ã (1è¡ã«è€æ°ã®ã³ãã³ãããŸãã¯1è¡ã«1ã€ã®ã³ãã³ã) ãæå®ããã»ããã¢ãããã¡ã€ã«ããªããžããªã«è¿œå ããŸãã
5-3. AGENTS.md ãäœæ
ãAGENTS.mdãã远å ããŠãå ±éã®ã³ã³ããã¹ããæäŸããŸããããã¯ããšãŒãžã§ã³ãããªããžããªå ã§ã®åäœãçè§£ããããã«èªã¿èŸŒãæšæºç㪠Markdownãã¡ã€ã«ã§ãããAGENTS.mdããã¹ãå¯èœã§ããšãŒãžã§ã³ãã¯ããã©ã«ãã§ãæããã¹ããããã«ãŒããåç §ããŸãããŠãŒã¶ãŒã«ãã£ãŠã¯ããšãŒãžã§ã³ãã« .currsorrules ãŸãã¯ãCLAUDE.mdãæç€ºçã«æ€çŽ¢ããããã«æç€ºããå ŽåããããŸããçµç¹å šäœã®èšå®ã¯ããã®ãã¡ã€ã«ã§å ±æããããšãæšå¥šããŸãã
äžè¬çã«å«ãããå 容ã¯ã次ã®ãšããã§ãã
ã»äœæ¥å¯Ÿè±¡ãšãªããã¡ã€ã«ãšãã©ã«ãã®æŠèŠ
ã»è²¢ç®å 容ãšã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³
ã»ç§»è¡å¯Ÿè±¡ãšãªãã³ãŒãããŒã¹ã®æ§æèŠçŽ
ã»å€æŽã®æ€èšŒæ¹æ³ïŒlint ã®å®è¡ããã¹ããªã©ïŒ
ãAGENTS.mdãã®ãã¡ã€ã«æ§æäŸã¯ã次ã®ãšããã§ãã
# ã³ã³ããªãã¥ãŒã¿ãŒã¬ã€ã
## éçºç°å¢ã®ãã³ã
- ls ã§ã¹ãã£ã³ãã代ããã«ã pnpm dlx turbo run where <ãããžã§ã¯ãå> ãå®è¡ããŠããã±ãŒãžãžãžã£ã³ãããŸãã
- pnpm install --filter <ãããžã§ã¯ãå> ãå®è¡ããŠããã±ãŒãžãã¯ãŒã¯ã¹ããŒã¹ã«è¿œå ããViteãESLintãTypeScript ãåç
§ã§ããããã«ããŸãã
- pnpm create vite@latest <ãããžã§ã¯ãå> -- --template react-ts ã䜿çšããŠãTypeScript ãã§ãã¯ãæºåãããæ°ãã React + Vite ããã±ãŒãžãèµ·åããŸãã
- åããã±ãŒãžã® package.json å
ã® name ãã£ãŒã«ãã確èªããæ£ããååã§ããããšã確èªããŸããæäžäœã®ãã®ã¯ã¹ãããããŠãã ããã
## ãã¹ãæé
- .github/workflows ãã©ã«ãã«ãã CI ãã©ã³ãèŠã€ããŸãã
- pnpm turbo run test --filter <ãããžã§ã¯ãå> ãå®è¡ããŠããã®ããã±ãŒãžã«å®çŸ©ãããŠãããã¹ãŠã®ãã§ãã¯ãå®è¡ããŸãã
- ããã±ãŒãžã®ã«ãŒããã pnpm test ãåŒã³åºãã ãã§æžã¿ãŸããã³ãããã¯ããŒãžåã«ãã¹ãŠã®ãã¹ãã«åæ Œããå¿
èŠããããŸãã
- 1ã€ã®ã¹ãããã«éäžããã«ã¯ãVitestãã¿ãŒã³ã远å ããŸã: pnpm vitest run -t "<ãã¹ãå>"ã
- ãã¹ãã¹ã€ãŒãå
šäœãã°ãªãŒã³ã«ãªããŸã§ããã¹ããšã©ãŒãŸãã¯åãšã©ãŒãä¿®æ£ããŸãã
- ãã¡ã€ã«ãç§»åããããã€ã³ããŒãã倿ŽãããããåŸã¯ãpnpm lint --filter <ãããžã§ã¯ãå> ãå®è¡ããŠãESLintãšTypeScriptã®ã«ãŒã«ããã¹ããŠããããšã確èªããŸãã
- ããšã誰ãããæç€ºããªãã£ããšããŠãã倿Žããã³ãŒãã®ãã¹ãã远å ãŸãã¯æŽæ°ããŸãã
## PRã®æç€º
ã¿ã€ãã«ã®åœ¢åŒ: [<ãããžã§ã¯ãå>] <ã¿ã€ãã«>6. ããã³ããã®ãã³ã
ChatGPTãšåæ§ã«ããCodexãã®å¹æã¯ãŠãŒã¶ãŒãäžããæç€ºã«ãã£ãŠæ±ºãŸããŸãã以äžã®ãã³ããæŽ»çšããŠãã ããã
ã»grep å¯èœãªååã䜿çšããŠãã ããã
ãCodexãã¯æåéã grep ãåŒã³åºããããç¹å®ã®ãã¡ã€ã«åãã·ã³ãã«ããŸãã¯äžæã®ããã±ãŒãžåã䜿çšãããšãé©åãªå ŽæãçŽ æ©ãèŠã€ããããšãã§ããŸããå éšçã«ã¯ããCodexãé¢é£ããã±ãŒãžã«ã¯ wham ãšãããã¬ãã£ãã¯ã¹ã䜿çšããŠããŸãã
ã»äœæ¥å Žæãæå®ããŠãã ããã
ãCodexãã¯ãåäžã®ãã¡ã€ã«ããŸãã¯æå€§ã§ 100 åçšåºŠã®ãã¡ã€ã«ãå«ãããã±ãŒãžãæå®ãããšãæé©ãªããã©ãŒãã³ã¹ãçºæ®ããŸããæŒ ç¶ãšããæç€ºã§ã¯ããšãŒãžã§ã³ããæšæž¬ãããããããŸããã
ã»å®å šãªã¹ã¿ãã¯ãã¬ãŒã¹ã貌ãä»ããŠãã ããã
ãã¡ã€ã«ãã¹ãšè¡çªå·ãå«ãæ£ç¢ºãªã¹ã¿ãã¯ãã¬ãŒã¹ã¯ããCodexãããã°ãå³åº§ã«ç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
ã»è€æ°ã®ã¿ã¹ã¯ãé£ç¶ããŠå®è¡ããŠãã ããã
åã¿ã¹ã¯ã¯ç¬ç«ããç°å¢ã§å®è¡ããããããè€æ°ã®ã¿ã¹ã¯ãåæã«ãã¥ãŒã«å ¥ããŠãåé¡ãããŸãããOpenAI ã®å€ãã®ãšã³ãžãã¢ã¯ãç°¡å㪠ToDo ãªã¹ããäœæããè€æ°ã®ã¿ã¹ã¯ãäžåºŠã«å®è¡ããããšããäžæ¥ãå§ããŸãã
ã»äœæ¥çµæã«åæ Œ/äžåæ Œãå€å®ããŠãã ããã
人éãšåãããã«ããCodexãã¯å€æŽãæ€èšŒããŸããã¿ãŒããã«ã«ã¢ã¯ã»ã¹ã§ããããããŠããããã¹ãã lint ã§æ€èšŒå¯èœãªãã®ã¯ãã確å®ã«å®è£ ãããŸãã (Codex ã¯ãŸã UI ãã¹ãããµããŒãããŠããŸããã)
ã»å€§ããªå€æŽãåå²ããŸãããã
ãCodexãã«å·šå€§ãªãã«ãªã¯ãšã¹ããéãã®ã§ã¯ãªããäœæ¥ãå°ãããçŠç¹ãçµã£ãã¿ã¹ã¯ã«åå²ããŸããããã¿ã¹ã¯ãå°ããããã°ããšãŒãžã§ã³ããåå¥ã«ãã¹ããããããªããããªãèªèº«ãã¬ãã¥ãŒãããããªããŸãã
ã»è¡ãè©°ãŸã£ãããCodex ã«ä»»ããŸãããã
è¡ãè©°ãŸã£ããããã©ã³ããäœæããŠåé¡ã Codex ã«åŒãç¶ããŸãããããã®æŠç¥ã䜿ãã°ãè€æ°ã®è§£æ±ºçã䞊è¡ããŠæ€èšã§ããŸãã
ã»äžæ¥ãå§ããåã«ãããã€ãã®ã¿ã¹ã¯ãéå§ããŸãããã
é倿éãæã®ã³ãŒããŒã飲ãåã«ã¿ã¹ã¯ãéå§ããæ»ã£ãŠãããšãã«ã¯ææ°ã®å·®åã確èªããŠã¬ãã¥ãŒã«åããŸãããã