AIæä»£ããœãããŠã§ã¢ã¯ïŒå±€ã§èãã æ ªåŒäŒç€ŸãšããªãŒã§CTOãåããŠããä»äº( @imakei_ )ã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 第9æ¬ç® ã§ãããããŸã§èªåã¯ãçµç¹OSãçµç¹ãã¶ã€ã³ãAI掻çšã®è©äŸ¡ãšãã£ããAIãæŽ»ããåå°ãããäž»ã«çµç¹ã®åŽããæžããŠããŸãããä»åã¯ãã®èŠç¹ããäœããããœãããŠã§ã¢ã®åŽã«ç§»ããŸãã çµè«ãå
ã«èšããšãAIæä»£ã¯ ãœãããŠã§ã¢ã®äœãæ¹ãã®ãã®ãå€ãã å¿
èŠãããããã®éµã¯ ãœãããŠã§ã¢ã3ã€ã®å±€ã§æãããé·ãæ®ã CoreããšãæšãŠãŠäœãçŽãã Disposable ãªéšåãã®å¢çãã©ãåŒãã ã«ããããšèããŠããŸãããããŠãã®å¢çãåŒãäœæ¥ã¯ãçµç¹ã®åã§è§Šããããªã³ãããžãŒãããä»åºŠã¯ãããã¯ãã®äžç芳ãšããŠå®çŸ©ããŠããäœæ¥ã§ããããŸããé£ããã§ãããã ããããé¢çœããé ã«æžããŸãã ãäœã£ãŠé·ãä¿å®ãããåæã厩ãã ãã£ããã¯ãTuan-Anh Tranæ°ã® "Architecture for Disposable Systems" ãšããèšäºã§ããèŠç¹ã¯ã·ã³ãã«ã§ã ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ãã£ãŠçæãå®ããªããšããœãããŠã§ã¢ã¯ãäœã£ãŠã䜿ã£ãŠãæšãŠãããã®ãžãšå€ãã£ãŠãã ããšãããã®ã§ãã ãããŸã§ã¯ãäžåºŠäœã£ãŠãé·ãä¿å®ãããã®ãåœããåã§ãããäœãçŽããé«ãã€ããããããäžå¯§ã«èšèšããè² åµãè¿ããé·æãèŠæ®ããŠç£šããŠããããšãããããšãŒãžã§ã³ããæ°åã§åçã®ä»£æ¿ç©ãäœãããªãããã®åæã¯åŽ©ããŸããçæãå®ããªããšãããããä¿å®ãç¶ããããšãã®ã»ããé«ã³ã¹ãã«ãªããå£ãããçŽããããæšãŠãŠäœãçŽãââããããäœãæ¹ãåçã«ãªã£ãŠãããŸãã ã ãšããã°ã ãœãããŠã§ã¢ã®äœãæ¹ãããã®å€åã«åãããŠçµã¿æ¿ããªããšãããŸãã ãå
šéšãçããäžå¯§ã«ç£šãçºæ³ããããäœãæ®ããäœãæšãŠããããèšèšããçºæ³ãžãã§ãã Core ãš Disposable ã®å¢çããã©ãåŒãã ãããæ¬é¡ã§ããåœç¶ãªããããã¹ãŠã Disposable ã«ã§ããããã§ã¯ãããŸãããåèèšäºã¯ããœãããŠã§ã¢ãäžã€ã®å±€ã§æŽçããŠããŸããé·ãçãæ®ã Core ïŒèä¹
ã³ã¢ïŒäžæ žã®ããžãã¯ãããŒã¿ã¢ãã«ïŒãããããã€ãªã Connectors ïŒå¥çŽïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒããããŠãã®äžã§åã Disposable ãªå±€ ïŒUIãã°ã«ãŒã³ãŒãïŒã§ãã 倧äºãªã®ã¯ã Disposable ãªéšåãå®å¿ããŠæšãŠããäœãçŽãããã§ããã®ã¯ãCore ãš Connectors ãå
ããããã ããšããç¹ã§ããéã«èšãã°ãAIã«ä»»ããããç¯å²ãåºãããââã€ãŸãAIãæŽ»ããããââãªãããŸããæšãŠãªãäžå¿ãããã¡ããšå®çŸ©ããããšãå
ã«ãªããŸããå¢çãææ§ãªãŸãŸAIã«äœããããšãæšãŠãŠãããã®ãšæšãŠãããªããã®ãæ··ãããçµå±äœãçŽããªããªãã AIãæŽ»ããããã®ç¬¬äžæ©ã¯ãå®ã¯ãäœãæ®ããããæ±ºããããšãªã®ã§ãã ãããŠãã®ãæšãŠãªãäžå¿ãå®çŸ©ãããäœæ¥ã¯ãé£èŒã§æžããŠãã ãªã³ãããžãŒ ã®è©±ãšãã®ãŸãŸå°ç¶ãã§ããçµç¹ã®åã§ã¯ãäŒç€Ÿã®çŸå®ããåè©ã»åè©ã»ã«ãŒã«ããšããŠå®çŸ©ãã話ãããŸãããåãããšããããã¯ãã®åŽã§ãããšã ãã®ãœãããŠã§ã¢ã®äžç芳ãå®çŸ©ãã ããšã«ãªããŸããäœãäžå¿çãªæŠå¿µïŒåè©ïŒã§ãã©ããªæäœïŒåè©ïŒãèš±ãããã©ããªå¶çŽïŒã«ãŒã«ïŒãããã®ãããã®äžç芳ããã Core ã§ããããããå€ã«èŠãã圢ã Connectors ã§ãã äžç芳ããã¡ããšå®çŸ©ãããŠããã°ããã®äžã«ä¹ãUIãç¹ããã¿ã¯ãAIã«çæãããèŠããªããªã£ããæšãŠãŠäœãçŽãã°ããã äžç芳ïŒãªã³ãããžãŒïŒãå®çŸ©ããããšãããã®ãŸãŸ Core ãš Disposable ã®å¢çãåŒãããšã«ãªã ââããããçµç¹ã®è©±ãšãœãããŠã§ã¢ã®è©±ãã€ãªãããã€ã³ãã ãšèããŠããŸãã ãšãã«ã¢ããªéçºã§ã¯ãå¢çããã£ãããã ãããŸã§ã¯äžè¬è«ã§ãããèªåã®åºèº«ã§ãããã¢ããªïŒã¢ãã€ã«ïŒéçºã§ã¯ããã® Core ãš Disposable ãªå±€ã®å¢çããããçã
ããã¯ã£ããããŸãã ãµãŒããŒãµã€ããšéããã¢ããªã¯ å©çšè
ã®ç«¯æ«ã«ã€ã³ã¹ããŒã«ãããå€ãããŒãžã§ã³ãäžã®äžã«æ®ãç¶ããŸã ããµãŒããŒã®ããã«ãäœãçŽããŠå³å·®ãæ¿ãããšã¯ãããŸãããã ãããããç°¡åã«ã¯æšãŠãããªãäžå¿ãæç¢ºã§ããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®éä¿¡å¥çŽïŒïŒã¢ããªã«ããã Connectors ã«ãããéšåïŒãããŒã«ã«ã«æºãŸã£ãããŒã¿ã®ã¹ããŒããšãã€ã°ã¬ãŒã·ã§ã³ãèªèšŒãã»ãã·ã§ã³ãšãã£ãããŒã«ã«ã®ç¶æ
ââãã®ãããã¯ãDisposable ã«ã¯ã§ããªã Core ã§ããããã²ãŒã·ã§ã³ã®æ§é ããDeep Link ãéç¥ã®å
¥å£ãšããŠå€éšãšç¹ãã£ãŠããéãã¯ãç°¡åã«ã¯äœãå€ããããªã Core å¯ãã®ååšã§ããéã«ãåã
ã®ç»é¢ãã¬ã€ã¢ãŠããView ãŸããã®ã³ãŒãã¯ãçæããŠäœãçŽãã Disposable ãªå±€ã«å¯ã£ãŠãããŸãã ã€ãŸãã¢ããªãšã³ãžãã¢ã®äŸ¡å€ã¯ã äžæäžæã®ç»é¢ãæã§ç£šãããš ããã ã¢ããªã®äžç芳ïŒãã¡ã€ã³ã¢ãã«ã»ç¶æ
ã®å¥çŽã»ãã¶ã€ã³ã·ã¹ãã ïŒãå®çŸ©ããããš ãžç§»ã£ãŠãããŸããããã§åŒ·èª¿ãããã®ã¯ããããŸã§å¹ã£ãŠããUXãã€ã³ã¿ã©ã¯ã·ã§ã³ãžã®ãã ãããäžèŠã«ãªãããã§ã¯ãªãããšããããšã§ããããããã®ææ§ãã ãã¶ã€ã³ã·ã¹ãã ãã³ã³ããŒãã³ããã¬ãã¥ãŒã®åºæºãšã㊠Core åŽã«åã蟌ã ãããããã°ãçæãããç»é¢ããã®åºæºãæºããããã«ãªããŸããæã§å®ã£ãŠããå質ããä»çµã¿ãšããŠå®ãåŽã«åãââããã¯ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠãããé¢çœãå€åã ãšèªåã¯æã£ãŠããŸãã ããããã¡ã°ãé£ãã ãšã¯ããããã®å¢çãåŒãäœæ¥ã¯ããªãé£ãããããã€ãæããŸãã ãŸãã äœã Core ã«çœ®ããäœã Disposable ã«èœãšããã®ç·åŒã ãã®ãã®ãé£ãããééãããšãæšãŠãããã¯ãã®å Žæã«å€§äºãªããžãã¯ãçŽã蟌ã¿ããŸãããšäœãçŽã矜ç®ã«ãªããŸãã æ¬¡ã«ã Connectors ã¯ãå®ç§ã«ãä¿ã¡ç¶ãã å¿
èŠããããŸããDisposable åŽãéã«äœããã®ã¯ Connectors ãå
ãããããã§ããäžã¯ AI ã«ä»»ããŠéã§ããããšãå¢çã¯å®ç§ã«ããšãã é察称ãªå³ãã ãåæã«æç«ãããªããšãããŸããã ããã«ã ããŒã¿ããŠãŒã¶ãŒã®ç¶æ
ã¯ç°¡åã«ã¯æšãŠãããŸãã ãUIãããžãã¯ã¯äœãçŽããŠããèç©ãããããŒã¿ãå©çšè
ããã®ä¿¡é Œã¯äœãçŽããªããæšãŠãŠãããã®ãšãçµ¶å¯Ÿã«æšãŠãŠã¯ãããªããã®ãèŠæ¥µããç®ãèŠããŸãã ãããŠæå€§ã®é説ã¯ã ãäœãçŽãããåæããããã£ãŠèšèšå€æã®éã¿ãå¢ã ããšã§ããå®è£
ã磚ãè² æ
ã¯æžãäžæ¹ã§ããã©ãã«å¢çãåŒããããšãã倿ã®äžçºåè² ã®éèŠæ§ãäžãããæãåããé£ããããèããé£ãããžç§»ã£ãŠããããšãèšããŸãã ã ãããããããããã®ãœãããŠã§ã¢ã¥ããã¯é¢çœã ãã®é£ããã¯ããã®ãŸãŸé¢çœãã®è£è¿ãã ãšæã£ãŠããŸãã ãšã³ãžãã¢ã®è
ã®èŠãæãã ãå®è£
ãã©ãã ãäžå¯§ã«ç£šããããããããäžç芳ãå®çŸ©ããäœãæ®ãäœãæšãŠããã®å¢çãèšèšã§ãããããžç§»ã ãã³ãŒãã®çŸãããã®ãã®ãããæšãŠãããæ§é ãèŠæããŠèšèšããåãåããããããªãç¥çãªææŠã§ãããèšèšè
ãšããŠã®ééå³ãè©°ãŸã£ãä»äºã§ãã å¿ããŠã¯ãããªãã®ã¯ã Disposable ãåãå
¥ããããšã¯ãéã«äœããããšã§ã¯ãªã ãšããç¹ã§ãããããéã§ãããããã«æšãŠãããããã«ãäžç芳ãšå¢çãäžå¯§ã«èšèšããããšãããããé«åºŠãªä»äºãæ±ããããŸãã ããäžã€ãå¿æ§ããšããŠå€§äºãªã®ã¯ã èªåãæžããã³ãŒããžã®å·çãææŸããã ã§ããæéããããŠç£šããã³ãŒãã»ã©ãæšãŠãã®ã¯æãããã§ããããããã¯ãæãããŠæšãŠãããªãã³ãŒããããããªã¹ã¯ã«ãªãåŸãŸããæçã®å¯Ÿè±¡ããåã
ã®å®è£
ããããããçã¿åºãç¶ããããäžç芳ãå¢çã®ã»ããžç§»ããŠãããäœåãšããŠã®ã³ãŒããããæŽæ°ããç¶ããä»çµã¿ãšããŠã®èšèšãžââãã®åãæ¿ããã§ãã人ã«ãšã£ãŠãããããã®ãœãããŠã§ã¢ã¥ããã¯ãšãŠãé¢çœãæä»£ã«ãªããšæããŸãã ãããã« AIæä»£ã®ãœãããŠã§ã¢ã¥ããã¯ããé·ã磚ãäžãããäžèŸºåããããäžç芳ãå®çŸ©ããCore ãš Disposable ã®å¢çãåŒããå¶ã¿ãžãšå€ãã£ãŠãããŸããããã¯ç°¡åã§ã¯ãããŸããããé£ãããããããèããããšãã®ãã®ãé¢çœããªããçµç¹ã§å®çŸ©ããŠãããªã³ãããžãŒããä»åºŠã¯ãããã¯ãã®äžç芳ãšããŠåŒãçŽããŠããââãã®å¢çèšèšã«ãããããããã®ãœãããŠã§ã¢ã¥ããã®é¢çœãããããšæããŠããŸãã åºå
žã»åè æ¬èšäºã«ããããDisposable Systemsãã®èãæ¹ã¯ã以äžã®èšäºãåèã«ããŠããŸãã - Tuan-Anh Tran, " Architecture for Disposable Systems "
ããã«ã¡ã¯ãéçº1éšã®æäžã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 8æ¬ç® ã§ãã ãšããªãŒã§ã¯AIãšãŒãžã§ã³ãã瀟å
ã®ããããæ¥åã§æŽ»çšããŠããããšãç®æããŠããŸãããã®AIãšãŒãžã§ã³ããã¡ãæ¯ããã®ãããŒã¿åºç€ã§ãããããŠãã®åºç€ããAIã«ããŒã¿ããèªãŸãããããã®ãã®ãããAIãšãŒãžã§ã³ãããåãããããã®ãã®ãžé²åãããŠãããããšèããŠããŸããæ¬èšäºã§ã¯ããã®ããã«å¿
èŠãªã¹ããããæŽçããŸãã 人ã®ããã®åºç€ãããAIãšãŒãžã§ã³ãã "åãã" åºç€ãž ãããŸã§ã®ããŒã¿åºç€ã¯ãæé»ã®ãã¡ã«ã人ã䜿ããåæã§èšèšãããŠããŸãããããã·ã¥ããŒããèŠãã®ããSQLãæžãã®ã人ã§ããããã®å£²äžã«ã¯ææ°æãå«ãŸããŠãããã ã£ãïŒããšããå®çŸ©ã®ææ§ããã人ãæèãšçµéšã§è£å®ããŠããŸããã å©çšè
ãAIãšãŒãžã§ã³ãã«å€ãããšããã®æé»ã®è£å®ãå¹ããªããªããŸããããã«ãšãŒãžã§ã³ããå¢ããŠããããšãåæã«ç«ã€ãšãåºç€ã¯ç¹å®ã®èª°ãã®éå
·ã§ã¯ãªãããã¹ãŠã®ãšãŒãžã§ã³ããç«ã€å
±éã®è¶³å Žã«ãªããŸããè¶³å Žãææ§ãªãŸãŸãšãŒãžã§ã³ããå¢ãããšãææ§ãã®è§£éããšãŒãžã§ã³ãã®æ°ã ãçãŸããŠããŸããŸãã ããã«AIãšãŒãžã§ã³ãæä»£ã®ããŒã¿åºç€ã¯ãããŒã¿ãåç
§ããŠè³ªåã«çãããšãã£ããããŒã¿ããèªãããããã«ããã ãã§ã¯äžååã ãšèããŠããŸããããŒã¿ã«ããšã¥ããŠæ¥åã®äžã§è¡åãããšãŒãžã§ã³ããæ¯ãããã€ãŸãAIãšãŒãžã§ã³ãããåããããšãããŸã§ããåºç€ã®è²¬åãšããŠèããŠããå¿
èŠããããŸãã ãã®ãããªåºç€ã«ã¯ã次ã®3ã€ã®ã¹ãããããããšèããŠããŸãã åç
§ã§ãã : ããããããŒã¿ãåéããAIãåç
§å¯èœãªç¶æ
ã«ããïŒã¡ããªãªã³ã¢ãŒããã¯ãã£ïŒ è§£éãééããªã : ææšãçšèªã®æå³ãäžå
å®çŸ©ããïŒã»ãã³ãã£ãã¯ã¬ã€ã€ãŒïŒ è¡åã§ãã : æ¥åã®ãªããžã§ã¯ãã»é¢ä¿ã»ã¢ã¯ã·ã§ã³ãæ©æ¢°å¯èªã«ããïŒãªã³ãããžãŒïŒ é ã«èŠãŠãããŸãã ããããããŒã¿ãéããAIãåç
§ã§ããç¶æ
ã«ãã æåã®ã¹ãããã¯ãæ§é åã»éæ§é åãåããããŒã¿ãåéããAIãåç
§ã§ããç¶æ
ã«ããããšã§ããããã§æ¡çšããŠããã®ãã¡ããªãªã³ã¢ãŒããã¯ãã£ã§ãã ã¡ããªãªã³ã¢ãŒããã¯ãã£ã¯ãããŒã¿ãBronzeïŒçããŒã¿ïŒãSilverïŒã¯ã¬ã³ãžã³ã°ã»æŽåœ¢æžã¿ïŒãGoldïŒããžãã¹å©çšå¯èœïŒãšããå±€ã«åããŠã段éçã«åè³ªãææ ŒãããŠããèšèšã§ãã ïŒåºå
ž: What is a Medallion Architecture? | Databricks ïŒ ãã€ã³ãã¯ãããããªããŒã¿ãäžçºã§äœããã®ã§ã¯ãªããçããŒã¿ãæšãŠãã«ä¿æãããŸãŸãä¿¡é Œã§ããç¶æ
ãžæ®µéçã«å°éãããããšã«ãããŸããAIãšãŒãžã§ã³ãæä»£ã«ã¯ããã®å±€ã®åé¢ãããäžã€ã®æå³ãæã¡ãŸãããšãŒãžã§ã³ãã«ã©ã®å±€ãèŠããããå¶åŸ¡ã§ããããšã§ããå質ä¿èšŒãããGoldå±€ã ãããšãŒãžã§ã³ãã®åç
§å
ã«ããããšã§ãçããŒã¿ã®æºããã«åŒãããããåçãæ§é çã«é²ããŸãã ãã®ã¹ããããŸã§æŽããšãText to SQLãåãå§ããŸãããå
æã®ãã£ãã«å¥å£²äžã¯ïŒããšèãã°ãšãŒãžã§ã³ããSQLãæžããŠçããŠãããã人ãçµæã確ãããªãã䜿ã圢ã§ããã°ãAI掻çšã¯ããããååå§ããããŸãã ãã ãããåç
§ã§ããããšãæ£ããè§£éã§ãããã®éã«ã¯æºããããŸããããŒãã«ãšã«ã©ã ãèŠããããšãšããã®æ°åãäœãæå³ããããçè§£ããŠããããšã¯ãå¥ã®åé¡ã ããã§ãã AIãè§£éãééããªãç¶æ
ã«ãã 2ã€ç®ã®ã¹ãããã¯ãã»ãã³ãã£ãã¯ã¬ã€ã€ãŒã®æŽåã§ããææšã®å®çŸ©ããã£ã¡ã³ã·ã§ã³ãã·ããã ãçšèªãšãã£ãããžãã¹äžã®æå³ããBIããŒã«ããšãŒãžã§ã³ãã®åŽã§ã¯ãªãããŒã¿å±€ã§äžå
çã«å®çŸ©ããŸãã ããšãã°CACïŒé¡§å®¢ç²åŸã³ã¹ãïŒã®å®çŸ©ããšãŒãžã§ã³ãéã§ææ§ã ã£ããšããŸãããããšãäºæ¥KPIåæãšãŒãžã§ã³ããšããŒã±ãã£ã³ã°ãšãŒãžã§ã³ããç°ãªãèšç®åŒã®CACãèŠãŠåããŠããŸãããšãã£ãããšãèµ·ãããŸãããããã©ã¡ãã®SQLãæ£ããããããã®é£ãéãã«æ°ã¥ãã®ã¯å°é£ã§ãã Goldã«èšç®æžã¿ã®CACããŒãã«ã眮ãæããããŸãããCACã®ãããªæ¯çææšã¯èšç®æžã¿ã®å€ãåéèšã§ããŸããããå
šãã£ãã«åç®ã§ã¯?ããšç²åºŠã®éã質åãæ¥ãç¬éããšãŒãžã§ã³ãã¯CACã®å¹³åãåã£ãŠééããŸããã ããå¿
èŠãªã®ã¯èšç®çµæã§ã¯ãªããèšç®åŒã®å®çŸ©ã§ãã ã»ãã³ãã£ãã¯ã¬ã€ã€ãŒã¯ããã®å®çŸ©ãããŒã¿å±€ã§ç®¡çããŸããDatabricksã®å®è£
ã§èšãã° Unity Catalog Business Semantics ãããã«ããããŸããäžæ žãšãªãmetric viewã¯ã枬床ïŒCACã®èšç®åŒãã®ãã®ïŒãšããããéèšãããã£ã¡ã³ã·ã§ã³ãåé¢ããŠå®çŸ©ããä»çµã¿ã§ãSQLã»ããã·ã¥ããŒãã»ãšãŒãžã§ã³ãã®ã©ãããå©çšããŠããåãå®çŸ©ããåãèšç®ã決å®çã«å®è¡ãããŸããå ã㊠glossaryãdomains ãšãã£ãçšèªã»æèãæŽåããæ©èœã®çºè¡šãç¶ããŠããããã®é åãžã®æè³ã¯ãã©ãããã©ãŒã åŽã§ãå éããŠããŸãã å¹æã¯æ°åã«ã衚ããŠããŸããdbtã2026幎ã«å宿œãã ãã³ãããŒã¯ ã§ã¯ãText to SQLåäœã®ç²ŸåºŠã¯ææ°ã¢ãã«ã§64.5%ãŸã§æ¹åããäžæ¹ãã»ãã³ãã£ãã¯ã¬ã€ã€ãŒçµç±ã§ã¯ã«ããŒããã質åã«å¯ŸããŠã»ãŒ100%ã«å°éããŠããŸããã¢ãã«ã®é²åã ãã§ã¯åãŸããªãå·®ããå®çŸ©ã®äžå
åã§åãŸããšããããšã§ãã ãããŸã§æŽããšããšãŒãžã§ã³ãã¯ææšãæ£ããèšç®ããèŠå ãæ£ããåè§£ã§ããããã«ãªããŸãããèªããã¯ã»ãŒå®æã§ããããããåæã ãã§ã¯ãªãè¡åãŸã§ä¿ãããšãããšããŸã 決å®çã«è¶³ããªããã®ããããŸãã AIãè¡åã§ããç¶æ
ã«ãã ãªã³ãããžãŒãšã¯äœã 3ã€ç®ã®ã¹ãããããªã³ãããžãŒã®æ§ç¯ã§ãããã®ããã°ãªã¬ãŒã® 1æ¬ç®ã§CTOãçŽ¹ä» ããŠããŸãããããªã³ãããžãŒãšã¯ãæ¥åãæ§æãã ãªããžã§ã¯ã ïŒé¡§å®¢ãåæ³šãåå...ïŒããã® é¢ä¿ ããããŠããããã«å®è¡ã§ãã ã¢ã¯ã·ã§ã³ ããæ©æ¢°å¯èªãªåœ¢ã§å®çŸ©ãããã®ã§ãã ããšããšãªã³ãããžãŒã¯ç¥èå·¥åŠã®çšèªã§ãå€å
žçã«ã¯ãªããžã§ã¯ããšé¢ä¿ã®èšè¿°ãæããŸãããšã³ã¿ãŒãã©ã€ãºã®æèã§ã¯Palantirããããæ¡åŒµãããªããžã§ã¯ãã»ããããã£ã»é¢ä¿ãšããã»ãã³ãã£ãã¯ãªèŠçŽ ã«å ããŠãã¢ã¯ã·ã§ã³ãšãããäžçã倿ŽããæäœããŸã§ããªã³ãããžãŒã«å«ããŠããŸãïŒåè: Palantir Ontology ïŒã æ¥çã®çŸåšå° ãã®é åã¯ããŸãã«è£œååãå§ãŸã£ããšããã§ããDatabricksã2026幎6æã®Data + AI Summitã§ç¬èªã®ãªã³ãããžãŒã§ãã Genie Ontology ãçºè¡šããŸããïŒçŸåšãã¬ãã¥ãŒïŒãããŒãã«ã»ã¯ãšãªã»ããã·ã¥ããŒãããäºæ¥ã®æèãèªåæœåºããŠçããã°ã©ããæ§ç¯ãããã®ã§ãUnity Catalogã§å®çŸ©ããã»ãã³ãã£ã¯ã¹ããã®ãªã³ãããžãŒã«äŸçµŠãããæ§é ã«ãªã£ãŠããŸããã¢ã¯ã·ã§ã³å®çŸ©ãŸã§ã¯å«ãŸãªããããããŸãããããªããžã§ã¯ããšé¢ä¿ã®èªåæ§ç¯ãšããæå³ã§åãæ¹åã«é²ãã§ããŸãã è€æ°ã®ãšãŒãžã§ã³ãããåãå°å³ã®äžã§åã äŸãšããŠãå®æè³Œå
¥åã®ECïŒãµãã¹ã¯ECïŒã§ãªã³ãããžãŒã®äžéšãèããŠã¿ãŸãã æ§æèŠçŽ ã¯æ¬¡ã®4ã€ã§ãã ãªããžã§ã¯ã : 顧客ã宿å¥çŽã宿忳šïŒç¬¬nåã®åå¥ã®ãå±ãïŒãååãåšåº«åŒåœãé
é é¢ä¿ : 顧客ã¯å®æå¥çŽãæã€ã宿å¥çŽã¯å®æå泚ãçæããã宿忳šã¯ååãå«ã¿ãåšåº«ãåŒãåœãŠãé
éã«çŽã¥ã ç¶æ
: 宿忳šã¯ãåä»äž â åºè·ç¢ºå® â çºéæžã¿ããšé·ç§»ãããããå±ãæ¥ã®2æ¥åã«åºè·ç¢ºå®ãžç§»ãããšããç· åã®å®çŸ©ãããã«å±ãã ã¢ã¯ã·ã§ã³ : åãªããžã§ã¯ãã«å¯Ÿããæäœãåææ¡ä»¶ã»å¹æã»æš©éãã»ããã§å®çŸ©ããã é
éå
ã倿ŽããïŒåæ: ç¶æ
ãåä»äžïŒ ã¡ãã¥ãŒãå·®ãæ¿ããïŒåæ: ç¶æ
ãåä»äžããã€ãããŸããã³ãŒã¹ïŒ 次ååã®å€æŽãäºçŽããïŒå¯Ÿè±¡: 宿å¥çŽããã€ã§ãå¯ïŒ ãã®ãªã³ãããžãŒã®äžã§ãè€æ°ã®ãšãŒãžã§ã³ããåããšã©ããªãããåããµãã¹ã¯ECã§åãCSãšãŒãžã§ã³ããšåšåº«ãªãã¬ãŒã·ã§ã³ãšãŒãžã§ã³ããããã±ãŒã¹ãèããŸããããã§èŠããã®ã¯ãäºãã«ç¡é¢ä¿ãª2ã€ã®åºæ¥äºã§ããããæ¥ãCSãšãŒãžã§ã³ãã«ã¯é¡§å®¢ãããé
éå
ãå€ãããããšããåãåãããå±ããŸããäžæ¹ãåšåº«ãªãã¬ãŒã·ã§ã³ãšãŒãžã§ã³ãã®åŽã§ã¯ãå
¥è·é
å»¶ã«ãã£ãŠæšæåºè·åã®åšåº«ãäžè¶³ããŠããŸãããå¥ã
ã®ããªã¬ã§ã2äœã¯ããããç¬ç«ã«åãåºããŸããããããã®åãã䞊ã¹ããšãããªããŸãã CSãšãŒãžã§ã³ã åšåº«ãªãã¬ãŒã·ã§ã³ãšãŒãžã§ã³ã èµ·ããã㚠顧客ãé
éå
ãå€ãããã å
¥è·é
å»¶ã§æšæåºè·åã®åšåº«ãäžè¶³ é¢ä¿ã®èŸ¿ãæ¹ é¡§å®¢ â 宿å¥çŽ â 宿忳š åå â åšåº«åŒåœ â 宿忳š åä»äžã®å泚ãžã®è¡å ãé
éå
ã倿Žããããå®è¡ ãã¡ãã¥ãŒãå·®ãæ¿ãããã§æ¬ åãåžå åºè·ç¢ºå®æžã¿ã®å泚ãžã®è¡å ãæ¬¡ååã®å€æŽãäºçŽãããã«åãæ¿ãããæ¬¡ååããæ°ããäœæã«ãå±ãããŸãããšæ¡å
åŒåœæžã¿ã®ãã察象å€ãæãä»ããªã ãã®2äœã¯ãäŒè©±ãããŠããªããã°ãä»äºã®åŒãç¶ããããŠããŸãããèµ·ç¹ãéããŸããçæ¹ã¯é¡§å®¢ãããããçæ¹ã¯ååããé¢ä¿ã蟿ããåã宿忳šãªããžã§ã¯ãã«å°éããŠããã ãã§ãããããŠ2äœãå
±éããŠåç
§ããŠããã®ã¯ã宿忳šã®ãç¶æ
ããšããã®ç¶æ
ãåææ¡ä»¶ã«æã€ã¢ã¯ã·ã§ã³ã®å®çŸ©ã§ãã顧客察å¿ã𿬠å察å¿ãšããå¥ã
ã®æ¥åãççŸããªãã®ã¯ããåºè·ç¢ºå®åŸã¯å€æŽã§ããªãããšããã«ãŒã«ãã¢ã¯ã·ã§ã³ã®åææ¡ä»¶ãšããŠåºç€ã«äžã€ã ãååšããŠãäž¡æ¹ããããåç
§ããŠããããã§ãã ã«ãŒã«ãåãšãŒãžã§ã³ãã®ããã³ãããMCPããŒã«ã®èª¬ææã«æžãã°æžãããšæããããããŸãããå®éããšãŒãžã§ã³ãã1ã2äœã®ãã¡ã¯ããã§åããŸãããããããã¯å®çŸ©ã®ã³ããŒã§ãã10äœã«å®çŸ©ãã³ããŒãããäžçã§ã¯ãã«ãŒã«å€æŽã®ãã³ã«10ç®æã®æ¹ä¿®ãçºçããçŽãæŒãããšãŒãžã§ã³ãã¯æ§ã«ãŒã«ã§åãç¶ããŸããAPIåŽã§å€æŽãæåŠããããšã¯ã§ããŸãããããã§é²ããã®ã¯èª€ã£ãå®è¡ãŸã§ã§ããšãŒãžã§ã³ãã¯ã倿Žã§ããŸããããšæ¡å
ããŠããå®è¡ã«å€±æããå¯èœæ§ããããããããŸããããªã³ãããžãŒã¯ãã®ç¥èãåç
§ã«å€ããŸãããšãŒãžã§ã³ããäœäœããŠããåç
§å
ã¯1ã€ã§ãã ãã®æ§é ã®åŒ·ãã¯ãã«ãŒã«ãå€ããæ¥ã«ã¯ã£ããçŸããŸããåºè·ç· åã忥ãã2æ¥åã«æ©ããããšããæ¥å倿ãäžãããšããŸãã倿Žããã®ã¯åºç€äžã®å®çŸ©1ç®æããã®ç¬éãããCSãšãŒãžã§ã³ãã®æ¡å
ããåšåº«ãªãã¬ãŒã·ã§ã³ãšãŒãžã§ã³ãã®çµã¿æ¿ãç¯å²ããå°æ¥äœãããäœäœç®ãã®ãšãŒãžã§ã³ãã®è¡åãããã¹ãŠåæã«æ°ããã«ãŒã«ã«åŸããŸãã 3å±€ã®äžã§ãšãŒãžã§ã³ããåãã ãããŸã§ã®3ã¹ããããäžåºŠã«çºãããšããããªããŸããã¹ããã1ã§ããŒã¿ãèŠãããã¹ããã2ã§æ°åãæ£ããèªãããã¹ããã3ã§ãäœãã§ããŠãå®è¡ãããšäœãã©ãå€ãããããåããã ãããŸã§ã¯CSãšåšåº«ãªãã¬ãŒã·ã§ã³ã®2äœã§èŠãŠããŸãããããã®åå°ã®äžã«ã¯ãããŒã±ãã£ã³ã°ãšãŒãžã§ã³ããäºå®ç®¡çãšãŒãžã§ã³ãããšæ¥åããšã®ãšãŒãžã§ã³ãã䞊ã¹ãŠãããŸããå
šå¡ãåãææšå®çŸ©ãèªã¿ãåããªããžã§ã¯ããšã¢ã¯ã·ã§ã³å®çŸ©ã®äžã§åããããŒã¿åéã ããé²ããŠãšãŒãžã§ã³ããå¢ãããšãææšã»ãããŒã»ã«ãŒã«ã®å®çŸ©ãåãšãŒãžã§ã³ãã®ããã³ãããžãµã€ãåããŠãããŸããã3å±€ãæŽã£ãåºç€ã®äžã§ã¯ããã¹ãŠã®ãšãŒãžã§ã³ããåãäžçãèŠãŠè¡åããŸãã ãšããªãŒã¯ã©ãåãçµãã ãšããªãŒã§ã¯ã¹ããã1ã«ãããŸã§æè³ãç¶ããŠããŠãããã¡ããªãªã³ã¢ãŒããã¯ãã£ã«ããåºç€ã¯æŽãã€ã€ãããŸããã¹ããã3ã®ãªã³ãããžãŒã¯æè¡çã«ããŸã æ°ãããããã«å
šé¢é©çšã§ããæ®µéã§ã¯ãããŸãããããã§ä»æã¯ãã¹ããã3ãæèããªãããã¹ããã2ã®ã»ãã³ãã£ãã¯ã¬ã€ã€ãŒãæŽåããŠãããŸãã ãã®ã¹ããã2ãš3ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããšäººã®æé»ç¥ã«æ£åšããŠããäžçã®å®çŸ©ããåºç€äžã®å®£èšçã§æ©æ¢°å¯èªãªäžç®æãžåŒãäžããŠããäœæ¥ã§ãããCACã®èšç®åŒãããåºè·ç¢ºå®åŸã¯å€æŽã§ããªãããšããå®çŸ©ããä»ãã®ç¬éãã¢ããªã±ãŒã·ã§ã³ã®å®è£
ã®äžã«ããããŠãªãã¬ãŒã·ã§ã³ãæ
ã人ã®é ã®äžã«ååšããŠããŸãã ãããŠããããéèŠãªã®ã§ããããã®äœæ¥ã¯ããŒã¿ããŒã ãå€ãã芳枬ããã ãã§ã¯å®éã§ããŸããããç· åãäœæã«ãããããCACã«äœãå«ããããã¯ãããŒã¿ã®äžã«çããããåé¡ã§ã¯ãªããããžãã¹ã®æææ±ºå®ãã®ãã®ã ããã§ããã»ãã³ãã£ãã¯ã¬ã€ã€ãŒããªã³ãããžãŒããæè¡ã®åé¡ã§ãã以åã«ãããžãã¹ãšäžç·ã«å®çŸ©ã決ãã«ããçµç¹ã®åé¡ã§ããã ããããããã®ãªã¬ãŒã® 1æ¬ç®ã§CTOãæžãã ããšã³ãžãã¢ãäºæ¥ã®äžã«å
¥ã£ãŠãã®åºç€ãäœã£ãŠãããšãã話ã«ãªãã®ã ãšæã£ãŠããŸãã åºç€ãè²ãŠãããšãšãããžãã¹ãšå
±ã«å®çŸ©ã決ããããšããã®äž¡æ¹ãæã£ããšããããŒã¿åºç€ã¯AIã«ããŒã¿ãèªãŸããåºç€ãããAIãšãŒãžã§ã³ããåããåºç€ã«ãªããŸãã ãããã« æ¬èšäºã§ã¯ãAIãšãŒãžã§ã³ãããåãããããã®ããŒã¿åºç€ããåç
§ã§ããã»è§£éãééããªãã»è¡åã§ããããšãã3ã€ã®ã¹ãããã§æŽçããŸããããšããªãŒã§ã¯ãã®åºç€ã¥ãããããããæ¬æ ŒåãããŠãããŸãã鲿ãåŠã³ã¯ããŸããã®ããã°ã§å
±æããŠããäºå®ã§ãã ãšããªãŒã§ã¯äžç·ã«åã仲éãåéäžã§ãïŒ ãšã³ãžãã¢ããã°ããã£ããã«å°ãã§ãèå³ãæã£ãŠããã ãããããŸãã¯ã«ãžã¥ã¢ã«ã«é¢è«ããŸãããïŒ
AI掻çšãã©ãè©äŸ¡ããã ââ TokenMaxxing ãã TokenOptimization ãž æ ªåŒäŒç€ŸãšããªãŒã§CTOãåããŠããä»äº( @imakei_ )ã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 第7æ¬ç® ã§ããèªåã¯ãããŸã§ã第1æ¬ç®ã§ã ãªã³ãããžãŒãšçµç¹OS ãã第4æ¬ç®ã§ã AIãã¡ãŒã¹ããªçµç¹ãã¶ã€ã³ ãã«ã€ããŠæžããŠããŸãããä»åã¯ããããšå°ç¶ãã®ããŒããšããŠã AI掻çšãã©ãè©äŸ¡ããã ã«ã€ããŠæžããŸãã çµè«ãå
ã«èšããšãAI掻çšã®è©äŸ¡ææšã¯åºå®ãããã®ã§ã¯ãªãããã§ãŒãºã«å¿ã㊠TokenMaxxing â TokenOptimization ãšä¹ãæããŠãããã®ããããŠæçµçã«ã¯åœ¹ç®ãçµããŠå»æ¢ãã¹ããã®ãã ãšèããŠããŸãã ãªãAI掻çšã®ãè©äŸ¡ãã¯é£ããã®ã AI掻çšãã©ããããé²ãã§ããããæž¬ãããšãããšãããã«å£ã«ã¶ã€ãããŸããåŸæ¥ã®çç£æ§ææšââã³ãŒãè¡æ°ãPRæ°ãããã·ãã£ââã¯ãAIãåæã«ãããšããŸãæ©èœããªãã©ããããããã人ããã¹ãªãŒãããŸããAIãæžãã倧éã®ã³ãŒããè¡æ°ã§è©äŸ¡ããã°çå€ãã§ãããéã«ãäžå¯§ã«å°ããã€ããçŸåŸ³ãšããææšã¯ãAIã«ä»»ããåãã«ãã¬ãŒãããããŠããŸããŸãã ããã«åä»ãªã®ã¯ããããããããã¡ã®ã¡ã³ããŒã¯AIã䜿ããŠããã®ãïŒããšããäžæ¬¡æ
å ±ãããæåã¯ææ§ã ãšããç¹ã§ããè©äŸ¡ã®èšèšã¯ããã®ããŸãçŸç¶ãèŠããªãããšããããå§ãŸããŸãã ãã§ãŒãº1: TokenMaxxing ââ ãŸãã䜿ãåãã åŒç€Ÿã§CCïŒClaude CodeïŒã®å©çšãã°ãåæããŠãŸãèŠããŠããã®ã¯ã 人éã¬ãã¥ãŒæä»£ã®ç¿æ
£ãAIã®äŒžã³ããã«äžéããããŠãã ãšããæ§é ã§ãããå°ããã®PRãæ
éãããå§è²ããªãã§ãèªåã®ç®ã§æçµç¢ºèªããââCLIã®å©çšæéãçãã¡ã³ããŒã»ã©ããã®åŸåã匷ãåºãŸããæªãããšã§ã¯ãªãã®ã§ãããããã¯ã人éãå
šéšã¬ãã¥ãŒã§ããç¯å²ãã«ææãçžãåãæ¹ã§ãAIãåæã«ãããšè¶³ããã«ãªããŸãã ããã§å°å
¥ããã®ã TokenMaxxing ã§ãããã£ããèšãã°ãããŒã¯ã³äœ¿çšéãæãããå¢ããããšããå·ä»€ã§ãAIã«ã©ãã ãå§ããããéã§å¯èŠåããè¡åãã®ãã®ãå€ãã«ããåãçµã¿ã§ããããã§å€§äºãªã®ã¯ããã㯠ãããŠç²ãææš ã ãšããããšãç®çã¯ç²Ÿç·»ãªæž¬å®ã§ã¯ãªããæ§æ¥ã®ç¿æ
£ãå£ãããã®åŒ·å¶åïŒforcing functionïŒã§ããããŸã¯Databricksäžã«å©çšãã°ãèç©ããŠããæ®µéã§ãå人åäœã§ã®å¯èŠåã¯ããããã§ããããŸãã¯ã䜿ã£ãŠãããããã䜿ãåãããšãã空æ°ãæç¢ºã«äœããŸããã ãããŠããäžã€éèŠãªã®ã¯ã ããã¯å幎çšåºŠã®éæž¡æã«éå®ããææš ã§ãããææ«ã«ã¯äžèŠã«ãªãããšãæåããç¹ã蟌ãã§ããããšããç¹ã§ããTokenMaxxing ã¯æ°žç¶ããè©äŸ¡è»žã§ã¯ãããŸããã TokenMaxxing ã®éç ââ éã¯äŸ¡å€ã§ã¯ãªã TokenMaxxing ã«ã¯æç¢ºãªéçããããŸããã°ããããŒãã®æ³åãããªãã¡ãææšãç®æšã«ãªããšããã®ææšã¯ææšãšããŠæ©èœããªããªãããšããåé¡ã§ããããŒã¯ã³ãå¢ããããšèªäœãç®çåããã°ãç¡é§ãªçæãéå°ãªè©Šè¡ãå¢ããéãææãšä¹é¢ããŠãããŸããåœç¶ãã³ã¹ããèšãã¿ãŸãã ã€ãŸã TokenMaxxing ã¯ãã䜿ãããåœããåã«ãªããŸã§ã®ãæéãåºåã£ãææšã§ãã䜿çšãæ¥åžžã«ãªã£ãç¬éãããéã远ãããšã¯ç¡é§ãçãæ¹åã«å転ããŸããã ãããããæ¬¡ã®ãã§ãŒãºãžä¹ãæããå¿
èŠããããŸãã ãã§ãŒãº2: TokenOptimization ââ ã䜿ãããªãã㞠次ã®ãã§ãŒãºã TokenOptimization ã§ããããã§ã®è»žã¯ãéãããã質ããžãèšãæããã° ããŒã¯ã³ãããã®ã¢ãŠãã«ã ïŒvalue per tokenïŒ ãžãšç§»ããŸããåãææããããå°ãªããããè³¢ãåºãæ¹åã§ãã å
·äœçã«ã¯ãã¿ã¹ã¯ã«å¿ããã¢ãã«éžæïŒè»œãäœæ¥ã«éãã¢ãã«ã䜿ããªãïŒãã³ã³ããã¹ãã®å¹çåãharnessãã¹ãã«ã»ãµããšãŒãžã§ã³ãã®æŽåããããŠãã©ããŸã§AIã«å§ããã©ãã¯äººãæã€ããã®èŠæ¥µãããšãã£ã話ã«ãªããŸãã ãããŠããã§å¹ããŠããã®ãããããŸã§ã®é£èŒã§æžããŠããåå°ã§ãã第1æ¬ç®ã®ãªã³ãããžãŒã»çµç¹OSãæŽã£ãŠããã»ã©ãAIã¯çŸå®ã«æ£ããæ¥å°ã§ããå°ãªãããåãã§ç確ã«åããŸãââæ¥å°ã¯ãããèªäœãæè¯ã®æé©åã§ãããŸããæå¹ã ã£ãããã³ãããã¹ãã«ãå人ã«éããã第4æ¬ç®ã§æžãããæšªç³žãïŒå匷äŒã»æšªæã³ãã¥ããã£ïŒã§å
±æããããšã§ãTokenOptimization ã¯å人æã§ã¯ãªã çµç¹ã®å
±æè³ç£ ã«ãªããŸãã䜿ãããªãã¯ãæšªã§æµéãããŠåããŠçµç¹ã®åã«ãªããŸãã è©äŸ¡ææšã¯ã廿¢ããåæãã§èšèšããŠããã Token Maxxing ãã Token Optimizationãã¢ãŠãã«ã ãžã®ç§»è¡ ãããŸã§ãäžæ®µåŒããŠçºãããšãèŠããŠããååããããŸãã éæž¡æã®è©äŸ¡ææšã¯ãè¡åãå®çããã廿¢ããåæã§èšèšããŠãããšæ±ãããã ããšããããšã§ãã TokenMaxxing ã¯ã䜿ããããTokenOptimization ã¯ã䜿ãããªããããçµç¹ã«å®çãããããã®ææšã§ããå®çããã°ããã®ææšã¯ããèŠãªããŠãããªããŸããæçµçã«èŠãã¹ããªã®ã¯ãããŒã¯ã³ã®ãããªææ®µã®ææšã§ã¯ãªããäºæ¥ã«æ¥ç¶ãã ã¢ãŠãã«ã ã§ããããšãã°ãããäºè±¡ã®æ€ç¥ããã倿ã»å®è¡ã»ã·ã¹ãã åæ ãŸã§ãäœåã§åããããšãã£ããæææ±ºå®ã®ã«ãŒããã®ãã®ã®éãããããžåæãããŠããã®ãçæ³ã ãšèããŠããŸãã è£ãè¿ãã°ãè¯ãéæž¡æã®ææšã«ã¯å
±éã®æ¡ä»¶ããããŸããâ è¡åãã¯ã£ããå€ããããããšãâ¡å€å°ç²ããŠããããšããããŠâ¢çµäºæ¡ä»¶ïŒãã€å»æ¢ãããïŒã決ãŸã£ãŠããããšãã§ãã廿¢ãåæã«ããªãææšã¯ããã€ã®éã«ãç®çåããŠçµç¹ãçžããŸãã ãããã« TokenMaxxing ã§ã䜿ããããTokenOptimization ã§ã䜿ãããªãããçµç¹ã«å®çãããæåŸã¯ããŒã¯ã³ã§æž¬ãããšèªäœããããŠãäºæ¥ã®ã¢ãŠãã«ã ã§æž¬ããè©äŸ¡ææšãåºå®ã®æ£è§£ãšããŠåŽããã®ã§ã¯ãªãããã§ãŒãºã«åãããŠèšèšããä¹ãæãã圹ç®ãçµããã廿¢ããŠããââãããAI掻çšã®è©äŸ¡ã«å¯ŸãããããŸã®èªåã®èãæ¹ã§ãã ææšã¯ãçµç¹ãå°ãããã®éå
·ã§ãã£ãŠãç®çã§ã¯ãããŸãããè¯ãææšã»ã©ããããèªããäžèŠã«ããŠãããã®ã ãšæããŸãã
éçº2éšã®å
åã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 第6æ¬ç® ã§ãã é·ãéçšãããŠããã·ã¹ãã ãšãããã®ã¯ãæ§ã
ãªèæ¯ããããããã¬ã¬ã·ãŒåããŠããããšãå€ããšæããŸãããŸããã®ã·ã¹ãã ãæ
åœããŠããéãå€ãã®å Žåã§äŒŒããããªåé¡ãçºçããŸãã 仿§æžãå€ã or ååšããªã æåã«å®è£
ããã¡ã³ããŒãããªã ãã¹ãããªã ãã®ãããªéçºã»éçšã»ä¿å®ãã¥ããç¶æ³ã ãšãææ¬çãªå¯Ÿçãããããåããªããªããªã¹ã¯ãèæ
®ããŠãéœåºŠç¶ãè¶³ãç¶ãè¶³ãã®æ¹ä¿®ãç¹°ãè¿ãããšã«ãªããçµæãšããŠããéçºã»éçšã»ä¿å®ãèŸããªããšããè² ã®ã«ãŒãã«é¥ãããšãå€ããšæããŸãã æè¿ã¯çæAIãã³ãŒããæžãã®ãåœããåã®ç¶æ
ã«ãªã£ãŠããŸãããªã®ã§ãAIã«äžžããšãªã©ã€ãããããšããããšãäžå¯èœã§ã¯ãªããªã£ãŠããŸãã ãããçµè«ããèšããšãã¬ã¬ã·ãŒã·ã¹ãã ã®å·æ°ã«ãããŠåçŽãªãªã©ã€ãã§ã¯æ©èœããªãããšãå€ããšèããŠããŸãã ãã®èšäºã§ã¯ããªããã®ãããªçµè«ã«ãªãã®ããæŽçããããã§ãAIãã¬ã¬ã·ãŒå·æ°ã®ããã®éæ³ãšããŠã§ã¯ãªããçè§£ãšæ®µéçç§»è¡ãä¿é²ããéå
·ãšããŠäœ¿ãçŸå®çãªé²ãæ¹ãèããŠã¿ãŸãã ãªãã¬ã¬ã·ãŒå·æ°ã¯é£ããã®ã ãããããªãã¬ã¬ã·ãŒã·ã¹ãã ã®å·æ°ã¯é£ãããšèšããã®ã§ãããããçç±ãåè§£ãããšãAIã®äœ¿çšæªäœ¿çšã«é¢ãããå
±éããŠããæ¬è³ªçãªåé¡ããããŸãã å
šäœåãèª°ãææ¡ããŠããªãïŒæ£ãã仿§ãäžæ åããŠããã³ãŒãã ããå¯äžã®æ£ã§ãããæ¬æ¥ã©ãåãã¹ããã倿ã§ãã人ãããªã ãã¹ãããªãïŒæ£ããã®åºæºããªã ãªã©ã€ãçµæã®åäœãæ£ãããã®ãã©ãããå€å®ããææ®µãååšããªã æé»ã®äŸåã»æŽå²ççµç·¯ãéæã«æ®ã£ãŠãã äžèŠç¹ã«éèŠã§ã¯ãªããšæãããã³ãŒãããå®ã¯ç¹å¥ãªåŠçã®ããã«å¿
èŠã ã£ãããã ããã§å
±éããŠããã®ã¯ãããããããããæ£ãããå®çŸ©ã§ããŠããªãããšã«èµ·å ããŠããç¹ã§ãã AIã«ãªã©ã€ããããŠãããã®çµæãæ£ãããã©ãããæ€èšŒã§ããªããã°æå³ããããŸãããAIã¯ããã£ãœãã³ãŒããé«éã«å€§éçç£ããããšãã§ããŸããããããå
ã®æåãä¿ã£ãŠããä¿èšŒã¯ã©ãã«ããªãããã§ãã ã€ãŸãã¬ã¬ã·ãŒå·æ°ã«ãããŠãŸãè¡ãã¹ãããšã¯ããããªããªã©ã€ãããããšã§ã¯ãªããæ£ãããå®çŸ©ã§ããç¶æ
ã«æã£ãŠããããšã§ãã 以äžããã®é åºã3ã€ã®ã¹ãããã§èŠãŠãããŸãã ãŸãçè§£ã«AIã䜿ã AIã®æåã®äœ¿ãã©ããã¯ãæžãããšã§ã¯ãªãèªãããšã§ããã¬ã¬ã·ãŒã³ãŒãã®æå€§ã®åé¡ã¯åè¿°ã®ãšãã誰ãå
šäœãææ¡ããŠããªãããšãªã®ã§ããããåããã®ã«AIã¯éåžžã«åããŠããŸãã å
·äœçã«ã¯ã次ã®ãããªçšéã§ãã ã³ãŒãã®æå説æ ç¹å®ã®é¢æ°ãã¢ãžã¥ãŒã«ãäœãããŠããã®ããèªç¶èšèªã§èŠçŽããã äŸåé¢ä¿ã®å¯èŠå ã©ã®ã¢ãžã¥ãŒã«ãã©ãããåŒã°ããŠãããã圱é¿ç¯å²ãæŽãåºããã ãããã³ãŒãåè£ã®æŽãåºã å°éäžèœãªã³ãŒããããã¯ã䜿ãããŠããªãåå²ã®åè£ãæãããã ãã€ã³ãã¯ããã¡ã€ã³ç¥èãæã€äººéãšã暪æçã«å€§éã®ã³ãŒããèªããAIã®åæ¥ãå¯èœã«ãªãç¹ã§ãã AIã¯ã³ãŒããäœãããŠãããïŒHowïŒãé«éã«èª¬æããŠãããŸããããªããããªã£ãŠãããïŒWhyïŒã¯ç¥ããŸãããäŸãã°ããç¹æ®åŠçãç¹å®é¡§å®¢åãã®å®è£
ã ã£ãããšãã£ãèæ¯ã§ããAIã«æåã説æããã人éããã®èæ¯ç¥èãšç
§ããåãããŠç¢ºèªããŠããããšã§ãæ£ãã仿§ã®ç¢ºå®ãæ©ããããšãã§ããŸãã ããã§åŸãçè§£ã¯ãåŸã®ã¹ãããã§äœãä¿èšŒãã¹ãããæ±ºããåå°ã«ãªããŸãã æ€èšŒå¯èœã«ãã çè§£ãé²ãã ããæ¬¡ã¯ãªã©ã€ãåã®å®å
šå¯Ÿçã宿œããŸãããã¹ãããªãã³ãŒãããªã©ã€ãããã®ã¯ãªã¹ã¯ãé«ãã®ã§ããŸãçŸç¶ã®æåãåºå®ãããã¹ããçšæããŸãã ããã§æå¹ãªã®ãç¹æ§ãã¹ã(Characterization Test)ãšããèãæ¹ã§ããããã¯æ£ãã仿§ããã¹ãã«æžãèµ·ããã®ã§ã¯ãªããçŸç¶ã®ã³ãŒããä»åºããŠããåºåããã®ãŸãŸæåŸ
å€ãšããŠåºå®ãããšããææ³ã§ããã¬ã¬ã·ãŒã³ãŒãã§ã¯æ£ãã仿§ãåãããªãã®ã§ãã²ãšãŸãçŸç¶ã®æåãåºæºã«ãããªã©ã€ãåŸããããå€ãããªãããšãä¿èšŒããããšããçºæ³ã§ãã ãã®ãããªãã¹ãã®é圢ã¥ããã¯AIãåŸæãšãããšããã§ããå
¥åãšåºåã®ãã¿ãŒã³ã倧éã«åæããããã¹ãã³ãŒãã®é圢ãéç£ãããããã ããã©ã®ãã¹ãã劥åœããäœãä¿èšŒãã¹ããã倿ããã®ã¯äººéã®ä»äºã§ããAIãçæãããã¹ãã«ã¯ãããŸããŸçŸç¶ã®ãã°ãŸã§æ£ããæåãšããŠåºå®ããŠããŸããã®ãæ··ãããŸãããããåæšéžæããã®ã¯èæ¯ãç¥ã人éã«ããã§ããŸããã ãã®æ®µéã®æ¬è³ªã¯ãæ£ãããAIãæ©æ¢°ãå€å®ã§ãã圢ã«åé¡ã倿ããããšã§ããäžåºŠãã¹ããšããåœ¢ã§æ£ãããå®çŸ©ã§ããã°ã以éã®ãªã©ã€ãã¯ãã¹ããéãããšããæ©æ¢°çã«æ€èšŒå¯èœãªåé¡ã«å€ããããšãã§ããŸãããããŸã§æ¥ãŠåããŠãAIã«ãããªã©ã€ããå®å
šã«åããããã«ãªããŸãã æ®µéçã«ç§»è¡ãã å®å
šå¯Ÿçã宿œã§ãããããããããªã©ã€ãã§ãããã ãããã§ãäžæ¬ãªã©ã€ãã¯é¿ããŸãã倧ããªåäœãäžåºŠã«çœ®ãæãããšãåé¡ãèµ·ãããšãã«åãåããåãæ»ããé£ãããªãããã§ãã ååã¯ãå°ããåäœã«åè§£ããŠãå°ããã€çœ®ãæããããšã§ãã代衚çãªã®ãã¹ãã©ã³ã°ã©ãŒãã£ã°ãã¿ãŒã³ã§ãæ°æ§ã®ã³ãŒãã䞊è¡çšŒåãããæ©èœåäœã§åŸã
ã«æ°ããå®è£
ãžåãæ¿ããŠããææ³ã§ãããã£ãŒãã£ãŒãã©ã°ã§æ°æ§ãåãæ¿ããããããã«ããŠããã°ãåé¡ãåºãŠãããå
ã«æ»ããŸããåã¹ãããã¯å°ããããã¹ããéããå·®åãã¬ãã¥ãŒã§ãã倧ããã«ä¿ã¡ãŸãã ãã®ãšãã倿Žã2çš®é¡ã«åãåãããšèŠéãããããªããŸãã æ©æ¢°çå€æã§æžãéšå æ§æã®çœ®ãæããAPIã®äžæ¬ãªããŒã ããã©ãŒãããçµ±äžãªã© 決ãŸã£ãã«ãŒã«ã§å€æã§ãããã®ã¯ãæ©æ¢°çããŒã«ïŒcodemodã®ãããªïŒãAIã«ä»»ãããã æå³ç倿ãå¿
èŠãªéšå ããŒã¿æ§é ã®èšèšå€æŽãæ¥åããžãã¯ã®åæ§æãªã© ãªããããããã®å€æã䌎ãããã人éã®é¢äžãå¿
èŠ AIã¯ãåè
ãé«éã«åŠçããåŸè
ã«ãããŠã¯ãã¹ãè£åŒ·ãéžæè¢æç€ºã§äººéãæ¯æŽããããã®äž¡èŒªãæ©èœããããšã§ãå°ããã€ç§»è¡ãé²ããããšãå¯èœã«ãªããŸãã AIãšäººéã®è²¬ä»»å¢ç ãããŸã§èŠãŠãããšãããã¬ã¬ã·ãŒå·æ°ã§ã¯AIã«ä»»ããŠããéšåãšã人éãæ¡ãç¶ããã¹ãéšåãšããããŸãã以äžã«ãã®ç·åŒããæŽçããŠãããŸãã AIãèŠæãšããã®ã¯ã次ã®ãããªé åã§ãã æé»ã®æ¥åã«ãŒã« ã³ãŒãã«ã¯çŸããªããéçšã§ã«ããŒãããŠããåæ ãªããããªã£ãŠãããã®æŽå²çèæ¯ éå»ã®é害察å¿ã顧客察å¿ã®åæ® åœ±é¿ç¯å²ã®èŠç©ãã 倱æãããšã被害ãã©ããŸã§åã¶ã ãããŠäœããæ°ãã€ããã¹ãã¯ãäžèŠãã£ãšããããåããŠããããã«èŠããŠãå®ã¯å
ã®æåã埮åŠã«å€ããŠããŸããããªèª€å€æãçºçãåŸãããšã§ãããã¹ããäžååãªãããããéãæããŠããŸããŸãããããèŠæããã®ã¯ãèæ¯ãçè§£ããæçµçã«å€æè²¬ä»»ãæã€äººéã ãã§ãã èªååããŠãã倿ãšäººéãæåŸã«è²¬ä»»ãæã€å€æãšã®ç·åŒããæèãããAIãä¿¡çšããããªãããããã¬ã¬ã·ãŒå·æ°ã§AIãå®å
šã«äœ¿ãããã®éèŠãªãã€ã³ããšèããŸãã åèïŒãªãã¡ã¯ã¿å®æœäŸ ãããŸã§ã®3ã¹ãããïŒçè§£ãã â æ€èšŒå¯èœã«ãã â æ®µéçã«ç§»è¡ããïŒããå®éã«éçšäžã®ã¬ã¬ã·ãŒã·ã¹ãã ã§è©ŠããŠã¿ãã®ã§ãã¹ãããã«æ²¿ã£ãŠç޹ä»ããŸãã ã¹ããã1ïŒãŸãçè§£ãã æåã«èããã®ã¯ãäœãå®ããã°æåãå€ãã£ãŠããªããšèšããã®ãããšããç¹ã§ãã ä»åã®ãªã©ã€ãã§å®ãããã£ãã®ã¯ãåã
ã®é¢æ°ãã¯ã©ã¹ã®æåãšãããããããªã¯ãšã¹ããåããŠããã¬ã¹ãã³ã¹ãè¿ããŸã§ã®çµ±åçãªæåã§ããã WebãµãŒãã®èšå®ãã«ãŒãã£ã³ã°ããã¬ãŒã ã¯ãŒã¯ãçµç±ããäžé£ã®åŠçã¯ãåäœãã¹ãã®ç²åºŠã§ã¯ç¢ºèªããããŸãããåäœãã¹ããè¶³ããŠããããæ¹ã§ã¯æãæŒããçºçãããªã¹ã¯ããããŸããã ããã§ãã¢ããªãäžã€ã®ç®±ãšã¿ãªããHTTPãªã¯ãšã¹ããšããå
¥åãšãè¿ã£ãŠããã¬ã¹ãã³ã¹ãšããåºåã ãã§æåãåºå®ããæ¹éã«ããŸããããããªãWebãµãŒããããã¬ãŒã ã¯ãŒã¯ãŸã§ãéããå®éã®æåããŸãããšå¯Ÿè±¡ã«ã§ããŸãã ããã¯ãŸãã«åè¿°ããç¹æ§ãã¹ãã®èãæ¹ãã®ãã®ã§ãã ã¹ããã2ïŒæ€èšŒå¯èœã«ãã å®ãã¹ãå¯Ÿè±¡ãæ±ºãŸã£ãã®ã§ããããæ©æ¢°çã«æ€èšŒã§ãã圢ã«ããŸãã ããã§æ¡çšããã®ã¯ãã¢ããªãHTTPã®å€åŽããå©ããã¬ã¹ãã³ã¹ãèšé²ããŠããããªã©ã€ãåŸã«åãå
¥åã§ç
§åããŠå·®åãåºãªãããšã確èªãã Golden Master Testãšããããææ³ã§ãã以äžã®ãããªå©ç¹ããããšèããŸããã ã¢ããªãæ¹ä¿®ãããçŸç¶ã®ãŸãŸäžžããšæ€èšŒã§ãã ã·ã¹ãã å
šäœãäžã€ã®ãã©ãã¯ããã¯ã¹ãšããŠç¢ºèªããã®ã§ããã¹ãã®ããã«å
éšãåå²ã»å·®ãæ¿ãå¯èœã«ãããããªæ¹ä¿®ãäžèŠã«ãªã æ€èšŒããŒã«ãã¢ããªã®èšèªã»ãã¬ãŒã ã¯ãŒã¯ã«äŸåããªã HTTPããåãã°ãããããŒã«åŽãå¥ã®èšèªã§æžããŠãæç«ãã ãªããã®æ¹åŒã¯èšé²ãããªã¯ãšã¹ãã®åããæåãæ
ä¿ã§ããªãããšããç¶²çŸ
æ§ã®éçããããŸããå®éã«å©ããçµè·¯ããã«ããŒãããªãã®ã§ãã©ã®ã±ãŒã¹ãèšé²å¯Ÿè±¡ã«éžã¶ããšããèšèšã®å€æãéèŠã§ãã å®éã«ãã¹ããå®è£
ãå§ãããšå®å®ããªãèŠå ãæ¬¡ã
ãšåºãŠããŸããã以äžã®ãããªãã®ãå®éã«ãããŸããã A/Bãã¹ãã«ããç»é¢ã®åºãåã ããããA/Bãã¹ãã®å®è£
ãå
¥ã£ãŠããããšãææ¡ããŠããªãã£ãïŒãã¹ãèªäœã¯åœç¶çµäºããŠããã¯ãïŒ åºåããªã¯ãšã¹ãããšã«å€ãããããå
¥åãšãªãCookieãåºå®ããŠçµæã決å®åãã æ¥æã«äŸåããæå æå»ãåçµããæ¡åŒµãå°å
¥ããæ¥ä»ã«äŸåããããŒãžãåçŸå¯èœã«ãã èªèšŒã«äŸåããæå èªèšŒãåæãšããç®æã¯ãèªèšŒãçªç Žãããã¹ãçšå®è£
ã远å ïŒãã¹ãç°å¢ã§ã®ã¿æå¹ïŒ ãããã調æŽãçµãŠãå
¬éããŒãžããèªèšŒåæã®è€æ°ãããŒã®å°ç·ãç»é²ç³»ããŒãžã«ã€ããŠèªåçã«æ€èšŒã§ããç¶æ
ãŸã§å°éã§ãããšèšããŸãããªã©ã€ãã®ååŸã§ãå€éšããèŠãæåãå€ãã£ãŠããªãããšãæ©æ¢°çã«ä¿èšŒããå®å
𿩿§ãç²åŸã§ããããšã«ãªããŸãã ã¹ããã3ïŒæ®µéçã«ç§»è¡ããïŒä»åŸã®äºå®ïŒ ãã®æç¹ã§ã¯ãäžéšã®ãšã³ããã€ã³ãã«å®å
𿩿§ãçšæã§ãããšããæ®µéã§ãããããå
ãããæ¬é¡ã®ãªã©ã€ãã«ãªããŸãã ïŒãšããããã§çŸæç¹ã§ã¯ãªã©ã€ãã§ãããšããç¶æ³ã§ã¯ãããŸããïŒ å®å
šç¶²ãã§ããããšã§ãå°ããåäœã§çœ®ãæããŠã¯ãã¹ãã§å·®åããªãããšã確èªããããšããæ®µéçãªç§»è¡ãå¯èœã«ãªããŸãã æ€èšŒå¯Ÿè±¡ã®ãšã³ããã€ã³ããåŸã
ã«åºããŠãããšããããããããã¹ãã®æšªå±éã¯ãŸãã«AIãåŸæãšãããšããã§ãã ãŸãšã ã¬ã¬ã·ãŒã·ã¹ãã ã®å·æ°ã«ãããAIã®æ¬è³ªã¯ãçè§£ã®å éãšãæ€èšŒå¯èœãªåäœãžã®åè§£ã®æ¯æŽã«ãããŸããç°¡åã«ãªã©ã€ãããŠãããéã®åŒŸäžžã§ã¯ãªãããšãã»ãšãã©ã§ãããã ãããããããŸã§ä»æ§ãåãããªãããã¹ãããªããã©ãããæãã€ããã°ãããåãããªãããšãã£ãçç±ã§è
°ãéãã£ãå·æ°äœæ¥ã®é床ã倧ããäžããããã®ã¯ç¢ºãã§ãã èªãã§çè§£ããå®å
šå¯Ÿçã宿œããå°ãã眮ãæããŠããããŸããã®äžé£ã®æµããAIã§å éããããã®ãããªäœ¿ãæ¹ãããããšã§ããããŸã§æãåºããªãã£ãã¬ã¬ã·ãŒã·ã¹ãã ã«å°ããã€æãå
¥ããŠãããããã«ãªãããšãAIãå©çšããå©ç¹ã§ãããšèããŠããŸãã
ããã«ã¡ã¯ãéçº1éšã®æäžã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 5æ¬ç® ã§ãã åŒç€Ÿã§ã¯ãã§ã« å
šç€Ÿå
±éã²ãŒããŠã§ã€ã«ãã瀟å
ãªã¢ãŒãMCPãµãŒããŒ ãæ§ç¯ãããããããããšã«MCPã瀟å
ã§å
補ããŠå€ãã®ç€Ÿå¡ã䜿ã£ãŠããããšã瀟å€ã®å
¬åŒMCPã®å©çšãçãã«ãªã£ãŠããŸããæ¬èšäºã§ã¯ãä»åŸçµç¹ã®MCP掻çšãæ¡å€§ãããšã¶ã€ãã課é¡ãæŽçãããããæ¯ããåºç€ãšããŠã®MCPã²ãŒããŠã§ã€ãšããã³ã³ã»ããã«ã€ããŠæžããŸãã MCP is deadã¯æ¬åœã åºç€ã®è©±ã«å
¥ãåã«ãããããMCPèªäœå¿
èŠã§ãããããä»å¹Ž2ææ«ã ãMCP is dead. Long live the CLIã ãšããèšäºãåé¿ãåŒã³ãŸãããLLMã¯CLIãšããã¥ã¡ã³ãããããã°åæã«ããããèªèšŒã¯ aws sso login ã gh auth login ãšããå®çžŸãããããŒã§æžããMCPãµãŒããŒã¯åæåãäžå®å®ã§åèªèšŒãçµãããªããæš©éã®å¶åŸ¡ãç²ããšãã䞻匵ã§ããæ¥ã
Claude Codeã䜿ã£ãŠãã人ã»ã©ãæãåœããå
容ã ãšæããŸãã äžæ¹ã§ãGitHubã®MCPãµãŒããŒãéçºãããšã³ãžãã¢ã¯ã MCP Dev Summit NA 2026ã®è¬æŒãMCP vs CLIsã ã§ããã®è«äºãéç±ããŠãããŸãã«ãã®ææã«MCPã®å©çšã¯æ¥å¢ããŠãããGitHub MCPãµãŒããŒã¯é廿倧ã®é±éå©çšéãèšé²ãããšèªã£ãŠããŸãããæ»ãã ããšèšããããã®ããå²äžæã䜿ãããŠããç¶æ
ãªããã§ãã CLIã§ååã æ¹ããŠMCPãšCLIã®éããæŽçããŠã¿ãŸãã CLI MCP èšèšã®åãå
人éåãã«èšèšæžã¿ã®ã³ãã³ã AIåãã«èšèšãããããŒã«ã»ãªãœãŒã¹ ã¢ãã«ãšã®çžæ§ åŠç¿ããŒã¿ã«è±å¯ããã€ãã§åæã§ãã ã¹ããŒãã§åãæç¢ºãçŽ æŽãªå
šéšèŒãã¯ã³ã³ããã¹ããå§è¿« èªèšŒã»æš©é ããŒã¯ã³æš©éãå
šãŠå§è²ã gh auth token ãªã©ã§é²åºããç°å¢å€æ°ããæŒãããã OAuth 2.1ãããŒã«åäœã§æäœé¢ãçµããããŒã¯ã³æš©éãã¢ãã«ããéé¢ã§ãã å©çšè
ã»ç°å¢ ã·ã§ã«ãããç°å¢ãäž»ã«éçºè
å人 ãªã¢ãŒãã»éãšã³ãžãã¢ã«ãå±ã 象城çãªã®ã¯èªèšŒã§ããCLIã§ã¯ããŒã¯ã³ã«ã§ããããšã¯ãšãŒãžã§ã³ãã«ããã¹ãŠã§ããŠããŸããããã gh auth token äžçºã§ããŒã¯ã³èªäœãé²åºããŸããäžæ¹ã§MCPã®OAuthãããŒã¯ããŒã¯ã³ãã¢ãã«ããéé¢ããããŒã«åäœã§æäœé¢ãçµããŸãã çµå±ã®ãšããããã®è«äºã¯éå
·ã®åªå£ã§ã¯ãªãç°å¢ã«äŸåããŠããŸããŸããCLIãæç«ããã«ã¯ãèªèšŒã»æš©éã»ç£æ»ãšããé¢å¿äºãOSã®æš©éã¢ãã«ãšå人ã®è²¬ä»»ãåŒãåããããç°å¢ãå¿
èŠã§ããæ°çŸäººãè€æ°ã®ã¯ã©ã€ã¢ã³ãã䜿ããéãšã³ãžãã¢ãå«ãŸããç£æ»èŠä»¶ãããçµç¹ã§ã¯ããã®åæã厩ããŸããå人ã¯ã䜿ã£ãŠã¿ããã§å®çµããŸãããçµç¹ã¯ããããããéçšãããããšãæ±ããããŸãããããªããšçµç¹ãAIãæŽ»çšããŠããäžã§MCPã®ã¡ãªããã¯ååã«ãããåŒãç¶ãæçšãªéžæè¢ãšãªã£ãŠãããçµç¹ã§ã©ãMCPã管çããŠãããã¯éèŠãªããŒãã ãšæã£ãŠããŸãã ããããã·ã¹ãã ãMCPãšããŠãšãŒãžã§ã³ããšç¹ãã å¢ããMCPãµãŒããŒãšAIãšãŒãžã§ã³ã ãšããªãŒã§ã¯çŸåšãå€éšMCPãšç€Ÿå
MCPãåãããŠæ°åçšåºŠã®MCPãèšå®ããã䜿ãããŠããŸãããšã¯ããããŸã ãŸã çºå±éäžã ãšæã£ãŠããããšãŒãžã§ã³ãã«ä»äºãä»»ããç¯å²ãåºããã»ã©ãCRMããã±ãã管çã瀟å
WikiãããŒã¿åºç€ãšã瀟å
å€ã®ããããã·ã¹ãã ãMCPãéããŠãšãŒãžã§ã³ããšæ¥ç¶ãããŠãããŸããUberã§ã¯ã瀟å
ã®1äžãè¶
ãããµãŒãã¹ã®ãšã³ããã€ã³ããMCPããŒã«ãšããŠå
¬éã§ããç¶æ
ãŸã§å°éããŠããŸãïŒ AAIFå
¬åŒããã° ïŒã ãããŠå¢ããã®ã¯MCPãµãŒããŒã®æ°ã ãã§ã¯ãããŸãããåŒã³åºãå
ã人éãClaudeã䜿ããšãã«MCPãåŒã¶ã ãã§ãªãã瀟å
ã§äœããããšãŒãžã§ã³ããèªãã®å€æã§MCPãåŒã¶ããã«ãªããŸããå®åžžæ¥åãåãåžžé§ãšãŒãžã§ã³ããå€éã«ã¹ã±ãžã¥ãŒã«èµ·åãããšãŒãžã§ã³ããã³ãŒããæžãç¶ããããã¯ã°ã©ãŠã³ããšãŒãžã§ã³ããªã©æ°çŸãæ°åã®ç€Ÿå
ãšãŒãžã§ã³ãããåœããåã«çšŒåããŠããæªæ¥ãæ³åã§ããŸãã ä»ã¯ãŸã ãã®ãšãŒãžã§ã³ããMCPãµãŒããŒèªäœãå¢ãããŠããæ¥åããšãŒãžã§ã³ãã«å§è²ããããšã«æ³šåããŠããŸãããåæã«ãããæšé²ããããšã§æ°ãã«äºã€ã®èª²é¡ã«çŽé¢ããŠãããšèããŠããŸãã 課é¡â : çµ±å¶ãå¹ããªããªã äžã€ç®ã¯çµ±å¶é¢ã§ãã誰ãã©ã®MCPãµãŒããŒã«ç¹ãã§ãããåãããªããåèªã®mcp.jsonã«èªèšŒæ
å ±ãæ£ãã°ããéè·è
ã®ããŒã¯ã³ãã©ãã§çããŠããã远ããªãããšãŒãžã§ã³ãã«æž¡ããæš©éã驿£ããæ€èšŒããä»çµã¿ããªããäœããèµ·ãããšãã«ã誰ã®å§ä»»ã§ãã©ã®ãšãŒãžã§ã³ãããäœããããããåæ§æã§ããªãã ãšãŒãžã§ã³ãã«åŒ·ãæš©éãæž¡ãã°ã誀åäœã²ãšã€ã§æ¬çªããŒã¿ã®åé€ã誀éä¿¡ãèµ·ããã»ãã¥ãªãã£é¢ã§ã¯ãšãŒãžã§ã³ããã®ãã®ãçŠæ¢ããããªããŸããããšãã£ãŠå®å
šåŽã«åããŠæš©éãå¿
èŠæå°éãŸã§åãã°ãä»åºŠã¯èª°ã®åœ¹ã«ãç«ããªããšãŒãžã§ã³ãã«ãªããæè³ãååã§ããŸããã人éã誀æäœã§å£ããç¯å²ã«ã¯æéãšããäžéããããŸãããã«ãŒãã§åããšãŒãžã§ã³ãã«ã¯ããããªããç°¡åã«å€§ããªè¢«å®³ãåºãã€ã³ã·ãã³ããèµ·ãããããŸãããã ãããããããããã®ãšãŒãžã§ã³ãã«äœãããããããã管çã§ããããšããçµç¹ã®AI掻çšã§ã¯å€§åã«ãªã£ãŠããŸãã 課é¡â¡: 掻çšãé²ãŸãªããªã äºã€ç®ã¯æŽ»çšé¢ã§ããããã§èšã掻çšãšã¯ããšãŒãžã§ã³ããæ£ããããŒã«ãéžã¹ãããš(粟床)ã瀟å¡ã䜿ãå§ããããããš(å°å
¥ã®æé)ããããŠæ¹åãåãããš(èšæž¬)ã®3ã€ãæããŸãã ãŸã粟床ãšãã芳ç¹ã§ã¯ããŒã«å®çŸ©ã¯ããèªäœãã³ã³ããã¹ããæ¶è²»ããŸããæ°çŸã®ããŒã«å®çŸ©ã®èªã¿èŸŒã¿ã ãã§äœäžãã®ããŒã¯ã³ãæ¶è²»ããããšããããŸãããŠãŒã¶ãŒãäœããèšãåã«ããã®éãæµã蟌ãã®ã§ããMCPãå¢ããã°ãã¢ãã«ã¯é²åããŠãããšã¯ããæ¬é¡ããå
ã«ããŒã«ã®èª¬æãèªãããšã«ãªããéžæã誀ããé
ããé«ããäžæ£ç¢ºã«ãªããŸãã ãŸããå°å
¥ã®æéãšãã芳ç¹ã§ã¯MCPãå¢ããã»ã©ããµãŒããŒããšã»ãŠãŒã¶ãŒããšã«OAuthèªèšŒãéããããèšå®ãã¡ã€ã«ãæžãäœæ¥ã¯ãéãšã³ãžãã¢ãå«ããå
šå¡ã®æŽ»çšãèãããšéå£ã«ãªãããŸããæåŸã«èšæž¬ãšãã芳ç¹ã§ã¯ã©ã®ããŒã«ãã©ãèª€éžæãããã©ãã§å€±æããŠããããèŠããªããã°ãããŒã«å®çŸ©ãæ¹åããã«ãŒããåããŸããã MCPéçšã«ãããã²ãŒããŠã§ã€ãšããã³ã³ã»ãã éèŠãªã®ã¯ããããã®èª²é¡ãMCPãšãããããã³ã«ã®æ¬ é¥ã§ã¯ãªãããšã§ããMCPãæšæºåããã®ã¯ãã©ã話ãããã ãã§ããã誰ãã»èª°ã®æš©éã§ã»äœãã»ã©ããŸã§äœ¿ãã»èª°ããããèŠãŠããããšããéçšã®é¢å¿äºã¯ãæå³çã«èŠå®ããŠããŸãããã ããèããéãæ®åããŸããããçµç¹æŽ»çšã§ã¯ãã®åé¡ãè§£ããªããšãããŸããã ãã®å®è£
ãšããŠæ¥çãåãã£ãŠããã®ããMCPã²ãŒããŠã§ã€ã§ããæ¿èªæžã¿ãµãŒããŒã®ã«ã¿ãã°(ã¬ãžã¹ããª)ãšãå
šãã©ãã£ãã¯ãéãäžç¶ç¹(ã²ãŒããŠã§ã€)ãšããæ§æã§ããã¬ãžã¹ããªããäœã䜿ã£ãŠãããããå®çŸ©ããã²ãŒããŠã§ã€ããå®éã«ãã䜿ãããŠãããããå®è¡æã«åŒ·å¶ããããšãã圹å²åæ
ã§ãå€ãã®è£œåã¯ãã®äºã€ãã»ããã§æäŸããŠããŸãã2026幎4æã® MCP Dev Summit ã§ã¯å€ãã®äŒæ¥ãMCPã²ãŒããŠã§ã€ã®äžã§ç€Ÿå
ã®AI掻çšãæšé²ããŠããããã¯ããããåæãšããäžã§ã²ãŒããŠã§ã€ã«é¢ããæ©èœã®çºè¡šãå€ãå°è±¡ã§ããUber㯠èªç€Ÿã®ãšã³ãžãã¢ãªã³ã°ããã° ã§ãããã¹ãŠã®ãšãŒãžã§ã³ããšãµãŒãã¹ã®éã«MCP Gatewayã眮ããåŒã³åºãå
ã®èªèšŒãšããŒã«å®è¡ã®èªå¯ãééãããªã¯ãšã¹ãã ããäžæµã«äžç¶ããæ§æã解説ããŠããŸãã MCPã²ãŒããŠã§ã€ãç®æããŠãããšãã äœãã§ããã®ã ã§ã¯ã²ãŒããŠã§ã€ã¯äœãã§ããã®ããæ¥çã§åæãããŠããã®ã¯æ§æã®åãŸã§ã§ãæ©èœã®åãåãã¯åç€Ÿåæ§ã§ããä»åã¯å瀟ã®å®è£
ãæšªæããŠã6ã€ã«æŽçããŸãã # æ©èœ çµ±å¶é¢ 掻çšé¢ 1 åäžçµè·¯å(éçŽ) éè¯MCPã®é®æãçµ±å¶ç¹ã®äžå
å 1ãšã³ããã€ã³ãã®è¿œå ã§é©åãªæš©éç¯å²ã®å
šããŒã«ã«æ¥ç¶å®äº 2 èªèšŒã»èªå¯ã»ã·ãŒã¯ã¬ãã管ç ããŒã¯ã³ã®éäžä¿ç®¡ãšå³æå€±å¹ åèªã®OAuthèšå®ãäžèŠã«ãªã 3 ããŒã«åäœã®ããªã·ãŒãšã¬ãŒãã¬ãŒã« åé€ç³»ã®çŠæ¢ãåŒæ°ã®åºå®ãã¬ãŒããªããããPIIæ€æ» çšéããšã«å®å
šãªåœ¢ã§ããŒã«ãéæŸã§ããèªåŸçãªãšãŒãžã§ã³ããAI掻çšãä¿é² 4 ã¬ãžã¹ããª(ã«ã¿ãã°) æ¿èªæžã¿ãµãŒããŒã ããæµéãã ãäœã䜿ãããããå
šå¡ãçºèŠã§ãã 5 ããŒã«ã®çµã蟌ã¿ã»å€æ ã¢ãã«ã«èŠããæäœé¢ãã®ãã®ãçž®å° å¿
èŠãªããŒã«ã ããåçã«ããŒããã³ã³ããã¹ããåæž 6 å¯èŠ³æž¬æ§ã»ç£æ» 誰ã®å§ä»»ã§äœãå®è¡ããããã®èšŒè·¡ èª€éžæã»å€±æã®èšæž¬ãšããŒã«å®çŸ©ã®æ¹å MCPã²ãŒããŠã§ã€ã¯ã»ãã¥ãªãã£å¯Ÿçã®ã¿ã§åãåãããã¡ã§ãããã©ã®æ©èœãAI掻çšèªäœãæ¯ããéèŠãªåœ¹å²ãæãããŠããããšãããããŸããäŸãã°èªèšŒä»²ä»ã¯ãã»ãã¥ãªãã£æèã§ã¯ããŒã¯ã³ç®¡çã®è©±ã§ãããå©çšè
ããèŠãã°å¹ççãªãªã³ããŒãã£ã³ã°ã®è©±ã§ããããŒã«çµã蟌ã¿ã¯ãçµ±å¶æèã§ã¯æäœé¢ã®çž®å°ã§ããã粟床æèã§ã¯ã³ã³ããã¹ãåæžãã®ãã®ã§ããããããå®å
šãªä»çµã¿ãäœã£ãŠLLMã«å€æãããªãç®æãå¢ããããšããçµ±å¶ã§ãããšåæã«ä¿¡é Œæ§ã®åäžã«ãã€ãªãã£ãŠãããŸãã ãŠãŒã¶ãŒã®æš©éã¯ãäžéãã§ãã£ãŠã驿£ãã§ã¯ãªã åMCPãµãŒããŒãOAuthã§ãŠãŒã¶ãŒãèªèšŒããæ¬äººã®æš©éã®ç¯å²ã§åãå§ä»»å®è¡ã¯æ£ããåå°ã§ã仿§ããã®æ¹åã«é²ãã§ããŸãããšãŒãžã§ã³ãçµç±ã§æ¬äººä»¥äžã®æš©éã䜿ããããšããæš©éææ Œåã®äºæ
ã¯ããã§åççã«é²ããŸãã ãããããŠãŒã¶ãŒã®æš©éã¯ãäžéãã§ãã£ãŠã驿£ãã§ã¯ãããŸãããèªåã®å
šã¡ãŒã«ãåé€ã§ããŸããããšãŒãžã§ã³ãã«ããããããããã§ã¯ãããŸããããšãŒãžã§ã³ãã¯é決å®çã§ããã«ã·ããŒã·ã§ã³1åã®èª€æäœããæ¬äººã®æ£åœãªæäœããšããŠå®è¡ãããŸããå¿
èŠãªã®ã¯ããã®ãšãŒãžã§ã³ãã«èš±ãããæäœããšããã®ãŠãŒã¶ãŒã®æš©éãã®ç©éåãå®è¡æã«æ¯åè©äŸ¡ããããšã§ãããèªå·±èŠåŸã«é Œããªã以äžããã®è©äŸ¡ã¯ãšãŒãžã§ã³ãã®å€åŽã§è¡ããããããŸãããã²ãŒããŠã§ã€ãšã¯ããã®è©äŸ¡ãå
šãªã¯ãšã¹ãã«å¯ŸããŠè¡ãå Žæã§ãã çŸæç¹ã§ã®æè¡çãªéžæè¢ æåŸã«ãå
šãŠã§ã¯ãªãã§ããããã®ã³ã³ã»ãããå®è£
ããéã®çŸæç¹(2026å¹Žäžæ)ã§ã®ã²ãŒããŠã§ã€ãäžéšç޹ä»ããŸãã åå ç¹åŸŽ agentgateway Linux Foundationåäžã®OSS(Apache 2.0)ãMCP/A2A察å¿ã®ããŒã¿ãã¬ãŒã³ã§ãéçŽã»ããªã·ãŒã»å¯èŠ³æž¬æ§ãéªšæ Œã®äžç«ã€ã³ãã© ToolHive Stacklokéçºã®OSS(Apache 2.0)ãã³ã³ããéé¢ã©ã³ã¿ã€ã ã»ä»®æ³MCPã²ãŒããŠã§ã€ã»å
¬åŒRegistry APIäºæã®ã¬ãžã¹ããªãµãŒããŒãŸã§æããã©ãããã©ãŒã å Obot ã²ãŒããŠã§ã€+ã«ã¿ãã°+RBACã管çUI蟌ã¿ã§æäŸãã補ååOSS(MIT/ãªãŒãã³ã³ã¢) AWS AgentCore Gateway AWSã®ãããŒãžããµãŒãã¹ãã»ãã³ãã£ãã¯æ€çŽ¢ã«ããããŒã«çµã蟌ã¿ãç¹åŸŽã§ãæ¢åAPI/Lambdaã®MCPåãæ
ã Databricks Unity AI Gateway Databricksã®ãããŒãžããµãŒãã¹ãUnity Catalogã®æš©éã¢ãã«ãšãšãŒãžã§ã³ããã¬ãŒã·ã³ã°ã®å»¶é·ã§MCPã統治ã§ãã éžå®ã®èгç¹ã¯æ¢åã¹ã¿ãã¯ãšã®æŽåãéçšäœå¶ã§å€ãã£ãŠãããšæããŸããããŸã ãŸã ãã®é åèªäœãçºå±éäžãªã®ã§ãã¬ã€ã€ãŒã倧ããå€ããããšãäºæ³ãããŸãã ãããã« ä»åã¯ãšãŒãžã§ã³ããMCPãçµç¹ã§å¢ããŠãã£ãéã«ã©ããã£ãããšãèããªããšãããªãã®ããå
è¡ããŠããäŒæ¥ã®äºäŸãæè¡çãªãã¬ã³ãããæŽçããŠã¿ãŸããã ãšããªãŒã§ãä»åŸãšãŒãžã§ã³ããéç£ããŠãããŸããããã®æ©ã¿ãæ¢ããªãããã«ã¯ãMCPã²ãŒããŠã§ã€ã®ãããªåºç€åŽã®æŽåãåæäžŠè¡ã§é²ããããšãéèŠã«ãªããŸãããšã³ãžãã¢çµç¹ãšããŠãããããåºç€ã®æ§ç¯ãé²ããªããå
šç€Ÿã®AI掻çšãæ¯ããŠãããããšæã£ãŠããŸãã AIããã°ãªã¬ãŒã¯ããã®ããšãéçºéšé·é£ãç¶ããŠãããŸããæ¬¡åããã²ã芧ãã ããã ãšããªãŒã§ã¯äžç·ã«åã仲éãåéäžã§ãïŒ ãšã³ãžãã¢ããã°ããã£ããã«å°ãã§ãèå³ãæã£ãŠããã ãããããŸãã¯ã«ãžã¥ã¢ã«ã«é¢è«ããŸãããïŒ
AIãã¡ãŒã¹ããªçµç¹ãã¶ã€ã³ æ ªåŒäŒç€ŸãšããªãŒã§CTOãåããŠããä»äº( @imakei_ )ã§ãã æ¬èšäºã¯ AIããã°ãªã¬ãŒ 第4æ¬ç® ã§ãã第1æ¬ç®ã®ã ãªã³ãããžãŒãšçµç¹OSãšããããã®ãšã³ãžã㢠ãïŒä»¥äžãååïŒã§ã¯ãäŒç€Ÿã®çŸå®ãå
±éèšèªïŒãªã³ãããžãŒïŒãšããŠå®çŸ©ãããã®äžã§äººãšAIãæææ±ºå®ãåããçµç¹OSããããšã³ãžãã¢çµç¹ãäž»å°ããŠäœã£ãŠããããšããè©±ãæžããŸããã ä»åã¯ãã®ç¶ããšããŠã AIæä»£ã®çµç¹ãã¶ã€ã³ ã«ã€ããŠæžããããšæããŸããçµç¹OSãšãããä»çµã¿ãã®è©±ã«å¯ŸããŠãä»åã¯ãããåãããçµç¹ã®ããã¡ãã®è©±ã§ããçµè«ããèšããšãããããã®çµç¹ã¯ã ããå°æ°ã§ãäºæ¥ã«ã¢ã©ã€ã³ãããã®äžã§æšªã®ã€ãªãããå¥éã€ãã ââãšããæ¹åã«åãããšèããŠããŸãã ãªãä»ãçµç¹ã®ããã¡ãåãçŽãã®ã 倧åæãšããŠãAIã«ãã£ãŠäžäººããããçã¿åºããææã®éã倧ããå€ãããŸããããããŸã§ã¯ãè§£ããã課é¡ãå¢ãããã人ãå¢ãããŠå¯Ÿå¿ãããã®ãåºæ¬ã®çºæ³ã§ããããAIãåæã«ãããšãåã課é¡ãããå°ãªã人æ°ã§è§£ããããã«ãªã£ãŠããŠããŸãã ãã®å€åã¯ãåã«ãçç£æ§ãäžãã£ããã§çµãã話ã§ã¯ãããŸããã 人ãå¢ãããŠè§£ãæä»£ã®çµç¹ã®ããã¡ãšãå°æ°ÃAIã§è§£ãæä»£ã®çµç¹ã®ããã¡ã¯ãããããèšèšææ³ãéã ã¯ãã ããšããã®ãä»åã®åºçºç¹ã§ããååã®çµç¹OSããAIãåããåå°ãã®è©±ã ã£ããšããã°ãä»åã¯ãã®åå°ãæå€§éã«æŽ»ããã人ã®äžŠã¹æ¹ãã®è©±ã ãšæããŠãã ããã 1. ããå°æ°ãªçµç¹ã«ãã ãŸãåããã¹ãã¯ãå°æ°åã§ãã 人ãå¢ãããšææãå¢ããããšããé¢ä¿ã¯AI以åããå¿
ãããæãç«ã£ãŠããŸããã§ããã人ãå¢ããã°å¢ããã»ã©ãã³ãã¥ãã±ãŒã·ã§ã³ã®ã³ã¹ãã調æŽã®æéãå¢ããæææ±ºå®ã¯é
ããªããŸããããããã人ãè¶³ãããäœèšã«é
ããªããçŸè±¡ã§ãã AIãåæã«ãããšããã®æ§å³ã¯ããã«ã¯ã£ããããŸãããããŸã§äººæã§åããŠããé åãAIã«ä»»ããããããã«ãªãã»ã©ã 人æ°ãå¢ãããã«å¯Ÿå¿ã§ããç¯å²ãåºãã ããã§ããã ãšããã°ããã¿ããã«äººãå¢ããã®ã§ã¯ãªããå°æ°ã®ã¡ã³ããŒãAIãã¬ãã¬ããžãšããŠäœ¿ããäžäººãããã®æ
åœç¯å²ãåºããŠããæ¹ããéããŠåŒ·ãçµç¹ã«ãªããŸãã ããã§å€§äºãªã®ã¯ãå°æ°åã¯ãäººãæžããããšããç®çã§ã¯ãªãããšããç¹ã§ããç®çã¯ãäžäººã²ãšããäºæ¥ã®èª²é¡ããå®è£
ãŸã§ãèŠéããç¶æ
ãã€ããããšãååè§Šãã瀟å
FDEïŒçŸå Žã«å
¥ã蟌ã¿ã課é¡å®çŸ©ããæãåãããšã³ãžãã¢ïŒãæç«ããã®ããå°æ°ã§æ
åœç¯å²ãåºãããããã§ããå°æ°åãšFDEçãªåãæ¹ã¯ãã»ããã§å¹ããŠãããšèããŠããŸãã 2. äºæ¥éšã«ã¢ã©ã€ã³ããçµç¹ã«ãã æ¬¡ã«ãçµç¹ã®åãæ¹ã§ãã ãšã³ãžãã¢çµç¹ããiOSããããã¯ãšã³ãããã€ã³ãã©ããšãã£ãè·èœã§åãæ¹æ³ã¯ãå°éæ§ãé«ããããã§ã¯åççã§ããããã ãã®åãæ¹ã ãšãäžã€ã®äºæ¥ãåã«é²ãããã³ã«è€æ°ã®è·èœããŸããã 調æŽãå¿
èŠã«ãªããæææ±ºå®ã®ãã³ã«åãæž¡ããçºçããŸãã åŒç€Ÿã¯ããªãã·ã¥ãããã³ã»ãã¢ããã»retail HUBãšè€æ°ãã¡ã€ã³ã®ãããã¯ããå±éããŠãããè·èœã§ã¯ãªã äºæ¥ïŒãã¡ã€ã³ïŒã«ã¢ã©ã€ã³ããçµç¹æ§é ããšã£ãŠããŸãããã®çµç¹ãžã¯1幎ã»ã©åã«ç§»è¡ããããšã決ãããã§ã«éçšãå§ããŠããŸãã1幎åã¯ãããŸã§ä»®èª¬ã«åºã¥ããã£ã¬ã³ãžçãªäœçœ®ä»ãã§ãããã1幎åãããŠããããã§ãã®èãæ¹ãè¶³å
ã§ã¯æ£ããã£ããšç¢ºä¿¡ã¿ãããªãã®ãæããŠããŸãã ãã®ãäºæ¥ïŒäŸ¡å€ã®æµãïŒã«ã¢ã©ã€ã³ããå°æ°ããŒã ãã¯ãããŒã ããããžãŒã§èšã ã¹ããªãŒã ã¢ã©ã€ã³ãã»ããŒã ãSpotifyã¢ãã«ã§èšã ã¹ã¯ã¯ããïŒSquadïŒ ã«ããããŸããåŒç€Ÿã®çµç¹ã¯ãããŒã ããããžãŒãããŒã¹ã«ãã€ã€ãSpotifyã¢ãã«ã®æèšãåã蟌ã圢ã§èšèšããŠããŸããããŒã ã®äººæ°ãããã¶2æã§è¶³ããèŠæš¡ïŒ5ã9人ïŒãã«æããã®ããå°æ°åãšåãçãã§ãã ãªããããŒã ããããžãŒã«ã¯ãã®ã»ãã«ãå
±éåºç€ãæ
ã ãã©ãããã©ãŒã ã»ããŒã ããåç»åŠçã»æ©æ¢°åŠç¿ãªã©ãæ±ã ã³ã³ããªã±ã€ãããã»ãµãã·ã¹ãã ã»ããŒã ããããŸããæ¬èšäºã§ã¯ããã«ã¯èžã¿èŸŒãŸããã瞊ïŒã¹ããªãŒã ã¢ã©ã€ã³ãããšãåŸè¿°ãããæšªïŒã€ãã€ããªã³ã°ïŒãã£ãã¿ãŒãã®2ã€ã®è»žã«çµã£ãŠè©±ããŸãã ãã®åãæ¹ã«ã¯ãAIæä»£ã«å¹ãçç±ãããã€ããããŸãã äžã€ã¯ãæææ±ºå®ã®ã«ãŒããäžã€ã®ããŒã ã®äžã§å®çµããããããšããæ€ç¥ããŠã倿ããŠãå®è¡ããŠãã·ã¹ãã ã«åæ ããããšããäžé£ã®æµãããè·èœããŸãããã«éããã®ã§ãå°æ°ã§ãéãåããŸãã ããäžã€ã¯ãååã®ãªã³ãããžãŒã®è©±ãšå°ç¶ãã ãšããç¹ã§ããçµç¹OSã®åå°ãšãªããªã³ãããžãŒã¯ããäºæ¥ã®çŸå®ïŒïŒåè©ïŒããäžå¿ã«ã¢ãã«ãåããŸããçµç¹ãã®ãã®ãäºæ¥ã«ã¢ã©ã€ã³ããŠããã°ãããŒã ã®å¢çãšãªã³ãããžãŒã®å¢çãèªç¶ãšæãããšã³ãžãã¢ãäºæ¥ã®ããè¿ãã«åº§ã£ãŠãããããããçŸå®ã«å³ãããåè©ã»åè©ã»ã«ãŒã«ããå®çŸ©ã§ãã瀟å
FDEçãªåããæ§é çã«æç«ããŸãã å°æ°åãšäºæ¥éšã¢ã©ã€ã³ã¯ãçµã¿åããã£ãŠåããŠåãæã¡ãŸããå°æ°ã®ããŒã ããäžã€ã®äºæ¥ãäžžããšã課é¡å®çŸ©ããå®è£
ãŸã§åŒãåããããããAIæä»£ã®åºæ¬ãŠãããã«ãªããšèããŠããŸãã 3. 暪ã®ã€ãªããããå匷äŒãªã©ã§æå³çã«ã€ãã ãããŸã§ã®ãå°æ°Ãäºæ¥éšã¢ã©ã€ã³ãã«ã¯ãåœç¶ãªãã匱ç¹ããããŸãã è·èœã®ç¥èŠã瞊å²ãã«åæããããã ãšããç¹ã§ãã iOSãšã³ãžãã¢ãåäºæ¥éšã«æ£ãã°ããšãiOSå
šäœã®ç¥èŠãã©ãèç©ããå
±æããã®ãã匱ããªããŸããäºæ¥ããšã«æé©åãé²ãäžæ¹ã§ãããã®äºæ¥éšã§è§£ãã課é¡ããå¥ã®äºæ¥éšããŸãäžããè§£ããŠããããšãã£ãè»èŒªã®åçºæãèµ·ãããããçµç¹ã瞊ïŒäºæ¥ïŒã§åããšã暪ïŒè·èœã»æè¡ïŒã®ç³žã现ããªãã®ã¯é¿ããããŸããã ãããè£ãã®ãã æšªã®ã€ãªãããæå³çã«ã€ããå Ž ã§ããè·èœããšã®å匷äŒããæè¡ããŒãããšã®æšªæã³ãã¥ããã£ãšãã£ãã瞊ã®çµç¹å³ãšã¯å¥ã®ã¬ã€ã€ãŒã®ç³žãéããããã¯èªç¶çºçã«ä»»ãããæå³çã«èšèšããããšãéèŠã ãšèããŠããŸããäºæ¥éšã¢ã©ã€ã³ã«ãããšæšªã®ã€ãªããã¯ãæŸã£ãŠãããšæ¶ããããã®ã«ãªãããã§ãã ããã¯ãSpotifyã¢ãã«ãæ®ããæèšãšãéãªããŸããã¹ã¯ã¯ããã«èªåŸæ§ã ããäžããçµæããµã€ãåãè»èŒªã®åçºæãå
šäœæé©ã®æ¬ åŠãšãã£ãåé¡ãçãŸããââãšãã話ã§ãããèªåŸãã ãã§ã¯çµç¹ã¯ç«ã¡è¡ãããæå³çãªæšªã®é£æºãšãããã¬ãŒãã¬ãŒã«ããèŠããSpotifyã¢ãã«ã® ãã£ãã¿ãŒãã®ã«ã ãããŒã ããããžãŒã® ã€ãã€ããªã³ã°ã»ããŒã ãæ
ã£ãŠããã®ã¯ããŸãã«ãã®æšªç³žã®åœ¹å²ã§ããåŒç€Ÿã§ãã瞊ïŒäºæ¥ïŒã«å¯ããçµç¹ã ãããããæšªç³žãæå³çã«èšèšããããšã次ã®äžæãšäœçœ®ã¥ããŠããŸãã ãããŠAIæä»£ã«ã¯ããã®æšªç³žãéã察象ãããäžã€å¢ããŸãã AI掻çšã®ç¥èŠãã®ãã® ã§ããæå¹ã ã£ãããã³ããããæ¥åãèªååããã¹ãã«ããšãŒãžã§ã³ãã®äœ¿ãããªãæ¹ââããããããŠããŠã¯ãåäºæ¥éšã«éããŠãããšå
šç€Ÿã§ã¯è²ã¡ãŸãããååãçµç¹OSã®æèã§ã䟿å©ããŒã«ãå
±æè³ç£ãžãšè²ãŠãããšãã話ãããŸãããããã®è³ç£ãæšªã§æµéãããå ŽãããŸãã«ãã®æšªã®ã€ãªããã§ãã瞊ã§äºæ¥ãæ·±æãããæšªã§AI掻çšãšæè¡ç¥èŠãæµéãããããã®äºå±€ã§çµç¹ãç·šãã€ã¡ãŒãžã§ãã å
šäœåïŒçžŠã§æ·±æãããæšªã§ç·šã æŽçãããšããããªããŸãã å°æ°å ã§ãäžäººãããã®ã¬ãã¬ããžãšæ
åœç¯å²ãåºãã äºæ¥éšã¢ã©ã€ã³ ã§ãå°æ°ã®ããŒã ãäºæ¥ãäžžããšãéãåãïŒçžŠã®ç³žïŒ 暪ã®ã€ãªãã ã§ãè·èœã®å°éæ§ãšAI掻çšã®ç¥èŠãå
šç€Ÿã«æµéãããïŒæšªã®ç³žïŒ 瞊ã ãã§ã¯ç¥èŠãåæãããæšªã ãã§ã¯äºæ¥ãé²ãŸãªããäž¡æ¹ãæå³çã«èšèšããŠåããŠãå°æ°ã§ã匷ãçµç¹ã«ãªããšèããŠããŸãããããŠãã®çµç¹ã®ããã¡ã¯ãååæžããçµç¹OSãšè£ãåãé¢ä¿ã«ãããŸããçµç¹OSãAIã«ä»»ããããé åãåºããããå°æ°åãæãç«ã¡ãäºæ¥éšã¢ã©ã€ã³ã ãããªã³ãããžãŒãçŸå®ã«å³ããŠå®çŸ©ã§ããæšªã®ã€ãªãããAI掻çšã®ç¥èŠãå
±æè³ç£ãžãšè²ãŠããä»çµã¿ïŒçµç¹OSïŒãšçµç¹ã®ããã¡ã¯ãçæ¹ã ãã§ã¯æ©èœããŸããã ãããã« AIæä»£ã®çµç¹ãã¶ã€ã³ããèªåã¯ãå°æ°ã§ãäºæ¥ã«åŒµãã€ããæšªã§ç·šãããšããèšèã§æããŠããŸãã人ãå¢ãããŠèª²é¡ãè§£ãçºæ³ãããå°æ°ã®ããŒã ãAIãã¬ãã¬ããžã«äºæ¥ãäžžããšåŒãåããæšªã®ã€ãªããã§ç¥èŠãæµéãããçºæ³ãžãããã¯äžåºŠäœã£ãŠçµããã§ã¯ãªããäºæ¥ãAIã®é²åã«åãããŠçµã¿æ¿ãç¶ããŠãããã®ã ãšèããŠããŸãã ååã®çµç¹OSãšåãããŠããä»çµã¿ããšãçµç¹ã®ããã¡ãã®äž¡èŒªã§ãAIãã¡ãŒã¹ããªçµç¹ã¥ãããé²ããŠãããããšæããŸãã åè Spotifyã¢ãã«: https://www.atlassian.com/ja/agile/agile-at-scale/spotify ããŒã ããããžãŒ: https://www.atlassian.com/ja/devops/frameworks/team-topologies
éçº2éšã®å
åã§ãã AIãšãŒãžã§ã³ãã䜿ã£ãŠéçºããŠãããšãåãã¢ãã«ã䜿ã£ãŠããã¯ããªã®ã«ããŒã«ããšãŒãžã§ã³ãã«ãã£ãŠè³¢ãããŸãã§éãããšããäœéšãããããšããããããŸããã¢ãã«ãã®ãã®ã¯å€ãããªããŠãå·®ãåºãçç±ãèããŠã¿ãŸãã ãã®å·®ãçãã§ããã®ããã¢ãã«ãåãå·»ãè£
åãããããããŒãã¹ã§ããããŒãã¹ãšããèšèã¯ãªããšãªã䜿ãããã¡ã§ãããäœãæããŠããã®ãã¯æå€ãšãµãã£ãšããŠããŸãïŒå°ãªããšãèªåã®çè§£ã¯å²ãšææ§ã§ããïŒã ãã®èšäºã§ã¯ããã®èšèãæ§æèŠçŽ ã«åè§£ããŠãäœããšãŒãžã§ã³ãã®å®åãæ±ºããŠããã®ããæŽçããŠã¿ãŸãã ãšããªãŒã«ãããAIãšãŒãžã§ã³ãã®æŽ»çšç¶æ³ãšããŒãã¹ã®å¿
èŠæ§ å
æ¥ã® æäžããã®æçš¿ å
šç€Ÿã®AIãã¡ãŒã¹ããçœåŒãããšã³ãžãã¢ã®åœ¹å² ã§ãèšåããããŸãããããšããªãŒã§ã¯ä»å¹Žããå
šç€Ÿçã«Claudeã®æŽ»çšãé²ããŠããŸããã ãã以åãããç¹ã«éçºéšã«ãããŠã¯CopilotãCursorãªã©ã®AIãšãŒãžã§ã³ããå©çšãããŠããŸããããåœåã¯äž»ã«ã³ãŒãã£ã³ã°çšéã«äœ¿ãããŠããŸãããããããéçºéšã«éããªãæ¥åæ¹åãæ¥åéè¡ã®ããã«AIãçšããããããã«ãªã£ãŠãããšããšã³ãžãã¢ã®åœ¹å²ãåãªãå®è£
è
ããããããããã¯ããæ¥åã®çè§£ãæ±ããããããã«ãªããæ¥åãããŒå
šäœãèæ
®ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã宿œããå¿
èŠãã§ãŠããŸããã ãã®äžã§ãããèªåŸçãªAI掻çšã®ããã«ã¯ããŒãã¹ãéèŠã«ãªã£ãŠãããšèããŠããŸããAIã«å¯Ÿãã©ã®ããã«æ¯ãèãã¹ãããäŒããå¿
èŠãããããã§ãã ãªããããŒãã¹ã®èãæ¹èªäœã¯ããããAIãšãŒãžã§ã³ãã«å
±éããŸãããæ¬èšäºã§ã¯è©±ãå
·äœçã«ãããããç¹ã«éçºã§äœ¿ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã念é ã«çœ®ããŠé²ããŸãã ã¢ãã«åäœãšããŒãã¹ã®éã ãŸãLLMåäœã¯äœããããã®ãªã®ããèããŸããLLMã¯ãçªãè©°ããã°å
¥åããã¹ãã«å¯ŸããŠåºåããã¹ããè¿ãã ãã®é¢æ°ã§ãããšèšããŸããããèªäœã§ã¯ãã¡ã€ã«ãèªãããšããã³ãã³ããå®è¡ããããšããååã®äœæ¥ãèŠããŠããããšããã§ããŸããã äžæ¹å®çšçãªAIãšãŒãžã§ã³ãã¯ããã®ã¢ãã«ã®åšãã«æ
å ±ãæž¡ãä»çµã¿ãéå
·ãçµæã確ãããä»çµã¿ãçµã¿åãããããããç¹°ãè¿ãåãããŠããŸãããã®äžåŒããŸãšããŠããŒãã¹ãšåŒã³ãŸããæ¬èšäºã§ã¯ãããŒãã¹ã«ã€ããŠã¢ãã«ãå®äžçã«ãããã¿ã¹ã¯ã«æ¥ç¶ããããã®è£
åäžåŒã§ãããšå®çŸ©ããŸãã ããŒãã¹ãšããèšèã¯ãããšããšã¯ç¬ã銬ã®ãããªå¯Ÿè±¡ã«åãä»ããŠãã®åã埡ããç®çã®æ¹åãžåŒãåºãããã®è£
å
·ãæããŸãããœãããŠã§ã¢ã«ãããŠãæå³åãã¯åããããã¹ã察象ãåããããã®ãã¹ãããŒãã¹ïŒã¹ã¿ãããã©ã€ããªã©ïŒã®ããã«ãäžå¿ã«ãã察象ãå¶åŸ¡ããŠåããããã®åšèŸºã®ä»çµã¿ãæããŠããŸããã AIãšãŒãžã§ã³ãã®ããŒãã¹ãåãã§ãã¢ãã«ãã®ãã®ã§ã¯ãªãããã®åãå¶åŸ¡ããŠå®äžçã®ã¿ã¹ã¯ã«åããããããã®è£
åã ãšæãããšåãããããã§ãã ããŒãã¹ãæ§æãã4ã€ã®èŠçŽ ããŒãã¹ããã³ã³ããã¹ããããŒã«ãæš©éã»å®è¡ç°å¢ãæ€èšŒã«ãŒãã®4ã€ã®èŠçŽ ã«åããŠèŠãŠãããŸãã ãã ãããã®åé¡ã¯çµ¶å¯Ÿçãªãã®ã§ã¯ãªããç®çãç°å¢ã«å¿ããŠå€åãåŸããã®ã§ã¯ãããŸããäžèšã§ã¯æ±çšçã«æå¹ãšæãããã¢ãããŒããèããŸãã ã³ã³ããã¹ãïŒäœãæž¡ããïŒ ã¢ãã«ã«æž¡ãæ
å ±ã®åæšéžæã§ããã¢ãã«ã¯ã³ã³ããã¹ãã«å
¥ã£ãŠããæ
å ±ããåŠçã§ããªãã®ã§ãå¿
èŠãªæ
å ±ãããã«éäžè¶³ãªãå±ããããéèŠã§ãã ãã ããå€ããã°ãããšããããã§ã¯ãããŸãããäžèŠãªãã®ã倧éã«å«ããŠããŸããšãèå¿ã®æ
å ±ãåãããŠç²ŸåºŠãèœã¡ãããšã«ãªããŸãã é¢é£ãããã¡ã€ã«ãããã¥ã¡ã³ãã®ãã¹ãæž¡ã é·ãå±¥æŽã¯èŠçŽããŠå§çž®ãã éå»ã®çµç·¯ã¯ã¡ã¢ãªãšããŠæãããå¿
èŠãªãšãã«åç
§ããã éå»ã®çµç·¯ãèŠããŠããã¡ã¢ãªããçµå±ã¯ãã®æã
ã§ã¢ãã«ã«æž¡ãã³ã³ããã¹ãã®äžéšã§ããäœãå
¥ããäœãå
¥ããªãããèšèšããããšãã³ã³ããã¹ããšããèŠçŽ ã®èã«ãªããŸãã ããŒã«ïŒäœãã§ãããïŒ ãã¡ã€ã«ã®èªã¿æžããã³ãã³ãå®è¡ãæ€çŽ¢ãå€éšAPIã®åŒã³åºããªã©ãã¢ãã«ãçŸå®ã®äžçã«åããããããã®éå
·ã§ãã ããŒã«ããã£ãŠåããŠãããã¹ããçæããã ãã®ã¢ãã«ãå®éã«ã³ãŒããæžãæãããããã¹ããå®è¡ãããã§ããããã«ãªããŸãããã®ãšããããŒã«ã®ç²åºŠã説æãã¢ãã«ãæ£ããéžæã§ããç¶æ
ã«ãªã£ãŠãããã«ãã£ãŠç²ŸåºŠã¯å€§ããå€åããŸããå©ç𿹿³ãç®çãææ§ãªããŒã«ã ãšãã¢ãã«ã«èª€ã£ãäœ¿ãæ¹ãããããããªããŸãã æš©éã»å®è¡ç°å¢ïŒã©ããŸã§èš±ããïŒ ããŒã«ãäžãããšããããšã¯ãã¢ãã«ã«å®ç°å¢ãè§Šããããšããããšã§ãããã®ãããã©ããŸã§ãèªåã§èš±ããã®èšèšãå¿
èŠã«ãªããŸãã ãµã³ãããã¯ã¹ã§éé¢ãããæš©éã¢ãŒãã«ãã£ãŠå®è¡ç¯å²ãçµããç Žå£çãªæäœã®åã«ã¯ç¢ºèªãæãããšãã£ãä»çµã¿ãããã«è©²åœããŸããèªåçã«å®è¡ãããç¯å²ãåºããã»ã©åŸ
æ©æéã¯æžããŸãããæ³å®ããŠããªãçŸè±¡ãçºçãããšãã®è¢«å®³ã倧ãããªããŸãã éããšå®å
šã®ãã¬ãŒããªãã®èšèšãéèŠã§ãã æ€èšŒã«ãŒãïŒã©ã確ããããïŒ ã¢ãã«ã®åºåãæ£ãããã©ããããæ©æ¢°çãªãã£ãŒãããã¯ãšããŠã¢ãã«ã«æ»ãä»çµã¿ã§ãããã¹ãçµæãåãã§ãã¯ãlintãå®éã«åããããšãã®åºåæ€èšŒãªã©ãããã«è©²åœããŸãã çµæã®æ€èšŒãå¯èœãã©ããã§ææã¯å€§ããå€åããŸããæ€èšŒã«ãŒãã®éããšç¢ºããã¯ããšãŒãžã§ã³ãã®è³¢ãã®å€§ããªèŠå ã§ãã 4ã€ã®èŠçŽ ãåãããã® 4ã€ã®èŠçŽ ã¯ããã°éšåãªã®ã§ãããããçµã¿åãããŠå®éã«ä»äºããããã«ã¯ãéšåãæ¹åã¥ãç¹°ãè¿ãåããä»çµã¿ãå¿
èŠã§ãã ã·ã¹ãã ããã³ãã ã¢ãã«ã«å¯Ÿããã©ã®ãããªåœ¹å²ãã©ã®ãããªæ¹éã§åããŠã»ããããäŒããæç€ºã§ãã 圹å²ãã«ãŒã«ãå®ã£ãŠã»ããå¶çŽããããããäžãããã®æç€ºãããŒãã¹ã®äžéšãšèããããšãã§ããŸããããã§ã¯ãã®å Žéãã®æç€ºãæ¯åæžãã®ã§ã¯ãªããããŒãã¹ã®äžéšãšããŠäœã蟌ãã§ãã察象ã«å€ãã£ããšèšããŸãã ãšãŒãžã§ã³ãã«ãŒã éšåãã€ãªããå®éã«ã¿ã¹ã¯ãåã«é²ããã®ããšãŒãžã§ã³ãã«ãŒãã§ããèããâããŒã«ã䜿ãâçµæã芳枬âèããããšããç¹°ãè¿ãã®å¶åŸ¡ãããŒãæããŸãã ãã®ã«ãŒãã«ãã£ãŠäžåºŠã®å¿çã§çµãããã倱æãèžãŸããŠäœåºŠãããçŽããªãããŽãŒã«ã«è¿ã¥ãããšãã§ããŸããåæã«ããã€æ¢ããããäœåãŸã§ããçŽãããšãã£ãæ¯æ¢ãã®èšèšãéèŠã§ããçµäºæ¡ä»¶ããªããã°ãšãŒãžã§ã³ãã¯å»¶ã
ãšåãç¶ããŠããŸããŸãã å
šäœåãšå
·äœäŸ ãããŸã§ã®èŠçŽ ãå³ã«ãããšãããããæ¬¡ã®ãããªé¢ä¿ã«ãªããŸãã Claude Code ã§ãããš ããå°ãå
·äœçã«ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®Claude Codeã«åœãŠã¯ããŠã¿ãŸãã äžè¬çãªAIãšãŒãžã§ã³ãã¯èªåã§ããŒãã¹ãæ§ç¯ããŠããããšãå€ãããããŠãŒã¶ãŒãçšæãããã¡ã€ã«çŸ€ã¯ããŒãã¹ã®äžéšã«ããããããŒã«ãã«ãŒããšãã£ãåå°ã¯Claude Codeæ¬äœãæäŸããŠãããšããç¹ã«æ³šæãå¿
èŠã§ãã ãŠãŒã¶ãŒãçšæããå±€ ã³ã³ããã¹ã CLAUDE.mdãã¡ã¢ãªãäœæ¥äžã«æž¡ããã¡ã€ã« ã·ã¹ãã ããã³ãã CLAUDE.md ãã¹ãã«ã§äžãã圹å²ã»æ¹é æš©éã»å®è¡ç°å¢ settings.json ã§ã®ããŒã«èš±å¯ããµã³ãããã¯ã¹ã®èšå® Claude Codeæ¬äœãæäŸããå±€ ããŒã« ãã¡ã€ã«ã®èªã¿æžããæ€çŽ¢ãã³ãã³ãå®è¡ãMCPãªã© æ€èšŒã«ãŒã hooks ããã¹ãå®è¡ã®ä»çµã¿ ãšãŒãžã§ã³ãã«ãŒã èããâããŒã«â芳枬âãŸãèããããåãäžæ ž ãã ããã®ç·åŒãã¯å¿
ãããåºå®ãããŠããŸãããæ¬äœãæäŸããå±€ã§ãã£ãŠããæ€èšŒã«ãŒã㯠hooks ããã¹ãå®è¡ã®æç€ºã§äœããã€ç¢ºãããããããšãŒãžã§ã³ãã«ãŒãã¯é²ãæ¹ã®æç€ºã§æ¯ãèããããŠãŒã¶ãŒåŽããããçšåºŠèª¿æŽããããšãã§ããŸãã ããšãã°CLAUDE.mdã«ã¯ãæ¹éïŒã·ã¹ãã ããã³ããïŒãåç
§ïŒã³ã³ããã¹ãïŒã«å ããŠãæ€èšŒãé²ãæ¹ã®æç€ºãæžããŸãã1ã€ã®ãã¡ã€ã«ãè€æ°ã®èŠçŽ ã«å¯Ÿå¿ããŠããããšã«ãªããŸãã # CLAUDE.md ## æ¹éïŒã·ã¹ãã ããã³ããïŒ - ã³ãããã¡ãã»ãŒãžã¯è±èªãconventional commits 圢åŒã§æžã - æ¢åã³ãŒãã®ã¹ã¿ã€ã«ã«åããã ## é²ãæ¹ïŒãšãŒãžã§ã³ãã«ãŒãïŒ - 倧ããªå€æŽã¯ããŸãèšç»ã瀺ããŠããå®è£
ãã ## æ€èšŒïŒæ€èšŒã«ãŒãïŒ - 倿ŽåŸã¯ npm test ãš npm run lint ãå¿
ãéã - ãã¹ããèœã¡ãããä¿®æ£ããŠããå®äºãšãã ## åç
§ïŒã³ã³ããã¹ãïŒ - API仿§ã¯ docs/api.md ãåç
§ãã æš©éã»å®è¡ç°å¢ã®ã»ã㯠.claude/settings.json ãªã©ã§èšå®ããŸãã { " permissions ": { " allow ": [ " Read ", " Edit ", " Bash(npm test) " ] , " deny ": [ " Bash(rm:*) " ] } } ãããã¯ããããããŒãã¹ã®äžéšã§ããããŒã«ãã«ãŒããšãã£ãåå°ã¯Claude Codeæ¬äœãæ
ã£ãŠãããäž¡è
ãåãããŠåããŠäžã€ã®ããŒãã¹ãšããŠæ©èœããããšã«ãªããŸãã AI-DLC ãšã®é¢ä¿ æè¿ã§ã¯ãAWSãæå±ããAI-DLC(AI-Driven Development Life Cycle)ã®ããã«ãAIãäžå¿ã«æ®ããéçºæ¹æ³è«ãåºãŠããŠããŸããAgileãScrumã«ä»£ããéçºããã»ã¹ãã®ãã®ãåèšèšããããšãããã®ã§ãã ãã€ã³ããšããŠã¯ãããããæ¹æ³è«ã¯ããŒãã¹ã®äžã«ä¹ãäžäœã®ã¬ã€ã€ãŒã§ãããšããããšã§ããAI-DLCãæ²ããAIãèšç»ããŠäººéãæ¿èªãå®è£
ã«é²ããšããæµãããææç©ãèç©ããŠåŒãç¶ãä»çµã¿ããåäœæ¥åäœã§è¯ãããŒãã¹ãçµãŸããŠããããšãåæã«ãªã£ãŠããŸãã ãã®ãããªæ¹æ³è«ãå°å
¥ããŠãããŸããããªããšãããããã®äžã®ããŒãã¹ãæŽã£ãŠããªãå¯èœæ§ããããŸãã ãŸãšã AIãšãŒãžã§ã³ãã®è³¢ããšã¯ãã¢ãã«ãšããŠã®æ§èœãå
šãŠã§ã¯ãªããã³ã³ããã¹ããããŒã«ãæš©éã»å®è¡ç°å¢ãæ€èšŒã«ãŒããšãã£ãç°å¢ã«å·Šå³ãããŸãã AIãšãŒãžã§ã³ãã䜿ãããªãããã§ã¯ãããŒãã¹ã®èšèšããšã³ãžãã¢ã«æ±ããããéèŠãªã¿ã¹ã¯ã«ãªããšèããŠããŸãã
ããã«ã¡ã¯ãéçº1éšã®æäžã§ãã æ¬èšäºã¯ããšããªãŒã®éçºéšé·é£ããªã¬ãŒåœ¢åŒã§çµç¹ãšAIã«ã€ããŠæžããŠãããAIããã°ãªã¬ãŒãã®ç¬¬2æ¬ç®ã§ãã 第1æ¬ç®ã§ãCTOã®ä»äºã ããªã³ãããžãŒãšçµç¹OSãšããããã®ãšã³ãžãã¢ã ãšããèšäºãæžããŸãããäŒç€Ÿã®çŸå®ã人éãšAIã®å
±éèšèªãšããŠå®çŸ©ãããã®äžã§æææ±ºå®ãåãç¶ãããçµç¹OSããäœãããããŠãã®çµç¹OSã¥ããã¯ãšã³ãžãã¢çµç¹ãäž»å°ãã¹ãã§ãããæåã®äžæ©ãšããŠç€Ÿå
FDE(Forward Deployed Engineer)ãç«ã¡äžããããšããå
容ã§ãã ãšããªãŒã¯ ãAIãã¡ãŒã¹ãã»ã«ã³ãããŒã ãæ²ããŠããŸããAIãåãªãæ¥åå¹çåããŒã«ã§ã¯ãªããããããé åã§ç§ãã¡ã®åãå¢å¹
ããŠãããååšãšæããåãæ¹ããããã¯ããAIãåæã«å€ããŠããããã®æ¹éã®ããšãå
šè·çš®ã§ã®AI掻çšãé²ããŠããŸããã æ¬èšäºã§ã¯ããã®çŸå Žã§å®éã«ã©ãAI掻çšããããŠããã®ããAIãã¡ãŒã¹ããå®çŸããããã«ãšã³ãžãã¢ã¯äœãããŠããã¹ãããæžããŠãããŸããå
šç€Ÿã®AIãã¡ãŒã¹ããæšé²ããŠããããšã¯ãèªç€Ÿãããã¯ãã®éçºãšäžŠè¡ããŠããšã³ãžãã¢ã䟡å€ãåºãã¹ãé åã«ãªã£ãŠããŠããŸãããããŠãã®é åãçœåŒããŠããããšãããããšã³ãžãã¢ãæ¥åãã¡ã€ã³ã«æ·±ãå
¥ã蟌ã¿ã瀟å
FDEãšããŠåãããšã ãšèããŠããŸãã Claudeã®å
šç€Ÿå°å
¥ã§èµ·ããããš ãšããªãŒã§ã¯ä»å¹Žã®2æãããããæ®µéçã«Claudeã®å
šç€Ÿå°å
¥ãé²ããŠããŸããã察象ã¯ãšã³ãžãã¢ã«éããŸãããå¶æ¥ãããŒã±ãã£ã³ã°ãCXãåºå ±ãã¯ãªãšã€ã¿ãŒãŸã§ãå
šè·çš®ã§ãã å°å
¥åŸã®å€åã¯ãæ°åã«ã¯ã£ãã衚ããŠããŸããOpenTelemetryã§èšæž¬ããŠããéãšã³ãžãã¢è·ã®Claude Codeã®ã¢ã¯ãã£ããŠãŒã¶ãŒæ°ã¯ãå°å
¥åœåããçŽ4åã«æ¡å€§ããŸãããä»ã§ã¯ãšã³ãžãã¢å
šäœãããå€ãã®äººãClaude CodeãæŽ»çšããŠããããã£ããã§ã®å©çšã«ãšã©ãŸãããéãšã³ãžãã¢ãClaude Codeã䜿ãããªããããŒã ã§äœã£ãã¹ãã«ãGitHubã§ç®¡çããéçšãŸã§ããšã³ãžãã¢çµç¹ã®å€åŽã§èªç¶ã«ç«ã¡äžãã£ãŠããŸãã æŽ»çšã®äžèº«ããåœåæ³å®ããŠããæç« äœæããªãµãŒãã®åãè¶ããŠããŸãã èªç¶èšèªã§ããŒã¿ã«åãåãããèªåã®æ¥åã®åæãèªåã§åã ã¬ããŒãäœæã®ãããªå®åæ¥åãä»çµã¿åããå®éã«äºæ¥ææãžã€ãªãã æäœæ¥ã§ã¯å¹ŽåäœãããèŠæš¡ã®äœæ¥ããèªååããŒã«ã«çœ®ãæãã ã³ãŒããæžããããšã®ãªãã¡ã³ããŒããèªåã®æ¥åã«åãããå°çšã®ããã·ã¥ããŒããæ¥åããŒã«ãèªåã§äœã ããããäºäŸããç¹å®ã®éšçœ²ã«éããå
šç€Ÿã®ãã¡ãã¡ã§åæå€çºçã«çãŸããŠããŸãã ãããŠãããããæšªããèŠãŠããŠæããã®ã¯ã ãã®æ¥åã«äžçªè©³ãã人ãäœããã®ããäžçªäœ¿ãããã®ã«ãªã ãšããããšã§ãã åœããåã®ããšãããããŸããããããããããŸã§ã¯ãããå®çŸã§ããŠããŸããã§ãããæ¥åã«ç²Ÿéãã人ã¯ãæ¥åäžã®èª²é¡ããäœãäºæ¥ã«ãšã£ãŠéèŠãªã€ã³ãã¯ããæã€ã®ããããç¥ã£ãŠããŸããããã§ãèªåã§ã¯äœããªãããããšã³ãžãã¢ã«äŸé Œãããããªãã£ãããããŠãã®éçšã§ãããããããšã®æå³ããèšèã«ããããªãæ¥åäžã®èæèŠãæãèœã¡ãçµ¶åŠã«æ±ããŠãããã®ãšéããã®ãåºæ¥äžãããæ¥åããã人ãšäœã人ãåãããŠããããããèµ·ããŠããåé¡ã§ãã AIã«ãã£ãŠãäœãããšãã®ã³ã¹ããäžããããã®å£ã¯æ¥éã«ãªããªãã€ã€ãããŸããåæããã·ã¥ããŒããæ¥åå¹çåããŒã«ã®éçºã«ãããŠãããšã³ãžãã¢ã«ããäœããªããã®ãã¯ç¢ºå®ã«æžã£ãŠããŠããŸãã䟡å€ã®æºæ³ããå®è£
ã§ããããšãããæ¥åãç¥ã£ãŠããããšãžç§»ãå§ããŠãããããããå
šç€Ÿå°å
¥ããæ°ã¶æã®çŸå Žã§èµ·ããŠããå€åã§ãã ã¿ã¹ã¯ã®å¹çåãããæ¥åãããŒã®åèšèšãž ãã®å€åã«ãããåäžã®ã¿ã¹ã¯ã®å¹çåã«ãšã©ãŸãããæ¥åã®äžã§é£ç¶ããè€æ°ã®ã¿ã¹ã¯ããŸãšããŠå§çž®ããåããé²ã¿ãæ¥åæéãã®ãã®ãåæžãããŠããŸãã ãããŠã掻çšããããŸã§é²ãã ããããããšããªãŒã¯æ¬¡ã®ã¹ããŒãžãèŠããŠããŸããã ãããŸã§éããªã£ãŠããã®ã¯ãæ¢åã®æ¥åãããŒãæ§æããåã
ã®ã¿ã¹ã¯ã§ããäžæ¹ã§æ¥åãããŒãã®ãã®ã¯ãAIãååšããªãåæã§ãå€ãã®äººéãé¢ããããšãåæã«èšèšãããåœæã®ãŸãŸæ®ã£ãŠããŸããæ¬¡ã¯å·¥çšã®äžŠã³ãšåœ¹å²åæ
ãã®ãã®ãAIåæã§çµã¿çŽãçªã§ããããšããªãŒã®çŸç¶ã¯ã¿ã¹ã¯ã¬ãã«ã®æŽ»çšãäžå¿ã ãããããããã«ã¯å€§ããªäŒžã³ãããæ®ã£ãŠããŸãã å®éã«ãããã§å€§ããªå·®ãçãŸããããšã瀺ãããŒã¿ããããŸãã McKinseyã® The State of AI(2025幎11æç) :AIãå©çšããäŒæ¥ã¯ 88% ã«éããäžæ¹ãAIãã倧ããªäŸ¡å€(EBIT=婿åã»çšåŒåå©çã®5%以äž)ãå®çŸã§ããŠããäŒæ¥ã¯ çŽ6% ã«ãšã©ãŸã å調æ»ã®2025幎3æç :æ€èšŒãã25ã®çµç¹çèŠå ã®ãã¡ãçæAIã®EBITã€ã³ãã¯ãã«æã倧ããå¹ããã®ã¯ãã¯ãŒã¯ãããŒã®æ ¹æ¬çãªåèšèšãã ã£ã ã€ãŸããAI掻çšã®ææãåããã®ã¯ããŒã«ã®å°å
¥éã§ã¯ãªããæ¥åãããŒãã®ãã®ãAIåæã§çµã¿çŽãããã©ããã ããšããããšã§ãã ããã¯ãåé ã§ç޹ä»ããAIãã¡ãŒã¹ãã»ã«ã³ãããŒã®æ¹éãšãéãªããŸããCEOã®åç°ã 瀟å
ã«åããŠèªã£ã ã®ãããŸãã«ãã®ããšã§ããã å€ãã®äººéãé¢ããããšãåæãšããŠèšèšãããæ¢åã®ãªãã¬ãŒã·ã§ã³ã«å¯ŸããŠå°ããã€AI察å¿ãé²ããŠããåãæ¹ã®å€§ããªå€åãåŸãå¯èœæ§ã¯äœãã§ããå€ãã®å Žåã¯ã1ããAIãåæãšãããªãã¬ãŒã·ã§ã³ãèšèšãçŽãå¿
èŠããããŸãã ã¿ã¹ã¯ã¬ãã«ã®æŽ»çšã§åŸãææã¯å
¥å£ã§ãã£ãŠãæ¬äžžã¯ãã®å
ã«ãããŸãããšããªãŒãçã®æå³ã§AIãã¡ãŒã¹ãã«ãªã£ãŠããããã«è¶ããã¹ããã€ã«ã¹ããŒã³ã¯ã次ã®2ã€ã ãšèããŠããŸãã AIãåæãšããæ¥åãããŒå
šäœã®åæ§ç¯ : åã
ã®ã¿ã¹ã¯ã®å¹çåã§ã¯ãªããã©ã®å·¥çšãAIã«ä»»ããã©ãã§äººã倿ããã®ããšããåæããæ¥åãçµã¿çŽãããš AI掻çšã®ãå人ããçµç¹ãžã®æšæºå : çŸç¶ã®æŽ»çšã¯å人ã®ã¹ãã«ãšããŒã«ã«äŸåããŠããŸãããããçµç¹ãšããŠæšæºçã«äœ¿ããåŠç¿ããè²ãŠãŠãããåºç€ã«ããããš ãããŠããã®2ã€ãæšé²ãã圹å²ããããåé ã§è¿°ã¹ã瀟å
FDEã ãšèããŠããŸãã FDEãšããåœ¹å² FDE(Forward Deployed Engineer)ãšã¯ã顧客ã®çŸå Žã«æ·±ãå
¥ã蟌ã¿ããã®æ¥åãçè§£ããããã§ãèªç€Ÿã®ãããã¯ãã軞ã«ã·ã¹ãã ãçµã¿äžããææãåºããŸã§äŒŽèµ°ãããšã³ãžãã¢ã®ããšã§ããPalantirã確ç«ãã圹å²ã§ãå瀟ã§ã¯äžææãFDEã®æ°ããããã¯ãåŽã®ãœãããŠã§ã¢ãšã³ãžãã¢ãäžåã£ãŠããã»ã©ãäºæ¥ã®äžæ žãæ
ã£ãŠããŸããã ãªãAIæä»£ã«æ±ããããã®ã çæAIæä»£ã«å
¥ããOpenAIãGoogleãMicrosoftãšãã£ã代衚çãªäŒæ¥ãçžæ¬¡ãã§FDEçµç¹ã®ç«ã¡äžããå€§èŠæš¡ãªæ¡çšãé²ãããªã©ããã®åœ¹å²ã¯ããŸäžççã«å泚ç®ãããŠããŸãã ãªãããã»ã©æ±ããããŠããã®ããã¢ãã«èªäœã¯APIã§èª°ã§ãåŒã¹ãããã«ãªã£ãäžæ¹ã§ãæ¬åœã«é£ããã®ã¯ãã®å
ãã€ãŸãAIãäŒæ¥ããšã®ããŒã¿ã»æš©éã»æ¥åããã»ã¹ã«æ¥ç¶ããä¿¡é ŒããŠä»»ããããç¶æ
ãŸã§æã£ãŠããéšåã ããã§ãããããŠãã®ä»äºã«ã¯ãæ¥åãç¥ã£ãŠããããš(äœãæ£ãããã©ããæ¬åœã®èª²é¡ã)ãšãã·ã¹ãã ãäœããããš(ãããã©ãå®è£
ããå®å
šã«åããã)ã®äž¡æ¹ãå¿
èŠã§ããçæ¹ã®ç¥èã ãã§ã¯æç«ããŸããã ããã«ãåã®ã»ã¯ã·ã§ã³ã§èŠããšãããAIã§å€§ããªäŸ¡å€ãåºãã«ã¯æ¢åã®æ¥åã«AIãè¶³ãã®ã§ã¯ãªããæ¥åãããŒèªäœãåèšèšããå¿
èŠããããŸããæ¥åã«æ·±ãå
¥ã蟌ã¿ãæ¥åãšã·ã¹ãã ãäžäœã§äœãå€ãããããšã³ãžãã¢ãFDEãžã®éèŠã®é«ãŸãã¯ãAI掻çšã®äž»æŠå Žãã¢ãã«ãäœãããšããAIã¢ãã«ããã«ã«æŽ»çšã§ããããã«æ¥åãåºç€ãäœãå€ããããšãžç§»ã£ãããšã®è¡šãã ãšæããŠããŸãã 瀟å
FDEãšããèãæ¹ ãšããªãŒã§ã¯ããã®FDEã®åãã瀟å
ã«ãåããŸããäºæ¥éšã®æ¥åã«æ·±ãå
¥ã蟌ã¿ãAIãåæãšããæ¥åãããŒãžã®åèšèšããæ¥åãšã·ã¹ãã ã®äž¡é¢ããé²ããŠãããããããåé ããè¿°ã¹ãŠãã瀟å
FDEã§ãã ãã£ãšãããšã³ãžãã¢ã瀟å
ã®æ¥åã«é¢ããããšèªäœã¯ããããŸã§ããã£ãŠããŸãããã§ã¯äœãéãã®ããç«ã¡äœçœ®ãšè²¬ä»»ç¯å²ãå€ãããŸãã ãããŸã§ã®ç€Ÿå
åãã®éçºã¯ãäºæ¥éšãèšèšããæ¥åãããŒãåæã«ããã®äžã§äœ¿ãäžéšã®æ¥åå¹çåããŒã«ãäœãããšãäžå¿ã§ãããæ¥åãããŒèªäœã¯æäžã®ãã®ã§ããšã³ãžãã¢ãæ
ãã®ã¯ããŒã«ã宿ããããšãããŸã§ã§ãã 瀟å
FDEã¯ããã®ç«ã¡äœçœ®ãå€ããŸããForward Deployedãšããååã®ãšããããšã³ãžãã¢ãæ¥åã®çŸå Žã«åºãŠããã課é¡ã®ç¹å®ãšæ¥åã®åèšèšããé¢ãããŸããã©ã®å·¥çšãAIã«ä»»ããã©ãã§äººã倿ãããã®ããã«ããŒã¿ãæ¢åã·ã¹ãã ãã©ãäœãå€ããããŸã§ããæ¥ååŽã§æºããããžãã¹ã¡ã³ããŒãšäžç·ã«æ±ºããŠãããäœãå¯Ÿè±¡ã¯æ¥åãããŒã®äžã®äžéšã®ããŒã«ã§ã¯ãªãæ¥åãããŒå
šäœã§ããã責任ãæã€ç¯å²ã¯ããŒã«ã®å®æã§ã¯ãªããæ¥åãå®éã«å€ãããææã«ã€ãªãããšãããŸã§ã§ãã ãªã瀟å
FDEããšã³ãžãã¢ãããã®ã 1æ¬ç®ã§ä»äºã¯ãçµç¹OSã¥ããããšã³ãžãã¢çµç¹ãäž»å°ãã¹ãçç±ããçµç¹ã®èгç¹ãã4ã€æããŠããŸãããããã§ã¯æ¥åãããŒã®åæ§ç¯ãšããçŸå Žã®ç®ç·ãããç§ã®èããéããŸãã ã¿ã¹ã¯ã¬ãã«ã®æ¹åã§ããã°ãæ
ãæã¯ãã®æ¥åã«äžçªè©³ãã人ã§ãããããäžçªäœ¿ãããã®ã«ãªãããšã¯ãããŸãšããªãŒã®çŸå Žã§èµ·ããŠããå€åãšããŠç޹ä»ãããšããã§ãã ããããæ¥åãããŒã®åèšèšãšãªããšãæ¥åã«è©³ããã ãã§ã¯èžã¿èŸŒããªãé åãåºãŠããŸããæ¥ååŽããèŠããŠããã®ã¯ãç»é¢ãšæé ãã€ãŸãæ¥åãããŒã®è¡šåŽã§ãã衚åŽã ããèŠãŠãããšããã®ç»é¢ãããæ¹åããããŸã§ããæããŸãããäžæ¹ãšã³ãžãã¢ã¯ã瀟å
åºç€ã»ç€Ÿå
ããŒã«ã»èªç€Ÿãããã¯ãã®è£åŽãŸã§ãã·ã¹ãã ã®å
šäœåãäžæ°éè²«ã§ææ¡ããŠããŸããè£åŽã®ããŒã¿æ§é ãã·ã¹ãã éã®é£æºãŸã§åãã£ãŠããã°ãããããããã®å·¥çšã¯èŠããªãããããã¯AIã«æž¡ãã圢ã«ããŒã¿æ§é ããäœãçŽããããšãããåºããæ ¹æ¬ããèšèšã§ããŸãã å®éãAIå°å
¥ãæåŸã«ã€ãŸããã®ã¯æ±ºãŸã£ãŠçŸå Žã®æ¥åã»ããŒã¿ã»æ¢åã·ã¹ãã ã§ããããããæ¥åžžçã«æ¡ã£ãŠããã®ããšã³ãžãã¢ã§ããæ¥åã®äœãå€ãããã¡ã°ãæ·±ãããã¡ã°ãéãé²ããããäœçœ®ã«ããã§ã«ç«ã£ãŠããŸãã äžæ¹ã§ãããã¯ããšã³ãžãã¢ã ãã§ã§ããããšããæå³ã§ã¯ãããŸãããæ¥åãããŒã®åèšèšã«ã¯ãã®æ¥åã®è§£å床ãäžå¯æ¬ ã§ããããæã£ãŠããã®ã¯æ¥åã®åœäºè
ã§ããã ãããšããªãŒã§ã¯ã瀟å
FDEããããžãã¹åŽãšãšã³ãžãã¢åŽã§ã¿ãã°ãçµãã ãããžã§ã¯ããšããŠé²ããŸãã çŸåšå°ãšããããã FDEã®æŽ»åãšããŠã§ã¯ãªãã§ãããçŽè¿ã§ã確ããªæå¿ãããã§ã«ãããŸãã å
šç€Ÿå
±éã²ãŒããŠã§ã€ã«ããã»ãã¥ã¢ãªç€Ÿå
ãªã¢ãŒãMCPãµãŒããŒ ãæŽåããããæ¢åãµãŒãã¹ã®ä¿æããŠããããŒã¿ãMCPãµãŒããŒãšããŠå±éããã ãã§ãããã§ã«çŸå Žã§AIã«ä»»ããããæ¥åã¯æ Œæ®µã«å¢ããéãšã³ãžãã¢ã«ããAIãžã®å§è²ãé²ãã 宿ããããŸãã ãããã¯ããã°ãæ¥åã®å€åŽããAIãšã®æ¥ç¶ãé
ç·ããŠããåãçµã¿ã§ããã ãšããã°ãæ¥åã®å
åŽã«å
¥ã蟌ã¿ãæ¥åãããŒãã®ãã®ãšäžäœã§é
ç·ãçŽãã°ããã®ã¬ãã¬ããžã¯ããã«å€§ãããªãã¯ãã§ãããããæ€èšŒãã«ããã®ãã瀟å
FDEã ãšèããŠããŸãã å¿
èŠã«å¿ããŠä»åŸã¯ä»¥äžã®ãããªæŽåãæšªæããŠåãçµãã§ãããŸãã æ£ãã°ã£ãããŒã¿ã®æå³ãæãã人ãAIãåãæå³ã§æ±ããç¶æ
ã«ããããŒã¿åºç€(ã»ãã³ãã£ãã¯ã¬ã€ã€ãŒ) 瀟å
ã®ã·ã¹ãã ãããŒã¿ãžãå®å
šã«èªã¿æžãã§ããæäœã®å±€(MCPãAPI) å人ã®ç°å¢ã«äŸåããªããæš©éãšç£æ»ã®å¹ãããšãŒãžã§ã³ãã®å®è¡åºç€ AIã«æ¥åãæž¡ãã圢ãžã®ãæ¢åã·ã¹ãã ãããŒã¿æ§é ãã®ãã®ã®çµã¿æ¿ã ãããã¯äžåºŠäœã£ãŠå®æãããã®ã§ã¯ãªããæ¥åã«å
¥ã蟌ããã³ã«ç£šãäžããŠããã瀟å
FDEã®éå
·ã§ããææç©ã§ãã ãã ããã©ã®æ¥åãããã©ã®ç²åºŠã§æãã€ãããããæºäžã§æ±ºãããã€ããã¯ãããŸãããã©ã®å·¥çšãæ¬åœã®ããã«ããã¯ã§ãã©ã®ããŒã¿ãçŸå Žã§ä¿¡çšãããŠããã®ãã¯ãæ¥åã®äžã«å
¥ã£ãŠåããŠåããããšã ããã§ããããŒããããããã£ãŠç€Ÿå
FDEãåãã®ã§ã¯ãªãã瀟å
FDEãçŸå Žã§æŽãã ãã®ãããŒããããã«ãªãããã®é åºã§é²ããŠãããŸãã 瀟å
FDEãšããŠæèããããš æåŸã«ã瀟å
FDEãšããŠæ¥åã«å
¥ã£ãŠããããã§ã倧åã«ããããšèããŠããããšã3ã€æžããŸãã 1次æ
å ±ãåãã«è¡ã 1ã€ç®ã¯ãæ¥åã1次æ
å ±ã§çè§£ããããšã§ãã ãããŸã§ã®ããæ¹ã®å»¶é·ã§ã¯ã誰ããæŽçããè³æããåèãã®èª¬æã§æ¥åãçè§£ããã€ããã«ãªã£ãŠããŸããŸããããããæŽçãããæ
å ±ããã¯ãæ¥åãããŒãåèšèšããããã§æ¬åœã«éèŠãªæ
å ±ããã¥ã¢ã³ã¹ãæãèœã¡ãŠããŸããè³æã«ã¯æžãããªãäŸå€åŠçãæ
åœè
ãç¡æèã«ãã£ãŠãããªã«ããªãŒãæ°åã«è¡šããªãçŸå Žã®å€æãåèšèšã®åæã¯ããããŠãããã«ãããŸãã FDEã®åç¹ã§ããPalantirã«ã¯ãFDEãFBIã®ææ»å®ã®é£ã«åº§ããææ»ã®ããã»ã¹ããã®å Žã§èгå¯ããªããã·ã¹ãã ãçµã¿äžããŠãã£ããšãã£ã話ããããŸããã瀟å
FDEãåãã§ãæ³¥èãçŸå Žã«åºãŠæ¥åã芳枬ããåãåãæ¥åãè¡ã£ãŠãã人ãšåãè§£å床ã«ãªããšãããŸã§ããããã¡ã€ã³ã«æ·±ãå
¥ã蟌ããšã¯ãå
·äœçã«ã¯ããããããšã ãšèããŠããŸãã 埡çšèãã«ã¯ãªããªã 2ã€ç®ã¯ãçŸå Žã«æ·±ãå
¥ã蟌ã¿ãªããããèšããããã®ããã®ãŸãŸäœãååšã«ã¯ãªããªãããšã§ãã çŸå Žã®èŠæã«ã¯å¿
ãçç±ããããŸãããèŠæã®åœ¢ããã®ãŸãŸå®è£
ããããšãæé©ãšã¯éããŸããããã®è£ã«ããæ¬åœã®èª²é¡ã¯äœããæ¥åãããŒå
šäœã§èŠããšãã«ã©ããå€ããã®ãæ ¹æ¬çããæ¥åã®åœäºè
ãšåãè§£å床ã«ç«ã£ãããã§ãã·ã¹ãã ã®å
šäœåãç¥ãè
ãšããŠã®éžæè¢ãåºããäžç·ã«æ±ºããŠããã æ·±ãå
¥ã蟌ããããããé ŒãŸãããã®ãäœãé¢ä¿ã«æµãããããªããŸããããã§èžã¿ãšã©ãŸã£ãŠæ¥åãããŒå
šäœã®åèšèšã«ç«ã¡è¿ãããã©ãããã瀟å
FDEãšåŸæ¥ã®ç€Ÿå
ããŒã«éçºã®åããç®ã ãšèããŠããŸãã ã¢ãŠããããã§ã¯ãªããã¢ãŠãã«ã ã远ã 3ã€ç®ã¯ãäœã£ããã®ã§ã¯ãªããå€ãã£ãæ¥åã§ææã枬ãããšã§ãã MCPããšãŒãžã§ã³ããããã·ã¥ããŒããäœãããšèªäœã¯ææ®µã«ãããŸããããã®å
ã§æ¥åã¯ã©ãã ãå§çž®ãããã®ããããã«ãã£ãŠäºæ¥ã®æ°å€ã«ã©ãè²¢ç®ã§ããã®ãããããŸã§è¿œããããŠãåããŠç€Ÿå
FDEã®ä»äºã¯å®äºããŸãã äœãããšèªäœã®æºè¶³ã«æµããªãããã«ã瀟å
FDEã®ãããžã§ã¯ãã«ã¯ãã¢ãŠããããã®å®æã§ã¯ãªãã¢ãŠãã«ã ã®ææšã眮ããŸããå
ã«ç޹ä»ããMcKinseyã®èª¿æ»ã瀺ãããã«ãAIã¯å°å
¥ããã ãã§ã¯å€§ããªäŸ¡å€ã«ã€ãªãããŸãããææããéç®ããŠæ¥åã«å
¥ããææã§ç· ããããã®èŠåŸã¯ãåããèªç±ãªã¶ãã ã匷ãæã€å¿
èŠããããšèããŠããŸãã ãããã« AIã«ãã£ãŠãäœãããšãã®ã³ã¹ããäžããããšããªãŒã®çŸå Žã§ã¯ãæ¥åã«äžçªè©³ãã人ãèªåã®éå
·ãèªåã§äœãå€åãèµ·ããŠããŸããå®è£
ãæ°äž»åãããŠããããããã®æä»£ã«ããšã³ãžãã¢ã®äŸ¡å€ã¯ãæ¥åã®è£åŽãŸã§ãçè§£ããããã§ãäœãããªãäœãå€ããã®ãããæããå®çŸã§ããããšã«ç§»ã£ãŠãããŸãã ã ãããããšã³ãžãã¢ãæ¥åãã¡ã€ã³ã«æ·±ãå
¥ã蟌ã¿ã瀟å
FDEãšããŠæ¥åãããŒã®åæ§ç¯ãšãAI掻çšã®å人ããçµç¹ãžã®æšæºåãçœåŒããŠãããããããšããªãŒã®ç®æãAIãã¡ãŒã¹ããžã®éã§ãããããããã®ãšã³ãžãã¢ã®å€§ããªäŸ¡å€ã®åºãã©ããã ãšèããŠããŸãã ãã®è»¢æã¯ãŸã å§ãŸã£ãã°ããã§ãã宿ããä»çµã¿ã®äžã§åãã®ã§ã¯ãªããæ¥åãšã·ã¹ãã ãã©ãäœãå€ããããæããšããããé¢ãããããšã³ãžãã¢ã«ãšã£ãŠãããã»ã©é¢çœããã§ãŒãºã¯ãªããªããªããšæã£ãŠããŸããèå³ãæã£ãŠããã ããæ¹ã¯ããã²äžåºŠã話ãããŸãããã AIããã°ãªã¬ãŒã¯ããã®ããšãéçºéšé·é£ãç¶ããŠãããŸããæ¬¡åããã²ã芧ãã ããã ãšããªãŒã§ã¯äžç·ã«åã仲éãåéäžã§ãïŒ ãšã³ãžãã¢ããã°ããã£ããã«å°ãã§ãèå³ãæã£ãŠããã ãããããŸãã¯ã«ãžã¥ã¢ã«ã«é¢è«ããŸãããïŒ
æ ªåŒäŒç€ŸãšããªãŒã§CTOãåããŠããä»äº( @imakei_ )ã§ãã æ¬æ¥ãããšããªãŒã®éçºéšé·é£ãèããçµç¹ãšAIã«ã€ã㊠å
š10æ¬ã«ããã£ãŠéçºéšé·é£ãšãªã¬ãŒåœ¢åŒã§ãããã°ãæçš¿ããŸãïŒ ä»åã¯ãã® AIããã°ãªã¬ãŒ 第1æ¬ç® ã§ãããªã³ãããžãŒããšãçµç¹OSããšããèãæ¹ãå
¥ãå£ã«ãããããã®ãšã³ãžãã¢çµç¹ã®åœ¹å²ã«ã€ããŠæžããããšæããŸãã çµè«ããèšããšããã®çµç¹OSã¥ããã¯ããšã³ãžãã¢çµç¹ãäž»å°ãã¹ãã ãšèããŠããŸãã ãªã³ãããžãŒãšçµç¹OS ãŸãåæãç°¡åã«æŽçããŸãã åŒç€ŸãšããªãŒã¯AIãã¡ãŒã¹ãã«ã³ãããŒãšããŠããããã¯ãã§ã®æŽ»çšã¯ãã¡ãããéçºçŸå Žã§ãAIã®å®çšçãªæŽ»çšãé²ããŠããŸããããã®å»¶é·ã§æè¿èããŠããã®ãããçµç¹ãã®ãã®ããAIãåããOSã«ããŠããããšããããŒãã§ãã ããã§éµã«ãªãã®ãããªã³ãããžãŒããšããèãæ¹ã§ããç°¡åã«èšãã°ãäŒç€Ÿã®çŸå®ãã人éãšAIã®åæ¹ãåãæå³ã§æ±ããå
±éèšèªãšããŠå®çŸ©ãããã®ããšæããŠãã ãããäžèº«ã¯3ã€ã®èŠçŽ ã§èãããšåãããããã§ããããã§ã¯ãååãæ±ããããªãµãŒãã¹ãäŸã«æãããšä»¥äžã®ããã«ãªããŸãã åè© ïŒã顧客ããæ³šæããåšåº«ãããå
·äœçã«ã©ã®ããŒã¿ã®äœãæãã®ã åè© ïŒããã«å¯ŸããŠãè¿éããããæ
åœã倿Žããããªã©ãäœãã§ããã®ã ã«ãŒã« ïŒèª°ãé²èЧã»å®è¡ããŠãããã倿Žå±¥æŽãã©ãæ®ãã ãã®å
±éèšèªã®äžã§ã人ãšAIãšãŒãžã§ã³ãããšãã«æææ±ºå®ãåããç¶æ
ââãããæ¬èšäºã§ã¯ãçµç¹OSããšåŒã³ãŸããããŒã¿ãæºããåºç€ã§ã¯ãªããæææ±ºå®ãåãç¶ããåºç€ãäœãããšããã€ã¡ãŒãžã§ãã ãããŠæ¬é¡ã¯ãããã誰ãäž»å°ããã®ããã§ããçµå¶äŒç»ãªã®ããDXæšé²éšéãªã®ããããŒã¿åºç€ããŒã ãªã®ããèªåã¯ããšã³ãžãã¢çµç¹ãäž»å°ãã¹ãã ãšèããŠããŸãã ãªããšã³ãžãã¢çµç¹ãäž»å°ãã¹ããªã®ã çç±ã4ã€ã«åããŠè¿°ã¹ãŸãã 1. ãçŸå®ã®æ£ãããããæãããç¥ã£ãŠãããã åŒç€Ÿã¯ããªãã·ã¥ãããã³ã»ãã¢ããã»TIMELINEãšè€æ°ãã¡ã€ã³ã®ãããã¯ããå±éããŠãããã顧客ããšããèšèã²ãšã€ãšã£ãŠãããµãŒãã¹ãã·ã¹ãã ããšã«å®çŸ©ãIDãç°ãªããŸãã ãã®æ£ãããããæ¥ã
ããŒã¿ãšã·ã¹ãã ã«åãåãäžã§èæãšããŠææ¡ããŠããã®ã¯ãšã³ãžãã¢ã§ããã©ãã«æ£ãšãªãããŒã¿ããããã©ããä¿¡çšã§ããã©ããã€ãªããšäœãå£ãããããã®å°å³ãæã£ãŠããã®ã¯çŸå Žã®ãšã³ãžãã¢ã§ããããªã³ãããžãŒã®ãåè©ããæ¬åœã®æå³ã§å®çŸ©ã§ããã®ããããç¥ã£ãŠãã人ã ãšèããŠããŸãã 2. ãåè©ããå®å
šã«å®è£
ã§ããã®ã¯ãšã³ãžãã¢ã ãã ãªã³ãããžãŒã¯åè©ã ãã§ã¯åããŸããããè¿éããããæ
åœã倿Žããããšãã£ãåè©ããã£ãŠãåããŠæææ±ºå®ãçŸå®ã«åæ ãããŸãã ãããŠãã®åè©ããåææ¡ä»¶ããã§ãã¯ããå®è¡ãã°ãæ®ããå¿
èŠã«å¿ããŠæ¬çªåæ åã«ã·ãã¥ã¬ãŒã·ã§ã³ã§ããââããããå®å
šãªåœ¢ã§å®è£
ããã®ã¯ããŸãã«ãšã³ãžãã¢ãªã³ã°ã®ä»äºã§ããããã¯ããžãã¹åŽãã©ãã ãèŠä»¶ãæŽçããŠã代æ¿ã§ããªãé åã ãšèããŠããŸãã 3. AIãçŸå®ã«æ¥å°ãããã®ã¯ãšã³ãžãã¢ã®ä»äºã ãã ãšãŒãžã§ã³ããæ¥åã«çµã¿èŸŒãããã§æãéèŠãªã®ã¯ãçŸå®ã®ã¢ããšæäœã«æ£ããæ¥ç¶ãããŠãããã©ããã§ããMCPã§ããŒã«ãæäŸããã«ããŠããæš©éãçŽã¥ããŠç£æ»å¯èœã«ããã«ããŠããããã¯ãã¹ãŠãšã³ãžãã¢ãªã³ã°ã®é åã§ãã åªããã¢ãã«ãéžå®ãã話ã§ã¯ãªãããã®ã¢ãã«ãçŸå®ã«é
ç·ãã話ã ãšæããŠããŸããé
ç·ã§ããæ
ãæãããªããã°ãäžäœã§ã©ãã ãæãæ¯ã£ãŠãçµç¹ã¯åããŸããã 4. æœè±¡åãšã¢ããªã³ã°ããšã³ãžãã¢ã®æ¬è·ã ãã ãçŸå®ããæ±ããããæ§é ã«åãåããŠã¢ãã«ã«ããããšããå¶ã¿ã¯ããšã³ãžãã¢ãæ¥ã
ã®èšèšã§è¡ã£ãŠããããšãã®ãã®ã§ãããªã³ãããžãŒã¥ããã¯ã察象ãDBã¹ããŒããããäŒç€Ÿã®çŸå®ãã«å€ãã£ãã ãã§ãæ±ããããæèã®åã¯å€ãããŸãããããããšã³ãžãã¢çµç¹ãæãåŸæãšããäœæ¥ã ãšèããŠããŸãã ãªã³ãããžãŒãšçµç¹OSãšãšã³ãžãã¢ã®é¢ä¿ ããããã®ãšã³ãžãã¢çµç¹ãæ
ãåœ¹å² ã顧客ãšã¯äœãããšãã£ãåè©ã®"æå³"ãã®ãã®ã決ããã®ã¯ãäºæ¥å€æã§ãããããžãã¹ã®ä»äºã§ããããã¯ãšã³ãžãã¢ãéããå Žã§åæã«å®çŸ©ããŠãããã®ã§ã¯ãããŸããã äžæ¹ã§ãããããã®ãšã³ãžãã¢çµç¹ã«ã¯ã ãã®å®çŸ©ããæ±ºãããã圢ã«ããç¶æãããåœ¹å² ãæ±ãããããšèããŠããŸããå
·äœçã«ã¯ã次ã®ãããªåãã§ãã ææ§ãªãŸãŸæŸçœ®ãããŠããå®çŸ©ã«å¯Ÿããã3ã€ã®ã·ã¹ãã ã§æå³ãç°ãªããŸãããã©ããæ£ãšããŸããããš åããç«ãŠã決æãä¿ã 決ãŸã£ãå®çŸ©ããããã¥ã¡ã³ããã³ãŒãïŒããŒã¿ãããŒã®å®çŸ©ãã¹ããŒããèšå®ãã¡ã€ã«çïŒã« èœãšã蟌ã¿ã圢ã«ãã ãããæéãšãšãã«åŽ©ããªããã å®ããè²ãŠã èšãæããã°ãHowãæ¡ããªããWhatãåŒãåºãããšããããšã§ããå®çŸ©ãã®ãã®ã¯ããžãã¹ãšååããŠæ±ºããŸããããã®å Žãèšèšãã圢ã«ããç¶æããååŠã¯ãšã³ãžãã¢çµç¹ãæ
ããèŸæžããã³ãŒããšããŠãä¿æããããããããšã³ãžãã¢ãèªç¶ãšãã®çªäººã«ãªããã®ã ãšèããŠããŸãã åŸæ¥ã®ãšã³ãžãã¢çµç¹ããæ±ºãŸã£ã仿§ãå®è£
ããã圹å²ã ã£ããšããã°ãããããã¯ãçµç¹ãäœãæææ±ºå®ãã¹ããã®åå°ãã®ãã®ãæŽããã圹å²ãžãšéå¿ãç§»ã£ãŠããããããAIæä»£ã®ãšã³ãžãã¢çµç¹ã®åœ¹å²ã«ãªã£ãŠãããšæããŠããŸãã ãšã³ãžãã¢çµç¹ãšããŠãããããã©ãåãã å
·äœçãªé²ãæ¹ã¯ããããè©°ããŠããæ®µéã§ãããæåã®äžæ©ãšããŠã 瀟å
FDEïŒForward Deployed EngineerïŒã®ç«ã¡äžã ããçæããããšããŠããŸãã FDEã¯ãããšããšã¯é¡§å®¢ã®çŸå Žã«æ·±ãå
¥ã蟌ã¿ããã®å Žã®æ¥å課é¡ãè§£ããªããã·ã¹ãã ãçµã¿äžããŠãããšã³ãžãã¢ãæã圹å²ã§ããããã瀟å
ã«åããããšããã®ãã瀟å
FDEãã®ã€ã¡ãŒãžã§ããäºæ¥ã®çŸå Žã«å
¥ã蟌ã¿ãæ¥åãšããŒã¿ã®å®æ
ãäžæ¬¡æ
å ±ãšããŠæããããã§ãåè¿°ã®ãåè©ã»åè©ã»ã«ãŒã«ããçŸå®ã«å³ããŠå®çŸ©ãã圢ã«ããŠããããªã³ãããžãŒã¥ããã¯ãæºäžã®èšèšã§ã¯ãªãçŸå Žã«åŒµãä»ãäœæ¥ã ãšèããŠããããããæ
ã人ãã¯ã£ãã眮ãããšããäž»å°ããŠããããã§ã®èµ·ç¹ã«ãªããšæããŠããŸãã åŒç€Ÿã¯è·èœæšªæã§ããžãã¹ã«ã¢ã©ã€ã³ããçµç¹æ§é ããšã£ãŠããããšã³ãžãã¢ãããšããšäºæ¥ã®è¿ãã«åº§ã£ãŠããŸãããã®æå³ã§ã瀟å
FDEçãªåãã¯æ§é çã«ãçžæ§ããããšèããŠããŸãã ãŸãã¯èª²é¡ã®å€§ããé åã«ç€Ÿå
FDEã眮ããããã§åŸãç¥èŠãããšã«ãå
±éèšèªãã©ãå
šç€Ÿã®å
±æè³ç£ãžãšè²ãŠãŠãããââãã®ããããèµ°ããªããå
·äœåããŠããäºå®ã§ããé²ãæ¹ãåŸãããåŠã³ã¯ããŸãå¥ã®æ©äŒã«æžããã°ãšæããŸãã äž»å°ããããã§æèããŠããããš æåŸã«ãæãæ¯ãããã§æ°ãã€ããŠããç¹ã3ã€æããŸãã 1ç¹ç®ã¯ã å®ç§ãªå
šç€Ÿãªã³ãããžãŒãæåããäœãããšããªãããš ã§ãããã¹ãŠãäžåºŠã«é²ããããšãããšå¿
ãé æ«ããŸããæã課é¡ã®å€§ãã1ãã¡ã€ã³ãããå°ããå§ããã®ãçŸå®çã ãšèããŠããŸãã 2ç¹ç®ã¯ã ãšã³ãžãã¢ã ãã§å®çŸ©ãéããªãããš ã§ããHowã¯æ¡ããŸãããWhatã¯ããžãã¹ãå·»ã蟌ãã§æ±ºããããããåãéãããšãæè¡çã«ã¯æ£ããã誰ã䜿ããªãèŸæžãã§ãããããŸãã 3ç¹ç®ã¯ã ã䟿å©ããŒã«ã¥ããããšãåºç€ã¥ããããæ··åããªãããš ã§ããç®ã®åã®èªååã¯ææãèŠããããé
åçã§ããããããå
±æè³ç£ã®èŠåŸã«ä¹ãããšãããŸã§é²ããŠåããŠãçµç¹OSããšåŒã¹ãç¶æ
ã ãšèããŠããŸãã ãããã« AIæä»£ã«å
¥ãããšã³ãžãã¢çµç¹ã®åœ¹å²ã¯ãæ©èœãäœããããšãããããäžæ®µåºããããšããŠãããšæããŠããŸããäŒç€Ÿã®çŸå®ãã¢ãã«ã«èœãšã蟌ã¿ã人ãšAIããšãã«åãåå°ââããªãã¡çµç¹OSãã®ãã®ãäœãããšãã圹å²ã§ãã ãããŠãã®ä»äºã¯ãçŸå®ã®ã·ã¹ãã ã«æãè¿ããåè©ãå®å
šã«å®è£
ã§ããAIãçŸå®ã«é
ç·ã§ããæœè±¡åãæ¬è·ãšããããšã³ãžãã¢çµç¹ãæãããŸãæ
ããé åã ãšèããŠããŸããçµå¶ãäºæ¥ãå·»ã蟌ã¿ãªããããé§åããã®ã¯èªåãã¡ã ãšåŒãåãã«ãã䟡å€ã®ããããŒãã§ãã åŒç€Ÿã§ãããå人ã®AI掻çšããããçµç¹ã®AI掻çšããžãšè»žè¶³ãç§»ãããšããŠããä»ãããã¯ãšã³ãžãã¢çµç¹ãäž»å°ããŠãããããšèããŠããŸãã åºå
žã»åè æ¬èšäºã«ãããããªã³ãããžãŒãã®èãæ¹ã¯ã以äžã®Palantirã®èšäºãåèã«ããŠããŸãã Palantir, " Connecting AI to Decisions with the Palantir Ontology "
ããã«ã¡ã¯ã25åãšã³ãžãã¢ã® 190 ã§ãã 2026幎6æ5æ¥ãåŒç€Ÿã®ãªãã£ã¹ãäŒå Žã«ã 26åãšã³ãžãã¢ã®èŒªãåºãNight ããšããã€ãã³ããéå¬ããŸãããããŸããŸãªäŒç€Ÿã«å
¥ç€Ÿãã26åãšã³ãžãã¢ã«éãŸã£ãŠãããããäºãã®åãæ¹ãããããã®æ±è² ãå
±æããŠäº€æµããŠãããããšããã€ãã³ãã§ãã ãã®ã€ãã³ãã¯ãåŒç€Ÿ25åã®ç§ãš uho-wq ã ãããããŸããšã ã®3人ã§äŒç»ã»éå¶ããŸããã æ¬èšäºã§ã¯ãäŒç»ããèæ¯ã»åœæ¥ã®å
容ã»éå¶ããŠã¿ãŠæ°ã¥ããããšããŸãšããŸãã èæ¯ ç§ãã¡25åã¯ãå
¥ç€Ÿ1幎ç®ã«ç€Ÿå€ã®ãšã³ãžãã¢ãšç¥ãåããæ©äŒã«æµãŸããããã§ã§ããã€ãªãããæ¥ã
ã®æ¯ããåºæ¿ã«ãªã£ãŠããŸãã äžæ¹ã§ãå
¥ç€ŸããŠéããªãææã¯ãä»ç€Ÿã®åæãã©ã®ããã«åããŠããã®ããã©ã®ãããªããšãèããŠããã®ããç¥ãæ©äŒã¯æå€ãšå€ããããŸããã ãåŸèŒ©ã«ãèªç€Ÿã ãã§ã¯ãªããä»ç€Ÿã®ãšã³ãžãã¢ãšäº€æµããŠã»ããããšããæãããã26åãä»ç€Ÿã®ãšã³ãžãã¢ãšäº€æµã§ããå Žãèªåãã¡ã§çšæãããããšèããã®ããã®ã€ãã³ãã®ãã£ããã§ãã ã€ãã³ãã®ç®çã¯ãæè¡åã®åäžã§ã¯ãªããæ¬¡ã®ç¹ã«çœ®ããŸããã ä»ç€Ÿã®åæãä»ã©ããªããšã«åãçµã¿ãäœãèããŠããã®ããç¥ã ãã®ããã§ãæ°è»œã«çžè«ãåããé¢ä¿ãã€ãã äžèšã§ããã°ãåæãšãã仲éãå¢ãããŠãããããšãããŽãŒã«ã§ããäžã®äžä»£ãèŠãŠåŠã¶ããšã倧åã§ãããé£ã«ããåæã®é 匵ããç¥ãããšããå
¥ç€ŸçŽåŸã®ãã®ææã«ã¯ãã¡ã°ãã®åºæ¿ã«ãªããšèããŸããã äŒç»ã«ããã£ãŠèããããš ã³ã³ãã³ããèšèšããããã§ãããã€ãåæã眮ããŸããã ãŸããæèŠªäŒãé€ã㊠æè¡ã®è©³çްãªè©±ã¯æ±ããªã æ¹éã«ããŸããã26åã¯ãŸã ç ä¿®äžã®äŒç€Ÿãå€ããæ¥åã®è©³çްã話ãã¥ããã±ãŒã¹ããããšèããããã§ãããã®ãããã誰ã§ãååãã«è©±ãããããããã©ãåããŠãããããããšããããŒããå
±éã®è»žã«æ®ããŸããã ãŸããèªå·±é瀺ã®ããŒãã«ãã§ããã ãäžããããšãæèããŸãããå察é¢å士ã倧åã«ãªãã®ã§ããããªã話ãã®ã§ã¯ãªããä»ç®ã«æžãåºããŠããå
±æããããšããæ®µåãã«ããŠããŸãã åœæ¥ã®å
容 åœæ¥ã®ã¿ã€ã ããŒãã«ã¯ä»¥äžã®ãšããã§ãã æå» å
容 19:15 éå Ž 19:30 ãªãŒããã³ã° 19:35 äŒå Žã¹ãã³ãµãŒLTïŒåŒç€ŸïŒ 19:40 å
¬åLTïŒ3åïŒ 20:00 ã°ã«ãŒãã¯ãŒã¯ 20:20 ã¯ããŒãžã³ã° 20:25 æèŠªäŒ 21:30 çµäº LT LTã¯2éšæ§æã§ãããŸããäŒå Žã¹ãã³ãµãŒã§ããåŒç€Ÿãã Hir_K ãLTãè¡ããŸãããç¶ããŠãå
¬åã§éãŸã£ã3åã®æ¹ã«çºè¡šããŠããããŸããã LTã®ããŒãã¯ãä»åŸã®åãæ¹ãæ±è² ãã§ããæè¡çãªå
容ã§ã¯ãªããããããã©ããªãšã³ãžãã¢ã«ãªããããã»äœã倧äºã«ããããããšãã£ãåãå£ã§ãé¡ãããŸããã ããã¯ããŒã Sekibuuun3109ãã HwaI12ãã takkiiiiiiiiãã æœè±¡çãªããŒããªã®ã§éãŸããå°ãäžå®ããããŸãããããããããããšã«å
¬å3æ ãšãåãŸããŸãããã©ã®çºè¡šãå
¥ç€ŸããŠæ°ã¶æã®ãªã¢ã«ãªæ°æã¡ãåæ ãããŠããŠãèããŠããåŽãèªåããšãšããŠåãæ¢ããããå
容ã§ããã LTã®æ§å ã°ã«ãŒãã¯ãŒã¯ ã°ã«ãŒãã¯ãŒã¯ã®ããŒãã¯ãä»å¹ŽåºŠã®æ±è² ãã§ããæµãã¯æ¬¡ã®ãšããã§ãåã°ã«ãŒãã«åãããŠå®æœããŸããã ä»ç®ã«èªåã®ä»å¹ŽåºŠã®æ±è² ãæžãåºãïŒ5åïŒ ã°ã«ãŒãå
ã§å
±æããïŒ10åïŒ æ±è² ãæžãåºãéã¯ããã§ããããã«ãªãããããšããç®æšã«ããŠããå
茩ã®ç¹åŸŽããªã©ãäŸãšããŠæç€ºããŸãããå
±æã®ããŒãã§ã¯ãã¯ããã«èªå·±ç޹ä»ïŒæå±ã»è·çš®ã»ããŸåãçµãã§ããããšïŒãããŠããæ±è² ãçºè¡šãããäºãã«æ°ã«ãªã£ãç¹ã質åãåã£ãŠããã圢ã«ããŸããã ã°ã«ãŒãã¯ãŒã¯ã®æ§å ã©ã®ã°ã«ãŒããæŽ»çºã«è°è«ããŠããæ§åãèŠãããŸãããä»ç®ãèµ·ç¹ã«ããããšã§ãå察é¢å士ã§ãäŒè©±ã®ãã£ãããã€ãã¿ãããã£ãã®ã§ã¯ãªãããšæããŸãããŸããããŒããæªæ¥ã®è©±ã«å¯ããããšã§ãååããªé°å²æ°ã ã£ãã®ãè¯ãã£ãã§ãã æèŠªäŒ æåŸã¯ç«é£åœ¢åŒã®æèŠªäŒã§ããåŒç€ŸãäŒå Žã¹ãã³ãµãŒãšããŠãã±ãŒã¿ãªã³ã°ãããªã³ã¯ãçšæããŸããã ã°ã«ãŒãã¯ãŒã¯ã§äžåºŠè©±ããããšãäŒè©±ã®ãã£ããã«ãªã£ãŠããŠãã°ã«ãŒãã®å
å€ãåãã亀æµãåºãã£ãŠããŸããã26åã®ã³ãã¥ããã£ãäœãåããèŠãããŠè¯ãã£ãã§ãã éå¶ããŠã¿ãŠæ°ã¥ããããš ç§èªèº«ãåããŠã®ç€Ÿå€åãã€ãã³ãéå¶ã ã£ãã®ã§ãçµãã£ãŠã¿ããšããã€ãåŠã³ããããŸããã ããŒãããããããã®è©±ãã«å¯ããã®ã¯æå¹ã ã£ãã æ¯èŒãåçã§ã¯ãªãæ±è² ã軞ã«ããããšã§ãå
¥ç€ŸçŽåŸã§ã話ãããã空æ°ã«ãªããŸããã ä»ç®ã«æžãåºããŠãã話ããšãå察é¢ã§ã話ããããã æžãåºãäœæ¥ãã¯ã³ã¯ãã·ã§ã³ã«ãªããäŒè©±ã®ããŒãã«ãäžãã£ããšæããŸãã ã°ã«ãŒãã¯ãŒã¯ãæèŠªäŒã®äŒè©±ã®ãã¿ã¥ããã«ãªã£ãã äžåºŠãäºãã®ããšã話ããŠãããšãããããã®ãŸãŸæèŠªäŒã§ã®äŒè©±ã®ãã£ããã«ãªããŸããæèŠªäŒãçãäžããããã§ããã®åã®ã°ã«ãŒãã¯ãŒã¯ãå¹ããŠããããã«æããŸããã ãŸãšã ãããããªäŒç€Ÿã»ããã¯ã°ã©ãŠã³ãã®26åãšã³ãžãã¢ãéãŸã£ãŠãããŠãéå¶ãšããŠãå
å®ããã€ãã³ãã«ãªããŸãããåå ããŠãã ãã£ãã¿ãªãããããããšãããããŸããã éååçïŒå
¬é蚱諟æžã¿ïŒ æåŸã« åŒç€Ÿã§ã¯ããšãã«åã仲éãåéããŠããŸãã ããã¯ããã°ãèªãã§å°ãã§ãåŒç€Ÿã«èå³ãæã£ãŠããã ããæ¹ã¯ããã²äžåºŠã«ãžã¥ã¢ã«é¢è«ã«ãè¶ããã ããïŒ https://corp.every.tv/recruits/engineer
â å®è£
ãã¬ãã¥ãŒããHarnessã®æŽåããããŠHarnessãè©äŸ¡ããEvalsãž 1. ã¯ããã« ããã«ã¡ã¯ãéçºæ¬éšéçº1éšããªãã·ã¥ãããã³éçºéšæå±ã®è¥¿æ¬ïŒ @daikon265 ïŒã§ãã 6æ11æ¥ã«éå¬ãããCode w/ Claude: Extended Tokyoã«åå ããŠããŸãããåå ããŠæããã®ã¯ãClaude Codeã®æŽ»çšããã©ãã³ãŒããæžãããããããããClaudeãå®å
šã«åããç°å¢ãã©ãäœããã©ãæ¹åãç¶ããããã«ç§»ã£ãŠããããšã§ããã ãããŸã§Claude Codeã®æŽ»çšã§ã¯ã Harness ã䜿ã£ãŠClaudeãããŸãå¶åŸ¡ãã話ãäžå¿ã ã£ããšæããŸãã äžæ¹ã§ä»åã®ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ããã®Harnessèªäœãã©ãè©äŸ¡ããã©ãè²ãŠãããšããèŠç¹ã匷ãåºãŠããŸããã Anthropicã®ãšã³ãžãã¢ãšã®1on1ã§ãç§ã¯æ¬¡ã®ãããªè³ªåãããŸããã ã¢ãã«ãé²åããã«ã€ããŠã ä»ã®Harnessã¯ã ãã ã圢骞åããŠã ãããéªéã«ãªã£ãŠããã®ã§ã¯ãªããïŒ è¿ã£ãŠããçãã¯å°è±¡çã§ããã ãã®çŽæã¯æ£ãããã¢ãã«ãè³¢ããªãã«ã€ããŠãHarnessã®éèŠæ§ã¯äžãã£ãŠãããAnthropic瀟å
ã§ã¯ãæ°ããã¢ãã«ãå®éè©äŸ¡ãããã®çµæã«åºã¥ããŠãCLAUDE.mdãå°ããããããSkillsããã€ãºã«ãªã£ãŠããªããã倿ããŠããã Anthropicã®äžã§ã¯ãã§ã«ãEvalsã䜿ã£ãŠHarnessãè©äŸ¡ããå¿
èŠãªãã®ãæ®ããäžèŠã«ãªã£ããã®ãåãéçšãåã£ãŠãããšããããšã§ãã æ¬çš¿ã§ã¯ããã®èãæ¹ãæœè±¡è«ã«çãããå®éã®éçºãããŒã«èœãšã蟌ãã§èããŸãã 倧ããã¯ã次ã®3ã€ã®ãã§ãŒãºã§æŽçããŸãã 1. å®è£
ãã§ãŒãº 1-1. PlanïŒå®è£
åã«äœãå
·äœåããã 1-2. ImplementationïŒãµããšãŒãžã§ã³ãã«ã©ãå®è£
ãåæ
ãããã 2. ã¬ãã¥ãŒã»ããŒãžãã§ãŒãº 2-1. PRã§äœãèŠããã 2-2. Claudeãšäººéã§ã¬ãã¥ãŒãã©ãåæ
ããã 3. éçšã»æ¹åãã§ãŒãº 3-1. ããŒãžåŸã«äœã芳å¯ããã 3-2. åŠã³ãã©ãHarnessã«æ»ãã ããããã®ãã§ãŒãºã§ãã«ã³ãã¡ã¬ã³ã¹ã§èªãããŠããå
容ã玹ä»ãã€ã€ãèªåãã¡ã®éçºã«åãå
¥ãããªãã©ããã圢ã«ãªãããããæŽçããŠãããŸãã 2. å®è£
ãã§ãŒãº å®è£
ãã§ãŒãºã¯ãããã« Plan ãš Implementation ã«åããŠèããŸãã ããã§ããPlanã¯ãå®è£
åã«ä»æ§å€æãå®è£
å€æãæ€èšŒå€æãå
·äœåããå·¥çšã§ããèªåã以åãããClaudeã«ãããªãå®è£
ãããåã«ããŸãèšç»ãäœãããããšã¯ããŠããŸããã ãã ããã®èšç»ã®ç«ãŠæ¹ãç²åºŠã¯ææ§ã«ãªããã¡ã§ãã ã©ããŸã§Claudeã«è³ªåãããã®ãã ã©ããŸã§ä»æ§ãåºããã®ãã ã©ã®æç¹ã§æ€èšŒæ¡ä»¶ãæ±ºããã®ãã ã©ã®æ
å ±ãæ®ããŠããã°ãåŸç¶ã®å®è£
ãã¬ãã¥ãŒã§äœ¿ããã®ãã ä»åã®ã¯ãŒã¯ã·ã§ããã§åãããããã£ãã®ã¯ããŸãã«ãã®ãPlanãã©ãå
·äœåããããã§ããã 2-1. PlanïŒå®è£
åã«äœãå
·äœåããã 2-1-1. ãŸãClaudeã«è³ªåããã ãHow we Claude Codeãã¯ãŒã¯ã·ã§ããã§ã¯ããšãŒãžã§ã³ããé·æéèªåŸçšŒåã§ããããã«ãªã£ãŠããããšã§ããã¹ã®ã³ã¹ããäžãã£ãŠãããšããå顿èãèªãããŠããŸãããããã§ç޹ä»ãããŠããã®ããã³ãŒããæžãããåã«ClaudeãžãŠãŒã¶ãŒãã€ã³ã¿ãã¥ãŒãããææ§ãããšããžã±ãŒã¹ãåŒãåºãæ¹æ³ã§ãã ããšãã°ã次ã®ãããªäŸé Œã¯å±éºã§ãã åéçšã®å²ãåã¢ããªãäœã£ãŠ ãã®äŸé Œã ãã§ããClaudeã¯ããããããã®ãäœããŸãã ããããä¿åæ¹æ³ã¯ã©ãããã®ãã粟ç®ã¯ã¢ããªå
ã§è¡ãã®ããé貚ã¯è€æ°å¯Ÿå¿ããã®ãã誰ã誰ã«ãããæãã¹ãããã©ãæå°åããã®ãããšãã£ã倿ãClaudeãåæã«åããããšã«ãªããŸãã ã¯ãŒã¯ã·ã§ããã§ç޹ä»ãããŠããã®ã¯ã次ã®ããã«Claudeã«è³ªåãããé²ãæ¹ã§ãã ããã€ã確信ãæãŠãªãç¹ããããŸãã ãŸãç§ã«ã€ã³ã¿ãã¥ãŒããŠã仿§ã®ææ§ãªãšãããæŽçããŠãã ããã 質åã¯äžåºŠã«å€ããããããéèŠãªãã®ããèããŠãã ããã åçãããšã«ãå®è£
åã«åæãã¹ã仿§ããŸãšããŠãã ããã ãã¢ã§ã¯ãClaudeãçšéãå岿¹æ³ãä¿åæ¹æ³ãç²Ÿç®æ¹æ³ãé貚ãå
±ææ¹æ³ãªã©ã質åããåçã«ççŸãããã°è¿œå ã§ç¢ºèªããŠããŸããããã®çµæãšããŠãå®è£
ã«å
¥ãåã«è©³çްãªspecãçæãããŠããŸããã ããã§å€§äºãªã®ã¯ãClaudeã«è³ªåãããããšã§ãå®è£
åã«å€æãå¿
èŠãªããšã衚ã«åºãããšã§ãã 2-1-2. æ€èšŒæ¡ä»¶ãå
ã«æ±ºãã Planã§ç¹ã«éèŠãªã®ããæ€èšŒæ¡ä»¶ãå
ã«æ±ºããããšã§ãã æ€èšŒã«é¢ãããã¢ã§ã¯ãå®è£
åã« FixtureãInvariantãProbe ãæ±ºããããšã匷調ãããŠããŸããã é
ç® æå³ Fixture æ€èšŒæã«åçŸããç¶æ
Invariant åžžã«æãç«ã£ãŠããŠã»ããæ§è³ª Probe æ€èšŒæã«èŠ³æž¬ãããã€ã³ã ããšãã°To Doã¢ããªãªãããããªããŸãã Fixture Invariant Probe å®äºæžã¿ã®Todoã1ä»¶ãã å®äºç¶æ
ã®ããŒã¿ãšç»é¢è¡šç€ºãäžèŽããŠãã DOMäžã®ç¶æ
屿§ãåãæ¶ãç·ã®è¡šç€º éåžžã«é·ãããã¹ãã®Todoããã ã¬ã€ã¢ãŠãã厩ããªã 衚瀺é åãæãè¿ããã¹ã¯ããŒã« Todoã0ä»¶ ç©ºç¶æ
ã衚瀺ããã empty stateã®æèšã远å ãã¿ã³ã®è¡šç€º ãã®èãæ¹ããããšãClaudeã人éããäœããã£ãŠæ£ãããšå€æããã®ãããå
±æã§ããŸãã 2-1-3. Probeãå®è£
äžã§èŠ³æž¬ã§ããããã«ãã Fixture / Invariant / Probe ãæ±ºããŠããå®è£
äžã§ãã®ç¶æ
ã芳枬ã§ããªããã°æ€èšŒã¯ãã¥ãããªããŸãã ãã®ãã¢ã§ç¹åŸŽçã ã£ãã®ããã¢ããªã®ç¶æ
ãDOMã«ã¹ã¿ã³ãããæ¹æ³ã§ããããšãã°Todoãå®äºæžã¿ã§ããã°ãDOMã«æ¬¡ã®ãããªå±æ§ãåºããŸãã < li class = "todo-item todo-item--done" data -verified-done= "true" > oat milk </ li > æªå®äºã§ããã°ã data-verified-done="false" ã«ãªããŸãã ããã§èŠããã®ã¯ãå
éšç¶æ
ãšç»é¢è¡šç€ºã®äžèŽã§ãã data-verified-done="true" ã〠ç»é¢äžãå®äºç¶æ
ãšããŠè¡šç€ºãããŠãã Reactã®å
éšç¶æ
ãçŽæ¥èŠã«è¡ãæ¹æ³ããããŸãããå®è£
äŸåã«ãªãããããæ€èšŒã®ãã³ã«æ±ããé¢åã«ãªããŸããããã§ãæ€èšŒãããç¶æ
ãDOM屿§ãšããŠå€ã«åºããŠããããšã§ãClaudeãæ€èšŒã¹ã¯ãªããã確èªãããã芳枬ç¹ãäœããŸãã ã€ãŸãDOMã¹ã¿ã³ãã¯ãProbeãæç«ãããããã®ä»èŸŒã¿ã§ãã ããã«ãããå
éšç¶æ
ãšããŠã¯å®äºæžã¿ãªã®ã«ãç»é¢äžã§ã¯å®äºæžã¿ã«èŠããªãããšãã£ããºã¬ãæ€åºãããããªããŸããã¯ãŒã¯ã·ã§ããã§ããReactã®ã¡ã¢ãªäžã§ã¯Todoãå®äºæžã¿ãªã®ã«ãç»é¢ã«åãæ¶ãç·ãåºãªãã±ãŒã¹ãããã®èãæ¹ã§æ€åºããŠããŸããã 2-1-4. èªåãã¡ã®Planã§ã¯äœãæ®ãã ãããŸã§ã®å
容ãèªåãã¡ã®éçºã«èœãšããªããPlanã§ã¯æ¬¡ã®3ã€ãæ®ããŸãã ãã¡ã€ã« 察å¿ããèãæ¹ æžãããš spec.md ã€ã³ã¿ãã¥ãŒã§åºãã仿§ äœããã®ãäœããªããã®ãå¶çŽãæªæ±ºäºé
plan.md å®è£
ã®é²ãæ¹ åç
§ãã¹ãæ¢åå®è£
ã倿Žé åºãå®è£
æ¹é verification.md Fixture / Invariant / Probe / èŠ³æž¬ç¹ åçŸããç¶æ
ãå®ãã¹ãã«ãŒã«ã芳枬ãããã€ã³ããã³ãŒãäžã®èŠ³æž¬ç¹ verification.md ã«ã¯ãåãªãããã¹ããããã§çµãããããæ¬¡ã®åœ¢ã§æ®ããŸãã Fixture Invariant Probe å®è£
äžã®èŠ³æž¬ç¹ïŒè¿œå ïŒ å®äºæžã¿ã®Todoã1ä»¶ãã å®äºç¶æ
ã®ããŒã¿ãšç»é¢è¡šç€ºãäžèŽããŠãã DOMäžã®ç¶æ
屿§ãåãæ¶ãç·ã®è¡šç€º data-verified-done éåžžã«é·ãããã¹ãã®Todoããã ã¬ã€ã¢ãŠãã厩ããªã 衚瀺é åãæãè¿ããã¹ã¯ããŒã« Storybook / Playwright snapshot Todoã0ä»¶ ç©ºç¶æ
ã衚瀺ããã empty stateã®æèšã远å ãã¿ã³ã®è¡šç€º empty state selector Planã®ãŽãŒã«ã¯ãClaudeãå®è£
ã«å
¥ãåã«ã仿§å€æã»å®è£
å€æã»æ€èšŒå€æãåé¢ããŠãåŸãã远ãã圢ã«ããããšã§ããããã¥ã¡ã³ãã¯ããã®å€æãæ®ãããã®ææ®µãšããŠæ±ããŸãã 2-1-5. Bunã®å®è£
ã¬ã€ããäžè¬åãã ãRewriting Bun in Rustãã§ã¯ãClaudeã«BunãZigããRustãžæžãçŽãããçŽ11æ¥ã§å·šå€§ãªPRãããŒãžããäºäŸã玹ä»ãããŠããŸããã ãã®äºäŸã§åèã«ãªãã®ã¯ãå®è£
ã«å
¥ãåã«ãè€æ°ã®Claudeãåãå€æåºæºã§åããããã«ãäºåã«ã«ãŒã«ãäœã£ãŠããç¹ã§ãã Bunã§ã¯ãæåã«ClaudeãšçŽ3æé察話ããZigã®æžãæ¹ãRustã§ã¯ã©ã衚çŸããããæŽçããŸããããã®çµæãããŒãã£ã³ã°ã¬ã€ããšããŠãŸãšãã以åŸã®Claudeã€ã³ã¹ã¿ã³ã¹ãå¿
ãåç
§ããè³æã«ããŠããŸããããã«ãBunã³ãŒãããŒã¹å
ã®æ§é äœããã£ãŒã«ãã調æ»ããã©ã€ãã¿ã€ã ã«é¢ããæ
å ±ãå
±éè³æãšããŠäœ¿ã£ãŠããŸããã ãZigã®ãã¿ãŒã³ãRustã«ãããã³ã°ããããšèšããšå°ãåããã«ããã§ãããèŠããã«ããã¯ å€æã«ãŒã«é ã§ãã Bunã®äŸ - Zigã®ãã®æžãæ¹ã¯ãRustã§ã¯ããæžã - ã¡ã¢ãªç®¡çã¯ãã®æ¹éã«ãã - crateåå²ã¯ãã®èãæ¹ã«ãã - ã©ã€ãã¿ã€ã ãè€éãªç®æã¯ãã®è³æãåç
§ãã ãããèªåãã¡ã®éçºã«çœ®ãæãããšã次ã®ããã«ãªããŸãã èªåãã¡ã®äŸ - å€ãAPIåŒã³åºãã¯ãæ°ããclientã«çœ®ãæãã - ç¬èªUIã¯ãdesign system componentã«å¯ãã - å€ãhooksã¯ãæ°ããhooksã«çµ±äžãã - DBæŽæ°ã¯ããã®migrationæ¹éã«åŸã - ãšã©ãŒãã³ããªã³ã°ã¯ããã®åœ¢åŒã«æãã æ®æ®µã®éçºã§ã¯ãããã implementation-guide.md ãšããŠæ±ãã°ããããã§ãã 倿Žã®çš®é¡ äœããã® å°ããªä¿®æ£ spec.md / plan.md / verification.md è€æ°ç®æã«åãæ¹éãé©çšããå€æŽ implementation-guide.md ã远å è€æ°ã®Claudeã䞊åã«åããå€æŽ implementation-guide.md ãã»ãŒå¿
é ã«ãã è€æ°ã®Claudeã䞊åã«åããå Žåãå
šå¡ãåãå€æåºæºãæã£ãŠããªããšããã¡ã€ã«ããšã«å®è£
ã¹ã¿ã€ã«ãã°ãã€ããŸãã implementation-guide.md ã¯ããã®ã°ãã€ããæããããã®å
±éã«ãŒã«ã§ãã ã³ã©ã ïŒHTMLãããã¿ã€ãã¯ãããã¿ã€ãéçºã§äœ¿ãã ã¯ãŒã¯ã·ã§ããã§ã¯ãPlanãã§ããåŸã«HTMLãããã¿ã€ããäœãæ¹æ³ã玹ä»ãããŠããŸããã èæ¯ã«ããã®ã¯ãAnthropicã® âDemos, not memosâ ãšããèãæ¹ã§ããMarkdownã®ä»æ§æžã¯Claudeã«ã¯èªã¿ãããäžæ¹ã§ã人éãçŽæçã«å€æããã«ã¯åŒ±ãã人éã¯ãæåã ãã§ä»æ§ãèªããããè§Šãããã®ãèŠãã»ããããããéããããã®æ¹åæ§ã¯å¥œãããšåå¿ãããããããã§ãClaudeã«HTMLã§è»œéãªãããã¿ã€ããäœãããè§Šããªããæ¹åæ§ãåºããããšããæµãã§ãã èªåã§ãããåãå
¥ãããªã次ã®ãããªæãããããšèããŠããŸãã åææ¢çŽ¢ - ãšã³ãžãã¢ãClaudeãšHTMLãããã¿ã€ããäœã - æäœéè§Šããç¶æ
ã«ããŠå
¬éãã - ãŠãŒã¶ãŒãåžå Žã®åå¿ãèŠã ãã©ãã·ã¥ã¢ãã - åå¿ãè¯ããã°ãFigmaã§ãã¶ã€ããŒã«è©³çްãè©°ããŠããã - ãã¶ã€ã³ã·ã¹ãã ã«èŒãã - æ¬æ Œçã«ç£šã ãã®é²ãæ¹ã¯ãä»åŸå¢ããŠãããšæããŸãã 2-2. ImplementationïŒãµããšãŒãžã§ã³ãã«å®è£
ãåæ
ãã倱æãåé
åžãã Planãã§ããããå®è£
ã«å
¥ããŸãã ããçšåºŠã®èŠæš¡ã®ã¿ã¹ã¯ã§ã¯ãè€æ°ã®ãµããšãŒãžã§ã³ãã«åæ
ãããŠäžŠåã«é²ããããšãå¢ããŠããŠãããšæããŸãã ããã§åèã«ãªãã®ããBunã®å®è£
æ¹æ³ã§ãã Bunã®äºäŸã§ã¯ã䞊åå®è¡æã®å¶åŸ¡ãéèŠã§ãããéãæäœãç«¶åããããæäœãåãšãŒãžã§ã³ãã«ä»»ãããã«ããªãããã«ããŠããŸãããè€æ°ã®Claudeãããããbuildãtestãgitæäœãå®è¡ãããšãåã確èªãéè€ããŠè¡ã£ãããåãworktreeå
ã§äºãã«å¹²æžããããå
šäœã®é²è¡ãé
ãããŠããŸãããã§ãã ãã®ãããbuild / test / gitæäœã®ãããªéãåŠçã¯ãã¡ã€ã³åŽã®ã¯ãŒã¯ãããŒã§ç®¡çããŸãããµããšãŒãžã§ã³ãã¯å®è£
ãä¿®æ£ã«éäžããã¡ã€ã³ãšãŒãžã§ã³ããçµæãéçŽããŠã倱æãã°ãåé¡ããæ
åœãããµããšãŒãžã§ã³ããžåé
åžããŸãã ãã®ã«ãŒãã§ã¯ã圹å²ã倧ãã3ã€ã«åããŸãã åœ¹å² æ
ãããš Main Agent spec.md / plan.md / verification.md ãèªã¿ãäœæ¥ãåå²ãããå®è£
çµæãéçŽããbuild / test / lint / typecheck ããŸãšããŠå®è¡ããã倱æãã°ãåé¡ããå¿
èŠãªãµããšãŒãžã§ã³ããžåé
åžããã Sub Agents å²ãåœãŠãããç¯å²ãå®è£
ãããå¿
èŠã«å¿ããŠãå®è£
æ
åœãšã¬ãã¥ãŒæ
åœãåãããã¬ãã¥ãŒæ
åœã¯ diff ã spec ãèªã¿ã仿§éåããã°ããã¹ãäžè¶³ãæ¢ãã Human 仿§å€æãèšèšå€æãæ¬çªãªã¹ã¯ã確èªãããç¹ã«ã¯ãªãã£ã«ã«ãªå€æŽã§ã¯ãAIã®æ€èšŒçµæã ãã§ãªãã³ãŒããåäœãèŠãã åãµããšãŒãžã§ã³ãã«ä»»ããç¯å²ã¯çµããŸããåãµããšãŒãžã§ã³ãããããã build ã test ãèµ°ãããåå¥ã«å€æãå§ãããšãéãåŠçãéè€ãã倱æãã°ã®æ±ããã°ãã€ããŸãã ãã®ãããæ€èšŒãšåé
åžã¯ Main Agent åŽã«éçŽããŸããMain Agent ã倱æãã°ãèŠãŠã次ã«èª°ãžæ»ããã倿ããŸãã 倱æã®çš®é¡ æ»ãå
build failure backend æ
åœã® Sub Agent UI regression frontend æ
åœã® Sub Agent test failure test æ
åœããŸãã¯è©²åœå®è£
æ
åœã® Sub Agent migration error DB æ
åœã® Sub Agent spec ãšã®ãºã¬ å®è£
æ
åœã® Sub Agent 暪æçãªèšèšãã¹ Main Agent ã plan ãèŠçŽã ãã®ã«ãŒãã®æ¬è³ªã¯ã æ€èšŒçµæã次ã®ã¿ã¹ã¯åé
ã®å
¥åã«ãã ããšã§ãã倱æãæ€åºããããåå ããšã«æ
åœãžæ»ããŸããããã«åã倱æãç¹°ãè¿ããããªããããã³ãããã«ãŒã«ãverificationãimplementation-guide åŽã«æ»ããŠãçæããã»ã¹èªäœãçŽããŸãã 3. ã¬ãã¥ãŒã»ããŒãžãã§ãŒãº ã¬ãã¥ãŒã»ããŒãžãã§ãŒãºã§éèŠãªã®ã¯ãæ€èšŒçµæã人éã倿ãããã圢ã§èŠããããšã§ãã 3-1. PRã§ã¯æ€èšŒçµæã蚌æ ãšããŠèŠãã PRã«ã¯ã倿޿ŠèŠã圱é¿ç¯å²ã ãã§ãªããåäœç¢ºèªãæ€èšŒçµæãèŒããŸãã ç¹ã«UIãã¯ãŒã¯ãããŒãé¢ãã倿Žã§ã¯ãã¹ã¯ãªãŒã³ã·ã§ãããåç»ãæå¹ã§ããå®éã«ã©ãåããããã©ã®ç¶æ
ã§ç¢ºèªããããèŠãããšãã¬ãã¥ã¢ãŒã¯å€æãããããªããŸãã PRã§ã¯ãæäœéæ¬¡ã®æ
å ±ãæããŸãã PRã«èŒãããã® ç®ç 倿޿ŠèŠ äœãå€ããããçãææ¡ãã 圱é¿ç¯å² ã©ã®ç»é¢ã»æ©èœã»APIã«åœ±é¿ããããèŠã æ€èšŒçµæ ã©ã®Fixture / Invariant / Probeã確èªããããèŠã ã¹ã¯ãªãŒã³ã·ã§ããã»åç» å®éã®åäœãUIã®åŽ©ãããªãããšãèŠã ã¬ãã¥ã¢ãŒã«èŠãŠã»ããç®æ 倿ãå¿
èŠãªç¹ãæç¢ºã«ãã 3-2. æ€èšŒããã·ã¥ããŒãã§ç¶æ
ãšçµæãèŠããåãã æ€èšŒããã·ã¥ããŒãã®ãã¢ã§ç¹åŸŽçã ã£ãã®ã¯ãæ€èšŒçšã®ããã·ã¥ããŒããäœã£ãŠããç¹ã§ãã éåžžã®ãã¹ããã°ã§ã¯ãã©ã®ãã¹ããéã£ããã¯åãããŸãããã ãUIãã¯ãŒã¯ãããŒã®æ€èšŒã§ã¯ãããã ãã ãšãã©ã®ç¶æ
ã§ãäœã確èªããã®ãããèŠãã«ãããããã§ãæ€èšŒããã·ã¥ããŒãäžã«ãã©ã®ç»é¢ã»ã³ã³ããŒãã³ãããã©ã®fixtureã§ãã©ã®invariantã«å¯ŸããŠæ€èšŒããã®ãã衚瀺ããŸãã ããšãã°ã次ã®ãããªæ
å ±ãèŠããç¶æ
ã§ãã èŠãããã® äŸ å¯Ÿè±¡ ç»é¢ãã³ã³ããŒãã³ããã¯ãŒã¯ãã㌠Fixture ç©ºç¶æ
ãé·ãããã¹ãã倧éããŒã¿ãæš©éãªããŠãŒã¶ãŒ Invariant ã¬ã€ã¢ãŠãã厩ããªããç¶æ
ãšè¡šç€ºãäžèŽãããæš©é倿äœãã§ããªã Probe DOM屿§ã衚瀺ããã¹ããAPIã¬ã¹ãã³ã¹ããšã©ãŒè¡šç€º çµæ pass / failãå¿
èŠã«å¿ããŠã¹ã¯ãªãŒã³ã·ã§ãããé²ç» ããã¯ããã¹ããå¢ãã話ãšããããã æ€èšŒçµæãã¬ãã¥ãŒã§ãã圢ã«å€æãã 話ã§ããClaudeã人éããåã蚌æ ãèŠãªãããäœããã£ãŠæ£ãããšå€æããã®ããã確èªã§ããŸãã 3-3. ã¬ãã¥ãŒã¯Claudeãšäººéã§èŠã芳ç¹ãåãã ã¬ãã¥ãŒã§ã¯ãClaudeãšäººéã®åœ¹å²ãåããŸãã èŠã人 äž»ã«èŠãããš Claude specãšã®ãºã¬ããã¹ãäžè¶³ããšããžã±ãŒã¹æŒããæš©éã»ã»ãã¥ãªãã£ã®åé¡ãæ¢åæåã®ç Žå£ Human å®éã®åäœã仿§è§£éãèšèšå€æããŠãŒã¶ãŒåœ±é¿ãæ¬çªãªã¹ã¯ Anthropicã®ãšã³ãžãã¢ãšã®1on1ã§ã¯ã瀟å
ã§ã¯ãã¹ãŠã®PRã«å¯ŸããŠClaudeã«ããèªåã³ãŒãã¬ãã¥ãŒãèµ°ãããã®åŸã«äººéã®ã¬ãã¥ã¢ãŒããã€ã¬ãã«ãªèгç¹ã§ç¢ºèªãããšèããŸããã ããŒã å
ã®éçšã€ã¡ãŒãžãšããŠã¯ãClaudeã现ããããžãã¯ãspecãšã®ãºã¬ãæŸãã人éãåäœãèšèšããªã¹ã¯ã倿ãã圢ã§ããã¯ãªãã£ã«ã«ãªå€æŽã§ã¯ã人éãã³ãŒããèªã¿ãŸãã 4. éçšã»æ¹åãã§ãŒãº ããŒãžåŸã芳å¯ãšæ¹åã¯ç¶ããŸãã ããããããŒãžåŸã«äœã芳å¯ããäœãHarnessã«æ»ããããClaude CodeãããŒã éçºã«çµã¿èŸŒãããã§éèŠã«ãªããŸãã 4-1. ããŒãžåŸãæ€èšŒãå¢ãã ãRewriting Bun in Rustãã§ã¯ããã¹ãã¹ã€ãŒããéããŠããŒãžããåŸããå質匷åãç¶ããŠããŸãããããŒãžåŸã«ãå¥ã®è§åºŠããå£ãæ¹ãæ¢ãæ€èšŒãå¢ãããŠããããšãå°è±¡çã§ããã ããšãã°ã次ã®ãããªæ€èšŒã§ãã - ã»ãã¥ãªãã£äžã®åé¡ãæ©æ¢°çã«æ¢ã - ã©ã³ãã ãªå
¥åã倧éã«äžããŠã¯ã©ãã·ã¥ãæ¢ã - ã¡ã¢ãªãªãŒã¯ã®ãããªå®è¡æã®åé¡ãæ¢ã - ãã¹ãã§ã¯éããªãã£ãã³ãŒãçµè·¯ãããã«èžã¿ã«è¡ã è¬æŒã§èªãããŠããææ³ã¯ããåãããšãä¿¡çšããããªããåãããšã®å®èšŒçãªæ ¹æ ãæã¡ããããšãããã®ã§ããã ããŒãžåŸã«æ€èšŒãå¢ããããšã¯ã次ã®éçºã«ãŒãã匷ãããããã®æè³ã§ãã 4-2. Evalsã§Harnessãè²ãŠã Evalsã¯ãå®è£
ã»ã¬ãã¥ãŒã»éçšãåããåŸã«ãHarnessãæ¹åããããã®ä»çµã¿ãšããŠå¹ããŠããŸãã ãEvals for taste: Hill-climbing a slide-generation agentãã§ã¯ãEvalsã¯ãæåãšã¯äœãããå®çŸ©ãããšãŒãžã§ã³ããæ¹åããŠãããã確èªããããã®ãã®ã ãšèª¬æãããŠããŸãããæé©å察象ã¯ããã³ããã ãã§ãªããã¢ãã«éžæãããŒã«èšèšããšãŒãžã§ã³ãã®ã¢ãŒããã¯ãã£ã«ãåºããããšãã話ããããŸããã ãTool, skill, or subagent? Decomposing an agent that outgrew its promptãã§ããEvalsãæ¹åã®çµ¶å¯Ÿçãªæéã«ããããšãæå€§ã®ã¡ãã»ãŒãžãšããŠèªãããŠããŸãããè©äŸ¡çµæãäžããããšã確èªã§ãããããããããŒã«ãSkillsããµããšãŒãžã§ã³ãæ§æãæ¹åã§ãããšãã話ã§ãã åé ã§è§Šãã1on1ã®è©±ã«æ»ããšãã¢ãã«ãè³¢ããªãã°ã以åã¯å¿
èŠã ã£ã现ããæç€ºãäžèŠã«ãªããå Žåã«ãã£ãŠã¯ãå€ãCLAUDE.mdãSkillsããã€ãºã«ãªããã ãããããAnthropic瀟å
ã§ã¯æ°ããã¢ãã«ãå®éè©äŸ¡ãããã®çµæã«åºã¥ããŠãCLAUDE.mdãå°ããããããSkillsããã€ãºã«ãªã£ãŠããªããã倿ããŠããããã§ãã Harnessã¯äœã£ãããšããEvalsã«ãã£ãŠè©äŸ¡ãããå¿
èŠãªãåããããã€ãŸããEvalsã¯Claudeã®åºåãæ¡ç¹ããªãããHarnessãè²ãŠãããã®ä»çµã¿ã§ãããã èªåãã¡ããEvalsã«ãã£ãŠãããã¯ãŸã å¹ããŠããããããããã€ãºã«ãªã£ãŠããªããããèŠãŠããå¿
èŠããããŸãã 4-3. 倱æãã©ãã«æ»ãã ããŒãžåŸã«èгå¯ãããã®ã¯ã次ã®HarnessæŽæ°ã®ææãšããŠèŠãŸãã 芳å¯ãããã® Harnessã«æ»ãå
æ¬çªã§åºããã° eval / verification ç¹°ãè¿ãåºãã¬ãã¥ãŒææ review skill / checklist 仿§ã®åãéã specã®äœãæ¹ ãã¹ãæŒã verifier / contract test äžèŠã«ãªã£ãæç€º CLAUDE.md / Skill ã®åé€åè£ Skillsã¯ãé¢é£ããã¿ã¹ã¯ã®ãšãã ãããŒããããæé æžãšããŠäœ¿ãã®ãæ¬è³ªã§ãããTool, skill, or subagent? Decomposing an agent that outgrew its promptãã§ããé·ãããã³ããããªã³ããã³ãã®Skillsã«åè§£ããå¿
èŠãªãšãã ãã³ã³ããã¹ããããŒãããèãæ¹ã玹ä»ãããŠããŸããã Harnessãè²ãŠãã»ã©ãäœèšãªãã®ãåãèŠç¹ãå¿
èŠã«ãªããŸãã å¢ãããã® åããã® tests / evals / verifiers / CI / monitoring å€ãCLAUDE.mdã®æç€º / ãã€ãºã«ãªã£ãSkill / èªæãããã«ãŒã« ãEvals for taste: Hill-climbing a slide-generation agentãã§ã¯ãevalã¹ã³ã¢ã飜åãããgraderèªäœãèŠçŽãã¹ãã ãšãã話ããããŸãããèŠãç®ã¯æããã«æ¹åããŠããã®ã«ã¹ã³ã¢ãäžãããªããªããè©äŸ¡åŽã®è§£å床ãè¶³ããªãå¯èœæ§ããããŸãããã®å Žåã¯ãgraderã®è©äŸ¡åºæºãå
·äœåãã䟡å€ããããŸãã Claudeã®åºåãšããããŠãè©äŸ¡ãã®ãã®ãè²ãŠãããã®ã«ãŒãããããšãHarnessã®æ¹åãæèŠé Œã¿ããè©äŸ¡é§åã«å€ãããŸãã 5. èªåãã¡ã®éçºã«èœãšããªã ãããŸã§ã®å
容ãå®åã«èœãšããªããæ¬¡ã®4段éã§å§ããã®ãããããã§ãã ãã§ãŒãº ããããš æ®ããã® Plan 仿§ãå®è£
æ¹éãæ€èšŒæ¡ä»¶ãåããŠæŽçãã spec.md / plan.md / verification.md Implementation Main Agent ãäœæ¥ãåå²ããSub Agents ãå®è£
ãããæ€èšŒçµæã¯ Main Agent ãåé¡ããŠåé
åžãã 倱æãã°ãä¿®æ£ã¿ã¹ã¯ Review / Merge PRã§ã¯æ€èšŒçµæãåäœã®èšŒæ ãèŠãããClaudeã¯è©³çްã人éã¯ä»æ§ã»èšèšã»ãªã¹ã¯ãèŠã æ€èšŒãã°ãã¹ã¯ãªãŒã³ã·ã§ãããã¬ãã¥ãŒçµæ Post-merge æ¬çªãã¬ãã¥ãŒã§åºã倱æãããã®å Žéãã«ããHarnessãžæ»ã evalãverificationãskillãchecklist ãã®ãããŒã§ã¯ãå€æåºæºãæ€èšŒå¯èœæ§ãã¬ãã¥ãŒå¯èœãªèšŒæ ãHarnessãžã®ãã£ãŒãããã¯ãæããããšã倧äºã§ãã anthropic-dev-loop ãã®æµãã¯åå©çšã§ããããã«ãSkillãšããŠãæŽçããŸãããClaude CodeãCodexã§åãæµãã䜿ããããšãã¯ããã®Skillãèªã¿èŸŒãŸããããšã§ãPlanãå®è£
åå²ãæ€èšŒãã¬ãã¥ãŒãHarnessæŽæ°ãŸã§ãäžé£ã®æé ãšããŠæ±ããŸãã https://github.com/nishimoto265/anthropic-dev-loop 6. ãããã« ä»åã¯ãCode w/ Claude Tokyo / Extended Tokyoã§ç޹ä»ãããŠããAnthropicã®éçºææ³ããèªåãã¡ã®éçºãããŒã«èœãšã蟌ããªãã©ããªãã®ããç§ãªãã®ç¥èŠã亀ããªããæŽçããŸããã Code w/ Claude Tokyo / Extended Tokyoã®äžã§ç¹ã«å°è±¡çã ã£ãã®ã¯ããã¯ã Evals ã§ãã ç§èªèº«ãè©äŸ¡é¢æ°ããããããã«åºã¥ããŠãšãŒãžã§ã³ããéçºãããŒãå°æ¥çã«ã¯èªåã§æ¹åãããŠããã®ã§ã¯ãªãããšèããŠããŸããããã®èãæ¹ã Evals ã«çŸããŠãããHarnessãè©äŸ¡ããå¿
èŠãªãã®ãæ®ããäžèŠãªãã®ãåã£ãŠããææ³ã¯ãä»åŸããã«éèŠã«ãªã£ãŠãããšæããŠããŸãã ä»åŸãAnthropicã®ãšã³ãžãã¢ã®ææ³ãåèã«ããªãããClaude Codeãåæã«ããéçºãããŒãèªåãã¡ãªãã«æ¹åããŠãããããšèããŠããŸãã
ã¯ããã« ããã«ã¡ã¯ã éçºæ¬éš éçº1éš ããªãã·ã¥ãªãµãŒãã§ããŒã¿ãšã³ãžãã¢ãããŠããåç°ã§ãã ä»åã¯ãDatabricksã®ãããŒãžããªããŒã¿åãèŸŒã¿æ©èœã§ããLakeflow Connectã䜿ã£ãŠãè€æ°ã®åºåãã©ãããã©ãŒã ããããŒã¿ãåã蟌ãã äºäŸã玹ä»ããŸãã æ³šæç¹ æ¬èšäºã§æ±ãLakeflow Connectã®ãããŒãžãã³ãã¯ã¿ã¯ãå·çæç¹ã§ããããããŒã¿çã®æ©èœã§ãã å©çšããŠããæ©èœãšãã®çµæã¯å·çæç¹ã®ãã®ã§ãã ãŸãã ãªãªãŒã¹ã¿ã€ãã®äžèЧ ã®ãšãããããŒã¿çã¯æ¬çªç°å¢ã§ã®å©çšãæšå¥šãããŠãããã仿§å€æŽã®å¯èœæ§ãããç¹ã«ã泚æãã ããã èæ¯ åºåéçšã®åæã«ã¯ãååºåãã©ãããã©ãŒã ã®ããŒã¿(ãã£ã³ããŒã³ãã€ã³ãµã€ããªã©)ãå¿
é ã§ãã ããããããŒã¿åºç€ã«åã蟌ãã«ã¯ããã©ãããã©ãŒã ããšã«åã蟌ã¿Jobãäœæããå¿
èŠããããŸãã ããããåã蟌ã¿Jobã®äœæã«ã¯ä»¥äžã®ãããªèŸãããããŸãã API仿§ã®èª¿æ»ãå®è£
èªèšŒæ
å ±ã®ç®¡ç APIã®ã¢ããããŒãè¿œåŸ ç¹ã«APIã®ã¢ããããŒãã«åãããåã蟌ã¿Jobã®è¿œåŸãªã©ã¯éœåºŠå·¥æ°ãçºçãããããéçšã«ãããè² æ
ãšãªããŸãã ããã§ãåã蟌ã¿ããããŒãžãã«ä»»ããããLakeflow Connectã®ãããŒãžãã³ãã¯ã¿ãæ¡çšããŸããã Lakeflow Connectãšã¯ Lakeflow Connectã¯ãDatabricksã®çµ±åããŒã¿ãšã³ãžãã¢ãªã³ã°æ©èœçŸ€Lakeflowã®åã蟌ã¿ã³ã³ããŒãã³ãã§ãã SaaSãããŒã¿ããŒã¹åãã®ãããŒãžãã³ãã¯ã¿ãªã©ãæäŸããåã蟌ã¿åŠçããµãŒããŒã¬ã¹ã§å®è¡ããŸããåã蟌ã¿å
ã®ããŒãã«ã¯Unity Catalogã§äžå
管çãããŸãã ãããŒãžã SaaS ã³ãã¯ã¿ ã³ãã¯ã¿ã«ã¯2çš®é¡ãããŸãã ãããŒãžãã³ãã¯ã¿ Salesforceãªã©ã®ã¢ããªãããŒã¿ããŒã¹åã Lakeflow Spark Declarative Pipelinesã®äžã«æ§ç¯ããããœãŒã¹åºæã®èªèšŒã»CDCïŒå¢ååã蟌ã¿ïŒã»ã¹ããŒãå±éã»èªåãªãã©ã€ãæäŸãã æšæºã³ãã¯ã¿ ã¯ã©ãŠãã¹ãã¬ãŒãžãã¡ãã»ãŒãžãã¹åãã®ã«ã¹ã¿ãã€ãºå¯èœãªã³ãã¯ã¿ ãããŒãžãã³ãã¯ã¿ã¯ãæ§ã
ãªSaaSã«å¯Ÿå¿ããã³ãã¯ã¿ãçšæãããŠãããä»åã¯Google AdsãMeta AdsãTikTok Adsã®ã³ãã¯ã¿ãå©çšããŸããã ã¢ãŒããã¯ã㣠SaaSç³»ã³ãã¯ã¿ã®åã蟌ã¿ã¯ã以äžã®ã·ã³ãã«ãªæ§æã§ãã Connection åãã©ãããã©ãŒã ãžã®èªèšŒæ
å ±ãä¿æããUnity Catalogã®ãªããžã§ã¯ã Ingestion pipeline æ¥ç¶ãéããŠããŒã¿ãåã蟌ã¿ãã¹ããªãŒãã³ã°ããŒãã«ãžæžã蟌ã Destination Unity Catalogäžã®ã¹ããªãŒãã³ã°ããŒãã« ãã€ãã©ã€ã³ã®äœæ ãã€ãã©ã€ã³ã¯UIã»Databricks Asset Bundlesã»REST APIãªã©ããäœæã§ããŸãããä»åã¯Pipelines APIïŒ /api/2.0/pipelines ïŒãããŒãããã¯ããåŒã³åºããŠäœæããŸããã ãã€ãã©ã€ã³å®çŸ©ãçšæããããšã§ã容æã«åã蟌ã¿ãã€ãã©ã€ã³ãäœæããããšãã§ããŸãã ãã€ãã©ã€ã³å®çŸ©ã®äŸ(Meta Ads) 以äžã®Jsonã¯Meta Adsã®ãã€ãã©ã€ã³å®çŸ©ã®äŸã§ãã { " name ": " <pipeline-name> ", " catalog ": " <catalog-name-for-event-logs> ", " schema ": " <schema-name-for-event-logs> ", " ingestion_definition ": { " connection_name ": " <connection-name> ", " objects ": [ { " table ": { " source_schema ": " act_<account-id> ", " source_table ": " campaigns ", -- ãã£ã³ããŒã³ã®åã蟌㿠" destination_catalog ": " <save-to-catalog> ", " destination_schema ": " <save-to-schema> ", " table_configuration ": { " scd_type ": " SCD_TYPE_1 " } } } , { " table ": { " source_schema ": " act_<account-id> ", " source_table ": " ad_insights ", -- ã€ã³ãµã€ãã®åã蟌㿠" destination_catalog ": " <save-to-catalog> ", " destination_schema ": " <save-to-schema> ", " table_configuration ": { " scd_type ": " SCD_TYPE_1 ", " metamarketing_parameters ": { " level ": " campaign ", " start_date ": " 2026-01-01 ", " time_increment ": " 1 " } } } } ] } } table_configuration ã§ã¯åãèŸŒã¿æã®æåãæå®ããŸãã scd_type ã§å±¥æŽã®ä¿ææ¹åŒïŒ SCD_TYPE_1 ã¯ææ°ã®ç¶æ
ã®ã¿ãä¿æïŒãã metamarketing_parameters ã§ã¬ããŒãã®éèšã¬ãã«ïŒ level ïŒãç²åºŠïŒ time_increment ïŒãªã©ã³ãã¯ã¿åºæã®ãã©ã¡ãŒã¿ãæå®ããŸãã UIäžã§ã®ç®¡ç äœæããLakeflow Connectã®ãã€ãã©ã€ã³ã¯ãJobs & Pipelinesãã確èªã§ããŸãã åã蟌ã¿ã¯æå®ããããŒãã«åäœã§è¡ããã倱æããããŒãã«ãç¹å®ã®ããŒãã«ã®ã¿ãåå®è¡ããããšãå¯èœã§ãã çŸæç¹ã§ã®äœ¿çšæ çŸåšã3ã€ã®ã³ãã¯ã¿ãå©çšããŠããŸãããæçµçã«Meta Adsã®ã³ãã¯ã¿ã¯äœ¿çšã忢ããŸããã Meta Adsã³ãã¯ã¿ã§ã¯ãããŒã¿éã®å€ãã¢ã«ãŠã³ãã§ã¯åã蟌ã¿ãå®å®ããªãã±ãŒã¹ããããŸããã ç§ãã¡ã®ç°å¢ã§ã¯äž»ã« ad_insights ã ad_sets ã®åã蟌ã¿ã§ã以äžã®ãšã©ãŒãçºçããŸããã The Meta API failed since the amount of data requested exceeds the limit the Meta servers can process. ååŸããã«ã©ã ãæéãçµã察å¿ãå ããŸããã解決ãããæçµçã«ã¯èªåå®è£
ã«åãæ¿ããéžæãããŸããã Tokenã®æŽæ°ã®å®è£
ããã¢ã«ãŠã³ããååŸãããé
ç®ãå¢ãããã³ã®å¯Ÿå¿ãªã©ããããŒãžãã«ä»»ããããšãã§ããªãèŸãããããã³ãã¯ã¿ã®ä»åŸã®ã¢ããããŒãã«æåŸ
ãããã§ãã ãŸãšã Lakeflow Connectã«ãããGoogle Ads / TikTok Adsã®åºåããŒã¿åã蟌ã¿ã¯ãAPIå®è£
ãªãã«ãã€ãã©ã€ã³å®çŸ©ã ãã§äœæã§ããŸããã è€æ°ã¢ã«ãŠã³ãã»è€æ°ããŒãã«ã®å®çŸ©ãspecãšããŠã³ãŒãã§ç®¡çã§ããå¢ååã蟌ã¿ãèšå®ã ãã§å®çŸã§ããŠããŸãã äžæ¹ã§Meta Adsã®ããã«ãããŒã¿éãã³ãã¯ã¿ã®å¶çŽããçŸæç¹ã§ã¯ãããŒãžãã«ä»»ãããããèªåå®è£
ã§è£ã£ãã±ãŒã¹ããããŸããã ããã§ããåã蟌ã¿ã®äœã蟌ã¿ã®å€§éšåããè§£æŸãããããŒã¿æŽ»çšãã®ãã®ã«éäžã§ããããã«ãªã£ãã¡ãªããã¯å€§ãããšæããŠããŸããããŒã¿çããã®å¶çŽã¯ä»åŸã®ã¢ããããŒãã§ã®æ¹åã«æåŸ
ãããã§ãã
ç®æ¬¡ ã¯ããã« èæ¯ãšèª²é¡ æ¹åŒã®æ€èš å
šäœã¢ãŒããã¯ã㣠èªèšŒã»èªå¯ãã㌠ã¯ã©ã€ã¢ã³ããèªå¯ãµãŒããŒãçºèŠãããŸã§ ããŒã¯ã³ã®ååŸ ã²ãŒããŠã§ã€ã§ã® JWT æ€èšŒ ã²ãŒããŠã§ã€ã®å®è£
ãã€ã³ã èšå®ãã¡ã€ã«ã«ããããã¯ãšã³ãç®¡ç æ€èšŒæžã¿ãŠãŒã¶ãŒæ
å ±ã®äŒæ¬ãšãªãããŸã鲿¢ èµ·åæã® OIDC Discovery ã«ãã fail-fast ã¢ãã¯èªå¯ãµãŒããŒã«ããããŒã«ã«éçº ã€ã³ãã©æ§æ 瀟å
ã§ã®æŽ»çšäºäŸ ä»åŸã®èª²é¡ ãããã« ã¯ããã« ããã«ã¡ã¯ã éçºæ¬éšéçº3éšãã¢ããéçºéšæå±ã®åºåž( @ktanonymous )ã§ãã ãšããªãŒã®éçºçµç¹ã§ã¯ãæ¥åžžæ¥åããé¢ããŠæ°ããæè¡ãã¢ã€ãã¢ã«ææŠãããææŠweekããšããåãçµã¿ã宿çã«éå¬ããŠããŸãã å
æ¥è¡ãããææŠweekã®äžã§ãç§ãã¡ã®ããŒã ã¯å
šç€Ÿå
±éã§å©çšã§ãããªã¢ãŒã MCP ( Model Context Protocol ) ãµãŒããŒåãã®èªèšŒã»èªå¯ã²ãŒããŠã§ã€ãèšèšã»å®è£
ããŸããã æ¬èšäºã§ã¯ããã®å
šäœã¢ãŒããã¯ãã£ãèªèšŒã»èªå¯ãããŒãå®è£
ã®ãã€ã³ããªã©ã玹ä»ããããšæããŸãã â» ææŠweekã®è©³çްã«ã€ããŠã¯éå»ã®èšäºã§ç޹ä»ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ä»¥äžãã芧ãã ããã tech.every.tv èæ¯ãšèª²é¡ åŒç€Ÿã§ã¯éãšã³ãžãã¢è·ã«ã Claude ãé
åžãããè·çš®ãåãã AI 掻çšãçãã«ãªã£ãŠããŠããŸãã æ¥åã®äžã§ Claude ãå©çšããã«ãããã瀟å
æ
å ±ã®ååŸã®ããã«ç€Ÿå
API ãžæ¥ç¶ããããšããéèŠãé«ãŸã£ãŠããŠãããšæããŸããã ä»åŸããã®ææ®µãšããŠåããŒã ããªã¢ãŒã MCP ãµãŒããŒãç«ãŠãã±ãŒã¹ãå¢ããŠãããšèããããŸãã ãªã¢ãŒã MCP ãµãŒããŒã¯ã€ã³ã¿ãŒãããçµç±ã§ã¢ã¯ã»ã¹ãããããã瀟å€ã®äººéãå©çšã§ããªãããã«èªèšŒã»èªå¯ãèæ
®ããå¿
èŠããããŸããã äžæ¹ã§ãMCP ãµãŒããŒãå®è£
ãããã³ã«åããŒã ãèªèšŒã»èªå¯ãèšèšã»å®è£
ããã®ã¯ã³ã¹ãé¢ã§ãå¹çé¢ã§ãé¿ããããã®ã§ãã ããã§ãå
±éã§å©çšã§ããèªèšŒã»èªå¯åºç€ãäœããåããŒã ã® MCP ãµãŒããŒã¯ããããã®ããŒã«ã®å®è£
ã«å°å¿µã§ããããã«ããããšãç®æããŸããã ä»åæ€èšããèŠä»¶ã¯ä»¥äžã®éãã§ãã Claude (Web / Desktop / Code) ãªã©ã®åçš® MCP ã¯ã©ã€ã¢ã³ãããã瀟å
ã®ãªã¢ãŒã MCP ãµãŒããŒã®ããŒã«ãå©çšã§ãã åŒç€Ÿã® Google Workspace ã¢ã«ãŠã³ãã§ãã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒã®ã¿ãããŒã«ãå©çšã§ãã åããŒã ãæ°ãã MCP ãµãŒããŒã远å ãããšããèªèšŒã»èªå¯ã®å®è£
ãäžèŠã«ãã æ¹åŒã®æ€èš èªèšŒã»èªå¯ã®å
±éåã«ãããã倧ããåããŠä»¥äž 3 ã€ã®ã¢ãããŒããæ€èšããŸããã ã©ã€ãã©ãªæ¹åŒ: èªèšŒã»èªå¯åŠçãå
±éã©ã€ãã©ãªãšããŠå®è£
ããå MCP ãµãŒããŒã«çµã¿èŸŒã ãµãŒããŒæ¹åŒ: èªå¯ãµãŒããŒãç«ãŠãå MCP ãµãŒããŒãããŒã¯ã³ãåãåãããããšã§æ€èšŒãã ã²ãŒããŠã§ã€æ¹åŒ: ã²ãŒããŠã§ã€ããªã¯ãšã¹ããäžæ¬ã§åããŠèªèšŒã»èªå¯ãè¡ããæ€èšŒæžã¿ã®ãªã¯ãšã¹ãã ããåŸæ®µã® MCP ãµãŒããŒãžè»¢éãã 3 ã€ã®å
ãã©ã€ãã©ãªæ¹åŒã¯ MCP ãµãŒããŒã®å®è£
èšèªããšã«ã©ã€ãã©ãªãçšæããå¿
èŠãããã ãµãŒããŒæ¹åŒã¯ã責åããåé¢ã§ãããã®ã®ãå MCP ãµãŒããŒåŽã«èªå¯ãµãŒããŒãžããŒã¯ã³ãåãåãããå®è£
ãå¿
èŠã«ãªããŸãã äžæ¹ãã²ãŒããŠã§ã€æ¹åŒã§ããã°ãèªèšŒã»èªå¯ãã²ãŒããŠã§ã€ã«äžå
åã§ããåŸæ®µã® MCP ãµãŒããŒã¯å®è£
èšèªãåããèªèšŒã»èªå¯ãæèããã«æžã¿ãŸãã è¿å¹Žã® MCP ã²ãŒããŠã§ã€è£œåã®èšèšãšãæ¹åæ§ãè¿ãããšãããä»åã¯ã²ãŒããŠã§ã€æ¹åŒãæ¡çšããŸããã ãªãã mcp-context-forge ã agentgateway ãšãã£ãæ¢åã® OSS MCP ã²ãŒããŠã§ã€ã調æ»ããŸãããã ä»åã®èŠä»¶ã«å¯ŸããŠæ©èœã»ããªã¥ãŒã ã倧ããããããæ¡çšãèŠéããå¿
èŠæå°éã®ã²ãŒããŠã§ã€ãå®è£
ããããšã«ããŸããã å
šäœã¢ãŒããã¯ã㣠å
šäœã®ã¢ãŒããã¯ãã£ã¯ä»¥äžã®éãã§ãã ã¢ãŒããã¯ãã£æŠèŠ ä»åå®è£
ããã²ãŒããŠã§ã€ã¯å€§ãã 4 ã€ã®èŠçŽ ããæ§æãããŠããŸãã MCP ã¯ã©ã€ã¢ã³ã: Claude Code / Claude Desktop ãªã©ãOAuth 2.0 ã®ãããªãã¯ã¯ã©ã€ã¢ã³ãã®ç«ã¡äœçœ® ã²ãŒããŠã§ã€: ECS Fargate äžã§çšŒåãã Go (Echo) 補ã®ãªããŒã¹ãããã·ãJWT ã®æ€èšŒãšåŸæ®µ MCP ãµãŒããŒãžã®ã«ãŒãã£ã³ã°ãæ
ããã¯ã©ã€ã¢ã³ãããçŽæ¥èŠããå¯äžã® MCP ãµãŒããŒã Amazon Cognito: èªå¯ãµãŒããŒå
Œ IdPãGoogle Workspace ã¢ã«ãŠã³ããžã®ãã§ãã¬ãŒã·ã§ã³ãè¡ããã¢ã¯ã»ã¹ããŒã¯ã³ (JWT) ãçºè¡ãã MCP ãµãŒããŒçŸ€: åããŒã ãå®è£
ãããªã¢ãŒã MCP ãµãŒããŒãprivate subnet ã«é
眮ããã²ãŒããŠã§ã€çµç±ã§ã®ã¿ã¢ã¯ã»ã¹å¯èœã§ãããã¯ã©ã€ã¢ã³ãããçŽæ¥çã«ã¯èŠããŠããªã æèããç¹ãšããŠãJWT ãæ€èšŒããã®ã¯ã²ãŒããŠã§ã€ã ããšããç¹ããããŸãã åŸæ®µã® MCP ãµãŒããŒã¯ JWT æ€èšŒãå®è£
ãããã²ãŒããŠã§ã€ã泚å
¥ããæ€èšŒæžã¿ã®ãŠãŒã¶ãŒæ
å ± (åŸè¿°ã® X-Auth-* ããããŒ) ãä¿¡é ŒããŸãã ãã®åæãæç«ããããããMCP ãµãŒããŒã¯ã€ã³ã¿ãŒãããã«çŽæ¥å
¬éãããã²ãŒããŠã§ã€ããã®ã¿å°éã§ãããããã¯ãŒã¯æ§æãšããŸããã èªèšŒã»èªå¯ãã㌠MCP ã®èªå¯ã¯ MCP Authorization 仿§ ã§å®çŸ©ãããŠããã OAuth 2.1 ãããŒã¹ã«ãPRM (RFC 9728) ãªã©ã®ä»æ§ãçµã¿åãããŠæ§æãããŠããŸãã ä»åã®ã²ãŒããŠã§ã€ããã®ä»æ§ã«æ²¿ã£ãŠå®è£
ããŠããŸãã å
·äœçã«ã¯ä»¥äžã®ãããªãããŒãšãªã£ãŠããŸãã èªèšŒã»èªå¯ãã㌠ã¯ã©ã€ã¢ã³ããèªå¯ãµãŒããŒãçºèŠãããŸã§ MCP ã¯ã©ã€ã¢ã³ãã«ã¯ MCP ãµãŒããŒã®æ¥ç¶å
ãç»é²ãããããèªå¯ãµãŒããŒãã©ãã«ããããäºãç¥ãããšã¯ã§ããŸããã ã¯ã©ã€ã¢ã³ããããŒã¯ã³ãªãã§ã¢ã¯ã»ã¹ãããšãã²ãŒããŠã§ã€ã¯ 401 Unauthorized ãè¿ãã WWW-Authenticate ããããŒã® resource_metadata ãã©ã¡ãŒã¿ã§ Protected Resource Metadata (PRM) ã® URL ãéç¥ããŸãã HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata="https://mcp-gateway.example.com/.well-known/oauth-protected-resource" PRM ã¯ãä¿è·ããããªãœãŒã¹ (ä»åã¯ã²ãŒããŠã§ã€) ããã©ã®èªå¯ãµãŒããŒã«ä¿è·ãããŠãããããã©ã®ã¹ã³ãŒãããµããŒããããããšãã£ãèªèº«ã®ã¡ã¿ããŒã¿ãå
¬éããããã®ä»æ§ã§ãã ã¯ã©ã€ã¢ã³ãã¯ãã®ã¡ã¿ããŒã¿ãåç
§ããããšã§ãããŒã¯ã³ã®ååŸå
ãæ©æ¢°çã«çºèŠã§ããŸãã ã¯ã©ã€ã¢ã³ãããã® URL ã«ã¢ã¯ã»ã¹ãããšãPRM ã®ä»æ§ã§å®çŸ©ããã以äžã®ãã㪠JSON ãè¿ããŸãã { " resource ": " https://mcp-gateway.example.com/ ", " authorization_servers ": [ " https://cognito-idp.ap-northeast-1.amazonaws.com/<user-pool-id> " ] , " scopes_supported ": [ " openid ", " email ", " profile " ] , " bearer_methods_supported ": [ " header " ] } ã¯ã©ã€ã¢ã³ã㯠authorization_servers ããèªå¯ãµãŒã㌠(Cognito) ãçºèŠãã ããã« Cognito ã® Authorization Server Metadata ( /.well-known/openid-configuration ) ãååŸããŠã èªå¯ãšã³ããã€ã³ããããŒã¯ã³ãšã³ããã€ã³ããææ¡ããŸãã Authorization Server Metadata ã¯ãèªå¯ãµãŒããŒããã©ãã§èªå¯ãªã¯ãšã¹ããããŒã¯ã³çºè¡ãåãä»ãããããã©ã®æ©èœããµããŒããããããšãã£ãèªèº«ã®èšå®æ
å ±ãå
¬éããããã®ä»æ§ã§ãã Cognito ã®å Žåã以äžã®ãã㪠JSON ãè¿ããŸã (äž»èŠãªãã£ãŒã«ãã®ã¿æç²)ã { " issuer ": " https://cognito-idp.ap-northeast-1.amazonaws.com/<user-pool-id> ", " authorization_endpoint ": " https://<domain>.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize ", " token_endpoint ": " https://<domain>.auth.ap-northeast-1.amazoncognito.com/oauth2/token ", " jwks_uri ": " https://cognito-idp.ap-northeast-1.amazonaws.com/<user-pool-id>/.well-known/jwks.json ", " scopes_supported ": [ " openid ", " email ", " phone ", " profile " ] } ãã® 2 段éã®ã¡ã¿ããŒã¿ååŸã«ãããã¯ã©ã€ã¢ã³ãåŽã«èªå¯ãµãŒããŒã®æ
å ±ãäºåèšå®ããããšãªããOAuth ãããŒãéå§ããããšãã§ããŸãã ããŒã¯ã³ã®ååŸ èªå¯ãµãŒããŒã®çºèŠåŸã¯ãéåžžã® OAuth 2.0 Authorization Code ãã㌠(PKCE ä»ã) ã§ãã ã¯ã©ã€ã¢ã³ãããã©ãŠã¶ãéã㊠Cognito ã® Hosted UI ã«é·ç§»ããCognito 㯠Google ãžãã§ãã¬ãŒã·ã§ã³ããŸãã ãŠãŒã¶ãŒãèªç€Ÿã® Google Workspace ã¢ã«ãŠã³ãã§ãã°ã€ã³ãããšãã¯ã©ã€ã¢ã³ãã¯ã¢ã¯ã»ã¹ããŒã¯ã³ (JWT) ãååŸããŸãã Cognito åŽã®èšå®ã®ãã€ã³ãã¯ä»¥äžã®éãã§ãã ãããªãã¯ã¯ã©ã€ã¢ã³ã + PKCE å¿
é : Claude ãªã©ã® MCP ã¯ã©ã€ã¢ã³ãã¯å©çšè
ã®æå
ã§åããããã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããä¿æã§ããŸãããããã§ãããªãã¯ã¯ã©ã€ã¢ã³ããšããŠç»é²ããPKCE ãå©çšããããã«ããŸãã ã¢ããªã¯ã©ã€ã¢ã³ãã®äºåç»é²: Cognito ã§ã¯æ¥ç¶å
ã®ã¢ããªã±ãŒã·ã§ã³ããã¢ããªã¯ã©ã€ã¢ã³ãããšããŠç»é²ããŸããMCP ã¯ã©ã€ã¢ã³ãããšã«ãŠãŒã¶ãŒããŒã«ãç»é²ãã察å¿ããã³ãŒã«ãã㯠URL (èªå¯ã³ãŒãã®è¿åŽå
) ãèšå®ããããšã§äºåã«å©çšããã¯ã©ã€ã¢ã³ããç»é²ããŸãã ãªããMCP Authorization 仿§ã§ã¯ãã¯ã©ã€ã¢ã³ãã®ç»é²æ¹æ³ãšããŠäºåç»é²ã®ã»ãã«ã Client ID Metadata Documents (URL ã client_id ãšããŠæ±ããèªå¯ãµãŒããŒããã® URL ããã¯ã©ã€ã¢ã³ãæ
å ±ãååŸããæ¹åŒ) ã Dynamic Client Registration (RFC 7591) ã«ããåçç»é²ãå®çŸ©ãããŠããŸãã ä»åã¯ãCognito ããããã«å¯Ÿå¿ããŠããªãããšãšã瀟å
å©çšã§ã¯ã¯ã©ã€ã¢ã³ãã®çš®é¡ãéããã (åºæ¬çã« Claude ç³»ã®ã¿) ããšããã仿§ã§ãæ£èŠã®éžæè¢ãšãããŠããäºåç»é²å¶ãæ¡çšããŸããã ãŸããCognito ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã«ã¯æšæºã§ã¯ email ã¯ã¬ãŒã ãå«ãŸããªãããã Pre Token Generation Lambda ããªã¬ãŒ ãå©çšããŠãããŒã¯ã³çææã« email ã¯ã¬ãŒã ãæ³šå
¥ããŠããŸãã ããã«ãããåŸæ®µã® MCP ãµãŒããŒãã誰ããã®ãªã¯ãšã¹ããããã¡ãŒã«ã¢ãã¬ã¹ã§å€å®ã§ããããã«ãªããŸãã ã²ãŒããŠã§ã€ã§ã® JWT æ€èšŒ ã²ãŒããŠã§ã€ã¯ããªã¯ãšã¹ãããšã« JWT ãæ€èšŒããŸãã çœ²åæ€èšŒã«ã¯ github.com/coreos/go-oidc (v3.18.0) ãå©çšãã Cognito ã® JWKS (JSON Web Key Set) ã¯ååååŸåŸã«ãã£ãã·ã¥ãããŸãã æ€èšŒé
ç®ã¯ä»¥äžã®éãã§ã眲åã»æå¹æéãšãã£ãåºæ¬çãªæ€èšŒã«å ããŠãã¯ã¬ãŒã ããŒã¹ã®ãã§ãã¯ãéããŠããŸãã æ€èšŒé
ç® å
容 å€±ææ çœ²å / iss / exp JWKS ã«ããçœ²åæ€èšŒãçºè¡è
ã»æå¹æéã®ç¢ºèª 401 token_use "access" ã§ããããš (ID ããŒã¯ã³ã®èª€çšé²æ¢) 401 client_id äºåç»é²ããã¢ããªã¯ã©ã€ã¢ã³ãã®èš±å¯ãªã¹ãã«å«ãŸããããš 403 email ãã¡ã€ã³ ãšããªãŒãã¡ã€ã³ã§ããããš 403 scope å¿
é ã¹ã³ãŒããæºããããš (èšå®æã®ã¿) 403 token_use ã®æ€èšŒã¯ Cognito åºæã®ãã€ã³ãã§ãã Cognito 㯠ID ããŒã¯ã³çšãšã¢ã¯ã»ã¹ããŒã¯ã³çšã«ããããå¥ã®çœ²åéµãæã¡ãŸãã 1 ãäž¡æ¹ã®å
¬ééµãåäžã® JWKS ã§å
¬éãããŸãã ãã®ãããJWKS å
ã®ããããã®éµã§çœ²åãæ€èšŒã§ããããšã ããæ¡ä»¶ã«ãããšãID ããŒã¯ã³ãæ€èšŒãééããŠããŸããŸãã ã¯ã©ã€ã¢ã³ãã誀ã£ãŠ ID ããŒã¯ã³ã Authorization ããããŒã«èŒããŠããå Žåã«åããŠã token_use ã¯ã¬ãŒã ã "access" ã§ããããšã確èªããŠããŸãã ãªããæ€èšŒé
ç®ã« aud (audience) ã¯ã¬ãŒã ã¯å«ãŸããŠããŸããã MCP Authorization 仿§ã§ã¯ãªãœãŒã¹ãµãŒããŒã«ããããŒã¯ã³ã® audience æ€èšŒãæ±ããããŠããŸããã Cognito ã®ãŠãŒã¶ãŒããŒã«ãçºè¡ããã¢ã¯ã»ã¹ããŒã¯ã³ã«ã¯ aud ã¯ã¬ãŒã ãå«ãŸããã代ããã« client_id ã¯ã¬ãŒã ãå«ãŸããŸãã ãã®ãããä»åã®å®è£
ã§ã¯ client_id ã®èš±å¯ãªã¹ãæ€èšŒã«ãã£ãŠãããŒã¯ã³ãäºåç»é²æžã¿ã®ã¯ã©ã€ã¢ã³ãã«çºè¡ããããã®ã§ããããšã確èªãã圢ããšã£ãŠããŸãã ã²ãŒããŠã§ã€ã®å®è£
ãã€ã³ã ã²ãŒããŠã§ã€æ¬äœã¯ Go (1.26.3) + Echo (v4.15.2) ã§å®è£
ããŸããã ããã§ã¯èšèšäžã®ãã€ã³ãã«ã€ããŠè§ŠããŸãã èšå®ãã¡ã€ã«ã«ããããã¯ãšã³ã管ç ã²ãŒããŠã§ã€ããã€ãã¹ãã MCP ãµãŒã㌠(ããã¯ãšã³ã) 㯠YAML ã§å®£èšçã«ç®¡çããŠããŸãã backends : - name : server-a url : http://server-a.internal:8081 - name : server-b url : http://server-b.internal:8082 ã²ãŒããŠã§ã€ã¯èµ·åæã«ãã®ãã¡ã€ã«ãèªã¿èŸŒã¿ã /<name>/mcp ãšãããã¹ãåããã¯ãšã³ãã® /mcp ã«ãããã³ã°ããŸãã ããšãã° POST /server-a/mcp ãžã®ãªã¯ãšã¹ã㯠http://server-a.internal:8081/mcp ã«è»¢éãããŸãã ãããã·éšå㯠Go æšæºã©ã€ãã©ãªã®ãªããŒã¹ãããã·ãããŒã¹ã«ã以äžã®ããã«å®è£
ããŠããŸãã æšæºå®è£
ã¯è»¢éå
ã®ãã¹ããæžãæããã ãã§ãã¹ã¯ãã®ãŸãŸè»¢éããããã転éçŽåã«åŒã°ãããªã¯ãšã¹ãã®æžãæãåŠçãæ¡åŒµããŠããã¹ãã¬ãã£ãã¯ã¹ã®é€å»ãå ããŠããŸãã func newBackendProxy(targetURL, stripPrefix string ) (*httputil.ReverseProxy, error ) { u, err := url.Parse(targetURL) if err != nil { return nil , fmt.Errorf( "parse %q: %w" , targetURL, err) } rp := httputil.NewSingleHostReverseProxy(u) originalDirector := rp.Director rp.Director = func (req *http.Request) { // æšæºã®æžãæãåŠç (転éå
ã u ã«åãã) ãå®è¡ããäžã§ã // ã²ãŒããŠã§ã€åŽã®ãã¹ãã¬ãã£ãã¯ã¹ãé€å» (/server-a/mcp â /mcp) originalDirector(req) req.Host = u.Host if stripPrefix != "" { req.URL.Path = strings.TrimPrefix(req.URL.Path, stripPrefix) if req.URL.Path == "" { req.URL.Path = "/" } } } // ããã¯ãšã³ãã«å°éã§ããªãå Žå㯠502 ãè¿ã rp.ErrorHandler = func (w http.ResponseWriter, r *http.Request, err error ) { log.Printf( "[proxy] upstream error %s %s: %v" , r.Method, r.URL.Path, err) http.Error(w, "bad gateway" , http.StatusBadGateway) } return rp, nil } æ°ãã MCP ãµãŒããŒã远å ãããããŒã ã¯ããµãŒããŒããããã€ããŠãã® YAML ã« 1 ãšã³ããªè¿œèšããã ãã§ã èªèšŒã»èªå¯ä»ãã®ãªã¢ãŒã MCP ãµãŒããŒãå
¬éã§ããŸãã æ€èšŒæžã¿ãŠãŒã¶ãŒæ
å ±ã®äŒæ¬ãšãªãããŸã鲿¢ ã²ãŒããŠã§ã€ã¯ JWT ã®æ€èšŒåŸã Authorization ããããŒãé€å»ããæ€èšŒæžã¿ã®ã¯ã¬ãŒã ã X-Auth-* ããããŒãšããŠããã¯ãšã³ããžã®ãªã¯ãšã¹ãã«æ³šå
¥ããŸãã X-Auth-Sub : ãŠãŒã¶ãŒèå¥å (sub ã¯ã¬ãŒã ) X-Auth-Email : ã¡ãŒã«ã¢ãã¬ã¹ (Pre Token Generation Lambda ã§æ³šå
¥ãã email ã¯ã¬ãŒã ) X-Auth-Client-Id : OAuth ã¯ã©ã€ã¢ã³ã ID X-Auth-Scope : èš±å¯ãããã¹ã³ãŒãäžèЧ ãã®ãšãéèŠãªã®ããã¯ã©ã€ã¢ã³ãããéãããŠãã X-Auth-* ããããŒãå¿
ãåé€ããŠããåæ³šå
¥ããããšã§ãã // åä¿¡ãã Authorization / X-Auth-* ãå
šãŠåé€ïŒãªãããŸã鲿¢ïŒ stripIncomingAuthHeaders(req.Header) // æ€èšŒæžã¿ã¯ã¬ãŒã ãã X-Auth-* ãåæ³šå
¥ req.Header.Set( "X-Auth-Sub" , claims.Sub) req.Header.Set( "X-Auth-Email" , claims.Email) req.Header.Set( "X-Auth-Client-Id" , claims.ClientID) req.Header.Set( "X-Auth-Scope" , strings.Join(claims.Scopes, " " )) ããã«ãããã¯ã©ã€ã¢ã³ããåœã® X-Auth-Sub ãä»ããŠãªã¯ãšã¹ãããããšã§ä»äººã«ãªãããŸãã®ãé²ããŸãã ã²ãŒããŠã§ã€ãã¯ã¬ãŒã ããããŒã®åé€ãšå泚å
¥ã匷å¶ãããããããã¯ãšã³ãåŽã¯åžžã«ã²ãŒããŠã§ã€ã§æ€èšŒæžã¿ã® X-Auth-* ããããŒã®å©çšãä¿èšŒã§ããŸãã å ããŠãããã¯ãšã³ãã«ã¯ã²ãŒããŠã§ã€çµç±ã§ããå°éã§ããªãããã«ãããã¯ãŒã¯ãæ§æããŠããŸã (åŸè¿°)ã X-Auth-* ãä¿¡é Œã§ããã®ã¯ãã²ãŒããŠã§ã€ãå¿
ãéããããšãåæãªã®ã§ãã¢ããªã±ãŒã·ã§ã³å®è£
ãšãããã¯ãŒã¯æ§æãã»ããã§èšèšããå¿
èŠããããŸãã èµ·åæã® OIDC Discovery ã«ãã fail-fast ã²ãŒããŠã§ã€ã¯èµ·åæã« Cognito ãž OIDC Discovery ( /.well-known/openid-configuration ã®ååŸ) ãè¡ããŸãã issuer ã®èšå®ãã¹ãªã©ãããã°ãã®æç¹ã§èµ·åãšã©ãŒã«ãªãããããªã¯ãšã¹ããåããŠããèªèšŒãšã©ãŒãå€çºããããšããäºæ
ãé²ããŸãã ã¢ãã¯èªå¯ãµãŒããŒã«ããããŒã«ã«éçº ããŒã«ã«éçºçšã«ãOIDC Discoveryã»JWKSã»ããŒã¯ã³çºè¡ã ããåããæå°éã®ã¢ãã¯èªå¯ãµãŒããŒãçšæããŸããã ã²ãŒããŠã§ã€ããèŠããš issuer ã® URL ãéãã ããªã®ã§ãå®éã® Cognito ãšåãã³ãŒããã¹ã§ JWT æ€èšŒãŸã§éãã§ãã¹ãã§ããŸãã docker compose ã§ã²ãŒããŠã§ã€ã»ãµã³ãã«ããã¯ãšã³ãã»ã¢ãã¯èªå¯ãµãŒããŒãäžæ¬èµ·åã§ããããã«ããŠãããAWS ç°å¢ãªãã§èªèšŒãããŒå
šäœã確èªã§ããŸãã ã€ã³ãã©æ§æ ã€ã³ãã©ã¯ Terraform ã§ç®¡çããŠããŸããèŠç¹ã¯ä»¥äžã®éãã§ãã ECS Fargate: ã²ãŒããŠã§ã€ã¯ private subnet ã«é
眮ããå€éšãžã®é信㯠NAT Gateway çµç± ALB: TLS ãçµç«¯ããã²ãŒããŠã§ã€ãžè»¢éãã»ãã¥ãªãã£ã°ã«ãŒãã§ã²ãŒããŠã§ã€ãžã®å
¥å㯠ALB ããã®ã¿ã«å¶é Cognito User Pool: Google ãã§ãã¬ãŒã·ã§ã³ãã¢ããªã¯ã©ã€ã¢ã³ããResource ServerãPre Token Generation Lambda ã Terraform ã§å®çŸ© ãããã€: GitHub Actions ãã OIDC ã§ããŒã«ãåŒãåã㊠ECR push ãš ECS ãããã€ãå®è¡ MCP ã¯ã©ã€ã¢ã³ã (Claude ãªã©) ã¯åºå® IP ãæããªããããALB 㯠HTTPS (443) ãå
šå
¬éãšããã¢ã¯ã»ã¹å¶åŸ¡ã¯ JWT æ€èšŒãš WAF ã«ä»»ããŸãã ããã¯ãšã³ãã® MCP ãµãŒããŒã¯ private subnet å
ã§ã²ãŒããŠã§ã€ããã®ã¿å°éã§ããããã«ããã²ãŒããŠã§ã€ãçµç±ããªãå Žåã¯ãããã¯ãŒã¯çã«å°éäžå¯èœã«ããŠããŸãã 瀟å
ã§ã®æŽ»çšäºäŸ å®éã«ç€Ÿå
ã§ Redash ãæäœãããªã¢ãŒã MCP ãµãŒããŒãã²ãŒããŠã§ã€ãå©çšããŠç€Ÿå
åãã«ãªãªãŒã¹ãããŸããã Claude ãšã®ãã£ããã ãã§ãã¯ãšãªã®å®è¡ãããã·ã¥ããŒãã®æäœãšãã£ã Redash äžã®ã»ãšãã©ã®æäœãã§ããŸãã ããŒã«ã«çã® Redash MCP ãµãŒããŒã«ã€ããŠã以åã®ææŠweekã®èšäºã§ç޹ä»ããŠããŸãã tech.every.tv Redash MCP ãµãŒããŒããªã¢ãŒãåããèªèšŒã»èªå¯ãã²ãŒããŠã§ã€ã«éçŽããããšã§ãå人ããšã« API Key ãªã©ã®é
åžãç»é²ãäžèŠã«ãªãã ããžãã¹ãµã€ãã®ã¡ã³ããŒã§ãã£ãŠããRedash ã¢ã«ãŠã³ããæã£ãŠããã° Google ã¢ã«ãŠã³ãã«ãã°ã€ã³ããã ãã§ API çµç±ã§ Redash ãæäœã§ããããã«ãªããŸããã Redash MCP ã瀟å
ã«å
¬éããŸãã ä»åŸã®èª²é¡ çæéã§ã®æ§ç¯ã ã£ãããã以äžã®ãããªèª²é¡ãæ®ã£ãŠããŸãã ãã现ããªããªã·ãŒç®¡ç: çŸç¶ã¯ãèªç€Ÿãã¡ã€ã³ã®ç€Ÿå¡ã§ããããšãã®ç¢ºèªãŸã§ã§ãå³å¯ã«æš©é管çãããå Žåã«ã¯ãæå±ããŒã ãªã©ã®å±æ§ã«å¿ããŠå©çšã§ãã MCP ãµãŒããŒããªãœãŒã¹ãå¶éããä»çµã¿ãå¿
èŠã«ãªããŸãã VPC éã®æ¥ç¶: åããŒã ã® MCP ãµãŒããŒã¯å¥ã® VPC ã AWS ã¢ã«ãŠã³ãã§çšŒåããã±ãŒã¹ããããŸãããã®ãããä»åŸããã« MCP ãµãŒããŒã®å©çšãå±éããŠããããã«ã¯ãVPC Peering ãªã©ã«ãã VPC 鿥ç¶ãæ€èšããå¿
èŠããããŸãã ãããã« æ¬èšäºã§ã¯ãå
šç€Ÿå
±éã®ãªã¢ãŒã MCP ãµãŒããŒåãèªèšŒã»èªå¯ã²ãŒããŠã§ã€ã®èšèšãšå®è£
ã玹ä»ããŸããã ã²ãŒããŠã§ã€æ¹åŒãæ¡çšããããšã§ãèªèšŒã»èªå¯ã®å®è£
ãã²ãŒããŠã§ã€ã«äžå
åã§ãã åããŒã 㯠MCP ãµãŒããŒã®ããŒã«å®è£
ã«å°å¿µããŠãèšå®ãã¡ã€ã«ãžã®è¿œèšã ãã§èªèšŒä»ãã®ãªã¢ãŒã MCP ãµãŒããŒãå
¬éã§ããããã«ãªããŸããã MCP ã®èªå¯ãŸããã¯ä»æ§ã®æŽåãæŽ»çºã«é²ãã§ããé åãªã®ã§ãä»åŸãååã远ããªããåºç€ãè²ãŠãŠãããããšæããŸãã ãã®èšäºãã瀟å
ã§ã® AI 掻çšã®äžã§åããããªèª²é¡æãæã£ãŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã æåŸãŸã§èªãã§ããã ããããããšãããããŸããã Understanding user pool JSON web tokens (JWTs) - Amazon Cognito (2026幎6æ11æ¥é²èЧ) ããAmazon Cognito generates two pairs of RSA cryptographic keys for each user pool. One private key signs access tokens, and the other signs ID tokens.ããšèšèŒãããŠããŸãã ↩
ã¯ããã« ããã«ã¡ã¯ããã¢ããéçºéšã®åç°ã§ãã ä»åã¯ãç§ãã¡ã®éšçœ²ã§å®æœãããAI daysããšããåãçµã¿ã«ã€ããŠã¬ããŒãããŸãã2æ¥éãããŠãæ®æ®µã®éçºæ¥åã«AIãçµã¿èŸŒãããã®åå°ãéäžçã«ã€ãã瀟å
ã€ãã³ãã§ãã ããããã®ãã£ããã¯ãç§ãããã¢ããã§ã®AI掻çšããã£ãšå éãããŠããããããšå£°ãäžããããšã§ãããç§ã¯åœ¹è·è
ã§ã¯ãªãäžéçºã¡ã³ããŒã§ããããã®æããäŒãããšãããå
·äœçãªåœ¢ãšããŠä»åã®AI dayséå¬ã«è³ããŸãããæåãããAI daysãããããããšèããŠããããã§ã¯ãªããããªããšããããããšããæããå
ã«ãã£ãŠããããããŒã ãå·»ã蟌ãã åãçµã¿ã«è²ã£ãŠãã£ãããšããæµãã§ãã ãAIãæ¥åã«æŽ»ããããããšãã話ã¯ãã¡ãã¡ã§èããã®ã®ãå®éã«ããŒã ãšããŠäœããæãã€ããã°ããã®ãã¯æ©ãŸãããšããã ãšæããŸããç§ãã¡ãææ¢ãã§é²ããã®ã§ããã®éçšãšããã£ãŠã¿ãŠåãã£ãããšãæ£çŽã«å
±æããŸãã ãªããAI daysãããã£ãã®ã ãã£ããã¯ãããã€ãã®èª²é¡æãéãªã£ãŠããããšã§ããã AI掻çšããç¹åšãããŠãã æ¥çå
šäœããããŠç€Ÿå
ã®ä»éšçœ²ã§ãAIãæ¥åã«çµã¿èŸŒã¿å§ããåããåºãã£ãŠããŸãããäžæ¹ã§ç§ãã¡ãã¢ããéçºéšã¯ãã¡ã³ããŒãããããAIã䜿ã£ãŠã¯ãããã®ã®ãã¹ãã«ãããŠããŠãå人ã«ç¹åšããŠããã ãã§ãæ¥åãããŒã«åžžèšã§ããŠããªãç¶æ
ã§ããã çµç¹ãšããŠäžæ®µäžã®ãã§ãŒãºãž å人ã®å·¥å€«ã«é Œãã®ã§ã¯ãªããéçºéšå
šäœã®AI掻çšã¬ãã«ãåºäžãããŠãçµç¹ãšããŠæ¬¡ã®ãã§ãŒãºãžç§»è¡ãããããšããæãããããŸãããä»åŸã®æ°ããªåãçµã¿ã«çæãããšãã«ããããã§æ§ç¯ããç°å¢ãåããã®ãŸãŸæµçšã§ããç¶æ
ãã€ãã£ãŠããããããšããå®å©çãªçãããããŸããã ããããäžæ°ã«åé²ãããããã«ããŸãšãŸã£ãæéã確ä¿ããŠéäžçã«åãçµã圢ãšããŠãAI daysããäŒç»ããŸããã é²ãæ¹ AI daysã¯ã次ã®ãããªæ§æã§å®æœããŸããã Day0: äœã«ãã©ãŒã«ã¹ããŠã©ããªãã®ãäœãã®ããã£ã¹ã«ãã·ã§ã³ Day1ã2: ããŒã ã§skillãäœæãã 宿œåŸ: å
šäœã§ã®æ¯ãè¿ã Day0ã§æ¹éãåºããæ®ãã®æéã¯ã²ãããæãåããããšããæµãã§ãããããããã©ããªããšã話ããŠäœããã£ãã®ããæãäžããŠç޹ä»ããŸãã ãªããæ¬èšäºã«åºãŠãããskillããagentãããªãŒã±ã¹ãã¬ãŒã¿ãŒãã¯ããããã Claude Code ãããŒã¹ã«ããä»çµã¿ã§ããAIã«å®è¡ãããæé ãåœä»€çŸ€ããClaude Code ã® skill / agent ãšããŠæžãèµ·ãããŠãã£ãããšããåæã§èªãã§ããã ãããšåããããããšæããŸãã䜿çšããã¢ãã«ã¯ãAI days ã宿œãã2026幎6æç¬¬1鱿ç¹ã§ã® Claude Opus 4.8 ã§ãã Day0ïŒAIã«ã©ããŸã§ä»»ããããæ±ºãã Day0ã¯ãäœæ¥æ¥ãšã¯å¥ã«MTGãšããŠå®æœããŸãããæ¬çªã«å
¥ãåã«ããŸãããŒã ã§æ¬¡ã®ããšãå
±æã»è°è«ããæéã§ãã ãªãããã®ãïŒèæ¯ãšå€§çŸ©ååã®ç®ç·åãã ä»éšçœ²ã§ã®æŽ»çšäºäŸã®å
±æïŒããšãã°ãClaude Code ãš Redash MCPïŒDatabricksïŒãçµã¿åãããããšã§ãéãšã³ãžãã¢ïŒPMMïŒã§ãé«åºŠãªçµ±èšåæã暪æåæãã§ããããã«ãªã£ãããšãã£ãäºäŸ çŸåšå°ã®ãã¢ãªã³ã°ãšã¢ã¯ã·ã§ã³è°è«ïŒåèªã®AI掻çšã®çŸç¶ã®æã¡å¯ããšã次ã®ã¢ã¯ã·ã§ã³ã®æ€èš ãããŠããã®å Žã§äžå¿ã«ãªã£ãã®ãããããããäœã«ãã©ãŒã«ã¹ããã®ãããšããåãã§ããã è«ç¹ã¯ããã€ããããŸããã æ¥åžžæ¥åã®èªååããæ©èœéçºã®å¹çåãïŒå¹æã倧ããã®ã¯ã©ã¡ãããæ¥åžžæ¥åãªãè€æ°ã®æ¥åãMCPã§ã€ãªãã§åããããæ©èœéçºãªãUIã®åŠ¥åœæ§ããã¶ã€ã³ãšã®æ¥ç¶ãŸã§æ
ä¿ã§ãããã ã©ããŸã§å·»ã蟌ããïŒéçºéšã«éããŠããããããžãã¹ãµã€ããŸã§å·»ã蟌ããé åã§ãããã è°è«ã®äžã§èŠããŠããã®ã¯ãé åã«ãã£ãŠAIã«ä»»ãããã床åããéããšããããšã§ãããããšãã°ãµãŒããŒãµã€ãã¯ãç§ãã¡ã®éçºåºç€äžãDBã®ã¹ããŒãããã¢ãã«ãèªåçæããããOpenAPIã§APIã®åãå®çŸ©ããããšããå®çŸ©ãããå®è£
ãã³ãŒãçæã§çµã³ã€ããä»çµã¿ãæŽã£ãŠããŸãããã®ã¶ãçæç©ãå®çŸ©ããããã«ããã確ãããããæ
ä¿ãããããäžæ¹ã§UIã«ã¯ããããããæ£è§£ããæ©æ¢°çã«çªãåãããä»çµã¿ããªããAIã®ãããªãªå€æã«å§ãããšãããåºããããä»»ãããã«ãã«ããé åã§ãã ããããè°è«ãçµãŠãä»åã¯ãéçºéšã«éããŠãå®è£
ãã§ãŒãºã®èªååã«ãã©ãŒã«ã¹ããããšæ±ºããŸããã察象ã«ããã®ã¯ã èŠä»¶ â èšèš èšèš â å®è£
ãããåããŠã®ã¬ãã¥ãŒ ãšããå®è£
ãŸããã®äžé£ã®æµãã§ãããªããèŠä»¶âèšèšã«ã€ããŠã¯ããã§ã«å人ãäœã£ããã®ãå
±æãããŠãããããAI daysã§ã¯èšèšâå®è£
ã®ãšããããçæããŸããã ããã§ç®æããã®ã¯ãAIã®çæç©ãã»ãŒããŒã¬ãã¥ãŒã§approveã§ããç¶æ
ã§ããïŒçµæãã©ãã ã£ããã¯ãåŸåã®ãæ¯ãè¿ããã§ãããããŠè§ŠããŸãïŒããã®ããã«ãè¡ãåœããã°ã£ããã§ã¯ãªããããããé çªã§ã»ããããã«ãŒã«ã§éçºããããšããåïŒããŒãã¹ïŒã¬ãŒãã¬ãŒã«ïŒããããããæ±ºããŠããŸããããšããæ¹éãç«ãŠãŸããã é²ãæ¹ãã®ãã®ãåãããŠæ±ºããŸãããã¢ãããïŒãã¢ãã圢åŒã§æãåããã話ãåã£ãå
容ããã®å Žã§èª°ããäœæ¥è
ãšããŠåœ¢ã«ããŠããããããŠãæ¯æ¥PRãåºããŠããŒãžãããšãããŸã§æã£ãŠããããšããé²ãæ¹ã§ãã Day1ã2ïŒããŒã ã§skillãã€ãã ãŸãã¯ãã©ããªã«ãŒã«ããããšãããããåºãåã Day1ã¯ã察象ãšããAPIãµãŒããŒã®ãªããžããªã1ã€æ±ºãããèšèšâå®è£
ã®ä»çµã¿ã¥ããã«ãããŠãã©ããªã«ãŒã«ããããšãããããã¡ã³ããŒãããããçºè¡šãããšããããå§ããŸããã åºãŠãã芳ç¹ã¯å€å²ã«ããããŸããã ã¢ãŒããã¯ãã£ã®æç€ºïŒã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ãåœåèŠåãšãã£ãæ¢åã®å®è£
èŠçŽ å®è£
ãããŒã®æç€ºïŒèŠä»¶âèšèšâãã¹ãâå®è£
ãšããé åºãRedâGreenãµã€ã¯ã« ãã¹ãèšèšæ¹éïŒãã¹ããã³ãã¬ãŒãããã¹ãããŒã¿äœæãããŒãã«ãã¹ãã®æ±çšå ã¬ãã¥ãŒèгç¹ïŒå人æ
å ±ãç°å¢äŸåãåœåèŠåãåå©çšæ§ãäŸåããã±ãŒãžã®ããŒãžã§ã³ãªã© PRäœæïŒã¬ãã¥ãŒããããããå°ããåå²ãã ã»ãã¥ãªãã£ïŒäœèšãªæš©éãã€ããªããäŸåã¯ææ°ã»å
¬åŒã®äœ¿ãæ¹ã«æºæ ããã©ãŒãã³ã¹ïŒEXPLAINãªã©ã§éããªããããªç®æã«äºåã«æ°ä»ããããã« ãã®éçšã§åºãŠããã®ã¯ãæç¢ºãªã«ãŒã«ã ãã§ã¯ãããŸããã§ããããæ®æ®µã¯ããæžãããããã¯ãã倿ããŠããããšãã£ãããããŸã§ææåãããŠããªãã£ãããŒã ã®å
±éèªèããããããŠè¡šã«åºãŠããŸãããåèªã®é ã®äžã«ãã£ãåæãå£ã«åºããŠäžŠã¹ãããšããæãã¬å¯ç£ç©ã«ã€ãªãããŸããããã®ç¹ã¯ãåŸã»ã©ãæ¯ãè¿ããã§ãããããŠè§ŠããŸãã ãAIã«ã§ããããš/ã§ããªãããšãã§ä»åãã éãŸã£ãã¢ã€ãã¢ã¯ã次ã®3ã€ã«åé¡ããŠãããŸããã 人éã¯ã§ããŠããããAIããŸã ã§ããŠããªãã㚠人éãAIãã§ããŠããªãããš ãããŸã§ã§ããŠããªãã£ãããAIã䜿ãããšã§å¹çããã§ããããã«ãªãããš ãã®ä»åããå¹ããŸããã(1) ã¯ãã§ã«äººéãåããŠããããšãèšèªåããã°ããã®ã§ã广ãåºãããçæããããã(2)(3) ã¯æ°ãã«åãã€ããå¿
èŠãããã¶ãé£åºŠã¯äžãããŸãããããŸãããã°äŒžã³ããã倧ãããšããããã«ãäœã«ã©ãã ãåãå²ããã®åªå
床ããããŒã ã®èªèãæããããã§æ±ºããããããã§ãã ãã®ããã§æ¡ã£ãã®ãããæ®æ®µã®ã¯ãŒã¯ãããŒãskillã«èœãšã蟌ãããšããã¢ãããŒãã§ãããããªãAIãšãŒãžã§ã³ãã®å€§æãããªèšèšã«èžã¿èŸŒãã®ã§ã¯ãªãããã§ã«èªåãã¡ãåããŠããæ¥åã®æé ããAIãå®è¡ã§ãã圢ïŒskillïŒãšããŠæžãèµ·ãããŠãããŸããã身è¿ãªæ¥åããæãã€ããããã®ã§ãã¡ã³ããŒå
šå¡ãæãåããããããææç©ããã®ãŸãŸæ¥ã
ã®éçºã«äœ¿ããããšããçãã§ãã忥ã¯ããã®èšèšâå®è£
ã®skillã圢ã«ãããšãããŸã§é²ããŸããã åãããŠæ€èšŒããã¬ãã¥ãŒãããŒãŸã§ã€ãã 2æ¥ç®ã¯ã忥ã«ã€ãã£ãskillãå®éã®ã¿ã¹ã¯ã«åœãŠãŠåããããã®çµæãããŒã ã§å
±æãããšããããå§ããŸãããåºæ¥äžãã£ãã³ãŒãã ãã§ãªãããšãŒãžã§ã³ããå®éã«ã©ãåãããã®ãã°ãäžç·ã«èŠãªããããããã¯æ°ã«ãªãããšãããã€ã³ããæŽãåºããŠãããŸããããšãã°ããããªæ°ã¥ããæãããŸããã æ¢åã®å®è£
ãèŠã€ããŠããã®ã«äœ¿ããªãïŒæéœ¢èšç®ã®ãããªè€éãªåŠçã§ãæ¬æ¥ã¯æµçšããŠã»ããæ¢åã®ãŠãŒãã£ãªãã£é¢æ°ãããã®ã«ãAIã¯ãããèŠã€ããããã§äœ¿ãããç¬èªã«å®è£
ããŠããŸããããããã䜿ã£ãŠãããšããåæãäºåã«æž¡ããŠããã¹ãã ã£ãããšããæ°ã¥ãã§ãã ãŒãããäœããã®ã¯å¥PRã«åãåºãããïŒãã¹ãã®factoryã®ããã«ããŸã ããŒã¹ãååšããªããã®ãå®è£
ããªããäœããããšãæå³ããªãäœãæ¹ã«ãªããã¡ã§ãããå
ã«ããã ããçšæããPRãåããæ¹ãããããã§ããããããŠãPRãã©ãåå²ããããèªäœããå€æåºæºãšããŠæãããå¿
èŠããããããããŸããã æé ãšããŠæç€ºãã¹ãä»éäœæ¥ãããïŒDBã倿Žããããã€ã°ã¬ãŒã·ã§ã³ãçæãããAPIå®çŸ©ãå€ãããããã¥ã¡ã³ãïŒswaggerïŒãæŽæ°ããããšãã£ãäœæ¥ã¯ããããŒã®äžã«æé ãšããŠæžããŠãããªããšæããŠããŸããŸãã agentãšskillã®è²¬ååæ
ïŒãã©ããŸã§ãagentã«èããããã©ããããskillãšããŠåºå®ããããã®ç·åŒãã«ã¯å人差ããããããã§ãè°è«ã«ãªããŸããïŒãã®åãã¯åŸè¿°ã®ãä»åŸã®å±æãã«ãã€ãªãã£ãŠãããŸãïŒã ãããŠãããããŠèŠããŠãã芳ç¹ãèžãŸããªããã2æ¥ç®ã®åŸåã¯ã忥ãšåããã¢ããã圢åŒã§ã¬ãã¥ãŒãããŒã®äœæã«åãçµã¿ãŸãããå®è£
ããåŽã ãã§ãªããçæç©ããã§ãã¯ããåŽã®åãããããããšã§ããAIã«å®è£
ãä»»ããå¥ç³»çµ±ã§ã¬ãã¥ãŒããããšããäžé£ã®æµãã圢ã«ããããšããçãã§ãã ã€ãã£ããã® 2æ¥éã§ãæã£ãŠãã以äžã«ããããã®ææç©ãçãŸããŸããã倧ããåãããšãAIã«æž¡ãããã®ãåå°ããšãããã䜿ã£ãŠå®éã«åãããskill矀ã§ãã åå°ïŒAIã«åæãæž¡ãããã®ããã¥ã¡ã³ãé¡ïŒ ãªããžããªããšã®çŽæããšããŸãšãã CLAUDE.md ãã¹ãèšèšã¬ã€ãã©ã€ã³ïŒãã¹ãèšèšã®æéãããã¥ã¡ã³ãåã docs/test_design_guideline.md ïŒ å®è£
ã¬ã€ãã©ã€ã³ã®æŽæ°ïŒ docs/implementation_guide.md ïŒ å®è£
ãããŒãåãskill矀 å
šäœãæãããªãŒã±ã¹ãã¬ãŒã¿ãŒãšãããããåŒã³åºãããå·¥çšããšã®skillãã»ããã§äœããŸãããã¿ã¹ã¯å岿žïŒå®è£
ã¿ã¹ã¯ãç²åºŠããšã«åå²ããããã¥ã¡ã³ããåè¿°ã®ãšããèŠä»¶âèšèšã®å·¥çšã¯æ¢åã®skillãæ
ã£ãŠããããã®åºåç©ãããã«ããããŸãïŒãå
¥åã«æž¡ããšããã¹ãã³ãŒãã»å®è£
ã®diffã»ãã©ããPRãåºåãããããšããã€ã¡ãŒãžã§ããå
·äœçã«ã¯ãæ¬¡ã®æµããäžæ°é貫ã§åããŸãã ã³ã³ããã¹ãåé â ãã¹ãã±ãŒã¹å®çŸ© â ãã¹ãå®è£
ïŒRedïŒâ æ©èœå®è£
ïŒGreen / RefactorïŒâ åäœç¢ºèªïŒcurlã§ã®å®æ©çéïŒâ ãã©ããPRäœæ â ã¬ãã¥ãŒ 工倫ããã®ã¯ãåå·¥çšãç¬ç«ãããµããšãŒãžã§ã³ãïŒå¥ã³ã³ããã¹ãïŒãšããŠèµ·åããåŒãç¶ãã¯äŒè©±ã§ã¯ãªããã¡ã€ã«ïŒåéããã³ã³ããã¹ãããã¹ãã³ãŒããdiff ãªã©ïŒã§è¡ãããã«ããç¹ã§ãããã¹ãã»å®è£
ã»ã¬ãã¥ãŒãäºãã®æèãåŒããããªãã®ã§ãåŸè¿°ãããå¥ç³»çµ±ã§ã®ã¬ãã¥ãŒããèªç¶ã«çµã¿èŸŒããŸããã ã€ã¡ãŒãžããããããããªãŒã±ã¹ãã¬ãŒã¿ãŒskillã®æ§æãããå°ãå
·äœçã«ç޹ä»ããŸãããªãŒã±ã¹ãã¬ãŒã¿ãŒèªèº«ã¯ãèããä¿ã¡ãã«ãŒãå¶åŸ¡ã»ãµããšãŒãžã§ã³ãã®èµ·åã»ææç©ã®åŒãç¶ãã»å€±ææã®åæ¢ã«åŸ¹ããŠãå®è£
ã®å®äœã¯å·¥çšããšã®skillã«å§è²ããããšãã圹å²åæ
ã§ããã¿ã¹ã¯å岿žã®äŸåé¢ä¿ããã¿ã¹ã¯ã®å®è£
é ãæ±ºãã1ã¿ã¹ã¯ããšã«æ¬¡ã®å·¥çšãåããŠãããŸããå
šäœåãå³ã«ãããšã次ã®ãããªæµãã«ãªããŸãã å·¥çš å§è²å
skill ææç© â ã³ã³ããã¹ãåé collect-context context.mdïŒåœè©²ã¿ã¹ã¯åïŒ â¡ ãã¹ãã±ãŒã¹å®çŸ© write-testcases testcases.md â¢a ãã¹ãå®è£
ïŒRedïŒ implement-tests ãã¹ãã³ãŒãïŒRedç¢ºèª â¢b æ©èœå®è£
ïŒGreen / RefactorïŒ implement-feature æ¬çªã³ãŒãïŒå
šãã¹ãGreen â¢c åäœç¢ºèª verify-endpoint curlã§ã®çé確èªçµæïŒâ»ãšã³ããã€ã³ããå«ãã¿ã¹ã¯ã®ã¿ïŒ ⣠ãã©ããPRäœæ create-draft-pr 1ã¿ã¹ã¯=1ãã©ããPR †ã¬ãã¥ãŒ 瀟å
ã®ã¬ãã¥ãŒçšãã©ã°ã€ã³ ææäžèЧ ãããŒå
šäœã®ã«ãŒã«ãšããŠã¯ã次ã®ãããªãã®ãææåããŠããŸãã å·¥çšã¯åºæ¬â ãâ€ãé ã«åãããâ¢c åäœç¢ºèªã¯ãšã³ããã€ã³ãã®è¿œå ã»å€æŽãå«ãã¿ã¹ã¯ã®ãšãã ãå®è¡ããïŒrepository远å ãããããªã©ãå©ã察象ããªãã¿ã¹ã¯ã§ã¯ã¹ãããããïŒ PRã¯1ã¿ã¹ã¯=1PRã§å°ããä¿ã¡ãäŸåã¿ã¹ã¯ãããå Žåã¯äŸåå
ã®ãã©ã³ãããåå²ããã¹ã¿ãã¯PRã«ãã ã¬ãã¥ãŒïŒâ€ïŒã§Critical / Importantãªææãåºãããæ©èœå®è£
ãšã¬ãã¥ãŒããææããŒãã«ãªããŸã§åŸåŸ©ããïŒäžéããïŒããã®ãšããä¿®æ£è
ã®æèãã¬ãã¥ãŒãåŒãç¶ããªããããã¬ãã¥ãŒæ
åœã®ãµããšãŒãžã§ã³ãã¯æ¯åæ°èŠã«èµ·åãã Greenã«ã§ããªãã»èŠä»¶ãšççŸãããªã©è§£æ¶ã§ããªãåé¡ã«åœãã£ãããæšæž¬ã§é²ããã«èŠç¢ºèªäºé
ãšããŠèšé²ãããã®ã¿ã¹ã¯ã§åæ¢ãã ããäžæ©èžã¿èŸŒãã§ãåå·¥çšã®skillã«å®éã«æžããŠããæç€ºã玹ä»ããŸããã©ã®skillãããåè³ªã«æ°ãã€ãããã®ãããªå¿æ§ãã§ã¯ãªãã ããã®å Žåã¯ãããããšããç¶æ³ãšè¡åã®ãã¢ ã§æç€ºãæžããŠããŸãã ãã¹ãã±ãŒã¹å®çŸ©ïŒâ¡ïŒã«ã¯ããããªæç€ºãæžããŠããŸãã ç°åžžç³»ã¯ããšã©ãŒã«ãªãããšãã§ã¯ãªããæåŸ
ãããšã©ãŒæèšã»åãŸã§æå®ãã åãã¹ãã±ãŒã¹ã«ä¿¡é Œæ§ã©ãã«ãä»ããããããðµ èŠä»¶ã»æ¢åå®è£
ã«åºã¥ã / ð¡ åççãªæšæž¬ / ðŽ èŠç¢ºèªãã®3段éã§ãAIãæšæž¬ã§æžããéšåãç¢ºå®æ
å ±ãšæ··ããããªã ãã¹ãå®è£
ïŒâ¢aïŒã®skillã«ã¯ãããã¹ãã仿§ãšããŠãæ¬çªå®è£
ãšã¯ç¬ç«ããã³ã³ããã¹ãã§æžãããšããç®çãšããããå®ãããã®æç€ºãæžããŠããŸãã æ¬çªããžãã¯ã¯æžããªãããã¹ãã®ã³ã³ãã€ã«ãéãããã®æå°éã®ã¹ã¿ãïŒäžèº«ã¯ panic("not implemented") ãªã©ïŒãŸã§ã¯èš±å¯ãã Redã確èªãããšãã¯ã倱æã®çç±ããæªå®è£
ã«ããæåŸ
ã©ããã®å€±æããªã®ãããã¹ãã³ãŒãèªäœã®ãã°ããªã®ããåãåããŠããè¿ã æ©èœå®è£
ïŒâ¢bïŒã«ã¯ããã®éãå®ãããæç€ºãæžããŠããŸãã ãã¹ãã匱ããªããGreenã«ããããã«ã¢ãµãŒã·ã§ã³ãç·©ãããåã£ããããªãããã¹ãåŽã«ãã°ããããšå€æããŠãèªåã§ã¯çŽãããèŠç¢ºèªãšããŠå ±åããïŒãã¹ãã¯å¥å·¥çšã®è²¬åïŒ ãªãã¡ã¯ã¿ã¯ããã®ã¿ã¹ã¯ã§èªåãæžããå·®åãã«éå®ãããæ¢åã³ãŒãã®èŠçŽéåã«æ°ã¥ããŠãåæã«çŽãããå¥PRã®é åãšããŠå ±åã«çãã åäœç¢ºèªïŒâ¢cïŒã«ã¯ãäœããã£ãŠã確èªã§ããããšããããæç€ºããŠããŸãã ã200ãè¿ã£ããã ãã§ã¯æ£åžžç³»ã®ç¢ºèªã«ããªããæ€èšŒçšã®æ¢ç¥ã®å€ãDBã«æå
¥ãããããã¬ã¹ãã³ã¹ã«æ£ããå«ãŸããããšãŸã§çªãåããããããããŠãä»ãŠãŒã¶ãŒã®ããŒã¿ãè«çå逿žã¿ããŒã¿ãšãã£ããå«ãŸããŠã¯ãããªãããŒã¿ãå«ãŸããªããããšã確èªãã çµæãæåŸ
ãšéã£ããâã®ãŸãŸæ£çŽã«å ±åããã¬ããŒããâ
ã«å¯ããªãã宿ã«ãç°å¢ã®ãããã«ããªã ããããæç€ºã®å€ãã¯ãæåããæžããŠããããã§ã¯ãªããå®è¡ãã°ã§æå³ããªãåäœãèŠã€ãããã³ã«æžãè¶³ããŠãã£ããã®ã§ããããšãã°ãå®è¡ãè±èªã§é²ãã§ãã£ãŠããŸãããšããå°å³ãªåé¡ã¯ããµããšãŒãžã§ã³ããèµ·åããããã³ããã®åé ã«ããã¹ãŠã®åºåã»ææç©ã»ãŠãŒã¶ãŒãžã®è³ªåã¯æ¥æ¬èªã§è¡ãããšããå¿
ãæèšããããšããæç€ºã§æœ°ããŸããã æžããã«ãŒã«ãå®éã«å€æãšããŠçŸããå Žé¢ããããŸããããã¹ãåŽã®ãã£ã¯ã¹ãã£ã«ãã°ãããïŒããã©ã«ãå€ãæã€ã«ã©ã ã«ãŒãå€ãå
¥ãããšãããORMã®ä»æ§ã§ãããããããŠDBåŽã®ããã©ã«ãå€ã§äžæžãããããéã¢ã¯ãã£ãã«ãããããŒã¿ããã¢ã¯ãã£ãã®ãŸãŸä¿åãããŠããïŒãå®è£
ãæ£ããã®ã«ãã¹ããGreenã«ãªããªãç¶æ³ãèµ·ãããšãã®ããšã§ãããã®ãšãæ©èœå®è£
ã®ãµããšãŒãžã§ã³ãã¯ããã¹ãã匱ããªãã»ãã¹ãã¯å¥å·¥çšã®è²¬åããšããã«ãŒã«ã«åŸã£ãŠããã¹ããæžãæããŠGreenã«ããè¿éãéžã°ãããªãŒã±ã¹ãã¬ãŒã¿ãŒã«å·®ãæ»ããŠããŸããã ãã®ãšãã®ãªãŒã±ã¹ãã¬ãŒã¿ãŒã®å®è¡ãã°ããã¡ãã§ãïŒæç²ã»æŽåœ¢ãæ¥æ¬èªåã®æç€ºãå
¥ããåã®å®è¡ãªã®ã§è±èªã®ãŸãŸã§ãïŒã ⺠Agent(Write testcases TASK-0003) â¿ Done (13 tool uses · 72.1k tokens · 1m 56s) ⺠14 cases. Test subagent (Red) for TASK-0003: ⺠Agent(Write Red tests TASK-0003) â¿ Done (22 tool uses · 103.3k tokens · 3m 12s) ⺠Red confirmed (14 cases). Feature subagent (GreenâRefactor) for TASK-0003: ⺠Agent(Implement TASK-0003 Green) â¿ Done (20 tool uses · 52.3k tokens · 2m 40s) ⺠The feature SA found a genuine test-fixture bug (not an impl bug): boil.Infer() drops is_active=false (zero-value of a with-default column), so the inactive fixture V3 persists as active. The impl is correct; per the skill the feature SA correctly refused to weaken the tests and stopped. Fixing fixtures is implement-tests' responsibility. I'll spawn a focused test-fix subagent (still the implement-tests role): ⺠Agent(Fix TASK-0003 test fixture) â¿ Done (14 tool uses · 38.2k tokens · 1m 22s) ⺠14/14 green now. ãã¹ãã±ãŒã¹å®çŸ©âãã¹ãå®è£
ïŒRedïŒâæ©èœå®è£
ïŒGreenïŒãšå·¥çšããšã«ãµããšãŒãžã§ã³ããèµ·åãããŠããæ§åãšãæ©èœå®è£
ã®ãµããšãŒãžã§ã³ãããã£ã¯ã¹ãã£ã®ãã°ãèŠã€ããªãããèªåã§ã¯çŽããïŒ"correctly refused to weaken the tests and stopped"ïŒããªãŒã±ã¹ãã¬ãŒã¿ãŒããã¹ãä¿®æ£å°çšã®ãµããšãŒãžã§ã³ããæ¹ããŠç«ã¡äžããŠããã£ã¯ã¹ãã£ã ãããã³ãã€ã³ãã§çŽãããæ§åãåãããŸããskillã«æžããããã¹ãã匱ããªãã»ãã¹ãåŽã®ãã°ã¯èªåã§çŽããå ±åããããããã®ãŸãŸå€æãšããŠçŸããäŸã§ãã äžæ¹ã§ãçŸå®çãªèœãšãã©ãããéžãã éšåããããŸããã¬ãã¥ãŒå·¥çšã¯ã瀟å
ã§ãã§ã«ãã©ã°ã€ã³åãããŠãããã®ãåå©çšããŸããïŒãã®ã¬ãã¥ãŒçšãã©ã°ã€ã³ã«ã€ããŠã¯ éå»ã®ããã°èšäº ã§ç޹ä»ããŠããŸãããã®åŸãã¢ããããŒããéããŠããŸãïŒããŸãåäœç¢ºèªã¯ããããããäœããã£ãŠåäœç¢ºèªãšãããããšããè°è«ãããŸããããã®éçšã§ããªã¢ãŒãã®ãã¹ãç°å¢ïŒç€Ÿå
ã®testkitïŒçµç±ã§å®è¡ã§ããä»çµã¿ããšããæ¡ãåºãã®ã§ãããæéã®å
Œãåãã§æå¿µãä»åã¯curlã§ã®å®æ©çéã«èœã¡çããŠããŸãã ãããŠããããã䜿ã£ãŠå®éã«ã³ãŒããæžãããã«ãªã¯ãšã¹ããåºããšãããŸã§äžæ°ã«é²ããããšãã§ããŸããã人éãæäœããã®ã¯ãèµ°ãåºãåã«ãªãŒã±ã¹ãã¬ãŒã¿ãŒãããã©ããŸã§èªåŸã§é²ãããããpushã»PRäœæãã©ãæ±ãããã確èªãããŠåçããäžåºŠã ãã§ãããšã¯å
šèªåã§ã§ããŸããã æ¯ãè¿ãïŒãã£ãŠã¿ãŠåãã£ãããš å®æœåŸãã¡ã³ããŒå
šå¡ã§æ¯ãè¿ããè¡ããŸãããåºãŠãã声ããããã£ãç¹ãšèª²é¡ã«åããŠæŽçããŸãã ããã£ãããš ãªãŒã±ã¹ãã¬ãŒã¿ãŒïŒåå¥skillãšããæ§æ å
šäœãææ®ãããªãŒã±ã¹ãã¬ãŒã¿ãŒãšãåå¥ã®skillã«åããæ§æã«ããã®ã§ãããããããšãŠãããã£ãã§ãã圹å²ãåãããŠããã®ã§äœããšããèãããããããšããè²ãŠãŠãããããæ§æã«ãªããŸããã æé»ç¥ãèšèªåããäœæ¥ãã®ãã®ã«äŸ¡å€ããã£ã skillãã€ããã«ã¯ãæ®æ®µã¯é ã®äžã«ããæé»ç¥ãææåããå¿
èŠããããŸãããã®ãæé»ç¥ãèœãšã蟌ããäœæ¥ã¯ãskilläœæã®äžã§å¿
é ã§ãããšåæã«ãããŒã ã®ç¥èãæŽçããããã§ãæå³ã®ããããã»ã¹ã§ããã æ¯ãè¿ãã§ãããããŒã ã§ã®çè§£ãæã£ãããèªåãã¡ã®ã³ãŒãã£ã³ã°ãã¬ãã¥ãŒèŠç¹ã®æ£åžãã«ãªã£ãããéçºã®ã¹ã¿ã€ã«ãæææ±ºå®ã«å¯Ÿããããäºãã®èªèãåãããããããšãã声ãå€ãæãããŸãããAIã«æž¡ãããã®åå°ïŒã³ã³ããã¹ãïŒãæŽããäœæ¥ããçµæãšããŠããŒã å
ã®å
±éèªèãèšèªåããå Žã«ããªã£ãããšããã®ã倧ããªåç©«ã§ããã ã¢ãããïŒãã¢ãã圢åŒããããæ¹ã®å
±æãã«ãªã£ã æ®æ®µã®éçºãšã¯ãããŠéã圢åŒã§é²ããŸãããããããçµæçã«ããã£ãç¹ã§ãã話ãåã£ãå
容ããã®å Žã§èª°ãã圢ã«ããŠããã®ã§ãè°è«ããããšããã®ãŸãŸææç©ãšããŠæ®ã£ãŠãããŸããããŸããskillãããã³ãããæžãéçšãäºãã«èŠãªããé²ãã圢åŒã ã£ãããšããããæ¯ãè¿ãã§ã¯ããããããã©ããªãµãã«skillã䜿ããäœã£ãŠããããšãã話ãã§ããã®ã¯ããã£ãããšãã声ãæãããŸãããAI掻çšã®ããŠããŠãå人ã«ç¹åšããŠããç§ãã¡ã«ãšã£ãŠãããæ¹ãã®ãã®ãå
±æããæ©äŒã«ãªããŸããã ããŸãã¯äœã£ãŠã¿ããã§ååã¯ãŒã¯ãã ã¯ãŒã¯ãããŒãèœãšã蟌ãã ãã§ãããçšåºŠäœ¿ãããã®ãåºæ¥äžãããŸãããæåããäœã蟌ãå¿
èŠã¯ãªãããŸããã©ã€ããŠã¿ãããšããã¹ã¿ã³ã¹ã§é²ããŠããã£ããšæããŠããŸãã èª²é¡ ãããŒã«ã§ä»çµã¿åãã¹ãå±€ããšãAIã«ä»»ããå±€ããæ··ãã£ãŠãã äžæ¹ã§åçç¹ããããŸãããæ¬æ¥ã¯éçè§£æïŒlinterãåãã§ãã¯ãªã©ïŒã§æ©æ¢°çã«é²ããã¯ãã®ãšããããskillåŽã§ã«ããŒããããšããŠããã±ãŒã¹ããããŸããã è£ãè¿ããšãæé»ç¥ãããããskillã«èœãšã蟌ãŸãªããŠããéçè§£æã§æ
ä¿ã§ããé åããã£ããšããããšã§ããäœã§ãAIã«èšãèãããã®ã§ã¯ãªããã³ã³ãã€ã©ããªã³ã¿ãŒã®ã¬ãã«ã§å¶çŽãããããããã®ã¯ãã¡ãã«å¯ããããšããåãåããå¿
èŠã ãšæ°ã¥ããããŸããã AIã®ã»ã«ãã¬ãã¥ãŒã«ã¯æ§é çãªç²ç¹ããã£ã ãã1ã€ãAIé§åéçºãªãã§ã¯ã®åŠã³ããããŸãããçæãããã³ãŒãã«å¯ŸããŠAIèªèº«ã«ã»ã«ãã¬ãã¥ãŒãããããšãé倧ãªåé¡ã¯ãªãããšè¿ã£ãŠããäžæ¹ãå¥ã®AIã³ãŒãã¬ãã¥ãŒã«éããšããã°ããã¹ãã®äžåãæ¬¡ã
ãšèŠã€ããããšããå Žé¢ãç¹°ãè¿ãèµ·ããã®ã§ãã èšèšå€æãã®ãã®ã¯æŠã劥åœã§ããAIã«ãèªåã®æžãããã®ãèªåã§ã¬ãã¥ãŒããããã ãã ãšã芳ç¹ã«æ§é çãªæããæ®ããšããããšã§ããéçŽããããŒã¿ãåãããŒããŠããªãããå¢çæ¡ä»¶ã䞊åå®è¡æã®ãã¹ãã®å®å®æ§ãªã©ã人éã§ãèŠèœãšãããã芳ç¹ã»ã©æããããåŸåããããŸããã ããããåŸãæèšã¯ãAIã«ä»»ãããã«ãããéçè§£æã»å¥ç³»çµ±ã®ã¬ãã¥ãŒã»äººéã®ã¬ãã¥ãŒãéãããå€å±€ã®ã¬ãŒãã¬ãŒã«ããåæã«çµãã¹ãããšããããšã§ãã ããã«èžã¿èŸŒãã§è°è«ããããš ãããã£ã/課é¡ããšã¯å¥ã«ãæ¯ãè¿ãã§ã¯å°ãèžã¿èŸŒãã åãã«ã€ããŠãè°è«ããŸãããAIé§åéçºãããŒã ã§é²ããããã§ãåãããšãèããŠããæ¹ã®åèã«ãªããããªã®ã§å
±æããŸãã éåžžæ¥åã®æéãåã£ãŠãŸã§ããã®æéã確ä¿ãã䟡å€ã¯ãã£ãã ããã¯ããããã䟡å€ã¯ãã£ããã§äžèŽããŸãããããŒã ã®çè§£ãæããåèªãã©ããªãµãã«skillã䜿ãã»äœã£ãŠããããå
±æã§ããAIé§åéçºãé²ããããã®åºç€ãã§ããããšããç¹ãè©äŸ¡ãããŸãããäžæ¹ã§ãå®éã®éçºãããŒãžã®å°å
¥ãŸã§ã¯ããäžæ®µããŒãã«ãé«ãããšããçŸå®çãªå£°ããããŸããã äœã£ããã®ãããã®ãŸãŸå®åã«æµçšã§ãããã ããã¯ççŽã«ã䜿ããããã ãææŸãã§ã¯ç¡çããšããè©äŸ¡ã§ããã 䜿ãããšã¯ã§ããããåçã«éããªãããã§ã¯ãªã åºæ¥äžããã®ã¯ãæ¬å®è£
ãšãããã¿ã€ãã®äžéããããã®ææç©ã§ããã®ãŸãŸæ±ãã«ã¯å°ãæ©ãŸãã ãã©ããã«ãã¡ãªéšåãããããããšããåæã§ã¬ãã¥ãŒããã®ã§ãèªç¥è² è·èŸŒã¿ã§èãããšãçéãã«ã¯ãªããªã ã¬ãã¥ãŒã®åŸåŸ©ã¯åœé¢é¿ããããã人éã®ææŸãã¯é ã ãã ãããèŠä»¶ãæºããPRãåºæ¥äžãããŸã§ã®ãªãŒãã¿ã€ã ã¯æžããããããšããæå¿ãããããŸãããå®è£
ãã®ãã®ã¯äººéããããªããŠãããããã©ãã®åã®ç©ŽãèŠã€ããŠçŽãå·¥çšãæ®ãããšããã®ãçŸåšå°ã§ããããããŠãAIã¬ãã¥ãŒã§å®çªçã«ææãããç®æãããã¯ãAIèªèº«ãèªåŸçã«çŽããããã«ãªã£ãŠã»ããããšããèŠæãæãããŸããã ãªããè²ãŠãªãã䜿ãããšããçµè«ã«èœã¡çããã ããã®ãŸãŸããããªäœ¿ãããã§ã¯ãªããåèªã§äœ¿ããªããè²ãŠããããšããçå°ã«ãªã£ãèæ¯ãæ¯ãè¿ããŸããã ææç©ã®æ°ã¯åºããã®ã®ãå
šäœãäžæ°ã«ãåºããèšèšããŠããŸã£ããããäžã€ã²ãšã€ã®skillã®è©Šè¡é¯èª€ãæ·±æãïŒç²ŸåºŠåäžïŒã«æéãå²ããããªãã£ãïŒéçºãããŒã®äžéšã«çµã£ãŠæ·±ããããšããããæ¹ãããåŸãããïŒ èšèªåããããŠããªãæé»ã®æå®ãããŸã å€ãæ®ã£ãŠãã skillãžã®æå®ã ãã§ã¯éçããããã³ã³ãã€ã©ããªã³ã¿ãŒã®ãããªåŒ·ãå¶çŽã¯ãããããªã ã䜿ã£ãããšã«ã©ãè²ãŠããããŸã§ãããŒã«çµã¿èŸŒããŠããã°ãããå°ããåæã«è²ã€ãç¶æ
ã«è¿ã¥ãããããããããªã å°è±¡çã ã£ãã®ã¯ãããããŸã§ããããªã«å®è£
ãããŠããã®ããããããªã«AIãè²ãŠããã«å€ãã£ãæãããšãã衚çŸã§ããã人éãããããšã®éå¿ããå®è£
ãã®ãã®ãããAIãã©ãè²ãŠããã®èšèšããžç§»ãã€ã€ããããšããæèŠã§ãã ç¶ç¶ããŠéçšããããã«ãæäœéãªã«ãå¿
èŠã æåŸã«ããããäžéæ§ã§çµããããªãããã«å¿
èŠãªä»çµã¿ãæŽãåºããŸããã ã¬ãŒãã¬ãŒã«ïŒéçè§£æããã¹ãã®ãã¡ã¯ããªãªã©ãæ©æ¢°çã«å質ãæ
ä¿ããä»çµã¿ïŒ åskillããã£ãšç¬ç«ãããäžéšããåå¥ã«å°å
¥ã»ãã¥ãŒãã³ã°ã§ããããã«ããããš ãã£ãŒãããã¯ã貯ããå Žæãšããããæ¹åã«åãã«ãŒãïŒçæ³ã¯ãæ¹åãèªç¶ãªéçšãããŒã«ä¹ã£ãŠããç¶æ
ïŒ ãã©ãè²ãŠãŠããããã®æ¹é ä»åŸã®å±æ ä»åã¯ãã¯ãŒã¯ãããŒãskillã«èœãšã蟌ãããšãã圢ã§é²ããŸããããæ¯ãè¿ã£ãŠã¿ããšããã®äžæ©æåã«ãããããã¯skillã«ãã¹ãããagentã«ãã¹ããããskillã®è²¬åã¯å¿
èŠååãããšãããAIã®èšèšãã®ã¬ãã«ãŸã§èžã¿èŸŒããŠããã°ãããã«ããã£ããããããŸããã æ¬¡ã®äžæãšããŠã¯ãå®è£
åã®æé ãå«ããå
šäœãããŒãå¯èŠåããã©ãããã©ããŸã§ãAIã®åœ¹å²ã§ãã©ãã人éã®è²¬åãªã®ãïŒãšã³ãžãã¢ã ãã§ãªããPdMã¬ãã«ãå«ããŠïŒãæŽçããŠãããããšèããŠããŸãã ããããŠããã®skill矀ãå®éã«ã©ãã ãå©çšãããŠããããèšæž¬ããŠããã€ããã§ãããŸããã©ã®å·¥çšã«ã©ã®ã¢ãã«ãå
ãŠãŠããŒã¯ã³ã³ã¹ããã³ã³ãããŒã«ãããããããŒãã¹ãšã³ãžãã¢ãªã³ã°ã®äžéšãšããŠä»åŸçµã¿èŸŒãã§ãããããšèããŠããŸãã ãŸãã¯äœã£ãŠã¿ããã¯ããããäœã蟌ãŸãªãããšããã¢ãããŒãèªäœã¯æ£è§£ã ã£ããšæã£ãŠããŸãããæ¹åã¯äœ¿ã£ã人ãåèªã§é²ããŠããã倧ããªå€æŽãçžè«ãããããšã¯æè¿ããšãããããããªéçšæ¹éã®ããšãããã§æ§ç¯ããç°å¢ãåããä»åŸã®éçºã§ç¶ç¶çã«è²ãŠãªããæŽ»ãããŠããäºå®ã§ãã ãŸãšã ãAI daysãã¯ãç¹åšããŠããAI掻çšã®ã¹ãã«ããçµç¹ã®åãšããŠæããŠããããã®ç¬¬äžæ©ã§ããã 2æ¥éãšããçãæéã§ããã¯ãŒã¯ãããŒãskillã«èœãšã蟌ãã ãã§ãããçšåºŠäœ¿ãããã®ã圢ã«ã§ããŸãããåæã«ããããŒã«ã§ä»çµã¿åãã¹ãå±€ãšã®åãåãããAIã®ã»ã«ãã¬ãã¥ãŒã®ç²ç¹ããè²ãŠãä»çµã¿ã®å¿
èŠæ§ããšãã£ããæ¬¡ã«åãåãã¹ã課é¡ãå
·äœçã«èŠããŠããŸããã ç§ãã¡ã®å Žåã¯ãããŸãã¯äœã£ãŠã¿ããã¯ããããäœã蟌ãŸãªãããšããã¹ã¿ã³ã¹ã§å§ããŠã¿ãŸããããŸã ææ¢ãã§ãããåŸãããåãå®åã§ç£šããªãããæ¬¡ã¯ãã£ãšäœ¿ãããã®ãäœãããããåŒãç¶ãæãã銳ããŠãããŸãã
ããã«ã¡ã¯ãããªãã·ã¥ãããã³éçºéšã® éŽæš ã§ãã æŠèŠ Data Definition LanguageïŒDDLãããŒã¿å®çŸ©èšèªïŒãã€ãŸã CREATE TABLE ã ALTER TABLE ã§ã¹ããŒãã倿Žããæäœãããã©ã³ã¶ã¯ã·ã§ã³ã®äžã§å®è¡ããŠããšããããŒã«ããã¯ã§ãããã¯ãããŒã¿ããŒã¹ã«ãã£ãŠéããŸããMySQL ã§ã¯ããŒã«ããã¯ã§ãããPostgreSQL ã§ã¯ããŒã«ããã¯ã§ããŸãã ããŒã«ããã¯ã¯ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§è¡ã£ã倿Žããèšé²ããŠããã倿Žåã®ç¶æ
ã«æ»ãæäœã§ããã ããããŒã«ããã¯ããã«ã¯ããã®æäœã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸã£ãŠããããšããããŠãã®å€æŽãèšé²ãããŠããããšã® 2 ã€ãå¿
èŠã§ããåè
ã¯ã©ã®ããŒã¿ããŒã¹ã§ãåãã§ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããªãæäœïŒPostgreSQL ã® CREATE INDEX CONCURRENTLY ãªã©ïŒã¯ãããããããŒã«ããã¯ã®å¯Ÿè±¡ã«ãªããŸãããããŒã¿ããŒã¹ã«ãã£ãŠåãããã®ã¯ãåŸè
ã§ãã ããŒã«ããã¯ã§ããããã€ãŸã倿Žãèšé²ããããã¯ãã¡ã¿ããŒã¿ã®çœ®ãå Žæã§æ±ºãŸããŸãã倿Žåã®ç¶æ
ã¯ãã¹ãã¬ãŒãžãšã³ãžã³ã®å
éšã«èšé²ãããŸãããã®ãããã¹ããŒãã®å®çŸ©æ
å ±ã§ããã¡ã¿ããŒã¿ãããã®å
éšã«ãªããã°ããŒã«ããã¯ã§ããŸãããå€ã MySQL ã¯ã¡ã¿ããŒã¿ããšã³ãžã³ã®å€åŽã®ãã¡ã€ã«ã«çœ®ããŠãããããããŒã«ããã¯ã§ããŸãããPostgreSQL ã¯ã¡ã¿ããŒã¿ãéåžžã®ããŒãã«ãšããŠå
éšã§ç®¡çãããããããŒã«ããã¯ã§ããŸããMySQL 8.0 ã¯ã¡ã¿ããŒã¿ãå
éšã«ç§»ããŸããããäºææ§ã®ããã«æé»çãªã³ããããæ®ãããããããŒã«ããã¯ã§ããŸãããMySQL ãš PostgreSQL ã®å·®ã¯ããã®çœ®ãå Žæã®éãããçãŸããŸãã å³1ïŒDDL ãããŒã«ããã¯ã§ãããã®å
šäœåã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããïŒDB å
±éïŒâ åãŸãã°ããŒã«ããã¯ã§ãããïŒDB ã§éãïŒã®é ã«æ±ºãŸãã åæïŒã¹ããŒã倿ŽãããŒã«ããã¯ã§ãããã¯ãããŒã¿ããŒã¹ã§éã CREATE TABLE ã ALTER TABLE ãšãã£ã DDL ãããã©ã³ã¶ã¯ã·ã§ã³ã®äžã§å®è¡ããŠããšããããŒã«ããã¯ã§ãããã¯ãããŒã¿ããŒã¹ã«ãã£ãŠéããŸãã MySQL ïŒããŒã«ããã¯ã§ããŸãããDDL ã«ã¯æé»çãªã³ãããã䌎ãã ALTER TABLE ãå®è¡ããæç¹ã§ãããŸã§ã®å€æŽã確å®ããŸããããšãã ROLLBACK ããŠãæ»ããŸããã PostgreSQL ïŒããŒã«ããã¯ã§ããŸãã BEGIN; ALTER TABLE ...; ROLLBACK; ã§å€æŽåã®ç¶æ
ã«æ»ããŸãã æ¬èšäºã¯ãã®å·®ãåæãšãã ãã®éããçãã§ãããã®ã¯äœã ãæ±ããŸãã DDL ãããŒã«ããã¯ã§ãããã¯ãåãŸãã â ããŒã«ããã¯ã§ããã ã®é ã§æ±ºãŸã ããŒã«ããã¯ã¯ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§è¡ã£ã倿Žããèšé²ããŠããã倿Žåã®ç¶æ
ã«æ»ãæäœã§ããã ããããŒã«ããã¯ããã«ã¯ããã®æäœã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸã£ãŠããããšããããŠãã®å€æŽãèšé²ãããŠããããšãã® 2 ã€ãå¿
èŠã§ããåè
ãæºãããªããã°åŸè
ã«ã¯é²ããªãã®ã§ããŸãåãŸãããæ¬¡ã«ããŒã«ããã¯ã§ããããã®é ã«ç¢ºãããã°ååã§ãã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããã å®è¡ã®ãããã®åé¡ã§ãããŒã¿ããŒã¹ã«ãããäžåŸã«å¹ããŸãã åãŸããšããŠããã®å€æŽãããŒã«ããã¯ã§ãããã ã¡ã¿ããŒã¿ïŒããŒãã«ãåãªã©ã¹ããŒãã®å®çŸ©æ
å ±ïŒã®çœ®ãå Žæã§æ±ºãŸããããŒã¿ããŒã¹ã«ãã£ãŠå€ãããŸãã ããŒã«ããã¯ã§ããããåããã®ã¯ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸãæäœã ãã§ããåæã§èŠã MySQL ãš PostgreSQL ã®å·®ã¯ãããŒã«ããã¯ã§ãããã§æ±ºãŸããŸãã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããïŒDB ã«ãããäžåŸïŒ ã»ãšãã©ã® DDL 㯠1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããŸãããã ããåãŸããªãæäœããããŸããããã¯ããŒã¿ããŒã¹ã«ãããŸããã 代衚äŸã¯ PostgreSQL ã® CREATE INDEX CONCURRENTLY ã§ããéåžžã® CREATE INDEX ã¯ããŒãã«ãããã¯ããŠäžæ°ã«çŽ¢åŒãäœããŸããäžæ¹ CONCURRENTLY ã¯ãæžã蟌ã¿ãæ¢ããã«çŽ¢åŒãäœããããè€æ°ã®æ®µéã«åããŠå®è¡ããŸããåæ®µéã¯ããããå¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãªãã®ã§ãå
šäœã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããã¯ã«åããããŸããã DDL ãããŒã«ããã¯ã§ãã PostgreSQL ã§ãã CREATE INDEX CONCURRENTLY ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§ã¯å®è¡ã§ããŸãããããŒã«ããã¯ã§ãããã©ãã以åã«ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«å
¥ããªãããã§ãããã®æäœã¯ããã§æ¢ãŸããããŒã«ããã¯ã§ãããã¯ããããåããŸããã åãŸããšããŠãããŒã«ããã¯ã§ãããïŒããã§ DB ãåãããïŒ 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸãæäœãã€ãŸãæ®éã® DDL ã«ã€ããŠãããŒã«ããã¯ã§ããããèããŸãããããããŒã¿ããŒã¹ã«ãã£ãŠéããŸãã è¡ã®æŽæ°ãåé€ãšãã£ã Data Manipulation LanguageïŒDMLãããŒã¿æäœèšèªïŒãããŒã«ããã¯ã§ããã®ã¯ãMVCCïŒå€æŽåã®å€ãè¡ãæ®ããŠããä»çµã¿ïŒãå€ãè¡ãä¿æããŠããããã§ãããã®èšé²ã®ä»çµã¿ã¯ã¹ãã¬ãŒãžãšã³ãžã³ã®å
éšã«ãããŸããã ãã DDL ãããŒã«ããã¯ããã«ã¯ãã¹ããŒããèšè¿°ããã¡ã¿ããŒã¿ããã¹ãã¬ãŒãžãšã³ãžã³ã®å
éšãã€ãŸããã®ä»çµã¿ã®ç®¡çäžã«ãªããã°ãªããŸããã ã¡ã¿ããŒã¿ããã®ç®¡çäžã«ãããã©ããããããŒã¿ããŒã¹ããšã®å·®ãçã¿ãŸãã å€ã MySQLïŒ5.7 以åïŒ ïŒã¡ã¿ããŒã¿ã¯ .frm ãšãããã¡ã€ã«ã«ãããã¹ãã¬ãŒãžãšã³ãžã³ã®å€åŽã«ãããŸãããããŒã«ããã¯ã®ä»çµã¿ã®ç®¡çäžã«ãªãã®ã§ããã©ã³ã¶ã¯ã·ã§ã³ã«åå ã§ããŸãããã ããæé»çã«ã³ããããããããŒã«ããã¯ã§ããŸããã MySQL 8.0 ïŒã¡ã¿ããŒã¿ã InnoDB ã®å
åŽã«åã蟌ã¿ãããŒã¿ãã£ã¯ã·ã§ããªãšããŠç®¡çããããã«ããŸãããããã§ DDL ãã¢ãããã¯ã«ãªããŸããïŒéäžã§äžæããŠãäžéå端ãªã¹ããŒããæ®ããŸããïŒããã ãããã®å€æŽãçã£ãã®ã¯ã¯ã©ãã·ã¥æã®å®å
šæ§ã§ãã£ãŠããŠãŒã¶ãŒãããŒã«ããã¯ã§ããããã«ããããšã§ã¯ãããŸãããåŸæ¥ã®æåãšã®äºææ§ãããæé»çãªã³ãããã¯ãã®ãŸãŸæ®ãããŸããã ã¢ãããã¯ïŒå£ããªãïŒãšããŠãŒã¶ãŒã奜ããªãšãã«ããŒã«ããã¯ã§ããããšã¯å¥ç©ã§ãã å
åŽã«å
¥ããŠãããŸã ããŒã«ããã¯ã§ããŸããã PostgreSQL ïŒã¹ããŒãæ
å ±ãã·ã¹ãã ã«ã¿ãã°ïŒ pg_class ãªã©ïŒãšããŠãéåžžã®ããŒãã«ãšåãã MVCC ã§ç®¡çããŸãã CREATE TABLE ã¯ã·ã¹ãã ã«ã¿ãã°ã« 1 è¡è¿œå ããã ãã®æäœã«ãªããŸããè¡ã®è¿œå ãããŒã«ããã¯ããã®ãšåãä»çµã¿ããã®ãŸãŸå¹ãã®ã§ãããŒã«ããã¯ã§ããŸãã 3 ã€ã¯å¥ã
ã®ã±ãŒã¹ã§ã¯ãªããã¡ã¿ããŒã¿ã®çœ®ãå Žæããå€åŽïŒå€ã MySQLïŒãããå
åŽã ãæé»ã³ãããïŒMySQL 8.0ïŒãå
åŽã§å®å
šç®¡çïŒPostgreSQLïŒãžã𿮵éçã«å€ãã£ãŠããã ãã§ããåæã§èŠããšãããMySQL ã¯ããŒã«ããã¯ã§ãããPostgreSQL ã¯ããŒã«ããã¯ã§ããŸããããã¯ããã®ã¡ã¿ããŒã¿ã®çœ®ãå Žæã«ããçµæã§ãã å³2ïŒè©³çްïŒïŒDDL ãããŒã«ããã¯ã§ãããã¯ã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããïŒDB å
±éïŒâ åãŸããšããŠããŒã«ããã¯ã§ãããïŒã¡ã¿ããŒã¿ã®çœ®ãå Žæã»DB ã§éãïŒã®é ã«æ±ºãŸãã çµè«ïŒDDL ãã©ããã§ã¯ãªããåãŸãã â ããŒã«ããã¯ã§ããã ã§èŠã DDL ãããŒã«ããã¯ã§ãããã¯ãåãŸãããæ¬¡ã«ããŒã«ããã¯ã§ãããããé ã«ç¢ºãããã°åãããŸããDDL ãã©ããã§äžåŸã«å€æãããšãPostgreSQL ã§ã¯ããŒã«ããã¯ã§ããããšããPostgreSQL ã§ã CREATE INDEX CONCURRENTLY ã¯ããŒã«ããã¯ã§ããªãããšãèŠèœãšããŸãããã®é ã§èŠãã°ãããããäŸå€ãæ£ãã倿ã§ããŸãã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããã åãŸããªããã°ïŒ CREATE INDEX CONCURRENTLY ãªã©ïŒãã©ã®ããŒã¿ããŒã¹ã§ãããŒã«ããã¯ã§ããŸããã åãŸããšããŠãã¡ã¿ããŒã¿ãããŒã«ããã¯ã®ä»çµã¿ã®ç®¡çäžã«ãããã 䜿ã£ãŠããããŒã¿ããŒã¹ã«ãã£ãŠãããŒã«ããã¯ã§ããããæ±ºãŸããŸãã æåŸã«ãå
·äœçãªèœãšã穎ãäžã€æããŸããMySQL ã§ã¯ DDL ãš DML ãåããã©ã³ã¶ã¯ã·ã§ã³ã«æ··ããŠã¯ãããŸãããããã¯ããŒã«ããã¯ã§ãããïŒã¡ã¿ããŒã¿ã®çœ®ãå ŽæïŒã«é¢ããåé¡ã§ããMySQL ã§ã¯ DDL ã®ã¡ã¿ããŒã¿ãããŒã«ããã¯ã®ä»çµã¿ã®å€åŽã«ããããã ALTER ã®æé»çãªã³ãããã«ãã£ãŠãçŽåã® INSERT ãªã©ãæå³ãã確å®ããŠããŸããŸãããã®æåã¯ãDDL ãããŒã«ããã¯ã®ä»çµã¿ã®å€åŽã«ããããšãã説æã§ããŸãã ãŸãšã ä»åã¯ããªã MySQL ã§ã¯ DDL ãããŒã«ããã¯ã§ãã PostgreSQL ã§ã¯ã§ããã®ãã«ã€ããŠèããŸãããMySQL 㯠DDL ãããŒã«ããã¯ã§ããªããPostgreSQL ã¯ã§ãããšããããšãèŠããŠããããšã¯æãã®ã§ãããããã§ã¯ããŒã«ã®äœ¿ãæ¹ã«éããŠããŸããŸãããªããã®ãããªèšèšã«ãªã£ãŠããã®ããçè§£ããããšã§ãMySQL ã PostgreSQL ãšããåå¥ã®ç¥èã«ãšã©ãŸãããåããŠè§ŠããæäœãããŒã¿ããŒã¹ã§ãã1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åãŸããããããŠã¡ã¿ããŒã¿ãããŒã«ããã¯ã®ä»çµã¿ã®ç®¡çäžã«ãããããšããåãèŠæ¹ã§èªåã§å€æã§ããããã«ãªããŸããå®éãåã PostgreSQL ã§ã CREATE INDEX CONCURRENTLY ã¯ããŒã«ããã¯ã§ããªãããšãã£ãäŸå€ã«ãèªåã§æ°ã¥ããã§ãããã
ã¯ããã« ããã«ã¡ã¯ãããªãã·ã¥ãããã³ã§iOSãšã³ãžãã¢ãããŠããè°·å£æäžã§ãã ããªãã·ã¥ãããã³ã® iOS ã¢ããªã§ã¯ãããã·ã¥éç¥ããã£ãŒããªã³ã¯ããç¹å®ã®ç»é¢ã»ç¹å®ã®ã»ã¯ã·ã§ã³ãžçŽæ¥é·ç§»ããå°ç·ãæ°å€ãæäŸããŠããŸãã delish://scroll_to_any_section ãã®ãªã³ã¯ã®äŸã§æå³ããŠããã®ã¯ã次ã®äžé£ã®åäœã§ãã ã¢ããªãèµ·åããäžéšã¿ãããŒã§ç¹å®ã®ã¿ãã«åãæ¿ãç®çã®ç»é¢ã«é·ç§»ãããã®äžã®ç¹å®ã®ã»ã¯ã·ã§ã³ãŸã§ã¹ã¯ããŒã«ããå¿
èŠãªããã®ã»ã¯ã·ã§ã³ã®ã¢ãŒãã«ãæç€ºããã äžèŠãã ã®ç»é¢é·ç§»ã«èŠããŸãããšãããæç€ºãããéãã«å®è£
ãããšãã¢ããªãéããŠããç¶æ
ãä»ç»é¢ã«ããç¶æ
ã§èµ·åãããšãã¹ã¯ããŒã«ãå¹ããªãããšããçŸè±¡ã«çªãåœãããŸãããã¹ã¯ããŒã«ããããšããåœä»€ãåºããç¬éã«ã¯ãã¹ã¯ããŒã«å
ã®ã»ã¯ã·ã§ã³ããŸã ç»é¢ã«ååšããªãå¯èœæ§ãããããã§ããã»ã¯ã·ã§ã³ã¯ãããã¯ãŒã¯éä¿¡ãè¿ã£ãŠããŠåããŠæç»ãããŸããããã®å®äºãåŸ
ããã«åœä»€ãèµ°ã£ãŠããŸããŸãã ãªãé£ããã®ã ãã®é£ããã®æ ¹ã¯ãSwiftUI ã宣èšç UI ãã¬ãŒã ã¯ãŒã¯ã§ããããšã«ãããŸããSwiftUI ã§ã¯ç»é¢ã¯ç¶æ
ããå°åºãããç¶æ
ãå€ããã°ç»é¢ãåæ§ç¯ãããŸããäžæ¹ãç¹å®ã®ç¬éã«äžåºŠã ãã¹ã¯ããŒã«ããããã¢ãŒãã«ãéãããšãã£ãæäœã¯ãç¶æ
ãšã¯ç¡é¢ä¿ã«äžåºŠã ãèµ°ãããã äžéæ§ã®åœä»€ ã§ãããã®äžéæ§ã®åœä»€ã宣èšç㪠UI ã®ãªãã§ç¢ºå®ã«å®è¡ããã«ã¯ããã åœä»€ãæžãã ãã§ã¯è¶³ããã宣èšçãªä»çµã¿ã«ä¹ãã工倫ãèŠããŸãã ããããã£ãŒããªã³ã¯ã®å Žåãåœä»€ãåºãåŽïŒèµ·åïŒããåœä»€ãåãåãç»é¢ãããå
ã«ååšããŸããåãæããŸã çãŸããŠããªããšãããžåœä»€ãé£ãã§ããããšããæéçãªãããéãªããŸãã ãã®èšäºã®ç®ç ãã®èšäºã§ã¯ããã®åé¡ã åœä»€ãçŽæ¥å®è¡ããããšãããSwiftUI ãæ±ãããç¶æ
ãã«çœ®ãæããŠè§£ã ãšããã¢ãããŒãã§æŽçããŸããããã·ã¥éç¥ããã£ãŒããªã³ã¯ãå€éšãµãŒãã¹ããã®ã³ãŒã«ããã¯ãªã©ãç»é¢ã®ã©ã€ããµã€ã¯ã«ã®å€ããé£ãã§ããããªã¬ãŒãæ±ãå Žé¢ã§åºãå¿çšã§ããèãæ¹ã ãšæããŸãã ãªã³ã¯èµ·åããã®ã¹ã¯ããŒã«ã顿ã«ã次ã®é ã§ãåçŽãªå®è£
ãå£ãããšããããäžã€ãã€çµã¿ç«ãŠãŠãããŸããããããã®ä»çµã¿ããªãå¿
èŠã«ãªãã®ãããé ã远ã£ãŠèŠããŠããã¯ãã§ãã ãªãåçŽãªå®è£
ã§ã¯åããªãã®ã ã¹ã¯ããŒã«èŠæ±ããæ¶ããã«æ®ããç¶æ
ããšããŠä¿æãã åææ¡ä»¶ãæã£ãç¬éã«ãäœåºŠèµ·ããŠãå®å
šã«äžåºŠã ãå®è¡ãã èµ·åæ
å ±ããç»é¢ãçãŸããåããä¿æãç¶ãã眮ãå Žæãçšæãã äžã€ã®èµ·åæ
å ±ã«ãè€æ°ã®ç»é¢èŠçŽ ãããããåå¿ã§ããããã«ãã ãªãããã£ãŒããªã³ã¯åŠçã¯ãåãåã£ã URL ãè§£æããŠã©ã®ç»é¢ãžé·ç§»ãããå€å®ãããååãšããé·ç§»å
ã®ç»é¢ã§èŠæ±ãããåŠçãå®è¡ãããåŸåã«åããããŸãããã®èšäºã§æ±ãã®ã¯åŸåã ãã§ãååã® URL è§£æã»ç»é¢å€å®ã«ã¯è§ŠããŸããã 1. ãªãåçŽãªå®è£
ã§ã¯åããªãã®ã ã¹ã¯ããŒã«ãšããåŠçãå®è¡ããã«ã¯ã次ã®åææ¡ä»¶ããã¹ãŠæã£ãŠããå¿
èŠããããŸãã 察象ç»é¢ã® View éå±€ãæ§ç¯æžã¿ã§ããããš ã»ã¯ã·ã§ã³ã®æç»ã«å¿
èŠãªããŒã¿ããããã¯ãŒã¯ããååŸæžã¿ã§ããããš ãã®ããŒã¿ãããšã«ã¹ã¯ããŒã«å
ã® View ãæç»æžã¿ã§ããããš åé¡ã¯ã èŠæ±ãçºçããæç¹ã§ããããã©ããŸã§æã£ãŠãããããèµ·åç¶æ
ã«äŸåããŠå€ãã ããšã§ãã ã³ãŒã«ãã¹ã¿ãŒã ïŒçµäºç¶æ
ããèµ·åïŒïŒèŠæ±çºçæãåææ¡ä»¶ã¯äžã€ãæã£ãŠããŸããã ãŠã©ãŒã ïŒãããã¹ã¿ãŒã ïŒèµ·åæžã¿ã§å¯Ÿè±¡ç»é¢ã衚瀺äžïŒïŒèŠæ±çºçæãåææ¡ä»¶ããã¹ãŠæã£ãŠããããšããããŸãã ãããŠãæã£ãŠããé åºãã¿ã€ãã³ã°ã¯å¶åŸ¡ã§ãããèŠæ±åŽããç¥ãããšãã§ããŸãããæã極端ãªã³ãŒã«ãã¹ã¿ãŒãã§ã¯ãèŠæ±ã®çºçæå» t = 0 ãšå®è¡å¯èœã«ãªãæå» t = T ã倧ããä¹é¢ãã T ã¯ãããã¯ãŒã¯ã¬ã€ãã³ã·æ¬¡ç¬¬ã§æ¯åå€åããŸãã èŠæ±ãåããæç¹ã§ scrollTo ãçŽæ¥åŒã¶åçŽãªå®è£
ãèããŠã¿ãŸããã³ãŒã«ãã¹ã¿ãŒãã§ã¯ t = 0 ã«å®è¡ãããåææ¡ä»¶ãæã t = T ãŸã§åŸ
ããªããããäœãèµ·ãããŸãããäžæ¹ãŠã©ãŒã ã¹ã¿ãŒãã§ã¯åææ¡ä»¶ãæã£ãŠããããæ£ããåäœããŸããããªãã¡ã åãã³ãŒããèµ·åç¶æ
ã«ãã£ãŠæåããã倱æããããã ããã§ãããã®å®è£
ã¯ãæ£ãããå®è¡æç¹ã®ã¿ã€ãã³ã°ãšããå¶åŸ¡äžèœãªèŠå ã«äŸåãããŠããŸãã ãã®åœä»€çã¢ãããŒãã¯ãæé»ã«ãèŠæ±æç¹ = å®è¡å¯èœæç¹ããåæããŠããŸããåæçãªãã¿ã³ã¿ãããªãæç«ããŸããããã£ãŒããªã³ã¯çµç±ã§ã¯æç«ããŸãããæ±ããã®ã¯ãèµ·åç¶æ
ã«ãããåžžã«æ£ããåãå®è£
ã§ãããã®ããã«ã以éã§ã¯æ¬¡ã®äžã€ãé ã«çµã¿ç«ãŠãŠãããŸãã èŠæ±ããå®è¡å¯èœã«ãªããŸã§å€±ãããªã ç¶æ
ãšããŠä¿æãã åææ¡ä»¶ãæã£ãã¿ã€ãã³ã°ã§å®è¡ãã åªçãªããªã¬ãŒ ãé
眮ãã èµ·åæ
å ±ãã View / ViewModel ããçåæéã®é·ããªããžã§ã¯ã ã«ä¿æããã 2. ã¹ã¯ããŒã«èŠæ±ããæ¶ããã«æ®ããç¶æ
ããšããŠä¿æãã ãŸããèŠæ±ããå³åº§ã«å®è¡ããåœä»€ãã§ã¯ãªããæªå®è¡ã®èŠæ±ããšããç¶æ
ãšããŠä¿æããŸããå®è¡å¯èœã«ãªããŸã§èŠæ±ã倱ãããªãããã«ããããã§ããæå°ã®è¡šçŸã¯äºå€ã®åæåã§è¶³ããŸãã enum ScrollRequest { case none case requested } @Published private ( set ) var scrollRequest : ScrollRequest = .none èŠæ±ã®èšé²ãšã¯ãªã¢ããç¶æ
é·ç§»ãšããŠå®çŸ©ããŸãã func requestScroll () { scrollRequest = .requested } func resolveScroll () { scrollRequest = .none } èŠæ±ã®èšé²ã¯ããã€å®è¡ãããããèŠå®ããŸãããèŠæ±åŽã¯å®è¡ãã¹ãå
容ã ããèšé²ãããã€å®è¡å¯èœãã®å€æã¯æ¬¡ç¯ã®å®è¡åŽãæ
ããŸããããã«ãããèŠæ±ã®çºçãšå®è¡ãåé¢ãããŸãã 3. åææ¡ä»¶ãæã£ãç¬éã«ãäœåºŠèµ·ããŠãå®å
šã«äžåºŠã ãå®è¡ãã èŠæ±ãç¶æ
ãšããŠæ®ãããã«ãªã£ãã®ã§ã次ã¯å®è¡åŽãçµã¿ãŸããå®è¡ããŠããæ¡ä»¶ã¯ãèŠæ±ãšåææ¡ä»¶ã®è«çç©ã§ãã ãã®æ¡ä»¶ã¯äºã€ã®å€æ°ïŒèŠæ±ãšåææ¡ä»¶ïŒã®è«çç©ã§ãããäºã€ãçã«ãªãé åºã¯èµ·åç¶æ
ã«ãã£ãŠå€ãããŸããã©ã¡ããå
ãã§äºéãã«åãããŸãã ã±ãŒã¹ AïŒèŠæ±ãå
ã«ç«ã¡ãåææ¡ä»¶ãåŸããæãïŒã³ãŒã«ãã¹ã¿ãŒãã«å
žåçïŒ ã±ãŒã¹ BïŒåææ¡ä»¶ãå
ã«æã£ãŠããŠãèŠæ±ãåŸããç«ã€ïŒãã§ã«å¯Ÿè±¡ç»é¢ã衚瀺ãããŠããå ŽåïŒ ã©ã¡ãã®ã±ãŒã¹ã§ããåŸããçã«ãªã£ã倿°ãåºããã£ãç¬éã«è«çç©ãæç«ããŸããåææ¡ä»¶ãèŠæ±ã®ã¯ããåããæã£ãŠããŠãããã®ç¬éãèŠæ±ã®æç«ãšåæã«ãªãã ãã§ãæ§é ã¯å€ãããŸãããé åºãäžå®ããªã以äžãå®è¡ãåäžã®ã¿ã€ãã³ã°ã«åºå®ããããšã¯ã§ããŸãããããã§ãæ¡ä»¶ãæºããããã ã¿ã€ãã³ã°ããš ã«ãåäžã®ã¬ãŒããšåäžã®åŠçãé
眮ããŸããSwiftUI ã§ã¯æ¬¡ã®3ã€ã該åœããŸãã ããªã¬ãŒ(1) ïŒ .onAppear ââ 察象ã»ã¯ã·ã§ã³ã View éå±€ã«åºçŸããç¬é ããªã¬ãŒ(2) ïŒ scrollRequest ã® .onChange ââ èŠæ±ãåŸããç«ã£ãç¬éïŒã»ã¯ã·ã§ã³ã¯æç»æžã¿ïŒ ããªã¬ãŒ(3) ïŒããŒã¿æç¡ã® .onChange ââ ããŒã¿ãåŸããå°çããç¬éïŒèŠæ±ã¯å
ã«ç«ã£ãŠããïŒ .onAppear { if scrollRequest == .requested { proxy.scrollTo(targetSection); resolveScroll(); runFollowUp() } } .onChange(of : scrollRequest ) { newValue in if newValue == .requested, data != nil { proxy.scrollTo(targetSection); resolveScroll(); runFollowUp() } } .onChange(of : data != nil ) { hasData in if hasData, scrollRequest == .requested { proxy.scrollTo(targetSection); resolveScroll(); runFollowUp() } } 3ã€ã®ããªã¬ãŒã¯ãããããåäžã®ã¬ãŒãæ¡ä»¶ãšåäžã®åŠçãæã¡ãŸããã©ã¡ãã®ã±ãŒã¹ããå°ãªããšãäžã€ã®ããªã¬ãŒã§ææãããŸãã ã±ãŒã¹ æ¡ä»¶ãæºããããç¬é ææããããªã¬ãŒ AïŒèŠæ±ãå
ãåææ¡ä»¶ãåŸ åææ¡ä»¶ãåŸããæã (3) ãŸã㯠(1) BïŒåææ¡ä»¶ãå
ãèŠæ±ãåŸ èŠæ±ãåŸããç«ã€ (2) ããã§ã±ãŒã¹ B ããããªã¬ãŒ (2) ãäžå¯æ¬ ã«ããŸããåææ¡ä»¶ããã§ã«æã£ãŠãããšãããžèŠæ±ãç«ã€ãšãèŠæ±ã®å€åãèŠãããªã¬ãŒ (2) ããã®ç¬éã«æç«ãæ€ç¥ããé
å»¶ãªãå®è¡ããŸããã³ãŒã«ãã¹ã¿ãŒãïŒã±ãŒã¹ AïŒã ãæ³å®ãããš (2) ã¯åé·ã«èŠããŸããããã§ã«å¯Ÿè±¡ç»é¢ã衚瀺ãããŠããç¶æ
ãæ£ããæ±ãããã«å¿
èŠã§ãããé
å»¶å®è¡ããšåŒãã§ããŸãããèŠæ±ã®æç¹ã§åææ¡ä»¶ãæã£ãŠããã°å³åº§ã«å®è¡ãããé
å»¶ã¯åææ¡ä»¶ãæªå
è¶³ã®ãšãã ãçºçããŸãã è€æ°ã®ããªã¬ãŒã眮ã以äžãäžã€ãå®è¡ããåŸã«å¥ã®ããªã¬ãŒãçºç«ãããŸãããããå®å
šã«ããã®ããå®è¡çŽåŸã® resolveScroll() ã«ããç¶æ
æ¶è²»ã§ãã æåã«æ¡ä»¶ãæºãããããªã¬ãŒãç¶æ
ãæ¶è²»ãããããåŸç¶ã®ããªã¬ãŒã¯ã¬ãŒãã§åŒŸãããŠå¯äœçšãæã¡ãŸãããçµæãšããŠã ã©ã®ããªã¬ãŒãäœåçºç«ããŠãå®è¡ã¯å¿
ãäžåºŠ ãšãªããŸããåœä»€çã¢ãããŒããåäžã®å®è¡æç¹ãäºæž¬ããŠå€±æããã®ã«å¯Ÿãããã®èšèšã¯å®è¡å¯èœã«ãªãããå
šæç¹ãç¶²çŸ
ããæåã«æç«ããäžåºŠã ããéããŸããã¬ãŒãæ¡ä»¶ãäžå€ã§ããéããã¿ã€ãã³ã°ãã©ãå€åããŠãæ£ããåããŸãã ããã¯ããã€ã¹ã¯ããŒã«ãããããšããåœä»€çãªã¿ã€ãã³ã°å¶åŸ¡ãããã¹ã¯ããŒã«ããŠããç¶æ
ãããšãã宣èšçãªæ¡ä»¶è©äŸ¡ãžçœ®ãæãããã®ã«ã»ããªããŸããã .onAppear ã .onChange 㯠SwiftUI ãç¶æ
å€åã®ãã³ã«è©äŸ¡ããä»çµã¿ã§ãããäžéæ§ã®åœä»€ããUI æŽæ°ãšåãè©äŸ¡ãµã€ã¯ã«ã«ä¹ã宣èšçãªå€å®ãšããŠè¡šçŸããŠããŸãã 4. èµ·åæ
å ±ããç»é¢ãçãŸããåããä¿æãç¶ãã眮ãå Žæãçšæãã ãããŸã§ã§åäžç»é¢å
ã®é
å»¶å®è¡ã¯è§£ããŸãããæ®ã課é¡ã¯ããã£ãŒããªã³ã¯ãéãã§ããèµ·åæ
å ±ïŒé·ç§»å
ãã³ãŒã«ããã¯å
ãªã©ïŒãã©ãã«ä¿æãããã§ãã ã³ãŒã«ãã¹ã¿ãŒãã§ã¯ããã£ãŒããªã³ã¯ã®åä¿¡ãã®ãã®ãã¢ããªèµ·åã®ãã£ããã«ãªããŸããã€ãŸã èµ·åã€ãã³ããå
ã«çºçãããããåãåãã¹ã View / ViewModel ã¯ãã®åŸã«çæããã ããã§ããã€ãã³ãã®æç¹ã§ã¯å¯Ÿè±¡ç»é¢ã® ViewModel ã® init ããåŒã°ããŠããããView / ViewModel ã¯èµ·åããã£ããã«ããããäœãããŸããã€ãã³ãããåãæã®çæã«æéçã«å
è¡ããŠããŸãã ãã®é察称æ§ããç¶æ
ã®ä¿æå
ãæ±ºå®ããŸããèµ·åæ
å ±ã @State ã @Published ã®ãã㪠View / ViewModel ã®ã©ã€ããµã€ã¯ã«ã«æçžãããç¶æ
ãšããŠæãšããšãããšããããã宣èšããã€ã³ã¹ã¿ã³ã¹ãã€ãã³ãããåŸã«çæããããããã€ãã³ããåãåããŸããããããã£ãŠèµ·åæ
å ±ã®ä¿æå
ã¯ã View / ViewModel ããçåæéã®é·ããªããžã§ã¯ã ã§ãªããã°ãªããŸãããèµ·åå
ã«è¿ãåŽã§ãã®ãªããžã§ã¯ããçæããåŸããçæããã ViewModel ãžæ³šå
¥ããŸãã ãã®ä¿æå
ã« Combine ã® CurrentValueSubject ãçšããŸãã PassthroughSubject ã¯éåºæç¹ã§è³Œèªè
ãååšããªããã°ã€ãã³ããç Žæ£ããŸãããèµ·åæ
å ±ç¢ºå®ã®æç¹ã§è³Œèªè
ãšãªãã¹ã ViewModel ã¯ãŸã çæãããŠããŸããã CurrentValueSubject ã¯ææ°å€ãä¿æãç¶ãããããViewModel ãåŸããçæã»è³ŒèªããŠãææ°ã®èµ·åæ
å ±ãååŸã§ããŸãã å®è£
äžã¯ãèµ·åå
ã«è¿ãåŽã§ Subject ãçæããViewModel ã® init ã«æ³šå
¥ããŸããViewModel 㯠Subject ã®ææè
ã§ã¯ãªã賌èªè
ã§ãã final class TargetViewModel { private let intentSubject : CurrentValueSubject < LaunchIntent , Never > init (intentSubject : CurrentValueSubject < LaunchIntent , Never > ) { self .intentSubject = intentSubject } } ViewModel ã¯æ³šå
¥ããã Subject ã«å¯Ÿãã init æã« .value ãèªãã°èµ·åæã«ç¢ºå®ããèµ·åæ
å ±ãåæçã«ååŸã§ãã以éã®æ°èŠèµ·åã«ã¯ sink ã§åå¿ã§ããŸããããã㊠CurrentValueSubject ã¯ã ã€ãã³ãé§åïŒéåºæã«åå¿ããïŒãšç¶æ
ä¿æïŒåŸããåç
§ããŠãæ®ã£ãŠããïŒã®åæ¹ããViewModel ã®ã©ã€ããµã€ã¯ã«ãè¶
ã㊠æºãããŸããããã¯ç¬¬2ç¯ã®ãèŠæ±ãç¶æ
ãšããŠä¿æãããããèµ·åæ
å ±ãšãããããåºã寿åœã®ã¬ãã«ã§å®çŸãããã®ã«ããããŸãã ãªããããã§ä¿æããèµ·åæ
å ±ã¯åã®ãªã URL ã§ã¯ãªããåä»ãã®æ§é äœã«ããŠãããŸããåŸæ®µã®ã³ãŒãã URL ã®ææ³ãæèãããå¿
èŠãªå€ã ããåç
§ã§ããããã«ããããã§ãã struct LaunchIntent : Equatable { let from : String? let callbackURL : String? let shouldScrollToSection : Bool } 5. äžã€ã®èµ·åæ
å ±ã«ãè€æ°ã®ç»é¢èŠçŽ ãããããåå¿ã§ããããã«ãã äžã€ã®ãã£ãŒããªã³ã¯èµ·åãæç€ºããå
容ã¯ããã°ãã°è€æ°ã®ç»é¢èŠçŽ ã«ãŸããããŸããããšãã°ãç¹å®ã®ã¿ãã«åãæ¿ãããèŠçŽ ãšããã®ã¿ãå
ã§ããåŠçãå®è¡ãããèŠçŽ ã®ããã«ãæ
åœã®ç°ãªãå¥ã
ã®èŠçŽ ããåãäžã€ã®èµ·åæ
å ±ãå¿
èŠãšããå Žé¢ããããŸãã èµ·åæ
å ±ã Subject ã§é
ä¿¡ããŠãããšããããã®èŠçŽ ã åãäžã€ã®èµ·åæ
å ±ããããããç¬ç«ã«è³Œèªã§ããŸã ãéèŠãªã®ã¯ãèŠçŽ ã®ããã ã«äžäžé¢ä¿ãåŒã³åºãé¢ä¿ããªãç¹ã§ããäºãã®ååšãç¥ããªããŸãŸãåã Subject ããåèªã«å¿
èŠãªæ
å ±ã ããåãåºããŸãã ã¿ãåãæ¿ããåžãèŠçŽ ã¯ã次ã®ããã«è³ŒèªããŸãã intentSubject .receive(on : DispatchQueue.main ) .sink { [ weak self ] intent in if intent.callbackURL != nil { self ?.selectedTab = .targetTab } } .store( in : & cancellables) æ©èœåŠçãåžãèŠçŽ ã¯ãåã Subject ãå¥ã«è³ŒèªããŸãã intentSubject .sink { [ weak self ] intent in if let url = intent.callbackURL { Task { await self ?.handleCallback(url : url ) } } } .store( in : & cancellables) äºã€ã®åãæã¯å¯Ÿçã§ãäºããç¥ããŸãããæ°ããªåå¿ãè¶³ããããã° .sink ãäžã€å ããã ãã§ãããæ¢åã®è³Œèªè
ã«ã¯åœ±é¿ããŸãããåœä»€ã®é£éïŒãã¿ããåãæ¿ããŠããåŠçãåŒã¶ãïŒã§ã¯ãªããäžã€ã®èµ·åæ
å ±ã«è€æ°ã®åãæãççµåã«åå¿ããæ§é ã«ãªã£ãŠããŸããããããèµ·åæ
å ±ãå
±æãããç¶æ
ãšããŠé
ä¿¡ããããšã®å¹æã§ãã 6. çµã¿äžãã£ãæ§é çµã¿ç«ãŠãŠããèŠçŽ ãçµ±åãããšãæ¬¡ã®æ§é ã«ãªããŸãã ãã®æ§é ã¯ãåéšåã屿çã«è¿œå ããã ãã§æ¡åŒµã§ããŸãã æ°ããªèµ·åæåã®è¿œå ã¯ã Intent ãžã®ãã£ãŒã«ã远å ãšã察å¿ããèŠæ±ç¶æ
ã»ããªã¬ãŒã®è¿œå ã§å®çµããŸããæ¢åãããŒã倿ŽããŸããã æ°ããªåå¿ã®è¿œå ã¯ã Subject ãžã® .sink 远å ã§å®çµããŸããä»ã®è³Œèªè
ã«åœ±é¿ããŸããã å®è¡ã¿ã€ãã³ã°ãäºæž¬ããç¶²çŸ
ãããããã¬ã€ãã³ã·ãé·ç§»é åºãå€åããŠããã¬ãŒãæ¡ä»¶ãäžå€ã§ããéãæ£ãããä¿ãããŸãã 7. ãããã« ãã£ãŒããªã³ã¯çµç±ãããŒã®é£ããã¯ãã«ãŒãã£ã³ã°ã§ã¯ãªãããåŠçãèŠæ±ãããæç¹ããšãåŠçãå®è¡ã§ããæç¹ãããããããšã«ãããŸããåœä»€çãªå®è£
ã¯ãèŠæ±ããæç¹ã§ããå®è¡ã§ãããšæé»ã«åæããŸããã§ããå®éã«å®è¡ã§ããã®ã¯åææ¡ä»¶ãæã£ãŠããã§ããã®æç¹ã¯èµ·åç¶æ
次第ã§åŸãã«ãããŸãããã®åæã厩ãããšãã«åããªããªããŸãã ãã®èšäºã§çµã¿ç«ãŠãå®è£
ã¯ãããã€å®è¡ãããããäºæž¬ããåœä»€çãªçºæ³ããããå®è¡ããŠããç¶æ
ãããè©äŸ¡ãç¶ãã宣èšçãªçºæ³ãžãšè»¢æãããã®ã§ããèŠæ±ãã¯ãªã¢å¯èœãªç¶æ
ãšããŠä¿æããåææ¡ä»¶ãæãããå
šã¿ã€ãã³ã°ã«åªçãªããªã¬ãŒãé
眮ããèµ·åæ
å ±ã ViewModel ããçåæéã®é·ããªããžã§ã¯ãã«ä¿æãããŠé
ä¿¡ããŸãããããããäžéæ§ã®åœä»€çèŠæ±ã SwiftUI ãæ±ãã宣èšçãªç¶æ
ãžç¿»èš³ããããšããåãçºæ³ã®çŸãã§ããåœä»€ã宣èšçãªç¶æ
ã«èœãšã蟌ãã°ããã®ç¶æ
㯠SwiftUI ã®è©äŸ¡ãµã€ã¯ã«ã«èªç¶ã«çµã¿èŸŒãŸããUI ã®æŽæ°ãšåãä»çµã¿ã§å®è¡ã¿ã€ãã³ã°ã解決ãããŸãã ããããçµã¿åãããããšã§ãçºçå
ãã¿ã€ãã³ã°ãå¶åŸ¡ã§ããªãå€éšèµ·åã«å¯Ÿããã¬ã€ãã³ã·ãé·ç§»é åºã®å€åããã£ãŠãæ£ããåäœãããã€æ¡åŒµå®¹æãªå®è£
ãåŸãããŸããããã¯ããã·ã¥éç¥ã»ãã£ãŒããªã³ã¯ã»å€éšèªèšŒã³ãŒã«ããã¯ãšãã£ãéåæãªå€éšããªã¬ãŒã宣èšç UI ã®äžã§æ±ããããããå Žé¢ã«é©çšããããã¿ãŒã³ã§ãã
ã¯ããã« ããã«ã¡ã¯ãéçºæ¬éšã§ããªãã·ã¥ãããã³ã® Android ã¢ããªéçºãæ
åœããŠãã岡ç°ã§ãã ã¢ããªãéçšããŠãããšããªãªãŒã¹ã®ãã³ã« Crashlytics ãšã«ããã£ãããæéãå¿
ãçºçããŸããã¯ã©ãã·ã¥ã®äžèЧãçºããŠãåªå
åºŠãæ±ºããŠãã¹ã¿ãã¯ãã¬ãŒã¹ãèªãã§ã該åœã³ãŒããæ¢ããŠãåå ãèããŠãçŽããããããšèªäœã¯æç¢ºãªã®ã§ãããããã·ã¥ããŒããšãšãã£ã¿ãè¡ãæ¥ããæäœæ¥ãå°å³ã«éããä»¶æ°ãå¢ãããšåŸåãã«ãªããã¡ã§ããã æ¬èšäºã§ã¯ãå
¬åŒã® Firebase MCP ãµãŒã㌠ãæäŸãã Crashlytics ããŒã«ã Claude Code ãã䜿ãããã®äžé£ã®æµãïŒããªã¢ãŒãž â åå åæ â 該åœã³ãŒãç¹å® â ä¿®æ£ PR ã®ãã©ããäœæïŒãåèªååãã話ã玹ä»ããŸããç¹å®ã®ç€Ÿå
äºäŸã«äŸåããªãã誰ã§ãåçŸã§ããæé ãšããŠãŸãšããŸãããAndroid / iOS ã§ Crashlytics ã䜿ã£ãŠããŠãAI ã³ãŒãã£ã³ã°ããŒã«ãæ¥åã«åã蟌ã¿ããæ¹ã®åèã«ãªãã°ããããã§ãã ç®æ¬¡ ã¯ããã« èæ¯ïŒã¯ã©ãã·ã¥å¯Ÿå¿ã®ã©ããæéã Firebase Crashlytics MCP ãšã¯ ã»ããã¢ãã åæ Claude Code ãžã® MCP ç»é² ã¯ã©ãã·ã¥å¯Ÿå¿ãããŒïŒåèªååã®äžèº« 1. ããªã¢ãŒãžïŒäžäœã¯ã©ãã·ã¥ãäžèЧãã 2. æ·±æãïŒã¹ã¿ãã¯ãã¬ãŒã¹ãšçºçç¶æ³ãååŸ 3. çªãåããïŒåå 仮説ãšè©²åœã³ãŒãã®ç¹å® 4. ä¿®æ£ãš PR ãã©ããäœæ éçšããŠã㊠/ ã€ãŸã¥ããã€ã³ã ããŒã«ã¯ --only crashlytics ã§çµã CI / ãµãŒãã¹ã¢ã«ãŠã³ãèªèšŒã§ã¯ 404 ã«æ³šæ ãã©ãããã©ãŒã ã«ãã£ãŠããŒã«ãåºãªãããšããã Experimental ããã®ããŒãžã§ã³åºå® ã©ããŸã§ä»»ãããïŒâåâ ã®ç·åŒãïŒ ãŸãšã åèãªã³ã¯ èæ¯ïŒã¯ã©ãã·ã¥å¯Ÿå¿ã®ã©ããæéã ã¯ã©ãã·ã¥å¯Ÿå¿ãã®ãã®ã¯é£ããäœæ¥ã°ããã§ã¯ãããŸãããããããæéãã®å€ãã¯ã倿ãšå€æã®ããã ã«ããç§»åã³ã¹ãã§ãããå
·äœçã«ã¯æ¬¡ã®ãããªãšããã§ãã ããŒã«ã®åŸåŸ© ïŒCrashlyticsïŒãã©ãŠã¶ïŒã§ã¯ã©ãã·ã¥ã確èªãããšãã£ã¿ã«æ»ã£ãŠè©²åœç®æãæ¢ãããŸã Crashlytics ã«æ»ã£ãŠåœ±é¿ç¯å²ãèŠãããšããåŸåŸ©ãå€ãã ã¹ã¿ãã¯ãã¬ãŒã¹ãšã³ãŒãã®çªãåãã ïŒé£èªåãããã¹ã¿ãã¯ãã¬ãŒã¹ããåœãããã€ãããªããžããªã®è©²åœã³ãŒããŸã§èŸ¿ãã®ã¯ãæ
£ããŠããŠãå°å³ã«æéããããã ããªã¢ãŒãžã®å±äººæ§ ïŒãã©ã®ã¯ã©ãã·ã¥ããæãä»ããããã®å€æããèŠã人ã«ãã£ãŠãã¬ãã圱é¿ç«¯æ«ã»OS ããŒãžã§ã³ã»çºçæ°ãæ¯åæã§ç¢ºèªããã®ãé¢åã ãã®ãåŸåŸ©ããšãçªãåãããã AI ã«ä»»ããããã°ã人é㯠åå ã®å€æãšæçµã¬ãã¥ãŒ ã«éäžã§ããŸããããã§ MCP ã®åºçªã§ãã Firebase Crashlytics MCP ãšã¯ MCPïŒModel Context ProtocolïŒ ã¯ãAI ã¯ã©ã€ã¢ã³ãã«å€éšããŒã«ãããŒã¿ãœãŒã¹ãæ¥ç¶ããããã®å
±éèŠæ Œã§ããFirebase ã¯å
¬åŒã« Firebase MCP ãµãŒã㌠ãæäŸããŠããããã®äžã« Crashlytics çšã®ããŒã«çŸ€ãå«ãŸããŠããŸãã ãã®ãµãŒããŒã AI ã¯ã©ã€ã¢ã³ãã«ç¹ããšãããã·ã¥ããŒããéããªããŠããAI ãšã®å¯Ÿè©±ã®äžã§ã¯ã©ãã·ã¥ããŒã¿ãååŸã»æŽæ°ã§ããããã«ãªããŸãã察å¿ã¯ã©ã€ã¢ã³ã㯠Claude Code / Claude Desktop / Gemini CLI / Cursor / VS Code Copilot ãªã©å¹
åºããæ¬èšäºã§ã¯ Claude Code ã䜿ããŸãã å
¬åŒããã¥ã¡ã³ãæç¹ã§æäŸãããŠãã䞻㪠Crashlytics ããŒã«ã¯ä»¥äžã®ãšããã§ãã ããŒã«å åœ¹å² crashlytics_get_report æéãæ¡ä»¶ãæå®ããŠã¯ã©ãã·ã¥ã¬ããŒãïŒäžäœ issue ãªã©ïŒãååŸ crashlytics_get_issue ç¹å®ã® issue ã®è©³çްãååŸ crashlytics_list_events issue ã«çŽã¥ãã€ãã³ãïŒã¹ã¿ãã¯ãã¬ãŒã¹çïŒãäžèЧååŸ crashlytics_batch_get_events è€æ°ã€ãã³ãããŸãšããŠååŸ crashlytics_update_issue issue ã®ç¶æ
ïŒã¯ããŒãºçïŒãæŽæ° crashlytics_list_notes / crashlytics_create_note / crashlytics_delete_note issue ãžã®ã¡ã¢ã®åç
§ã»è¿œå ã»åé€ å ããŠã crashlytics:connect ãšãã察話çãªã¬ã€ãä»ãã¯ãŒã¯ãããŒãçšæãããŠããããã©ã®ã¯ã©ãã·ã¥ãåªå
ãã¹ããããšãã£ãçžè«ããŒã¹ã®äœ¿ãæ¹ãã§ããŸããGoogle I/O 2026 ã§ã¯ãããããæãã Crashlytics ã® Agent Skills ãçºè¡šãããIDE ããé¢ããã«ãããã°æ¯æŽãåããããæ¹åã«é²ãã§ããŸãã â æ³šæ ïŒCrashlytics ã® MCP æ©èœã¯ ExperimentalïŒå®éšçïŒ ã§ããSLA ãéæšå¥šããªã·ãŒã®å¯Ÿè±¡å€ã§ãããŒã«åãæåãå€ããå¯èœæ§ããããŸããæ¬èšäºã®å
容ãå·çæç¹ïŒ2026 幎 6 æïŒã®ãã®ã§ãã ã»ããã¢ãã åæ Node.js / npmïŒFirebase CLI ã®ã€ã³ã¹ããŒã«ã«äœ¿çšïŒ Firebase CLI ãã€ã³ã¹ããŒã«ããèªèšŒæžã¿ã§ããããšãFirebase MCP ãµãŒããŒã¯ Firebase CLI ãšåãèªèšŒæ
å ± ã䜿ããŸããæªå°å
¥ãªã以äžãå®è¡ããŸãã # Firebase CLI ãã€ã³ã¹ããŒã«ïŒæªå°å
¥ã®å ŽåïŒ npm install -g firebase-tools # ããŒãžã§ã³ç¢ºèª firebase --version # ãã°ã€ã³ïŒMCP ãµãŒããŒã¯ãã®èªèšŒæ
å ±ã䜿ãïŒ firebase login Claude Code ãžã® MCP ç»é² ã€ã³ã¹ããŒã«æžã¿ã® Firebase CLI ãªããMCP ãµãŒããŒã¯æ¬¡ã®ã³ãã³ãã§èµ·åããŸãã firebase mcp --dir /path/to/your/project Claude Code ã«ã¯ .mcp.json ïŒãããžã§ã¯ãçŽäžïŒã§ç»é²ããã®ãæè»œã§ããã¯ã©ãã·ã¥å¯Ÿå¿çšéã§ããã°ãåŸè¿°ã®çç±ãã --only crashlytics ã§ããŒã«ãçµã ã®ãããããã§ãã { "mcpServers": { "firebase": { "command": "firebase", "args": [ "mcp", "--only", "crashlytics", "--dir", "/path/to/your/project" ] } } } CLI ããç»é²ããå Žåã¯æ¬¡ã®åœ¢ã§ãåãããšãã§ããŸãã claude mcp add firebase -- firebase mcp --only crashlytics ã°ããŒãã«ã€ã³ã¹ããŒã«ãé¿ãããå Žåã¯ãå
¬åŒããã¥ã¡ã³ãã®ãšãã npx -y firebase-tools@latest mcp ... ïŒ command ã npx ãå
é ã® args ã« -y firebase-tools@latest ïŒã§ãèµ·åã§ããŸãã ç»é²åŸãClaude Code ã§ /mcp ãå®è¡ãã firebase ãµãŒããŒãš crashlytics_* ããŒã«ãèªèãããŠããã°æºåå®äºã§ãã ã¯ã©ãã·ã¥å¯Ÿå¿ãããŒïŒåèªååã®äžèº« ãããããæ¬é¡ã§ããClaude Code ã«èªç¶èšèªã§äŸé Œããã ãã§ãããŒã«åŒã³åºã â åæ â ã³ãŒãä¿®æ£ â PR ãã©ãããŸã§ãéãã§ãã£ãŠããããŸãããããŒå
šäœã¯æ¬¡ã®ã€ã¡ãŒãžã§ãã 1. ããªã¢ãŒãžïŒäžäœã¯ã©ãã·ã¥ãäžèЧãã ãŸãã¯ãä»ãã¡ã°ãå¹ãã¯ã©ãã·ã¥ããæŽãåºããŸãã çŽè¿ 7 æ¥éã§çºçæ°ãå€ãã¯ã©ãã·ã¥ãäžäœ 5 ä»¶ã圱é¿ãŠãŒã¶ãŒæ°ãš OS ããŒãžã§ã³ååžã€ãã§äžèЧã«ããŠãåªå
床ã®é«ãé ã«äžŠã¹ãŠã Claude 㯠crashlytics_get_report ãåŒã³ãçµæã衚ã«ãŸãšããŠãããŸããçºçæ°ã ãã§ãªã圱é¿ãŠãŒã¶ãŒæ°ã端æ«ååžãŸã§äžåºŠã«äžŠã¶ã®ã§ãããŸãäœããçŽãããããã®å Žã§å€æã§ããŸãã 2. æ·±æãïŒã¹ã¿ãã¯ãã¬ãŒã¹ãšçºçç¶æ³ãååŸ åªå
床ã®é«ã issue ã 1 ä»¶éžã³ã詳现ãåãã«è¡ããŸãã 1 ä»¶ç®ã® issue ã®è©³çްãååŸããŠã代衚çãªã¹ã¿ãã¯ãã¬ãŒã¹ãšãçºçããŠãã端æ«ã»OSã»ã¢ããªããŒãžã§ã³ã®åŸåãæããŠã ããã§ã¯ crashlytics_get_issue ãš crashlytics_list_events ïŒå¿
èŠã«å¿ã㊠crashlytics_batch_get_events ïŒãåŒã°ããŸãããç¹å® OS ããŒãžã§ã³ã ãã§èµ·ããŠããããç¹å®ã®ç»é¢é·ç§»çŽåŸã«å€ãããšãã£ããåå ã®åœãããã€ããããã®ææãæããŸãã 3. çªãåããïŒåå 仮説ãšè©²åœã³ãŒãã®ç¹å® ãããæäœæ¥ã§ãã¡ã°ãé¢åã ã£ãéšåã§ããClaude Code ã¯ãªããžããªã®ã³ãŒããèªããã®ã§ãã¹ã¿ãã¯ãã¬ãŒã¹ãšãœãŒã¹ãçªãåãããŠããããŸãã ãã®ã¹ã¿ãã¯ãã¬ãŒã¹ã«å¯Ÿå¿ããã³ãŒãããªããžããªããç¹å®ããŠãã¯ã©ãã·ã¥ã®åå 仮説ãç«ãŠãŠãnull å®å
šã lifecycle åšãã®åé¡ãããã°ææããŠã ã¹ã¿ãã¯ãã¬ãŒã¹ã®è©²åœã¯ã©ã¹ã»ã¡ãœãããããœãŒã¹ã®è¡ãŸã§èŸ¿ãããããã§ nullable ãªå€ã !! ã§åç
§ããŠããŠãç¹å®æ¡ä»¶ã§ null ã«ãªãããããšãã£ãç²åºŠã§åå 仮説ãåºããŠãããŸãã 4. ä¿®æ£ãš PR ãã©ããäœæ åå ã«çŽåŸã§ããããä¿®æ£ãš PR ãŸã§äžæ°ã«äŸé ŒããŸãã åå ä»®èª¬ã«æ²¿ã£ãŠä¿®æ£æ¡ãäœã£ãŠãä¿®æ£ããããã©ã³ããåã£ãŠã倿Žå
容ãšåå ã»å¯Ÿå¿ã説æãã PR ããã©ããã§äœæããŠã Claude Code ãã³ãŒããä¿®æ£ãã gh pr create --draft ã§ãã©ãã PR ãŸã§äœã£ãŠãããŸããPR æ¬æã«ã¯ãã©ã®ã¯ã©ãã·ã¥ã«å¯Ÿå¿ãããããåå ããä¿®æ£å
容ããæŽçãããç¶æ
ã§å
¥ãã®ã§ãã¬ãã¥ãŒäŸé Œã®æåãŸã§äžæ°ã«é²ã¿ãŸãã éçšããŠã㊠/ ã€ãŸã¥ããã€ã³ã å®éã«åãããšãããã€ãåŒã£ããããããç¹ããããŸããå
ã«å
±æããŠãããŸãã ããŒã«ã¯ --only crashlytics ã§çµã Firebase MCP ãµãŒããŒã¯ Crashlytics 以å€ã«ãå€ãã®ããŒã«ãæã£ãŠããŸãããããžã§ã¯ãã®ããŒã¿éãå€ããšãèµ·åæã®ããŒã«äžèЧååŸïŒ tools/list ïŒã§ã¿ã€ã ã¢ãŠããã¡ã¢ãªäžè¶³ãèµ·ããããšãå ±åãããŠããŸãïŒ firebase-tools #9663 ïŒãã¯ã©ãã·ã¥å¯Ÿå¿ã«çšéãçµããªããæåãã --only crashlytics ãä»ããŠããŒã«ãéå®ããŠããã®ãå®å
šã§ããåäœã軜ããªããŸãã CI / ãµãŒãã¹ã¢ã«ãŠã³ãèªèšŒã§ã¯ 404 ã«æ³šæ ããŒã«ã«ã® firebase login ã§ã¯åé¡ãªãåãã®ã«ãCI ç°å¢ã§ãµãŒãã¹ã¢ã«ãŠã³ãã Workload Identity FederationïŒWIFïŒã䜿ããšã crashlytics_get_report ããHTTP 404, Method not foundãã§å€±æãããšããå ±åããããŸãïŒ #10310 / #10004 ïŒãåãç°å¢ã§ã firebase login:ci ã§ååŸããããŒã¯ã³ãªãéãããšããåé¿çãå
±æãããŠããŸããCI ã«çµã¿èŸŒãåæãªããèªèšŒæ¹åŒã®æ€èšŒã¯æ©ãã«ãã£ãŠãããšããã§ãã ãã©ãããã©ãŒã ã«ãã£ãŠããŒã«ãåºãªãããšããã éå»ã«ã¯ iOS ãããžã§ã¯ãã§ Crashlytics ããŒã«ãèªèãããªãã±ãŒã¹ãå ±åãããŠããŸãïŒ #9495 ïŒãããŒã«ãèŠåœãããªããšãã¯ã --dir ã§æ£ãããããžã§ã¯ããæããŠããããšãfirebase-tools ãææ°ã§ããããšããŸã確èªããŠãã ããã Experimental ããã®ããŒãžã§ã³åºå® åè¿°ã®ãšãã Crashlytics MCP 㯠Experimental ã§ããåžžã«ææ°ã® firebase-tools ã䜿ã£ãŠãããšãããæ¥ããŒã«åãåŒæ°ãå€ãã£ãŠæé ãåããªããªãå¯èœæ§ããããŸããããŒã ã§å
±æãããªãã npm install -g firebase-tools@<version> ã®ããã« firebase-tools ã®ããŒãžã§ã³ãåºå®ããŠéçšããã»ããå®å®ããŸãã ã©ããŸã§ä»»ãããïŒâåâ ã®ç·åŒãïŒ ãããŸã§ãåãèªååã«ãšã©ããŠããã®ã«ã¯çç±ããããŸããã¯ã©ãã·ã¥ã®åå 仮説ã¯èª¬åŸåããã£ãŠãééã£ãŠããããšããããŸãããä¿®æ£ãã»ãã®æåã«åœ±é¿ããªããã®æçµå€æã¯äººéã®è²¬ä»»ã§ãã ä»åã®éçšã§ã¯ã Claude ã¯ææ¡è
ã人éã¯æ¿èªè
ãšãã圹å²åæ
ã厩ããŠããŸãããPR ããã©ããã§äœããšãããŸã§ã AI ã«ä»»ããã¬ãã¥ãŒãšããŒãžã¯å¿
ã人ãè¡ããŸããããªã¢ãŒãžãšçªãåãããšãããéãããã©å€æã®å°ãªãäœæ¥ããè©ä»£ããããŠãããã人ã¯å€æã«éäžããââãã®ç·åŒãããããŸã®ãšãããã¡ã°ãå¿å°ããåã£ãŠããŸãã ãŸãšã å
¬åŒã® Firebase MCP ãµãŒããŒãš Claude Code ãçµã¿åãããããšã§ãã¯ã©ãã·ã¥å¯Ÿå¿ã®ããªã¢ãŒãžããåå åæã該åœã³ãŒãã®ç¹å®ãä¿®æ£ PR ãã©ããäœæãŸã§ãéãã§åèªååã§ããŸãããããã·ã¥ããŒããšãšãã£ã¿ã®åŸåŸ©ãæžããåŸåãã«ããã¡ã ã£ãã¯ã©ãã·ã¥å¯Ÿå¿ã®è
°ã軜ããªã£ãã®ãäžçªã®å¹æã§ãã ãŸã Experimental ãªæ©èœãªã®ã§éä¿¡ã¯çŠç©ã§ãããäžäœã¯ã©ãã·ã¥ã®å®æããªã¢ãŒãžãä»çµã¿åãããªã©ã䌞ã°ããäœå°ã¯ãŸã ãŸã ããããã§ããåãããã« Crashlytics éçšã«æéãæããŠããæ¹ã¯ããŸã --only crashlytics ã§ç¹ãã§ã¿ããšãããã詊ããŠã¿ãŠãã ããã æåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ åèãªã³ã¯ firebase.google.com firebase.google.com firebase.blog firebase.blog modelcontextprotocol.io
Goã® import cycle not allowed ãåºããŠããã®ã¯ã³ã³ãã€ã©ãããªã ããã«ã¡ã¯ã uho-wq ã§ãã æ©éã§ããã以äžã®ãœãŒã¹ã³ãŒãããã«ããããšã©ã®ãããªçµæã«ãªãã§ããããïŒ # ãã£ã¬ã¯ããªæ§æ $ tree . . âââ a â âââ a.go âââ b â âââ b.go âââ go.mod 3 directories, 3 files // ./a/a.go package a import ( "example.com/cycle/b" ) func A() string { return b.B() } // ./b/b.go package b import ( "example.com/cycle/a" ) func B() string { return a.A() } çãã¯äžèšã®ããã«ããã±ãŒãžã®åŸªç°åç
§ã«ãããšã©ãŒ ( import cycle not allowed )ãåºãŸãã $ go build ./... package example.com/cycle/a imports example.com/cycle/b from a.go imports example.com/cycle/a from b.go: import cycle not allowed ãã«ãã®ãã°ãèŠãŠããããéãã a.go ãããã±ãŒãž b ãã b.go ãããã±ãŒãž a ãimportããŠãããããäŸåé¢ä¿ã埪ç°ããŠããŸã£ãŠããããšãããããšæããŸãã Goèšèªã§ã¯åäžããã±ãŒãžå
ã§ã¯ãã¡ã€ã«éã®åŸªç°äŸåã蚱容ãããŠããŸãããããã±ãŒãžéã®åŸªç°äŸåã¯çŠæ¢ãããŠããŸãã ã§ã¯æ¬¡ã«ãGoã«ãããã©ã®åŠçããã®ãšã©ãŒãåããŠãããšæããŸããïŒ çãã¯ã³ã³ãã€ã© ( cmd/compile )ãã§ã¯ãªãgoã³ãã³ã ( cmd/go )ãªã®ã§ãã å®éã«ãšãã£ã¿ã§ç¢ºèªããŠèŠããšãLSPã®diagnosticsããšã©ãŒãåããŠããã®ã§ãã³ã³ãã€ã«ããåã®æ®µéã§æ€ç¥ãããŠããããšã確ãã«ããããŸãã LSP diagnostics 2026幎3æã«The Go Blogã§å
¬éããã Type Construction and Cycle Detection ã§ã¯ãGoã®ã³ã³ãã€ã«æã«ãããåãã§ãã¯ã«ã€ããŠèšåãããŠããŸããã ãã ãããã®åãã§ãã¯ã¯Goã³ã³ãã€ã©å
ã§è¡ãããŠããããä»åèšåãããããã±ãŒãžã®åŸªç°åç
§ãšã¯å¥ã®ä»çµã¿ã§ãããšããããšãããããŸãã ãã®èšäºã§ã¯Go 1.26.0ã®ãœãŒã¹ã³ãŒããå®éã«èŸ¿ããªããã cmd/go ã§ã©ã®ããã« import cycle not allowed ãæ€åºããŠããã®ãã远ã£ãŠãããŸãã importãã¹ãååŸãã ããã±ãŒãžã埪ç°åç
§ããŠããããæ€èšŒããããã«ããŸã import "..." ã®å®£èšå
容ãååŸããå¿
èŠããããŸãã ãã®importã®å®£èšååŸã¯AST (æœè±¡æ§ææš)ã«ãã£ãŠè¡ãããŸãã import 宣èšã¯æ§æè§£æããããš ast.ImportSpec ãšãã AST ããŒãã«ãªãããã¹æåå㯠(*ast.ImportSpec).Path.Value ã«å
¥ããŸãã go/build ã¯ãã® AST ãèµ°æ»ã㊠import ãã¹ã®ã¹ã©ã€ã¹ãéããŸãã // src/go/build/read.go at readGoInfo info.parsed, _ = parser.ParseFile(info.fset, info.name, info.header, parser.ImportsOnly|parser.ParseComments) for _, decl := range info.parsed.Decls { d, ok := decl.(*ast.GenDecl) if !ok { continue } for _, dspec := range d.Specs { spec, ok := dspec.(*ast.ImportSpec) // â import 宣èšã® AST ããŒã if !ok { continue } path, _ := strconv.Unquote(spec.Path.Value) info.imports = append (info.imports, fileImport{path, spec.Pos(), doc}) } } ã¡ãªã¿ã« (*ast.ImportSpec).Path.Value ã® importãã¹ã«ã¯ããã«ã¯ã©ãŒããŒã·ã§ã³ ( " )ãå«ãŸããŠããŸããã strconv.Unquote ã§åé€ããŠããŸãã äŸåãæ¢çŽ¢ãã importãã¹ã®ã¹ã©ã€ã¹ãååŸã§ããã®ã§ãããããã¯å®éã«importãã¹ãèµ·ç¹ã«æ¢çŽ¢ãè¡ããŸãã ã³ã¢ãšãªãããžãã¯ã¯ cmd/go/internal/load/pkg.go ã®ä»¥äžã®é¢æ°ãã¡ãœããã§ãã loadImport : import ã1ã€è§£æ±ºããŠããã®å
ã®ããã±ãŒãžãè¿ã颿°ãåããŠèŠãããã±ãŒãžãªã (*Package).load ãåŒã¶ (*Package).load : ããã±ãŒãžã1ã€èªã¿èŸŒã颿°ããã®ããã±ãŒãžã®å
š import ãé ã« loadImport ã§è§£æ±ºããæåŸã«äŸåãªã¹ãã確å®ãã ããããååž°çã«åŒã³åãããšã«ãã£ãŠãimportãã¹ã®äŸåé¢ä¿ãæ·±ãåªå
æ¢çŽ¢ (Depth-First Search: DFS)ã§èŸ¿ã£ãŠãããŸãã ãšã¯èšã£ããã®ã®ãå°ãè€éã§åããã¥ããã®ã§å®éã®ãœãŒã¹ã³ãŒããã远ã£ãŠãããŸãã äžèšã¯ (*Package).load ã®ãœãŒã¹ã³ãŒãã®æç²ã§ãã // src/cmd/go/internal/load/pkg.go at (*Package).load imports := make ([]*Package, 0 , len (p.Imports)) for i, path := range importPaths { p1, _ := loadImport(..., path, ...) imports = append (imports, p1) ... } p.Internal.Imports = imports importãã¹ããšã« loadImport ãåŒã³ã解決ãçµããimportsã®ã¹ã©ã€ã¹ãæçµçã« p.Internal.Imports ãžæ ŒçŽããŠããããšãããããŸãã ã§ã¯æ¬¡ã« loadImport ãèŠãŠã¿ãŸãããã // src/cmd/go/internal/load/pkg.go at loadImport func loadImport(..., path string , ..., stk *ImportStack, ...) (*Package, *PackageError) { bp, _, err := loadPackageData(...) importPath := bp.ImportPath p := packageCache[importPath] // ãã£ãã·ã¥ãåŒã if p != nil { stk.Push(...); p = reusePackage(p, stk); stk.Pop() // 埪ç°äŸåå€å® } else { p = new (Package); p.ImportPath = importPath packageCache[importPath] = p // ãã£ãã·ã¥ç»é² p.load(..., bp, err) // å床 (*Package).load ãåŒã¶ } ... return p, nil } ããã§ã¯ãã£ãã·ã¥ ( packageCache )ãçšããããŠããããšãããããŸãã ãã®ãã£ãã·ã¥ã¯ã¡ã¢åãšåŸªç°äŸåã®å€å®ãšãã2ã€ã®çšéãæã¡ãŸãã ã¡ã¢å: ããŒãæžã¿ããã±ãŒãžã®åããŒããé²ã 埪ç°äŸåå€å® ( reusePackage ): ãã£ãã·ã¥ããããããã¹ãã¹ã¿ãã¯ãããã¹ã®ããããã«æ»ã£ãŠããããå€å®ãã ãã£ãã·ã¥ãããããªãã£ãå Žåã«ã¯å床 (*Package).load ãåŒã¶ããšã«ãã£ãŠååž°çãªæ¢çŽ¢ãè¡ã£ãŠããŸãã 埪ç°äŸåå€å® ãã£ãã·ã¥ããããããã¹ã«å¯Ÿã㊠reusePackage ã«ãã£ãŠåŸªç°äŸåå€å®ãè¡ããŸãã // src/cmd/go/internal/load/pkg.go (reusePackage) func reusePackage(p *Package, stk *ImportStack) *Package { // We use p.Internal.Imports==nil to detect a package that // is in the midst of its own loadPackage call ... if p.Internal.Imports == nil { // ãã®éšå if p.Error == nil { p.Error = &PackageError{ ImportStack: stk.Copy(), Err: errors.New( "import cycle not allowed" ), IsImportCycle: true , } } p.Incomplete = true } return p } p.Internal.Imports 㯠loadImport ãš (*Package).load ãçžäºååž°çã«åŒã³åºããŠããéœåäžãèµ·ç¹ãšãªãimportãã¹ã«å¯ŸããŠæãæ·±ãäŸåé¢ä¿ãŸã§æ¢çŽ¢ããŠåããŠénilã«ãªããŸãã ä»åäŸã«ããã埪ç°äŸå㯠a â b â a ã®çµè·¯ã蟿ãã®ã§ãæåã® a ã«å¯ŸããŠã®æ¢çŽ¢ã解決ããå ( p.Internal.Imports == nil )ã«å床 a ããã£ãã·ã¥ããããããã import cycle not allowed ãšããŠèããããšãã§ããããã§ãã ã¡ãªã¿ã«ã蟿ã£ãçµè·¯ã¯ãã¹ãŠ ImportStack ã«ã¹ã¿ãã¯ãšããŠä¿æãããŠããŸãã // src/cmd/go/internal/load/pkg.go type ImportStack []ImportInfo func (s *ImportStack) Push(p ImportInfo) { *s = append (*s, p) } func (s *ImportStack) Pop() { *s = (*s)[ 0 : len (*s)- 1 ] } func (s *ImportStack) Copy() ImportStack { return slices.Clone(*s) } 埪ç°äŸåã®ãšã©ãŒãè¿ãéã«ã ImportStack ãPackageErrorã«å«ããŠè¿ãããšã«ãã£ãŠããã«ãã®ãšã©ãŒãã°ã«çµè·¯ãå«ããŠè¡šç€ºããäºãå¯èœãšãªã£ãŠããŸãã ⯠go build ./... package example.com/cycle/a imports example.com/cycle/b from a.go imports example.com/cycle/a from b.go: import cycle not allowed ãããã« ãããŸã§ import cycle not allowed ã®åºã©ããã«ã€ããŠè¿œã£ãŠããŸããããšã©ãŒãåããŠããã®ã¯ã³ã³ãã€ã© ( cmd/compile ) ã§ã¯ãªã go ã³ãã³ã ( cmd/go ) ã§ããã ä»çµã¿ã¯ã go/build ã AST ãã import ãã¹ãåãåºãã loadImport ãš (*Package).load ãçžäºååž°ã§æ·±ãåªå
æ¢çŽ¢ããæ¢çŽ¢äžã«åäžããã±ãŒãžããã£ãã·ã¥ãããããå Žåã«åŸªç°åç
§ãšããŠå€å®ããŠããããšãããããŸããã
ã¯ããã« ããã«ã¡ã¯ãéçº1éšã§é£äºç®¡çã¢ããªãã«ã·ã«ã®éçºãããŠããæ°è°·ã§ãã ãã€ãšããã»é£äºç®¡çã»äœé管çã»ã«ããªãŒèšç® - ãã«ã·ã« every, Inc. ãã«ã¹ã±ã¢ïŒãã£ãããã¹ ç¡æ apps.apple.com ä»åã¯ãiOSã¢ããªã®åºå广ãã©ãèšæž¬ãããŠããã®ãããã¢ããªãã¥ãŒã·ã§ã³ããŒã« Adjust ãéããŠèª¿ã¹ãŠã¿ãŸããã iOSéçºãå§ããŠå幎ã»ã©çµã¡ãŸããããAdjustã¯åºåå¹æãæž¬å®ããããã®ããŒã«çšåºŠã®èªèãããªããæ¹ããŠä»çµã¿ãçè§£ããŠã¿ãããšæã£ãã®ããã£ããã§ããæ£çŽããã¹ãŠã现ãã远ããããã§ã¯ãªãã®ã§ããã調ã¹ãŠåãã£ãç¯å²ãæŽçããŠã¿ãŸãã åºåã¢ããªãã¥ãŒã·ã§ã³ã®å
šäœå ããããã¢ããªãã¥ãŒã·ã§ã³ãšã¯ããŠãŒã¶ãŒãã©ã®åºåçµç±ã§ã¢ããªãã€ã³ã¹ããŒã«ã»å©çšããããç¹å®ããããšã§ããã©ã®åºåã广çã ã£ãããç¥ãããã«äœ¿ãããŸãã Adjustã§åºå广ãèšæž¬ãããšããèšæž¬ã¯å€§ãã2ã€ã®ç³»çµ±ã«åãããŸãã Adjustèªèº«ã®ã¢ããªãã¥ãŒã·ã§ã³ãã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ãšã€ã³ã¹ããŒã«ãçªãåãããŠå€å®ããŸããATTïŒApp Tracking TransparencyïŒã®åæç¶æ³ããããã¯ãŒã¯ã®çš®é¡ã«ãã£ãŠãå€å®ææ³ãå€ãããŸãã SKAdNetworkã«ããèšæž¬ãOSãå¿åã§èšæž¬ããä»çµã¿ã§ããŠãŒã¶ãŒã®åæããªããŠãåºåçµç±ã®ã€ã³ã¹ããŒã«ãèšæž¬ã§ããŸããAdjustã§ã¯ãèªåã®ã¢ããªãã¥ãŒã·ã§ã³ãšã¯å¥ã®ããŒã¿ãšããŠæ±ãããŸãïŒ Adjust: SKAdNetwork ïŒã ãã®2ã€ã¯å¥ã®çµè·¯ã§ããåè
ã¯ãŠãŒã¶ãŒåäœã®èå¥åã§ããIDFAïŒIdentifier for AdvertisersïŒã䜿ãããã©ãããéµã«ãªããåŸè
ã¯OSãå¿åã§èšæž¬ããããåæããªããŠãåããŸãã以éããŸãåæãšãªãIDFAãšATTã確èªããŠãããããããã®èšæž¬ãèŠãŠãããŸãã IDFAãšATTã«ã€ã㊠iOSã®åºåèšæž¬ã®äžå¿ã«ããã®ã IDFA ã§ããããã¯ããã€ã¹ããšã®åºåçšIDã§ãããã䜿ããšãã©ã®åºåãèŠããŠãŒã¶ãŒãã€ã³ã¹ããŒã«ãããããŠãŒã¶ãŒåäœã§è¿œè·¡ã§ããŸãã iOS 14.5以éããã®IDFAãžã®ã¢ã¯ã»ã¹ã«ã¯ ATT ã«ããæç€ºçãªåæãå¿
é ã«ãªããŸãããATTã¯ãã¢ããªããŠãŒã¶ãŒã远跡ããåã«åæãã€ã¢ãã°ã§èš±å¯ãæ±ããããšã矩åã¥ãããAppleã®ä»çµã¿ã§ãã åæç¶æ³ã¯ ATTrackingManager.trackingAuthorizationStatus ããååŸã§ããå€ã¯æ¬¡ã®4ã€ã§ãïŒ Apple: ATTrackingManager.AuthorizationStatus ïŒã notDetermined : ãŸã åæãã€ã¢ãã°ãåºããŠããªãç¶æ
authorized : ãŠãŒã¶ãŒãèš±å¯ããç¶æ
denied : ãŠãŒã¶ãŒãæåŠããç¶æ
restricted : ãŠãŒã¶ãŒãåæã»æåŠãéžã¹ãªãç¶æ
ïŒã¹ã¯ãªãŒã³ã¿ã€ã ãªã©ã§å¶éãããŠããå ŽåïŒ èš±å¯ãåŸãããªãå ŽåãIDFAã¯ãã¹ãŠãŒãã®ãããŒå€ã«ãªãããŠãŒã¶ãŒåäœã®è¿œè·¡ã¯ã§ããŸããã 1. Adjustã®ã¢ããªãã¥ãŒã·ã§ã³ææ³ Adjustã®ãããªã¢ããªãã¥ãŒã·ã§ã³ããŒã«ïŒMMP: Mobile Measurement PartnerïŒã¯ãåºåã®ã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ãšã€ã³ã¹ããŒã«ãçªãåãããŠãã©ã®åºåãå¹ããããå€å®ããŸãããã®å€å®ã®ææ³ããATTã®åæç¶æ³ãšãããã¯ãŒã¯ã®çš®é¡ã«ãã£ãŠå€ãããŸãã 1-1. ATTã®åæãããå Žå ATTã®åæãåŸãããŠããŠIDFAãèªããå ŽåãAdjustã¯ç¢ºå®çã¢ããªãã¥ãŒã·ã§ã³ã䜿ããŸããåºåã®ã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ã®æç¹ãšãã€ã³ã¹ããŒã«ã®æç¹ã§ããããäžæã®IDãåéããäž¡è
ãäžèŽããã°ãã®ã€ã³ã¹ããŒã«ãåºåã«çµã³ã€ããããšããããã€ã¹ãããã³ã°ã®ææ³ã§ããAdjustã®èª¬æã§ã¯ãã¯ãªãã¯ããŒã¹ã®ãã®ã¯ã粟床ã100ïŒ
ã§ãæãä¿¡é Œæ§ã®é«ãã¢ããªãã¥ãŒã·ã§ã³ããšãããŠããŸãïŒ Adjust: ã¢ããªãã¥ãŒã·ã§ã³ææ³ ïŒã Adjustã䜿ãèå¥åã¯äž»ã«æ¬¡ã®ãã®ã§ãã åºåIDïŒiOSã®IDFAïŒ: ãŠãŒã¶ãŒããªã»ããã»å¶éã§ãããåºåçšã®ID ããã€ã¹IDïŒiOSã®IDFVãIdentifier for VendorïŒ: ããã€ã¹ã«æ°žç¶çã«çŽã¥ãIDãã¢ããªãã¥ãŒã·ã§ã³ç®çã§ã®ã¿äœ¿ããã Adjustã®ãªãã¡ã¬ã³ã¹ã¿ã°: ã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ããšã«çæãããäžæã®ID SANãšéSANã§ä»çµã¿ãéã åã確å®çã¢ããªãã¥ãŒã·ã§ã³ã§ãããããã¯ãŒã¯ã®çš®é¡ã«ãã£ãŠã誰ãçªãåãããè¡ãããå€ãããŸããåºåãããã¯ãŒã¯ã¯ãGoogleã»Metaã»TikTokãªã©ã®å€§æã§èªåã§ã¢ããªãã¥ãŒã·ã§ã³ãè¡ã SANïŒSelf-Attributing Networkãèªå·±ã¢ããªãã¥ãŒã·ã§ã³ãããã¯ãŒã¯ïŒãšããã以å€ã®éåžžã®ãããã¯ãŒã¯ïŒéSANïŒã®2çš®é¡ã«åãããŸãïŒ Adjust: Self-Attributing Network ïŒã SAN: ã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ã®ããŒã¿ãèªåããã¯å
±æããŸããã代ããã«ãAdjustãSDKçµç±ã§ååŸããåºåIDãéã£ãŠããã®ãåŸ
ã¡ãèªç€Ÿãæã€ããŒã¿ãšçªãåãããŠå€å®ããŸãã éSANïŒéåžžã®ãããã¯ãŒã¯ïŒ: åºåIDãå«ãã¯ãªãã¯ãã€ã³ãã¬ãã·ã§ã³ã®ããŒã¿ããAdjustã®ãããªã¢ããªãã¥ãŒã·ã§ã³ããŒãããŒã«éããŸããAdjustããããã€ã³ã¹ããŒã«ãšçªãåãããŠå€å®ããŸãã ã€ãŸããSANã¯Adjustãããããã¯ãŒã¯ãžãéSANã¯ãããã¯ãŒã¯ããAdjustãžãšãããŒã¿ãéãåããéã«ãªããŸããçªãåãããè¡ãã®ããSANã¯ãããã¯ãŒã¯åŽãéSANã¯Adjustã§ãã å³ã«ãããšããããããããªããŸãã SANïŒãããã¯ãŒã¯ãçªãåãããïŒ éSANïŒAdjustãçªãåãããïŒ 1-2. ATTã®åæããªãå Žå ATTã§åæãåŸãããªããšIDFAã¯ãŒãå€ã«ãªããããIDFAã䜿ã£ã確å®çã¢ããªãã¥ãŒã·ã§ã³ã¯ã§ããŸããããã®å Žåã®æ±ãã¯ããããã¯ãŒã¯ã®çš®é¡ã§åãããŸãã éSANïŒéåžžã®ãããã¯ãŒã¯ïŒã®å Žå éSANã§ã¯ããã®ä»£ããã«ç¢ºççã¢ããªã³ã°ïŒããã€ã¹IDã䜿ããçµ±èšçã«æšå®ããææ³ïŒãSKAdNetworkã䜿ããããšãAdjustã®ããã¥ã¡ã³ãã§èª¬æãããŠããŸãïŒ Adjust: ATTãã¬ãŒã ã¯ãŒã¯ ïŒã SANã®å ŽåïŒAppleãé€ãïŒ SANïŒAppleãé€ãïŒã§ã¯ããããã¯ãŒã¯åŽãã¯ãªãã¯ãªã©ã®ããŒã¿ãAdjustã«æž¡ããªããããéSANã®ãããªç¢ºççã¢ããªã³ã°ã¯äœ¿ããŸãããAdjustã®ããã¥ã¡ã³ãã§ããApple Search Adsãé€ãããŠãŒã¶ãŒã®æµå
¥å
ãšããŠAPI飿ºããŒãããŒã«çŽä»ããããšã«å¶éãããããšãããŠããŸãïŒ Adjust: ATTãã¬ãŒã ã¯ãŒã¯ ïŒããŸããIDFAã®å
±æã«ãªããã€ã³ããŠããªãiOSããã€ã¹ã®ã€ã³ã¹ããŒã«ã«ã€ããŠã¯ãSKAdNetworkã®éèšããŒã¿ã䜿ã£ãŠèšæž¬ããããšã«ãªããšèª¬æãããŠããŸãïŒ Adjust: Self-Attributing Network ïŒã 1-3. Appleåºåã®å Žå AppleåºåïŒApple Search AdsïŒã ãã¯ãä»ã®ãããã¯ãŒã¯ãšã¯å¥ã®çµè·¯ã§èšæž¬ãããŸããAppleã®AdServices frameworkãšããµãŒããŒåŽããåŒã¶APIãçµã¿åããã Apple Ads Attribution API ãšããä»çµã¿ã§ãïŒ Apple: AdServices ïŒã Appleã®ããã¥ã¡ã³ãã§ã¯ãã¢ããªãã¥ãŒã·ã§ã³ååŸã®æµããæ¬¡ã®ããã«èª¬æãããŠããŸãã ã¢ããªã AdServices framework ã«ããŒã¯ã³ããªã¯ãšã¹ããã framework ãããŒã¯ã³ãçæããŠè¿ã ãã®ããŒã¯ã³ã䜿ã£ãŠãAPIã§Appleã®ã¢ããªãã¥ãŒã·ã§ã³ãµãŒããŒã«ãªã¯ãšã¹ããã ãã£ã³ããŒã³ã«å¯Ÿå¿ããã¢ããªãã¥ãŒã·ã§ã³æ
å ±ïŒ campaignId ã adGroupId ã keywordId ãªã©ïŒãè¿ã Adjust SDKã䜿ãå Žåã¯ããã®äžé£ã®ããåããSDKãæ
ããŸãã ã¬ã¹ãã³ã¹ã¯ãATTã®åæç¶æ³ã«ãã£ãŠ2ã€ã®ã¿ã€ãã«åãããŸãïŒ Adjust: Apple Adsã¢ããªãã¥ãŒã·ã§ã³ã®ä»çµã¿ ïŒã 詳现ïŒDetailedïŒ: ATTã«åæãããŠãŒã¶ãŒåãããšã³ã²ãŒãžã¡ã³ãã®æå»ïŒååäœïŒãŸã§å«ã æšæºïŒStandardïŒ: åæããªãã£ããŠãŒã¶ãŒåããæå»ã¯å«ãŸããªã ãã®ããã«ãAppleåºåã¯ATTã«åæããªããŠãæšæºã¬ã¹ãã³ã¹ã§èšæž¬ã§ããåæãããã°æå»ãŸã§å«ã詳现ãªããŒã¿ãåŸãããŸãã 2. SKAdNetworkã§ã®èšæž¬ ãããŸã§ã¯Adjustèªèº«ãè¡ãèšæž¬ã§ããããã1ã€ã®ç³»çµ±ããOSãæäŸããSKAdNetworkã§ãã SKAdNetworkã¯iOS 11.3ïŒ2018幎ïŒããæäŸãããŠããŸãããŠãŒã¶ãŒå人ãç¹å®ããã«åºåã®ææãèšæž¬ã§ãããããAppleãã€ã³ã¹ããŒã«èšæž¬ãOSåŽã§åŒãåããä»çµã¿ãšããŠå°å
¥ããŸãããiOS 14.5ã®ATTã§IDFAã®å©çšãå¶éãããŠããã¯ãåæããªããŠãææãèšæž¬ã§ããææ®µãšããŠéèŠãããããã«ãªã£ãããã§ãã SKAdNetworkã®èšæž¬ã«ã¯ãAdjustèªèº«ã®ã¢ããªãã¥ãŒã·ã§ã³ãšã¯éãããã€ãã®ç¹åŸŽããããŸãïŒ Adjust: SKAdNetwork ïŒã ãŠãŒã¶ãŒã®åæããªããŠãåãïŒOSãå¿åã§èšæž¬ããããïŒ Adjustãèšé²ããããã€ã¹ã¬ãã«ã®ããŒã¿ãšã¯å¥ç©ãšããŠæ±ããã ãªã¢ã«ã¿ã€ã ã§ã¯ãªããæçã§ã24æéã®é
å»¶ããã ã€ã³ã¹ããŒã«åŸã®è¡åã¯ã³ã³ããŒãžã§ã³å€ïŒ0ã63ã®å°ããªæ°å€ïŒãšããŠè¡šçŸããã ãããŸããªæµãã¯ãAppleãæçµçãªã³ã³ããŒãžã§ã³å€ã確å®ããåºåãããã¯ãŒã¯ã«éç¥ãããã¹ãããã¯ïŒææãç¥ãããéç¥ïŒãéãããããšãããã®ã§ãã ãªããSKAdNetworkã§èšæž¬ããã«ã¯ãã¢ããªéçºè
ããå©çšããåºåãããã¯ãŒã¯ã®IDã Info.plist ã® SKAdNetworkItems ã«ç»é²ããŠããå¿
èŠããããŸãïŒ Apple: SKAdNetworkItems ïŒãAdjust SDKèªäœã«ã¯SKAdNetworkã®ãµããŒããå«ãŸããŠãããã³ã³ããŒãžã§ã³å€ã¯Adjustã®ç®¡çç»é¢ã§èšå®ãããããã³ã°ã«åŸã£ãŠåŠçãããŸãïŒ Adjust: SKAdNetwork ïŒã ãã®ããã§ãAdjustããã®ãã¹ãããã¯ãåãåãçµè·¯ã«ã¯ã2ã€ã®ãã¿ãŒã³ããããŸãã 2-1. ãããã¯ãŒã¯çµç±ã®ãã¹ããã㯠1ã€ç®ã¯ãåºåãããã¯ãŒã¯ãçµç±ããçµè·¯ã§ããAppleãæçµçãªã³ã³ããŒãžã§ã³å€ã確å®ãããšããŸãåºåãããã¯ãŒã¯ã«éç¥ãå±ããŸãããã®éç¥ãåããåºåãããã¯ãŒã¯ããAdjustã«ããŒã¿ãå«ããã¹ãããã¯ãéããŸãïŒ Adjust: SKAdNetwork ïŒã ãã®çµè·¯ã§AdjustãåãåããããŒã¿ã¯ãåºåãããã¯ãŒã¯ãæäŸããå
容ã«å·Šå³ãããŸããAdjustã¯è€æ°ã®åºåãããã¯ãŒã¯ããå±ããSKAdNetworkã®ããŒã¿ãéçŽããŠã¬ããŒãããŸãã 2-2. SKAdNetworkããçŽæ¥å±ããã¹ããã㯠2ã€ç®ã¯ãSKAdNetworkããAdjustã«çŽæ¥ãã¹ãããã¯ãå±ãçµè·¯ã§ããiOS 15以éãSKAdNetworkã¯ç²åŸãããã¹ãããã¯ããåºåãããã¯ãŒã¯ã®ãšã³ããã€ã³ãã«å ããŠãã¢ããªåŽã§æå®ãã远å ã®URLã«ãçŽæ¥éããããã«ãªããŸããïŒ Adjust: SKAdNetwork ãã€ã¬ã¯ãã€ã³ã¹ããŒã« ïŒããã®URLã«Adjustã®ãšã³ããã€ã³ããæå®ããŠãããšã端æ«ã®SKAdNetworkããAdjustãžçŽæ¥ãã¹ãããã¯ãå±ããŸãã ãã®çµè·¯ã䜿ãã«ã¯ãã¢ããªéçºè
ã Info.plist ã«Adjustã®ã³ãŒã«ããã¯URLã远å ããå¿
èŠããããŸãã ãã®çµè·¯ã®å©ç¹ã¯ãã³ã³ããŒãžã§ã³å€ã»ãã©ã³ã¶ã¯ã·ã§ã³IDã»ã¢ããªãã¥ãŒã·ã§ã³çœ²åãªã©ãå«ãå®å
šãªããŒã¿ã»ããããã®ãŸãŸå±ãããšã§ããäžæ¹ã§ãFacebookãGoogleåºåãªã©äžéšã®ããŒãããŒããã¯ãã©ã³ã¶ã¯ã·ã§ã³IDã眲åãåŸãããªãããšãããããã®å Žåã¯è©³çްãªããŒã¿ã®æ¯èŒãã§ããããã¹ãããã¯æ°ãæ¯ã¹ãã«ãšã©ãŸããŸãã ãŸãšã iOSã¢ããªã®åºå广ãã©ãèšæž¬ãããŠããã®ãããAdjustãéããŠèª¿ã¹ãŸããã 調ã¹ãŠã¿ããšãATTã®åæç¶æ³ãšãããã¯ãŒã¯ã®çš®é¡ã§ææ³ã现ããåå²ããŠããŠãæ³åãããã£ãšèŸŒã¿å
¥ã£ãŠããŸããã åºåèšæž¬ã¯ããŒã±ãã£ã³ã°å¯ãã®é åã§ãæ®æ®µãšã³ãžãã¢ã¯ããŸãé¢ãããªããããããŸããããä»çµã¿ãç¥ã£ãŠãããšåœ¹ç«ã€å Žé¢ãããããã ãšæããŠããŸããåãããã«åºåèšæž¬ãŸããã調ã¹ãŠããæ¹ã®åèã«ãªãã°ããããã§ãã
ç®æ¬¡ ã¯ããã« ã»ãã·ã§ã³ãæ¥åã«æ®ãããè¯ããªãåã§èãã TypeScript ã®éçã èªåã®ãããžã§ã¯ããç¹æ€ããŠã¿ã ãŸãã¯ç¶²çŸ
çã«æ°ãã ãã©ã察çããããã§åé¡ãã å®éã«çŽããŠã¿ã ãŠããªã³é
åã®çµãèŸŒã¿ ç¹æ€ããŠããã£ãããš ããŸã: TSKaigi 2026 ãæ¥œããã 話 ãããã« ã¯ããã« ããã«ã¡ã¯ãããªãã·ã¥ãããã³ã§ããã³ããšã³ãã®éçºãããŠããæé«ã§ãïŒ å
æ¥ãTypeScript ã®ã«ã³ãã¡ã¬ã³ã¹ãTSKaigi 2026ãã«åå ããŠããŸããã ã€ãã³ãå
šäœã®æ§åãããŒã¹ã®äŒç»ãåã»ãã·ã§ã³ã®ç޹ä»ã¯åŒç€Ÿã®æéã¬ããŒãã«ãŸãšããŠããã®ã§ãåœæ¥ã®é°å²æ°ãæ°ã«ãªãæ¹ã¯ãã¡ããããããŠã芧ãã ããã tech.every.tv æ¬èšäºã§ã¯ããã®äžã§ãç¹ã«å°è±¡ã«æ®ã£ã sajikix ããã®ã»ãã·ã§ã³ãæ¥åã«æ®ãããè¯ããªãåã§èãã TypeScript ã®éçããåãäžããŸãã speakerdeck.com å®åã®ã³ãŒãã«æ®ã£ãŠããŸããè¯ããªãåããšã®åãåãæ¹ãæ±ã£ãã»ãã·ã§ã³ã§ãããèããªãããèªåãæ®æ®µæžããŠããã³ãŒãã«ããããããåã¯ãããããããªããšæããæ°ã«ãªã£ãã®ã§ãåãããæ¹ã§èªåã®ãããžã§ã¯ããç¹æ€ããŠã¿ãŸããã ã»ãã·ã§ã³ãæ¥åã«æ®ãããè¯ããªãåã§èãã TypeScript ã®éçã ã»ãã·ã§ã³ã¯ãæ¥åã§æžããŠããŸã£ããè¯ããªãåããã劥åããåããåéã»åé¡ãããã¿ãŒã³åã»åæããããšã§ãTypeScript ã®é£ããã®äžç«¯ã«è¿«ãããšããå
容ã§ããã ã»ãã·ã§ã³ã§ã¯ããè¯ããªãåãã®æ¢ãæ¹ãå
·äœçã«ç€ºãããŠããŸãããAI ã䜿ã£ãŠæ¬¡ã®èгç¹ãç¶²çŸ
çã«æŽãåºããåé¡ããããã§ãåé¡ããšã«å®éã«ã³ãŒããèŠãŠå€æããããšããé²ãæ¹ã§ãã @ts-ignore / @ts-expect-error ïŒã³ã³ãã€ã«ãšã©ãŒèªäœãé»ãããæå®ïŒ as ãã£ã¹ãïŒåã¢ãµãŒã·ã§ã³ãå€ãããã®åã ããšèšãåãã as const ã as unknown as ã¯é€å€ïŒ åã¬ãŒã颿° value is X ïŒå€ã®åãçµã蟌ã颿°ïŒ ã»ãã·ã§ã³ãèããŠãæ®æ®µè§Šã£ãŠãããããžã§ã¯ãã«åœãŠã¯ãããšã©ããªçµæã«ãªãã®ãæ°ã«ãªããå®éã«ãã£ãŠã¿ãŸããã èªåã®ãããžã§ã¯ããç¹æ€ããŠã¿ã 察象ã¯ãç§ãæ®æ®µé¢ãã£ãŠããããã³ããšã³ãã®ã³ãŒãããŒã¹ã§ããTypeScript 4.5.5 / Next.js 12 / React 17 ãšããæ§æã§ãã ãŸãã¯ç¶²çŸ
çã«æ°ãã ã»ãã·ã§ã³ã®æ¢ãæ¹ã«ãªããã3ã€ã®èгç¹ãç¶²çŸ
çã«æœåºããŸãããçµæã¯æ¬¡ã®ãšããã§ãã èŠ³ç¹ ä»¶æ° @ts-ignore / @ts-expect-error 0 ä»¶ åã¢ãµãŒã·ã§ã³ as ïŒ as const / as unknown as ãé€å€ïŒ 104 ä»¶ åã¬ãŒã颿° value is X 1 ä»¶ ãã®ååžãèŠããšãåãŸããã§äœ¿ãããŠããææ®µã as ã«ããªãåã£ãŠããã®ãããããŸãã @ts-ignore ã¯äœ¿ãããŠããããåã¬ãŒãïŒåè¿°èªïŒã1ä»¶ã ãã§ããã ãããã as ã¯ã誰ãç¹å®ã®äººã®åé¡ã§ã¯ãªããæ¥ã
ã®éçºãåœæã® TypeScript ã®å¶çŽã®ãªãã§èªç¶ã«ç©ã¿éãªã£ãŠãããã®ã ãšæããŸãã ãªããåçŽã« as ãæååæ€çŽ¢ãããšã export { default as Foo } ã®ãã㪠åãšã¯ã¹ããŒã ïŒåãã£ã¹ãã§ã¯ãªãæ§æïŒãŸã§åŒã£ããã£ãŠããŸããŸãããããããåãã£ã¹ãã§ã¯ãªããã®ã AI ã«åé¡ãããŠé€ãããåã¢ãµãŒã·ã§ã³ãšããŠã® as ã¯104ä»¶ããšããæ°åãåºããŸããã ãã©ã察çããããã§åé¡ãã æ¬¡ã«ãèŠã€ãã104ä»¶ãã©ãåé¡ãããã§ããã»ãã·ã§ã³ã§ã¯ãã©ã察çãããããèµ·ç¹ã«ã次ã®2ã€ã®è»žã玹ä»ãããŠããŸããã å¢çã§èµ·ããŠããã®ã / å
éšã§èµ·ããŠããã®ã : å€éšïŒã©ã€ãã©ãªã»å€éšããŒã¿ã»DOM ãªã©ïŒãšã®å¢çã«ç±æ¥ãããã®ããèªåãã¡ã®ã³ãŒãå
éšã§èµ·ããŠãããã®ã å®å
šåã«æŒãæ»ããã : åã¬ãŒãããã«ããŒã§åå®å
šã«çŽãããããããšãé£ããã ãã®2軞ã§104ä»¶ãä»åããããšã次ã®ããã«ãªããŸããã æŒãæ»ãã é£ãã å¢ç çŽ76ä»¶ïŒå€éšããŒã¿ã»ãã©ãŒã ã©ã€ãã©ãªã»DOM ãªã©ïŒ 1ä»¶ å
éš çŽ22ä»¶ïŒé
åã®çµã蟌ã¿ã»åé·ãª as ãªã©ïŒ æ°ä»¶ïŒåçãªããŒã¢ã¯ã»ã¹ïŒ Note : ã©ã€ãã©ãªã®åãæ±ãç®æãªã©å¢çãšå
éšããŸãããã¿ãŒã³ããããä»¶æ°ã¯æŠæ°ã§ãã 7å²è¶
ããå¢ç à æŒãæ»ãããã«éäžããŸãããã€ãŸãã å€éšãšã®å¢çã§åãç·©ããªã£ãç®æã as ã§æ¡ã£ãŠããŠãããããã®å€ãã¯åã¬ãŒãããã«ããŒã§çŽãã ããšããããšã§ããããããã¯ãå
éšèµ·å ã® as ãšããŠåã¬ãŒãã§æŒãæ»ããäŸãèŠãŠãããŸãã å®éã«çŽããŠã¿ã ããã§ç޹ä»ããã³ãŒãã¯ã瀟å€å
¬éã®ããååãåŠçãäžè¬åããŠããŸãããŸã TypeScript 4.5.5 ã§åãã§ãã¯ãéãããšã確èªããŠããŸãã åã¬ãŒãã远å ããããšã§ TypeScript ã®å远跡ãå¹ãããã«ãªãäŸãèŠãŠãããŸãã ãŠããªã³é
åã®çµã蟌㿠string ãš number ãæ··åšãããé
åãããå
šéš string ã®é
åããšããŠåãçµã£ãŠæ±ãããç®æããããŸããã if (typeof answers[0] === 'string') { return (answers as string[]).every((a) => target.includes(a)); } as string[] ã¯ã³ã³ãã€ã«æã«åã string[] ãšããŠæ±ãããæå®ã§ãå®è¡æã«ã¯äœãèµ·ããŸãããæ®ãã®èŠçŽ ã« number ãæ··ãã£ãŠããŠãæ€åºã§ãããTypeScript ããã®ãã§ãã¯ããé
åå
šäœã®åãçµãããšãã§ããŸããã çŽãæ¹ã¯2ã€ãããŸãã åè¿°èªïŒtype predicateïŒ : åã¬ãŒã颿°ã远å ããã ãã§ãæ¢åã®ããŒã¿æ§é ãå€ããã« as ãå€ããŸãã const isStringArray = (a: (string | number)[]): a is string[] => a.every((x) => typeof x === 'string'); if (isStringArray(answers)) { return answers.every((a) => target.includes(a)); // a 㯠string ã«çµããã } isStringArray ãå
šèŠçŽ ã確èªããŠãã a is string[] ãè¿ãã®ã§ãTypeScript 㯠if ãããã¯å
ã§ answers ã string[] ã ãšè¿œè·¡ã§ããŸãã discriminated unionïŒå€å¥å¯èœãªãŠããªã³ïŒ : ããŒã¿æ§é ã«ã¿ã°ãæãããèšèšå€æŽãå¿
èŠã§ãããTypeScript ã kind ã®å€ãèŠãã ãã§åãçµããŸãã discriminated union: å
±éã®ã¿ã°ïŒããã§ã¯ kind ïŒãæããããŠããªã³åãã¿ã°ã®å€ãèŠãã ãã§ãã©ã®ã¡ã³ããŒããåã¬ãã«ã§çµã蟌ããŸãã type Answers = | { kind: 'string'; values: string[] } | { kind: 'number'; values: number[] }; if (answers.kind === 'string') { return answers.values.every((v) => target.includes(v)); // v 㯠string ã«çµããã } as string[] 㯠TypeScript ã«åã宣èšããã ãã§å®è¡æã®ä¿èšŒã¯ãããŸããã§ããããåè¿°èªã¯å
šèŠçŽ ã®ç¢ºèªãdiscriminated union ã¯ããŒã¿æ§é ã®èšèšã«ãã£ãŠãTypeScript ãåãæ£ãã远跡ã§ããç¶æ
ã«ãªããŸãã ç¹æ€ããŠããã£ãããš 104ä»¶ãäžéãèŠãŠãããã€ãã®ããšãããããŸããã ãŸããã»ãã·ã§ã³ã¹ã©ã€ãã§å
·äœçã«ç޹ä»ãããŠãããã¿ãŒã³ïŒDOM Event / catch(e) / unknown / Brandedå / Arrayæšæºã¡ãœããïŒã¯ããã®ãªããžããªã«ã¯ã»ãšãã©ååšããŸããã§ããã代ããã«å€ãã£ãã®ã¯ as string ã71ä»¶ã§ã倧åã¯ãªãã·ã§ãã«ããããã£ã«å¯Ÿã㊠undefined ã®å¯èœæ§ã as ã§é€ããŠãããã®ã§ããã åã¬ãŒãã远å ããããšã§æŒãæ»ããäŸïŒunion é
åã®çµã蟌ã¿ïŒãèŠã€ãããŸãããäžæ¹ããã£ãŒã«ãåãå€éšããŒã¿ã§åçã«æ±ºãŸããã©ãŒã ã®ããã«ãçŸåšã®èšèšã§ã¯åå®å
šã«ããããªãç®æãæ®ã£ãŠããŸãããããã as ã«ã€ããŠã¯çç±ãšæ¹åã®èŠéããã³ã¡ã³ãã§æ®ããŠããããšããæ¹éãèããããŸãã ããŸã: TSKaigi 2026 ãæ¥œããã 話 ã»ãã·ã§ã³ãæè¡çãªåŠã³ä»¥å€ã«ããä»åã¯çŽç²ã«ã€ãã³ããæ¥œãããŸããïŒ å瀟ã®ã¹ãã³ãµãŒããŒã¹ãå·¡ã£ãŠæ
åœè
ã®æ¹ããçŽæ¥ã話ãèããã®ãè¯ãã£ãã§ãããšããªãŒã®ããŒã¹ã§ã¯ãè¶³ãéãã§ããã ããæ¹ã
ãã AI ã®æŽ»çšäºäŸãããããèãããŠããã ããåçŸå Žã§ã®åãçµã¿ããšãŠãåºæ¿çã§ããã ãåŒåœãçŸå³ãããããã«ãã£ãããããããã ããŠå€§æºè¶³ãª2æ¥éã§ããïŒTypeScript ã«ã€ããŠãã£ããåãåããæ©äŒã¯ãªããªããªãã®ã§ããããã£ãã«ã³ãã¡ã¬ã³ã¹ã«å®æçã«åå ããããšã®å€§åããæ¹ããŠå®æããŸããã ããã«ãã£äžèЧ ãããã« ã»ãã·ã§ã³ã§åŠãã æ¢ãæ¹ãå®éã«èªåã®ã³ãŒãã«åœãŠã¯ããããšã§ãæŒ ç¶ãš as ã䜿ã£ãŠããç®æãå¯èŠåãããŸãããã©ãã«åã¬ãŒããå¿
èŠãªã®ããå
·äœçã«èŠããåã¢ãµãŒã·ã§ã³ãåã·ã¹ãã ãšåãåããã£ããã«ããŠãããããšæããŸãã æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããïŒ