å·»ç©ãæ¢ã
28ä»¶ã®å·»ç©
åä¿¡ã¡ãŒã«æ·»ä»ãæ¡ä»¶ãã©ã«ããžèªåå蟌ãããã€ãã©ã€ã³
ã¡ãŒã«ãèªãã¢ããªãšãã©ã€ãã«æžãã¢ããªãå¥ããšããçŸå®çãªæ§æã§é¡§å®¢ã¡ãŒã«ã®æ·»ä»ãæ¡ä»¶ãã©ã«ããžç¡äººä¿åããèšèšãæš©é远å ãé¿ããçç±ãå®è¡æéå¶éäžã®äºç®3æ¬ç«ãŠãäºéã®éè€é²æ¢ãbase64url/è¡æ°äžé/倿å€å®ãªã©ã®å®è£ çœ ãæ¡ä»¶ãšé¡§å®¢ã®ãããã³ã°ãåå¯ãã¯åè£æç€ºïŒäººã®æ¿èªã«ããåãŸã§ã
瀟å åç°¿ã·ãŒãããéžæåŒã¹ã¿ããå ¥åãäœã â ã¡ãŒã«ããã©ãŠã¶ã«åºããªã Next.js èšèš
èªèšŒãªãã®å ¬éæ¥åã¢ããªã§ãæå ¥åã®æ°åãåç°¿ç±æ¥ã®ãã«ããŠã³ã«çœ®ãæãã€ã€ãå人æ å ±ãã¯ã©ã€ã¢ã³ããžé ããªãèšèšãšæ€èšŒæé ãServer Component ã§ {id,name} ã ããæž¡ãããµãŒãã id ããæ°åãšã¡ãŒã«ã解決ãããé ä¿¡ç©ãžã®ã¡ãŒã«æ··å ¥ã grep ã§å®æž¬ããæ€èšŒãšãå®éã«èžãã èœãšã穎7ä»¶ã€ãã
Gmail èªåä»åã&è¿ä¿¡ãã©ããçæMD
åä¿¡ã¡ãŒã«ã AI ãåé¡ (èŠè¿ä¿¡/æ å ±/å¶æ¥/ã¹ãã ) ããŠã©ãã«ä»ãããèŠè¿ä¿¡ã¡ãŒã«ã«ã¯è¿ä¿¡ãã©ãããŸã§èªåçæããä»çµã¿ãäœãããæç€ºæžãDWD (ãã¡ã€ã³å šäœå§ä»») èšå®æé 蟌ã¿ã
æçš¿ã®å¯©æ»ãã¥ãŒããä¿¡é Œæžã¿ã ãèªåå ¬éãã§æãèšèšïŒãªãããŸã穎ã€ãïŒ
審æ»ãã¥ãŒã«æçš¿ãæºãŸã£ããŸãŸåãããåé¡ããä¿¡é Œæžã¿æçš¿ã ãå³å ¬éããåœ¢ã§æœ°ãæç€ºæžãç¡æ€èšŒã®ããŒçºè¡ãä¿¡é Œå€å®ã«äœ¿ããšç¬¬äžè ãèªç€Ÿã¡ãŒã«ãéšãã穎ãšããµãŒãã¬ã¹ã§éçå ¬éæ£ã«å®è¡æå ¬éãè¶³ãæ¹æ³ãæ€èšŒ10é ç®ãŸã§å«ãã
ããã®PCã«ããçŽããªãé害ããAIã«èªåã§æ°ä»ãããŠçæããã
ç¹å®ã®1å°ã«ãããªããžããªãç¡ãæ©èœã¯ãä¿®æ£æé ãæžããŠã誰ã«ãå®è¡ãããæŸçœ®ããããSessionStart hook ã§åœè©²PCã®AIã ãã«æç€ºãåºããå®äºåŸã¯æç€ºæžãžç¶æ ãæžãæ»ããŠåå®è£ äºæ ãé²ãåãèµ°æ»ã®æéäºç®ãšã»ãã·ã§ã³è·šãã®åéãã¡ãŒã«äžèŽã ãã®èªåæ¿èªããªãããŸãããçç±ãšçœ²åããŒæ¹åŒãç¶æ åãåããAPIãéµã®èªåé åžãno-opéç¥ã®ææ¢ãŸã§ãå®éã«94ä»¶ã®æ»çãè§£æ¶ããå®äŸã«åºã¥ãæé ã
ãã°ã€ã³ã§ããªãGitHubã¢ã«ãŠã³ãã«çžãããéçºããæ¢ããã«åãžé²ãã
ãã¹ã¯ãŒãäžæã»2FAã§å ¥ããªãGitHubã¢ã«ãŠã³ãã®PATã«workflowã¹ã³ãŒããç¡ããã¯ãŒã¯ãããŒãpushã§ããªãè©°ã¿ã®è§£ãæ¹ã埩æ§ã«èµ°ãåã«æœ°ãã¹ã5ã€ã®çµè·¯ïŒæå ã¢ã«ãŠã³ãã®ã¹ã³ãŒã確èªïŒäŸåã確èªããŠçœ®ãæãïŒã³ãããauthorããç»é²ã¡ãŒã«ç¹å®ïŒæåŸ ã®APIå諟ã§Webãã°ã€ã³åé¿ïŒsecretsç»é²ã¯repo+adminã§è¶³ããåæ ïŒãæé åã
皌åäžã®æ¢åGASããå¯äœçšãèµ·ãããã«æ€èšŒããŠããæ¬çªåæ ãã
宿å®è¡äžã®Apps Scriptã«ä»æ§å€æŽãå ¥ããæé ãã¡ãŒã«éä¿¡ãªã©ã®å¯äœçšãèµ·ãããã«å®ããŒã¿ã§ããžãã¯ãæ€èšŒããclasp pushåŸã«pullã§çªåãããŸã§ãæ©æ¢°å€å®ã§éãããclasp loginã®èªå¯URLãæ»ã¬çœ ãpullã®æ¡åŒµåéãã§å·®åãŒãã誀èªããçœ ã€ãã
è«æ±æžPDFâäŒèšCSV èªå倿ãã€ãã©ã€ã³MD
ã¡ãŒã«æ·»ä»ããã©ã«ãæèŸŒã¿ã®è«æ±æžPDFããéé¡ã»æ¥ä»ã»ååŒå ãæœåºããäŒèšãœããå蟌çšCSVã«å€æãããã€ãã©ã€ã³ã AI ã«äœãããæç€ºæžãClaude API ã®æ§é åæœåºããã³ãã蟌ã¿ã
AIã«æç€ºæžããŒã±ãããèªååç §ãããçµäºæã«èªååºåãããMD
éçºäŸé Œãåããç¬éã«ããŒã±ããã®å®ææžã¿æç€ºæžãæ€çŽ¢ããŠAIã«èªãŸããã»ãã·ã§ã³çµäºæã«ã¯æ±çšããŠããŠãèªååºåãããä»çµã¿ã®äœãæ¹ãå šå°é åžã»ç§å¯æ å ±ã¹ãã£ã³ã»å®éã«èžãã é åžãã°3ã€ã®åé¿èŸŒã¿ã
æ£ãã°ã£ãã¿ã¹ã¯ã1æã«çµ±åããAIã1ä»¶ãã€å®è¡ããŠäººãçŽããã¿ã¹ã¯å°åž³ãã®äœãæ¹
è€æ°ã®æ©èœãã·ãŒãã«æ£ãã°ã£ãæ®ã¿ã¹ã¯ã1æã«çµ±åãã人ããã±ã¢ã¬ãèŠãŠãAIã1ä»¶ãã€å®è¡ãã人ãä¿®æ£æç€ºãæžããŠåçæãããã«ãŒãããç¡äººã§æŽèµ°ããªã圢ã§åãèšèšãåªçãªããŒãžèŠåãå€éšéä¿¡ã®èªåå®è¡çŠæ¢ã倱æ3åã§äººæã«èœãšãæã¡åããå®è¡ç°å¢ã®æéå¶éã§äžæãããå Žåã®æ±ãã埩æ§ã³ãã³ããŸã§å«ãã
ã¯ã©ãŠãå¥çŽãšãããžã§ã¯ãæåšã1æã®ã¹ãã¬ããã·ãŒãå°åž³ã«èªåéçŽãã
è€æ°PCã»è€æ°ã¯ã©ãŠãã®ãã©ã®ã¢ã«ãŠã³ãã®ã»ã©ãã«ããã»äœã®ãããžã§ã¯ããåãããªããããåPCãšäžå€®ãèªåã§æžã蟌ã3ã¿ãã®å°åž³ã§è§£æ¶ãããæ¯æãæ å ±ãå®å šã«æ±ãèš±å¯ãªã¹ãèšèšãšãå®è£ äžã«å¿ ãèžããæåããã®ã«ç©ºãã®çœ 4ã€(CLIãstderrã«è¡šãåºã/Windowsã®.cmdã·ã /GASã®ãã¡ã€ã«è©äŸ¡é /ã¯ã©ã€ã¢ã³ãtimeoutâ æªé)ãŸã§å«ãã
ãŠãŒã¶ãŒæçš¿ã®å¯©æ»ãç¡äººåãã â æ©å¯ã¯æ±ºå®çå€å®ã»éè€ã¯ã°ã«ãŒãã§1æ¬ã«å¯ãã
æçš¿ãã¥ãŒãäººææ¿èªã§æ»çãããµãŒãã¹ããæ¯æ¥1åã®ç¡äººãããã§åãå®è£ æé ãæ©å¯ã¯æ£èŠè¡šçŸã§æ±ºå®çã«èœãšããéè€ã¯åè£åºãã ãæ©æ¢°ïŒLLMã«ã¯åäž»é¡å€å®ãšç¶²çŸ é ç®ã®æœåºã ãããããŠæ®ã1æ¬ã¯ã³ãŒãã§æ±ºããããã¢åäœã§æ±ºãããšæ®ããåŽãå¥ã®çµã§åŽäžãããçœ ãåŽäžã®ä¿åå ãç¡ãèšèšãã¹ãã¢é害ã空ããŒã¿ã«åããŠäºéå ¬éãæã fail-openã誀æ€åºã§å šéšåŽäžã«ãªã4ãã¿ãŒã³ãŸã§ã
瀟å PCã®ãã©ãŠã¶æ¡åŒµãæš©éããŒã¹ã§æ£åžããã
ããã®æ¡åŒµãå±ãªããªãïŒãã䞻芳ã§çµãããããå šç€Ÿã®æ¡åŒµãæš©éããŒã¹ã§æ£åžãããæé ãå€å®åºæºãèªã¿åãå°çšã¹ãã£ããæ¢åç¹æ€çµè·¯ãžã®çžä¹ããåªçãªéçŽãå®POSTæ€èšŒãŸã§ã
ç¡äººãããã®ãé»ã£ã空æ¯ãããçºèŠããŠæ¢ããïŒåªçå蟌ã®èšèšïŒ
宿ãããããšã©ãŒãåºããªããŸãŸæ¯ååãä»äºãããçŽããŠããç¶æ ã®æ€åºæ³ã»å žåçãªçå ïŒå蟌æžã¿éåãå®äœã®åäžã«ã©ã ã§æã€ïŒã»å°åž³ã«ããä¿®æ£ã»æã¡åãä»ãå詊è¡ã»CI課éã§ã®å¹æå®æž¬ãŸã§ã
Google Drive ã®ãã©ã«ãæŽçãèªååãå£ããæš©éäºæ ãåºããã«ãã
æ£ããã£ã Drive ãçä»ããåã«ç¢ºèªãã¹ãããšããã©ã«ãç§»å㯠ID äžå€ãªã®ã§å®å šã ããå ±æãã©ã«ããžç§»ããšæš©éãé»ã£ãŠåºãããç°¡æAPIã¯æš©éãéå°å ±åããç¶æ¿æš©éã¯åãã©ã«ãããåé€ã§ããªããäºéåãèµ·ããååæ€çŽ¢ã®èŠåãæ¹ãšãæš©éåé€ã¹ã¯ãªããã®å®å 𿩿§ãåçºæºã®æœ°ãæ¹ãŸã§ã
ã«ã¬ã³ããŒç©ºãæœåºïŒãªã³ã©ã€ã³/ãªãã©ã€ã³æ¥çšèª¿æŽç§æž
æ¥åã«ã¬ã³ããŒãã空ãæéãæœåºããã調æŽå¯/äžå¯ãããŒã«ãŒåé¡ã»èšªåã®ç§»åãããã¡ã»æ ç¹/åºåŒµã®å°åå€å®ã»ãªã³ã©ã€ã³/ãªãã©ã€ã³å¥ã®åè£åºããŸã§è¡ãæ¥çšèª¿æŽã®åãäºå®ç»é²ã®æ¢å®å€ãšãã¬ãã£ãã¯ã¹èŠçŽã忢±ã
æ£ãã°ã£ãæ¥åã·ãŒããããçºæ³šãå¿ãããæ©æ¢°çã«æ€ç¥ããéçŽè¡šãäœã(GAS)
æ¡ä»¶ããšã«åãããã¹ãã¬ããã·ãŒããšå€éšã¹ãã¬ãŒãžãçªãåãããã衚ã«ãããããŒã¿ãç¡ãããããŒã¿ã¯ããã衚ã«ç¡ããã®åæ¹åã§æããåºããåååãè€æ°ãã/ãã³ãã¬ãã©ã«ãã空/6åå¶é/ããªã¬ãŒäžéãªã©ã宿ž¬ã§èžãã çœ ãšåé¿çã€ãã
å šäžçå ¬éã«ãªã£ãŠããå ±æãã©ã€ãè³æããæ¥åãæ¢ããã«ç· ãã
AIã«èªãŸããããå ¬éãããŸãŸæŸçœ®ãããDriveãã©ã«ããã誰ãç· ãåºããã«å®å šã«éããæé ãæªèªèšŒcurlã§å ¬éãå®èšŒâæ£èŠå ±æãå ã«ä»äžâanyoneã ãåé€âå¡ãã£ãããšãšæ¥åãçããŠããããšãäž¡æ¹å®æž¬ããåãæš©éäžèЧAPIãäžå®å šãšããçœ ã€ãã
reCAPTCHA ã®ãããµã€ãã AI ã«äœåºŠãèªãŸããïŒãã°ã€ã³çªãã»ãã·ã§ã³ããåãé¢ããŠåžžé§ããã
Playwright ã® launchPersistentContext ã¯èŠªããã»ã¹ãæ»ã¬ãšãã©ãŠã¶ãæ»ã¬ãããAI ãšãŒãžã§ã³ãã®ã»ãã·ã§ã³ãå€ãããã³ã«äººã reCAPTCHA ãæŒãçŽãããšã«ãªããdetached èµ·åïŒCDP æ¥ç¶ããããã¡ã€ã«åºå®ãšãã°ã€ã³ä¿æã管çè æš©éã䜿ããªããã°ãªã³åžžé§ã®3å±€ã§è§£æ¶ããæé ãexit code å¥çŽãšãå®éã«å£ããŠç¢ºãããæ€èšŒæé ã€ãã
ã¹ãã¬ããã·ãŒãã®ã·ãŒã远å ãã¿ã³ã copyTo null ã§èœã¡ãåå ãããŒã¿ã ãã§ç¹å®ãã
GASãã¿ã³ã® Cannot read properties of null (reading 'copyTo') ã¯ãã·ãŒãåäžèЧãšå®ã·ãŒãåã®ãºã¬ãSheets API ã§å®åã»äžèЧåã»ãã«ããŠã³ã®ããŒã¿æ€èšŒãçªãåãããŠå£ããåç §ãå šä»¶åºããéé¿å ãã埩å ã㊠read-back æ€èšŒãããŸã§ã®æé ãæ«å°Ÿã¹ããŒã¹äºæ ãšãã€ã³ãåã¹ã¯ãªããã«å°éã§ããªãå¶çŽãå«ãã
AIã«ãèªåã§èª¿ã¹ããããã¬ãŒãã®äœãæ¹ â 調æ»ã®äžžæããæ©æ¢°ã§æ¢ãã
ãšãŒãžã§ã³ããèªåã§1åã§åããããšã人éã«ç¢ºèªãããã®ã hook ã§æ¢ããåãæ¢ã«ã¬ãŒããæžããã®ã«å¹ããªã5ã€ã®åå ïŒæªé åžã»æ±çšããŒã«ãäžèœããŒã»ã«ããŽãªäžè¶³ã»èª€æ€ç¥ã§åœ¢éªžåã»éããåŒãç·©ãïŒãšã質åããŒã«ã PreToolUse ã§äºåãããã¯ããæ¹æ³ãåºå®ãã¹ããã¹ãé ç®ãŸã§ã
æååãã§å®å ãæ±ºãŸããªã1ä»¶ããã¥ãŒãæ°žä¹ ã«è©°ãŸãããã®ãçŽã
èªååŠçãã¥ãŒã§å®å 解決ã«å€±æããã¢ã€ãã ã¯ã倱æãã§ã¯ãªããã¹ããããã«ãªããexit 0 ã®ãŸãŸæ¯æ©ãªãã©ã€ããç¶ãããè©°ãŸãã®æ€åºãåããæååããå ããã¹ããåå®ããæçŽç §åãå£ãã«ãã第2ããŒãžã®èš±å¯ãªã¹ãåãã©ãŒã«ããã¯ããããŠã察象å€ã«ãããåºå£ãŸã§ãå®äŸã§éãã
è€æ°PCãžé ãèšå®ãã¡ã€ã«ã端æ«åºæå€ãå£ããäžå€®æŽæ°ãã
äžå€®ã§ããŒãwebhookãåŒµãæ¿ããç¬éã«å šç«¯æ«ãéãã«æ»ã¬äºæ ããããŒåäœããŒãžé åžã»ä¿è·ããŒã»ããŒããŒã·ã§ã³é åºã»æ²é»æ€åºã§æ§é çã«é²ãæé
宿ãžã§ããé»ã£ãŠæ¢ãŸã£ãã®ãæ€ç¥ããŠèªå修埩ããèŠåŒµãçªã®å
ç¡äººãžã§ãã®æ»æŽ»ã3å±€ïŒèµ·åã»çµäºã³ãŒãã»ä»æ¥ã®ææç©ïŒã§å€å®ããåºå®ããäœæ¥ã³ããŒã§ã®åå®è¡ã§èªå修埩ããåãå€å®äžèœãšéåªçãè§Šããªãåãåãã1æ¥1åã»3æ¥ã§æã¡åãæŽèµ°é²æ¢ãçžäºç£èŠãå®è£ ãå®äŸ¡ã¢ãã«ãžå§è²ãããšãã«å®è¡ããŠåããŠåºãæ¬ é¥ãŸã§ã
å¥ã·ãŒãã®åçªå·ãè ã£ãŠå¥ã¬ã³ãŒãã®å€ãè¿ãäºæ ã®çŽãæ¹ïŒååç §åïŒæ¥ä»ã¿ã€ãã¬ãŒã¯ïŒ
ä¿åããåçªå·ã¯åã®æ¿å ¥åé€ã§å šä»¶ãºã¬ããå£ããä»¶æ°ã®æž¬ãæ¹ãNFKCæ£èŠåãšæé·åªå ã®ååç §åãåååãæéã§å²ãã¿ã€ãã¬ãŒã¯ã確å®ã§ããªãæã¯ç©ºãè¿ãèšèšãçŽé¢æ°åãšãã¹ãã±ãŒã¹ãŸã§ã
ã·ãŒãå¯Ÿå¿æžã¿ãã§ãã¯ïŒæéè¶ éDiscordå¬ä¿
ã¹ãã¬ããã·ãŒãã«ãã§ãã¯ããã¯ã¹åãè¶³ããäžå®æéçµã£ãŠããã§ãã¯ãå ¥ããªãè¡ãæ€ç¥ããŠæ åœè å¥ã«Discordã§èªåå¬ä¿ãããã¿ãŒã³ãæ¢åã®å®æcronã«çžä¹ãããç¶æ 管çãªãã§ç¹°ãè¿ãå¬ä¿ãå®çŸã§ãããå°å ¥æã®æ¢åè¡äžæ¬åŠçãšã¿ã€ã ãŸãŒã³å€æã®èœãšã穎ãå«ãã
Vercelç¬èªãã¡ã€ã³æ¥ç¶+èšŒææžçºè¡åŸ ã¡èªå·±è§£æ±ºMD
å€éšã¬ãžã¹ãã©ã®DNSãVercelã«ç¹ãæé ãšãHTTPSã ãç¹ãããªãæã«vercel certs issueã§æåçºè¡ããŠæ°ååã®åŸ ã¡ãæ°åç§ã«ççž®ãã蚺æãããŒ
ãããã¬ã¹CLIå®è¡ãã©ã€ããµã€ã¯ã«hookçµç±ã§éç¥/ãã©ãŒãæ±æããåé¡ã®æä¹ 察ç
宿ãããã§é察話起åããCLIãšãŒãžã§ã³ããçµäºhookã§éç¥/äžèŠ§ãæ¯ææ±æããåé¡ã--no-session-persistenceã ãã§ã¯äžè¶³ãçºçæºã§ã®ç°å¢ãã©ã°+entrypoint allowlist+æ°žç¶ãã©ã³ã¹ã¯ãªããæç¡ã§ã®äžæãã®å€å±€é²åŸ¡æé ã