å·»ç©ãæ¢ã
18ä»¶ã®å·»ç©
ã¹ãã¬ããã·ãŒãéèšæ¥åãNext.js+Supabaseã¢ããªãžæ®µéç§»è¡ããèšèšæç€ºæž
éçšäžã®Sheetsæ¥åãæ¢ããã«Webã¢ããª(DBæ£)ãžæ®µéç§»è¡ãåæ¹ååæã®ãšã³ãŒã«ãŒãæ ¹çµ¶ã»ç§»è¡6ååã»ã³ãŒãå è¡/ã¹ããŒãåŸè¿œããªãªãŒã¹ã»ãã¬ãŒã¹ãã«ãåã®æ°Žå¢ã鲿¢ã»worktreeéé¢ãŸã§å®æŠç¥èŠãååã
ãšãŒãžã§ã³ãã®åºåã³ã¹ããæ£ããæž¬ãïŒusageè€è£œã®äºéèšäžãšthinkingã7å²ãšããçŸå®ïŒ
äŒè©±ãã°JSONLããåºåããŒã¯ã³ãéèšããæã«å¿ ãèžã2ã€ã®çœ ïŒusageãã¬ã³ãŒãããšã«è€è£œãã2.27åã«èšããïŒthinkingã¯æ¬æãä¿åãããæåã§ã¯æž¬ããªãïŒãæ€èšŒã³ãŒãä»ãã§æœ°ããããããå質ãèœãšããªãåæžã¬ããŒ=ã¬ã¹ãã³ã¹æ°ã®åæžãå°ãæé ã
AIã«æç€ºæžããŒã±ãããèªååç §ãããçµäºæã«èªååºåãããMD
éçºäŸé Œãåããç¬éã«ããŒã±ããã®å®ææžã¿æç€ºæžãæ€çŽ¢ããŠAIã«èªãŸããã»ãã·ã§ã³çµäºæã«ã¯æ±çšããŠããŠãèªååºåãããä»çµã¿ã®äœãæ¹ãå šå°é åžã»ç§å¯æ å ±ã¹ãã£ã³ã»å®éã«èžãã é åžãã°3ã€ã®åé¿èŸŒã¿ã
ããã®PCã«ããçŽããªãé害ããAIã«èªåã§æ°ä»ãããŠçæããã
ç¹å®ã®1å°ã«ãããªããžããªãç¡ãæ©èœã¯ãä¿®æ£æé ãæžããŠã誰ã«ãå®è¡ãããæŸçœ®ããããSessionStart hook ã§åœè©²PCã®AIã ãã«æç€ºãåºããå®äºåŸã¯æç€ºæžãžç¶æ ãæžãæ»ããŠåå®è£ äºæ ãé²ãåãèµ°æ»ã®æéäºç®ãšã»ãã·ã§ã³è·šãã®åéãã¡ãŒã«äžèŽã ãã®èªåæ¿èªããªãããŸãããçç±ãšçœ²åããŒæ¹åŒãç¶æ åãåããAPIãéµã®èªåé åžãno-opéç¥ã®ææ¢ãŸã§ãå®éã«94ä»¶ã®æ»çãè§£æ¶ããå®äŸã«åºã¥ãæé ã
é åžããèªååããèªåãæŽæ°ã§ããªããåé¡ã®æ ¹æ²»ãšäººæãŒã埩æ§ã®3å±€èšèš
è€æ°ç«¯æ«ãžé ã£ãhook/åžžé§ã¹ã¯ãªãããç¡èšã§å€ããŸãŸæ¢ãŸãåå (åçµã³ããŒã»å®è¡ã·ã§ã«å·®)ãšãäžå€®ãã¥ãŒ/èªå·±ä¿®åŸ©æé /çådigestã®3å±€ã§äººã®æäœãŒãã§åŸ©æ§ãããèšèšã宿ž¬ã§èžãã ãç·ãªã®ã«äœãèµ·ããªããçœ ã€ãã
GitHub Actions ã®èª²éåã宿ž¬ããŒã¹ã§åã
Actions ã®è«æ±ãæšæž¬ã§ãªã宿ž¬ããåãæé ããžã§ãåäœã®ååãäžããšããèª²éæ§é ãã¹ãããå¥ã«æéãå²ã API ã®å©ãæ¹ãçæéé«é »åºŠã¯çµ±åã»é·æé㯠per-row åŸåŸ©ã®äžæ¬åãšããæã¡åãã䞊å床ãäžããŠãå¹ããªãã±ãŒã¹ã®èŠåãæ¹ããããŠãé ãã¹ããããå®ã¯åãããŒã¿ãæ¯ååŠçãçŽããŠããæ¬ é¥ãã®èŠã€ãæ¹ãŸã§ãæ¬çªã®å€éãžã§ãã宿ž¬ç®çã§åå®è¡ããŠéè€ã¬ã³ãŒãã倧éçæãã倱æäŸãšããã®å·»ãæ»ãã®äœæ³ãå«ãã
AIãšãŒãžã§ã³ãã®ãå§è²çããæ£ããæž¬ãææšèšèš
ç£ç£AIãå®è£ ãå®ããšãŒãžã§ã³ããžæž¡ããŠããããæ¯æ¥èªåèšæž¬ããææšã®äœãæ¹ãããŒã¯ã³æ¯ã飜åãã/忝ã landed è¡ã«ãããš100%ã«è²Œãä»ã/ç·šéããŒã«ã ãæ°ãããšéåãã«åãã€ããã®3倱æãšå¯Ÿçã»å¢åãã£ãã·ã¥ã§ã®é«éåãŸã§
å®ãLLMãããã€ãã®ãã©ãŒã«ããã¯é£éãæ¬åœã«çå°ããã
ç¡ææ ãæ¯ããŠé»ã£ãŠæ»ã¬ã®ãé²ã倿®µãã©ãŒã«ããã¯ã®èšèšã倱æã³ãŒãã®2åé¡ã»ãããã€ãã®ã¯ãŒã«ããŠã³ã»æ¥æ¬¡äžéã»å šåŒã³åºãåŽã®äžæ¬åã»ãã¹ããå®ç°å¢ãå£ãçœ ãŸã§ã
ãå€ã空ããšæå®ããåã«å®è¡šç€ºããã©ãŠã¶ã§èªã¿æ»ã
API/DBã®å€ã§ã¯ãªãå®éã«ç»é¢ã«åºãŠããç¶æ ãèªã¿æ»ããŠããæå®ããæé ã倿Žã®æç¡ãåãããäŸ¡æ Œã»åšåº«ã»æ²èŒæãªã©å€éšé²åºç¶æ ã®èª¿æ»ã»å ±åã«äœ¿ãæ±çšã¹ã¯ãªããä»ãã
GitHub Actions ã®èª²éåã宿ž¬ããŠåãæé ïŒcron çµ±åãã€ãšããïŒ
GHA ã¯ãžã§ãããšã«ååäœã§åãäžã課éãããããæ°ç§Ãé«é »åºŠã® cron ãæãå²é«ã«ãªãã/timing API ã§å šã¯ãŒã¯ãããŒã®èª²éåã宿ž¬ããcron åŒãå®å šäžèŽããã¯ãŒã¯ãããŒã®ã¹ããããžçµ±åããŠé »åºŠãåŠçãå€ããã«åãæé ãschedule ã¯å€§éã«éåŒãããããåã²ãŒãã§ã®éåŒããæç«ããªãããšãçµ±åãããšåã¹ãããã®å€±æã§åŸç¶ã silent skip ãããããšãäºç®äžéã§ãžã§ãæªèµ·åã«ãªã£ãæã®èŠåãæ¹ãŸã§å«ãã
è€æ°LLMãããã€ãã®ç¡ææ åããæ€ç¥ããŠèªåã§æ¬¡åè£ãžå·®ãæ¿ãã
å®ãLLMãžåŠçãéããæ§æã¯ç¡ææ ãåãããšé»ã£ãŠèœã¡ãèšé²ãæ®ããäžçªé«ãã¢ãã«ãžéæµããã402ã¯å³æ¬¡åè£/429ã®ã¿ãªãã©ã€ãšããåé¡ã課éããŒã«ãè·šãåè£åã倱æãæ®ãå°åž³ã1ããã1è¡ã®ãã°ãŸã§ã®å®è£ æé ãé£éã®é çªã宿ž¬ã§æ±ºããæ¹æ³ïŒå䟡æå®â å®å¹æå®/ãã³ã飜å/æ£èŠè¡šçŸæ¡ç¹ãäžäœã¢ãã«ãèœãšãçœ ïŒãåé²ã
LLMã®åºåãå®éã«åãããŠæ¡ç¹ããevalããŒãã¹ã®äœãæ¹
å®ãã¢ãã«ãžèœãšããŠè¯ãããæž¬ã瀟å evalã§ãæ£èŠè¡šçŸæ¡ç¹ãæ£ããçããèœãšãåé¡ã解決ãããçæã³ãŒããnode:vmã§å®è¡ãæ¯ãèãã§æ¡ç¹ããæ¹æ³ã課é¡èªäœã®æ¬ é¥(èšåãäºçŸ©ç/æ¡ç¹ãå®è£ ã¹ã¿ã€ã«ãéå°æå®)ã®åãåãæ¹ããããŠå€ãã®å®è£ ãèžãvmãµã³ãããã¯ã¹è±åºçµè·¯ã®å¡ãæ¹ãŸã§ã
è€æ°LLMãããã€ãã®ãã©ãŒã«ããã¯é£éã«æ°ããå®è¡è ãå®å šã«è¿œå ãã
å®ãLLMããé ã«è©Šããã©ãŒã«ããã¯é£éãžãæ°ãããã€ãã宿ž¬(æåç/å䟡/å°éæ§)ã«ããšã¥ãæ£ããäœçœ®ã«å·®ã蟌ã¿ã䞊è¡ç·šéã§éãã«æ¶ããªãããé åå šäœãpinããååž°ãã¹ããš4段éã®å®èµ°æ€èšŒãŸã§éãæé ã
AIãšãŒãžã§ã³ããçªç¶æ»ããæã®åãåã â ã¢ããªã®ãã°ãOSã®è³æºæ¯æžã
exit 3221226505 ã®åå ãã€ãã³ããã°ãšã³ãããçã§5åã§ç¢ºå®ãããæé ãšãçŽãæ¹ãéãšã³ãžãã¢ã«1ã¯ãªãã¯ã§æž¡ãå
å€éšé£æºã®å€ãå éšãã£ãŒã«ãã§æ€èšŒããŠèª€èšºããªãæé
ãã£ãã«é£æºã»åšåº«/äŸ¡æ Œåæã§ãéã£ãå€ãå€ã«ã©ãåºãŠãããããå éšAPIã®ãã£ãŒã«ãã§ç¢ºèªãããšèª€èšºãããæŽŸçå€/åèå€ã®æ··åããã£ãã«åäœã®ä¿æ°ãã¬ã¹ãã³ã¹ã®ç¡èšåãæšãŠãšãã3ã€ã®çœ ãšãæ¶è²»è åããšã³ããã€ã³ãâå šä»¶çªåâãã©ãŠã¶å®æç»ãšããæœ°ãæ¹ã
æ©èœãå°éãããçžä¹ãã®æ€èšŒãæ»ã¬ â æªæ€èšŒã®ãŒããç»é¢ãã远ãåºã
å±éºãªæ©èœãåŸããå°éãããšãåããã©ã°ã«ã¶ãäžãã£ãŠããæ€èšŒåŠçãéé£ãã§æ»ã«ãããŒã«ã¯æªæ€èšŒã®ãŒããã確èªããçµæãŒããã®é¡ã§åºãç¶ãããå®äŸã§ã¯1é±éã12ä»¶ã¶ãã®åã®èŠå ±ãåºããŠããããã©ã°åç §ã®ä»åãæ¹ãæªç¢ºèªã空éåã§è¡šçŸããªãæã¡æ¹ãåå ãã±ãã®åèšãäžå€æ¡ä»¶ã«ããæ°ãæ¹ã0/1/2 ã®çµäºã³ãŒãèšèšãä¿®æ£ååŸãæ¬çªããŒã¿ã§äžŠã¹ãæ€èšŒæé ãå§è²å®è£ ã®åãå ¥ãåºæºãŸã§ã
䞊走ããAIã»ãã·ã§ã³ãåãç®çãäºéçæããäºæ ãæ¢ãã
è€æ°ã®AIã³ãŒãã£ã³ã°ã»ãã·ã§ã³ãåæã«èµ°ããããšãåãåŒãç¶ããèªãã§åããã¡ã€ã«ãæžã朰ããã¬ãŒãå¶éã®ããAPIã®ã¯ã¬ãžãããé£ãåã£ãŠäž¡æ¹ã429ã«ãªããçæåã®æ€ç¥3ç¹ã»ããïŒmtimeïŒå®è¡äžããã»ã¹ïŒgit statusïŒãšãè¡çªæã«å®è£ ãè²ãåºæºãè²ã£ãåŽãä»äžããã¹ãä»äºãæ€èšŒããŒã«ã«å¿ ãèŠã4ç¹ïŒåæ¯ã»çªã®æåã»exit codeã»ããŒãžãã£ãã·ã¥ïŒã
å ±æç«¯æ«ã¢ããªã®æ åœè å¥ç¶æ ãã°é²æ¢
GAS/Sheetsã§å ±æç«¯æ«ã¢ããªãäœãæãæ åœè åãäžæããŒã«å«ãå¿ããŠå šå¡ã®ç¶æ ãé£åããŠããŸããã°ã®åå ãšçŽãæ¹