ã¯ããã« æ³å®èªè
ïŒããŒã¿ãµã€ãšã³ãã£ã¹ããªã©ãæ¥åžžçã«ããŒã¿ãæ±ã£ãŠããŠãã³ãã¯ãã£ããããŒã¿ã¯åããŠã®æ¹ã ãã®èšäºã§åããããšïŒã³ãã¯ãã£ããããŒã¿ã®äžèº«ãäžè¬çãªåæã®æµãããããäœã«äœ¿ãããããæ±ããšãã«è©°ãŸãç¹ã ããã«ã¡ã¯ãKINTOãã¯ãããžãŒãºã®ããŒã¿ãµã€ãšã³ã¹Gã«æå±ããfalsenineã§ãã ã³ãã¯ãã£ããããŒã¿ãšã¯ãéä¿¡æ©èœãæã€ã¯ã«ãããã¯ã©ãŠãã«éãããŒã¿ã®ããšã§ããè»éãäœçœ®æ
å ±ãªã©ãå«ãŸããé転è
ããšã®å®å
šé転ã¹ã³ã¢ãä¿éºæã®å²åŒã«åæ ããä¿éºãã亀éæ
å ±ã®çæãªã©ã«æŽ»çšãããŠããŸãã ãªãæ¬èšäºã¯ãå瀟ãå
¬éããŠããè³æãããšã«ãã¢ããªãã£ããŒã¿å
šè¬ã®äžè¬çãªæ±ããæŽçãããã®ã§ããç¹å®ã®ãµãŒãã¹ã®å®è£
ããåœç€Ÿã®éçšãã®ãã®ã説æãããã®ã§ã¯ãããŸããã ã³ãã¯ãã£ããããŒã¿ã®äžèº« ã³ãã¯ãã£ããããŒã¿ã¯ãçææºã§3å±€ã«åãããšæŽçããããã§ããããšã¿ã®å
¬éè³æã¯ãè»èŒéä¿¡æ©ïŒDCMïŒçµç±ã§ååŸããè»äž¡ããŒã¿ããèµ°è¡ç¶æ³ã«é¢ããããŒã¿ããšãè»äž¡ç¶æ
ã«é¢ããããŒã¿ãã«å€§å¥ããŠããŸããããã«è»èŒã«ã¡ã©ããã®ããŒã¿ãå ãã3å±€ã§ãæ¬èšäºã§ã¯äž»èŠãªããŒã¿ãæŽçããŸãã å±€ 代衚çãªé
ç® ååŸã®ããªã¬ èµ°è¡ç¶æ³ è»éããšã³ãžã³å転æ°ãå é床ãã¢ã¯ã»ã«ïŒãã¬ãŒãæäœãã·ããããžã·ã§ã³ãèµ°è¡è·é¢ãäœçœ®æ
å ± èµ°è¡äžã«ç¶ç¶ãäœçœ®æ
å ±ãè»éã¯å®æéä¿¡ è»äž¡ç¶æ
èŠåç¯ã®è¡šç€ºæ
å ±ããã€ã¢ã°ïŒæ
é蚺æïŒæ
å ± ç¶æ
å€åã»ç°åžžæ€ç¥ è»å€ç»å è»å€ã®åç»ïŒååŸæ°ç§ãçŽ2åïŒ è¡çªçžåœãæªè·¯ãæ°èŠéééè·¯ãªã©ã®æ¡ä»¶æç«æ å±€ã§åããçç±ã¯ãç²åºŠãšæ±ããéãããã§ããèµ°è¡ç¶æ³ã¯é£ç¶çãªæç³»åãè»äž¡ç¶æ
ã¯ã€ãã³ããã°ãè»å€ç»åã¯æ¡ä»¶ä»ãã®ã¹ãããã·ã§ããã«è¿ãããŒã¿ãšãªããåãè»äž¡ããŒã¿ã§ããååŠçãç°ãªããŸãã[^toyota-data][^toyota-policy][^toyota-camera] ã©ãåæããã®ã èµ°è¡ç¶æ³ãäŸã«æããŸããããçã®ä¿¡å·ã¯ããã®ãŸãŸã§ã¯äœã®ææšã«ããªããŸãããã¢ããªãã£ã®ããŒã¿åæã¯ãåäœãæããé¢å¿ã®ããã€ãã³ããå®çŸ©ããçšéã«åãããŠéçŽãããšããå å·¥ãéããŠãçã®ä¿¡å·ãæå³ã®ããææšã«å€ããŠããäœæ¥ã§ãã以äžã®4éå±€ã¯ãå瀟ã®å
¬éè³æã«å
±éããŠçŸããäžéææç©ãæ¬èšäºã§æŽçãããã®ã§ãæ¥çå
±éã®åŒã³æ¹ã§ã¯ãããŸããã éå±€ ããããš åºãŠãããã® ä¿¡å· è»éã»å é床ã»äœçœ®ãæç³»åã§åãåã çã®æç³»å ããªãã äžè¬çã«ã¯ããšã³ãžã³ã®ONïŒOFFãäžå®æé以äžã®åè»ãå¢çã«åºåãïŒå®çŸ©ã¯äºæ¥è
ã«ããç°ãªãïŒ 1åã®ç§»å ã€ãã³ã éŸå€ãè¶
ããæåãæãåºã çºçåæ°ãšçºçå°ç¹ éçŽ ãã©ã€ããŒã»éè·¯ãªã³ã¯ã»ã¡ãã·ã¥ã®ã©ããã«å¯ãã ã¹ã³ã¢ãæ
è¡æéãæ··é床 äœçœ®æ
å ±ã¯éè·¯ã«çŽã¥ããŸãããã®åŠçã¯ããããããã³ã°ãšåŒã°ããŸãããæ£ããçŽã¥ããšã¯éããŸããããã³ãã«ã§æž¬äœã§ããªããé«ééè·¯ãšäžè¬éã䞊走ãããéœåžéšã§èª€å·®ã倧ãããé路圢ç¶ãè€éããšãã£ãæ¡ä»¶ã§ã¯å¥ã®éè·¯ã«åœãããŸããå°å³ã«èŒã£ãŠããªã现ãéãèµ°ã£ãå ŽåããèŒã£ãŠããéã®ã©ããã«å¯ããããŸãã ã€ãã³ããèšèšã®ãã€ã³ãã§ããæ¥ãã¬ãŒãå€å®ã®éŸå€ã¯ãäºæ¥è
ããšã«ç°ãªããŸãããããŒãããŒã¿ã®æäŸäºæ¥è
ã®èª¬æã§ã¯ãéŸå€0.3Gãªã3ç§éã«çŽ30km/hã0.25GãªãçŽ25km/hã®æžéãæ€åºãããšãããŸãã0.05Gã®éãã§æŸãæåãå€ãããåãçããŒã¿ããå¥ã®çµè«ãåºãŸãã[^sei-faq][^kddi-probe] äœã«äœ¿ãããŠããã®ã éçŽã§ã©ã®åäœã«å¯ãããããçšéãæ±ºããŸããããšã¿ã¯è»äž¡ããŒã¿ã®å©æŽ»çšããã³ãã¯ãã£ãããµãŒãã¹ããããã¯ã«ãã¥ããããããçºã»ãã瀟äŒã¥ãããã«åé¡ããŠããŸãã éçŽåäœ çšéåºå äŸ ãã©ã€ããŒã»è»äž¡ ã³ãã¯ãã£ãããµãŒãã¹ éè»¢ç¹æ§ã«ããä¿éºæå²åŒ è»äž¡ïŒè»çš®æšªæïŒ ããã¯ã«ãã¥ãã å質æ¹åãéçºãžã®ãã£ãŒããã㯠éè·¯ãªã³ã¯ã»ã¡ãã·ã¥ ããçºã»ãã瀟äŒã¥ãã éããéãããã亀éæ
å ±ãéè·¯ä¿å®ç¹æ€ éè·¯åäœã«å¯ããäŸããé«ééè·¯ã®æžæ»æ«å°Ÿæ€ç¥ã§ããè»éã®äœãè»äž¡ãéãŸãåºéãç¹å®ãããã®äžæµãæžæ»æ«å°Ÿãšå®çŸ©ããŸãããã¯ã©ã¹ã¿ãªã³ã°ãšã«ã«ãã³ãã£ã«ã¿ã§æšå®ããè·¯åŽã¬ãŒããŒã«ããæ¢åãœãªã¥ãŒã·ã§ã³ãšéãªã粟床ã確èªããŠããŸããã»ã³ãµãŒãèšçœ®ãã代ããã«ãèµ°ã£ãŠããã¯ã«ããã»ã³ãµãŒãšããŠäœ¿ãçºæ³ã§ãã[^toyota-data][^toyota-insurance][^techplay] æ±ããšãã«è©°ãŸã4ç¹ ãããŸã§ã®å€æã¯åæè
ãèšèšã§ããŸããäžæ¹ã§å
¥åã®æ¡ä»¶ã¯æ±ºããããŸãããã¯ã«ã1å°ã«ã¯100å°ä»¥äžã®ECUïŒé»åå¶åŸ¡ãŠãããïŒãèŒã£ãŠããŸãããã¯ã©ãŠãã«å±ãã®ã¯ãããããå¿
èŠãªé
ç®ã ããéžãã§å§çž®ãããã®ã§ãããã°ã®èšèšæš©ãè»äž¡åŽã«ãããšããããšã§ãã Webã®ã¢ã¯ã»ã¹ãã° è»äž¡ããŒã¿ ãã°é
ç®ã®æ±ºå® åæããç«å Žã®äººãããšããã¿ã°ã远å ããèšæž¬å
容ã倿Žã§ããã è»äž¡ã®éçºæç¹ãè»çš®ã»ã°ã¬ãŒãã§éã æ¯éå£ å¯Ÿè±¡ãŠãŒã¶ãŒã®å
šæ° åæããè»äž¡ã®ã¿ ããŒã¿ã®å°çé ã»ãŒçæé éä¿¡ãåãããšè»å
ã«æ»çããåŸãããŸãšããŠå±ã ãããã4ã€ã®ãºã¬ãçãããã®ãŸãŸæè¡èª²é¡ã«ãªã£ãŠããŸãã æ¯éå£ã®ãºã¬ïŒåæããè»äž¡ãã芳枬ã§ããŸãããå
šæ°ã§ã¯ãªãæšæ¬ããå
šäœãæšå®ãããããéžæãã€ã¢ã¹ã圱é¿ããŸãã ã¹ããŒãã®ãºã¬ïŒé
ç®ã¯è»çš®ã»ã°ã¬ãŒãã§ç°ãªããä»åŸãå€ãããŸããã¹ããŒãé²åãåæã«ããèšèšãå¿
èŠã§ãã æå»ã®ãºã¬ïŒçææå»ãšå°çæå»ãä¹é¢ããŸããéèšãŠã£ã³ããŠã®ç· ãæ¹ãšåèšç®ã®èšèšãè«ç¹ã«ãªããŸãã äœçœ®ã®ãºã¬ïŒæž¬äœèª€å·®ã䞊走éè·¯ã®ããã§ãå¥ã®éè·¯ã«åœããããšããããŸããããããããã³ã°ã®ç²ŸåºŠããäžæµã®éèšãã¹ãŠãå·Šå³ããŸãã ãŸããäœçœ®æ
å ±ãèµ°è¡å±¥æŽã¯ãå人ã®è¡åã衚ããããŒã¿ã§ããæ±ãéã¯ãå¿ååãå©çšç®çã®é©åæ§ãéèŠã«ãªããŸãã[^toyota-data][^techplay][^apc][^mobility-night] 掻ãããçµéšãšãæ°ããèŠããã㚠掻çšã§ããã¹ãã«ã¯ãSQLã忣åŠçãæç³»åã®ååŠçãå ææšè«ãæ©æ¢°åŠç¿ã®èšèšåã§ãã4éå±€ã®å€æèªäœã¯ãæ±ã£ãããšã®ããåŠçã®çµã¿åããã«èŠããã¯ãã§ããæ°ããèŠããã®ã¯ãã¯ã«ãã®ä¿¡å·ã®æå³ãšãéŸå€ãéçŽåäœãã©ã決ãããã®ããžãã¹æèŠã§ãã å人çã«é¢çœããšæããã®ã¯ããã®åéã§ã¯ãäœã枬ãããã®èšèšããŸã åºãŸã£ãŠããªãããšã§ããæ¥ãã¬ãŒãã®å€å®åºæºã²ãšã€åã£ãŠãäºæ¥è
ããšã«ç°ãªãããã®èšèšãåæã®çµè«ããµãŒãã¹ã®ããæ¹ã«åœ±é¿ããŸããæŽåããããã°ãæž¡ãããŠåæããã®ã§ã¯ãªããæž¬ãæ¹ããèããäœå°ãæ®ã£ãŠãããã ãããããåæãã人ã®èšèšãã ãã§ãããå®å
šãªé転ãä¿ããããå¿«é©ãªãµãŒãã¹ãçã¿åºããå¯èœæ§ããããŸãããããäžçªã®ééå³ã ãšæã£ãŠããŸãã äœçœ®æ
å ±ã®æ±ãã«ã€ããŠã¯ãKINTOãã¯ãããžãŒãºã®å匷äŒã Mobility Night #1 - GPSã»äœçœ®æ
å ± ãã®å
容ãããã¯ããã°ã§å
¬éããŠããŸããGPSã®ç²ŸåºŠãã©ãæ±ãããšãã£ããå®åå¯ãã®è«ç¹ã䞊ãã§ããŸãã [^toyota-data]: ããšã¿èªåè»ãã客æ§ã®ã¯ã«ãããã®è»äž¡ããŒã¿ã®ååŸãšå©çšã«ã€ããŠã https://global.toyota/jp/sustainability/privacy/data-utilizing-initiatives/index.html [^toyota-policy]: ããšã¿èªåè»ãã³ãã¯ãã£ããã«ãŒããååŸããããŒã¿ã®å©æŽ»çšã»ä¿è·ã®åçµã¿ã«ã€ããŠãïŒ2019ïŒ https://toyota.jp/pages/contents/tconnectservice/contents/pdf/toyota_datapolicy.pdf [^toyota-camera]: ããšã¿èªåè»ãè»èŒã«ã¡ã©ã«ããèµ°è¡ç°å¢ç»åã®ååŸãšå©çšã«ã€ããŠã https://global.toyota/jp/sustainability/privacy/on-board-cameras-initiatives/ [^toyota-insurance]: ããšã¿èªåè»ãããšã¿ã®ã³ãã¯ãã£ããã«ãŒåãã«åœå
åã®é転æååæ åãã¬ããã£ã¯ã¹èªåè»ä¿éºãéçºãïŒéè»¢ç¹æ§ã®è©äŸ¡é
ç®ïŒ https://global.toyota/jp/detail/19575777 [^sei-faq]: äœåé»å·¥ã·ã¹ãã ãœãªã¥ãŒã·ã§ã³ãTraffic Vision ãããŒãããŒã¿ïŒãµãŒãã¹ ãããã質åãïŒHondaã«ãŒãããŒãããŒã¿ã®ä»æ§ãæ¥ãã¬ãŒãéŸå€ 0.3GïŒ0.25G ã®æ€åºç¯å²ïŒ https://www.seiss.co.jp/products/tv_probe/faq.html [^kddi-probe]: KDDIãåçšè»ã®ãããŒãããŒã¿ãïŒç¢åŽãšããžãŒã·ã¹ãã 補ããžã¿ã«ã¿ã³ã°ã©ãã«ããåçšè»ãããŒãã®ä»æ§ãããªããå€å®ã¯ãšã³ãžã³ON/OFFãŸãã¯æ»åšæé15ã120åã®æå®ãããããããã³ã°ãæ£ããå€å®ãããªãæ¡ä»¶ãDRMåºæ¬éè·¯ã«æªå®çŸ©ã®éè·¯ã®æ±ãïŒ https://biz.kddi.com/service/iot-cloud-data/data/probe/ [^techplay]: TECH PLAYããTOYOTAâããã°ããŒã¿ãè»äž¡ããŒã¿ã®æŽ»çšäºäŸãïŒããšã¿äž»å¬ã€ãã³ãè¬æŒé²ãECUæ§æã»æžæ»æ«å°Ÿæ€ç¥ïŒ https://techplay.jp/column/1977 [^apc]: APCæè¡ããã°ïŒData + AI Summit 2025 ããšã¿ç»å£ã»ãã·ã§ã³ã®äºæ¬¡å ±åãé
å»¶ããŒã¿ã®èšè¿°ã«äœ¿çšïŒ https://techblog.ap-com.co.jp/entry/2025/06/26/154309 [^mobility-night]: KINTO Tech BlogãMobility Night #1 - GPSã»äœçœ®æ
å ±ã https://blog.kinto-technologies.com/posts/2024-12-10-Mobility-Night-1-GPS-%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1/
ã¯ããã« ããã«ã¡ã¯ïŒ KINTOéçºéš KINTOã·ã¹ãã éçºG ãã¹ã¿ãŒã¡ã³ããã³ã¹ããŒã«éçºããŒã ãæè¡åºå ±éšå
ŒåãOsaka Tech Lab æå±ã® high-gïŒ @high_g_engineer ïŒã§ããããã³ããšã³ããšã³ãžãã¢ããã£ãŠããŸãã 以åã瀟å
ã§éå¬ããŠããããã³ããšã³ãå匷äŒã«ã€ããŠç޹ä»ããŸããã https://blog.kinto-technologies.com/posts/2025-06-30-frontend-study-group/ ããããå匷äŒã¯ç¶ãã2026幎10æã§ç¬¬91åãè¿ããŸããã ä»åã¯ãã®äžã§ã2026幎8æã9æã«å
š5åã§å®æœãã ãHTMLè§£äœæ°æžãã®èŒªèªäŒ ã«ã€ããŠç޹ä»ããŸãã æ£çŽãªãšãããæžç±ã®èŒªèªäŒã¯ããã³ããšã³ãå匷äŒã§ã¯åäŸããªãããšããããååãæè¡æžã®èŒªèªäŒãšãªããšããéäžã§å€±éããã¡ãããã èªã¿äžããã ãã®äŒã«ãªããã¡ããšããå°è±¡ããããå°ãããŒãã«ãé«ãæããŠããŸããã å®éãç§èªèº«ãåè·ã§åãæ¬ã®èŒªèªäŒãçµéšãããšããå
容ãçè§£ããªããŸãŸèªã¿é²ããã ãã®äŒã«ãªã£ãŠããŸã£ãèŠãæãåºããããŸãã ã§ãããä»åã¯æåŸãŸã§èµ°ãåããããã«ãåå è
å
šå¡ãåã®ããã«è°è«ããå Žã«ãªããŸããã ãã®èšäºã§ã¯ããã®çµç·¯ãšé²ãæ¹ãããŸããã£ãçç±ãªã©ããŸãšããŸãã 顿ã«ããæžç± https://www.borndigital.co.jp/book/25999/ ãHTMLè§£äœæ°æž â仿§ããçŽè§£ãæ¬æ Œå
¥éãã¯ãHTMLã®ä»æ§ïŒHTML StandardïŒãããŒã¹ã«ãåèŠçŽ ã®æå³ãäœ¿ãæ¹ãã¢ã¯ã»ã·ããªãã£ãšã®é¢ä¿ãäžå¯§ã«è§£èª¬ããæžç±ã§ãã ãªãHTMLã®èŒªèªäŒãããããšã«ãªã£ãã®ã ãæ¬¡ã«äœããããããã¿ããªã§è©±ãåã£ã 茪èªäŒãå§ããçŽåãå匷äŒã§ã¯TSKaigi 2026ã®ã»ãã·ã§ã³åç»ãã¿ããªã§èŠèŽããŠããŸããããã ãæè¿ã®ããã³ããšã³ãå匷äŒã¯TypeScriptã®åã®è©±ã«å¯ããã¡ãªå
容ã«ãªã£ãŠããŠãåç»ãèŠãã ãã®äŒãç¶ããŠããããšãããããããå°ãçŸå Žã«å¯ãæ·»ã£ãå匷äŒã«ãããããšèããŠããŸããã ããã§7æã«2åã»ã©æéãåããåå è
ãæå±ããåããŒã ã§å®éã«èµ·ããŠããããã³ããšã³ãã®èª²é¡ããã¢ãªã³ã°ããŸããã ãããšãããŒã ã¯éã£ãŠã次ã®ãããªæ©ã¿ãå
±éããŠæãããŸããã ãã¶ã€ããŒãšã®åæ¥ã®é²ãæ¹ã«èª²é¡ããã UI / UXã«é¢ããç¥èããã£ãšäŒžã°ããã ã¢ã¯ã»ã·ããªãã£ãæçµçã«ã³ãŒããžã©ãèœãšã蟌ãããã©ãåšå²ãå·»ã蟌ãã ããŒã¯ãŒãã¯ãæ
å ±èšèšã è°è«ãéãããã¡ã«èŠããŠããã®ããã æ
å ±èšèš ããšããããŒã¯ãŒãã§ããã å匷äŒã§ç«ãŠã仮説ã¯ããã§ãã æ£ããæ
å ±èšèšãããŠããUI â æ£ããããŒã¯ã¢ãããããŠãã â Webã¢ã¯ã»ã·ããªãã£ãæºãããŠãã ãã¶ã€ããŒãšåæ¥ããããã§ããã¢ã¯ã»ã·ããªãã£ãæºãããã³ã³ãã³ããäœãããã§ããåå°ã«ãªãã®ã¯HTMLã®æ£ããçè§£ã§ãã ãHTMLã®ç¥èã匷åããããšããæ
å ±èšèšã®çè§£ã«ã€ãªãããã²ããŠã¯ããã³ããšã³ãã®å
šããŒã ã«å
±éãã課é¡ã®è§£æ±ºã«ã€ãªãããããããªãããšèãããŸã㯠h1 ã h6 ãæ£ããé åºã§äœ¿ããšããåºç€çãªã¬ãã«ããçè§£ãçŽããããšããçµè«ã«ãªããŸããããã®ææãšããŠãã£ãŠã€ãã ã£ãã®ããHTMLè§£äœæ°æžãã§ãã ãããªãå§ãããæ¬ã玹ä»ããäŒããæãã ãšã¯ããããã®æ¬ã¯å
š352ããŒãžãšãããªããªãã®åãã§ãããããªããæ¥é±ãã茪èªäŒããããŸãããšèšããšãåå ã®ããŒãã«ãäžæ°ã«äžãã£ãŠããŸããŸãã äžæ¹ã§ãã¿ããªã®æºåãæŽã£ããããããã§ã¯ããã€ãŸã§ãå§ãŸããªãå¯èœæ§ãé«ãã§ãã ããã§ããŸã㯠ãã§ã«æ¬ãæã£ãŠããäººã«æåããŠããããã©ããªæ¬ãªã®ãã玹ä»ããäŒ ãäžåºŠæã¿ãŸããã ãã®äŒã§äžèº«ããã©ãã©ãšçºããããšã§ããšããããè²·ã£ãŠäžèªããŠã¿ãŸãããä»Kindleã§è²·ããŸããããšãã声ãåºãŠããã®å Žã§é²ãæ¹ã®ã«ãŒã«ã決ããããšãã§ããŸããã ãŸãããããŒãžã£ãŒã®æ¿èªãããããæ±äº¬ïŒå®€çºïŒãšå€§éªã®ãªãã£ã¹ã«1åãã€äŒç€Ÿã§æžç±ã賌å
¥ã§ããŸããã ãã ããµããéããŠã¿ããšå€ãã®åå è
ãèªåã§è³Œå
¥ããŠããŠããäŒç€Ÿã§è²·ããªããŠããã¿ããªæã£ãŠãããããããªãããšãããããã§ããã 茪èªäŒã®é²ãæ¹ ã«ãŒã« ã«ãŒã«ã¯ã·ã³ãã«ã«ããŸããã åå è
ã¯ã§ããéãäºåã«èªãã§ããïŒ ãã¡ãããèªããªããŠã倧äžå€« ïŒ èª¬ææ
åœã¯æ
åœç®æãäºåã«ç²Ÿèªããåœæ¥ã«èª¬æããïŒ èª¬ææ¹æ³ã¯ããŸãã ïŒ æžç±ã¯äŒç€Ÿè³Œå
¥åã貞ãåºãå¯ïŒå人ã§ã®çšæãOKïŒ ãèªããªããŠã倧äžå€«ããšæèšããŠããããšã§ãæ
åœä»¥å€ã®äººãæ°è»œã«åå ã§ããããã«ããŠããŸãã 1åïŒçŽ1æéïŒã®ã¿ã€ã ããŒãã« æé å
容 10ã30å æ
åœè
ãæ
åœç®æããã£ãã説æ 20ã30å å
šå¡ã§ææ³ãæ°ã«ãªã£ãããšã話ã 3å æ¬¡åã®æ
åœæ±ºãã«ãŒã¬ãã æ¬¡åã®æ
åœã¯ãClaude Artifactsã§äœã£ãã«ãŒã¬ããã§æ±ºããŸãããã¡ãã£ãšããã²ãŒã æèŠããããã誰ã«ãªãããªããšçãäžãããã€ã³ãã§ããããŸããã ç¯å²ã¯ãäž»èŠãªç¯ã ããã«çµã£ã å
šç« ãèªããšé·ææŠã«ãªã£ãŠããŸããããCHAPTER 3ã®èŠçŽ è§£èª¬ãããç¹ã«æ¥åã«é¢ãããæ·±ã5ã€ã®ç¯ã«çµããŸããã å é嬿¥ ç¯å² æ
åœ ç¬¬1å 8/7 ã»ã¯ã·ã§ã³ è±èŒªãã 第2å 8/28 ã°ã«ãŒãã³ã°ã³ã³ãã³ã äžäžãã 第3å 9/4 ããã¹ãã¬ãã«ã»ãã³ãã£ã¯ã¹ éœè€ãã 第4å 9/11 ãã©ãŒã ãã®1 high-g 第5å 9/18 ãã©ãŒã ãã®2 æºå£ãã ãçãç§ã®äŒæã§äœåºŠãã¹ããããæã¿ãŸããããåœåã®èŠèŸŒã¿ã©ãã5åã§å®èµ°ã§ããŸããã ã¢ã¯ã»ã·ããªãã£ã®æèè
ãåå ããŠããã ä»åã®èŒªèªäŒã§å€§ããã£ãã®ãã瀟å
ã®ã¢ã¯ã»ã·ããªãã£ã®æèè
ã§ãã 蟻ãã ã å®è°·ãã ãåå ããŠãããããšã§ãã æ¬ã«æžãããŠããå
容ã«å¯ŸããŠãå®éã®ã¹ã¯ãªãŒã³ãªãŒããŒã§ã¯ããèªã¿äžããããããæã¯ãã䜿ãããŠããããšãã£ãã æ¬ã®äžæ©å
ã®ç¥èŠ ããã®å Žã§è£è¶³ããŠããããããšã§ãè°è«ã®è³ªã倧ããäžãããŸããã ååã®æ§å ååãšããæ
åœè
ãæ¬ã®å
容ããªããã ãã§ãªããç¬èªã®åãå£ã§ããã¹ãããŒã¹ã®ãŸãšããäœã£ãŠããŠãããŸãããããã§ã¯ååã§å°è±¡ã«æ®ã£ããããã¯ãããã€ã玹ä»ããŸãã 第1åïŒã»ã¯ã·ã§ã³ section / article / aside / nav ãšãã£ãã»ã¯ã·ã§ãã³ã°ã³ã³ãã³ããã header / footer ãã©ã³ãããŒã¯ã«ãªãæ¡ä»¶ãªã©ãæ±ããŸããã å°è±¡çã ã£ãã®ã¯ãæžç±ã®åè¡ãšåã2022幎㫠ã¢ãŠãã©ã€ã³ã¢ã«ãŽãªãºã ãHTML Standardããåé€ãããŠãã ããšã§ãã https://github.com/whatwg/html/pull/7829 çŸåšã¯ã section ã§å²ãã§ãèŠåºãã¬ãã«ã¯äžãããã h1 ã h6 ã®æ°åã§æ±ºãŸããŸãã ãŸãããReactã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæçµçã«ã¬ã³ããªã³ã°ãããHTMLå
šäœãç®ã«ããæ©äŒãã»ãšãã©ãããŸãããã»ã¯ã·ã§ã³æ§é ãæ£ããããšãæ¥ã
ã®éçºã§ã©ãæ€èšŒããã°ãããïŒããšãããã³ã³ããŒãã³ãéçºãªãã§ã¯ã®æ©ã¿ã話é¡ã«ãªããŸããã 第2åïŒã°ã«ãŒãã³ã°ã³ã³ãã³ã p ã ul ã ol ã dl ã figure ã main ãªã©ãæ¯æ¥æžããŠããèŠçŽ ããããŒãã§ããããæ
åœã®äžäžããã¯æå³ã®æ·±ã説æããããå人çã«ããããªãã ããšæããéšåãäžå¿ã«ãŸãšããŠãããŸããã ããšãã°ã p ã®äžã« ul ãæžããšãšã©ãŒã«ã¯ãªãããããŒãµãŒãé»ã£ãŠ p ãéããŠããŸããŸãã <!-- æžããã€ããã®HTML --> <p> <ul> <li>é
ç®</li> </ul> </p> <!-- ããŒã¹åŸã®DOM --> <p></p> <ul> <li>é
ç®</li> </ul> <p></p> ãã®çµæã p > ul ãåæã«ããCSSãå¹ããªããªã£ãããæ«å°Ÿã«çãã空㮠p ã§äœçœãå¢ãããããŸããSSRç°å¢ã§ã¯ãµãŒããŒã§çæããHTMLãšã¯ã©ã€ã¢ã³ãã®DOMãé£ãéããhydrationãšã©ãŒã®åå ã«ããªããŸãã ã»ãã«ããæ¬¡ã®ãããªè©±é¡ã§çãäžãããŸããã ol ã®çªå·ã¯DOMã«ååšããªããããã³ããŒïŒããŒã¹ããããšæ¶ãã main 㯠hidden 屿§ãä»ãããã®ãå«ããã°ã1ããŒãžã«è€æ°çœ®ãã hr ã¯ãç·ãã§ã¯ãªããæ®µèœã¬ãã«ã®ããŒãã®åºåããã¹ã¯ãªãŒã³ãªãŒããŒã§ã¯ãåºåãããšèªã¿äžãããã dl ã®èªã¿äžãã¯ãã©ãŠã¶ãšã¹ã¯ãªãŒã³ãªãŒããŒã®çµã¿åããã«ãã£ãŠå·®ãããããã»ãã³ãã£ã¯ã¹ãšããŠæ£ãããªã䜿ã䟡å€ããã ãã®åã§ç¹ã«å°è±¡ã«æ®ã£ãã®ãããã»ãã³ãã£ã¯ã¹ïŒã¹ã¯ãªãŒã³ãªãŒããŒã®ããããšãããã£ããã®çºèšã«å¯Ÿããã蟻ããã®ã²ãšèšã§ãã ãã¹ã¯ãªãŒã³ãªãŒããŒã®ãããã£ãŠã®ã¯ãã¶ãã¡ãã£ãšéããªãã¹ã¯ãªãŒã³ãªãŒããŒã¯HTMLã®ä»æ§ã«åãããŠè§£éããåŽãªã®ã§ã ã¹ã¯ãªãŒã³ãªãŒããŒã§æãã©ããã«èªãŸããããã«ã³ã³ãã³ããæ²ããã®ã§ã¯ãªãã仿§ã«æ²¿ã£ãŠæ£ããããŒã¯ã¢ããããã¹ã¯ãªãŒã³ãªãŒããŒåŽããããæ£ããè§£éãããã¢ã¯ã»ã·ããªãã£ãèããããã§ã®é åºããæ¹ããŠç¢ºèªã§ããŸããã 第3åïŒããã¹ãã¬ãã«ã»ãã³ãã£ã¯ã¹ em ãš strong ã small ã s ã time ã ruby ã bdi ã br ã wbr ãªã©ãæ±ããŸããã æ
åœã®éœè€ããããã¯ãæ®æ®µã¯ãã¬ãŒã ã¯ãŒã¯äžã§ã³ã³ããŒãã³ãåäœã§ããHTMLãæžããªãã®ã§ãèŠçŽ ãã®ãã®ãæèããããšããªãã£ãããšããççŽãªææ³ãããããŸãã«ãã®èŒªèªäŒã®çãã©ããã®æ°ã¥ããå
±æãããŸããã æžç±ã®åè¡åŸã«ä»æ§åŽã§å€ãã£ãç¹ã話é¡ã«ãªããŸãããããšãã°ãæžç±ã®æç¹ã§ã¯å¯Ÿå¿ããARIAããŒã«ããªãã£ãèŠçŽ ã«ããWAI-ARIA 1.2ã§ã¯ããŒã«ãå²ãåœãŠãããŠããŸãã HTMLèŠçŽ WAI-ARIA 1.2ã§ã®ããŒã« em emphasis strong strong del / ins deletion / insertion sub / sup subscript / superscript b / i / small / s / u generic ã»ãã«ãã <p>H<sub>2</sub>O</p> ãVoiceOverã§èªãŸãããšããšã€ãã»ããŒã»ãªãŒãã§ã¯ãªãããšã€ãããªãŒããšèªãŸãããæ¥æ¬èªã«ã¯ã€ã¿ãªãã¯äœã®æåããªãã®ã§ i èŠçŽ ã¯ããŒã¯ã¢ãããšèŠãç®ãäžèŽãã«ããããšãã£ãå®éã«è©ŠããŠã¿ãããããã®è©±ãåºãŸããã ãã£ããã§ã¯ãæäœ¿ã£ãŠããHTMLãšãã£ã¿ã®è©±ããã¬ã©ã±ãŒã§HTMLãæžããŠããæãåºè©±ã§äžä»£ãè¶
ããŠçãäžããäžå¹ããããŸããã 第4åïŒãã©ãŒã ãã®1 ç§ã®æ
åœåã§ãã form ã label ãåçš® input ã® type ãããªããŒã·ã§ã³å±æ§ã autocomplete ãªã©ãæ±ããŸããã ç¹ã«åŒ·èª¿ããã®ã¯ã label ã® for 屿§ã®èœãšã穎ã§ããååšããªã id ãæå®ãããšHTMLãã§ãã«ãŒã§ãšã©ãŒãšããŠæ€åºã§ããŸããã å¥ã®èŠçŽ ã® id ãæå®ããŠããŸã£ãå Žåã¯HTMLãã§ãã«ãŒã§ã¯æ€åºã§ããŸããã ã©ãã«ãã³ããŒïŒããŒã¹ãã㊠for ãçŽãå¿ãããšãã³ããŒããã©ãã«ãŸã§æåã®å
¥åæ¬ã«çŽã¥ããŠããŸãããšãã£ãäºæ
ãèµ·ããåŸãŸãã ããã¯ç®ã§èŠãŠãæ°ã¥ãã«ããäžæ¹ãã¹ã¯ãªãŒã³ãªãŒããŒã§èªã¿äžãããšããã«åããããšãã話ã蟻ãããããããŸããã ãã®ã»ãã«ããæ¬¡ã®ãããªè©±é¡ãåºãŸããã type="hidden" ã¯ãç§å¯ãã«ã¯ãªããªãïŒå€ã¯æ¹ããã§ããïŒ pattern 屿§ã¯ã»ãã¥ãªãã£ã®ããã®ãã®ã§ã¯ãªã placeholder ã¯ã©ãã«ã®ä»£ããã«ãªããªã é»è©±çªå·ãããã€ãã³ãªãããšæ³šéã㊠type="number" ã§åãåãã®ã¯é¿ããã KINTOã®ãµãŒãã¹ã«ã¯ç³èŸŒãã©ãŒã ãå€ãã®ã§ããã®ãŸãŸæ¥åã«çãããå
容ã ã£ããšæããŸãã 第5åïŒãã©ãŒã ãã®2 æçµåã¯æºå£ããã®æ
åœã§ã button ã select ã datalist ã progress / meter ã fieldset / legend ãªã©ãæ±ããŸããã æºå£ããã®åãå£ããšãŠãé¢çœãããä»ã¯ãŒããããã©ãŒã éšåãææžãããããšã¯å°ãªããUIã©ã€ãã©ãªã䜿ãããšãã»ãšãã©ããšããåæã«ç«ã£ãŠã MUIã»Ant Designã»Radix UIãããããã®èŠçŽ ãã©ãå®è£
ããŠããã ããæžç±ã®å
容ãšçªãåãããŠãããŸããã ããšãã°ã¹ã€ããïŒSwitchïŒã³ã³ããŒãã³ãã²ãšã€ãšã£ãŠããå®è£
æ¹éã¯ã©ã€ãã©ãªããšã«ç°ãªããŸãã ã©ã€ãã©ãª Switchã®å®è£
MUI èŠãç®çšã® span ãšãéæãª <input type="checkbox" role="switch"> Ant Design input ã䜿ãã <button type="button" role="switch" aria-checked> Radix UI <button role="switch" aria-checked> ã«å ãããã©ãŒã å
ã§ã®ã¿é衚瀺㮠input ã远å select ãåæ§ã§ããã€ãã£ãã® select ã䜿ããã« role="combobox" ãš role="listbox" ãçµã¿åãããŠåçŸããŠãããããã©ãŒã äºæã®ããã«èŠããªã select ã眮ããŠããããšãåã©ã€ãã©ãªã®å·¥å€«ãèŠããŠããŸããã ãã¢ã¯ã»ã·ãã«ãªè€æ°éžæUIãèªåã§å®è£
ããã®ã¯ããªã倧å€ãªã®ã§ãã©ã€ãã©ãªã䜿ãã®ãããããããšããçµè«ã«ã説åŸåããããŸããã ãŸããã¹ã€ããã¯ãæŒããç¬éã«åæ ããããã®ããªã®ã§ããä¿åããã¿ã³ãšçµã¿åãããããæé¡ïŒå¹Žé¡ã®ãããªäºæã«äœ¿ã£ããããã®ã¯æ¬æ¥ã®çšéãšãããããšããSwitchãšãã°ã«ãã¿ã³ã®äœ¿ãåãã®è©±ãçãäžãããŸããã ãµãããã å
š5åãçµããããšãå匷äŒã®1ååã䜿ã£ãŠãµãããããè¡ããŸããã ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãKPTã§ã¯ãªã Fun / Done / Learn ãæ¡çšããŠããŸããKPTã ãšç¹ã«åé¡ããªããŠãProblemãæããå¿
èŠãããããã¬ãã£ããªç©ºæ°ã«ãªãããããšèããããã§ãã FunïŒæ¥œããã£ãã㚠茪èªäŒã¯è² è·ã®é«ããã©ãŒããããªã®ã«ãæ
åœè
ãçè§£ããããšãç©æ¥µçã«ã·ã§ã¢ããŠããã ãã èªãã§ããã ãã§ãªããæ
åœè
ãç¬èªã®è§£éãç¹ã亀ããŠãããé«åºŠãªå
容ã«ä»äžããŠãããïŒUIã©ã€ãã©ãªã®å¯Ÿå¿ç¶æ³ãªã©ïŒ çºè¡šè
ããšã«æ¬ã®ã©ãã«çç®ããŠããããè³æã«è¡šããŠããŠãä»ã®äººãã©ãæè¡æžãèªãã§ããã®ããç¥ãããšãã§ãã æèè
ã®ã¢ã¯ã»ã·ããªãã£ã®ç¥èŠãèžãŸããŠæ¬ãèªã¿é²ããäœéšãã§ãã çºè¡šåŸã®ãã£ã¹ã«ãã·ã§ã³ã§ãå
šå¡ãåã®ããã«å»ºèšçãªæèŠãåºãå Žã«ãªã£ã 蟻ããããã¯ããããªã³ã¡ã³ããããããŸããã æã®Webå¶äœè
ã¯ãHTMLè§£äœæ°æžã«æžããŠãããããã®ããšã¯æ®æ®µäœ¿ãããŠãããä»ã®æä»£ã¯ãããããç¥èããªããŠããããã¯ããäœããŠããŸããã ããããããã®èŒªèªäŒãéããŠã¿ãªãããç¥ãããšããŠãããŠããããšãããããã£ãã ããã«ããäžã®äžã®ç»å£ã«ã¯ãç»é¢ãèŠãŠããªããšçœ®ããŠãããããã®ãæå€ãšå€ãããã©ãä»åã®ã¿ãªããã®çºè¡šã¯ãç»é¢ãèŠãŠããªããŠã話ãšããŠçè§£ã§ããããšãããããããèšèãããã ããŸããã蟻ããããã®ç¹ã«ã€ããŠæžããèšäºã玹ä»ãããŠããã®ã§ãçºè¡šãããæ¹ã«ã¯ãã²èªãã§ã»ããã§ãã https://note.com/debugon/n/nae7f164bf8a7 DoneïŒããéããããš ããã³ããšã³ãå匷äŒã§æžç±ã茪èªããã¹ã¿ã€ã«ã¯åããŠã ã£ãããç¡äºã«å®èµ°ã§ãã 瀟å
ã«ãHTMLè§£äœæ°æžãã®ååšãåºãããã è€æ°åã«ããã£ãŠ1åã®æè¡æžãèªãããšããã¹ã¿ã€ã«ãå匷äŒãšããŠ1ã€ç¢ºç«ã§ãã äžäººã§èªãã®ãã€ããæ¬ã§ããå匷äŒã«æã¡èŸŒãã§ã¿ããªã§èªãããšããéžæè¢ãã§ããã®ã¯å€§ããªåç©«ã§ãã LearnïŒåŠãã ããš HTMLã®çŸè¡ä»æ§ã¯åžžã«æŽæ°ããç¶ããHTML Standardãªã®ã§ãæžç±ã®å
容ã¯ãã§ã«å€ããªã£ãŠããéšåããããã ãããã æžç±ã¯åã£ããããšããŠäœ¿ããæªãããšæã£ãã仿§ãåŒã ã»ã¯ã·ã§ãã³ã°ã³ã³ãã³ããã°ã«ãŒãã³ã°ã³ã³ãã³ããããã¹ãã¬ãã«ã»ãã³ãã£ã¯ã¹ãšãã£ãHTMLã®åç¹ãæ¹ããŠæãåºãã a èŠçŽ ã®å
容ã¢ãã«ã¯TransparentïŒééçïŒã§ã芪ããããŒã³ã³ãã³ããªã a ã®äžã« div ãªã©ã眮ãããšãã§ãã ã»ãã³ãã£ãã¯ãªHTMLãæžãã°ã¢ã¯ã»ã·ããªãã£ãç¶²çŸ
ã§ããããã§ã¯ãªãã çµå±ãèŠåºããã©ãã«ãé©åã«ä»ããããšããã¢ã¯ã»ã·ããªãã£çã«äžçªéèŠ èŠãç®ã«é Œã£ãŠããããŒã¯ã¢ããããèŠçŽ ã®æå³ããèãçŽããã£ããã«ãªã£ã æ
åœã«ãªã£ã人ã¯èª°ãçºè¡šãé¿ããã1é±éã§1æéåã®è°è«ãã§ããè³æãäœã£ãŠããŠãããã 1åãããã®é©åãªããªã¥ãŒã æ ãã€ããã ããŸããã£ãçç±ããµãããã£ãŠã¿ã ãµããããã®å
容ãèžãŸããŠãä»åã®èŒªèªäŒãããŸããã£ãçç±ãæŽçãããšã次ã®4ã€ã ãšæããŸãã çŸå Žã®èª²é¡ãã顿ãéžãã ããªããšãªãè¯ããããªæ¬ãã§ã¯ãªããåããŒã ãžã®ãã¢ãªã³ã°ã§èŠããå
±é課é¡ïŒæ
å ±èšèšã»ã¢ã¯ã»ã·ããªãã£ïŒããéç®ããŠæ¬ãéžã³ãŸããããã®ãããåå è
ã«ãšã£ãŠãèªåããšãã«ãªããããã£ãã®ã ãšæããŸãã å§ããããŒãã«ã培åºçã«äžãã 玹ä»ããäŒãæãããèªããªããŠã倧äžå€«ããšæèšãããç¯å²ãäž»èŠãªç¯ã«çµããæžç±ãäŒç€Ÿã§çšæããããšãã£ã工倫ã§ãåå ã®å¿ççãªããŒãã«ãäžããŸããã èª¬ææ¹æ³ãæ
åœè
ã«ä»»ãã æ¬ã®å
容ããªããã®ã§ã¯ãªããããããªãã ããšæããç¹ã«çµããUIã©ã€ãã©ãªãšçªãåãããããªã©æ
åœè
ããšã®åãå£ãçãŸããæ¯åéã£ãé¢çœãããããŸããã æèè
ãäžç·ã«èªãã§ããã æžç±ã®å
容ããçŸåšã®ä»æ§ãå®éã®ã¹ã¯ãªãŒã³ãªãŒããŒã®æåãšç
§ããåãããŠè£è¶³ããŠããããããšã§ããèªãã ãã®äŒããããçè§£ããŠè°è«ããäŒãã«ãªããŸããã ãããã« ä»åã®èŒªèªäŒãéããŠãHTMLã®ç¥èãã®ãã®ã¯ãã¡ããããå匷äŒã§1åã®æ¬ãèªã¿åãããšããæ°ããåãæã«å
¥ããããšãã§ããŸããã ãµããããã§ã¯ã次ã®é¡æãšããŠReactã®å
¬åŒããã¥ã¡ã³ãã®ãããªç¡æã§èªãããªãã¡ã¬ã³ã¹ãèªãã®ãè¯ãããããšãã声ããæžç±ã®å
容ãèµ·ç¹ã«ãçŸåšã®HTMLã®ä»æ§ãAIæä»£ã®ããŒã¯ã¢ããã«ã€ããŠããã«è°è«ãæ·±ããå Žãã€ãããªããããšããã¢ã€ãã¢ãåºãŠããŸãã å°äººæ°ã®ãµããããã§ã¯ãããŸãããããã®èŒªèªäŒãä¹ãè¶ããããšã§ãæ°ããããšãã§ããããªå¯èœæ§ãæããŠããŸãã 瀟å
ã§èŒªèªäŒãäŒç»ããããšããŠããæ¹ã®åèã«ãªãã°ããããã§ãã
ã¯ããã« ããã«ã¡ã¯ã2026幎6æå
¥ç€Ÿã®hyokoã§ãïŒ æ¬èšäºã§ã¯ã2026幎6æã«å
¥ç€Ÿããã¡ã³ããŒ2åã®å
¥ç€ŸçŽåŸã®ææ³ããŸãšããŸããã KINTOãã¯ãããžãŒãºïŒä»¥äžãKTCïŒã«èå³ã®ããæ¹ããããŠãä»ååå ããã¡ã³ããŒã®æ¯ãè¿ããšããŠæçãªã³ã³ãã³ãã«ãªãã°ãããªãšæããŸãïŒ hyoko èªå·±çŽ¹ä» KINTOéçºéšã§å¥çŽç®¡çã·ã¹ãã ãæ
åœããŠããŸãã ä»åŸãèŠä»¶ã®ãšããŸãšãããªãªãŒã¹ãŸã§ã®é²è¡ç®¡çãæ
åœããäºå®ã§ãã ãããŸã§ã¯ãSIerïŒ2瀟ïŒãITã³ã³ãµã«ãäºæ¥äŒç€Ÿã®ç€Ÿå
SEãçµéšããŠããŸããã è¶£å³ã¯é³æ¥œãã§ã¹ã«è¡ãããšã§ããããæ°å¹Žã¯Fuji RockãSummer Sonicã«è¡ã£ãŠããŸãã ãããããé¡ãããŸãïŒ æå±ããŒã ã®äœå¶ã¯ïŒ 宀çºãªãã£ã¹ã«6人ãOsaka Tech Labã«1人ã®åèš7人ã®ããŒã ã§ãã 3é±éããšã®å®æãªãªãŒã¹ã§ãæ°èŠæ©èœã®éçºãæ¢åæ©èœãžã®æ¹ä¿®èŠæå¯Ÿå¿ãã·ã¹ãã æ¹åã䞊è¡ããŠå®æœããŠããŸããæ¥å圱é¿ã®ããäžå
·åãèŠã€ãã£ãå Žåã¯èšæã«ãªãªãŒã¹ããŠããŸãã ä»ãããã¯ããå«ããããžã§ã¯ãã¯ãŠã©ãŒã¿ãŒãã©ãŒã«ãæ¢åæ©èœã®æ¹ä¿®èŠæã¯ã¢ãžã£ã€ã«ã§é²ãããã€ããªãã圢åŒã§ããæè¡ã¹ã¿ãã¯ã¯ãããã³ããšã³ããJavaScript + HTMLãããã¯ãšã³ãã¯Pythonã§ãã KTCã®å
¥ç€Ÿåæ©ãå
¥ç€ŸååŸã®ã®ã£ããã¯ïŒ äºæ¥äŒç€Ÿã®ç€Ÿå
SEãšããŠãèªèº«ãæ§ç¯ã«æºãã£ããããã¯ãã«é·ãé¢ãããäºæ¥ã®æé·ã«è²¢ç®ããããšããæãããããŸãããåè·ã§ãå®çŸã¯ã§ããŠããã®ã§ããããã©ãããã©ãŒã äŸåããã£ãããããããªãŒãã³ãªç°å¢ã§ææŠããããšèãKTCã«å
¥ç€ŸããŸããã åè·ã®çµéšãã瀟å
SEã®ã€ã¡ãŒãžãæã£ãŠããã®ã§ãããæ³å以äžã«é«ãã¹ãã«ãæã€åªç§ãªæ¹ãå€ãåºæ¿ãåããŠããŸãã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ ãããããšè³ããã§ãéè«ãå«ããããŒã å
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã掻çºãªããŒã ã§ãã äžæ¹ã§è·äººæ°è³ªã§ãã ããã®ããé°å²æ°ããããSIeræä»£ãæãããæãåºããŠããŸãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã æå¯ãé§
ãäžè¶åã§ãèªå®
ãã1æé以å
ã§éå€ã§ããã¢ã¯ã»ã¹æ§ã®è¯ãã§ãã ãªãã£ã¹å
ã«ã°ãªãŒã³ãå€ããŠçãããŸãããã䜿ãåºå
¥å£ã«ãããµããã³ïŒå€åãé鯱ïŒã¯ç¹ã«ãæ°ã«å
¥ãã§ãã é«ç°ãããã㮠質åïŒäŒæ©ã®åãæ¹ããã¹ã¹ã¡ã®éããæ¹ãããã°æããŠãã ããã æŒé£ã¯äžäººã§è¡ãããšãå€ãã®ã§ãããæéããããšãã¯è¡ã£ãããšã®ãªããåºãæ¹é¢ã«è¶³ãå»¶ã°ããæ°ããªçºèŠã楜ããããã«ããŠããŸããä»äºäžã¯åº§ã£ãŠããããšãå€ãã®ã§ãå°ãã§ãæ©ããŠãªãã¬ãã·ã¥ããŠããŸãã æéããªããšãã¯ããåŒåœãªã©ãè²·ã£ãŠäŒæ©å®€ã§é£ã¹ãŠããŸããäŒæ©å®€ã¯ã©ãžãªãæµããŠããŠé©åºŠãªéé³ãããããšãŠãéããããã空éã§ãã Takada èªå·±çŽ¹ä» ã¢ããªãã£ãããã¯ãéçºéš DXãœãªã¥ãŒã·ã§ã³ã°ã«ãŒãã«æå±ããŠãããäž»ã«åœå
販売åºãžåãããããã¯ãéçºææ¡ãè¡ã£ãŠããŸãã æå±ããŒã ã®äœå¶ã¯ïŒ ã¹ã¿ããã¯å€§éª2åãåå€å±1åã宀çº4åãåèš7åäœå¶ã§ãã KTCã®å
¥ç€Ÿåæ©ãå
¥ç€ŸååŸã®ã®ã£ããã¯ïŒ åè·ã¯èªåè»æ¥çã«ãããŸããŠããããŸã§ã®çµéšãåœå
æå€§ã®å茪販売äŒç€Ÿãããã¯ãŒã¯ã§ããããšã¿ç³»åã§æŽ»ãããŠã¿ãããšããæããããå
¥ç€ŸãããŠããã ããŸãããèªèº«ã¯éçºè
ã§ã¯ãªãã®ã§ãããåšãã®ã¹ã¿ããçããã®ãããã¯ãéçºã«ãããç¥èŠã®å¹
ãæèã®é«ãã«é©ããŠããŸããæ¯æ¥ãåŠã³ã§ããã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ ã³ãã¥ãã±ãŒã·ã§ã³ã¯ãšãŠããã©ããã§ãããããŠèªåã§èª¿ã¹ãŠãåãããªãããšã¯åšå²ã®èª°ããããæãå·®ã䌞ã¹ãŠãã ãããå©ãåãã®æåãæããŠããŸãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã ææå¯ããäžè¶åé§
ãªã®ã§èªå®
ããã®ã¢ã¯ã»ã¹ããšãŠãè¯ãã§ãã䟿å©ãããŠæ¯æ¥ã®æ©æ°ãæ¥µç«¯ã«æžã£ãŠããŸãéåäžè¶³ã«ãªã£ãŠããŸããŸããã äºåæã£ãœããªããã«ãã§ã®ãããªéããããã空éããæ°ã«å
¥ãã§ãã æšªå±±ãããã㮠質åïŒæ
å ±ããã£ããã¢ããããéã«å·¥å€«ãããŠããããšãããã°æããŠãã ããã èªåã¯äœãåãããªãã®ãããã€ãŸã§ã«ã©ããªæ
å ±ãå¿
èŠãããã°çµã¿ç«ãŠãããã®ãããäžæŠæŽçããããã«ããŠããŸããæ¥åã«å¿
èŠãªè²©å£²åºæ
å ±ã«ã€ããŠã¯ãå
æ¹ãšçŽæ¥äŒè©±ããããšèæèŠã®ãããªèšèªåãã«ããæ
å ±ãåŸãããšãã§ããŸãã®ã§ç©æ¥µçã«èšªåãããã§ããããã®ä»ã販売åºçŸå Žã®æåç·ã§äœãèµ·ããŠããã®ã仮説ãç«ãŠãããã«é »ç¹ã«AIãæŽ»çšããŠããŸãã ãããã« ä»åã¯ã2026幎6æã«å
¥ç€Ÿããã¡ã³ããŒ2åã®å
¥ç€ŸçŽåŸã®ææ³ãã玹ä»ããŸããã æ¬èšäºããKTCã«èå³ã®ããæ¹ã«ãšã£ãŠãå
¥ç€ŸåŸã®é°å²æ°ãåãã€ã¡ãŒãžãç¥ããã£ããã«ãªãã°ããããã§ããæåŸãŸã§ãèªã¿ããã ããããããšãããããŸããïŒ ãããŠãKINTOãã¯ãããžãŒãºã§ã¯ããŸã ãŸã ããŸããŸãªéšçœ²ã»è·çš®ã§äžç·ã«åãã仲éãåéããŠããŸãïŒ è©³ãã㯠ãã¡ã ããã確èªãã ããïŒ
ã¯ããã« ããã«ã¡ã¯ïŒ KINTOãã¯ãããžãŒãºã®ããžã¿ã«æŠç¥éšDataOpsã°ã«ãŒãæå±ã®äžæµŠã§ãã æ®æ®µã¯ã瀟å
ã®ããŒã¿åæåºç€ã®éçºã»ä¿å®ã»éçšã«å ããGoogle Analytics 4ïŒä»¥äžãGA4ïŒãGoogleã¿ã°ãããŒãžã£ãŒïŒä»¥äžãGTMïŒãå©çšãããWebãµã€ãã®ã¢ã¯ã»ã¹è§£æãèšæž¬ç°å¢ã®æŽåãæ
åœããŠããŸãã Webãµã€ãã§GA4ãGoogleåºåãèšæž¬ããå Žåãäžè¬çã«ã¯Googleãã¡ã€ã³ããGoogleã¿ã°ãèªã¿èŸŒã¿ãGoogleãã¡ã€ã³ãžèšæž¬ãªã¯ãšã¹ããéä¿¡ããŸãã äžæ¹ããã©ãŠã¶ã®ãã©ã€ãã·ãŒä¿è·æ©èœãåºåãããã«ãŒãªã©ã®åœ±é¿ã«ãããGoogleã¿ã°ã®èªã¿èŸŒã¿ãèšæž¬ãªã¯ãšã¹ãããããã¯ãããã€ãã³ããæ¬ æããããšããããŸãã ä»åããã®èª²é¡ãžã®å¯Ÿå¿ãšããŠãæ¢åã®Amazon CloudFrontãå©çšããGoogleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ããŸããã æ¬èšäºã§ã¯ãGoogleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ããèæ¯ãæ§æã瀟å
ã§ã®åœ¹å²åæ
ãæ€èšŒæã«ç¢ºèªãããã€ã³ããå°å
¥åŸã«ç¢ºèªã§ãã广ã«ã€ããŠç޹ä»ããŸãã æ¬èšäºã®å¯Ÿè±¡è
æ¬èšäºã¯ã以äžã®ãããªæ¹ã察象ãšããŠããŸãã GTMãGA4ãå©çšããWebãµã€ãã®èšæž¬ãæ
åœããŠããæ¹ Googleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥ãæ€èšããŠããæ¹ Amazon CloudFrontãCDNãšããŠå©çšããŠããæ¹ æ¬èšäºã§ã¯ãCloudFrontã®çްããªèšå®æé ã§ã¯ãªããå°å
¥æã®èãæ¹ãé²ãæ¹ãæ€èšŒå
容ãäžå¿ã«ç޹ä»ããŸãã Googleã¿ã°ã²ãŒããŠã§ã€å°å
¥ã®èæ¯ãšæŠèŠ èæ¯ åœã°ã«ãŒãã§ã¯ãWebãµã€ãã®å©çšç¶æ³ãåºåæœçã®ææãææ¡ãããããGTMãå©çšããŠGA4ãGoogleåºåãªã©ã®èšæž¬ã¿ã°ãé
ä¿¡ããŠããŸãã éåžžã®æ§æã§ã¯ãWebãµã€ãããGoogleãã¡ã€ã³äžã®Googleã¿ã°ãèªã¿èŸŒã¿ãèšæž¬ããã€ãã³ããGoogleãã¡ã€ã³ãžéä¿¡ããŸãã éåžžã®Googleã¿ã°é
ä¿¡ã®æ§æ ããããGoogleãã¡ã€ã³ãžã®éä¿¡ã¯ããã©ãŠã¶ã®ãã©ã€ãã·ãŒä¿è·æ©èœãåºåãããã«ãŒãªã©ã«ãã£ãŠãå¶éãããããšããããŸãã èšæž¬ã¿ã°ãèšæž¬ãªã¯ãšã¹ãããããã¯ããããšããŠãŒã¶ãŒãå®éã«ããŒãžãé²èЧããããã³ã³ããŒãžã§ã³ãããããŠããŠããGA4ãGoogleåºåãžã€ãã³ããéä¿¡ãããŸããã ãã®çµæã以äžã®ãããªèª²é¡ãçºçããå¯èœæ§ããããŸãã GA4ã§ç¢ºèªã§ããã€ãã³ãæ°ããå®éã®çºçä»¶æ°ããå°ãªããªã ã³ã³ããŒãžã§ã³æ°ãæ£ããèšæž¬ãããªã Webãµã€ãã®æœçè©äŸ¡ã«äœ¿çšããããŒã¿ãäžå®å
šã«ãªã åºåçµç±ã®ææãæ£ããè©äŸ¡ã§ããªã åºåé
ä¿¡ã®æé©åã«äœ¿çšããã³ã³ããŒãžã§ã³ããŒã¿ãäžè¶³ãã ç¹ã«åºåé
ä¿¡ã§ã¯ãèšæž¬ããã³ã³ããŒãžã§ã³ããŒã¿ããèªåå
¥æãé
ä¿¡å¯Ÿè±¡ã®æé©åã«å©çšãããŸãã ãã®ãããã€ãã³ãã®æ¬ æã¯ãã¬ããŒãäžã®æ°å€ãå°ãªããªãã ãã§ãªããåºåé
ä¿¡ã®åŠç¿ãæé©åã«ã圱é¿ããå¯èœæ§ããããŸãã å®éã«å¯Ÿè±¡ãµã€ãã§ã¯ãGA4ã§èšæž¬ããŠããã³ã³ããŒãžã§ã³ããŒãžã®ã€ãã³ãæ°ãšãããã¯ãšã³ãã®ããŒã¿ããŒã¹ã«ä¿åãããŠããã³ã³ããŒãžã§ã³ä»¶æ°ã«å·®ããããŸããã ãã¡ãããGA4ãšããã¯ãšã³ãã®ããŒã¿ããŒã¹ã§ã¯ãèšæž¬ã®ä»çµã¿ãéèšæ¡ä»¶ãç°ãªããŸãã ãã®ãããæ°å€ãå®å
šã«äžèŽãããã®ã§ã¯ãããŸããã äžæ¹ã§ãå·®ã倧ããç¶æ
ã§ã¯ãå®éã«çºçããã³ã³ããŒãžã§ã³ã®äžéšãGA4ã§ååŸã§ããŠããªãå¯èœæ§ããããåºåæœçããµã€ãæ¹åãè©äŸ¡ããããã§èª²é¡ãšãªã£ãŠããŸããã ããã§ãGoogleã¿ã°ãžã®éä¿¡ãèªç€Ÿãã¡ã€ã³çµç±ã«å€æŽããã¿ã°ãã€ãã³ãããããã¯ããã圱é¿ã軜æžããããšãç®çãšããŠãGoogleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ããŸããã æŠèŠ å¯Ÿè±¡ã®Webãµã€ãã§ã¯ãCDNãšããŠãã§ã«Amazon CloudFrontãå©çšããŠããŸããã ãã®ãããæ°ãã«ãµãŒããŒãæ§ç¯ããã®ã§ã¯ãªããæ¢åã®CloudFrontãå©çšããŠGoogleã¿ã°ã²ãŒããŠã§ã€ãžã®éä¿¡ãäžç¶ããæ§æãæ¡çšããŸããã å°å
¥åŸã®æ§æã¯ä»¥äžã®ãšããã§ãã flowchart TB Browser[Webãã©ãŠã¶] --> Domain[Webãµã€ããšåãèªç€Ÿãã¡ã€ã³] Domain --> CF[Amazon CloudFront] CF -->|éåžžã®Webã³ã³ãã³ã| Origin[æ¢åã®é
ä¿¡å
] CF -->|Googleã¿ã°ã²ãŒããŠã§ã€çšã®ãã¹| GTG[Googleã¿ã°ã²ãŒããŠã§ã€] GTG --> GA4[GA4ã»Googleåºåãªã©] Webãµã€ãäžã«Googleã¿ã°ã²ãŒããŠã§ã€çšã®ãã¹ãçšæãããã®ãã¹ãžã®éä¿¡ãCloudFrontããGoogleåŽãžè»¢éããŸãã ãã©ãŠã¶ããèŠããšãGoogleã¿ã°ã®èªã¿èŸŒã¿å
ã察象ãšãªãèšæž¬ãªã¯ãšã¹ãã®éä¿¡å
ããGoogleãã¡ã€ã³ã§ã¯ãªããWebãµã€ããšåãèªç€Ÿãã¡ã€ã³ã«ãªããŸãã Googleã¿ã°ã²ãŒããŠã§ã€å°å
¥ååŸã®æ§æå³ èŠçŽ æè¡ã»ã¢ãŒããã¯ãã£ã®çŽ¹ä» ããããã¯ãä»åã®å°å
¥ã§å©çšããGoogleã¿ã°ã²ãŒããŠã§ã€ãšAmazon CloudFrontã«ã€ããŠç޹ä»ããŸãã Googleã¿ã°ã²ãŒããŠã§ã€ãšã¯ïŒ Googleã¿ã°ã²ãŒããŠã§ã€ïŒ Google tag gateway for advertisers ïŒã¯ãèªç€Ÿã管çããCDNãããŒããã©ã³ãµãŒãªã©ã®ã€ã³ãã©ãå©çšããŠãGoogleã¿ã°ãèªç€Ÿãã¡ã€ã³çµç±ã§é
ä¿¡ããä»çµã¿ã§ãã éåžžã¯Googleãã¡ã€ã³ããèªã¿èŸŒãŸããGoogleã¿ã°ããèªç€Ÿãã¡ã€ã³äžã®ç¹å®ã®ãã¹ããèªã¿èŸŒããããã«ããŸããå°å
¥ååŸã®çµè·¯ã®éãã¯ãåè¿°ã®ã æŠèŠ ãç¯ã®æ§æå³ã®ãšããã§ãã Googleã¿ã°ã²ãŒããŠã§ã€ã§ã¯ãGA4ã®ã€ãã³ãèšèšããGTMã³ã³ããå
ã®ã¿ã°ã®åŠçå
容ã倧ãã倿Žããã®ã§ã¯ãªããGoogleã¿ã°ãžã¢ã¯ã»ã¹ããçµè·¯ã倿ŽããŸãã ãã®ãããæ¢åã®GTMã³ã³ããå
ã®ã¿ã°ãããªã¬ãŒã倿°ãªã©ãç¶æãããŸãŸå°å
¥ã§ããŸãã Amazon CloudFrontãšã¯ïŒ Amazon CloudFront ã¯ãAWSãæäŸããCDNãµãŒãã¹ã§ãã Webãµã€ãã®ã³ã³ãã³ããå©çšè
ã«è¿ãæ ç¹ããé
ä¿¡ããããšã§ã衚瀺é床ãå¯çšæ§ã®åäžã«å©çšãããŸãã CloudFrontã§ã¯ãã¢ã¯ã»ã¹ãããURLã®ãã¹ã«å¿ããŠãç°ãªãé
ä¿¡å
ãžãªã¯ãšã¹ããæ¯ãåããããŸãã ä»åã¯ãã®ä»çµã¿ãå©çšããGoogleã¿ã°ã²ãŒããŠã§ã€çšã®ãã¹ãžã®éä¿¡ã®ã¿ããGoogleåŽãžè»¢éããããã«ããŸããã ãµãŒããŒãµã€ãGTMãšã®éã Googleã¿ã°ã²ãŒããŠã§ã€ãšæ··åããããä»çµã¿ã«ããµãŒããŒãµã€ãGTMããããŸãã ãµãŒããŒãµã€ãGTMã§ã¯ããµãŒããŒçšã®GTMã³ã³ãããæ§ç¯ãããµãŒããŒåŽã§èšæž¬ãªã¯ãšã¹ããåŠçããéä¿¡å
ãå¶åŸ¡ããŸãã äžæ¹ãGoogleã¿ã°ã²ãŒããŠã§ã€ã¯ãGoogleã¿ã°ã®èªã¿èŸŒã¿ã察象ãšãªãèšæž¬ãªã¯ãšã¹ãããèªç€Ÿãã¡ã€ã³çµç±ã«å€æŽããä»çµã¿ã§ãã èŠ³ç¹ Googleã¿ã°ã²ãŒããŠã§ã€ ãµãŒããŒãµã€ãGTM 倿Žãããã® Googleã¿ã°ãžã®éä¿¡çµè·¯ èšæž¬ãªã¯ãšã¹ãã®åŠçã»éä¿¡å
远å ã§å¿
èŠãªãã® CDN / ããŒããã©ã³ãµãŒã®èšå® ãµãŒããŒçšGTMã³ã³ãããšå®è¡ç°å¢ æ¢åã®WebçšGTMã³ã³ãã ãã®ãŸãŸå©çš ãµãŒããŒçšã³ã³ããåãã®èšå®è¿œå ãå¿
èŠ ä»åã®ç®çã¯ãæ¢åã®GTMæ§æãç¶æããªãããGoogleã¿ã°ãžã®éä¿¡çµè·¯ã倿Žããããšã§ããã ãã®ãããæ°ããªãµãŒããŒçšGTMã³ã³ããã¯æ§ç¯ãããæ¢åã®CloudFrontãšWebçšã®GTMã³ã³ãããå©çšããæ§æãæ¡çšããŸããã å°å
¥ã®é²ãæ¹ åæ
åœè
ã®åœ¹å²åæ
ä»åã®å°å
¥ã§ã¯ãèšæž¬æ
åœã ãã§ãªããã€ã³ãã©æ
åœããããã¯ãããŒã ã®ãµã€ã管çè
ãšé£æºããŠé²ããŸããã 倧ããªåœ¹å²åæ
ã¯ä»¥äžã®ãšããã§ãã DataOpsã°ã«ãŒãã»èšæž¬æ
åœ Googleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥ç®çãšèŠä»¶ã®æŽç 察象ãã¡ã€ã³ã察象ç°å¢ã®æŽç Googleã¿ã°ã²ãŒããŠã§ã€çšãã¹ã®æ€èš ãã©ãŠã¶ãGA4ãå©çšããåäœç¢ºèª æ¢åã®èšæž¬ãžã®åœ±é¿ç¢ºèª å°å
¥ååŸã®ã€ãã³ãæ°ã®æ¯èŒ ã€ã³ãã©æ
åœ CloudFrontãžã®Googleã¿ã°ã²ãŒããŠã§ã€çšèšå®ã®è¿œå Googleã¿ã°ã²ãŒããŠã§ã€ãžã®è»¢éèšå® æ€èšŒç°å¢ãšæ¬çªç°å¢ãžã®èšå®åæ å¿
èŠã«å¿ããCloudFrontãWAFã®èª¿æ» ãããã¯ãããŒã ã»ãµã€ã管çè
Webãµã€ãã«èšçœ®ããŠããGTMã³ãŒãã¹ããããã®å·®ãæ¿ã æ€èšŒç°å¢ãšæ¬çªç°å¢ãžã®ãªãªãŒã¹ Googleã¿ã°ã²ãŒããŠã§ã€ã¯ãGTMãGA4ã ãã§å®çµããæ©èœã§ã¯ãããŸããã CDNãªã©ã®é
ä¿¡åºç€ãšãWebãµã€ããžèšçœ®ããŠããGTMã³ãŒãã¹ããããã®äž¡æ¹ã«å¯Ÿå¿ãå¿
èŠã§ãã ãã®ãããå°å
¥åã«åæ
åœè
ã®äœæ¥ç¯å²ãšãæ€èšŒæã®ç¢ºèªé
ç®ãæŽçããŸããã GTMã³ã³ããåŽã®èšå®ã¯å€æŽããªã Amazon CloudFrontãå©çšããä»åã®æ§æã§ã¯ãGTMã³ã³ããåŽã§Googleã¿ã°ã²ãŒããŠã§ã€çšã®èšå®å€æŽã¯è¡ã£ãŠããŸããã æ¢åã®æ¬çªçšGTMã³ã³ãããããã®ãŸãŸå©çšããŸããã 倿Žããã®ã¯ãWebãµã€ãã«èšçœ®ãããŠããGTMã³ãŒãã¹ããããã®èªã¿èŸŒã¿å
ã§ãã 倿Žå Googleãã¡ã€ã³ããGTMã³ã³ãããèªã¿èŸŒã 倿ŽåŸ èªç€Ÿãã¡ã€ã³äžã®Googleã¿ã°ã²ãŒããŠã§ã€çšãã¹ãã åãGTMã³ã³ãããèªã¿èŸŒã GTMã³ã³ããå
ã®GA4ã¿ã°ãGoogleåºåã¿ã°ãããªã¬ãŒã倿°ãªã©ã¯å€æŽããŠããŸããã GTMã³ãŒãã¹ããããã®å·®ãæ¿ãã«ã€ããŠã¯ãWebãµã€ãã管çããŠãããããã¯ãããŒã ãžäŸé Œããæ€èšŒç°å¢ãšæ¬çªç°å¢ãžåæ ããŠããããŸããã éä¿¡çµè·¯ã®ã¿ã倿Žããæ§æã ã£ããããæ¢åã®èšæž¬èšèšãžã®å€æŽãæããŠå°å
¥ãé²ããããŸããã æ€èšŒçšGTMã³ã³ããã¯äœæããªã ä»åã®å°å
¥ã§ã¯ãGoogleã¿ã°ã²ãŒããŠã§ã€ã®æ€èšŒçšã«ãæ°ããGTMã³ã³ããã¯äœæããŸããã§ããã å®éã«æ¬çªç°å¢ã§å©çšããŠããGTMã³ã³ããããæ€èšŒç°å¢ã§ããã®ãŸãŸå©çšããŸããã å°å
¥ã®æµãã¯ä»¥äžã®ãšããã§ãã æ€èšŒç°å¢ã®CloudFrontãžèšå® æ€èšŒç°å¢ã®GTMã³ãŒãã¹ãããããå·®ãæ¿ã æ€èšŒç°å¢ã§åäœç¢ºèª æ¬çªç°å¢ã®CloudFrontãžèšå® æ¬çªç°å¢ã®GTMã³ãŒãã¹ãããããå·®ãæ¿ã æ¬çªç°å¢ã§åäœç¢ºèª å
ã«æ€èšŒç°å¢ã®CDNãžGoogleã¿ã°ã²ãŒããŠã§ã€ã®èšå®ã远å ãããããã¯ãããŒã ã«æ€èšŒç°å¢ã®GTMã³ãŒãã¹ãããããå·®ãæ¿ããŠããããŸããã ããã§åé¡ããªãããšã確èªããåŸãæ¬çªç°å¢ã®CloudFrontèšå®ãšGTMã³ãŒãã¹ããããã倿ŽããŸããã æ¬çªçšã®GTMã³ã³ããããã®ãŸãŸäœ¿çšããããšã§ãæ€èšŒçšã³ã³ãããšæ¬çªçšã³ã³ããã®éã«èšå®å·®åãçºçããŸããã å®éã«æ¬çªã§äœ¿çšããã¿ã°æ§æã®ãŸãŸãéä¿¡çµè·¯ã®å€æŽã«ãã圱é¿ã確èªã§ããŸããã æ€èšŒæã®ãã€ã³ã Googleã¿ã°ãèªç€Ÿãã¡ã€ã³ããèªã¿èŸŒãŸããŠããã æåã«ããã©ãŠã¶ã®éçºè
ããŒã«ã«ããNetworkã¿ããå©çšããGTMã³ã³ããã®èªã¿èŸŒã¿å
ã確èªããŸããã å°å
¥åã¯Googleãã¡ã€ã³ããèªã¿èŸŒãŸããŠããGTMã³ã³ããããå°å
¥åŸã¯èªç€Ÿãã¡ã€ã³äžã®Googleã¿ã°ã²ãŒããŠã§ã€çšãã¹ããèªã¿èŸŒãŸããŠããããšã確èªããŸãã å°å
¥å https://www.googletagmanager.com/... å°å
¥åŸ https://www.example.com/<Googleã¿ã°ã²ãŒããŠã§ã€çšãã¹>/... èªã¿èŸŒã¿å
ã ãã§ãªããHTTPã¹ããŒã¿ã¹ã³ãŒããæ£åžžã§ããããšããããŒãžè¡šç€ºæã«GTMã³ã³ãããåé¡ãªãå®è¡ãããŠããããšã確èªããŸããã æ¢åã®ã¿ã°ããããŸã§ã©ããçºç«ããã Googleã¿ã°ã®èªã¿èŸŒã¿å
ã倿ŽããŠããGTMã³ã³ããå
ã®ã¿ã°ãããªã¬ãŒãããããŸã§ã©ããåäœããå¿
èŠããããŸãã GTMã®ãã¬ãã¥ãŒã¢ãŒããå©çšãã以äžã確èªããŸããã ããŒãžè¡šç€ºæã«å¿
èŠãªã¿ã°ãçºç«ããããš ã¯ãªãã¯ãªã©ã®ã€ãã³ãã¿ã°ãçºç«ããããš GA4ãžå¿
èŠãªã€ãã³ããéä¿¡ãããããš ã€ãã³ããã©ã¡ãŒã¿ã®å€ãå°å
¥åãšå€ãã£ãŠããªãããš åäžã€ãã³ããéè€ããŠéä¿¡ãããŠããªãããš ä»åãGTMã³ã³ããå
ã®èšå®èªäœã¯å€æŽããŠããŸããã ãã®ãããéä¿¡çµè·¯ã倿Žããããšã§ãæ¢åã®ã¿ã°çºç«ãã€ãã³ãéä¿¡ã«åœ±é¿ãåºãŠããªãããäžå¿ã«ç¢ºèªããŸããã GA4ã§ã€ãã³ãã確èªã§ããã ãã©ãŠã¶äžã§ã¿ã°ãçºç«ããŠããŠããæçµçã«GA4ãžã€ãã³ããå°éããŠããªããã°ãèšæž¬ã¯æç«ããŸããã GA4ã®DebugViewããªã¢ã«ã¿ã€ã ã¬ããŒããå©çšãã以äžã確èªããŸããã ããŒãžãã¥ãŒãéä¿¡ãããŠããããš äž»èŠãªã€ãã³ããéä¿¡ãããŠããããš ã€ãã³ããã©ã¡ãŒã¿ãæ¬ æããŠããªãããš page_location ãªã©ã®å€ãæ£ããããš ã³ã³ããŒãžã§ã³ããŒãžã®ã€ãã³ããéä¿¡ãããŠããããš å°å
¥åãšæ¯èŒããŠãæ³å®å€ã®éè€ãæžå°ããªãããš Googleã¿ã°ã²ãŒããŠã§ã€ãçµç±ããå Žåã§ããGA4äžã§ã¯ããããŸã§ãšåãã€ãã³ãåããã©ã¡ãŒã¿ãšããŠç¢ºèªã§ããŸãã SPAã®ç»é¢é·ç§»ã確èªãã 察象ãµã€ãã«ã¯ãããŒãžå
šäœãåèªã¿èŸŒã¿ããã«ç»é¢ãåãæ¿ããSPA圢åŒã®ããŒãžããããŸããã SPAã§ã¯ãåå衚瀺æã«GTMã³ã³ãããæ£åžžã«èªã¿èŸŒãŸããŠããŠãããã®åŸã®ç»é¢é·ç§»ã§ããŒãžãã¥ãŒãã€ãã³ããæ£ããéä¿¡ããããšã¯éããŸããã ãã®ããã以äžãåããŠç¢ºèªããŸããã ããŒãžãæåã«è¡šç€ºãããšãã®èšæž¬ ããŒãžå
ã§ç»é¢é·ç§»ãããšãã®èšæž¬ ç»é¢é·ç§»åŸã® page_location ä»®æ³ããŒãžãã¥ãŒã®çºç« åç»é¢ã®å€ã dataLayer ã«æ®ã£ãŠããªãã åãã€ãã³ããéè€ããŠéä¿¡ãããŠããªãã Googleã¿ã°ã²ãŒããŠã§ã€èªäœã¯éä¿¡çµè·¯ã倿Žããä»çµã¿ã§ãããå°å
¥ãæ©ã«ãæ¢åã®SPAèšæž¬ãæ£åžžã«åäœããŠããããšãåãããŠç¢ºèªããŸããã ãã¬ãã¥ãŒã¢ãŒãã ãã§å€æããªã GTMã®ãã¬ãã¥ãŒã¢ãŒãã§ã¯æ£åžžã«èŠããŠããŠãããã¬ãã¥ãŒã¢ãŒããå©çšããªãéåžžã¢ã¯ã»ã¹ã§ã¯ãæ³å®ããéä¿¡ãçºçããŠããªãå ŽåããããŸãã ãã®ããã以äžã®äž¡æ¹ã§ç¢ºèªããŸããã GTMã®ãã¬ãã¥ãŒã¢ãŒããå©çšããç¶æ
ãã¬ãã¥ãŒã¢ãŒããå©çšããªãéåžžã¢ã¯ã»ã¹ åé¡ãçºçããå Žåã¯ã以äžã®é çªã§ç¢ºèªãããšãåå ãåãåãããããªããŸãã Webãµã€ãäžã§GTMã³ãŒãã¹ãããããå®è¡ãããŠããã GTMã³ã³ãããèªã¿èŸŒãŸããŠããã 察象ã®ã¿ã°ãçºç«ããŠããã ãã©ãŠã¶ããèšæž¬ãªã¯ãšã¹ããéä¿¡ãããŠããã CloudFrontãžãªã¯ãšã¹ããå°éããŠããã GoogleåŽãžè»¢éãããŠããã GA4ã§ã€ãã³ãã確èªã§ããã ãã©ãŠã¶ã®Networkã¿ãã«ãªã¯ãšã¹ãèªäœã衚瀺ãããŠããªãå Žåã¯ãCloudFrontããåã®Webãµã€ããGTMã®åŠçã確èªããŸãã äžæ¹ããã©ãŠã¶ãããªã¯ãšã¹ããéä¿¡ãããŠãããã®ã®ããšã©ãŒã«ãªã£ãŠããå Žåã¯ãã€ã³ãã©æ
åœãšé£æºããŠãCloudFrontãWAFãªã©ã確èªããŸãã ãã¹ãŠã®éä¿¡ãèªç€Ÿãã¡ã€ã³çµç±ã«ãªãããã§ã¯ãªã æ€èšŒæã«ã¯ããã©ãŠã¶ã®Networkã¿ãããGoogleé¢é£ã®éä¿¡ã確èªããŸããã ãã®çµæãGA4ã®èšæž¬ã§ã¯èªç€Ÿãã¡ã€ã³çµç±ã«ãªã£ãŠããéä¿¡ã確èªã§ããŸããããäžéšã®éä¿¡ã¯ãåŒãç¶ãGoogleãã¡ã€ã³ãžéä¿¡ãããŠããŸããã :::message Googleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ãããããšãã£ãŠãGoogleã«é¢ä¿ãããã¹ãŠã®éä¿¡ãèªç€Ÿãã¡ã€ã³çµç±ã«ãªãããã§ã¯ãããŸããã ::: ãã®ãããGoogleãã¡ã€ã³ãžã®éä¿¡ãå®å
šã«ãªããªããã©ããã§ã¯ãªãã察象ãšãªãGoogleã¿ã°ãèšæž¬ãªã¯ãšã¹ãããæ³å®ã©ããèªç€Ÿãã¡ã€ã³ãçµç±ããŠãããã確èªããŸããã å°å
¥åŸã®å¹æ Googleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥åŸãã¿ã°ã®çºç«ç¶æ³ãšãã³ã³ããŒãžã§ã³ããŒãžã®ã€ãã³ãæ°ã確èªããŸããã ã¿ã°ã®çºç«ç¶æ³ãæ¹åãã å°å
¥åã¯ãGoogleã¿ã°ã®èªã¿èŸŒã¿ãèšæž¬ãªã¯ãšã¹ããGoogleãã¡ã€ã³ãžçŽæ¥éä¿¡ããŠããŸããã å°å
¥åŸã¯ã察象éä¿¡ãèªç€Ÿãã¡ã€ã³ãçµç±ããæ§æãžãšå€æŽãããŸããã ããã«ãããåºåãããã«ãŒçã«èµ·å ããã¿ã°ã®æªçºç«ãæå¶ãããGA4ãžéä¿¡ãããã€ãã³ãæ°ãåææ¯ã»å鱿¯ã§çŽ10ã15%å¢å ããŸããã :::message æ§ç°å¢ãšã®å®å
šãªäžŠè¡çšŒåã«ããå³å¯ãªå·®åæ¯èŒã¯ã§ããªããããååŸæéã®åŸåã«åºã¥ãæšå®å€ã§ãã ::: Googleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ããŠãããã¹ãŠã®ãŠãŒã¶ãŒç°å¢ã§å¿
ãã¿ã°ãçºç«ããããã«ãªãããã§ã¯ãããŸããã äŸãã°ã以äžã®ãããªèŠå ã«ãã£ãŠãåŒãç¶ãã€ãã³ããéä¿¡ãããªãå¯èœæ§ããããŸãã JavaScriptãç¡å¹åãããŠãã ãŠãŒã¶ãŒã®åæç¶æ³ã«ãã£ãŠèšæž¬ãå¶éãããŠãã ããŒãžè¡šç€ºãå®äºããåã«ãŠãŒã¶ãŒãé¢è±ãã ãã©ãŠã¶ããããã¯ãŒã¯ã®ç¶æ
ã«ãã£ãŠéä¿¡ã«å€±æãã äžæ¹ã§ãGoogleãã¡ã€ã³ãžã®çŽæ¥éä¿¡ããããã¯ãããããšã«ããã€ãã³ãæ¬ æã«ã€ããŠã¯ãäžå®ã®æ¹å广ã確èªã§ããŸããã GA4ãšããã¯ãšã³ãããŒã¿ããŒã¹ã®æ°å€å·®ãçž®å°ãã ä»åãå°å
¥å¹æã確èªãããããGA4ã§èšæž¬ããã³ã³ããŒãžã§ã³ããŒãžã®ã€ãã³ãæ°ãšãããã¯ãšã³ãã®ããŒã¿ããŒã¹ã«ä¿åãããŠããã³ã³ããŒãžã§ã³ä»¶æ°ãæ¯èŒããŸããã å°å
¥åã¯ãããã¯ãšã³ãã®ããŒã¿ããŒã¹äžã§ã¯ã³ã³ããŒãžã§ã³ãèšé²ãããŠãããã®ã®ãGA4ã§ã¯å¯Ÿå¿ããã€ãã³ãã確èªã§ããªãã±ãŒã¹ããããäž¡è
ã®æ°å€ã«å€§ããªå·®ããããŸããã å°å
¥å ããã¯ãšã³ãDBã®ã³ã³ããŒãžã§ã³ä»¶æ° ïŒ GA4ã®ã³ã³ããŒãžã§ã³ããŒãžã€ãã³ãæ° Googleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥åŸã¯ãGA4ã§ç¢ºèªã§ããã³ã³ããŒãžã§ã³ããŒãžã®ã€ãã³ãæ°ãå¢å ããããã¯ãšã³ãã®ããŒã¿ããŒã¹ã«èšé²ãããŠããä»¶æ°ãžå€§ããè¿ã¥ããŸããã å°å
¥åŸ ããã¯ãšã³ãDBã®ã³ã³ããŒãžã§ã³ä»¶æ° â GA4ã®ã³ã³ããŒãžã§ã³ããŒãžã€ãã³ãæ° ããã¯ãšã³ãã®ããŒã¿ããŒã¹ãšGA4ã§ã¯ãèšæž¬ã®ä»çµã¿ãéèšæ¡ä»¶ãç°ãªããããäž¡è
ã®æ°å€ãå®å
šã«äžèŽãããšã¯éããŸããã äŸãã°ãã³ã³ããŒãžã§ã³åŠçãããã¯ãšã³ãã§å®äºããŠããŠãããŠãŒã¶ãŒãå®äºããŒãžã衚瀺ããåã«é¢è±ããå Žåã¯ãGA4ã®ããŒãžã€ãã³ããçºçããªãå¯èœæ§ããããŸãã ãŸããåæèšå®ããã©ãŠã¶ç°å¢ãªã©ã«ãã£ãŠãGA4ãžã®éä¿¡ãå¶éãããå ŽåããããŸãã ããã§ããå°å
¥åŸã«äž¡è
ã®æ°å€å·®ã倧ããçž®å°ããããšããããããŸã§æ¬ æããŠããäžéšã®ã€ãã³ããååŸã§ããããã«ãªã£ããšèããŠããŸãã åºåæœçã®è©äŸ¡ã«å©çšããããŒã¿ãæ¹åãã ã³ã³ããŒãžã§ã³ã€ãã³ãã®ååŸæ°ãå¢ããããšã§ãGA4ãGoogleåºåã§ç¢ºèªã§ããããŒã¿ããå®éã®ã³ã³ããŒãžã§ã³ç¶æ³ã«ããè¿ã¥ããŸããã ããã«ãããåºåæœçããšã®ææããå°å
¥åããæ£ç¢ºã«è©äŸ¡ã§ããããã«ãªããŸããã ãŸããGoogleåºåãžé£æºãããã³ã³ããŒãžã§ã³ããŒã¿ã®æ¬ æãæžãããšã§ãèªåå
¥æãåºåé
ä¿¡ã®æé©åã«å©çšã§ããããŒã¿éã®æ¹åãæåŸ
ã§ããŸãã ãã ããåºåã®ææãé
信粟床ã¯ã以äžã®ãããªè€æ°ã®èŠå ã«å·Šå³ãããŸãã åºåäºç® å
¥ææŠç¥ ã¿ãŒã²ãã£ã³ã° åºåã¯ãªãšã€ãã£ã ã©ã³ãã£ã³ã°ããŒãž åžå Žç°å¢ ã³ã³ããŒãžã§ã³èšå® ãã®ãããGoogleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥ã ãã§åºåææãåºå粟床ãåäžãããšã¯æå®ããŠããŸããã ä»åã®äž»ãªææã¯ãåºåæœçã®è©äŸ¡ãé
ä¿¡æé©åã«å©çšãããã³ã³ããŒãžã§ã³ããŒã¿ã®æ¬ æãæžãããããšã ãšèããŠããŸãã æ¯ãè¿ã GTMã³ã³ããå
ã®å€æŽãæããŠå°å
¥ã§ãã ä»åã®æ§æã§ã¯ãGTMã³ã³ããå
ã®GA4ã¿ã°ãGoogleåºåã¿ã°ãããªã¬ãŒã倿°ãªã©ã倿ŽããŠããŸããã CloudFrontåŽã®éä¿¡çµè·¯ãšãWebãµã€ãã«èšçœ®ããŠããGTMã³ãŒãã¹ããããã®èªã¿èŸŒã¿å
ã倿Žããããšã§å°å
¥ã§ããŸããã æ¢åã®èšæž¬èšèšãžã®åœ±é¿ãæããªããå°å
¥ã§ããç¹ã¯ã倧ããªã¡ãªããã§ããã æ€èšŒç°å¢ããæ®µéçã«å°å
¥ããããšãéèŠ ãããªãæ¬çªç°å¢ãžåæ ããã®ã§ã¯ãªããå
ã«æ€èšŒç°å¢ã®CloudFrontèšå®ãšGTMã³ãŒãã¹ããããã倿ŽããŸããã æ€èšŒç°å¢ã§ã¯ãGTMã³ã³ããã®èªã¿èŸŒã¿ãGA4ã€ãã³ããSPAé·ç§»ãã³ã³ããŒãžã§ã³ããŒãžãªã©ã確èªããŸããã åé¡ããªãããšã確èªããåŸã«æ¬çªç°å¢ãžå±éããããšã§ãæ¢åèšæž¬ãžã®åœ±é¿ãæããªããå°å
¥ã§ããŸããã è€æ°ããŒã ã®é£æºãå¿
èŠ Googleã¿ã°ã²ãŒããŠã§ã€ã¯ãGTMãGA4ã ãã§ãªããCloudFrontãªã©ã®é
ä¿¡åºç€ãšãWebãµã€ãã«èšçœ®ãããã³ãŒãã«ãé¢ä¿ããŸãã ä»åã®å°å
¥ã§ã¯ãDataOpsã°ã«ãŒããã€ã³ãã©æ
åœããããã¯ãããŒã ããããã以äžãæ
åœããŸããã DataOpsã°ã«ãŒãïŒèŠä»¶æŽçãèšæž¬ç¢ºèªã广æ€èšŒ ã€ã³ãã©æ
åœïŒCloudFrontã®èšå® ãããã¯ãããŒã ïŒGTMã³ãŒãã¹ããããã®å·®ãæ¿ã äºåã«æ
åœç¯å²ãæŽçããããšã§ãæ€èšŒç°å¢ããæ¬çªç°å¢ãžã®å±éãã¹ã ãŒãºã«é²ããããŸããã ã¬ã€ã€ãŒããšã«åãåããããšãéèŠ Googleã¿ã°ã²ãŒããŠã§ã€å°å
¥åŸã®éä¿¡ã«ã¯ãè€æ°ã®èŠçŽ ãé¢ä¿ããŸãã Webãµã€ã â GTMã³ãŒãã¹ãããã â GTMã³ã³ãã â ãã©ãŠã¶ â Amazon CloudFront â Googleã¿ã°ã²ãŒããŠã§ã€ â GA4ã»Googleåºåãªã© åé¡ãçºçããå Žåã¯ãæåãããã¹ãŠã調æ»ããã®ã§ã¯ãªããã©ããŸã§æ£åžžã«åŠçãããŠããããé çªã«ç¢ºèªããããšãéèŠã§ãã ãã©ãŠã¶ã®Networkã¿ããGTMã®ãã¬ãã¥ãŒã¢ãŒããGA4ã®DebugViewãªã©ãçµã¿åãããããšã§ãåé¡ãWebãµã€ãåŽã«ããã®ããGTMã«ããã®ããã€ã³ãã©åŽã«ããã®ããåãåãããããªããŸããã ãããã« ä»åã¯ãAmazon CloudFrontãå©çšããŠãGoogleã¿ã°ã²ãŒããŠã§ã€ãå°å
¥ããäºäŸã玹ä»ããŸããã Googleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥ã ãã§ããã¹ãŠã®ã€ãã³ãæ¬ æãé²ããããã§ã¯ãããŸããã äžæ¹ã§ãGoogleãã¡ã€ã³ãžã®çŽæ¥éä¿¡ããããã¯ãããããšã«ããæ¬ æã軜æžãããµã€ãæ¹åãåºåæœçã®å€æã«å©çšããããŒã¿ãã宿
ã«è¿ã¥ãã广ã確èªã§ããŸããã Amazon CloudFrontãå©çšããŠGoogleã¿ã°ã²ãŒããŠã§ã€ã®å°å
¥ãæ€èšãããŠããæ¹ã«ãšã£ãŠãæ¬èšäºãå°ãã§ãåèã«ãªãã°å¹žãã§ãã
ããã«ã¡ã¯ãã¢ãã€ã«ã¢ããªéçºéšã® Yao ã§ãã Web ãµã€ãã® URL ãšã¢ã¯ã»ã¹èªèšŒæ
å ±ãæž¡ããšããµã€ããã¯ããŒã«ã㊠API 仿§ãéçæããCompose MultiplatformïŒCMPïŒã® Android/iOS ã¢ããªãèªåçæããŠãåãµã€ããšã®ã¹ã¯ãªãŒã³ã·ã§ããæ¯èŒã§æ€åãŸã§è¡ãââãããªããŒã«ã« AI ãã€ãã©ã€ã³ãäœããå®éã«èªç€ŸãµãŒãã¹ KINTO ã®ã¹ããŒãžã³ã°ç°å¢ãåãã¢ããªã«å€æããŠã¿ãŸãããçµè«ããèšããšã ã¢ããªãã¡ãŒã¹ãã¯ãã¯ãäºç®ã®åé¡ã§ã¯ãªããããŒã«ãã§ãŒã³ã®åé¡ ã§ããæ¬èšäºã§ã¯ãã€ãã©ã€ã³ã®èšèšãçæãããã¢ãŒããã¯ãã£ãå®éã®ã³ãŒããåãµã€ããšã®äžŠåæ¯èŒã¹ã¯ãªãŒã³ã·ã§ãããŸã§ããã®å
šå·¥çšã玹ä»ããŸãã ãã®èšäºã§ãããããš Web ãµã€ãã¯ãããèªäœã 仿§æž ïŒããŒãžãšãããŒïŒ+ ãã¹ãããŒã¿ ïŒå® API ãã©ãã£ãã¯ïŒ+ åãå
¥ãåºæº ïŒã¢ãã€ã«ã¹ã¯ãªãŒã³ã·ã§ããïŒã§ãã ããŒã«ã« AI ãã€ãã©ã€ã³ããã¯ããŒã« â 仿§ã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã° â ã³ãŒãçæ â ã¹ã¯ãªãŒã³ã·ã§ããç
§åæ€åããéã«ãŒãã§åã ææïŒ16 ç»é¢ã®ä»æ§åãP0 ã® 4 ç»é¢ããšã³ãããŒãšã³ãå®è£
ãAPI 31 ãªãã¬ãŒã·ã§ã³çæã ãã¹ã 107 æ¬å
šã°ãªãŒã³ ãAndroid ãšãã¥ã¬ãŒã¿ãŒ + iPhone ã·ãã¥ã¬ãŒã¿ãŒã§åäœ DTO ã¯é²ç»æžã¿ JSON ããæ©æ¢°çã«å°åºãã ããã¯ãšã³ããæ³åã§è£ããªã ãªãã©ã€ã³ãã¢ïŒRecorded ã¢ãŒãïŒã¯åäžã® Ktor ã¯ã©ã€ã¢ã³ãã MockEngine ã«èŒãæ¿ããã ãã§ã ãããã¯ã·ã§ã³ã®ããŒã¹çµè·¯ããã®ãŸãŸéã :::message alert æ¬èšäºã®ãã€ãã©ã€ã³ã¯ èªç€Ÿãµã€ã ïŒèªèšŒæ
å ±ãšæš©å©ãèªåãæã€ãµã€ãïŒã倿ããããã®ãã®ã§ããä»ç€Ÿãµã€ãã®ã¹ã¯ã¬ã€ãã³ã°ã«äœ¿ããã®ã§ã¯ãããŸãããã¯ããŒã«å¯Ÿè±¡ã¯ãã¹ãŠèªç€Ÿã®ã¹ããŒãžã³ã°ç°å¢ã§ãã ::: 1. ãªãã¢ããªãã¡ãŒã¹ãã¯é¿ããããªãã®ã ãŸãããŒã¿ãããæ¥æ¬ã§ã¯ãã¹ããŒããã©ã³ã§ã€ã³ã¿ãŒããããå©çšããå人ã®å²åã 2016 幎㮠57.9% ãã 2025 幎ã«ã¯ 74.3% ãžäžæããåæéã« PC 㯠58.6% â 45.6% ã«äžèœããŸããïŒ ç·åç éä¿¡å©çšååèª¿æ» ïŒã å©çšæéã®å·®ã¯ããã«é¡èã§ããå
šå¹Žä»£ã®ã€ã³ã¿ãŒãããå¹³åå©çšæéïŒå¹³æ¥ïŒã¯ã¢ãã€ã«æ©åšã 116.8 å/æ¥ ã«å¯ŸããŠããœã³ã³ã¯ 50.0 å/æ¥ ãš 2 å以äžãäŒæ¥ã«ã¯ 133.5 å vs 23.6 å ãš 5 åè¶
ãŸã§éããŸãïŒ ç·åçæ
å ±éä¿¡æ¿çç ç©¶æã什å6幎床 æ
å ±éä¿¡ã¡ãã£ã¢ã®å©çšæéãšæ
å ±è¡åã«é¢ãã調æ»ã ïŒã ããã«ã¹ããŒããã©ã³ã®äžã§ã¯ããŠãŒã¶ãŒã¯ãã©ãŠã¶ã§ã¯ãªãã¢ããªã®äžã«ããŸããç±³åœã®æäººã¯ã¢ãã€ã«ã®ã€ã³ã¿ãŒãããå©çšæéã® çŽ 9 å² ãã¢ããªã«è²»ãããŠããŸãïŒ eMarketer ïŒã ç±³åœåžå Žã§ã¯ããã®è°è«ã¯ 10 幎以äžåã«æ±ºçããŠããŸãã Instagram ïŒé·å¹ŽãWeb çã¯é²èЧå°çšã ã£ã Uber ïŒWeb ã¯ã©ã€ã¢ã³ãã¯ã¢ããªãåãããªã端æ«åãã®è»œéãã©ãŒã«ãã㯠Venmo ïŒ2018 å¹Žã«æ±ºæžæ©èœã Web ãµã€ãããäžžããšæ€å» ããã·ã¥éç¥ã¯ãªãã³ã·ã§ã³ã®çåœç·ãããŒã ç»é¢ã®ã¢ã€ã³ã³ã¯ãã©ã³ãã®æä¹
çãªé£å°ãOS çµ±åïŒæ±ºæžã»çäœèªèšŒã»ãŠã©ã¬ããã»å
±æã·ãŒãïŒã¯åœç¶ã®åæããã¡ãã§ã¯ããµãŒãã¹ã«ã¢ããªããèŠããã©ããããåã人ã¯ããããŸããã ãPWA ã§ããã®ã§ã¯ïŒããšããåè«ã«ã¯å
ã«çããŠãããŸããWeb Push ã¯ç¢ºãã«ååšããŸãïŒiOS ã 16.4 ããããŒã ç»é¢è¿œå æžã¿ã® Web ã¢ããªã«éæŸïŒãããŠãŒã¶ãŒããŸãããŒãžãæåã§ãã€ã³ã¹ããŒã«ãããå¿
èŠããããé
ä¿¡ã®ä¿¡é Œæ§ã OS çµ±åã®æ·±ãããã€ãã£ãããã·ã¥ã«ã¯é ãåã³ãŸããã10 幎çµã£ãŠãã®ã£ããã¯éãããŸãŸã§ããªãã³ã·ã§ã³ã®åè² ã¯äŸç¶ãã€ãã£ãåŽã§æ±ºãŸã£ãŠããŸãã 2. ã§ã¯ããªãçãã£ãŠããªãã®ã å€å
žçãªã³ã¹ãè¡šãæ®é
·ã ããã§ãã é
ç® å
容 ãã¶ã€ã³å·¥çš ã³ãŒããæžãåã«ãWeb ã®äœéšãã¢ãã€ã«åãã«åèšèš ã³ãŒãããŒã¹ à 2 Swift ãš Kotlin ã§åããããã¯ããäºåºŠå®è£
ããŒã à 2 2 çš®é¡ã®ã¹ãã«ã»ããã§æ¡çš ããžãã¯ã®äºéå åããã°ãäºåºŠçŽããåãæ©èœãå¥ã
ã®ææã«åºãã仿§åããäŒè°ãæ°žé ã«ç¶ã ãã®äžã« QA åå¢ + ã¢ããªã¹ãã¢éçš æ¬åœã®æ¥æã¯ v1 ã§ã¯ãããŸããã v1 以éã®ãã¹ãŠã®æ©èœããæ°žé ã«äºåºŠãã€ãªãªãŒã¹ããã ããšã§ãããã®ç¹°ãè¿ã課çšãããWeb ã§ååããå
éãããæ¢å®æ¹éãžãšç¡¬åãããŠããŸããã 3. èšç®åŒãå€ãã 2 ã€ã®æè¡ æè¿ 2 ã€ã®ããšãèµ·ãããããäºãã«å¢å¹
ãåã£ãŠããŸãã AI ãåŽåã³ã¹ããæ¶ããã ãšãŒãžã§ã³ãã¯æ¢åã® Web ãµã€ãââã¬ã³ããªã³ã°æžã¿ããŒãžãã¹ã¯ãªãŒã³ã·ã§ãããå® API ãã©ãã£ãã¯ââãèªã¿åããã㮠蚌æ ããã¢ããªãæžããããã«ãªããŸãããWeb ãµã€ãã¯ãã§ã«ä»æ§æžã§ãããã¹ãããŒã¿ã§ããåãå
¥ãåºæºã§ããããšã¯èª°ããèªãã ãããšãŒãžã§ã³ãã¯ç²ããã«èªã¿ãŸãã CMP ãäºéåã³ã¹ããæ¶ããã 1 ã€ã® Kotlin ã³ãŒãããŒã¹ãã Android ã¢ããªãš iOS ã¢ããªãçãŸããŸããããã¹ãŠã®æ©èœãäºåºŠãªãªãŒã¹ãããçšã¯ãèŠåŸã§ã¯ãªã æ§é ã«ãã£ãŠæ¶æ»
ããŸãã ããã§æ±ºå®çãªã®ã¯ AI åŽã®åœ¢æ
ã§ããéæ³ã®ããã³ãã 1 çºã§ã¯ãªãã ã¯ããŒã« â 仿§ã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã° â 仿§ããã³ãŒãçæ â ã¹ã¯ãªãŒã³ã·ã§ããã§ç
§åæ€å ãšãã ãã€ãã©ã€ã³ ã§ããããšã以éã¯ãããå®ãµã€ãã«é©çšããèšé²ã§ããããã®åã« 2 ã€ã®èšèšå€æââãªã ããŒã«ã« ãªã®ãããªã CMP ãªã®ãââãçä»ããŸãã 4. ãªããããŒã«ã«ãAI ãã€ãã©ã€ã³ãªã®ã ã¯ã©ãŠãåã®å€æ SaaS ãäžå¯èœãšã¯èšããŸããããããŒã«ã«ãéžãã çç±ã¯ 2 ã€ãã©ã¡ããã¢ãã«æ§èœãšã¯ç¡é¢ä¿ã§ãã â æš©éãšèªèšŒæ
å ±ãããŒã«ã«ã«çãŸãã 䜿ãã®ã¯ç°å¢å€æ°ããèªãèªèšŒæ
å ±ã ãïŒgitignore æžã¿ã® .env ãš Playwright ã®ãã°ã€ã³ç¶æ
ïŒãä»åã¹ã³ãŒãã«å
¥ãã 16 ç»é¢ã¯ãã¹ãŠå
¬éããŒãžã§ãã»ãã·ã§ã³ãªãã§ãå°éã§ããŸãïŒäžéšã®ãã¹ã«ã¯å¥ç³»çµ±ã®ã¢ã¯ã»ã¹å¶éãããã£ãŠããããã¡ãã®èªèšŒãæž¡ããŠããªãã®ã§åŸè¿°ã® 401 ã«ãªããŸãïŒã瀟å€ã«é ãã倿ã¯éããèªåã®ã©ãããããã§åããªã ãã ã®ç€Ÿå
ããŒã« ã§æžã¿ãŸãã å¢çãæç¢ºã§ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ïŒä»å㯠Claude CodeïŒã»ã¹ã¯ãªããå®è¡ã»èªèšŒæ
å ±ã¯ããŒã«ã«ã ã¢ãã«ã¯ã¯ã©ãŠããªã®ã§ããŒãžå
容㚠API ãµã³ãã«ã¯ãã·ã³ãé¢ããŸã ãã¯ããŒã«å¯Ÿè±¡ã¯äŒå¡ãšãªã¢ãå«ãŸãªãå
¬éçžåœã®ããŒãžã«éããAPI ãã°ã¯ãã¹ãã³ã°æžã¿ã§ãã â¡ ããŒã«ã«ã®ã¢ãã€ã«éçºç°å¢ã«ãã®ãŸãŸç¹ããã XcodeãAndroid SDKããšãã¥ã¬ãŒã¿ãŒãåããã·ã³ã«ããã®ã§ã ã¯ããŒã« â 仿§ â ã³ãŒãçæ â ãã«ã â ã¹ã¯ãªãŒã³ã·ã§ããæ€åã 1 åã®å®è¡ã§éããŸã ãåããã€ãã©ã€ã³ããšãã¥ã¬ãŒã¿ãŒãæäœããŠæ®åœ±ããåãµã€ããšäžŠã¹ãå·®åã P0/P1/P2 ã«åé¡ãæ·±å»ãªãã®ã¯ã«ãŒãå
ã§ä¿®æ£ïŒiOS ã®æäœã¯çŸç¶æåïŒãã¯ã©ãŠãã§ãããªãã2 ã€ã® OS ã®ãã«ãããŒã«ãã§ãŒã³ãšããã€ã¹ãã¡ãŒã ãèªåã§æ±ããããšã«ãªããŸãã ããŒã«ã«ãã©ãããšã¯ç¬ç«ããããã€ãã©ã€ã³èªäœã®æ¹éã 2 ã€ã 蚌æ ã§ãã£ãŠãæšæž¬ã§ã¯ãªãã Playwright ãåéããã®ã¯ ã¬ã³ããªã³ã°æžã¿ ã® 60 ããŒãžââHTMLãã¹ã¯ãªãŒã³ã·ã§ããã å® API ãã©ãã£ã㯠ïŒãã¹ãã³ã°æžã¿ãµã³ãã«ïŒã仿§ã¯ããããå°ãããŸãã ææç©ã¯å¥çŽããã§ãŒãºã¯ã²ãŒãã åãã§ãŒãºã¯ææç©ãæžãåºããŠããæ¬¡ãžïŒ artifacts/ â spec/ â app/ â report/ ïŒã決å®çã«å®è¡ã§ããå·¥çšã¯ãšãŒãžã§ã³ãèªèº«ã®ã¹ã¯ãªããã§ãåã²ãŒãã人éãèŠãŸãã :::message ãã€ãã©ã€ã³ã®éåïŒ ããã¯ãšã³ããæ³åã§è£ããªãã ãã©ãã£ãã¯ã§èŠ³æž¬ãããªãã£ããã£ãŒã«ãã¯ãååšããªãã ::: 5. ãªã Compose Multiplatform ãªã®ã ç§ã¯ KMM ã®æä»£ãã KMP / CMP ã远ããããŠããŸããïŒ ãããŸã§ã«æžããèšäºã¯ãã¡ã ïŒãä»åã¿ãŒã²ããã« CMP ãéžãã çç±ã¯ 3 ã€ã§ãã äžè²«æ§ã KMP ã®ããŒã¿å±€ãšãã¡ã€ã³å±€ã 1 ã€ã§äž¡ OS ã«ä»ããã®ã§ãiOS ãš Android ã®ããžãã¹ããžãã¯ã¯ ä¹é¢ãããããªã ãå®è£
ã 1 ã€ããã¹ãã¹ã€ãŒãã 1 ã€ã ããã§ãã å¹çã 2 åã§ã¯ãªãçŽ 1 åã®å·¥æ°ãv1 ã§ãããã以éã®ãã¹ãŠã®æ©èœã§ãã1 ããŒã ã§äž¡ã¹ãã¢ã«åºè·ã æ§èœã Android ã§ã¯ââæ¥æ¬ã¯ããŠããäžçã®ã¹ããã®éåã§ãââCompose 㯠Google ã Android ã®æšæº UI ããŒã«ããããšããŠæäŸããŠãããã®ãã®ãã®ã§ããã¡ãŒã¹ãããŒãã£ã¢ããªãšåã ART äžãåãæç»ãã€ãã©ã€ã³äžã§åããŸããã€ãŸã CMP ã¢ããªã® Android åŽã¯ã ãã©ãããã©ãŒã æšæºã®å€ã«å¥ã®ã¬ã³ããªã³ã°å±€ãç©ã¿ãŸãã ïŒCompose èªèº«ã¯ View ããªãŒã§ã¯ãªãèªåã®ã³ã³ããžã·ã§ã³ãæç»ããŸããããã®å
㯠Android ã®ã°ã©ãã£ãã¯ã¹ã¹ã¿ãã¯ã§ãïŒãiOS ã§ã¯ CMP ã Skia ã§æç»ããŸãââç¬èªãšã³ãžã³ãç©ããšããç¹ã¯ä»ã®ã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ãšåãã¢ãŒããã¯ãã£äžã®è³ãã§ãââããKotlin/Native ãå
±æã³ãŒãããã·ã³ã³ãŒãã«ã³ã³ãã€ã«ããAndroid åŽã¯æšæºããŒã«ãããã®ãŸãŸãä»åãã³ãããŒã¯ãåã£ãããã§ã¯ãªãã®ã§åªå£ã¯æèšããŸãããã Android åŽã§è¿œå ã®æç»å±€ãèè² ããªã ãšããæ§é äžã®å·®ã¯æ®ããŸãã ã¹ã©ã€ãã«åãŸããªããå®åã§å¹ãçç±ïŒ æ¢åããŒã ã«ã¯ Android åŽãã¿ãåç¶ã Compose ã¯ãã§ã« Android ã®æšæºãCMP ã¢ããªã® Android ååã¯ãããŸã® Android ãšã³ãžãã¢ã忥ããèªããæ
£çšçãªãã€ãã£ãã³ãŒããFlutter ã¯å
šå¡ã« Dart ä¹ãæããèŠæ±ããŸãã æ®µéå°å
¥ã§ããã ããŒã¿å±€ã ãã®å
±æããUI å
šäœã®å
±æãå¯ãæ¢åãã€ãã£ãã¢ããªãžã®åã蟌ã¿ã SwiftUI/UIKit ãšã®çžäºéçšãå¯ãç§»è¡ã®éçã§ãã£ãŠãå
šé¢æžãçŽããããããªãã°ãã§ã¯ãªãã äž¡é£å¶ã®ãã¡ãŒã¹ãããŒãã£ãæ¯ããã CMP 㯠JetBrains 補ãGoogle 㯠KMP ãå
¬åŒãµããŒãããèªç€Ÿãããã¯ã·ã§ã³ã§äœ¿çšãïŒ Google Docs ãæ¡çšæžã¿ ãWorkspace ä»ã¢ããªã远éäžïŒãandroidx ã® KMP çïŒLifecycle / ViewModel / Room / DataStoreãNavigation ã® CMP ç㯠JetBrains 管çïŒãåºè·ãCMP ã® iOS 察å¿ã¯ 2025 幎 5 æã1.8.0 ã§ stable å°é ããã©ãããã©ãŒã ã®ææè
ãšèšèªã®çã¿ã®èŠªãåãã¹ã¿ãã¯ã«åæããŠããââæ¬¡ã® 10 å¹Žã®æè³å
ã瀺ããã以äžãªãã·ã°ãã«ã§ãã ãã©ãããã©ãŒã API ã«çŽæ¥ã¢ã¯ã»ã¹ã expect/actual ã§ Keychain / EncryptedSharedPreferences ããã€ãã£ãã«åŒã¶ãåŸ
ãããããã©ã°ã€ã³å±€ãªãã ã¹ã¿ãã¯å
šäœã 1 èšèªã Kotlin ã§ç«¯ãã端ãŸã§ãKtor ã§ããã¯ãšã³ããŸã§ãæ¡çšåžå ŽãããŒã«ãã§ãŒã³ãæçã ãããŠæ¬èšäºå
šäœã貫ãçç±ãããã§ãã :::message CMP 㯠AI ã³ãŒãçæã®çæ³çãªã¿ãŒã²ããã§ããã 匷ãåä»ããããåäžã³ãŒãããŒã¹ã§ã¯ãã³ã³ãã€ã©ããšãŒãžã§ã³ãã®å
šåºåã«å¯Ÿããç¡æã®æ€èšŒåšã«ãªãã kotlinx.serialization ã® DTO ã¯èšé²æžã¿ JSON ããæ©æ¢°çã«å°åºã§ããã1 åã®çæãå
šãã©ãããã©ãŒã ãã«ããŒãããAI ãš CMP ã¯è¶³ãç®ã§ã¯ãªã æãç® ã§å¹ãã ::: 6. ã±ãŒã¹ã¹ã¿ãã£ïŒKINTO ã¹ããŒãžã³ã° â åã CMP ã¢ã㪠6.1 ãã€ãã©ã€ã³å
šäœå 5 ãã§ãŒãºãåãã§ãŒãºã¯ææç©ãæžãåºããŠããæ¬¡ãžé²ã¿ããã§ãŒãºéã«äººéã®ã¬ãã¥ãŒã²ãŒãããããŸãã CRAWL â ãµã€ããã¢ãã€ã«éçºã®ãªãã¡ã¬ã³ã¹ã«å€ãã 1 ããŒãžã 4 ã€ã®ææç©ãšããŠèšé²ããŸãã ã¢ãã€ã«ïŒ390Ã844 @2xãiPhone UAã isMobile / hasTouch ïŒãšãã¹ã¯ãããïŒ1440Ã900ïŒã®ãã«ããŒãžã¹ã¯ãªãŒã³ã·ã§ããã networkidle åŸã® ã¬ã³ããªã³ã°æžã¿ DOM ããã®ããŒãžãå®éã«å©ãã APIããããŠåãšã³ããã€ã³ãã®ã¬ã¹ãã³ã¹å®äœãã¢ãã€ã«åŽãå€æã®æ£è§£ããŒã¿ã§ãPhase 5 ã®æ€åã§ãåãç»åãšäžŠã¹ãŸãã ãµã€ãã®ã¢ãã€ã«è¡šç€ºããã®ãŸãŸèšèšæžã«ãªã ã®ã§ããã¢ãã€ã«åãã«äœãçŽããå·¥çšãæ¶ããŸãã API ã¯ããŒãžåäœã§èšé²ããŸãã åãšã³ããªã«ãã©ã®ããŒãžãåŒãèµ·ããããããä»ãã®ã§ãç»é¢ â å¿
èŠããŒã¿ â ãšã³ããã€ã³ããæ©æ¢°çã«ç¹ãããŸãïŒèŠç©ãã·ãã¥ã¬ãŒã·ã§ã³ã® ?step=1&memberType=corporate&term=7&bonus=0 ã car-models/{carCode}/selectable-contract ãå©ãããšããç²åºŠã§ïŒãå€ãåããŒã¯ã³ã«çœ®ãæããã¬ã¹ãã³ã¹åœ¢ç¶ïŒ float / iso8601 / url / null ïŒãä¿åããããã DTO ã®åä»ãã®æ ¹æ ã«ãªããŸããå®äœãµã³ãã«ã¯ãšã³ããã€ã³ãããšã«æå€§ 3 ä»¶ãããã·ã¥ã§éè€æé€ââè€æ°ãµã³ãã«ã®åéåããã©ã®ãã£ãŒã«ãã nullable ãããæ±ºããåããã¡ã€ã«ãåŸã§ MockEngine ã®ãªãã¬ã€ãšå¥çŽãã¹ãã«ã䜿ãããŸãã URL ããã³ãã¬ãŒãåããŠç»é¢ãæ°ããŸãã ãã¹ 1 ã»ã°ã¡ã³ããã€ãèå¥åããããã®ãåã«ç³ãã ãã§ãã function templatize(pathname: string): string { return pathname.split("/").map((seg) => { if (/^\d+$/.test(seg)) return "{id}"; if (UUID_RE.test(seg)) return "{uuid}"; // CAR-0000003908 â {carCode}ãGRD-⊠â {grdCode} if (PREFIXED_CODE_RE.test(seg)) return `{${seg.split("-")[0].toLowerCase()}Code}`; if (isOpaqueToken(seg)) return "{token}"; return seg; }).join("/") || "/"; } ããã§ååããŒãžã¯æå€§ 3 ã€ã³ã¹ã¿ã³ã¹ã ã蟿ãã°æžã¿ã60 ããŒãžã¯ 58 ãã³ãã¬ãŒãã«æŽçãããŠãããã 16 ç»é¢ã®åè£ã«ãªããŸããããŒãžããšã® outlinks ã¯ããã²ãŒã·ã§ã³ã°ã©ãã«ã img / table / iframe /ç¹°ãè¿ãã«ãŒãã®æ§é ã·ã°ããã£ã¯ã³ã³ããŒãã³ãäžèЧã«ãåç
§ãããŠãã CSS ãšãã©ã³ãã¯å®ãã¡ã€ã«ãšããŠååŸããŠãã¶ã€ã³ããŒã¯ã³ã«åããŸãã Phase 2 ã§ããµã€ãã¯æ©æ¢°å¯èªãªå¥çŽã«å€ãããŸãã app-spec.json ã® 16 ç»é¢ããããã«ããœãŒã¹ URLã»åªå
床ã»ã³ã³ããŒãã³ãã»å¿
èŠããŒã¿ã»æç€ºçãªã¢ãã€ã«é©å¿ãã©ã³ãäžããããŸããæ¬ä»¶ã®ããã«ãµã€ãããã§ã«ã¬ã¹ãã³ã·ãå¯Ÿå¿æžã¿ãªãããã®é©å¿èšèšã¯ã¢ãã€ã«ãã¥ãŒããŒãã®ã¯ããŒã«çµæããçŽæ¥å°åºããã ãã€ãã©ã€ã³ã«åžåãããŸã ã { "id": "Home", "priority": "P0", "components": ["TopBar", "HeroCarousel", "CarCard", "SectionHeader", ...], "dataNeeds": ["CarouselSlide", "RecommendedCarList", "CorpContent", ...], "mobileAdaptation": "Hero carousel â HorizontalPager with page indicator, 16:9 slides using the imageUrl_x2 asset. The desktop 3-column grid collapses to 2 columns ... 51 images on this page: everything below the first two sections must be lazily loaded via AsyncImage." } 念ã®ããè£è¶³ãããšããã®æç²ã¯ å®ãã¡ã€ã«ã®ãŸãŸã§ãæ£ãã仿§ã§ã¯ãããŸãã ã 16:9 slides ãšããæšªé·åæã誀ãã§ãCMS ãå®éã«é
ä¿¡ããŠããã®ã¯æ£æ¹åœ¢çŽ æã§ããã6.4 ã§è§Šããã¬ã¿ãŒããã¯ã¹äžå
·åïŒå®è£
㯠16:10 ã®æ ã«ãªã£ãŠããŸããïŒã®æ ¹ã£ãã¯ããã®äžè¡ã§ãã仿§ãã®ãã®ãæ€åã«ãŒãã®æ€æ»å¯Ÿè±¡ã ãšããããšã§ãã API å¥çŽã¯èšé²ãã©ãã£ãã¯ããåæãã OpenAPI ã§ããã®ããšããã¡ã€ã«èªèº«ãããããŒã§å®£èšããŠããŸãã info: title: KINTO (staging) â reverse-engineered API description: |- Reverse-engineered from real traffic captured in artifacts/api-log.json. Nothing here is invented: every schema is the union of observed samples, a field missing from any sample is nullable. No mutation endpoints exist in this spec: the crawl observed GET traffic only. :::message ãã®ä»æ§ã¯èªèº«ã®ã«ãã¬ããžã®ç©Žãæ£çŽã«èšé²ããŠããŸããååŸã§ããã®ã¯ 60 ããŒãžã§ããããšã¯å¥ã« 12 ã® URL ã¯ååŸã§ããŸããã§ããââ404 ã 6ãã¢ã¯ã»ã¹å¶éã«ãã 401 ã 6ïŒ /kinto_one/lineup/ ãš SUBARU ç³»ã4 ç« ã§è§Šããå¥ç³»çµ±ã®èªèšŒãå¿
èŠãªãã¹ã§ãïŒãååŸã§ããªãã£ããã®ã¯ãæªååŸããšããŠä»æ§ã«æ®ãããã®ç»é¢ã«ã¯æãåºããŠããŸããã ::: ãã¶ã€ã³ããŒã¯ã³ãåã蚌æ åºæºã§ããè²ã»ã¿ã€ãã°ã©ãã£ã»äœçœã¯ãµã€ãã® 24 åã® CSS ãã¡ã€ã«ïŒ2.3MBïŒããåºçŸé »åºŠé ã«æœåºãWCAG ã³ã³ãã©ã¹ãæ¯ã¯ èšç® æžã¿ããã©ã³ãã«ã©ãŒãã¢ãã€ã«ã§ AA ãæºãããªãç®æã«ã¯ãããŒã¯ã³ãã¡ã€ã«ãã¢ã¯ã»ã·ãã«ãªä»£æ¿è²ãçšæããŠããã¹ããžã®äœ¿çšã匷å¶ããŸãã 6.2 çæãããã¢ãŒããã¯ã㣠Clean Architecture + MVIããã¹ãŠ commonMain ã§ãã æŒãããã¹ããã€ã³ã㯠1 ã€ã ãã :::message Recorded ã¢ãŒãã¯ã¢ãã¯å®è£
ã§ã¯ãªãã 第äºã®ã³ãŒããã¹ã¯ååšããªããåãçææžã¿ ApiClient ãåã JSON èšå®ãåãããããŒãäž¡ã¢ãŒãã§åããKoin ãå·®ãæ¿ããã®ã¯è¶³å
ã® Ktor ãšã³ãžã³ã ãã ::: ã¡ã«ããºã ã®å
šæãããã§ãã single<HttpClientEngine> { val config: AppConfig = get() when (config.dataMode) { DataMode.Recorded -> recordedEngine(get()) // MockEngine replaying the crawl DataMode.Live -> platformHttpEngine() // OkHttp / Darwin } } ã€ãŸããªãã©ã€ã³ãã¢ã¯ ãããã¯ã·ã§ã³ã®ããŒã¹çµè·¯ããã®ãŸãŸéããŸã ãå®ãã€ããŒããããŒã¹ã§ããªã DTO ã¯ãã©ã€ããµãŒããŒçžæãšãŸã£ããåãããã« Recorded ã¢ãŒãã§ã倱æããŸãã ãã 1 ã€ãã©ããªã³ãŒãã¬ãã¥ãŒã§ãæè·ããããã£ããŒã«ïŒãªã¯ãšã¹ãã«åèŽãããµã³ãã«ããªããšãããªãã¬ã€ãšã³ãžã³ã¯ç©ºã® 200 ã§ã¯ãªã 501 ãè¿ããŸããæ²é»ã®æåãèš±ããšãå®éã«ã¯äœãæµããŠããªãç»é¢ããå®è£
æžã¿ãã«èŠããŠããŸãããã§ãã ããžãã¹ããžãã¯ã¯ 100% commonMain ã expect/actual ã¯æ¬åœã«é¿ããããªãç®æïŒã»ãã¥ã¢ãªããŒã¯ã³ä¿å â Keychain / EncryptedSharedPreferencesããã©ãããã©ãŒã HTTP ãšã³ãžã³ïŒã«ã®ã¿çŸããåç®æã«çç±ãããã¥ã¡ã³ãåãããŠããŸãã 6.3 AI ãçæãã CMP ã³ãŒãã®å®ç© DTO ã¯å°åºããããã®ã§ãå¹»èŠã§ã¯ãªãã è»çš®ã«ã¿ãã°ã®ãšã³ããã€ã³ãã¯ãCMS 颚å³ã®æ··æ²ãšããããŒãã³ã°ã®ãã£ãŒã«ãã 80 åä»¥äžæã€ãªããžã§ã¯ããè¿ããŸãããžã§ãã¬ãŒã¿ãŒã¯èšé²æžã¿ãµã³ãã«å
šäœã®åéåãåããŸããå
šãµã³ãã«ã«ååšãããã£ãŒã«ãã¯é nullãã©ãã 1 ã€ã§ãæ¬ ããŠããã°ããã©ã«ãå€ä»ã nullableã @Serializable data class CarCatalogEntryDto( val name: String, // in every sample â required @SerialName("fuel_label") val fuelLabel: String? = null, // absent in some â nullable @SerialName("year3_bonus0m_taxin") val year3Bonus0mTaxin: String, // ⊠80+ fields, mechanically derived from recorded JSON ) ãã®ã¯ã©ã¹ãåãã§ææžããã人éã¯ããŸãããæžãå¿
èŠããããŸããã§ããââãããŠãã©ã®ãã£ãŒã«ãã æšæž¬ ãããŠããŸãããå€å®ã¯ãã® 1 è¡ã ãã§ãã // ãã®ãã£ãŒã«ããçŸãããªããžã§ã¯ãæ° === 芳枬ãããªããžã§ã¯ãæ° ã®ãšãã ã required const req = (s.propSeen?.get(k) ?? 0) === s.seen; ãã€ãã©ã€ã³ã®åçã¯ããã«åçž®ãããŠããŸãïŒ èšé² â å
šãµã³ãã«ã®åéå â å â ã³ãŒã ãã©ã®ç¢å°ãã¢ãã«ã®å€æã§ã¯ãªãã¹ã¯ãªããã®èšç®ãªã®ã§ãåãèšé²ãå
¥ããã°åã DTO ãåºãŸããã¢ãã«ã®ä»äºã¯ããã®æ©æ¢°çãªåºåã®äžã«ç»é¢ãçµãããšã ãã§ãã API é¢ã¯åä»ãã§ãèªåã®åºèªã«æ£çŽã çæãããã¯ã©ã€ã¢ã³ãã®å
šé¢æ°ããã©ã®èšé²æžã¿ãªã¯ãšã¹ãç±æ¥ããããã¥ã¡ã³ãåããŠããŸãã /** * Contract terms and bonus-payment options available for a car model * Recorded as: GET /api/price/v1/web/car-models/{carCode}/selectable-contract */ suspend fun getSelectableContract(carCode: String): ApiResult<SelectableContractDto> = runCatchingApi { client.get(hosts.main + "/api/price/v1/web/car-models/$carCode/selectable-contract") .bodyOrThrow() } ãã¹ãŠã®ç»é¢ãåãåºå®ã® MVI 圢ç¶ã sealed 㪠Intent ãå
¥ãã StateFlow ãåºãŠãããã²ãŒã·ã§ã³ã¯ã¯ã³ã·ã§ããã® Effectã sealed interface HomeIntent { data object Load : HomeIntent data class CarClicked(val car: CarSummary) : HomeIntent // ⊠} class HomeViewModel( private val getHomeFeed: GetHomeFeedUseCase, private val hosts: ApiHosts, ) : ViewModel() { private val _state = MutableStateFlow(HomeUiState()) val state: StateFlow<HomeUiState> = _state.asStateFlow() fun onIntent(intent: HomeIntent) { /* exhaustive when */ } } ãã®åäžæ§ã¯çŸåŠã§ã¯ãªãã ç»é¢çæãå®å
šã«äžŠååã§ããçç±ãã®ãã® ã§ããããŒãã»ããã²ãŒã·ã§ã³ã°ã©ãã»å
±æã³ã³ããŒãã³ããå¥çŽãšããŠã³ããããããåŸã¯ãç¬ç«ãããšãŒãžã§ã³ãã 1 ç»é¢ãã€åŒãåããããŸãã å¥çŽãã¹ããããã¹ãŠãçŸå®ã«éä»ãã«ããã ã¯ã©ã€ã¢ã³ããšåæã«çæããããªãã¬ãŒã·ã§ã³ããšã« 1 æ¬ã ãã¹ãŠã® èšé²æžã¿ãµã³ãã«ããããã¯ã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãã«éããŸãã /** Contract terms and bonus-payment options â 3 recorded sample(s). */ @Test fun `getSelectableContract parses every recorded sample`() = runTest { val results = ContractTestEnv.forEachSample("getSelectableContract") { env -> env.api.getSelectableContract(carCode = SAMPLE_CAR_CODE) } // ãµã³ãã« 0 ä»¶ã®ãŸãŸç·ã«ãªãäºæ
ãé²ããä»¶æ°ã¯çææã« KDoc ãšåãå€ã§åã蟌ãŸãã assertTrue(results.isNotEmpty(), "no recorded sample was replayed") assertEquals(3, results.size, "recorded sample count changed") results.forEach { assertTrue(it is ApiResult.Success, "failed to parse: $it") } } ä»¶æ°ã®ã¢ãµãŒãã¯ãããšããä»ãè¶³ããä¿éºã§ã¯ãããŸããã forEachSample ã空ãªã¹ããè¿ããšââãªãã¬ãŒã·ã§ã³ ID ã®ç¶Žãã 1 æåééããã ãã§èµ·ãããŸãââ forEach ã¯äœãæ€èšŒããã«éã£ãŠããŸããã107 æ¬ã°ãªãŒã³ããäœãæå³ããªããªããŸããçæåšã¯ãµã³ãã«æ°ãç¥ã£ãŠããã®ã§ããã®æ°ããã¹ãã«çŒã蟌ã¿ãŸãã ãã¹ãç°å¢ã¯æå³çã«ãããã¯ã·ã§ã³ã®ãªããžã§ã¯ãã䜿ããŸãââæ¬ç©ã®ã¯ã©ã€ã¢ã³ããã¡ã¯ããªãæ¬ç©ã® JSON èšå®ãæ¬ç©ã®ãªãã¬ã€ãšã³ãžã³ãã¹ã€ãŒãå
šäœïŒçæå¥çŽãã¹ã + mapper + ååž°ïŒã§ 107 ãã¹ãã倱æ 0 ãéä»ãã«ããŠããã®ã¯èšé²ãããçŸå®ãªã®ã§ãåŸæ¥ã©ã€ã API ããããã°ã次ã®åã¯ããŒã«æã«åãã¹ã€ãŒããæãŸããŸãââæ¬çªã¯ã©ãã·ã¥ã§ã¯ãªãã èµ€ããªã£ããã¹ã ãšããŠã 6.4 Web vs ã¢ããªã䞊ã¹ãŠæ¯èŒ æ€åã«ãŒã㯠Android ãšãã¥ã¬ãŒã¿ãŒïŒAPI 35ã1080Ã2400ïŒäžã§ã¢ããªèªèº«ã®ããã²ãŒã·ã§ã³ãæäœããå®è£
æžã¿ç»é¢ãæ®åœ±ããŸããå
šå·¥çš Recorded ã¢ãŒããªã®ã§ãã©ã€ã API ã«ã¯äžåºŠããªã¯ãšã¹ããåºããŠããŸããïŒç»åã ãã¯ãµã€ãã® CDN ããèªã¿èŸŒã¿ãŸãïŒã åãã¢ã¯åãµã€ããšã»ã¯ã·ã§ã³åäœã§ç
§åããŸããäžã® 4 æã§å®éã«ç¢ºèªã§ããã®ã¯ãããŒã ã®ããŒããŒã³ããŒãš CTAãPICK UP ã»ã¯ã·ã§ã³ã®å® CMS ãããŒïŒåŸè¿°ã® iOS ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ 14 æã¶ãã®ããŒãžã€ã³ãžã±ãŒã¿ãŒãèŠããŸãïŒãã©ã€ã³ã¢ããã® TOYOTA / LEXUS ã¿ããšã«ããŽãªããããè»çš®è©³çŽ°ã®æé¡æéãšçŽæç®åŠãèŠç©ãã®ãã©ã³éžæãšäžéšåºå®ãµããªãŒããŒã§ããå·®å㯠P0/P1ïŒã³ã³ãã³ãæ¬ èœãæ§é ã»ããã²ãŒã·ã§ã³ç ŽæïŒâ ã«ãŒãå
ã§ä¿®æ£ãP2ïŒãã¯ã»ã«ã¬ãã«ã®ç£šã蟌ã¿ïŒâ èšé²ããšåé¡åŠçããŸãã ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯å·®åãæ£çŽã«åããŠããŸããããŒã ã®ããŒããŒã¯ãåãµã€ãã§ã¯èæ¯ããžã¥ã¢ã«ã«åååçã®è£
食ã€ã©ã¹ããèŒã£ãŠããŸãããã¢ããªåŽã¯ã³ããŒãš CTA ã ãã®ããã¹ããããã¯ã«ãªã£ãŠããŸããè£
é£ŸçŽ æãã¯ããŒã«ã®ææç©ããæ©æ¢°çã«åãåºããªãã£ãããã§ãçŸæç¹ã§ã¯æ¢ç¥ã®å·®åïŒ8 ç« ã® P2 ãªã¹ãïŒã§ãã ã«ãŒããå®éã«æ©èœããäŸã 1 ã€ãããŒã ã®ã«ã«ãŒã»ã«ã¯åœåãããŒã 16:10 ã®æ ã«ã¬ã¿ãŒããã¯ã¹è¡šç€ºããŠããŸããããCMS ãå®éã«é
ä¿¡ããŠããã®ã¯ 630Ã630 ã®æ£æ¹åœ¢çŽ æã§ãããã¹ã¯ãªãŒã³ã·ã§ããæ¯èŒã§çºèŠ â ä¿®æ£ â åæ®åœ± â è§£æ¶ã :::message ã¹ã¯ãªãŒã³ã·ã§ããå
ã®æéã»çŽæã»ãã£ã³ããŒã³è¡šèšã¯ã 2026 幎 8 ææç¹ã®ã¹ããŒãžã³ã°ç°å¢ã®å
容 ã§ããå®éã®ãµãŒãã¹ã®æéãåæ±å
容ã¯å€ãããŸããææ°ã®æ
å ±ã¯ KINTO å
¬åŒãµã€ã ãã確èªãã ããã ::: ãããŠåãã³ãŒãããŒã¹ãã ç»é¢ã³ãŒãã®è¿œå ãŒã ã§ 2 ã€ç®ã®ãã©ãããã©ãŒã ã«ä¹ããŸãã  6.5 æ£çŽãªæ°åããã¯ã¹ é
ç® å®çžŸ 仿§ã«ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ãããç»é¢æ° 16 ïŒåªå
床ã»ã³ã³ããŒãã³ãã»å¿
èŠããŒã¿ã€ãïŒ çŸæç¹ã§ãšã³ãããŒãšã³ãå®è£
æžã¿ã®ç»é¢æ° 4 ââP0 ã»ããïŒHomeãLineupãCarDetailãEstimate çæããã API ãªãã¬ãŒã·ã§ã³æ° 31 ã4 ãã¹ã暪æââãã¹ãŠ GETããã¥ãŒããŒã·ã§ã³ã¯èŠ³æž¬ããããæ³åã§è¶³ããŠãããªã ãã¹ãïŒå¥çŽ + mapper + ååž°ïŒ 107 æ¬ãå
šã°ãªãŒã³ åäœç°å¢ Android ãšãã¥ã¬ãŒã¿ãŒ + iPhone ã·ãã¥ã¬ãŒã¿ãŒââã©ã€ã API äžäœ¿çšãç»åã®ã¿ãµã€ãã® CDN ããèªã¿èŸŒã¿ æ€åäžã®ã©ã€ã API ãžã®æ¥è§Š äžåºŠããªã ïŒç»åååŸã®ã¿ CDN ã«ã¢ã¯ã»ã¹ïŒ :::message alert ã»ãã¥ãªãã£ã«é¢ãã 3 ã€ã®æ±ºå®ïŒ DTO ã¯èšé²ããŒã¿ããã®ã¿å°åºïŒããã¯ãšã³ããæ³åã§è£ããªãïŒ ãã¥ãŒããŒã·ã§ã³ç³»ãšã³ããã€ã³ãã¯ãä»®ã«èŠ³æž¬ãããŠãçæ + ã¢ãã¯ã«ãã¬ããžãŸã§ãæç€ºçãªæ¿èªãªãã«ã©ã€ããµãŒããŒãžã¯æããªã èªèšŒæ
å ±ïŒã¹ããŒãžã³ã°ãžã®ã¢ã¯ã»ã¹èªèšŒãäŒå¡ãã°ã€ã³ã§ã¯ãªãïŒã¯ gitignore æžã¿ã®ç°å¢ãã¡ã€ã«ã«ã®ã¿ååšããå®è¡æã«ç°å¢å€æ°ãšããŠèªã¿èŸŒããã³ãŒãã«ãã¢ãã«ã®ã³ã³ããã¹ãã«ãå
¥ããªã ::: 7. AI ãä¿¡é Œã§ãããã®ã«ããå·¥åŠïŒãã¢ã®æåã§ã¯ãªãïŒ ã¢ãã«ã®èœåã¯å¿
èŠæ¡ä»¶ã§ãã£ãŠãå忡件ã§ã¯ãããŸãããå®éã«éããæ¯ããã®ã¯ããã®åšããåºããå·¥åŠã§ããã åºå®ã¢ãŒããã¯ãã£ãšããå¥çŽã Clean Architecture + MVIãKoinãKtorãCoilââçæã®åã«æ±ºå®æžã¿ããšãŒãžã§ã³ãã¯å³èã§åœ¢ãçºæãããæ¢ç¥ã®åœ¢ã«äžèº«ãåãããã ããææç©ã¯ã¬ãã¥ãŒå¯èœã§ã倱æã¯èšºæå¯èœã æäœæ¥ããã¹ã¯ãªããã æ±ºå®çã«å®è¡ã§ãããã®ã¯ãã¹ãŠããšãŒãžã§ã³ããæžããŠèªåã§ãããã°ããã¹ã¯ãªãããã¹ã¯ãªãŒã³ã·ã§ããååŸã¹ã¯ãªããããã¢ããªã®ã³ãŒããšåãããã€ãã©ã€ã³ã®ç£ç©ã å
šã³ãããã«ã²ãŒãã iOS ã¿ãŒã²ããã¯å
šã³ãããã§ã³ã³ãã€ã«å¿
é ââã¯ãã¹ãã©ãããã©ãŒã ã®è
æã¯æåŸã§ã¯ãªãæ°åã§æãŸãã 1 ç»é¢ = 1 ã¿ã¹ã¯ = 1 ã³ãããã 䞊ååã¯å
±æå¥çŽïŒããŒããããã²ãŒã·ã§ã³ãã³ã³ããŒãã³ãïŒã®ã³ãããåŸã«ã®ã¿è§£çŠã æ€åã¯äºåŸã§ã¯ãªãã«ãŒãã®å
åŽã«ã 人éãã¬ãã¥ãŒããåã«ããšãŒãžã§ã³ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯åãµã€ãã®ã¹ã¯ãªãŒã³ã·ã§ãããšå¯Ÿæ±ºãæžãŸããŠããã ãã® 5 ã€ã®æ ¹åºã«ããå§¿å¢ã¯ 1 ã€ã§ãã :::message çæã¹ãããã¯ä¿¡é Œããªãââå
å²ããã æ±ºå®çã«ã§ãããã®ïŒã¹ã¯ãªãããã³ã³ãã€ã«ã²ãŒããå¥çŽãã¹ãïŒã¯ãã¹ãŠæ±ºå®çã«ãããšãŒãžã§ã³ãã®èªå·±æ¡ç¹ã«ããã¹ã¯ãªãŒã³ã·ã§ããæ¯èŒã¯ããã¹ãŠã®ã²ãŒãã§äººéãåã¬ãã¥ãŒããã ::: 8. éçããæ£çŽã« 16 ç»é¢äž 12 ç»é¢ã¯ãŸã ãã¬ãŒã¹ãã«ããŒã ç»é¢åäœã§ç·åœ¢ã«ã¹ã±ãŒã«ãã äœæ¥ ã§ãã£ãŠãäžçºã®éæ³ã§ã¯ãªãã åã蟌ã¿ã³ã³ãã³ã ïŒåç»ãå°å³ããµãŒãããŒãã£ãŠã£ãžã§ããïŒã¯ãã¬ãŒã¹ãã«ã㌠+ expect/actual ã®ç§»è¡ãã©ã³ã©ãŸããå
±éã³ãŒãã« WebView ãšããéãéã¯ãªãã èŠãç®ã®æ¢ç¥ã®å·®åïŒP2ïŒã ã¯ããŒã«ã§ååŸã§ããªãã¢ã€ã³ã³çŽ æãšããŒããŒã®è£
食ã€ã©ã¹ãããã©ã³ããŠã§ã€ãã®æ©åŸ®ãèŠç©ãç»é¢ã¯åºå®ããŒã¶ãã® content inset ããªããäžç«¯ã®ã³ã³ãã³ããé ããŸãïŒ6.4 ã®ã¹ã¯ãªãŒã³ã·ã§ããïŒãiOS ã®ãžã§ã¹ãã£ãŒã®è³ªæã¯å®æ©æ€èšŒãå¿
èŠã ã¯ããŒã«ãæããã®ã¯ããããŒãã¹ã ãšã©ãŒç¶æ
ãæ·±ãããŒãžããŒã·ã§ã³ãããŒãœãã©ã€ãºãA/B ããªã¢ã³ãã¯èšé²ã«å«ãŸããªãã èªã¿åãå°çšã 31 ãªãã¬ãŒã·ã§ã³ãã¹ãŠ GETãäŒå¡ãšãªã¢ã¯ã¹ã³ãŒãå€ãèŠç©ãã®ãä¿åããæ¬¡ãžããã¢ããªå
ã§ã¯æžã蟌ãŸããéžæå
容ãç©ãã URL ã§åãµã€ãã«åŒãæž¡ããŸãââ ãªããã®ã¯æ³åã§è£ãã web ã«æ»ã ããã©ã³ã¶ã¯ã·ã§ã³ç³»ã¯æ¬¡ãã§ãŒãºã§ãå€ãã®ãããã¯ãã«ãšã£ãŠã¯ãã¡ããé£ããååã é©çšç¯å²ã¯èªç€Ÿãµã€ãã®ã¿ã èªèšŒæ
å ±ãšæš©å©ãèªåãæã€ãµã€ãåãã®éå
·ã§ãã£ãŠãä»ç€Ÿãããã¯ãã®ã¹ã¯ã¬ã€ãã³ã°éå
·ã§ã¯ãªãã 9. ããŒããããã«ãšã£ãŠã®æå³ ã³ã¹ãæ²ç·ã¯å転ããŸããããã€ãŠã¢ããªåã§æãé«ãã€ããéšåââã¢ãã€ã«åãã¶ã€ã³ïŒãµã€ããã¬ã¹ãã³ã·ãçãæã€å ŽåïŒããã€ã©ãŒãã¬ãŒããäºéã®ããŒã¿å±€ã仿§åããã®ç¶æââããããŸãæãå®ãéšåã§ãã人éã®åŽåã¯æ¬åœã«å€æãèŠãå Žæã«éäžããŸãïŒã©ã®ç»é¢ã P0 ãããã©ã³ãã¯äœãèŠæ±ããããäœã Web ã«æ®ããã çŸå®çãªããŒã åïŒ ãšã³ãžã㢠1 人 + ãã€ãã©ã€ã³ ã§ãäž¡ãã©ãããã©ãŒã ã§åãã¬ãã¥ãŒå¯èœãªãã«ãã«å°éïŒæ¬èšäºã®ç¯å²ã§ã¯ P0 ã® 4 ç»é¢ãŸã§ãæ®ã 12 ç»é¢ã¯åãæé ã®å埩ã§ãïŒããã€ãã£ãã®ã¹ãã·ã£ãªã¹ãã¯æåŸã® 10%ïŒãžã§ã¹ãã£ãŒã®è³ªæãåã蟌ã¿ãã¬ã€ã€ãŒãã¹ãã¢åãã®ç£šã蟌ã¿ïŒã§åæµãã2 ããŒã ã§ 1 幎ããšã¯ãŸã£ãã奿¬¡å
ã®äºç®äŒè©±ã§ãã ãŸãšã ã¢ããªãã¡ãŒã¹ãã¯ãäºç®ã®åé¡ã§ããããšãããã ããŒã«ãã§ãŒã³ã®åé¡ ã«ãªããŸããã ããªãããã§ã«éçšããŠãããã® Web ãµã€ãã¯ãå®ã¯ 3 ã€ã®ãã®ãå
ŒããŠããŸãã 仿§æž ïŒããŒãžãšãããŒïŒ ãã¹ãããŒã¿ ïŒå® API ãã©ãã£ãã¯ïŒ åãå
¥ãåºæº ïŒã¢ãã€ã«ã¹ã¯ãªãŒã³ã·ã§ããïŒ AI ãã€ãã©ã€ã³ã®ä»äºã¯ãã® 3 ã€ãèªã¿èŸŒãããšã ããCompose Multiplatform ã®ä»äºã¯ããã®çµæããã¹ãŠã®ç«¯æ«ã§åããããšã ãã ãããã¯ãã®å±
å ŽæãšãŠãŒã¶ãŒã®å±
å Žæã®ããã ã®è·é¢ã¯ãããŸã幎åäœã§ã¯ãªã æ¥åäœ ã§ããåãã«ãããŸãããã åèãªã³ã¯ ç·åç éä¿¡å©çšåå調æ»ïŒä»€å7幎調æ»ïŒ ç·åçæ
å ±éä¿¡æ¿çç ç©¶æ 什å6幎床 æ
å ±éä¿¡ã¡ãã£ã¢ã®å©çšæéãšæ
å ±è¡åã«é¢ãã調æ»ïŒæŠèŠïŒ eMarketer â Mobile Internet: Average Time Spent in the US, App vs. Browser JetBrains â Compose Multiplatform 1.8.0: iOS Is Stable and Production-Ready Android Developers Blog â Android's Kotlin Multiplatform announcements at Google I/O and KotlinConf 25 WebKit â Web Push for Web Apps on iOS and iPadOS
ããã«ã¡ã¯ãKINTO ãã¯ãããžãŒãºã® DBRE ããŒã æå±ã® makoto.sato ã§ãã2026幎3æã«äžéå
¥ç€Ÿããæ®æ®µã¯ AuroraïŒMySQL / PostgreSQLïŒã®éçšã»ä¿¡é Œæ§åäžãã瀟å
åã DB äœæ¥åºç€ã®éçºãããŠããŸããåè·ã§ã¯é·ã DBA ãšããŠãªã³ãã¬ã® MySQL / PostgreSQL / Oracle ãéçšããŠããŸããã ã¯ããã« KINTO ãã¯ãããžãŒãºã® DBRE ããŒã ã§ã¯ãDB äœæ¥ã®ç³è«ãæ¿èªãäžæçãªäœæ¥ç°å¢ã®èªåæ§ç¯ãŸã§ã Slack ããå®çµããã瀟å
ããŒã«ãPowerPoleããéçºã»éçšããŠããŸããå
šäœå㯠Amazon Web Services ããã°ã® ã¯ã«ãã®ãµãã¹ã¯ãKINTOãã®ã¢ãžãªãã£ãšã¬ããã³ã¹ãäž¡ç«ãã DBRE ã®åãçµã¿ ã§ç޹ä»ããŸããã ä»çµã¿ãããã€ãŸãã§èšããšãSlack ããç³è« â æ¿èª â EC2 ãšäžæç㪠DB èªèšŒæ
å ±ãèªåçºè¡ â äœæ¥å®äºåŸã«èªååé€ããšããæµãã§ãèžã¿å°æ§ç¯ããå©çšçµäºãŸã§ã®ã¬ããã³ã¹ãšäœæ¥ã¹ããŒããäž¡ç«ããããã®ã§ãã PowerPole ã¯ãããŸã§ Aurora MySQL ã®ã¿å¯Ÿå¿ã§ãããã瀟å
ã§ã® Aurora PostgreSQL å©çšã®åºããã«åãã㊠PostgreSQL 察å¿ãé²ããããšã«ãªããŸãããæ¬èšäºã§ã¯ããã®äžã§ééãããæš©éãä»ããã¯ããªã®ã«å¹ããªããåé¡ãšããã®æ ¹åºã«ãã£ã MySQL ãš PostgreSQL ã®æš©éã¢ãã«ã®éãã«ã€ããŠæžããŸãã ãªããæ±ãæåã¯ãã¹ãŠã³ãã¥ããã£ç MySQL / PostgreSQL å
±éã®ä»æ§ã§ãAurora åºæã®ãã®ã§ã¯ãããŸãããæ€èšŒç°å¢ã¯ Aurora PostgreSQL 17 ãš MySQL 8.0 ã§ããMySQL ã®ããŒã«æ©èœã¯ 8.0 ã§è¿œå ããããã®ãªã®ã§ã5.7 ã§ã¯æ¬èšäºã® MySQL åŽã®èšè¿°ã¯æç«ããŸããã CREATEROLE 㯠PostgreSQL 16 ã§æå³ã倧ããå€ãã£ãŠããããã15 以åã®ç°å¢ã§ã¯æ¬èšäºã®æ§æããã®ãŸãŸé©çšããªãã§ãã ããã çç¶ïŒ \du ã«ã¯æš©éãèŠããŠããã®ã«ãæš©éãšã©ãŒã«ãªã ããããŒã«ã« CREATEDB ãä»äžãã \du ïŒpsql ã§ããŒã«ã®äžèЧãšå±æ§ã衚瀺ããã³ãã³ãïŒã§ã確ãã«ä»ããŠããããšã確èªããŸããã List of roles Role name | Attributes -----------+------------------------- dbuser | Create role, Create DB ãšãããããã® dbuser ã§æ¥ç¶ããŠããŒã¿ããŒã¹ãäœãããšãããšå€±æããŸãã CREATE DATABASE test_db; -- ERROR: permission denied to create database 屿§ã¯ä»ããŠããããããå¹ããŠããªããäžèŠççŸããç¶æ³ã§ãã MySQL çã§ã¯ã©ãæžããŠããã PowerPole ã«ã¯ãç³è«æã«éžã¹ãæš©éã¬ãã«ã® 1 ã€ãšããŠãDDLOperatorãããããŸããããŒãã«ãããŒã¿ããŒã¹ã®äœæã»å€æŽãäžæçã«èš±å¯ããæš©éã¬ãã«ã§ãã MySQL çã§ã¯ã pp_ddl_operator ãšããå
±æããŒã«ã«å¿
èŠãªæš©éããã¹ãŠéçŽããçºè¡ããäžæãŠãŒã¶ãŒã«ãã®ããŒã«ãä»äžããŠããŸãïŒäžéšæç²ïŒã CREATE ROLE 'pp_ddl_operator'; GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE TEMPORARY TABLES ON *.* TO 'pp_ddl_operator'; GRANT CREATE USER ON *.* TO 'pp_ddl_operator'; -- ãŠãŒã¶ãŒãšããŒã«ã®äœæã»åé€ GRANT ROLE_ADMIN ON *.* TO 'pp_ddl_operator'; -- ããŒã«ã®ä»äžã»å¥å¥ª -- äžæãŠãŒã¶ãŒãžããŒã«ãä»äžããæ¬¡åãã°ã€ã³æã«èªåã§æå¹ã«ãªãããæ¢å®ããŒã«ã«ãã -- ïŒMySQL 㯠activate_all_roles_on_login ãæ¢å® OFF ãªã®ã§ãä»äžããã ãã§ã¯æå¹ã«ãªããªãïŒ GRANT 'pp_ddl_operator' TO 'dbuser'; ALTER USER 'dbuser' DEFAULT ROLE 'pp_ddl_operator'; ããã§æ³šç®ããŠã»ããã®ã¯ã æš©éã®çš®é¡ãéã£ãŠãæžãæ¹ãå€ãããªã ç¹ã§ããããŒãã«æäœã®ãããªãªããžã§ã¯ãæš©éããDB äœæããŠãŒã¶ãŒäœæã®ãããªãµãŒããŒå
šäœã«é¢ããèœåãããã¹ãŠåã GRANT ... ON *.* ã§è¡šçŸã§ããŠããŸãã PostgreSQL çã§ãåãèšèšãèžè¥²ããå
±æããŒã«ã«æš©éãéçŽããŠäžæãŠãŒã¶ãŒ dbuser ã«ããŒã«ãä»äžããæ§æã«ããŸãããããŒãã«ãã¹ããŒããžã®ãªããžã§ã¯ãæš©é㯠GRANT ã§éçŽã§ãããããŸã§ã¯é 調ã§ããã ã€ãŸããâ ïŒ GRANT CREATEDB ãšããæžãæ¹ã¯ã§ããªã åé¡ã¯ãããŒã¿ããŒã¹äœæããããŒã«äœæãã§ãããMySQL ã®æèŠã§ããæžããããªããŸããããšã©ãŒã«ãªããŸãã GRANT CREATEDB TO pp_ddl_operator; -- ERROR: role "createdb" does not exist PostgreSQL ã® GRANT <åå> TO <ããŒã«> 㯠ããŒã«ã¡ã³ããŒã·ããã®ä»äž ãšããŠè§£éãããŸããPostgreSQL ã¯ãcreatedb ãšããååã®ããŒã«ããæ¢ããååšããªããããšã©ãŒã«ãªããŸãã ããã«çŽããããã®ãæ¬¡ã®æžãæ¹ã§ããæ§æãšããŠã¯éããŸãããæå³ã¯ãŸã£ããéããŸãã GRANT CREATE ON DATABASE mydb TO pp_ddl_operator; -- éãããDBäœææš©éãã§ã¯ãªã ããã¯ãmydb ã® äžã« ã¹ããŒããªã©ãäœãæš©éãã§ãã£ãŠãããŒã¿ããŒã¹ãäœãæš©éã§ã¯ãããŸããã ããŒã¿ããŒã¹äœæã»ããŒã«äœæã¯ã GRANT ãšã¯å¥ã®ã ããŒã«å±æ§ ããšããä»çµã¿ã§è¡šçŸãããŠããŠã ALTER ROLE ïŒãŸã㯠CREATE ROLE æã®ãªãã·ã§ã³ïŒã§ããä»äžã§ããŸããã ALTER ROLE <ããŒã«å> CREATEDB CREATEROLE; ã€ãŸããâ¡ïŒå±æ§ãä»ããã®ã«å¹ããªã ALTER ROLE ã§ä»ããã°ãããšåãã£ãã®ã§ã次ã¯ã©ã®ããŒã«ã«ä»ãããã§ããæåã¯äžæãŠãŒã¶ãŒã® dbuser ã«ä»äžããŸããã ALTER ROLE dbuser CREATEDB CREATEROLE; dbuser ã¯äžå®æéãéãããšåé€ãããäœ¿ãæšãŠã®ãŠãŒã¶ãŒãªã®ã§ã屿§ããŠãŒã¶ãŒããšæ¶ããŸããåžžèšã®å
±æããŒã«ã«æ°žç¶çãªå±æ§ãæããããã圱é¿ç¯å²ãçãã劥åœãªéžæã«æããŸããã ãã®çµæããåé ã«æžããã \du ã«ã¯èŠããŠããã®ã«æš©éãšã©ãŒãã§ããã åå èª¿æ» PowerPole ãçæããŠãããŠãŒã¶ãŒäœæåŠçã§ã¯ããã®ããã«æš©éãä»äžããŠããŸãã GRANT pp_ddl_operator TO dbuser; ALTER ROLE dbuser SET role = 'pp_ddl_operator'; -- role ãã©ã¡ãŒã¿ã®å€ãšããŠæž¡ãã®ã§ã¯ã©ãŒãããŠããïŒèå¥åã§ãæžããïŒ 2 è¡ç®ã¯ role ãã©ã¡ãŒã¿ã®æ¢å®å€ãããŒã«åäœã§èšå®ãããã®ã§ã dbuser ã§ãã°ã€ã³ãããšã»ãã·ã§ã³éå§æã«èªåçã« SET ROLE pp_ddl_operator ãããç¶æ
ã«ãªããŸããå©çšè
ãæ¥ç¶åŸã«æ¯å SET ROLE ãæããªããŠããä»äžãããããŒã«ã®æš©éã§ããäœæ¥ãå§ããããããã«å
¥ããŠãããã®ã§ãã ãã® SET ROLE ãæªããã®ã§ãå®éã«æ¥ç¶ããŠç¢ºèªããŠã¿ãŸãã SELECT current_user, session_user; -- current_user | session_user -- ------------------+-------------- -- pp_ddl_operator | dbuser session_user ïŒãã°ã€ã³ããããŒã«ïŒã¯ dbuser ã®ãŸãŸã§ããã current_user ïŒæš©éãã§ãã¯ã®å¯Ÿè±¡ã«ãªãããŒã«ïŒã¯ pp_ddl_operator ã«åãæ¿ãã£ãŠããŸããã PostgreSQL ã®ããŒã«å±æ§ãã§ãã¯ã¯ã current_user ãã®ãã®ã®å±æ§ã ããèŠãŸãã ïŒ CREATEDB / CREATEROLE / SUPERUSER ã®ããã« SQL ã®å®è¡æã«è©äŸ¡ããã屿§ã®è©±ã§ãã LOGIN ã¯æ¥ç¶ã確ç«ããæç¹ã§ãã°ã€ã³ããŒã«ã«å¯ŸããŠè©äŸ¡ãããã®ã§ã SET ROLE ã®åœ±é¿ãåããŸãããïŒ CREATE DATABASE å®è¡æã«è©äŸ¡ãããã®ã¯ pp_ddl_operator ã®å±æ§ã§ãã£ãŠã dbuser ã®å±æ§ã§ã¯ãããŸããã dbuser ã«ããã CREATEDB ãä»äžããŠããæ¢å®ã® current_user ã§ã¯è©äŸ¡å¯Ÿè±¡ã«ãªã£ãŠããªãã£ãã®ã§ãã ã¡ã³ããŒã·ããã§ç¶æ¿ãããã®ã¯ãªããžã§ã¯ãæš©éã ã ã dbuser 㯠pp_ddl_operator ã®ã¡ã³ããŒãªã®ã ããã屿§ãã©ããã§ç¹ããã®ã§ã¯ïŒããšæããããããŸãããããããç¶æ¿ãããã®ã¯ ãªããžã§ã¯ãæš©é ïŒããŒãã«ã® SELECT / INSERT ãªã©ïŒã«éããã CREATEDB / CREATEROLE / LOGIN / SUPERUSER ãšãã£ã ããŒã«å±æ§ã¯ç¶æ¿å¯Ÿè±¡å€ ã§ããããã¯ããã¥ã¡ã³ãã«ãæèšãããŠããŸãã The role attributes LOGIN , SUPERUSER , CREATEDB , and CREATEROLE can be thought of as special privileges, but they are never inherited as ordinary privileges on database objects are. You must actually SET ROLE to a specific role having one of these attributes in order to make use of the attribute. â PostgreSQL Documentation: Role Membership ã€ãŸããåããæš©éããšåŒã°ãããã®ã®äžã«ãè©äŸ¡ã®ããæ¹ãéã 2 çš®é¡ãåå±
ããŠããŸãã è©äŸ¡ã®å¯Ÿè±¡ ç¶æ¿ ããŒã«å±æ§ ïŒ CREATEDB ãªã©ïŒ current_user ãã®ãã® ã®å±æ§ã ã ãããªã ãªããžã§ã¯ãæš©é ïŒããŒãã«ã® SELECT ãªã©ïŒ current_user ãšããããç¶æ¿ããŠããããŒã«çŸ€ ããã å³ã«ãããšæ¬¡ã®ããã«ãªããŸãã  \du ã§å±æ§ãèŠããŠããã®ã«å¹ããªãã£ãçç±ã¯ããã® 2 ã€ã®ä»æ§ã®çµã¿åããã§ããã dbuser ã®å±æ§ã¯ã SET ROLE åŸã® current_user ïŒ pp_ddl_operator ïŒã®è©äŸ¡ã§ã¯åç
§ãããªã ã¡ã³ããŒã·ããããã£ãŠãã屿§ã¯ç¶æ¿ãããªã ãã®é察称æ§ã¯ãAurora / RDS ã䜿ã£ãŠããã°èº«è¿ãªãšããã«çŸããŠããŸãããã¹ã¿ãŒãŠãŒã¶ãŒã¯ rds_superuser ã®ã¡ã³ããŒã§ããããã®å®çŸ©ã¯ AWS ã®ããã¥ã¡ã³ãã§æ¬¡ã®ããã«ç€ºãããŠããŸãã CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity' â Amazon Aurora ãŠãŒã¶ãŒã¬ã€ã: rds_superuser ããŒã«ãçè§£ãã CREATEDB ãš CREATEROLE ã ãã¹ã¿ãŒãŠãŒã¶ãŒèªèº«ã«çŽæ¥ ä»äžãããŠããŸãã rds_superuser ã®ã¡ã³ããŒã§ããããšã§å±æ§ãåŸããããªãããã®çŽæ¥ä»äžã¯èŠããŸããã§ããã å¯ŸåŠ åå ã¯ãæ¢å®ã® current_user ãå
±æããŒã«ã«ãªã£ãŠããããšããªã®ã§ã屿§ãä»ããå
ããå®éã« current_user ãšããŠæ¯ãèãããŒã«ã«å€ããŸãã ALTER ROLE pp_ddl_operator CREATEDB CREATEROLE; ããã§æåŸ
ã©ããããŒã¿ããŒã¹ã»ããŒã«ã®äœæãã§ããããã«ãªããŸãããçµæãšããŠãMySQL çãšåããæš©éã¯ãã¹ãŠå
±æããŒã«ã«éçŽãããŠãŒã¶ãŒã«ã¯ããŒã«ãæž¡ãã ãããšãã圢ã«å±æ§ã®çœ®ãå ŽæãæããŸããã å
±æããŒã«ã«å±æ§ãæ®ãç¶ããããšãæ°ã«ãªããããããŸãããã pp_ddl_operator 㯠NOLOGIN ã§çŽæ¥ãã°ã€ã³ã§ããã屿§ã䜿ããã®ã¯ã¡ã³ããŒã·ãããæã€ããŒã«ã«éãããŸããä»äžãšå¥å¥ªã¯ç³è«ã®ã©ã€ããµã€ã¯ã«ã§ç®¡çãããŠããŸããéã«èšãã° å®éã®å¢ç㯠NOLOGIN ã§ã¯ãªãã¡ã³ããŒã·ãã ãªã®ã§ãæä¹
ãŠãŒã¶ãŒã«ãã®ããŒã«ãä»äžããªãããšãåæã«ãªããŸãã ãªã GRANT ã«ä¹ããªãã®ã ââ ãªããžã§ã¯ã空éã®éã ãããŸã§ãå®éã«ããã£ã話ã§ããæåŸã«ããããããªã CREATEDB ã GRANT ã§æžããªãã®ããæŽçããŸãã MySQL ã§ã¯ Database ãš Schema ã¯å矩ã§ããµãŒããŒã®äžã¯ãã©ãããªæ§é ã§ãã ServerïŒMySQL ãµãŒããŒå
šäœïŒâ GRANT ... ON *.* ãããå
šäœãèŠã âââ DatabaseïŒ= SchemaãåçŸ©ïŒ âââ Table / View / Procedure / ... DB ãäœãããšãããã®äžã«ããŒãã«ãäœãããšãåã空éã®äžã®åºæ¥äºãªã®ã§ããã®èšäºã§æ±ãæš©éã»ããã¯ãã¹ãŠ GRANT ... ON *.* ã® 1 ã€ã®èªåœã§æžããŸãã äžæ¹ PostgreSQL 㯠3 å±€æ§é ã§ãã ClusterïŒPostgreSQL ãµãŒããŒå
šäœïŒâ Databaseäœæã»Roleäœæã¯ããïŒããŒã«å±æ§ã§ç®¡çïŒ âââ DatabaseïŒå®å
šã«åé¢ãããåå空éïŒ âââ SchemaïŒDatabase å
ã®åå空éïŒ âââ Table / View / Function / ... GRANT ã§ä»äžãããªããžã§ã¯ãæš©éã¯ãDatabase ã Schema ãšãã£ã å
¥ãç©ããšã«æå®ãã 圢ã«ãªããŸããMySQL ã® ON *.* ã«çžåœããå
š Database äžæ¬æå®ãç¡ãã®ã¯ãããŒãã«ãªã©ã®ã«ã¿ãã°ã Database ããšã«åé¢ããŠããŠãæ¥ç¶äžã® Database ã®å€ã«ãããªããžã§ã¯ããæå®ã§ããªãããã§ãã ã§ã¯ Database ã Role ã¯ã©ãããšãããšããããã¯ã¯ã©ã¹ã¿å
šäœã§å
±æãããã«ã¿ãã°ã«å±ããŸãããã ã å±€ãéããã GRANT ã«ä¹ããªãããšããåçŽãªè©±ã§ã¯ãããŸããã GRANT ... ON DATABASE ã GRANT ... ON TABLESPACE ã¯ãã¯ã©ã¹ã¿å
šäœã«é¢ãã察象ã GRANT ã§æ±ããŠããŸãã éã㯠暩éãæžãçããå
ããããã©ãã ã§ãã GRANT ã¯æš©éã察象ãªããžã§ã¯ãã®ã¢ã¯ã»ã¹å¶åŸ¡ãªã¹ãïŒACLïŒã«æžã蟌ã¿ãŸããã CREATE DATABASE ãš CREATE ROLE ãçžæã«ããã¯ã©ã¹ã¿èªèº«ã¯ãACL ãæã€ãªããžã§ã¯ããšããŠååšããŸããããã®ãã PostgreSQL ã¯ãããã ããŒã«èªèº«ã®å±æ§ ãšããŠä¿æãã ALTER ROLE ã§æäœããŸãããã ãå®çŸ©æžã¿ããŒã«ãšããæãéã¯ãããPostgreSQL 16 ã® pg_create_subscription ã¯ããŸã ååšããªããã®ãäœãèœåããã¡ã³ããŒã·ããã§é
ã£ãŠããŸãã CREATEDB / CREATEROLE ã屿§åŽã«ããã®ã¯åççãªå¶çŽã§ã¯ãªããä»çµã¿ãå€ããšããçµç·¯ã§ãã ãããã«ããŠããMySQL ã§ 1 ã€ã® GRANT ã«ä¹ã£ãŠããæš©éã»ããã¯ãPostgreSQL ã§ã¯ããªããžã§ã¯ãã® ACL ã«æžãæš©éããšãããŒã«èªèº«ã«æããã屿§ãã® 2 系統ã«åãããŸãã åãæš©éã»ãããæžãæ¯ã¹ããš DDLOperator çžåœã®æš©éã»ããïŒDDL/DML + DB äœæ + ããŒã«äœæïŒãå
±æããŒã«ã«éçŽãããšããããªããŸãã MySQL ã¯ãã¹ãŠ GRANT ã§å®çµããŸãã CREATE ROLE 'pp_ddl_operator'; -- ãªããžã§ã¯ãæš©éããµãŒããŒã¬ãã«ã®èœåãããã¹ãŠåã GRANT GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE TEMPORARY TABLES ON *.* TO 'pp_ddl_operator'; GRANT CREATE USER ON *.* TO 'pp_ddl_operator'; -- ãŠãŒã¶ãŒãšããŒã«ã®äœæã GRANT GRANT ROLE_ADMIN ON *.* TO 'pp_ddl_operator'; -- ããŒã«ã®ä»äžã»å¥å¥ªã GRANT -- ãŠãŒã¶ãŒãžã¯ããŒã«ãä»äžããæ¬¡åãã°ã€ã³æã«æå¹ã«ãªãããæ¢å®ããŒã«ã«ãã GRANT 'pp_ddl_operator' TO 'dbuser'; ALTER USER 'dbuser' DEFAULT ROLE 'pp_ddl_operator'; PostgreSQL 㯠2 系統ã«åãããŸãã CREATE ROLE pp_ddl_operator NOLOGIN; -- ãªããžã§ã¯ãæš©é㯠GRANTããã ã *.* ã®ãããªå
šäœæå®ã¯ç¡ãã -- ããŒã¿ããŒã¹ã»ã¹ããŒãããšã«ä»äžããïŒALL TABLES ã¯å®è¡æç¹ã®æ¢åããŒãã«ã®ã¿ïŒ GRANT ALL PRIVILEGES ON SCHEMA myschema TO pp_ddl_operator; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema TO pp_ddl_operator; GRANT TEMPORARY ON DATABASE mydb TO pp_ddl_operator; -- ããŒã¿ããŒã¹äœæã»ããŒã«äœæã¯ GRANT ã§ã¯æžããªããALTER ROLE ã§å±æ§ãšããŠä»äžãã ALTER ROLE pp_ddl_operator CREATEDB CREATEROLE; -- ãŠãŒã¶ãŒãžã¯ã¡ã³ããŒã·ãããä»äž GRANT pp_ddl_operator TO dbuser; å
é ã® CREATE ROLE ãé€ããšãMySQL åŽã¯æåŸã® 1 è¡ä»¥å€ãã¹ãŠ GRANT ã§ãPostgreSQL åŽã¯ ALTER ROLE ã® 1 è¡ã ããå¥ç³»çµ±ã«èœã¡ãŸãããã® 1 è¡ãä»åã®ãããã©ããã§ããã ããããããšã軞ã«äžŠã¹ããšã察å¿ã¯ãããªããŸãã ããããããš MySQL PostgreSQL ããŒãã«ã® DML GRANT ... ON *.* GRANT ... ON ALL TABLES IN SCHEMA x ïŒæ¢åããŒãã«ã®ã¿ã以åŸã®å㯠ALTER DEFAULT PRIVILEGES ïŒ ããŒãã«ã® ALTER / DROP GRANT ALTER, DROP ON *.* GRANT ã§ã¯äžå¯ ãææããŒã«ã®ã¡ã³ããŒã«ãªã äžæããŒãã« GRANT CREATE TEMPORARY TABLES ON *.* GRANT TEMPORARY ON DATABASE x ããŒã¿ããŒã¹äœæ GRANT CREATE ON *.* ALTER ROLE x CREATEDB ããŒã«ã»ãŠãŒã¶ãŒäœæ GRANT CREATE USER ON *.* ALTER ROLE x CREATEROLE ããŒã«ã®ä»äž GRANT 'role' TO 'user' GRANT role TO user ããŒã«ã®æå¹å ALTER USER 'user' DEFAULT ROLE 'role' ALTER ROLE user SET role = 'role' ïŒä»»æïŒ MySQL åŽã¯ GRANT äž»äœã§åãŸããPostgreSQL åŽã¯ããŒã¿ããŒã¹äœæãšããŒã«äœæã® 2 è¡ã ã ALTER ROLE ã«èœã¡ãŸãã ãã 1 ã€ã GRANT ã«ä¹ããªããã®ã¯ CREATEDB / CREATEROLE ã ãã§ã¯ãããŸãããããŒãã«ã® ALTER / DROP 㯠PostgreSQL ã§ã¯ æææš©ã«åºæã®æš©å©ã§ã GRANT ã§ã¯åãåºããŸãã ãMySQL ã® ALTER / DROP æš©éã«çžåœãããã®ãç¡ãã®ã§ãDDL ãæããããå Žåã¯å¯Ÿè±¡ã®ææããŒã«ã«åå ããã圢ã«ãªããŸããææè
ãã©ããã®å€å®ã¯ææããŒã«ã®ã¡ã³ããŒã§ããã°æºããããã®ã§ãããã¯å±æ§ãšéã£ãŠå
±æããŒã«çµç±ã§æž¡ããŸãã MySQL åŽãå®ã¯ 2 系統ãã MySQL ã¯ããã¹ãŠ GRANT ã§æžãããããã«èŠããŸãããããã¯æ§æã®èŠãæ¹ã®è©±ã§ãã MySQL ã§ã CREATE USER ã ROLE_ADMIN ã®ãããªã°ããŒãã«æš©éã¯ããªããžã§ã¯ãã® ACL ã§ã¯ãªã ã¢ã«ãŠã³ãã«çŽã¥ããŠ æ ŒçŽãããŠããŸãïŒéçæš©é㯠mysql.user ã®åã ROLE_ADMIN ã®ãããªåçæš©é㯠mysql.global_grants ã®è¡ãšããŠïŒããã®ç¹ã¯ PostgreSQL ã®ããŒã«å±æ§ãšæ¬è³ªçã«åãã§ããããã«æ¬¡ã®ãã®ã¯ GRANT ã§ã¯æžããã CREATE USER / ALTER USER ã§æå®ããŸãã ACCOUNT LOCK / UNLOCK PASSWORD EXPIRE ãªã©ã®ãã¹ã¯ãŒãããªã·ãŒ MAX_QUERIES_PER_HOUR ãªã©ã®ãªãœãŒã¹å¶é REQUIRE SSL ãèªèšŒãã©ã°ã€ã³ã®æå® DEFAULT ROLE ïŒ SET DEFAULT ROLE ã§ãèšå®ã§ããïŒ ãªã SSL èŠä»¶ã»ãªãœãŒã¹å¶éã»èªèšŒæ¹åŒã¯ 5.7 ãŸã§ã¯ GRANT ã§ãæžããŸãããã5.7 ã§éæšå¥šã«ãªã 8.0.11 ã§åé€ãããŸããã ã€ãŸã 2 系統ã«åãããŠããã®ã¯ PostgreSQL ã ãã§ã¯ãããŸãã ãéãã¯ç³»çµ±ã®æ°ã§ã¯ãªãã ãããŒã¿ããŒã¹ãäœãããããŒã«ãäœãããšããèœåãã©ã¡ãåŽã«çœ®ãããŠããã ã§ãã SET ROLE ã®æå³è«ãéã ãã 1 ã€ãMySQL ã«ã SET ROLE ã¯ãããŸããæå³è«ãéããŸãã MySQL PostgreSQL ããŒã«æå¹ååŸã®çŸåšã®ãŠãŒã¶ãŒ å€ãããªã ïŒæå¹ããŒã«ã¯ CURRENT_ROLE() ã§ç¢ºèªïŒ åãæ¿ãã ïŒ current_user ã眮ãæããïŒ æš©éã®åæ ã¢ã«ãŠã³ãèªèº«ã®æš©éãšæå¹ããŒã«ã®æš©éã® åéå current_user åºæºãããŒã«å±æ§ã¯ç¶æ¿ãããªã MySQL ã¯å ç®çãªã®ã§ãããŠãŒã¶ãŒåŽã«ä»ããæš©éãããŒã«æå¹åã§èŠããªããªãããšããäºæ
ã¯èµ·ããŸããã ã SET ROLE ããããã©ãããã§ã¯ãªãã SET ROLE ã current_user ã眮ãæãããã©ããã ããä»åã®èœãšã穎ã®åããç®ã§ããã CREATEROLE ã¯ããŒãžã§ã³ã§å±éºåºŠãéã PostgreSQL 15 以åã§ã¯ã CREATEROLE ãæã€ããŒã«ãä»ã®éã¹ãŒããŒãŠãŒã¶ãŒã®ãã¹ã¯ãŒãã倿Žã§ããå®çŸ©æžã¿ããŒã«ãèªåã«ä»äžã§ããŸãã ãã€ãŸã CREATEROLE ã¯ã¹ãŒããŒãŠãŒã¶ãŒã«æºãã匷ããæã£ãŠããŸããïŒæ¢åã®ã¹ãŒããŒãŠãŒã¶ãŒã«ã¯æãåºããŸããïŒã PostgreSQL 16 ã§ãã®æåã¯å€æŽãããæš©éã®ç¯å²ãèªåã管çããããŒã«ã«éå®ãããŠããŸããæ¬èšäºã®æ§æã¯ 16 以éãåæãšããŠããã®ã§ã15 以åã®ç°å¢ã§å
±æããŒã«ã« CREATEROLE ãä»äžããã®ã¯é¿ããŠãã ããã ãŸãšã PostgreSQL ã® CREATEDB / CREATEROLE 㯠GRANT ã§ã¯æžããã ALTER ROLE ã§ä»äžãããããŒã«å±æ§ã ããŒã«å±æ§ã¯ current_user ãã®ãã®ã ããèŠãŠãç¶æ¿ãããªã ãäžæ¹ãªããžã§ã¯ãæš©é㯠current_user ãšç¶æ¿ããŒã«çŸ€ãèŠãããã®é察称æ§ãèœãšãç©Žã®æ£äœ ãããã£ãŠ SET ROLE ãäœ¿ãæ§æã§ã¯ã屿§ã®ä»äžå
㯠current_user ãåºæºã«æ±ºãã ç§»æ€ã®ãã§ãã¯ãã€ã³ããšããŠäžè¬åãããªããMySQL ã§ ON *.* ãšæžããŠãã GRANT æãæŽãåºãã ã©ãããªããžã§ã¯ãæš©éã§ã©ããããŒã«å±æ§ããæåã«ä»åãã ããšã§ãããããŠæš©éãå¹ããªããšãã«æåã«æã€ã¹ã㯠SELECT current_user, session_user; ã§ãããã® 1 è¡ã§åãåããããåé¡ã¯ãæã£ãŠããããå€ãã¯ãã§ãã åè CREATE ROLE privilege cannot be inherited?! â select * from depesz; ââ 2009 幎ã®èšäºãä»åãšåãèœãšã穎ãåœæããèšé²ãããŠããŸã PostgreSQL: Documentation: Role Attributes ââ ããŒã«å±æ§ã®äžèЧãšããããããäœãèš±å¯ããã PostgreSQL 16ã§ã®ããŒã«ã«é¢ãã倿Žç¹ ââ CREATEROLE ã®å€æŽç¹ãšã GRANT ã® SET / INHERIT ãªãã·ã§ã³ ãMySQLããšãPostgreSQLãã®ã»ãã¥ãªãã£æ©èœãæ¯èŒãã ââ æš©é管çãå«ããããåºãç¯å²ã§ã® MySQL / PostgreSQL æ¯èŒ
ã¯ããã« ããã«ã¡ã¯ãKINTOãã¯ãããžãŒãºã® JR.Liang ã§ãã æ¬èšäºã§ã¯ã AIãšå¯Ÿè©±ããã ãã§ãã¬ãŒã³åç»ãäœããã¢ã㪠ã顿ã«ãçæAIã¢ããªåãã®ãã¬ãŒã ã¯ãŒã¯ LangGraph ã䜿ã£ãŠãã®ã¢ããªãã©ãæ§ç¯ããã®ãã解説ããŸããç¹ã«ãLangGraph ã®æ©èœã§ è€éãªåŠçã®æµãïŒãããŒïŒãã©ãå¶åŸ¡ããã ã«çŠç¹ãåœãŠã䜿ã£ãæ©èœãäžã€ãã€èª¬æããŠãããŸãã ãŸããç§ãã¡ãäœãããã£ããã®ã¯ãããªã¢ããªã§ãã 䜿ã人 ïŒçæAIãåç»ç·šéããç¥èãšçµéšãå°ãªã人ã ããããš ïŒã¢ããªã®è³ªåã«çããŠãããšãç°¡åã« èªåã®ãã¬ãŒã³åç»ã1æ¬åºæ¥äžãã ã ãŠãŒã¶ãŒäœéšãšããŠã¯ ã質åã«çãã â ã§ããç©ãèŠãŠãæ°ã«ãªãã°çŽã â 宿ã ãšããæµãããšãŠãã·ã³ãã«ã§ãããã¡ãããAIïŒLLMïŒéšåã®å®è¡åºç€ãšã㊠Claude CodeïŒAgent SDKïŒãçµã¿èŸŒãã ã¢ããªã®æäœã€ã¡ãŒãžã§ãã å·Šãåç»ãã¬ãã¥ãŒãå³ããã£ããã察話 â å°æ¬ã»æ§æç¢ºèª â çæ â ãã£ããã§ä¿®æ£ â å®æã®æµã ãã® ã·ã³ãã«ãªèŠãç® ãæãç«ãããè£åŽã®è€éãããLangGraph ãåŒãåããŠç®¡çããããããã«ããŸããã çæAIã¢ããªã¯ãªããäžçŽç·ãã§æžããªãã®ã éåžžã®ããã°ã©ã ã¯ãA ãåŒãã§ã次㫠Bãæ¬¡ã« Cããš äžçŽç· ã«æžããŸãããšãããçæAIã絡ããšãè¿çã»çµæç©ãæ¯åãã¬ãïŒé決å®çïŒãããäžåã§å®ç§ã«ãªããã 確èªã»ä¿®æ£ ã®å·¥çšãæ¬ ãããŸããã ãã®çµæããŠãŒã¶ãŒãæºè¶³ã§ããåç»ãçæãããŸã§ã®éçšã¯ãè¡ã£ããæ¥ãããããæµãã«ãªããŸãã å¶äœéäžã§ç¢ºèªãããïŒ äººéã«ç¢ºèªããã åè³ªãæªãã»ä¿®æ£ãããïŒ åã®å·¥çšã«æ»ã£ãŠããçŽã ãŠãŒã¶ãŒã®ããŸããŸãªèŠæã§ïŒ æµãå
ã®å·¥çšãå€ãã ãã€ã§ãç·šéãç¶ãããïŒ äžæã»åé ãããã®ç¶æ
ãšåå²ãæŽçãã管çããããŒã«ã LangGraph ã§ãã LangGraph ãšã¯ LangGraph ã¯ã AIã¢ããªã®ãåŠçã®æµãããçµã¿ç«ãŠããªãŒãã³ãœãŒã¹ã®ã©ã€ãã©ãª ã§ããChatGPT 飿ºã§ç¥ããã LangChain ããŒã ãäœã£ãŠããŸãã @ card ç¹åŸŽã¯ãåŠçã 3ã€ã®èŠçŽ ã®çµã¿åããïŒGraph ãšããŠæžããããšã Node ïŒ1ã€ã®äœæ¥åäœããã®èšäºã§ã¯ãâ¯â¯ããä¿ããšåŒã³ãŸãã Edge ïŒNode ãã Node ãžåŒãç¢å°ã次ã«ã©ããžé²ããã StateïŒèšé²ã·ãŒãïŒ ïŒå
š Node ã§å
±æãã1æã®èšé²ã·ãŒããå Node ãç¶æ
ãæžã蟌ã¿ãèªã¿åããŸãã Node ã1ã€ãã€å®è¡ããŠé²ã ã®ã§ããåå²ã»ã«ãŒãã»éäžã§ç¢ºèªã»äžæåéãã絡ãŸããã«æžããŸãããã®èšäºã§äœ¿ãæè¡ã¯æ¬¡ã®5ã€ã§ãã LangGraph ã®æè¡ ã©ããªãã®ã äœãå¬ããã å
±æ State å
š Node ã§èšé²ã·ãŒããå
±æ å·¥çšããŸããã åãæž¡ããç Žç¶»ããªã åçãªåå²ã»ã«ãŒã å®è¡æã«æ¬¡ã® Node ãéžã¶ ïŒ åã«æ»ã å¶äœéäžã®ããçŽããåã®å·¥çšã«æ»ãã 人ãžã®å²ã蟌ã¿ïŒinterruptïŒ éäžã§äžæåæ¢ããŠäººã«èã å·¥çšãé²ããªãããŠãŒã¶ãŒã確èªã§ãã ä¿åïŒcheckpointerïŒ Node ããšã«ç¶æ
ãä¿å äžæã»åèµ·åããŠãå·¥çšãç¶ãããã 䞊è¡å®è¡ è€æ° Node ãåæã«é²ãã ããã€ãã®å·¥çšã®åŸ
ã¡æéãççž®ã§ãã ããããã¯ããã®5ã€ã®æè¡ã ã©ã®æµãã§ãäœã®ããã«äœ¿ãããŠããã ã1ã¹ããããã€èŠãŠãããŸãã å
šäœã®æµã èšèšæ¹éã¯ããã§ãã è€éãã¯å
šéš LangGraph åŽã«ä»èŸŒãã§ããŠãŒã¶ãŒã«ã¯çè§£ããããæµããèŠããã ãŠãŒã¶ãŒãäœéšããã®ã¯ã次ã®5ã¹ãããã§ãã flowchart LR A[â 察話ã§<br/>ãã¢ãªã³ã°] --> B[â¡ å°æ¬ã»æ§æã<br/>èŠãŠçŽã] B --> C[⢠èšç»ãš<br/>ãã¶ã€ã³ã確èª] C --> D[⣠åç»çæããŠ<br/>æ¡ç¹ã»ç¢ºèª] D --> E[â€ å®æ] B -. æ»ã .-> A C -. æ»ã .-> B D -. æ»ã .-> C E -. æ»ã .-> D D -. ä¿®æ£ .-> D åºæ¬ã®æµããšããŠåã¹ãããã äžåäžçã®åœ¢ã§ é²ããŸããå ããŠã ã©ã®ã¹ãããããã§ãåã«æ»ã£ãŠããçŽããŸã ïŒå³ã®ç¹ç·ïŒããŠãŒã¶ãŒã®äžèšæ¬¡ç¬¬ã§ã1ã€åã«ããããã«åã«ãæ»ããŸãããã®ãè¡ã£ããæ¥ããããç Žç¶»ãããã«æ±ããã®ã LangGraph ã®åŒ·ã¿ã§ãã æµãâ äœãäœããããã察話ã§èã ãŠãŒã¶ãŒäœéš 空æ¬ã®ãã©ãŒã ã§ã¯ãªãã 1åãã€çããã ã ã§åç»å¶äœã«å¿
èŠãªæ
å ±ïŒãå
容ã»çŽ æã»å°ºã»å¯Ÿè±¡è
ããªã©ãéããŸããAIã«äžæ
£ãã§ããã¢ããªã芪åã«æ¡å
ããŠãããŸãã 䜿ãæè¡ïŒäººãžã®å²ã蟌ã¿ïŒinterruptïŒïŒ ä¿åïŒcheckpointerïŒ è³ªåã®åºŠã«å®è¡ã äžæåæ¢ ããŠäººã«èããçããããã£ãŠç¶ããŸãïŒHuman-in-the-LoopïŒãçãã¯éµåã¿ã«ããã AIããåç»ãäœããæ
å ±ãèãåºãããããå€å® ããè¶³ããªããã° å
·äœçã«èãçŽããŸã ã質åã1åïŒ1Node ã«åããé²ãããšã«ä¿åããã®ã§ãéäžã§éããŠãç¶ãããåéã§ããŸãã ã³ãŒããµã³ãã« from langgraph.graph import StateGraph, START from langgraph.types import interrupt, Command # ã話ãå
容ãèãä¿ãã®Node def 話ãå
容ãèãä¿(state): åç = interrupt("ã©ããªå
容ã®åç»ãäœãããã§ããïŒ") # äžæåæ¢ããŠäººã«èã å€å® = AIã§ç¢ºèª("話ãå
容ãšããŠååãïŒ", åç) # çããååãAIãå€å® if not å€å®.OK: # è¶³ããªããã°âŠ return Command(goto="話ãå
容ãèãä¿") # åãNodeã«æ»ã£ãŠèãçŽã return {"äŒç»æž": åç} # OKãªãèšé²ã·ãŒãïŒäŒç»æžïŒã«ä¿å â æ¬¡ãž builder = StateGraph(State) builder.add_node("話ãå
容ãèãä¿", 話ãå
容ãèãä¿) builder.add_node("䜿ãçŽ æãèãä¿", 䜿ãçŽ æãèãä¿) builder.add_edge(START, "話ãå
容ãèãä¿") # â ããããéå§ïŒå
¥å£ïŒ # ⊠æ®ãã® Nodeã»Edge ã远å ⊠graph = builder.compile(checkpointer=checkpointer) # å
šéšã€ãªãã§ãã compileïŒåNodeã®åŸã«èªåä¿åïŒ äœ¿ã£ãŠããéšå interrupt(質å) ïŒäžæåæ¢ããŠäººã«èã Command(goto=âŠ) ïŒæ¬¡ã«é²ã Node ãæå®ïŒåã Node ãæå®ããã°èãçŽãïŒ compile(checkpointer=âŠ) ïŒNode ããšã«ä¿å sequenceDiagram participant N as 質åããä¿ participant H as ãŠãŒã¶ãŒ N->>N: äžæåæ¢ããŠè³ªå H-->>N: åç N->>N: AIããçãã¯ååãããå€å® alt è¶³ããªã N-->>H: å
·äœçã«èãçŽã else åå N->>N: èšé²ã·ãŒãã«ä¿å â æ¬¡ãž end æµãâ¡ å°æ¬ã»æ§æãAIãäžæžããã確èªããŠçŽãã ãŠãŒã¶ãŒäœéš éããæ
å ±ãã å°æ¬ãšæ§æã®äžæžããAIãäœã£ãŠ èŠããŸãããŠãŒã¶ãŒã¯ ãOKããããããçŽããŠããªã©èªåã®èšèã§ç¢ºèªã»ä¿®æ£ã®æç€º ãã§ããŸãã 䜿ãæè¡ïŒäººãžã®å²ã蟌ã¿ïŒç¢ºèªã²ãŒãïŒïŒ åçãªåå² äžæžããèŠããŠ äžæåæ¢ ããè¿äºãåãåããŸããããããã€ã³ãã§ããŠãŒã¶ãŒã®èªç±ãªäžèšã® æå³ãAIãå€å® ãããã©ã® Node ã«æ»ãããã å®è¡æã«éžã³ãŸã ïŒåçãªåå²ïŒãã2æç®ã®ã·ãŒã³ãçãããããªãæ§æãããçŽãããæãããèšãæ¹ã«ããããªãå°æ¬ãããçŽãããOKããªã次ãžã ã³ãŒããµã³ãã« # ã確èªã²ãŒããã®Node def 確èªã²ãŒã(state): è¿äº = interrupt("ãã®å°æ¬ã§ããããã§ããïŒ çŽããããšãããããã°æããŠãã ãã") è¡ãå
= AIã§æ¯ãåã(è¿äº, ["å°æ¬ãçŽã", "æ§æãçŽã", "次ãž"]) # æå³ãå€å® return Command(goto=è¡ãå
) # â è¿äºæ¬¡ç¬¬ã§æ»ãå
ãå€ããïŒåçãªåå²ïŒ 䜿ã£ãŠããéšå Command(goto=âŠ) ïŒæ¬¡ã® Node ã å®è¡æã« éžã¶ãè¡ãå
ãåºå®ããè¿äºæ¬¡ç¬¬ã§å€ããããïŒããããåçãªåå²ãã flowchart LR gate["確èªã²ãŒã<br/>ïŒäžæåæ¢ããŠç¢ºèªïŒ"] --> route["æå³ãAIã§å€å®"] route -. "æ§æãçŽã" .-> align[æ§æã®ä¿] route -. "å°æ¬ãçŽã" .-> speech[å°æ¬ã®ä¿] route -. "OK" .-> next[次ãž] æµã⢠èšç»ïŒã·ãŒã³æ§æïŒã®ç¢ºèªãšãã¶ã€ã³ã®æºåãåæã«é²ãã ãŠãŒã¶ãŒäœéš ãã©ããªã·ãŒã³æ§æã§çµã¿ç«ãŠãããã®èšç»ã確èªããŸãããã®ç¢ºèªã®è£ã§ 次ã®ã¹ãããã®ãã¶ã€ã³ãåæã«é²ãããã¶ã€ã³ã®ç¢ºèªãã§ãããŸã§ã®åŸ
ã¡æéãççž®ããŸã ã 䜿ãæè¡ïŒäžŠè¡å®è¡ ãã€ã³ãã¯ã ãèšç»ã®ç¢ºèªããšããã¶ã€ã³ã®æºåãã¯äºãã«ç¬ç«ããŠãã ããšãèšç»ã®ç¢ºèªã¯äººéã®è¿äºãåŸ
ã€å¿
èŠããããŸããããã¶ã€ã³ã®äžæºåã¯ãã®è¿äºã«é¢ä¿ãªãé²ããããŸããããã§1ã€ã® Node ãã ç¢å°ïŒEdgeïŒã2æ¬åæã« åºããçæ¹ãã人éã®ç¢ºèªåŸ
ã¡ãã§æ¢ãŸã£ãŠããè£ã§ãããçæ¹ã æ¬¡ã«å¿
èŠãªãã¶ã€ã³ã®äžæºåãå
åãã§èšç® ããŠãããŸããOK ãåºãé ã«ã¯æºåãæžãã§ããã®ã§ã å
šäœã®äœæ¥æéãçããªããŸã ã ã³ãŒããµã³ãã« # æ§æãã§ããã 2 æ¬ã®ç¢å°ãåæã«åºãïŒäžŠè¡å®è¡ïŒ builder.add_edge("æ§æãäœãä¿", "èšç»ã®ç¢ºèª") # çæ¹ïŒäººéã®ç¢ºèªåŸ
ã¡ builder.add_edge("æ§æãäœãä¿", "ãã¶ã€ã³å
èªã¿ä¿") # ããçæ¹ïŒè£ã§ãã¶ã€ã³ãå
èªã¿ # å
èªã¿ä¿ïŒç¢ºèªåŸ
ã¡ã®è£ã§ãã¶ã€ã³ãèšç®ããèšé²ã·ãŒãã«çœ®ããŠãã def ãã¶ã€ã³å
èªã¿ä¿(state): return {"å
èªã¿ãã¶ã€ã³": ãã¶ã€ã³ãçæ(state)} # èšç»ã®ç¢ºèªãOKãªããæ¬¡ã®ããã¶ã€ã³ã®ç¢ºèªããžé²ã builder.add_edge("èšç»ã®ç¢ºèª", "ãã¶ã€ã³ã®ç¢ºèª") # ãã¶ã€ã³ã®ç¢ºèªïŒå
èªã¿æžã¿ãããã°åèšç®ããããã衚瀺ãã def ãã¶ã€ã³ã®ç¢ºèª(state): ãã¶ã€ã³ = state.get("å
èªã¿ãã¶ã€ã³") or ãã¶ã€ã³ãçæ(state) interrupt(("ãã®ãã¶ã€ã³ã§ããããã§ããïŒ", ãã¶ã€ã³)) return {} 䜿ã£ãŠããéšå add_edge(å
, å
) ïŒç¢å°ã1æ¬åŒãã åãå
ãã2æ¬ã®Edgeãèšå®ãã ããšã§ãè€æ°ã®Nodeã䞊è¡ããŠå®è¡ã§ããïŒïŒäžŠè¡å®è¡ïŒã state["å
èªã¿ãã¶ã€ã³"] ïŒå
èªã¿ããçµæãèšé²ã·ãŒãã«æ®ãããã¶ã€ã³ã®ç¢ºèªã§ããåãåºãïŒå
±æ StateïŒã flowchart LR align[æ§æãäœãä¿] --> gate["èšç»ã®ç¢ºèª<br/>ïŒäººéã®åŸ
ã¡æéïŒ"] align --> pre["ãã¶ã€ã³ãè£ã§å
èªã¿"] gate --> design["ãã¶ã€ã³ã®ç¢ºèª<br/>ïŒå
èªã¿æžã¿ããã衚瀺ïŒ"] pre -. å
èªã¿çµæ .-> design æµã⣠åç»çæããŠæ¡ç¹ããåé¡ç¹ã»çŽããšããããŠãŒã¶ãŒãç¢ºèª ãŠãŒã¶ãŒäœéš æåã®åç»ãçµã¿ç«ãŠã ãŠãŒã¶ãŒã®èŠæã«åãããŠçæåç»ãæ¡ç¹ããŸã ããŠãŒã¶ãŒèªèº«ããã©ããèªåã®èŠæã«åã£ãŠããªããšããã¯ãªãããã確ãããããããã«ãªããŸãããŠãŒã¶ãŒã¯ä»äžãããèŠãŠãOKãããçŽããŠããèšãã ãã§ãã 䜿ãæè¡ïŒäººãžã®å²ãèŸŒã¿ ïŒ å
±æ State ïŒ ã«ãŒã ãåç»çæ â æ¡ç¹ â ç¹æ°ãšåé¡ç¹ãæç€º â ãŠãŒã¶ãŒããã©ããçŽãããã確èªïŒå²ã蟌ã¿ïŒ â ä¿®æ£ â ããäžåºŠæ¡ç¹âŠããšããã«ãŒããåããŸãããã€ã³ã㯠æ¡ç¹ã®ãã®ãã ïŒå
±æ State ãããä»ãŸã§ã®æµãã§ èãåãããŠãŒã¶ãŒã®èŠæ ãèªã¿åºããã§ããåç»ãèŠæãšç
§ããåãããŠãç¹æ°ãšã¢ããã€ã¹ãæç€ºããŸãã ã³ãŒããµã³ãã« # ãæ¡ç¹ããä¿ãã®NodeïŒæ¡ç¹ã ããå²ã蟌ã¿ã¯æããªãïŒ def æ¡ç¹ããä¿(state): ç¹æ°, åé¡ç¹ = AIã§æ¡ç¹( state["video"], state["äŒç»æž"] ) # èšé²ã·ãŒãã®èŠæã"ãã®ãã"ã«æ¡ç¹ if ç¹æ°.åæ Œ: # èŠæã©ãã return Command(goto="宿ã®ç¢ºèª") # â ã«ãŒããæãã # ç¹æ°ãšåé¡ç¹ãå
±æ State ã«èŒããŠã確èªåœ¹ã® Node ãžæž¡ã return Command( goto="ãŠãŒã¶ãŒã«ç¢ºèªããä¿", update={"ç¹æ°": ç¹æ°, "åé¡ç¹": åé¡ç¹}, ) # ããŠãŒã¶ãŒã«ç¢ºèªããä¿ãã®NodeïŒinterrupt ãå
é ã«çœ®ãïŒ def ãŠãŒã¶ãŒã«ç¢ºèªããä¿(state): # ç¹æ°ãšåé¡ç¹ãèŠããŠããŠãŒã¶ãŒã«ãã©ããçŽããããèãïŒå²ã蟌ã¿ïŒ çŽãæç€º = interrupt( ("ç¹æ°ãšåé¡ç¹ã¯ãã¡ãã§ããã©ããçŽããŸããïŒ", state["ç¹æ°"], state["åé¡ç¹"]) ) return Command( goto="ä¿®æ£ããä¿", # â çŽããŠããäžåºŠæ¡ç¹ïŒã«ãŒãïŒ update={"çŽãæç€º": çŽãæç€º}, ) 䜿ã£ãŠããéšå state["äŒç»æž"] ïŒä»ãŸã§ã®æµãã§ä¿åããèŠæã èªã¿åºã ïŒå
±æ StateïŒ interrupt(âŠ) ïŒç¹æ°ãšåé¡ç¹ãèŠããŠãã©ããçŽããããèã Command(goto=âŠ) ïŒãä¿®æ£ããä¿ãã«æ»ã㊠ã«ãŒã ãäœã flowchart LR compose[åç»ãçæããä¿] --> qa{æ¡ç¹ããä¿} qa -->|äžåæ Œ| show["ãŠãŒã¶ãŒã«ç¢ºèªããä¿<br/>ïŒå²ã蟌ã¿ã§ç¹æ°ãšåé¡ç¹ãæç€ºïŒ"] show -->|çŽãæç€º| iterate[ä¿®æ£ããä¿] --> qa qa -->|åæ Œ| gate[宿ã®ç¢ºèªãž] æµã†åç»ãæžãåºããŠå®æ ãŠãŒã¶ãŒäœéš æåŸã«ããã®åç»ã§å®æã«ããŸããïŒããš äžåºŠã ã 確èªããŸãã 䜿ãæè¡ïŒäººãžã®å²ã蟌ã¿ïŒæçµã²ãŒãïŒ æçµç¢ºèªã äžæåæ¢ ã®ã²ãŒãã æ¢ãŸã£ãŠãŠãŒã¶ãŒã«èã ãæ¿èªããããåç»ãæžãåºããŠå®æã§ãã ã³ãŒããµã³ãã« from langgraph.graph import END def 宿ã®ç¢ºèª(state): interrupt("ãã®åç»ã§å®æã«ããŸããïŒ") # æ¿èªããããŸã§é²ãŸãªã return {} builder.add_edge("宿ã®ç¢ºèª", "æžãåºãä¿") # æ¿èªåŸã¯æžãåºããžïŒåå²ãªãïŒ builder.add_edge("æžãåºãä¿", END) # æžãåºããçµãã£ãã宿 flowchart LR qa[å質OKã®åç»] --> gate["宿ã«ããŠããïŒ<br/>ïŒæçµç¢ºèªïŒ"] gate -->|æ¿èª| out[æžãåºã â 宿] å®è£
ã§é£ããã£ãç¹ïŒãŠãŒã¶ãŒã®ãã©ãã©ãªèŠæããã©ã®æ®µéã§ãé©åã«åãæ¢ããŠå¯Ÿå¿ã§ããã å®è£
ã«ãããŠäžçªé£ããã£ãã®ãã ãŠãŒã¶ãŒãèªç±ã«æã¡èŸŒãäžèš ã®é©åãªæ±ãã§ããèšãæ¹ã¯ç¡æ°ã«ããããã åããçŽããŠãã§ãæ»ãã¹ãå·¥çšïŒNodeïŒã¯éã å ŽåããããŸãã ãŠãŒã¶ãŒã®äžèš æ»ãå
ã®ä¿ ãæåããã£ãšå€§ããã 軜ãä¿®æ£ã®ä¿ ã2æç®ã®ã·ãŒã³ã®èæ¯ãç·ã«ããŠã ã·ãŒã³åäœã®ä¿®æ£ä¿ ãé çªãå
¥ãæ¿ããŠã æ§æãäœãçŽãä¿ ãå
šäœçã«äœãçŽããŠã å
šéšäœãçŽãä¿ çæ³ã¯ã ãŠãŒã¶ãŒãä»ã©ã®ã¹ãããã«å±
ãŠããã©ããªèŠæã§ããããã«åãããŠåŠçã§ãã ããšããŠãŒã¶ãŒäœéšãã§ããã ãç°¡åã«ããããã«ããã®äžèšããã©ã® NodeïŒåŠçã®ä¿ïŒã«æ»ããŠçŽããããæ£ããéžã¶ã®ãéèŠãã€ã³ãã§ãããã®ãããèªç±æãè§£éããã¡ããã©ããä¿ïŒã¹ãããïŒã«æ»ããå¿
èŠããããŸããã ç§ãã¡ãèããè§£æ±ºæ¹æ³ã®è»žã¯ ãè¡ãå
ã®åè£ã¯ã³ãŒããæ±ºããŠãæå³ã®è§£éã¯AIã«ä»»ããã ããšã æ»ããåè£ãå®£èš â AIãã©ãè§£éããŠãã宣èšå€ãžã¯é£ã¹ãªãïŒæŽèµ°ããªãïŒã èªç±æã®æå³ã¯AIãåé¡ â åè£ããäžçªè¿ããã®ãéžã¶ã è¿·ã£ããèãè¿ã â ææ§ãªæšæž¬ããããããäžåºŠç¢ºèªããã æ»ããå
ã¯ãä»å±
ãã¹ãããããšã«å€ãã ïŒåè£ã¯ç¢ºèªã²ãŒãããšã«å¥ã
ã«å®£èšããŠããã仿¢ãŸã£ãŠããã²ãŒãã®åè£ãããã®ãŸãŸæ»ããç¯å²ã«ãªããŸãã ä»å±
ãã¹ããã æ»ããå
èšç»ã®ç¢ºèª å°æ¬ã»æ§æã®å€æŽ / ãã¶ã€ã³ã®å€æŽ / æåã®ãã¢ãªã³ã° ãã¬ãã¥ãŒã®ç¢ºèª è²ãå€æŽ / 1ã·ãŒã³ã®ä¿®æ£ / æ§æãå€ãã / å
šéšäœãçŽã 宿ã®ç¢ºèª ä¿®æ£ / äœãçŽã ã³ãŒããµã³ãã« from typing import Literal # æ»ããåè£ãå®£èš â å€ãªæãžã¯é£ã°ããªã def 確èªã²ãŒã( state, ) -> Command[ Literal[ "軜ãä¿®æ£ã®ä¿", "ã·ãŒã³åäœã®ä¿®æ£ä¿", "æ§æãäœãçŽãä¿", "å
šéšäœãçŽãä¿", "次ãž", ] ]: è¿äº = interrupt("çŽããããšããã¯ãããŸããïŒ") å€å® = AIã§æ¯ãåã( è¿äº, ["軜ãä¿®æ£ã®ä¿", "ã·ãŒã³åäœã®ä¿®æ£ä¿", "æ§æãäœãçŽãä¿", "å
šéšäœãçŽãä¿", "次ãž"], ) if å€å®.ææ§: # è¿·ã£ãã return Command(goto="確èªã²ãŒã") # ããäžåºŠèãè¿ã return Command(goto=å€å®.è¡ãå
) # ã¯ã£ããããŠããã°æçã®Nodeãž flowchart TD reply["ãŠãŒã¶ãŒã®èªç±æ"] --> router[æå³ãAIã§å€å®] router -->|ã¯ã£ãã| dest["é©åãªNodeãžæ»ã"] router -->|ææ§| clarify["1åã ãèãè¿ã"] clarify --> reply æåŸã« ãã®ã¢ããªã§ãŠãŒã¶ãŒã«èŠããã®ã¯ã質åã«çãã â 確èªããŠçŽã â 宿ããšãã ç°¡åãªæµã ããã®è£ã«ãã åå²ã»ããçŽãã»ç¢ºèªã»äžæããã®åé ãšããè€éãããLangGraphïŒ å
±æ Stateã»åçãªåå²ã»ã«ãŒãã»å²ã蟌ã¿ã»ä¿å ïŒããŸãããšåŒãåããŠãããŸããã ãããã§ç§ãã¡ã¯ã ã©ãã§äººã«ç¢ºèªãããã»ã©ãã§AIã«åŠçãããã ãšãã ã¢ããªãªãã§ã¯ã®å€æ ã®èšèšã«éäžã§ããŸãããçæAIãçµã¿èŸŒãã ã¢ããªãéçºããéã«ãæ¬èšäºã§çšããæŠå¿µãšæè¡ãåèã«ãªãã°å¹žãã§ãã
ã¯ããã« ããã«ã¡ã¯ãã¯ã©ãŠãã»ãã¥ãªãã£ã°ã«ãŒãã®å°æã§ãã æ®æ®µã¯ AWS ãäžå¿ãšããã¯ã©ãŠãç°å¢ã®ã»ãã¥ãªãã£éçšãšæ¹åãæ
åœããŠããŸãã æ¬èšäºã§ã¯ãGuardDuty ã®ã¢ã©ãŒããå
šä»¶ç®èŠã§ç¢ºèªããŠããéçšããAWS Security Incident ResponseïŒä»¥äž SIRïŒã®å°å
¥ãšèªäœã® Slack 飿ºã§ã©ã®ããã«å€ãããã玹ä»ããŸãã æ¬èšäºã®å¯Ÿè±¡èªè
GuardDuty ã®ã¢ã©ãŒã察å¿ã«è² æ
ãæããŠããæ¹ AWS Security Incident Response ã®å°å
¥ãæ€èšããŠããæ¹ ã€ã³ã·ãã³ã察å¿ã®å°ç·ã Slack ã«çµ±åãããæ¹ èæ¯ åœç€Ÿã¯ãã«ãã¢ã«ãŠã³ãã® AWS ç°å¢ã GuardDuty ã§ç£èŠããŠããŸãã SIR å°å
¥åã®éçšã¯ãã¢ã©ãŒããçºç«ãããã³ã«ãããžã¡ã³ãã³ã³ãœãŒã«ãéããGuardDuty ã®æ€åºå
容ã»é¢é£ãªãœãŒã¹ã»CloudTrail ãã°ãªã©ã確èªããå®å®³ã®ããæ€ç¥ãªã®ã鿀ç¥ãªã®ããæ¯å倿ããéçšã§ããã ã¢ã©ãŒã 1 ä»¶ããšã®äœæ¥ã¯çæéã§ããã¢ã«ãŠã³ãæ°ã«æ¯äŸããŠæ€åºä»¶æ°ãå¢ããããã確èªã«äœ¿ãæéã¯ç¡èŠã§ããªãéã«ãªã£ãŠããŸããã ç¹ã« 2026 幎 5 æã6 æãGitHub Actions ã«èµ·å ããæ€ç¥ã¢ã©ãŒããç®ç«ã€ããã«ãªããŸããã GitHub ããã¹ãããã©ã³ããŒã® IP ã¢ãã¬ã¹ã¯å€æ°ã®å©çšè
ã§å
±æãããŠãããä»ã®å©çšè
ã«ããæªçšãªã©ãåå ãšããŠãã® IP ã GuardDuty ã®åç
§ããè
åšã€ã³ããªãžã§ã³ã¹ã«ç»é²ããããšãåã IP 垯ããå®è¡ãããæ£èŠã® GitHub Actions ã®éä¿¡ãŸã§è
åšç±æ¥ãšããŠæ€ç¥ãããã¢ã©ãŒããå€çºããŸãã ãã®ã¢ã©ãŒããžã®å¯Ÿå¿ããSIR ã®å°å
¥ãæ€èšãããã£ããã«ãªããŸããã AWS Security Incident Response ãšã¯ïŒ AWS Security Incident Response ã¯ãã»ãã¥ãªãã£ã€ãã³ãã®æ€ç¥ãã察å¿ãŸã§ãæ¯æŽãã AWS ã®ãããŒãžããµãŒãã¹ã§ãã SIR 㯠GuardDuty ã®æ€åºçµæãšãSecurity Hub çµç±ã§é£æºãããµãŒãããŒãã£ãŒè£œåã®æ€åºçµæãåã蟌ã¿ãèªåã§ããªã¢ãŒãžããŸãã 鿀ç¥ãšå€å®ããããã®ã¯ã¢ãŒã«ã€ããããç·æ¥åºŠã®é«ããã®ã ããã±ãŒã¹ãšããŠèµ·ç¥šãããŸãã ããã«ããããããŸã§äººæã§è¡ã£ãŠãã確èªãšã¢ãŒã«ã€ãã®äœæ¥ã®å€§éšåããµãŒãã¹ã«çœ®ãæããããŸãã ãªããäžéšã® Finding ã¿ã€ãã¯èªåããªã¢ãŒãžã®å¯Ÿè±¡å€ã§ãã ã±ãŒã¹åãããæ€åºçµæã¯ãåæããå°ã蟌ããã¯ããŒãºãŸã§ã®ã©ã€ããµã€ã¯ã«ãã±ãŒã¹äžã«èšé²ããã察å¿ç¶æ³ãäžå
çã«è¿œè·¡ã§ããŸãã ãŸããAWS ãµããŒããå¿
èŠãªã±ãŒã¹ã«ã€ããŠã¯ãSIR ãšã³ãžãã¢ïŒã»ãã¥ãªãã£è
åšã®ããªã¢ãŒãžã»èª¿æ»ã»å°ã蟌ããæ¯æŽãã AWS ã®å°éãšã³ãžãã¢ïŒãã 15 å以å
ã«ååå¿çããããã±ãŒã¹ã¯ããŒãºãŸã§ç¶ç¶ããŠèª¿æ»ã®æ¯æŽãåããããŸãã äŸãã°ãã¢ã«ãŠã³ãä¹ã£åãã®ãããªæç¢ºãªã€ã³ã·ãã³ãã ãã§ãªããçãããæ€ç¥ãæ¬ç©ã®äŸµå®³ãã©ããã®èª¿æ»ããGuardDuty ã®ããªã¢ãŒãžèšå®ã»æå¶ã«ãŒã«ã«é¢ããåãåãããªã©ã AWS ãµããŒããå¿
èŠãªã±ãŒã¹ãšããŠèµ·ç¥šã§ããŸãã è²»çšé¢ã§ã¯ããšã³ã¿ãŒãã©ã€ãºãµããŒãå¥çŽãããã° SIR ã®ãµãŒãã¹å
šäœã远å è²»çšãªãã§å©çšã§ããŸãã Slack 飿º åœç€Ÿã¯ãšã³ã¿ãŒãã©ã€ãºãµããŒããå¥çŽããŠãããããSIR ã¯è¿œå ã³ã¹ããªãã§ããã«å°å
¥ã§ããŸããã ããããéçšã«èŒãããšå°ç·ã®åé¡ãèŠããŠããŸããã SIR ã±ãŒã¹ã®ç¢ºèªãæäœã«ã¯ãããžã¡ã³ãã³ã³ãœãŒã«ãžã®ãã°ã€ã³ãå¿
èŠãªããã瀟å
æšæºã®ã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ã§ãã Slack ã§ã®äŒè©±ãšãããžã¡ã³ãã³ã³ãœãŒã«äžã®èšé²ãè¡ãæ¥ããæéããããã±ãŒã¹ã®å€åã«æ°ã¥ãã®ãé
ããæžå¿µããããŸããã ããã§ AWS å
¬åŒã®ãµã³ãã«å®è£
ïŒ sample-aws-security-incident-response-integrations ïŒãåèã«ãSlack ãšã®åæ¹å飿ºãäœæããŸããã 起祚㯠Slack ã®ã¹ã©ãã·ã¥ã³ãã³ãããè¡ããŸãã /sir create ãå®è¡ãããšå
¥åã¢ãŒãã«ãéããã±ãŒã¹ã¿ã€ããã¿ã€ãã«ã圱é¿ãåããã¢ã«ãŠã³ããªã©ãå
¥åããŠã±ãŒã¹ãäœæã§ããŸãã èª¬ææ¬ã«ã¯ãäœãèµ·ãããããçŸåšã®åœ±é¿ããªã©ã®å®åèŠåºããåæè¡šç€ºããããããåããã ãã§å ±åã®äœè£ãæŽããŸãã 起祚ã¯èª°ã§ãã§ããäžæ¹ãã¹ããŒã¿ã¹å€æŽãå
容ã®ç·šéãšãã£ã圱é¿ã®å€§ããæäœã¯ç®¡çè
ã«éå®ããŠããã倿޿ã誰ãäœã®ã¢ã¯ã·ã§ã³ãå®è¡ããã Slack äžã«èšé²ããããã«ããŠããŸãã èµ·ç¹ã Slack ã SIR ããåãããã±ãŒã¹ãäœæããããšãã£ã³ãã«ã«åå ±ãæçš¿ãããæå®ããå人ãã°ã«ãŒããžã¡ã³ã·ã§ã³ãéãããŸãã 以åŸã®æŽæ°ãã³ã¡ã³ãã®éç¥ã¯ãã¹ãŠåå ±ãžã®ã¹ã¬ããè¿ä¿¡ãšããŠéçŽããŠããŸãã 察å¿äžã¯ã¹ã¬ããå
ã®çºèšãç»åã SIR ã±ãŒã¹ã«èªåã§èšé²ãããSIR åŽã®ã³ã¡ã³ããã¹ã¬ããã«å±ããããã¹ã¬ããããã®ãŸãŸäœæ¥èšé²ã«ãªããSlack ãã SIR ãžè»¢èšããæéãšèšé²æŒãããªããªããŸãã è€æ°ã®ã±ãŒã¹ãåããŠãããšã㯠/sir list ã§ãªãŒãã³äžã®ã±ãŒã¹ãäžèЧã§ããäžèЧã®åã±ãŒã¹ã«å¯ŸããŠå
容ã®ç·šéãã¹ããŒã¿ã¹å€æŽãè¡ããŸãã ã±ãŒã¹ã¯å¯Ÿå¿å®äºãŸã§ Open ã®ãŸãŸæ®ããã¯ããŒãºæã«ãã¹ã¬ãããžéç¥ãããŸãã ã¢ãŒããã¯ãã£ãšèšèšäžã®æ³šæç¹ ãã®é£æºã¯ API GatewayãLambdaïŒ4 颿°ïŒãEventBridge ã«ã¹ã¿ã ãã¹ãDynamoDB ã«ãSlack ã®èªèšŒæ
å ±ãªã©ã³ãŒãã«å«ããããªãèšå®ãä¿ç®¡ãã Secrets Manager ãå ãããµãŒããŒã¬ã¹æ§æã§ãTerraform ã§ç®¡çããŠããŸãã äž»èŠãªæµãã¯æ¬¡ã®å³ã®ãšããã§ãã SIR ã®ã€ãã³ãéç¥æ©èœã¯ã¡ãŒã«ã®ã¿ã§ãã±ãŒã¹ã®å€åãã€ãã³ããšããŠåãåãææ®µããããŸããã ãã®ãã SIR ãã Slack ãžã®æ¹åã¯ãpoller ã SIR ã® API ã宿çã«åŒã³ãDynamoDB ã«ä¿åããååã®ã¹ãããã·ã§ãããšæ¯èŒããŠå·®åãæ€ç¥ããããŒãªã³ã°æ§æã«ãªããŸãã ããŒãªã³ã°ééã¯ãæªã¯ããŒãºã®ã±ãŒã¹ãããé㯠1 åããªããã° 5 åã«ãªããããpoller ãèªèº«ãããªã¬ãŒãã EventBridge ã«ãŒã«ãå®è¡ã®ãã³ã«æžãæããŠèª¿æŽããŠããŸãã 察å¿äžã®å³ææ§ãšå¹³åžžæã® API åŒã³åºãåæžãäž¡ç«ããããã§ãããããã§ãéç¥ã«ã¯æå€§ 1ã5 åã®é
å»¶ãæ®ããŸãã éæ¹åã® Slack ãã SIR ãžã®çµè·¯ã§ã¯ãã³ãã³ãããã¿ã³æäœãžã®å¿çã 3 ç§ä»¥å
ã«è¿ããšãã Slack ã®å¶çŽãååšãããããå
¥å£ã§ã¯å³åº§ã«å¿çã ããè¿ããå®åŠçã¯åŸæ®µã® Lambda ãžéåæã§å§è²ããæ§æãšãªã£ãŠããŸãã ãã ããã¢ãŒãã«ã®å
¥åãšã©ãŒã®ããã«å¿çã®å
容ãã®ãã®ãè¿ãå Žé¢ã¯éåæã«ã§ããªããããAPI Gateway ã®ã«ãŒãã¯åæã»éåæã® 2 æ¬ã«åããŠããŸãã ãŸããã¢ãŒãã«ãéãããã® trigger_id ã 3 ç§ã§å€±å¹ãããããEventBridge ã§ 5 åããšã« Lambda ã空起åããŠã³ãŒã«ãã¹ã¿ãŒããé¿ããŠããŸãã ãªãããªã¯ãšã¹ãã®çæ£æ§ã¯å
¥å£ã§ã® Slack 眲åã®æ€èšŒã§ç¢ºèªããŠããŸãã åæ¹åã«åæããããšãSlack ããã®å€æŽã poller ã SIR åŽã®å€åãšããŠæ€ç¥ããSlack ãžéç¥ãè¿ãã«ãŒããèµ·ããåŸãŸãã ããã¯ãSlack èµ·ç¹ã®å€æŽæã« DynamoDB ãžæžã蟌ãã±ãŒã¹åäœã®ãã©ã°ã poller ã確èªããŠéç¥ãã¹ãããããä»çµã¿ãšãSIR ãžæžã蟌ãã³ã¡ã³ãã«ã¿ã°ãä»ããŠåæå¯Ÿè±¡ããé€å€ããä»çµã¿ã§é²ãã§ããŸãã å°å
¥åŸã®å¹æ å°å
¥åŸã¯ SIR ã®èªåããªã¢ãŒãžãæ©èœããå€ãæã§ã¯éæ€ç¥ã® 70% ãèªåã¢ãŒã«ã€ããããŠããŸããã ãã®å€§åã¯ãèæ¯ã§æãã GitHub Actions èµ·å ã®æ€ç¥ã§ãã å°å
¥ã®ãã£ããã«ãªã£ãã¢ã©ãŒããã人æãä»ããã«åŠçã§ããããã«ãªããŸããã 人ã確èªããã®ã¯ãç·æ¥åºŠãé«ããšå€å®ãããŠã±ãŒã¹åãããã¢ã©ãŒãã ãã«ãªãããã®å¯Ÿå¿ã¯ Slack ã®ã¹ã¬ããã®äžã§å®çµãããããå¯Ÿå¿æŒããèµ·ããã«ãããªããŸããã æ®ã£ãŠãã課é¡ãšä»åŸã®å¯Ÿå¿ çŸæç¹ã§èŠããŠãã課é¡ã¯ 2 ç¹ãããŸãã SIR ã®èªåããªã¢ãŒãžã®å¯Ÿè±¡å€ãšãªã Finding ã¿ã€ããããããšã§ãã察象å€ã®æ€ç¥ã¯ SIR ãçµç±ããªãããããããŸã§ã©ãã人ã確èªããå¿
èŠããããŸãã èªåã¢ãŒã«ã€ãããå±¥æŽã SIR åŽã«æ®ããªãããšã§ããäœããã€èªåã¢ãŒã«ã€ããããã®ãã確èªããã«ã¯ãCloudTrail ã®ãã°ã調ã¹ããããªãã®ãçŸç¶ã§ãã ä»åŸã¯ããã®èªåã¢ãŒã«ã€ãå±¥æŽãå¯èŠåããä»çµã¿ã¥ããã«åãçµãäºå®ã§ãã SIR ã鿀ç¥ãšå€å®ãããã®ã§ã瀟å
ã®åºæºã§ã¯èª¿æ»ãå¿
èŠã«ãªãã±ãŒã¹ãèãããããããSIR ã®å€å®ãåŸãã確èªã§ããç¶æ
ã«ããŠãããããšèããŠããŸãã ãŸãšã GuardDuty ã®ã¢ã©ãŒããå
šä»¶ç®èŠããéçšã¯ãä»¶æ°ãå¢ãããšç¶æãé£ãããªããŸããããã§åœç€Ÿã§ã¯ã鿀ç¥ã®ä»åãã SIR ã«ä»»ããŠäººã倿ãã察象ãçµããæ®ã£ãã±ãŒã¹ã®æäœãšéç¥ã Slack ã«éçŽããããšã§ãæ¬åœã«å¯Ÿå¿ãå¿
èŠãªã¢ã©ãŒãã«éäžã§ããäœå¶ã«ããŸããã ãšã³ã¿ãŒãã©ã€ãºãµããŒãå¥çŽãããã° SIR ã¯è¿œå è²»çšãªãã§æå¹åã§ããã®ã§ããŸãã¯èªåããªã¢ãŒãžãã©ã®çšåºŠã®éæ€ç¥ãä»åãããããã確ãããŠã¿ãŠãã ããããã®ããã§ãããžã¡ã³ãã³ã³ãœãŒã«äžå¿ã®å°ç·ã«äžäŸ¿ãæããããå
¬åŒãµã³ãã«ãåå°ã« Slack 飿ºãæ€èšããããšãããããããŸãã ãªããã¢ã©ãŒãåæãã®ãã®ã«ã€ããŠããSOC AI Agent ã«ããèªååã§ãåæã®é«éåã»å±äººåã®è§£æ¶ã»æ
åœè
ã®è² è·è»œæžãé²ããŠããŸãã詳现ã¯ã ã¢ã©ãŒãç²åŒããã®è±åŽãž â SOCæ¥åã«ãããAIãšãŒãžã§ã³ã掻çšã®å®è·µ ããã芧ãã ããã æ¬èšäºããåæ§ã®èª²é¡ãæ±ããŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã åèè³æ AWS Security Incident Response ããã¥ã¡ã³ã sample-aws-security-incident-response-integrations (aws-samples)
ãã®èšäºã§ãããããš AivisSpeechïŒç¡æã®ããŒã«ã«é³å£°åæïŒïŒ HyperFrames ïŒ Claude Code ã®3ã€ã§ããã¬ãŒã·ã§ã³ã»åå¹ã»é³å£°ä»ãã®è§£èª¬åç»ãäœããŸããåç»ç·šéãœããã¯äœ¿ããŸããã 人éãããããšã¯ ããã©ã«ãã1ã€äœãããæç€ºã2ã€åºãããClaudeã®è³ªåã«çããã ã ããåŸã¯åç»ã®å®æãŸã§åŸ
ã€ã ãã§åç»ãã§ããŸããã ãã ãåæãšã㊠Node.js ãš FFmpeg ãå¿
èŠã§ããå
¥ã£ãŠããã㯠Claude ãæåã«ç¹æ€ããŠãããã®ã§ãè¶³ããªããã°ãã®å Žã§è¿œå ããŠè²°ããŸãã é³å£°ã¢ãã«ã«ã¯ ACMLïŒAivis Common Model LicenseïŒ ãé©çšãããŸãã å¶å©å©çšãçŠæ¢ããã ACML-NC 1.0 ã®ã¢ãã«ããã ã®ã§ã䜿ãåã«ã©ã¡ããé©çšããããã æ¡æ ã§ç¢ºèªããŠãã ããã ã§ãããã®ïŒ3å26ç§ã®è§£èª¬åç» ãçæAIã®åºç€ãããå士圹ãšçåŸåœ¹ã®äŒè©±ã§èª¬æããåç»ã§ããäžå€®ã®SVGå³è§£ãããã®ãšã話ããŠããã»ãªãã«åãããŠåããŸãã https://www.youtube.com/watch?v=2lvo5-Ze4EU äžèº«ã®æ°åã¯ãããªæãã§ãã é
ç® æ°å å°º 3å26ç§ïŒ7ãããã¯ïŒ ç·ãã¬ãŒã æ° 5,400æ MP4æžãåºãæé 1å55ç§ çæãã宿ãŸã§ çŽ2æé åã¯ã€ã©ã¹ããæããŠããªãããé³å£°ãé²ã£ãŠããªãããåç»ç·šéãœãããéããŠããŸãããå°æ¬ãæžããŠããŸããã :::message æ¬æ¥ã¯ãã§ããåç»ã®å
容ãå°æ¬ã人ã®ç®ã§ç¢ºèªããŠããå
¬éãã¹ãã§ãããã ä»åã¯ãAIã«ä»»ãããšãããªåç»ãã§ããããç¥ã£ãŠãããããã AIãäœã£ãåç»ããããŠç¡ä¿®æ£ã®ãŸãŸ èŒããŠããŸãã å®éãåå¹ã§ãçæAIããšæžãã¹ããšããããçæãšãŒã¢ã€ãã«ãªã£ãŠãããã¹ãæ®ã£ãŠããŸããæåŸã¯äººã®ç®ã§ã®ç¢ºèªãæ¬ ãããªãããšããåç»ãèŠãŠããããã°äŒããã¯ãã§ãã ::: 圹å²åæ
ïŒHyperFramesã»AivisSpeechã»Claude Code ç»å Žäººç©ã3ã€ããã®ã§ãå
ã«æŽçããŸãã ããŒã« åœ¹å² AivisSpeech æ¥æ¬èªã®é³å£°åæãããã¹ããæž¡ããšåã£ãŠããã HyperFrames HTMLããåç»ïŒMP4ïŒãæžãåºããã¬ãŒã ã¯ãŒã¯ãHeyGen補 Claude Code äžã®2ã€ãå®éã«çµã¿ç«ãŠãæ
åœãå°æ¬ãHTMLãã³ãŒããæžã ã€ãŸããHyperFramesã§åç»ãçµã人ããClaude Code ã§ããåã¯Claudeã«æ¥æ¬èªã§äœãããåç»ã«ã€ããŠæç€ºããŠãClaudeããã®è³ªåã«çããŠããã ãã§ãã äœæ¥ã®å
šäœåïŒ7ã¹ããã 现ãã話ã®åã«ãå
šäœã®æµãã§ããããããå
ã¯ãã®é çªã§é²ã¿ãŸãã # ããããš ã©ãã§ 1 AivisSpeech ãããŠã³ããŒãããŠèµ·åãã ã¢ã㪠2 AivisHub ããé³å£°ã¢ãã«ã2ã€ä»¥äžè¿œå ãã ã¢ã㪠3 ãã©ã«ãã1ã€äœã£ãŠ Claude Code ã§éã ã¿ãŒããã« 4 æç€ºã2ã€éã Claude Code 5 Claude ã®è³ªåã«çãã Claude Code 6 ãã¬ãã¥ãŒã§ç¢ºèªãã ãã©ãŠã¶ 7 MP4 ã«æžãåºã Claude Code æãåããã®ã¯1ã4ãŸã§ã§ã5ããå
ã¯ã»ãšãã©åŸ
ã£ãŠããã ãã§ãã æé 1ïŒAivisSpeechãããŠã³ããŒãããŠèµ·åãã å
¬åŒãµã€ãããããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸããç¡æã§ãã https://aivis-project.com/ èµ·åãããšãã®ç»é¢ã«ãªããŸããå·Šã«éžæäžã®è©±è
ãå³ã«è©±éãé³é«ã®ã¹ã©ã€ããŒããããŸãã èµ·åçŽåŸããã®æç¹ã§ããã¹ããæã£ãŠåçãã¿ã³ãæŒãã°ãããåã£ãŠãããŸã ããã§äžåºŠãé©åœãªããã¹ããå
¥ããŠåçããŠã¿ãŠãã ããã声ãåºãã°æºåOKã§ãã :::message ãã®ã¢ããªã¯èµ·åããŠããã ãã§ãã ããšããã®ã倧äºãªãã€ã³ãã§ãã AivisSpeechã¯è£åŽã§é³å£°åæã®ãµãŒããŒïŒ 127.0.0.1:10101 ïŒãç«ãŠãŠããŠãClaudeãæžããã¹ã¯ãªããã¯ããã«è©±ããããŠé³å£°ãäœããŸãã人éããã®ã¢ããªãæäœããå Žé¢ã¯ãå®ã¯äžåºŠããããŸããã ::: æé 2ïŒAivisHubããé³å£°ã¢ãã«ã远å ãã ããã©ã«ãã®å£°ã ãã§ãããã®ã§ãããä»åã¯ãå士ããšãçåŸãã®2人ãäŒè©±ããã®ã§ã 声ã2ã€ä»¥äžå¿
èŠ ã§ãã声㯠AivisHub ãšãããµã€ããã远å ããŸãã 远å ã®ãããã¯2éããããŸããã¢ããªå
ããæ¢ãæ¹æ³ãšããã¡ã€ã«ãããŠã³ããŒãããŠå
¥ããæ¹æ³ã§ããã¡ãã¥ãŒããŒã®ãé³å£°åæã¢ãã«ãããäž¡æ¹ã«è¡ããŸãã ãé³å£°åæã¢ãã«ã®ã€ã³ã¹ããŒã«ã»ç®¡çããšãAivisHubã§é³å£°åæã¢ãã«ãæ¢ããã®2ã€ãå
¥å£ã§ã AivisHubã§æ¢ããŠéžã¶ ãAivisHubã§é³å£°åæã¢ãã«ãæ¢ãããéžã¶ãšãã¢ãã«äžèЧãéããŸããããŠã³ããŒãæ°é ã«äžŠãã§ããŠããã£ã©ã¯ã¿ãŒã®çµµãšãè¥ã女æ§ã®å£°ããäžå¹Žç·æ§ã®å£°ããšãã£ãã¿ã°ãããã«ã¹ã¿ã€ã«æ°ãèŠããŸãã ããŠã³ããŒãæ°ã®å€ãé ãã6ã¹ã¿ã€ã«ãã7ã¹ã¿ã€ã«ããšãã衚èšãããã®å£°ã§äœ¿ããåãæ¹ã®çš®é¡ã§ã æ°ã«ãªã£ãã¢ãã«ãã¯ãªãã¯ãããšè©³çްããŒãžã«è¡ããŸããä»åå士圹ã«äœ¿ã£ããé¿äºç° èãã¯ãããªããŒãžã§ãã ãã€ã¹ãµã³ãã«ãèŽããŸããå³åŽã®ã詳现æ
å ±ãã«ã©ã€ã»ã³ã¹ãšãã¡ã€ã«ãµã€ãºïŒ251.14MBïŒãæžãããŠããŸã ããã§èŠãã¹ãã¯3ã€ã§ãã ã¹ã¿ã€ã« ⊠ããŒãã« / Calm / Far / Heavy / Mid / Shout / Surprise ã®ããã«ãåã声ã§è€æ°ã®åãæ¹ã䜿ããŸããä»åã¯èœã¡çããŠæå®ããŠã»ããã£ãã®ã§ Calm ãéžã³ãŸããã ãã€ã¹ãµã³ã㫠⊠å®éã®å£°ãèŽããŸãã声ã®å°è±¡ã¯èª¬ææã ãã§ã¯ããããªãã®ã§ãèŽããŠé ããšãã©ãã䜿ããã®ã€ã¡ãŒãžãæ¹§ããŸãã ã©ã€ã»ã³ã¹ ⊠ACML 1.0 ãšæžãããŠããŸããããã¯é£ã°ããªãã§ãã ããã ACML-NC 1.0 ã®ã¢ãã«ã¯å¶å©ç®çã®å©çšãçŠæ¢ ãããŠããã®ã§ãæ¥åã§äœ¿ããªãå¿
ãèŠãå¿
èŠããããŸãïŒè©³ããã¯åŸè¿°ïŒã AIVMXãã¡ã€ã«ãããŠã³ããŒãããŠå
¥ãã 詳现ããŒãžã®ãAIVMX ãããŠã³ããŒãããæŒããš .aivmx ãšãããã¡ã€ã«ãèœã¡ãŠããŸããããã AivisSpeech ã«èªã¿èŸŒãŸããæ¹æ³ã§ãã Aivis Speechãéãããé³å£°åæã¢ãã«ãâãé³å£°åæã¢ãã«ã®ã€ã³ã¹ããŒã«ã»ç®¡çãâ å³äžã®ãã€ã³ã¹ããŒã« / æŽæ°ããéããŸãã ããã¡ã€ã«ããã€ã³ã¹ããŒã«ãã§ããŠã³ããŒããã.aivmxãéžã¶ã ããURLçŽæå®ãã§ããŸã å
¥ãçµãã£ããã管çç»é¢ã§ç¢ºèªããŸãã 5ã¢ãã«å
¥ã£ãç¶æ
ãããŸããã¯6ã¹ã¿ã€ã«ã§ãã¯ã¬ãžãã衚èšã®æå®ãŸã§æžãããŠããŸã 2ã€ä»¥äžå
¥ã£ãŠããã°äŒè©±åœ¢åŒã®åç»ãäœããŸãã æé 3ïŒãã©ã«ãã1ã€äœã£ãŠClaude Codeã§éã ããããã¿ãŒããã«ã§ãã1è¡ã ãã§ãã mkdir hyperframes åç»å¶äœçšã®ãã©ã«ããçšæããŸãããã©ã«ãåã¯äœã§ãããã§ãã 空ã®ãã©ã«ãã§å§ããŠãåŸã¯Claudeããã®äžã«å¿
èŠãªãã¡ã€ã«ãå
šéšäœã£ãŠãããŸãã åŸã¯äœã£ããã©ã«ããClaudeã®ã¢ããªã®Claude Codeã§éãã ãã æé 4ïŒæç€ºã¯2ã€ã ã å®éã«æã£ãæç« ããã®ãŸãŸèŒããŸããã³ããããŠäœ¿ããŸãã Hyperframesã§åç»ãäœãçºã®ãããžã§ã¯ãã®ã»ããã¢ãããè¡ãªã£ãŠãå
¬åŒã®ã¹ãã«ããããããããã»ããã¢ãããè¡ãªã£ãŠ ãããéãã ãããå
¬åŒã®ã¹ãã«ãããšä»ããã®ããã€ã³ãã§ã HyperFramesã«ã¯å
¬åŒã®ã¹ãã«ïŒClaudeãžã®åæ±èª¬ææžã®ãããªãã®ïŒãçšæãããŠããŠããããå
¥ããŠãããšClaudeãHyperFramesç¹æã®ã«ãŒã«ãèžã¿å€ããªããªããŸããéã«ãããããªããšClaudeã¯ææ¢ãã«ãªããŸãã Aivis Speechã䜿ã£ãŠçåŸåœ¹ãšå士圹ã§äŒè©±ããªããçæAIã®åºç€ç¥èã®èª¬æåç»ãäœæããŠããã®éã«SVGã®ã¢ãã¡ãŒã·ã§ã³ãæå€§é䜿ã£ãŠèŠèŠçã«ããããããã工倫ãããŠã ãã®äžæã«å
¥ããæå®ã¯4ã€ã ãã§ãã æå® æžããèšè 声ãã©ãããã ãAivis Speechã䜿ã£ãŠã 誰ãåãã ãçåŸåœ¹ãšå士圹ã§äŒè©±ããªããã äœã®åç»ã ãçæAIã®åºç€ç¥èã®èª¬æåç»ã èŠãæ¹ ãSVGã®ã¢ãã¡ãŒã·ã§ã³ãæå€§é䜿ã£ãŠã å°ºããã·ãŒã³æ°ããã©ã®å£°ã䜿ãããæå®ããŠããŸããã ããã¯ãã®åŸClaudeãèããŠããŸãã æé 5ïŒClaudeã®3ã€ã®è³ªåã«çãã 2ã€ç®ã®æç€ºãéããšãClaudeã¯ãããªãäœãå§ããŸããããŸãç°å¢ã調ã¹ãŠã䜿ãã声ãäžèЧã«ããŠããããã質åããŠããŸããã 質å1ïŒå°ºãšã«ããŒç¯å² åç»ã®å°ºãšã«ããŒããç¯å²ã¯ã©ããããã«ããŸããïŒïŒããã§å°æ¬éã»ã·ãŒã³æ°ã»SVGå³è§£ã®ç¹æ°ãå
šéšæ±ºãŸããŸãïŒ éžæè¢ã¯ãçŽ90ç§ / 3ãããã¯ããçŽ2å / 4ãããã¯ããçŽ3å / 6ãããã¯ïŒæšå¥šïŒããçŽ5å / 9ãããã¯ãã æšå¥šã®3åãéžã³ãŸããã 質å2ïŒå£°ã®é
圹 声ã®é
圹ã¯ã©ã®çµã¿åããã«ããŸããïŒïŒäžã®ãµã³ãã«MP3ãèŽããŠããéžãã§ãã ããïŒ ãããè¯ãã£ããšããã§ã Claudeãå
ã«ãµã³ãã«é³å£°ãäœã£ãŠèŽãããŠãããŸããã åã¢ãã«ã®èª¬ææã¯APIããåããªãã£ãããã§ã代ããã«ãåé³å£°ãèªåã®ååãåä¹ã£ãŠããå士ïŒçåŸã®ã»ãªããèªããé³å£°ãå®éã«åæããŠããããã§ãã èŽããäžã§ãå士ïŒé¿äºç° è Calm / çåŸïŒãŸã ãµã€ãŒããéžã³ãŸããã 質å3ïŒç»é¢ã®èŠãæ¹ ç»é¢ã®èŠãæ¹ïŒSVGã®äœ¿ãã©ããïŒã¯ã©ãã«ããŸããïŒ ãå·Šå³ã«SVGãã£ã©åžžé§ïŒäžå€®ã«å³è§£ãããã£ã©ãªãã»å
šç»é¢å³è§£ïŒè©±è
ãããžãããã£ã©ã¯å°ããã³ãŒããŒïŒå³è§£ã倧ããããå
šèº«SVGãã£ã©ïŒãã¯ã€ãããŒãæŒåºãã®4æãéžæè¢ã«ã¢ã¹ããŒã¢ãŒãã®ã¬ã€ã¢ãŠãæ¡ãä»ããŠããã®ã§ãã€ã¡ãŒãžããããã£ãã§ãã ãå·Šå³ã«ãã£ã©ïŒäžå€®ã«å³è§£ããéžã³ãŸããã å°æ¬ã®ã¬ãã¥ãŒã¯é£ã°ããŠOK ãã®åŸClaudeã¯å°æ¬ïŒ SCRIPT.md ïŒãæžããŠããããã§äžåºŠã¬ãã¥ãŒãæã¿ãŸãããšèšã£ãŠããŸãã :::message ãŸãåç»ãäœãããã©ããã詊ãããã ããªãã ããã¯èªãŸãã«ãé²ããŠãã§å€§äžå€«ã§ãã å°æ¬ãçŽããããªã£ããåŸãããããã§ãçŽããŸãïŒè©³ããã¯åŸè¿°ïŒãåã1æ¬ç®ã¯æµããŸããã ::: æé 6ïŒãã¬ãã¥ãŒã§ç¢ºèªãã å°æ¬ãã§ããŠãé³å£°ãåæãããŠãHTMLãçµã¿äžãããšããã©ãŠã¶ã§ç¢ºèªã§ããŸãããã©ãŠã¶ãç«ã¡äžãããªãã£ããClaudeã«ãã©ãŠã¶ã®ç«ã¡äžããŠãã¬ãã¥ãŒãããæšäœ¿ããã°OKã§ãïŒ HyperFramesã®ç·šéç»é¢ïŒStudioïŒãéããŸãã å·Šãåã·ãŒã³ã®ãã¡ã€ã«ãäžå€®ããã¬ãã¥ãŒãäžãã¿ã€ã ã©ã€ã³ã00:00 / 03:25 ãšå°ºãåºãŠããŸã ãã®ç»é¢ã§èŠããšããã¯3ã€ã§ãã äžå€®ã®ãã¬ãã¥ãŒ ⊠åçãã¿ã³ã§å®éã«åããŸããé³ãåºãŸãã äžã®ã¿ã€ã ã©ã€ã³ ⊠Topic 1 ã Topic 7 ãæéé ã«äžŠãã§ããŸããã©ã®ã·ãŒã³ãäœç§ããäœç§ãŸã§ããã²ãšç®ã§ããããŸãã å·Šã®äžèЧ ⊠åã·ãŒã³ã compositions/topic-1.html ã®ãããªå¥ãã¡ã€ã«ã«ãªã£ãŠããŸãã1ã€ã®ã·ãŒã³ã ãçŽããŠãä»ã«åœ±é¿ããŸããã çŽããããšãããããã°ãClaudeã«æ¥æ¬èªã§èšãã°çŽããŠãããŸãããã·ãŒã³3ã®å³è§£ãéããããã§ãéããŸãã æé 7ïŒMP4ã«æžãåºã ãã¬ãã¥ãŒã§OKãªãæžãåºããŸããåç»ãæžãåºããŠãšäŒããã ãã§OKã§ãïŒ 3å26ç§ã®åç»ã§ 1å55ç§ ã§çµãããŸããã5,400ãã¬ãŒã ã1æãã€æããŠç¹ããŠããã®ã§ãå°ºã䌞ã³ããšãã®åæéãããããŸãã ããã§ out/seisei-ai-no-kiso.mp4 ãã§ããããã å®æåºŠãäžãããªãïŒå°æ¬ãã§ãã¯ãšãã£ã©ã¯ã¿ãŒã®çšæ 1æ¬ç®ã¯ãäœãããã©ãããã®æ€èšŒãªã®ã§ãæµãã«ä¹ãã ãã§ãããšæããŸãããã®ããã§ãã¡ãããšãããã®ãäœããªã远å ã§ããããšã2ã€ãããŸãã 1. å°æ¬ïŒSCRIPT.mdïŒãã¬ãã¥ãŒãã SCRIPT.md ããã®åç»ã®èã§ããã»ãªãã¯ãã¡ãããå°ºã»åå¹ã»å£ãã¯ã»å³è§£ã®ã¿ã€ãã³ã°ãŸã§ãå
šéšããããéç®ãããŠåç»ãåºæ¥äžãããŸãã å
å®¹ã®æ£ããã¯äººéãã倿ã§ããªãã®ã§ã瀟å€ã«åºãåç»ãªãå¿
ããããèªãã§ãã ãã 2. ãã£ã©ã¯ã¿ãŒãèªåã§çšæãã ä»åã®ãã£ã©ã¯ã¿ãŒã¯ ClaudeãæããSVG ã§ããåãã衚æ
ãå€ãããŸãããèŠãç®ã¯ç°¡çŽ ã§ããå³è§£ã®æ¹ã¯ååèŠããããã®ã«ãªã£ãã®ã§ã䌞ã³ãããããã®ã¯ãã£ã©ã®çµµã®æ¹ã§ããã äœã蟌ããªããPSDãªã©ã§ ããŒãããšã«ã¬ã€ã€ãŒãåã㊠æãã®ããããšæããŸãã ããã®ãã£ã©ã¯ã¿ãŒã®äœãæ¹ã¯ãŸãå¥ã®æ©äŒã§è©Šããã玹ä»ããŸããïŒ é¡ã»äœã»ç®ïŒééïŒã»å£ïŒã / ã / ã / ã / ã / éãïŒãå¥ã¬ã€ã€ãŒã«ãã ããŒãããšã« PNG ã SVG ã§æžãåºã æžãåºãããã¡ã€ã«ã1ã€ã®ãã©ã«ãã§ãŸãšããŠClaudeã«ããã®ãã£ã©ã«å·®ãæ¿ããŠããšäŒãã å£ã®åœ¢ã¯ããããããïŒéããã®6çš®é¡ããã°è¶³ããŸããAivisSpeechã¯é³å£°ãäœããšãã«ãã©ã®æ¯é³ãããã€ãã©ãã ãã®é·ãçºé³ãããããšããããŒã¿ãè¿ããŠãããã®ã§ãããããå£ã®åœ¢ãèªåã§åãæ¿ãããŸããã ãããã¯ãã¯åããŠããã ãã®å£ã§ã¯ãªããå®éã®çºé³ã«åã£ãå£ã«ãªããŸãã çæäºé
ïŒç€Ÿå
ã«ãŒã«ãšã©ã€ã»ã³ã¹ã®ç¢ºèª ããã¯é£ã°ããã«èªãã§ãã ããã åããŒã«ã®å©çšã¯æå±äŒç€Ÿã®ã«ãŒã«ã«æ²¿ã£ãŠ ãã®èšäºã§äœ¿ã£ãããŒã«ã¯ã©ããå€éšãµãŒãã¹ã§ãã æ¥åã§äœ¿ãå Žåã¯ãå¿
ãæå±ããäŒç€Ÿã®ã«ãŒã«ãå©çšå¯åŠã®åºæºã«æ²¿ã£ãŠå©çšããŠãã ããã äœãå
¥åããŠããã®ããææç©ãã©ããŸã§å
¬éããŠããã®ãã¯äŒç€Ÿããšã«éããŸãã AivisSpeechã®é³å£°ã¢ãã«ã¯ã©ã€ã»ã³ã¹ã確èªãã é³å£°ã¢ãã«ã«ã¯ ACMLïŒAivis Common Model LicenseïŒ ãé©çšãããŸããæ¡æã¯GitHubã§å
šæå
¬éãããŠããã®ã§ã 䜿ãåã«å¿
ããããèªãã§ãã ããã https://github.com/Aivis-Project/ACML/tree/master äžçªå€§äºãªã®ã¯ã ACMLã«ã¯2çš®é¡ãã ãšããããšã§ãã ã©ã€ã»ã³ã¹ å¶å©å©çš ACML 1.0 åäººã»æ³äººã»éå¶å©ã»å¶å©ãã¹ãŠå¯ã åçšå©çšOK ACML-NC 1.0 å¶å©ç®çã®å©çšã¯çŠæ¢ã å人ã®ç§çãªåµäœæŽ»åããæè²æ©é¢ã§ã®æè²ã»ç ç©¶ãšãã£ãéå¶å©å©çšã®ã¿ åãAivisHubã«äžŠãã§ããŠãã ã©ã¡ããé©çšããããã¯ã¢ãã«ããšã«éããŸãã äŒç€Ÿã®ããã°ããµãŒãã¹ã§äœ¿ããªãå¶å©å©çšã«åœããå¯èœæ§ãããã®ã§ã -NC ãä»ããŠããªãããæåã«ç¢ºèªããŠãã ããã ã©ã€ã»ã³ã¹å㯠AivisHubã®è©³çްããŒãžã®ã詳现æ
å ±ãæ¬ ãšã AivisSpeechã®ç®¡çç»é¢ ã®äž¡æ¹ã«æžãããŠããŸããä»åå士圹ã«äœ¿ã£ããé¿äºç° èã㯠ACML 1.0 ã§ããã çŠæ¢äºé
ã¯äž¡ã©ã€ã»ã³ã¹å
±éã§ã次ã®7é
ç®ã§ãã 話è
ãä»è
ã®æ¬äººã»åäœè
ã»å
¬åŒé¢ä¿è
ã§ãããšèª€è§£ãããå©çš 話è
ã®ã€ã¡ãŒãžã»å°å³ã»åäœã»ç€ŸäŒçè©äŸ¡ãå·ã€ããå©çš å®åšã®äººç©ã»å£äœã»ååãªã©ãæ¹å€ã»æ»æã»å«ãããã»èª¹è¬äžå·ã»å·®å¥ããæŽ»å èåœã®æ
å ±ãã³ã³ãã³ããæµåžããæŽ»å èåœã»èªå€§è¡šçŸã«ããããŒã±ãã£ã³ã°ãå«ççã«åé¡ã®ããããžãã¹ ç¹å®ã®æ¿æ²»çç«å Žã»å®æã»é°è¬è«ãžã®è³åãå察ãåŒã³ãããæŽ»å å瀟äŒçã»ç¯çœªç®çã§ã®å©çš ã¯ã¬ãžãã衚èšã¯ãACML 1.0 ãš ACML-NC 1.0 ã®ã©ã¡ãã§ããä»»æã ãšæèšãããŠããŸãããã ãã¢ãã«åŽãã衚èšã®ãããã®åžæãæžãããŠããå Žåãããã®ã§éœåºŠç¢ºèªããé¡ãããŸãã :::message alert äžã®ãŸãšãã¯2026幎9ææç¹ã®æ¡æãèªãã ãã®ã§ããæ¡æã¯æŽæ°ãããå¯èœæ§ãããã®ã§ã倿ãããšãã¯å¿
ã ACMLã®åæ ã確èªããŠãã ããã ::: ãŸãšã ãã£ãããšã䞊ã¹çŽããšããããªããŸãã AivisSpeechãå
¥ããŠèµ·åãã AivisHubãã声ã2ã€ä»¥äžè¿œå ãã ãã©ã«ãã1ã€äœã£ãŠãClaude Codeã§éã æç€ºã2ã€éã Claudeã®è³ªåã«çãã ãã¬ãã¥ãŒã§èŠã åç»ãæžãåºã åç»ç·šéãœãããéããŠããŸãããã€ã©ã¹ããæããŠããŸãããå°æ¬ãæžããŠããŸããã ããã§ãé³å£°ã»åå¹ã»å³è§£ãæã£ã3å26ç§ã®åç»ãåºãŠããŸããã äžçªã®çºèŠã¯ã ãåç»ãäœãããæ¥æ¬èªã§çºæ³šã§ããäœæ¥ã«ãªã£ãŠãã ããšã§ããããçåŸåœ¹ãšå士圹ã§äŒè©±ããªããããSVGã¢ãã¡ãŒã·ã§ã³ãæå€§é䜿ã£ãŠãââãã®ãããã®ç²åºŠã§äŒãããŸãã现ããããšã¯åãããèããŠããŸãã äœãããåç»ã®ã€ã¡ãŒãžãé ã«ãããªãããã©ã«ãã1ã€äœããšãããã詊ããŠã¿ãŠãã ããã1æ¬ç®ã¯å°æ¬ã¬ãã¥ãŒãé£ã°ããŠããŸãåºãŠãããã©ãããèŠãã®ãããããã§ãã
ãã®èšäºã§ãããããš MCPãµãŒããŒã¯PythonãTypeScriptã ãã§ãªããSpring AIã䜿ãã°Java(Spring Boot)ã§ãæ§ç¯ã§ãã MCPãµãŒããŒæ©èœã¯ãSpring AIã®å
¬åŒã¹ã¿ãŒã¿ãŒã䜿ãã°ç°¡åã«æ¢åã®Spring Bootã¢ããªã«çµã¿èŸŒãã(ãµãŒããŒèšå®ã¯application.ymlã®ã¿) æ¢åã¢ããªãSpring Securityã®OAuth2 Resource Serverã§èªèšŒããŠããã°ãMCPã®èªå¯ã«å¿
èŠãªã¡ã¿ããŒã¿å
¬é(RFC 9728)ãå«ããŠSpring Securityã®æšæºæ©èœã§å¯Ÿå¿ã§ãã AIãšãŒãžã§ã³ããCMDBã®æ§ææ
å ±ãèªåã§åç
§ã§ããããã«ãªããšãAtlassian MCPãªã©ä»ã®MCPãšãçµã¿åããã£ãŠãè匱æ§å¯Ÿå¿ãEOL察å¿ãšãã£ãæ¥åããšãŒãžã§ã³ããšã®1ã€ã®äŒè©±ã§å®çµãã ã¯ããã« ããã«ã¡ã¯ãKINTOãã¯ãããžãŒãº(以äžãKTC) ãã©ãããã©ãŒã ã°ã«ãŒã Platform EngineeringããŒã ã®å±±ç°ã§ããæ®æ®µã¯ç€Ÿå
åãã®CMDBãå
補éçºããŠããŠãããæè¿ã¯CMDBãšçæAIãçµã¿åãããåãçµã¿ãç¶ããŠããŸãã CMDBãã®ãã®ãSpring AIã«ã€ããŠã¯éå»ã®èšäºã§ç޹ä»ããŠããã®ã§ãããããŠã芧ãã ããïŒ(CMDBã®èšäºã¯å°ãå€ãã§ãããé°å²æ°ã¯äŒããããšæããŸã) https://blog.kinto-technologies.com/posts/2023-12-14-CMDB/ https://blog.kinto-technologies.com/posts/2025-06-11-springAI/ ä»åã¯ãã®ç¶ããšããŠãCMDBæ¬äœ(Spring Boot補)ã«MCPãµãŒããŒæ©èœã远å ããAIãšãŒãžã§ã³ããã瀟å
ã®æ§ææ
å ±ãçŽæ¥æ€çŽ¢ã§ããããã«ããŸããã èæ¯ Claude Codeãªã©ã®AIãšãŒãžã§ã³ãã ãã§æ¥åãé²ããå Žé¢ãããã®1幎ã§äžæ°ã«å¢ããŠããŠãããšæããŸãã瀟å
ã§ãåçš®MCPãµãŒããŒãã¹ãã«ãªã©ã®æŽåãé²ã¿ã調æ»ã»å®è£
ã»ããã¥ã¡ã³ãäœæã®å€ãããšãŒãžã§ã³ãã«ä»»ããããããã«ãªã£ãŠããŸãã äžæ¹ã§ãå°ã£ãŠããã®ããä»åã®äž»åœ¹ã§ããCMDB (Configuration Management Database: æ§æç®¡çããŒã¿ããŒã¹) ã®ããŒã¿ã§ããCMDBã¯ããããã¯ãã»ããŒã ã»GitHubãªããžããªã»è匱æ§ã»SBOMãšãã£ã瀟å
ã®æ§ææ
å ±ãäžå
管çããããŒã¿ããŒã¹ã§ãKTCã§ã¯å
補éçºããŠããŸã(詳ããã¯åé ã®éå»èšäºãã芧ãã ãã)ããã£ããæ§ææ
å ±ãéçŽããŠããã®ã«ããããŸã§ã®åç
§ææ®µã¯Webã¢ããªã ãã§ããããã®ããããšãŒãžã§ã³ãã§äœæ¥ãããŠããŠCMDBã®ããŒã¿ãå¿
èŠã«ãªããã³ã«ã以äžã®äœæ¥ãçºçããŠããŸããã CMDBã®Webã¢ããªãéããŠããŒã¯ãŒãæ€çŽ¢ãã æ€çŽ¢çµæã®ããã¹ããã³ããŒããŠããšãŒãžã§ã³ãã®ããã³ããã«è²Œãä»ãã ãã®éããšãŒãžã§ã³ãã®äœæ¥ã¯æ¢ãŸãã人ãWebã¢ããªãšãšãŒãžã§ã³ãã®éã§ããŒã¿ãåãæž¡ãã ãã®äœæ¥ã«æéãåãããŸãããã£ããæ§ææ
å ±ãäžå
åããã®ã«ãAIãšãŒãžã§ã³ãããã¯åç
§ã§ããªãç¶æ
ã§ããã ãã®æäœæ¥ã§ã®åãæž¡ãããªãããããCMDBãMCPãµãŒããŒåããããšã«ããŸããã CMDBã®MCPãµãŒããŒã§äœãã§ããããã«ãªã£ãã å
ã«ãã§ããããã«ãªã£ãããšã®ç޹ä»ã§ãã ããšãã°ãããã©ã€ãã©ãªã«è匱æ§ãèŠã€ãã£ããšããŸããSBOMã»GitHubãªããžããªã»ãããã¯ãã»ããŒã ã»ãŠãŒã¶ãŒãªã©ã管çããCMDBã®MCPãµãŒããŒãã§ããããšã§ãããããè匱æ§å¯Ÿå¿ãAIãšãŒãžã§ã³ããšã®1ã€ã®äŒè©±ã®äžã§å®çµã§ããããã«ãªããŸãããå
·äœçã«ã¯ãSBOMæ
å ±ããè匱æ§ã®ããããŒãžã§ã³ã®ã©ã€ãã©ãªã䜿ã£ãŠããGitHubãªããžããªãæŽãåºãããªããžããªã«çŽã¥ããããã¯ããšç®¡çããŒã ã»æ
åœè
ãç¹å®ããæ
åœè
åãã®Jiraãã±ããã®èµ·ç¥šãããã«ã¯è匱æ§ãè§£æ¶ããPRã®äœæãŸã§é²ããããŸãã â ãâ¢ãšâ€ãCMDBã®MCPããŒã«ãâ£ã¯Atlassian MCPãâ¥ã¯ãšãŒãžã§ã³ãèªèº«ã®ã³ãŒãã£ã³ã°æ©èœã§ãã ãã€ã³ãã¯ãCMDBã®MCPãµãŒããŒåäœã§å®çµããã®ã§ã¯ãªããä»ã®MCPããšãŒãžã§ã³ãã®æ©èœãšçµã¿åãããããšã§æ¥åãäžæ°é貫ã«ãªãããšã§ããAIãšãŒãžã§ã³ãã¯ãåç
§ã§ããã³ã³ããã¹ããå¢ããã»ã©ã察å¿ã§ããæ¥åã®å¹
ãåºãããŸããCMDBã«ã¯ãšãŒãžã§ã³ããæã£ãŠããªã瀟å
ã®æ§ææ
å ±ãéãŸã£ãŠããŸãããããŸã§äººãéœåºŠè£ã£ãŠãããããã®æ
å ±ãMCPã§æäŸããããšã§ããšãŒãžã§ã³ãã«ä»»ããããç¯å²ãã®ãã®ãåºããããšãã§ããŸããã è匱æ§å¯Ÿå¿ã®ä»ã«ããããšãã°EOL(ãµããŒãæé)察å¿ã«ãåãèŠé ã§äœ¿ããŸããæéåããè¿ãã³ã³ããŒãã³ããšããã䜿ã£ãŠãããããã¯ããCMDBã®MCPããŒã«ã§æŽãåºããæ
åœããŒã ã®ç¹å®ããJiraãã±ããã®èµ·ç¥šãŸã§ãããã®ãŸãŸ1ã€ã®äŒè©±ã§é²ããããŸãã MCPãµãŒããŒã®å®è£
ã«Spring AIãéžãã çç± MCPãµãŒããŒã®æ§ç¯ãšãããšãPythonãTypeScriptã®ã€ã¡ãŒãžã匷ãããšæããŸããå
¬åŒSDKã®å
å®åºŠãFastMCPã®ãããªãã¬ãŒã ã¯ãŒã¯ã®ååšããããå®è£
èšäºããã®2ã€ã«åã£ãŠããå°è±¡ã§ãã ãã ãä»åMCPãµãŒããŒåããã察象ã¯ãSpring Bootã§å®è£
æžã¿ã®æ¢åã¢ããªã§ãããå¥ããã»ã¹ã§PythonãTypeScriptã®MCPãµãŒããŒãç«ãŠãŠAPIãäžç¶ãããæ§æãèããããŸãããSpring AIã䜿ã£ãŠæ¢åã¢ããªã«MCPãµãŒããŒæ©èœãçµã¿èŸŒãã°ã以äžã®è³ç£ããã®ãŸãŸäœ¿ãåããŸãã REST APIã®ããã«å®è£
ããŠããããžãã¹ããžãã¯(serviceå±€) Spring Securityã䜿ã£ãèªèšŒèªå¯ã®ä»çµã¿ ECSãžã®ãããã€ãç£èŠãªã©ã®éçšã®ä»çµã¿ å¯äžã®äžå®ã¯ãEntra IDã䜿ã£ãæ¢åã®èªèšŒèªå¯ããAIãšãŒãžã§ã³ãçžæã§ãåãããã«äœ¿ããã®ããã§ãããMCPã®èªå¯ä»æ§ã¯OAuth 2.1ããŒã¹ã§æ¯èŒçæ°ãããæ€èšŒãããŸã§ã¯æ£çŽææ¢ãã§ããããçµè«ããèšããšSpring Securityã®æšæºæ©èœã§å¯Ÿå¿ã§ããŸãã(詳现ã¯å®è£
ã®ç¯ã§ã話ãããŸã)ã ããSpring Bootã§ã¢ããªã±ãŒã·ã§ã³ãéçºã»éçšããŠããããŒã ã§ããã°ãMCPãµãŒããŒã®æ§ç¯ã«Spring AIãéžã¶ã¡ãªããã¯å€§ãããšæããŸãã æè¡ã¹ã¿ã㯠Java 21 Spring Boot 4.0 Spring AI 2.0 (spring-ai-starter-mcp-server-webmvc) Spring Security (OAuth2 Resource Server) Microsoft Entra ID (èªå¯ãµãŒããŒ) AWS (CloudFront + ALB + ECS ãªã©) ã·ã¹ãã æ§æ æ¢åã®CMDBããã¯ãšã³ã(Spring Boot)ã«ãMCPãšã³ããã€ã³ã /mcp ã远å ããæ§æã§ããMCPãµãŒããŒã®ããã«æ°ãã远å ããã€ã³ãã©ã¯ãããŸããããªããå³ã¯MCPãµãŒããŒã«é¢ä¿ããéšåã«çµã£ãŠãããããã³ããšã³ãã®é
ä¿¡çµè·¯ãªã©ã¯çç¥ããŠããŸãã å®è£
ããããã¯å®è£
å
容ã玹ä»ããŸãããªããèšäºäžã®ã³ãŒãã¯äžéšãçç¥ã»ç·šéããŠããŸãã äŸåé¢ä¿ã®èšå® build.gradleã«Spring AIã®BOMãšMCPãµãŒããŒçšã¹ã¿ãŒã¿ãŒã远å ããŸãã远å ããäŸåé¢ä¿ã¯ããã ãã§ãã ext { set('springAiVersion', "2.0.0") } dependencies { implementation 'org.springframework.ai:spring-ai-starter-mcp-server-webmvc' } dependencyManagement { imports { mavenBom "org.springframework.ai:spring-ai-bom:${springAiVersion}" } } ãµãŒããŒèšå®ã¯application.ymlã®ã¿ MCPãµãŒããŒãšããŠã®èšå®ã¯application.ymlã«æžãã ãã§ãJavaã®èšå®ã¯ã©ã¹ã¯1ã€ãäœã£ãŠããŸãããããããŠãJWTæ€èšŒ(OAuth2 Resource Server)ã®èšå®ãæç²ããŸãã spring: security: oauth2: resourceserver: jwt: issuer-uri: https://login.microsoftonline.com/${TENANT_ID}/v2.0 ai: mcp: server: name: cmdb-mcp version: 0.0.1 instructions: >- CMDB 㯠KINTO Technologies (ç¥: KTC) 瀟å
ã®æ§æç®¡çããŒã¿ããŒã¹ã®ããšã ãããã¯ãã»ããŒã ã»ãªããžããªã»è匱æ§ãªã©ã®ç€Ÿå
æ§ææ
å ±ãæ€çŽ¢ã§ããã protocol: STATELESS type: SYNC stateless: mcp-endpoint: /mcp annotation-scanner: enabled: true èšå®ã®ãã€ã³ãã2ã€ç޹ä»ããŸãã 1ã€ç®ã¯ instructions ã§ããããã«æžããæç« ã¯MCPã®åæåæã«äžåºŠã ããšãŒãžã§ã³ããžæž¡ãããŸãããCMDBãšã¯äœããã®ãããªåæç¥èãããã«çœ®ããŠãããšãåããŒã«ã®descriptionã§åã説æãç¹°ãè¿ããã«æžã¿ãããŒã«å®çŸ©ã®ããŒã¯ã³ãç¯çŽã§ããŸãã 2ã€ç®ã¯ annotation-scanner ã§ãããããæå¹ã«ãããšãåŸè¿°ãã @McpTool ã®ä»ããã¡ãœãããèªåã§ããŒã«ãšããŠç»é²ããããããããŒã«ç»é²çšã®Beanå®çŸ©ãäžèŠã«ãªããŸãã @McpToolã§ããŒã«ã®å®è£
ããŒã«ã¯ @McpTool ãä»ããã¡ãœãããšããŠå®è£
ããŸãããããã¯ãæ€çŽ¢ããŒã«ãäŸã«ãå®è£
ã®å
šäœåã玹ä»ããŸãã @Component public class ProductMcpTools { private final ProductService productService; public ProductMcpTools(ProductService productService) { this.productService = productService; } @McpTool( name = "searchProducts", description = """ ãããã¯ããæ€çŽ¢ããŸããäžèЧã»çµã蟌ã¿ã»è©³çްååŸã¯ãã¹ãŠãã®ããŒã«\ (productId æå®ã§1ä»¶ã®è©³çŽ°ãæªæå®ã§äžèЧ)ã""", annotations = @McpTool.McpAnnotations( readOnlyHint = true, destructiveHint = false, idempotentHint = true, openWorldHint = false)) public ProductSearchMcpResult searchProducts( @McpToolParam(description = "ãããã¯ãIDãæå®ãããš1ä»¶ã®è©³çްãè¿ããäžèŠ§çµæã® productId ãæž¡ã", required = false) Integer productId, @McpToolParam(description = "ãããã¯ãã®æå±éšçœ²(ã°ã«ãŒãID)ã§çµã蟌ã¿", required = false) String groupId, @McpToolParam(description = "true ã§å逿žã¿ãããã¯ããæ€çŽ¢ãå逿žã¿ã¯ãã®æå®æã®ã¿ååŸå¯(æ¢å®: false)", required = false) Boolean deleteFlag) { SearchProductServiceParameter parameter = new SearchProductServiceParameter(); parameter.setProductId(productId); parameter.setGroupId(groupId); parameter.setDeleteFlag(Boolean.TRUE.equals(deleteFlag)); // æ¢åã®REST APIçšserviceããã®ãŸãŸåŒã³åºã SearchProductServiceResult result = productService.searchProduct(parameter); return productId != null ? ProductSearchMcpResult.ofDetail(result) : ProductSearchMcpResult.ofList(result); } } ãã®ã¯ã©ã¹ã®åœ¹å²ã¯Controllerãšåãã§ããåŒæ°ãçµã¿ç«ãŠãŠæ¢åã®serviceãåŒã³ãçµæããšãŒãžã§ã³ãåãã«æŽåœ¢ããã ãã§ãããžãã¹ããžãã¯ã¯çœ®ããŸãããæ€çŽ¢ããžãã¯æ¬äœã¯ãREST APIã®ããã«å®è£
æžã¿ã® ProductService ããã®ãŸãŸåŒãã§ããŸãã ããã ãã§MCPãµãŒããŒã®ããŒã«ãå®è£
ã§ããŠããŸããŸãã ä»åå®è£
ããæ€çŽ¢ããŒã«12åã®ã»ãšãã©ã¯ãæ¢åã®serviceå±€ã倿Žããããšãªãåå©çšã§ããŸãããREST APIã®ããã«å®è£
ããŠããserviceå±€ããMCPããŒã«ãããã®ãŸãŸåå©çšã§ããã®ããæ¢åã¢ããªã«çµã¿èŸŒãæ§æã®ãã¡ã°ãã®ã¡ãªããã ãšæããŸãã ããŒã« æŠèŠ searchProducts ãããã¯ãã®äžèЧã»è©³çްæ€çŽ¢ searchGroups éšçœ²(ã°ã«ãŒã)ã®äžèЧååŸ searchTeams ããŒã ãšã¡ã³ããŒã®æ€çŽ¢ searchUsers ãŠãŒã¶ãŒã®æ€çŽ¢ searchDomains ãã¡ã€ã³ã®æ€çŽ¢ searchGithubRepositories GitHubãªããžããªã®æ€çŽ¢ searchVulnerabilitySummaries è匱æ§ãµããªã®æšªææ€çŽ¢ searchVulnerabilityDetails è匱æ§è©³çŽ°ã®æ€çŽ¢ searchSbom SBOM(ãœãããŠã§ã¢éšå衚)ã®æ€çŽ¢ searchEol EOL(ãµããŒãæé)ã®æ€çŽ¢ searchArn AWSãªãœãŒã¹(ARN)ã®æ€çŽ¢ searchSchedules éçºç°å¢ã®ã³ã¹ãåæžãç®çãšãããAWSãªãœãŒã¹èµ·å忢ã¹ã±ãžã¥ãŒã«ã®æ€çŽ¢ å®è£
ã«ããã£ãŠã3ç¹è£è¶³ããŸãã 1ã€ç®ã¯ããŒã«ãã³ã(annotations)ã§ããMCPã®ä»æ§ã§ã¯ããã³ããæªæå®ã®ããŒã«ã¯ readOnlyHint=false ã» destructiveHint=true ãã€ãŸããç Žå£çãªæäœããããããããªãããŒã«ããšããããã©ã«ãã§æ±ãããŸãããšãŒãžã§ã³ããæ€çŽ¢ããŒã«ã®å©çšããããããªããããèªã¿åãå°çšã§ããããšããã³ãã§æç€ºããŠããŸãã 2ã€ç®ã¯åŒæ°ã®åœ¢ã§ããåŒæ°ã¯1ã€ã®ãªããžã§ã¯ãã«ãŸãšããããã©ããã«äžŠã¹ãŠããŸããSpring AIã¯ã¡ãœããã®åŒæ°ãããããinputSchemaã®ããããã£ã«å€æãããããREST APIã®ããã«ãã©ã¡ãŒã¿ã¯ã©ã¹ãžãŸãšãããšããšãŒãžã§ã³ãããèŠããJSONã¹ããŒãã«äœèšãªéå±€ãã§ããŠããŸããŸããæ¢åã®ãã©ã¡ãŒã¿ã¯ã©ã¹ã®æµåãšã¯æå³çã«å€ããŠããéšåã§ãã 3ã€ç®ã¯ã¬ã¹ãã³ã¹ã®ä»¶æ°ã§ããCMDBã¯ãSBOMã®ããã«ä»¶æ°ãèšå€§ãªããŒã¿ãæã£ãŠããŸã(å·çæç¹ã§50äžä»¶è¶
)ãããããããŒã¿ããã®ãŸãŸè¿ããšããšãŒãžã§ã³ãã®ã³ã³ããã¹ããå§è¿«ããMCPã®çµæãµã€ãºäžéã«ãåŒã£ããããŸããä»¶æ°ã®å€ãããŒã¿ãæ±ãããŒã«ã§ã¯çµãèŸŒã¿æ¡ä»¶ãå¿
é ã«ãã1ããŒãž50ä»¶ã®ããŒãžã³ã°ãšç·ä»¶æ°(totalCount)ã®è¿åŽãããããŠå®è£
ããŠããŸããããŒãžãåããŠããããŒã¿ãè¶³ããªããã°ãšãŒãžã§ã³ããpageãå€ããŠèªåã§ããŒã«ãåŒã³çŽããŠããããããè€æ°åã®åŒã³åºãã§å¿
èŠãªããŒã¿ãéããããŸãã èªèšŒèªå¯ äžçªäžå®ã ã£ãèªèšŒèªå¯ã§ãããçµè«ãšããŠã¯èªåã®èªå¯ãµãŒããŒãå®è£
ããå¿
èŠã¯ãªããæ¢åã®Entra IDããã®ãŸãŸèªå¯ãµãŒããŒãšããŠäœ¿ããŸãããMCPã®èªå¯ä»æ§ã®ç»å Žäººç©ãšæµãã¯ä»¥äžã®ãšããã§ãã sequenceDiagram participant Agent as AIãšãŒãžã§ã³ã<br/>(Claude Codeç) participant MCP as CMDBããã¯ãšã³ã<br/>(MCPãµãŒããŒ) participant Entra as Microsoft Entra ID Agent->>MCP: â POST /mcp(ããŒã¯ã³ãªã) MCP-->>Agent: â¡ 401 + WWW-Authenticate<br/>(ã¡ã¿ããŒã¿ã®å Žæãæ¡å
) Agent->>MCP: ⢠GET /.well-known/oauth-protected-resource MCP-->>Agent: ⣠ã¡ã¿ããŒã¿å¿ç<br/>(èªå¯ãµãŒã㌠= Entra ID ã®å Žæ) Agent->>Entra: †èªå¯ã³ãŒããããŒ(PKCE)<br/>ãã©ãŠã¶ã§SSOãã°ã€ã³ Entra-->>Agent: ⥠ã¢ã¯ã»ã¹ããŒã¯ã³(JWT) Agent->>MCP: ⊠BearerããŒã¯ã³ä»ãã§ããŒã«å®è¡ MCP->>MCP: â§ JWTæ€èšŒ(眲åã»issuerã»æå¹æé) MCP-->>Agent: âš æ€çŽ¢çµæ éèŠãªã®ãâ¢â£ã®Protected Resource Metadata (RFC 9728)ã§ããMCPãµãŒããŒã¯ /.well-known/oauth-protected-resource ã§ã¡ã¿ããŒã¿ãå
¬éããããã®ãµãŒããŒã®èªå¯ãµãŒããŒã¯ã©ãããããšãŒãžã§ã³ãã«æããŸãããšãŒãžã§ã³ãã¯ãããèªãã§ãèªåçã«Entra IDã®ãã°ã€ã³ç»é¢(ãã©ãŠã¶ã®SSO)ãžãŠãŒã¶ãŒãèªå°ããŠãããŸãã SpringåŽã®å®è£
ã¯ãã»ãŒæšæºæ©èœã®çµã¿åããã§æžã¿ãŸããã JWTæ€èšŒ: Spring Securityã®OAuth2 Resource Serverãapplication.ymlã® issuer-uri ã®èšå®ã ãã§ãEntra IDãçºè¡ããJWTã®æ€èšŒãåããŸã ã¡ã¿ããŒã¿ã®å
¬é: Spring Securityãæšæºã§RFC 9728ããµããŒãããŠãã( OAuth2ProtectedResourceMetadataFilter )ãèªå¯ãµãŒããŒã®å Žæãªã©ãJavaã®èšå®ã³ãŒãæ°è¡ã®ã«ã¹ã¿ãã€ãºã ãã§å
¬éã§ããŸã 1ç¹ã ãã€ã³ãã©åŽã®å¯Ÿå¿ãå¿
èŠã§ãããRFC 9728ã®ã¡ã¿ããŒã¿ã¯ãã¡ã€ã³ã«ãŒãã® /.well-known/ é
äžã§å
¬éããå¿
èŠããããŸãããããã¯ãšã³ã㯠/api ã®ã³ã³ããã¹ããã¹ã§åããŠããŸããããã§ãCloudFrontã§ /.well-known/oauth-protected-resource* ãžã®ãªã¯ãšã¹ããALB(ãªãªãžã³ãã¹ /api )ã«ã«ãŒãã£ã³ã°ããŠè§£æ±ºããŸããã ã¡ãªã¿ã«ãSpring AIã®ããã¥ã¡ã³ãã«ã¯ãMCPãµãŒããŒã®èªèšŒèªå¯ãã³ãã¥ããã£ã¢ãžã¥ãŒã«ã® mcp-security ã§å®çŸããæ¹æ³ã玹ä»ãããŠããŸãã ãªããAIãšãŒãžã§ã³ãã«ãã£ãŠOAuthåšãã®å®è£
ã«ã¯åŸ®åŠã«å·®ãããããããšãŒãžã§ã³ãã§ã¯åé¡ãªãæ¥ç¶ã§ããŠããå¥ã®ãšãŒãžã§ã³ãã§ã¯ãšã©ãŒã«ãªãããšããããŸãããMCPãµãŒããŒã瀟å
ã«å±éããå Žåã¯ãå©çšãæ³å®ããããšãŒãžã§ã³ãã§æ©ãã«æ¥ç¶ç¢ºèªãããŠãããšå®å¿ã§ãã AOPã«ããå©çšç¶æ³ã㰠瀟å
å±éåŸã®å©çšç¶æ³ãææ¡ãããããããŒã«åŒã³åºãã®ãã°ãä»èŸŒã¿ãŸããã @McpTool ã¢ãããŒã·ã§ã³ã察象ã«ããAOPã®ã¢ã¹ãã¯ãã1ã€æžãã ãã§ãããŒã«ã¯ã©ã¹ãä»åŸå¢ããŠãèªåã§ãã°å¯Ÿè±¡ã«ãªããŸãããã°ã«ã¯ããŒã«åã»ãŠãŒã¶ãŒID(JWTã®ã¯ã¬ãŒã ããååŸ)ã»æ€çŽ¢æ¡ä»¶ãæ§é åãã£ãŒã«ããšããŠåºåããããã·ã¥ããŒãã§ã誰ãã©ã®ããŒã«ãã©ããªæ¡ä»¶ã§äœ¿ã£ãŠãããããéèšã§ããããã«ããŠããŸãã å®è¡çµæ æåŸã«ã瀟å
æ
å ±ã®ãããèŠãã§ããéšåãå°ãªããªã£ãŠããŸããŸãããå®éã®äœ¿çšæãã玹ä»ããŸãã æ¥ç¶ (Claude Codeã®å Žå) 以äžã®ã³ãã³ãã§Claude Codeã«CMDBã®MCPãç»é²ããŸãã claude mcp add --transport http cmdb-mcp https://xxxxx/api/mcp \ --client-id xxx \ --callback-port 29352 ãµãŒããŒäžèЧã§CMDBã®MCPãéžæããèªèšŒãéå§ããŸãã ãã©ãŠã¶ã§èªèšŒãããŸãã ããŒã«ãåŒã³åºããŠã¿ã 詊ãã«Spring Bootã§æ§ç¯ããŠãããããã¯ãäžèЧãåºããŠã¿ãŸãã ãSpring Bootã§æ§ç¯ããŠãããããã¯ããæŽãåºããŠããšèããŠã¿ããšãCMDBã®MCPãµãŒããŒã«ããSBOMæ€çŽ¢ããŒã«ã spring-boot-autoconfigure ã®ã³ã³ããŒãã³ããæ€çŽ¢æ¡ä»¶ã«å
¥ããŠåŒã³åºããŸãã ãã¡ããã¬ã¹ãã³ã¹ã®äžéšã«ãªããŸããå
šéšã§31ãããã¯ããSpring Bootãæ¡çšããŠããããã§ããå€ãã§ããã æ¬¡ã®ã¹ããã æŽæ°ç³»ããŒã«ãžã®æ¡åŒµ: çŸåšã¯æ€çŽ¢å°çšã§ãããç»é²ã»æŽæ°ç³»ã®ããŒã«ãèŠæããããŸãã誀æäœã®ãªã¹ã¯ãæ€çŽ¢ãšã¯æ®µéããªã®ã§ãæš©éå¶åŸ¡ãå®è¡åã®ç¢ºèªã®ä»çµã¿ãšã»ããã§æ€èšããŠãããããšæããŸã ãããã« ä»åã¯ãSpring Boot補ã®ç€Ÿå
CMDBãSpring AIã§MCPãµãŒããŒåããAIãšãŒãžã§ã³ããã瀟å
ã®æ§ææ
å ±ãæ€çŽ¢ã§ããããã«ããåãçµã¿ã«ã€ããŠã話ãããŸããã MCPãµãŒããŒã®æ§ç¯ã¯PythonãTypeScriptã®æ
å ±ãå€ãã§ãããæ¢åã®Spring Bootã¢ããªãæã£ãŠãããªããserviceå±€ãèªèšŒãã€ã³ãã©ããã®ãŸãŸäœ¿ãåããSpring AIã¯ååæåãªéžæè¢ã§ãããã®èšäºããJavaã§ã®MCPãµãŒããŒæ§ç¯ãæ€èšããŠããæ¹ã®åèã«ãªãã°å¬ããã§ãã AIãšãŒãžã§ã³ããäžå¿ãšããåãæ¹ã¯ãŸã ãŸã é²åããŠãããšæãã®ã§ããã£ããã¢ãããšå®è·µãç¹°ãè¿ããªãããPlatform EngineeringããŒã ãšããŠããŒã«ã®æŽåãé²ããŠãããããšæããŸãã
ãã®èšäºã§ãããããš Compose MultiplatformïŒCMPïŒã®åç»åçã¯ãAndroid ã§ã¯ AndroidView + Media3 PlayerView ãiOS ã§ã¯ UIKitView + AVPlayerLayer ãWeb ã§ã¯ canvas ã®è£ã«çœ®ãã <video> èŠçŽ ãšããã©ãããã©ãŒã ããšã«ãŸã£ããç°ãªã Interop æ©æ§ã§åããŠãã ãã©ã®ãã¬ãŒã ã¯ãŒã¯ããã€ãã£ãããã¯èŠãããã®åãã§ããã³ãŒããšæ®åã®å±€ã¯ Flutter ã React Native ã CMP ããã¹ãŠ OS ã®åããã€ãã£ã API ã䜿ã£ãŠãããæ¬åœã®åå²ç¹ã¯ããã€ãã£ããæãã 1 ãã¬ãŒã ãããã¬ãŒã ã¯ãŒã¯èªèº«ã® UI ãšã©ãåæããããã«ãã Android ã® SurfaceView / TextureView ãç»é¢ããšã«éžã¹ãèªç±ã¯ CMPïŒãš React NativeïŒã«ã¯ãããFlutter ã® video_player ã«ã¯é·ãããªãã£ããäžæ¹ãå®éã®ãããžã§ã¯ãã§ã¯è§äžžãã¬ãã¥ãŒã®ããã«ããã㊠Flutter ãšåããã¯ã¹ãã£ã³ããŒçµè·¯ïŒ TextureView ïŒãéžãã CameraK 0.4 ãã³ãã¥ããã£è£œã®åç»ãã¬ã€ã€ãŒãšãã£ããè¥ããšã³ã·ã¹ãã ãã®çŸå®ãšããã®äžè¶³ã expect/actual ã§åãã©ãããã©ãŒã ã®ãã€ãã£ã API ã«çŽæ¥äžããŠè£ããšããå¯ŸåŠæ³ããå®ãããžã§ã¯ãã®ã³ãŒãã§ç€ºã ã¯ããã« ããã«ã¡ã¯ãã¢ãã€ã«ã¢ããªéçºéšã® Yao ã§ãã ç§ã¯ä»¥åãã Kotlin MultiplatformïŒKMPïŒ/ Compose Multiplatform ãç¶ç¶çã«ç ç©¶ããŠããŠããã®ããŒãã§äœæ¬ãèšäºãæžããŠããŸãããèå³ã®ããæ¹ã¯ éå»ã®èšäºäžèЧ ãã芧ãã ãããæ¬èšäºã§ã¯ã CMP ã®åŒ±ç¹ãšããŠçã£å
ã«ååãæãããåç»åçããšãã«ã¡ã©ãããAndroidã»iOSã»Web ã® 3 ãã©ãããã©ãŒã ã§ã©ãå®è£
ããã ãæžããŸãã 顿ã¯ã瀟å
ã§éçºãã åç»ã¢ãã¿ãŒçæã¢ã㪠ã§ããèªåã®é¡ãåç»ã§é²ç»ããŠããžã¿ã«å身ïŒã¢ãã¿ãŒïŒãäœããããã¹ããå
¥åãããšãã®å身ãèªåã®å£°ã§è©±ãåç»ãçæããããšããã¢ããªã§ããé²ç»ã»é²é³ã»åçãšããã¡ãã£ã¢æ©èœããããã¯ãã®æ ¹å¹¹ã«ããããCMP ã§ã¡ãã£ã¢ããããšã©ããªããããæ€èšŒããã«ã¯æ Œå¥œã®é¡æã§ããã çæãããåç»ã確èªã»æ¿èªãã VideoDetailScreen ïŒæ¬èšäºã®ã¢ããªç»é¢ã¯ãããããã¶ã€ã³ã¢ãã¯ã§ã人ç©ã¯ãã¹ãŠãããŒã§ãïŒ CMP ã®ãšã³ã·ã¹ãã ã¯ãŸã è¥ãã§ãããã®èšäºã§ã¯ããã®è¥ããã©ãã§ã©ãçãã®ãããããŠãã®çã¿ã expect/actual ãšããã¢ãŒããã¯ãã£ã§ã©ããŸã§ç·©åã§ããã®ãããå®éã®è¡æ°ã»ããŒãžã§ã³çªå·ã»ã³ãŒãã§ç€ºããŸãã圢容è©ã§ã¯ãªãæ°åã§èªãããšãç®æšã«ããŸãã ãã®ã¢ããªã®ã¢ãŒããã¯ãã£ã¯ã©ããªã£ãŠããã æ¬ã¢ããªã¯ 1 ã€ã® Kotlin ã³ãŒãããŒã¹ãã Android / iOS / WebïŒwasmJsïŒã® 3 ãã©ãããã©ãŒã ã«é
ä¿¡ããŠããŸããã¢ãžã¥ãŒã«æ§æã¯æ¬¡ã®ãšããã§ãã androidApp â iosApp âââ sharedUI ââ sharedLogic ââ apiClient webApp â ã¢ãžã¥ãŒã« Kotlin ãã¡ã€ã«æ° åœ¹å² sharedLogic 113 Compose äŸåãŒã ã®çŽ KotlinãKtor / Serialization / Coroutines / Koin-core sharedUI 154 ã¢ãã€ã«åãå
±æ CMP ç»é¢ + 3 ãã©ãããã©ãŒã ã® actual å®è£
webApp 35 ã¢ãã€ã«ã®ã¬ã€ã¢ãŠãã¯åå©çšããããã¹ã¯ãããåãã«åæ§ç¯ apiClient 191 OpenAPI Generator 7.22.0 ã§çæããªããžããªã«ã³ãããããèªç€Ÿããã¯ãšã³ãã®ã¯ã©ã€ã¢ã³ã androidApp / iosApp 6 / 4ïŒSwiftïŒ ãšã³ããªãã€ã³ãã®ã¿ èšèšã¯ Clean Architecture + MVI ã§ããUseCase ã 32 åïŒ1 ã¯ã©ã¹ 1 æäœïŒãRepository ã 7 åãViewModel ã 12 åãããå ViewModel 㯠MutableStateFlow<XxxUiState> ãšäžå€ data class ã«ããåäžã®ç¶æ
ãœãŒã¹ïŒSingle Source of TruthïŒãæã¡ãŸãããã©ãããã©ãŒã èœå㯠20 åã® expect å®£èš ã«éçŽããŠããŸãã æè¡ã¹ã¿ãã¯ã¯ããªãæ°ããã§ããKotlin 2.3.10 / CMP 1.10.1 / AGP 9.0.1 / Ktor 3.4.0 / Koin 4.1.1 / Navigation 3 1.0.0-alpha06 / Media3 1.9.0 / Coil3 3.3.0 / CameraK 0.4 / FileKit 0.13.0ããã㊠wasmJs ã¿ãŒã²ããããšã³ã·ã¹ãã ã®æåç·ã«ç«ã€ãšäœãèµ·ãããã¯ãåŸåã§å
·äœçã«æžããŸãã ãããžã§ã¯ãã®ç¹åŸŽã 1 ã€ã ãæãããšã ããžãã¯ã¯ 100% å
±æãUI ã¯åœ¢æ
ããšã«åå² ãšããæ¹éã§ããWeb ã¯ã¢ãã€ã«ã®ã¬ã€ã¢ãŠããåå©çšãã 33 åã®ç¬ç«ãã Web*Screen ããã¹ã¯ãããåãã«æ§ç¯ããŠããŸãããViewModel ã®ç¶æ
æ©æ¢°ã¯ã¢ãã€ã«ãšãŸã£ããåããã®ã䜿ããŸãããã®ãããžãã¯ãšãã¬ãŒã³ããŒã·ã§ã³ã®åé¢ãããåŸè¿°ããã¡ãã£ã¢å®è£
ã® 3 ãã©ãããã©ãŒã åå²ãæ¯ããåå°ã«ãªã£ãŠããŸãã ãªã Compose Multiplatform ãéžãã ã®ã Flutter ã React Native ã§ã¯ãªã CMP ãéžãã çç±ã¯ 3 ã€ãããŸãã 1 ã€ç®ã¯ãããžãã¯ã®è€éãã UI ã§ã¯ãªãç¶æ
æ©æ¢°ã«ãã£ãããšã æ¬ã¢ããªã®ããžãã¹ããžãã¯ã«ã¯ãæ¬äººç¢ºèªïŒconsentïŒã®ãã©ãŠã¶é£æºã®ç¶æ
é·ç§»ãã¢ãã¿ãŒçæç¶æ
ã® 3 å€å°åºïŒ status à generationRetryable à retryCount â GENERATING / RETRYABLE / TERMINAL ïŒãåç»çæãšã¢ãã¿ãŒèšç·Žããããã® 60 ç§ééããŒãªã³ã°ãšãã£ããåã§å®ãããé·ç§»ãå€ããããŸãããã®çš®ã®ããžãã¯ã¯ãsealed interface ãš data class ãæã€ Kotlin ã§æžãã®ã Dart ã TypeScript ããå®å
šã ãšå€æããŸããã 2 ã€ç®ã¯ãããŒã ã®ã¹ãã«ã»ããã ã¡ã³ããŒã¯ Kotlin / Android åºèº«ã§ãUseCase 32 å + StateFlow ã® MVI ãšããæ§æã¯åŠç¿ã³ã¹ããŒãã§æžãå§ããããŸããã 3 ã€ç®ãæãéèŠã§ããæŒžé²çã«ãã€ãã£ããžæ»ãããããšã sharedLogic 㯠Compose äŸåãŒãã®çŽ Kotlin ãªã®ã§ã Swift ããçŽæ¥åŒã¹ãŸã ãå®é iOS ã¯ãã§ã« SwiftUI ã®ãã€ãã£ãã·ã§ã« + CMP ã³ã³ãã³ãç»é¢ãšãããã€ããªããæ§æã§ããå°æ¥ UI ããã¹ãŠ SwiftUI / Jetpack Compose ã«çœ®ãæããããšã«ãªã£ãŠããããžãã¯åŽã¯ 1 è¡ãå€ãããŸãããFlutter ã React Native ã§ã¯ãUI ãã¬ãŒã ã¯ãŒã¯ãæšãŠã = ã»ãŒå
šéšæžãçŽãã§ãããKMP ã§ã¯ããžãã¯è³ç£ããã®ãŸãŸæ®ããŸãããã®éè·¯ã®ååšãã以åã®èšäº ãKotlin Multiplatform ãã€ããªããã¢ãŒãã ã§æžãããã€ããªããã¢ãŒãã®å®å©ã§ãã ãåç»åçããšãã«ã¡ã©ãââè¥ããšã³ã·ã¹ãã ã§æåã«ã¶ã€ããå£ CMP ã§ã¢ããªãäœããšå®£èšãããšããæåã«èãããã®ããåç»ãšã«ã¡ã©ã¯ã©ãããã®ïŒãã§ãããã£ãšããªè³ªåã§ããFlutter ã«ã¯ flutter.dev å
¬åŒããŒã ãä¿å®ãã video_player ãš camera ããããReact Native ã«ã¯ç¡æ°ã®ãããã¯ã·ã§ã³ã§æ°å¹ŽåããŠãã react-native-video ãš vision-camera ããããŸããCMP ã«ã¯ããã«çžåœãããå
¬åŒã®å®çªãããŸã ãããŸããã ãšã³ã·ã¹ãã ã®çŸå®ãæ°åã§èŠã æ¬ã¢ããªã®åç»åç㯠io.github.kdroidfilter.composemediaplayer ïŒComposeMediaPlayerïŒãšããã³ãã¥ããã£è£œã©ã€ãã©ãªãããŒã¹ã«ããŠããŸããFlutter ã® video_player ã®ãããªå
¬åŒããŒã ä¿å®ã®ãã©ã°ã€ã³ã§ã¯ãªãã®ã§ãæåã®çްéšã確ãããããšãã¯ã©ã€ãã©ãªã®å
¬éãœãŒã¹ãèªã¿è§£ãããšã«ãªããŸãããã®èšäºã® Interop 解説ãããã®ãœãŒã¹ãªãŒãã£ã³ã°ã®ææã§ãã ã«ã¡ã©ã¯ CameraK ã䜿ããŸãããããŒãžã§ã³ã¯ 0.4 ã§ããFlutter ã® camera ãå
¬åŒããŒã ã®ä¿å®äžã«ããã vision-camera ãæçããŠããããšãšæ¯ã¹ããšããã®æ°åããšã³ã·ã¹ãã ã®è¥ãã端çã«è¡šããŠããŸãã ããã§ããã®æ§æã§ 3 ãã©ãããã©ãŒã ã®ã¢ããªã¯åºè·ã§ããŸããããªãæç«ããã®ãã説æããããã«ããŸãåæãšãªã誀解ã 1 ã€è§£ããŸãã ããããããã€ãã£ããã©ãããã¯è«ç¹ã§ã¯ãªã ã¯ãã¹ãã©ãããã©ãŒã ã®æ¯èŒèšäºã§ã¯ãFlutter ã¯ç¬èªã¬ã³ããªã³ã°ã ããããRN ã¯ãã€ãã£ãã ããããšããè°è«ãããèŠãŸãããåç»ãšã«ã¡ã©ã«é¢ããŠã¯ã ãã³ãŒããšæ®åã®å±€ã¯ 3 è
ãšãå®å
šã«åã ã§ããèªåã§ H.264 ãã³ãŒããã«ã¡ã©ãã©ã€ããæžããŠãããã¬ãŒã ã¯ãŒã¯ã¯ 1 ã€ããããŸããã ãã¬ãŒã ã¯ãŒã¯ / ã©ã€ãã©ãª åçã®ãã³ãŒã ã«ã¡ã©ã®æ®å FlutterïŒ video_player / camera ïŒãããã flutter.dev å
¬åŒãã©ã°ã€ã³ïŒ ExoPlayer / AVPlayer CameraXã»Camera2 / AVCaptureSession React NativeïŒ react-native-video / vision-camera ExoPlayer / AVPlayer CameraX / AVCaptureSession æ¬ã¢ããªïŒCMPïŒ Media3 ExoPlayer / AVPlayer / <video> CameraK çµç±ã® CameraX / AVCaptureSessionãWeb 㯠getUserMedia ãçŽæ¥ ã©ã®ãã¬ãŒã ã¯ãŒã¯ãéžãã§ããåç»ããã³ãŒãããã®ã¯ ExoPlayer ãš AVPlayer ã§ãã«ã¡ã©ãå¶åŸ¡ããã®ã¯ CameraX ãš AVCaptureSession ã§ããã€ãŸããç»è³ªãããã³ãŒãæ§èœãã察å¿ã³ãŒããã¯ãã§ãã¬ãŒã ã¯ãŒã¯éã«å·®ã¯åºãŸããã ã§ã¯äœãéãã®ãã ãã€ãã£ã API ããã³ãŒããã 1 ãã¬ãŒã ãããã¬ãŒã ã¯ãŒã¯èªèº«ãæãã UIïŒãã¿ã³ãããã¹ããè§äžžã«ãŒãïŒãšã©ãåæããã ãããããã¹ãŠã®åå²ç¹ã§ãã æ¬åœã®åå²ç¹ïŒãã€ãã£ãã®ãã¬ãŒã ãã©ãåæããã åææŠç¥ã¯å€§ãã 2 è·¯ç·ã«åãããŸãã è·¯ç· AïŒãã¯ã¹ãã£æ¬éã ãã€ãã£ããã¬ã€ã€ãŒã®åºåã GPU ãã¯ã¹ãã£ãšããŠãã¬ãŒã ã¯ãŒã¯åŽã«ã³ããŒãããã¬ãŒã ã¯ãŒã¯ãèªåã®ã·ãŒã³ã°ã©ãã®äžã§ 1 æã®ç»åãšããŠæããFlutter ã® video_player ã¯åŸæ¥ãã®æ¹åŒãæ¢å®ã§ããã è·¯ç· BïŒãã€ãã£ã view ã®åã蟌ã¿ã ãã€ãã£ãã® viewïŒ SurfaceView / UIView / DOM èŠçŽ ïŒããã®ãŸãŸç»é¢ã«éãããã¬ãŒã ã¯ãŒã¯ã®æç»é¢ãš OS ã®ã³ã³ããžã¿ã§åæãããReact Native ãšãCMP ã® InteropïŒ AndroidView / UIKitView ïŒã¯ãã¡ãã§ãã è·¯ç· A ã¯æ¯ãã¬ãŒã ã®ã³ããŒãšåŒãæãã«èªç±ãªå€æããè·¯ç· B ã¯ãŒãã³ããŒçŽçµãšåŒãæãã«æåã®ã¬ã€ã€ãŒç®¡çãåãå
¥ãã äž¡è
ã®åŸå€±ã¯æç¢ºã«é察称ã§ãã èŠ³ç¹ è·¯ç· AïŒãã¯ã¹ãã£æ¬éïŒFlutterïŒ è·¯ç· BïŒãã€ãã£ã view åã蟌ã¿ïŒRN / CMPïŒ è§äžžã»ã¯ãªããã»åè»¢ã»æ¡çž® â
åç»ã¯ãã ã®ç»åãªã®ã§èªç±ã«å€æã§ãã â ïž ãã€ãã£ãå±€ã¯èŠªã® clip ãåããªãïŒ SurfaceView ã®å Žåã TextureView ãªãå¯ïŒ ä» UI ãšã® z é ã®éãªã â
åžžã«æ£ãã â ïž æå管çãWeb ã§ã¯ã»ãŒäžå¯èœ ãªã¹ãå
ã¹ã¯ããŒã« â
ãã¬ãŒã åæãèªç¶ã«åãã â ïž ãã€ãã£ãå±€ããããŠãæµ®ããããšããã GPU è² è· / é
å»¶ â ïž ã³ããŒãšåæã§çŽ 1 ãã¬ãŒã åã®ã³ã¹ã â
ãŒãã³ããŒã§ããŒããŠã§ã¢åæã«çŽçµïŒ SurfaceView ã®å ŽåïŒ PiPïŒiOSïŒ/ AirPlay / ããã¯ç»é¢æäœ / ãã€ãã£ãåå¹ â ïž å€±ãããã远å ãã©ã°ã€ã³ãå¿
èŠ â
ãã€ãã£ããã¬ã€ã€ãŒã®æ©èœããã®ãŸãŸäœ¿ãã DRM ã®ã»ãã¥ã¢ãã¹ïŒWidevine L1ïŒ â ãã¯ã¹ãã£çµè·¯ã§ã¯ååŸã§ããªã â
å¯èœïŒ SurfaceView ãå¿
èŠïŒ ãã®è¡šãé ã«å
¥ããããã§ãCMP ã 3 ãã©ãããã©ãŒã ã§ããããã©ãå®è£
ããŠããããèŠãŠãããŸããæ¬ã¢ããªã§ã¯ ComposeMediaPlayer ã®äžã« 272 è¡ã®ã©ãã㌠VideoPlayer.kt ã被ããææç©åç»ã®åçïŒ VideoDetailScreen ïŒãã¢ãã¿ãŒã®ãã¬ãã¥ãŒåçïŒ AvatarDetailScreen ïŒãé²ç»çŽ æã®èŠçŽãïŒ AvatarCreateVideoReviewScreen ïŒãšãã® Web çãèš 6 ç»é¢ã§äœ¿ã£ãŠããŸãã 3 ã€ã®ãã©ãããã©ãŒã ã3 ã€ã® Interop AndroidïŒAndroidView ãšãSurfaceView / TextureView ã®éžææš© Android å®è£
㯠AndroidView ã§ Media3 ã® PlayerView ã Compose ããªãŒã«åã蟌ã¿ãŸããè峿·±ãã®ã¯ããã®ã©ã€ãã©ãªã åç»ãæãé¢ïŒsurfaceïŒã 2 çš®é¡çšæããŠããŠãXML ã¬ã€ã¢ãŠãã§åãæ¿ãããã ããšã§ãã <androidx.media3.ui.PlayerView android:layout_width="match_parent" android:layout_height="match_parent" app:surface_type="surface_view" app:use_controller="false" /> <androidx.media3.ui.PlayerView android:layout_width="match_parent" android:layout_height="match_parent" app:surface_type="texture_view" app:use_controller="false" /> SurfaceView 㯠OS ã®ããŒããŠã§ã¢ã³ã³ããžã¿ã«çŽçµããç¬ç«ã¬ã€ã€ãŒã§ããŒãã³ããŒãã€äœé
å»¶ãDRM ã®ã»ãã¥ã¢ãã¹ããããéããŸãããã ã ç¬ç«ã¬ã€ã€ãŒã§ãããããã«ã芪 View ã®ã¯ãªããã«åå ããŸãã ãäžæ¹ TextureView ã¯åç»ãã¬ãŒã ã GPU ãã¯ã¹ãã£ãšã㊠View ããšã©ã«ããŒã®æç»ã«åæµãããããã1 ã³ããŒåã®ã³ã¹ããšåŒãæãã«ãæ®éã® View ãšåãããã«è§äžžã¯ãªããã倿ãå¹ããŸãã æ¬ã¢ããªã®ããã©ã«ã㯠TextureView ã§ãã @Composable actual fun VideoPlayerSurface( playerState: VideoPlayerState, modifier: Modifier, contentScale: ContentScale, overlay: @Composable () -> Unit ) { VideoPlayerSurfaceInternal( playerState = playerState, modifier = modifier, contentScale = contentScale, overlay = overlay, surfaceType = SurfaceType.TextureView ) } çç±ã¯å
·äœçã§ããã¢ãã¿ãŒè©³çްç»é¢ïŒ AvatarDetailScreen ïŒã®ãã¬ãã¥ãŒã¯ 350Ã600 ã®è§äžžã«ãŒãã§ã SurfaceView ã䜿ããšè§äžžã®å
åŽããåè§ãåç»ãã¯ã¿åºããŠãã«ãŒãã®è§ãçªãç ŽããŸãããã¶ã€ã³ãå®ãã«ã¯ TextureView ãããããŸããã§ããã åé¡ã®è§äžžãã¬ãã¥ãŒã«ãŒãããã® 4 ã€ã®è§ãå®ãããã« TextureView ãéžãã :::message ããã«çŽæã«åããäºå®ããããŸããåç¯ã®è¡šã®ãšããã TextureView ã®ãGPU ãã¯ã¹ãã£ãšããŠã³ããŒãããçµè·¯ã¯ã ãŸãã« Flutter ã® video_player ãåŸæ¥åžžã«éã£ãŠããè·¯ç· A ãã®ãã® ã§ããã€ãŸãæ¬ã¢ããªã¯ Android ã§ã¯ãè§äžžãšãããã¶ã€ã³èŠä»¶ã®ããã«ãFlutter ãšåãæ§èœç¹æ§ãèªãåãå
¥ããŠããŸãã ::: ãã ã Flutter ãšã®éãã¯ãéžã¹ãããšãã«ãããŸãã video_player ãçŸåšã¯ VideoViewType.platformView ã§ platform view ãéžã¹ãŸããããã®éžæè¢ãå
¥ã£ãã®ã¯ç»å Žããé·ã幎æãçµã£ãŠããã§ãããCMP ã®è·¯ç· B ã§ã¯ã surfaceType åŒæ° 1 ã€ã§ ç»é¢ããšã« SurfaceView ïŒæ§èœã»DRM åªå
ïŒãš TextureView ïŒã¯ãªããã»å€æåªå
ïŒãéžã³åããããŸããè§äžžã«ãŒãã«ã¯ TextureView ãå
šç»é¢åçã«ã¯ SurfaceView ããšãã䜿ãåããåãã¢ããªã®äžã§ã§ããŸãããã®éžææš©ãããè·¯ç· B ã®å®å©ã§ãæ¬ã¢ããªã®è§äžžãã¬ãã¥ãŒã¯ãããè¡äœ¿ããå®äŸã§ãã iOSïŒUIKitView ãš layerClass = AVPlayerLayer iOS å®è£
㯠3 ãã©ãããã©ãŒã ã®äžã§æãçŽ çŽã§ããCMP ã® UIKitView ã§ãã€ãã£ã UIView ãåã蟌ã¿ãŸããããã® UIView ã® backing layer èªäœã AVPlayerLayer ã«å·®ãæ¿ãã ãšãã UIKit ã®å€å
žçãªãã¯ããã¯ã䜿ã£ãŠããŸãã private class PlayerUIView : UIView { companion object : UIViewMeta() { override fun layerClass(): ObjCClass = AVPlayerLayer } @OverrideInit constructor(frame: CValue<CGRect>) : super(frame) var player: AVPlayer? get() = (layer as? AVPlayerLayer)?.player set(value) { (layer as? AVPlayerLayer)?.player = value } } Objective-C ã® +layerClass ãªãŒããŒã©ã€ãã Kotlin/Native ã® UIViewMeta ã§ãã®ãŸãŸæžããŠããç¹ã«æ³šç®ããŠãã ãããview ã® layer ãæåãã AVPlayerLayer ãªã®ã§ãäœèšãªãµãã¬ã€ã€ãŒç®¡çãäžèŠã§ãAVPlayer ã®ãã³ãŒãçµæã¯ Core Animation ã®ã³ã³ããžã¿ã«ãŒãã³ããŒã§æž¡ããŸããããšã¯ UIKitView(factory = { PlayerUIView(frame = cValue<CGRect>()) }, ...) ã§ Compose ã«åã蟌ãã ãã§ãã ããããªæ§å³ã§ãããè·¯ç· B ã®ä»£åã¯ããã«ããããŸããCMP ã® UIKitView ã¯ãã€ãã£ã view ã Compose ã®ã·ãŒã³ã°ã©ãã®äžã«æãã®ã§ã¯ãªãã Compose ãæç»ããŠãã MTKView ã®å
åŒãšããŠãã®äžã«éããŸã ãã€ãŸãåç» view 㯠Compose ã®æç»äžçã®å€ã«ããŠãã¿ããã€ãã³ãã®ééãã¬ã€ã€ãŒã®ååŸé¢ä¿ãã¯ãªããã¯ãã¹ãŠ Interop ã®å¢çã§åå¥ã«é¢åãèŠãããšã«ãªããŸããComposeMediaPlayer ããã®å¢çãåžåããããã«ãåçã³ã³ãããŒã«ãªã©ãèŒããããã® overlay ã¹ãããã API ãšããŠçšæããŠããã®ã¯ããã®è£è¿ãã§ãã WebïŒcanvas ã®è£ã® video èŠçŽ ãšãBlendMode.Clear ã§éãã穎 WebïŒwasmJsïŒå®è£
ã¯ããã®èšäºã§ãã¡ã°ãåçãªéšåã§ããCMP ã® Web ã¿ãŒã²ããã¯ç»é¢å
šäœã 1 æã® canvasïŒSkiaïŒã«æç»ããŸããã§ã¯ <video> èŠçŽ ã¯ã©ãã«çœ®ãã®ããçãã¯ã canvas ã®è£ ãã§ãã internal fun HTMLVideoElement.applyInteropBehindCanvas() { val wrapper = parentElement as? HTMLElement ?: return wrapper.style.apply { zIndex = "-1" // <video> ã Compose ã® canvas ã®èåŸãž setProperty("pointer-events", "none") backgroundColor = "transparent" } } z-index: -1 ã§åç»ãããŒãžã®æèé¢ã«æ²ããŸããåœç¶ãã®ãŸãŸã§ã¯ canvas ã«é ããŠèŠããŸãããããã§ã¢ããªåŽã®ã³ãŒãã§ãCompose ã® canvas ã« æåã©ãã穎ãéããŸã ã // BlendMode.Clear zeroes every pixel (including alpha) in the Compose canvas // over this area, punching a transparent hole so the video element behind // the canvas shows through. Box(modifier = Modifier.fillMaxSize().drawBehind { drawRect(color = Color.Transparent, size = size, blendMode = BlendMode.Clear) }) BlendMode.Clear ã¯ãã®é åã®ãã¯ã»ã«ãã¢ã«ãã¡å€ããšãŒãã«ããã®ã§ãcanvas ã®ãã®éšåãå®å
šã«éæã«ãªããèåŸã® <video> ãéããŠèŠããããšãã仿ãã§ããã«ã¡ã©ã®ã©ã€ããã¬ãã¥ãŒãåãæ©æ§ã§ã getUserMedia() ã§ååŸãã MediaStream ã WebElementView çµç±ã§ HTMLVideoElement ã«æ¥ç¶ããcanvas ã®ç©ŽããèŠãããŠããŸãã åç»ã¯åžžã«æèé¢ãèŠããã®ã¯ canvas ã«éãã穎ã®é åã ãã§ãUI ã¯å¿
ãåç»ããäžã«èŒã :::message ãã㯠2 ã€ç®ã®ãçŽæã«åããäºå®ã«ã€ãªãããŸãããã®æ¹åŒã®åž°çµãšããŠã Web ã§ã¯åç»ã¯æ§é çã«ããã¹ãŠã® Compose ã³ã³ãã³ãããäžã«ããååšã§ããŸãã ããåç»ã®äžã« UI ãéãããããšã¯ïŒcanvas åŽã«æãéãïŒå¯èœã§ããããUI ã®äžã«åç»ããã®ããã«äžã«å¥ã® UIãã®ãããªèªç±ãª z é ã¯åççã«çµããŸãããé²ç»äžã®ã¿ã€ããŒè¡šç€ºã忢ãã¿ã³ã¯ããã®å¶çŽãåæã«ã穎ã®äžã« Compose ã§æããèšèšã«ãªã£ãŠããŸããããã¯ãã°ãå®è£
ã®ææãã§ã¯ãªããcanvas ã¬ã³ããªã³ã° + DOM åç»ãšããæ§æã®æ§é çãªéçã§ãã ::: å
¬å¹³ãæãããã«æžããŠãããšã Web ã®åç»ã¯ 3 ãã¬ãŒã ã¯ãŒã¯ãšãäœé¢ãä¿ãŠãŠããŸãã ãFlutter Web ã® video_player ã HtmlElementView ã§ DOM ã® <video> ãéããåé¡ã®æ¹åŒã§ãcanvas ãš DOM ã®åæã«çžå¿ã®å¶çŽãšã³ã¹ããæ±ããŸããReact Native ã«ã¯å
¬åŒã®åç»ãã¬ã€ã€ãŒããããããªãã react-native-video ã® Web 察å¿ããŸã çºå±éäžã§ãããã©ãŠã¶ã§ã¯åç»ãã³ãŒããšããŒãžåæã®äž»å°æš©ããã©ãŠã¶èªèº«ã«ãããããã©ã®ãã¬ãŒã ã¯ãŒã¯ã <video> èŠçŽ ãšãåå±
ãããæ¹æ³ãæ¢ããããªãã®ã§ãã ã«ã¡ã©ãšé²é³ïŒexpect/actual ã第äžçŽåžæ°ã§ãã匷㿠åç»åçã¯ã³ãã¥ããã£è£œã©ã€ãã©ãªã§æŠããŸããããã«ã¡ã©ãšé²é³ã¯ãã£ãšçŽæ¥çã«ã expect/actual ã§åãã©ãããã©ãŒã ã®ãã€ãã£ã API ã«äžããŠå®è£
ããŸããããŸãå®è£
éã®å®æ
ãèŠãŠãã ããã èœå Android iOS Web åç»é²ç»ç»é¢ AvatarCreateVideoRecordingScreen.mobile.kt 467 è¡ ïŒAndroid / iOS å
±æïŒ åå·Š AvatarCreateVideoRecordingScreen.wasmJs.kt 425 è¡ ã«ã¡ã©å®è£
CameraK 0.4ïŒCameraX ããŒã¹ïŒ CameraK 0.4ïŒAVCaptureSession ããŒã¹ïŒ getUserMedia() + MediaRecorder + WebElementView AudioRecorder 83 è¡ïŒ MediaRecorder ïŒ 108 è¡ïŒ AVAudioRecorder ïŒ 11 è¡ã® stub MicrophoneDeviceProvider 70 è¡ 17 è¡ 12 è¡ã® stub AudioPlayer 53 è¡ 63 è¡ 57 è¡ïŒ HTMLAudioElement ïŒ ã¢ãã€ã«åŽã®é²ç»ã¯ CameraK ã«ä»»ããŸãããããã³ãã«ã¡ã©åºå®ã»HD ç»è³ªã»é²ç»ãã©ã°ã€ã³ãšããæ§æããAndroid / iOS å
±éã® 1 ãã¡ã€ã«ã§æžããŸãã val cameraConfig = remember { CameraConfiguration( flashMode = FlashMode.OFF, cameraLens = CameraLens.FRONT, ) } val cameraState = rememberCameraKState( config = cameraConfig, setupPlugins = { holder -> holder.attachPlugin(plugin) }, // VideoRecorderPlugin ) CameraKScreen( modifier = Modifier.fillMaxSize(), cameraState = cameraState.value, content = { _ -> RecordingOverlay(/* é²ç» UI */) }, ) é²ç»äžã®ç»é¢ãã«ã¡ã©ãã¬ãã¥ãŒïŒãã€ãã£ãå±€ïŒã®äžã«ãã¿ã€ããŒã»ã¹ã¯ãªããã»åæ¢ãã¿ã³ã Compose ã® overlay ãšããŠéããŠãã Web ã¯ã©ã€ãã©ãªãªãã§ã getUserMedia() ãš MediaRecorder ã wasmJs ããçŽæ¥åŒã³ãŸããmimeType ã®ããŽã·ãšãŒã·ã§ã³ïŒãã©ãŠã¶ããšã«å¯Ÿå¿ã³ãŒããã¯ãéãïŒããã©ãŠã¶ API ã®æµåã®ãŸãŸæžããŸããã 衚ã®äžã®ã11 è¡ã® stubãã¯é ããæžããŠãããŸããWeb çã® AudioRecorder ãš MicrophoneDeviceProvider ã¯äžèº«ã®ãªã空å®è£
ã§ãé³å£°ã¯ããŒã³çšã®é²é³ãããŒã¯ã¢ãã€ã«å°çšãšå²ãåããŸããã3 ãã©ãããã©ãŒã 察å¿ãšã¯ãå
šæ©èœ à å
šãã©ãããã©ãŒã ãã§ã¯ãªãããã©ãããã©ãŒã ããšã«æäŸç¯å²ãéžã¶ããšã§ããããŸãã expect/actual ã¯ãã®å²ãåããåãšããŠæç€ºã§ããŸãã åãç¶æ
æ©æ¢°ãéãããªã¬ãŒïŒConsentReturnFromBrowserEffect expect/actual ã®äœ¿ãã©ãããšããŠãç§ãæãæ°ã«å
¥ã£ãŠããäŸãæããŸããã¢ãã¿ãŒèšç·Žã«ã¯æ¬äººç¢ºèªïŒconsentïŒããããå€éšãã©ãŠã¶ã§ç¢ºèªãå®äºããŠããã¢ããªã«æ»ããšãã¢ããªåŽããæ»ã£ãŠãããããšãæ€ç¥ããŠã¹ããŒã¿ã¹ã®ç¢ºèªãå§ããŸãããã®ãå€éšãã©ãŠã¶ããæ»ã£ãŠããããšããã€ãã³ãã¯ããã©ãããã©ãŒã ã«ãã£ãŠèŠ³æž¬ææ®µããŸã£ããéããŸãã @Composable expect fun ConsentReturnFromBrowserEffect(onReturned: () -> Unit) Android / iOS ïŒmobileMainã»36 è¡ïŒïŒCompose ã® lifecycle ã芳枬ãã ON_PAUSE â ON_RESUME ã®é ã§æ¥ããšãã ãçºç«ããã©ãŠã¶ãéãã°å¿
ãã¢ããªã pause ããã®ã§ãåå composition ãç¡é¢ä¿ãª resume ã誀æ€ç¥ããŸãã Web ïŒwasmJsã»36 è¡ïŒïŒ window ã® blur â focus ãç£èŠãwasmJs ã§ã¯ lifecycle ã® ON_RESUME ã確å®ã«ã¯çºç«ããªããããå°çšã®çµè·¯ãçšæããŸãã consent ã®ç¶æ
æ©æ¢°ãã®ãã®ïŒåŸ
æ© â 確èªäž â å®äºïŒã¯ ViewModel ã«ããã3 ãã©ãããã©ãŒã ã§å®å
šã«åäžã§ãã éãã®ã¯ããªã¬ãŒã®èŠ³æž¬æ¹æ³ã ãã§ãããã ãã actual ãšããŠå·®ãæ¿ãã ãç¶æ
æ©æ¢°ã®ãã¹ãã»ä¿®æ£ã»æ¡åŒµã¯ 1 ãæã§æžã¿ãŸãã :::message ããã 3 ã€ç®ã®ããããŠãã®èšäºã§æãäŒããããçŽæã«åããæŽå¯ã§ãããCMP ã¯ãšã³ã·ã¹ãã ãè¥ããå
¬åŒãã©ã°ã€ã³ããªãããšãã匱ç¹ã¯äºå®ã§ããããã®ãã¡ãŒãžã¯ KMP ã®ã¢ãŒããã¯ãã£ã«ãã£ãŠ æ§é çã«ããªãã®éšåãŸã§çžæ®ºãããŠããŸã ãFlutter ã§ MethodChannel ã PlatformView ãæžãã®ã¯ããã©ã°ã€ã³ããªããšãã®äŸå€çãªè±åºè·¯ããšããäœçœ®ã¥ãã§ãããKMP ã® actual ã¯æ¥åžžã®ææ³ãã®ãã®ã§ããåã AudioRecorder ã¯ã©ã¹ã Android 83 è¡ / iOS 108 è¡ / Web 11 è¡ã§æžãåããäœæ¥ã¯ãåå®å
šã§ãIDE è£å®ãå¹ããããžãã¹ã³ãŒããšåãã¢ãžã¥ãŒã«ã®äžã§å®çµããŸãããã©ã€ãã©ãªããªããã°ãã€ãã£ã API ãçŽæ¥åŒã¹ã°ãããããååŒãªãã§æç«ããã®ã§ãã ::: Flutter / React Native ãšæ¯ã¹ããšãã® CMP ã®åŒ·ã¿ã¯äœã å
ã«æç¢ºã«ããŠãããŸãã ãCMP ã®åç»ãã¬ã€ã€ãŒãã«ã¡ã©ã¯ Flutter ããåªããŠããããšããäž»åŒµã¯æç«ããŸããã æç床ã§ã¯å
¬åŒä¿å®ã® video_player / camera ãå®çžŸè±å¯ãª vision-camera ã«åã³ãŸããããã®ããã§ããã®ãããžã§ã¯ããéããŠå®æãã CMP åºæã®åŒ·ã¿ã¯æ¬¡ã® 3 ç¹ã§ãã 1. Interop è·¯ç·ã®éžææš©ãããã CMP ã¯è·¯ç· BïŒãã€ãã£ã view åã蟌ã¿ïŒã§ãããAndroid ã§ã¯ SurfaceView / TextureView ãç»é¢åäœã§éžã¹ãŸããè§äžžãèŠãç»é¢ã¯ TextureView ãæ§èœã DRM ãèŠãç»é¢ã¯ SurfaceView ãFlutter ã® video_player ã«ã¯ããã®ã¹ã€ããã«çžåœããéžæè¢ãé·ããååšããŸããã§ããã AvatarDetailScreen ã®è§äžžãã¬ãã¥ãŒã«ãŒãã¯ããã®éžææš©ã®è¡äœ¿äŸã§ãã 2. ããã€ãã£ãã«äžãããããšã第äžçŽåžæ°ã§ããã åç¯ã®ãšããã expect/actual ã¯äŸå€åŠçã§ã¯ãªãæ¥åžžã®ææ³ã§ãããšã³ã·ã¹ãã ã«æ¬ ããŠããéšåã¯ãåŸ
ã€ã®ã§ã¯ãªã 83 è¡æžãã°åãŸããŸãã 3. ãã€ãã£ã API ãµãŒãã§ã¹å
šäœã«çŽæ¥è§Šããããã æ¬ã¢ããªã䜿ã£ãŠããã®ã¯ãMedia3 PlayerView ã® app:surface_type ãUIView ã® layerClass å·®ãæ¿ãã MediaRecorder ã® mimeType ããŽã·ãšãŒã·ã§ã³ãšãã£ããåãã©ãããã©ãŒã ã® çŽ ã® API ã§ãããã©ã°ã€ã³äœè
ãåãåºãããæå€§å
¬çŽæ°çãªæœè±¡ããçµç±ããªãã®ã§ããã©ã°ã€ã³ãå
¬éããŠããªãæ©èœã®ããã«äžæµïŒupstreamïŒã®ãªãªãŒã¹ãåŸ
ã£ãã PR ãåºãããããå¿
èŠããããŸããã åŒãæãã«äœãåãå
¥ããã 匷ã¿ã ãæžããŠçµããèšäºã¯ä¿¡çšã§ããªãã®ã§ãCMP ãéžãã åŒãæãã«åãå
¥ãããã¡ãªãããæ£çŽã«æžããŸãã åç»åçãã³ãã¥ããã£è£œã©ã€ãã©ãª 1 æ¬ã«äŸåããŠããã å
¬åŒããŒã ä¿å®ãšããåŸãçŸããªããæåã®çްéšã確ããããåé¡ãåãåããããããã³ã«ãã©ã€ãã©ãªå
éšã® Interop å®è£
ãŸã§èªã¿è§£ãçè§£ã³ã¹ããããã ã«ã¡ã©ã©ã€ãã©ãªã®ããŒãžã§ã³ã¯ 0.4ã å
¬åŒããŒã ãä¿å®ãã Flutter camera ããé·å¹Žãããã¯ã·ã§ã³ã§æ€èšŒãããŠãã vision-camera ãšæ¯ã¹ãå®çžŸã®åã¿ãéã Web ã®é²é³ãŸãã㯠stubã AudioRecorder 11 è¡ã MicrophoneDeviceProvider 12 è¡ã®ç©ºå®è£
ã§ãé²é³ãããŒã¯ã¢ãã€ã«å°çšã«å²ãåã£ã Web ã®åç»ã¯æ§é çã«æèé¢ã BlendMode.Clear ã®ç©Žããæ¹åŒã§ããéããåç»ãš Compose UI ã® z é ã¯ãåç»ãåžžã«äžãã§åºå®ããã ããããèžãŸããç§ã®å€æã¯ããã§ãã ãããã¯ãã®éå¿ãã¡ãã£ã¢èœåãã®ãã®ã«ãããªãã vision-camera ãæã€ React Native ãããããæãæçããå®çšçãªéžæè¢ã§ãããã äžæ¹ãéå¿ãè€éãªããžãã¹ç¶æ
æ©æ¢°ã«ãããé·æçã«ãã€ãã£ã UI ãžååž°ããå¯èœæ§ãæ®ããããªããCMP ã¯æ£ããéžæã§ããã¡ãã£ã¢å±€ã§äœåã«æžããã³ãŒãã¯ãã sharedLogic ã Swift ããçŽæ¥åŒã¹ããããã€ã§ããã€ãã£ã UI ã«æ»ããããšããèªç±ãžã®å
¥å Žæã ã£ããšç·æ¬ããŠããŸãã ãŸãšã åç»ã»ã«ã¡ã©ã®ãã³ãŒããšæ®åã®å±€ã¯ãFlutter / React Native / CMP ã®ã©ããéžãã§ãåããã€ãã£ã API ã«è¡ãçããå·®ãåºãã®ã¯ããã€ãã£ãã®ãã¬ãŒã ãšèªå UI ã®åææ¹æ³ãã§ããã¯ã¹ãã£æ¬éïŒè·¯ç· AïŒãšãã€ãã£ã view åã蟌ã¿ïŒè·¯ç· BïŒã¯åŸå€±ãé察称 CMP ã¯è·¯ç· B ã«ç«ã¡ã€ã€ãAndroid ã§ã¯ SurfaceView / TextureView ãç»é¢ããšã«éžã¹ããæ¬ã¢ããªã¯è§äžžãã¬ãã¥ãŒã®ããã«ããã㊠Flutter ãšåããã¯ã¹ãã£çµè·¯ïŒ TextureView ïŒãããã©ã«ãã«ãã iOS 㯠UIKitView + layerClass = AVPlayerLayer ã§ãŒãã³ããŒåçãWeb 㯠canvas èé¢ã® <video> ã« BlendMode.Clear ã§ç©ŽãéããŠèŠããæ¹åŒã§ãåç»ãåžžã« UI ã®äžãšããæ§é çå¶çŽãåãå
¥ãã ãšã³ã·ã¹ãã ã®è¥ãïŒã³ãã¥ããã£è£œã®åç»ãã¬ã€ã€ãŒãCameraK 0.4ãWeb é²é³ã® stubïŒã¯å®åšããã³ã¹ãã§ãããåæã«ã expect/actual ã«ãã£ãŠããã€ãã£ã API ã«çŽæ¥äžãããããšãæ¥åžžã®ææ³ã«ãªã£ãŠããããããã®ãã¡ãŒãžã¯ã¢ãŒããã¯ãã£ã§å€§ããç·©åã§ãã CMP ã®ã¡ãã£ã¢ãšã³ã·ã¹ãã ã¯ãããšæ°å¹Žã¯ãèªåã®æãåãããŠåããããã§ãŒãºãç¶ããšæããŸããããã§ããåããããã®éå
·ç«ãŠââ AndroidView / UIKitView / WebElementView ããã㊠expect/actual ââã¯æ¢ã«æã£ãŠããŠãå®ãããã¯ãã 3 ãã©ãããã©ãŒã ã«åºè·ã§ããæ°Žæºã«ãããŸãããã®èšäºã®æ°åãšã³ãŒãããåã倿ãè¿«ãããŠããæ¹ã®ææã«ãªãã°å¹žãã§ãã æåŸãŸã§èªãã§ããã ããããããšãããããŸããïŒ
ããã«ã¡ã¯ãKINTOãã¯ãããžãŒãºïŒKTCïŒã§ããŠãŒã¶ãŒãã¡ãŒã¹ãæšé²æŽ»åã®éå¶ã«é¢ãã£ãŠããã ããŒã³ãŒ ã§ãã KTCã§ã¯ ããŠãŒã¶ãŒãã¡ãŒã¹ãã ãäŒç€Ÿã®éç¹æ¹éã®ã²ãšã€ã«æ²ããŠããã瀟å
å匷äŒããŠãŒã¶ãŒã«å¯ãããNight!ãã®éå¬ããã®åãçµã¿ã®ã²ãšã€ã§ãã Vol.02 ã®ã¬ããŒãã«ç¶ããä»åã¯Vol.03ã®å
容ããäŒãããŸãã ããŒãã¯ãã¯ã€ãã¯ãªãªãµãŒããããµãŒãã¹ã«æããããã®ãŸãŸé²ããŠããã®ããªããšããéåæããããã«æ¹åæ¡ã«ãããæå
ã«ããæ
å ±ããäžåºŠç¢ºãããŠã¿ãé²ãæ¹ã§ãã ãµãŒãã¹ã®äŒç»ãæ¹åã«é¢ãã£ãŠãããšãããã®åç·ã§ãå¿
èŠãªæ
å ±ãŸã§ãã©ãçããã®ã ããããã説æã®éäžã§è¿·ã人ãããã®ã§ã¯ãªããããšæããå Žé¢ããããŸãã ããããéåæã¯æ¹åãèãããã£ããã«ãªããŸããããã®æç¹ã§ã¯æ¬åœã«åé¡ãèµ·ããŠããã®ãããŠãŒã¶ãŒã«ã©ããªåœ±é¿ãããã®ããŸã§ã¯ããããŸããã çç
®ãã®ãŸãŸããŒã ã«æ¹åæ¡ãããããšããŠãé¢ä¿è
ã®ç«å Žã«ãã£ãŠæã£ãŠããæ
å ±ãåæãç°ãªããããææ¡ã«è³ã£ãèæ¯ããçè§£ãåãä»ããå¿
èŠããããŸããäžå®ã®å
±æã¯åŸããããšããŠããé¢ä¿è
ãå€ãã»ã©æéãããããã®ã§ãã Vol.03ã§åãäžããã®ã¯ããã®éåæãšæ¹åæ¡ã®ããã ã«ãã確ãããããäžæ®µã¯ããå®è·µã§ããã 第3åã®å¯ãããNightã§ã¯ãããžã¿ã«æŠç¥éšã®äžç°è²ŽåŒããã«ç»å£ããŠããã ããŸããããªã³ã©ã€ã³çžè«ãVoCïŒVoice of CustomerïŒã客æ§ã®å£°ïŒã®åæããŠãŒã¶ããªãã£ãã¹ããªã©ãéããŠããŠãŒã¶ãŒã®å£°ãè¡åãæããæ¥åã«åãçµãã§ããŸããåœæ¥ã¯ããªã³ã©ã€ã³çžè«ãVoCããèŠããŠãã仮説ããæ°å
¥ç€Ÿå¡ãšã®ãŠãŒã¶ããªãã£ãã¹ãã§ç¢ºãããäºäŸã玹ä»ãããŸããã æ°å
¥ç€Ÿå¡ã«å®éã®ãµãŒãã¹ã䜿ã£ãŠããã ä»åã®äºäŸã®åºçºç¹ã¯ããªã³ã©ã€ã³çžè«ãVoCãèŠãäžã§çãŸããããµãŒãã¹ã®å©çšéäžã«ãããã€ãã®ã€ãŸãããèµ·ããŠããã®ã§ã¯ãªããããšãã仮説ã§ããã ãã ãçžè«ãåãåãããããããã®ã¯ããŠãŒã¶ãŒãèšèã«ããå°ãããšãäžå¿ã§ããå®éã®ç»é¢äžã®ã©ãã§æãæ¢ãŸããäœãçè§£ãã«ããã£ãã®ããŸã§ã¯ã€ãããŸããã ããã§ç»å£è
ã®äžç°ããã玹ä»ããã®ããæ°å
¥ç€Ÿå¡ã«ååããŠããããŠãŒã¶ããªãã£ãã¹ãã§ããã å
¥ç€Ÿããã°ããã®ã¡ã³ããŒã¯ãæ¥åããµãŒãã¹ã«é¢ããåæç¥èããŸã å°ãªãã瀟å
ã§ã¯åœããåã«ãªã£ãŠããèšèãæµãã«ããåããŠãµãŒãã¹ã«è§Šãã人ã«è¿ãåå¿ã瀺ããŸãã瀟å
ã¡ã³ããŒãªã®ã§ç¢ºèªãããå
容ãå
±æãããããçãæºåã§å®æœã§ãããå®è·µã®ãããããããã®æ¹æ³ãéžã°ããçç±ã®äžã€ã§ããã ãã¡ãããæ°å
¥ç€Ÿå¡ããã®ãŸãŸå®éã®ã客æ§ã代衚ããããã§ã¯ãããŸããã ä»åã¯ããµãŒãã¹ã®ã©ãã«ã€ãŸããããããããããŸã確ãããããã®æ€èšŒã§ãã ãã¹ãã§ã¯ãå®éã«ç»é¢ãæäœããŠããããªãããå©çšäžã®çºè©±ãè¿·ãã説æãèªãã ããšã®åå¿ã芳å¯ããŠãããŸãã説æãäœåºŠãèªã¿è¿ããæ¬¡ã«é²ãŸãã«èã蟌ããåã®ç»é¢ã«æ»ã£ãŠæ
å ±ãæ¢ãã æäœã®æ§åã远ãããšã§ãã©ã®å Žé¢ã§ç«ã¡æ¢ãŸã£ãã®ããã©ã®èª¬æãäŒããã«ããã£ãã®ãã倿ããããã«äœã®æ
å ±ãè¶³ããªãã£ãã®ããå
·äœçã«ãªã£ãŠãããŸãã èšèšäžã¯ã説æãèªãã°ãã®ãŸãŸæ¬¡ã®ç»é¢ãžé²ããæ³å®ã§ããå®éã«ã¯åãç®æãäœåºŠãèªã¿è¿ããŠãããå察ã«ãäœãåŽã課é¡ã ãšèããŠããç®æã§ã¯ãã»ãšãã©è¿·ããèµ·ããŠããªããç»å£ãéããŠç¹°ãè¿ãèªãããŠããã®ã¯ããã®ãæ³å®ããšãå®éã«èµ·ããŠããããšããåããŠèŠãããšã®å€§åãã§ããã 玹ä»ãããäŸã®ã²ãšã€ããæ¬äººç¢ºèªæžé¡ã®ç»åã¢ããããŒãã§ããææ°ã®ã¹ããŒããã©ã³ã§æ®ã£ãããããªåçã容éã®äžéãè¶
ãããšã©ãŒã«ãªããèšèšããæç¹ã§ã¯åé¡ã®ãªãã£ã仿§ã§ãããŠãŒã¶ãŒã®å©çšç°å¢ãå€ããããšã§ãæãã¬ãšããã«ã€ãŸãããçãŸããŸããå®éã®å©çšãèŠãŠåããŠãããã€ãŸããã¯ãããããåçŽãªãšããã«ãæœãã§ããŸãã ãšã©ãŒã«ééãã人ã¯ããã®ããšæ®ãçŽããŠå
ãžé²ããŠããã®ãããããšããããã§å©çšããããŠããŸã£ãŠããã®ããå®éã®è¡åãèŠãããšã次ã«ç¢ºããããããšãå
·äœçã«ãªããŸããããããŠãã²ãšãã®éåæããããŒã ã§ç¢ºãããããåãã«å€ãã£ãŠãããŸãã ãªã³ã©ã€ã³çžè«ãVoCããæããŠããéåæã«å®éã®è¡åãéãªã£ãããšã§ãã䜿ãã«ãããããšããæèŠã ãã§ã¯èŠããŠããªãã£ãéšåã確èªã§ããããããªäºäŸã§ããã ææ¡ã®åã«ãåãæ¯è²ãèŠã 確ãããçµæããããŒã ã§ã©ã䜿ãã®ãããã®è©±é¡ã§ç»å£ã®ããŒã¯ãŒãã«ãªã£ãŠããã®ããåãæ¯è²ãèŠãããšããèšèã§ãã ããã§ãããåãæ¯è²ããšã¯ãå
šå¡ãåãæèŠã«ãªãããšã§ã¯ãããŸãããæ¹åæ¡ãæãã§åããåãã®ã§ã¯ãªãããŠãŒã¶ãŒã®è¡åã声ãçãäžã«çœ®ããŠãé£ã«äžŠãã§èŠãããŠãŒã¶ãŒã«äœãèµ·ããŠããã®ããã©ã®æ
å ±ããã課é¡ãããããªããšèããã®ããäœãå€ããã°ãå°ãããšãè§£æ¶ããããšèšããããªã®ããç«å Žã圹å²ãéã£ãŠããŠãããŸããŠãŒã¶ãŒãå
±éã®èµ·ç¹ã«ããŠèããããšããæå³ã§ãã æ¹åæ¡ã ããå
ã«åºãŠãããšãåãåãåŽã¯ãäœã解決ããããšããŠããã®ãããªã仿±ãå¿
èŠãããã®ããããŸã確èªããªããã°ãªããŸããããŠãŒã¶ãŒã®è¡åãçºèšãåãåããããã°ãå
ã«å
±æãããŠããã°ãæ¹åæ¡ãžã®è³åŠã決ããåã«ããäœãèµ·ããŠããããããã話ãå§ããããŸãã çŽãããç®æã®ãªã¹ãã¯ãéçºã®çŸå Žã§ã¯ãã€ãé·ããªããã¡ã§ãã ãäžéšã®ç°å¢ã§ç»åã®ã¢ããããŒãããšã©ãŒã«ãªãããšãããããšããäžè¡ã®å ±åãšãç®ã®åã§ãŠãŒã¶ãŒãäœåºŠãåçãæ®ãçŽããæãæ¢ããŠããŸãæ§åãšã§ã¯ãåãäºå®ã§ãåãåãéã¿ãéããŸãã å®éã®è¡åãé¢ä¿è
ãäžç·ã«èŠãããšã§ããŠãŒã¶ãŒãžã®åœ±é¿ãèµ·ç¹ã«ãäœããæãã€ãããã話ããããã«ãªããŸãã æåã«çœ®ãã仮説ããæ£ãããšã¯éããŸããã確ãããŠã¿ããšãæ³å®ãšã¯å¥ã®å Žæã§è¿·ã£ãŠãããã課é¡ã ãšæã£ãŠããããšãå®éã«ã¯ããã»ã©åœ±é¿ããŠããªãã£ãããããŸãã ããã§ããèŠãŠããäºå®ãšä»®èª¬ãå
±æãããŠããã°ãæ³å®ãšéãçµæãåºããšãã«ã次ã«äœã確èªããããèãããããªããŸãã äºå®ã¯ãææ¡ãéãããã ãã®ææã§ã¯ãªããããŒã ã§æ¬¡ã®å€æãäžãããã®ææã«ããªããŸãã ä»åã®äºäŸã貫ããŠããã®ã¯ããã®èãæ¹ã ã£ãããã«æããŸãã åå è
ããå¯ãããã質å ã€ãã³ãåŸã®ã¢ã³ã±ãŒãã質åãã©ãŒã ã«ã¯ãä»åã®å
容ãå®è·µããéã«è¿·ããããªç¹ã«ã€ããŠãå
·äœçãªè³ªåãå¯ããããŸãããããšãã°ã次ã®ãããªå
容ã§ãã ã売äžã䌞ã°ããã®ãããªå€§ããªç®çãããã©ã®ç²åºŠãŸã§èª²é¡ãå°ããããŠèª¿æ»ãèšèšããã®ã ã¢ã³ã±ãŒãã§éãã声ããèšåã®æå³ã察象è
ãèžãŸããŠã©ãèªã¿åãã®ã éããäºå®ããèãæã倿ã§ããéã«ã©ãæŽçããã®ã ãŸããããŠãŒã¶ãŒäžå¿ã®èŠç¹ã§ãµãŒãã¹éçºãé²ããã«ã¯ãäœããå§ãããšããã®ããããããžã§ã¯ãåãªã©ãæ®æ®µäœ¿ãèšèããŠãŒã¶ãŒèµ·ç¹ã«å€ããããšã«ãæå³ãããã®ãããšãã£ã質åããããŸããã å
容ãçè§£ããŠçµããã®ã§ã¯ãªããèªåã®æ¥åã§è©Šããšãããã©ãã§è¿·ãã®ãããã®æ®µéãŸã§èžã¿èŸŒãã 質åãå€ãã£ãããšãå°è±¡ã«æ®ã£ãŠããŸããããã§æãã£ãè«ç¹ã¯ã次å以éã®ããŒããèããéã®ææã«ããŠããäºå®ã§ãã ãŸããæå
ã«ãããã®ãèŠãŠã¿ã ãŠãŒã¶ãŒãã¡ãŒã¹ãã®å®è·µãšãããšã倧ããããªèª¿æ»ãå°éçãªãªãµãŒãããå§ãããã®ã®ããã«æãããããããŸããã ä»åã®äºäŸã®èµ·ç¹ã¯ããªã³ã©ã€ã³çžè«ãVoCãªã©ããã§ã«æå
ã«ãã£ãæ
å ±ã§ãããããããæ°ã«ãªã£ãããšããæ°å
¥ç€Ÿå¡ãšã®ãŠãŒã¶ããªãã£ãã¹ãã§ç¢ºããããæ¥ã
ã®æ¥åã§çãŸããããã®ãŸãŸã§ããã®ããªããšããéåæããäºå®ãšã»ããã«ãããšãããŒã ã§æ€èšã§ããåãã«ãªããŸãã ç§èªèº«ãæ°ã«ãªãããšããããšãã€ã解決çãŸã§äžæ°ã«èããŠããŸããŸããä»åã®è©±ãèããªãããçããåºãåã«ããŸãäœãèµ·ããŠããã®ããäžåºŠèŠãŠã¿ãããšãå¿ããªãããã«ããããšæããŸããã æ¬¡ã«äœããæ°ã«ãªã£ããšãããŸãã¯æå
ã®ãã°ãåãåãããã²ãšã€ç¢ºèªããŠã¿ããä»åã®ã¬ããŒããããããªäžæ©ã«ã€ãªããã°ããããã§ãã é¢é£èšäº ããŠãŒã¶ãŒã«å¯ãããNight!ãVol.02ã¬ããŒã ââ my routeéçºããŒã ã®ãã£ãŒã«ãã¯ãŒã¯äºäŸ KINTO Technologiesã«ããããŠãŒã¶ãŒãã¡ãŒã¹ãæšé²ã®åãçµã¿ å®éããŒã¿ãšå®æ§ããŒã¿ãè¡ãæ¥ãã ââ ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒããããäŒ
ããã«ã¡ã¯ãEngineering Officeã®ã¢ã¯ã»ã·ããªãã£ã¢ããã±ãŒãã蟻åå©ã§ãã æ®æ®µäœ¿ã£ãŠããSlackã«ãããæãããªæçš¿ãæµããŠããŸããã ãã®æçš¿ã¯ãå®éã«æµããŠãã瀟å
ã®ãç¥ãããšåãæ§é ã§äœã£ãæ¶ç©ºã®ã¡ãã»ãŒãžã§ãã以éã®èªã¿äžãã®åŒçšãšç§æ°ã¯ããã¹ãŠãã®æçš¿ã宿ž¬ããå€ã§ãã ç®ã§èŠããšãæ°åãã®å
¥ã£ããç¥ããã§ãã NVDAãšããã¹ã¯ãªãŒã³ãªãŒããŒã§èŽããšããããªããŸãã ã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåãåéã瀟å
å匷äŒã®ç»å£è
ãåéããŸããã€ã¯ çµµæåãã«ãã« çµµæåã¯ã©ãã«ãŒ çµµæåãã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåã¯ã©ãã«ãŒ çµµæåãããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ãªããªãã° ããã³ãªãŒããæ¥æã®ç€Ÿå
å匷äŒã§è©±ããŠãããæ¹ãåéããŸããããŒãã¯èªç±ã§ãã15 åã®æ ã 3 ã€çšæããŠããŸããïŒä»¥äžçç¥ïŒ æå³ãšããŠåãåãããã®ã¯äœããªããŸãŸé³ãç¶ããæ¬æã®æåŸã®äžæãè¿·ã£ãŠããæ¹ãããŸãã¯æ°è»œã«å£°ããããŠãã ãããããèªã¿çµããé ã«ã¯ã2å31ç§ãéããŠããŸããã 1. ã¹ã¯ãªãŒã³ãªãŒããŒã§èªãããšããããš ã¹ã¯ãªãŒã³ãªãŒããŒã¯ãç§ãã¡èŠèŠé害è
ãé³å£°ãšç¹åã§ç»é¢ã®æ
å ±ãåãåããœãããŠã§ã¢ã§ãã åºæ¬çã«ã¯ãç»é¢ã«è¡šç€ºãããŠããå
容ãèšå·ãçµµæåãå«ããŠäžåäžå¥ãã®ãŸãŸèªã¿äžããããã«èšèšãããŠããæ¯æŽæè¡ã§ããåé ã®ã¡ãã»ãŒãžãNVDAã§èŽããšãäœãèµ·ããŠããããããå°ãäžå¯§ã«èŸ¿ã£ãŠã¿ãŸãã ãã©ãŒã«ã¹ãæçš¿ã«åœãã£ãç¬éãèªã¿äžããå§ãŸããŸããæåã«å±ãã®ã¯ãã¯ã©ãã«ãŒ çµµæåãã«ãã« çµµæåãã€ã¯ çµµæåãââã¿ã€ãã«ã®åã«çœ®ããã3ã€ã®çµµæåã§ãããããæããŠããããã¿ã€ãã«ã®ããåéã瀟å
å匷äŒã®ç»å£è
ãåéããŸããã«èŸ¿ãçãããã®åŸãã«ãããã€ã¯ çµµæåãã«ãã« çµµæåã¯ã©ãã«ãŒ çµµæåããç¶ããŸããæ¬¡ã®è¡ã¯çµµæåã ãã®è£
食è¡ã§ã13åã¶ãã®ãã¯ã©ãã«ãŒ çµµæåãããã«ãã« çµµæåãããã€ã¯ çµµæåããäžã€ãã€èªãŸããŸããåä»ãªã®ã¯ãã®æ¬¡ã§ãã â¥âµâ¥â¥âµâ¥ ã®ããã«èšå·ã䞊ãã§ããç®æãäžã€ã²ãšã€èªãŸãããããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ãªããªãã° ããã³ãªãŒã ãªããªãã° ããã³ãªãŒãããšç¶ããŸããæå³ãšããŠåãåãããã®ã¯äœããªããæèãæ··ä¹±ããããããªé³ã ããç¶ããŸããæ¬æã«å
¥ã£ãŠããããå°èŠåºãã®ãããªè¡ã®ååŸã«åã3ã€ã®çµµæåãæãŸã£ãŠããã®ã§ãèªã¿é²ããããã äœåºŠãåãé³ãå²ã蟌ã¿ãŸããããããæåŸã®äžæãè¿·ã£ãŠããæ¹ãããŸãã¯æ°è»œã«å£°ããããŠãã ããããã«å°éããèªã¿çµããé ã«ã¯ã2å31ç§ãçµã£ãŠããŸãã ç®ã§èŠããšãè£
食ã¯ã¡ãã»ãŒãžã®ãæ°åãããããã³ã·ã§ã³ããšããŠå±ããŸããã¿ã€ãã«ãç®ç«ãããçµµæåã§å£ç¯æãæ·»ããââæçš¿è
ã®æå³ã¯ãã¡ããšäŒããã工倫ãããæžãæ¹ã§ããäžæ¹ãè³ã§èŽãå Žé¢ã§ã¯åã工倫ããæ¬æã®åã«ç©ã¿éãªããæ
å ±ãšããŠå±ããªãé³ãšããŠåãåãããŸããSlackã§ãMicrosoft Teamsã§ããã¡ãã»ãŒãžã«çµµæåãè£
食ãå
¥ã£ãŠããã°ãåãããšãèµ·ããŸãã æ
å ±ã®äžèº«ã¯å€ãããªãã®ã«ã蟿ãçããŸã§ã®æéãå€ããã çµµæåã ãã§ã¯ãããŸãããSlackãTeamsã«Xã®æçš¿ãå«ããªãããã®URLã ããæçš¿ãããå Žåãã¢ããªãã¿ã€ãã«æ
å ±ãååŸã§ããªããšãNVDAã¯å¿ å®ã«ãã®URLã®æååãèªãã§ããŸãããç»é¢ã«ã¯ãªã³ã¯å
ã®æ
å ±ã®ãã¬ãã¥ãŒã衚瀺ãããŠããã®ã«ã§ãã ãç®ã§èŠã工倫ãããè³ã§èŽãæ
å ±ãã«ãªãå Žé¢ã§ã¯ãå±ãæ¹ãå€ããââããããæ¥åžžã®ãã£ããã®ãªãã§éãã«èµ·ããŠããããšã§ãã Slackã¯ä»äºã®ããåãã®å€§åãæµããå Žæã§ããããã§æ
å ±ã«èŸ¿ãçããã³ã«æéããããââããããæ¥åžžã®äžã§éãã«ç©ã¿éãªã£ãŠããŸããã 2. 1å29ç§ã§å±ãããã«ãªã£ã ãã®éåæãè§£æ¶ããããã«äœã£ãã®ããNVDAã¢ããªã³ã® Message Sweeper ã§ãã ãããŸã§ç§ãã¡ãŠãŒã¶ãŒãã§ããããšãšããã°ããã¹ã¯ãªãŒã³ãªãŒããŒã§èªã¿ã¥ããã®ã§ãçµµæåãèšå·ã®äœ¿çšãæ§ããŠãã ããããšæçš¿è
ã«ãé¡ãããããšã§ãããæçš¿è
ã®è¡šçŸã®éžæãå¶éããäŸé Œã§ããMessage Sweeper ã¯ããã®æ§å³ãå€ããããšããŠããŸããæçš¿è
ã蟌ãããæ°ã¥ããŠã»ããããšããæå³ã¯ãã®ãŸãŸã«ãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒã«ã¯èªã¿ããã圢ã§å±ããââåæ¹ã®æå³ãæç«ããå Žæãç®æããŸããã æ¬é³ãèšãã°ãèªã¿äžãã®ããã«ããã¹ããå å·¥ããããšã¯ãããŸã奜ãã§ã¯ãããŸãããã¹ã¯ãªãŒã³ãªãŒããŒã¯ç»é¢ã®æ
å ±ããã®ãŸãŸå±ããããã«èšèšãããæè¡ã§ãããæ¬æ¥ã¯çºä¿¡åŽãã¢ããªã®åŽãå€ããããšã§è§£æ±ºãããã¹ããã®ã ãšæã£ãŠããããã§ãã ããã§ããä»äºã®çŸå Žã«ã¯ããã®æ¹åãåŸ
ã€äœè£ããªãã»ã©ã®æ
å ±ã®æ³¢ããããŸããã§ããã ãæéããããã«åŠçããªããã°ãªããªãçŸå®ããããMessage Sweeper ã¯ãã®çŸå®ãžã®å¿çã§ããã ãããããçºä¿¡ããåŽãšåãåãåŽãåæ¹ã®æ©ã¿å¯ããããããã倧åã ãšæã£ãŠããŸãã åãã¡ãã»ãŒãžãéããšããå±ããŸãã ãåéã瀟å
å匷äŒã®ç»å£è
ãåéããŸã æ¥æã®ç€Ÿå
å匷äŒã§è©±ããŠãããæ¹ãåéããŸããããŒãã¯èªç±ã§ãã15 åã®æ ã 3 ã€çšæããŠããŸãã ãããªçºè¡šããåŸ
ã¡ããŠããŸã ïŒâŠâŠäžç¥âŠâŠïŒ ã¡ãã»ãŒãžã®çµµæå: ã¯ã©ãã«ãŒ16ãããã«ãã«14ãããã€ã¯14ã æ
å ±ãåãã®ã§ã¯ãªããåé
眮ãããçµµæåã§æ°åããå
¥ããŠãããæçš¿è
ã®ãã³ã·ã§ã³ã¯æ«å°Ÿã®ãµããªãŒãšããŠã¡ãããšå±ããæ¬æã¯æåããé çªã«è³ã«å
¥ã£ãŠããŸãã2å31ç§ããã£ãŠããèªã¿äžããã1å29ç§ã§å±ãããã«ãªããŸããã èªã¿äžããå®éã«ã©ãå€ããã®ãã¯ã4åã»ã©ã®åç»ã«ããŸãšããŠããŸããèªã¿äžãã®é³ãã®ãã®ãæ¬ç·šãªã®ã§ãé³ãåºããŠèŽããŠã¿ãŠãã ããã https://youtu.be/1oQD78-KO7Q åç»ã¯ãå
¬éçã®Message Sweeper 1.0.0ã§ãåé ã«æããã®ãšåãæ¶ç©ºã®æçš¿ãé¡æã«æ®åœ±ãããã®ã§ããååãåŠçããªãã«ãããšãã®èªã¿äžãã§2å31ç§ãåŸåããªã³ã«ãããšãã®èªã¿äžãã§1å29ç§ã§ããèªã¿äžãã®é床ãèšå®ããååãšåŸåã§å€ããŠããŸããã URLãåãã§ããMessage Sweeper ã¯ãªã³ã¯ã®URLãããŒãžã¿ã€ãã«ã«å·®ãæ¿ããŸããããšã€ã ãã£ãŒ ãã£ãŒ ã㌠ãšã¹ ã³ãã³ ã¹ã©ãã·ã¥ ã¹ã©ãã·ã¥...ããšèªãŸããŠãããã®ãããªã³ã¯å
ã®å
容ãšããŠå±ãããã«ãªããŸãããURLã ããèªãŸããŠããé ã¯ãããŒãžãéããŠã¿ããŸã§ããã®æ
å ±ãèªåã«é¢ä¿ãããã©ããããããããŸããã§ãããããŒãžã¿ã€ãã«ãå±ãããã«ãªã£ãŠãããä»èªãã¹ãããããšã§ããããèªã¿é£ã°ããŠããããââãªã³ã¯ãéãåã«èªåã§å€æã§ããããã«ãªããŸããã å€å㯠Slack ã ãã«ãšã©ãŸããŸãããTeams ã䜿ãå Žé¢ã¯äž»ã«é³å£°äŒè°ã§ãäŒè°äžã«åå è
ããã£ãããžãªã³ã¯ã貌ãããšããããŸãã話ãè³ã§è¿œããªãããURLæååã®èªã¿äžããå²ã蟌ãã§ããââãã®ç¶æ³ã¯ãSlack 以äžã«åå®ã§ãããTeams ã§ãåãããã«æŽããŠèªã¿äžããããã«ãªã£ãŠã䜿ãéå
·ãå¢ãããã³ã«ææ
¢ãå¢ããã®ã§ã¯ãªããã©ã®ãã£ããã§ãåãæè§Šãã§æ
å ±ãåãåããââãã®æèŠããæãã®ã»ãä»äºã®ãã³ããå€ããŸãããã¡ãã»ãŒãžãéããã³ã«ã仿¥ã¯ã©ãã ãé·ãèªã¿äžããæ¥ãã ããããšèº«æ§ããããšããªããªããæµããŠããæ
å ±ã«ãã®ãŸãŸä¹ããããã«ãªããŸããã NVDA+V ã§èªã¿äžãåŠçã®ON/OFFããµããšåãæ¿ããããå å·¥æžã¿ã®ããã¹ããç¹åãã£ã¹ãã¬ã€ã«ãåã圢ã§è¡šç€ºããããšãã£ã现éšããæ¥åžžã®äžã§å°ããã€ç©ã¿äžããŠãããã®ã§ãããã®æ©èœçŸ€ã¯ãAIã³ãŒãã£ã³ã°æ¯æŽããŒã« Claude Code ãšã®å
±åäœæ¥ã§çµã¿äžãã£ãŠããŸããã 3. äžäººã§éçºããŠãããã仲éãã§ãã éçºãé²ããäžã§ãXïŒæ§TwitterïŒã®URLã ããã©ãããŠãååŸã§ããã«ããŸãããSlack ã Teams ã®ã¡ãã»ãŒãžããã¥ãŒã¹ãµã€ãã®æ
å ±ã¯åŠçã§ããããã«ãªã£ãŠããã®ã«ãX ã®ãã¹ããžã®ãªã³ã¯ã貌ããããšãäžèº«ãå±ããªããŸãŸèªã¿äžããããŠããŸããããã§è©°ãŸã£ãŠãããšããååã®å€§åãããããããªãæäŒãããããããŸãããããšå£°ããããŠãããŸããã æ°æ¥åŸãX ã®ãã¹ãååŸãæ
åœãã PR ãäžãã£ãŠããŸããã 竹äžããããã¯ãããšããåé ã«æããã®ãšåããããªè£
食ãã£ã·ãã®ã¢ããã³ãã«ã¬ã³ããŒåéã®æçš¿ã«ã€ããŠããããªã¡ãã»ãŒãžãå±ããŸããã ãã¢ããã³ãã«ã¬ã³ããŒã®åéã¡ãã»ãŒãžãæ®éã«èªã¿äžãããããšæã£ããææªã®æçš¿ã§ããããã€ãæ°ä»ããããããšãããããŸãã Message Sweeper ããã®æçš¿ã«å¯Ÿå¿ã§ãããšãã竹äžããã¯ããæžãæ·»ããŠãããŸããã ãããããªäººãå
šæ¹äœçã«å¯Ÿå¿ã§ããè¡ã身ã«ã€ããŠã誰ãã«è² æ
ãæŒãä»ããªãã®ã倧äºã ãšå®æãããããŸããã ã©ã¡ããããã¡ãããæ±ããã®ã§ã¯ãããŸããã§ãããç§ã倢äžã§éçºããŠããã®ãèŠãŠãèå³ãæã£ãŠãããã®ã§ãã 4. è·å Žã§å°ããªåŸªç°ãåãå§ãã èŠèŠé害ã®ããç¥äººãMessage Sweeper ã䜿ã£ãŠã¿ãŠããããšãããããªèšèãããããŸããã ããããã§ Slack ãèŠãŠã¿ãæ°ã«ãªã£ãããããŸã§ã¯åºæ¬çã«èŠãŠããªãã£ãã ããã ãã§ãäœã£ãç²æããã£ããšæããŸããã ãã®äžé£ã®æµããæ¯ãè¿ããšãäœãã²ãšã€ã®åããèŠããŠããŸããåœäºè
ãäœãã仲éãè²ãŠãå¥ã®èª°ãã䜿ãå§ããã ãã®çµéšãããé
æ
®ãæ±ããªãé
æ
®ããšåŒã³ããæ°æã¡ããããŸããå¶åºŠã矩åãšããŠå€ããæã¡èŸŒãã ã®ã§ã¯ãªããæ¥åžžã®ä»äºã®äžã§èªç¶ã«è²ã£ãŠãã£ãââããããæèŠãæ®ã£ãŠããŸãããã®æèŠããç§ããã®èšäºãæžãããã£ãçç±ã§ããããŸãã ãã®åŸªç°ãããã£ãšåºãå Žæã§ãèµ·ããŠã»ãããšæã£ãŠããŸãã Message Sweeper ã¯ã誰ã§ãã€ã³ã¹ããŒã«ããŠäœ¿ããããã¡ã§å
¬éããŸããããœãŒã¹ã³ãŒããå
¬éããŠããã®ã§ãèªåã®ã¡ãã»ãŒãžã«å¯ŸããŠäœãããŠããã®ãã確ãããŠãã䜿ããŸãã ãªããžããª: https://github.com/kinto-technologies/message-sweeper ã¢ããªã³ã®ããŠã³ããŒã: https://github.com/kinto-technologies/message-sweeper/releases/latest ã€ã³ã¹ããŒã«ã®æé ãèšå®ã§ããé
ç®ãåäœã確èªããç°å¢ã¯ããªããžããªã®READMEã«ãŸãšããŠããŸããäžå
·åã®å ±åãèŠæã¯ããªããžããªã®Issueã§åãä»ããŠããŸãããããã£ããããŒã«ã®èªã¿äžãã§ãããã¯å±ãã«ãããªããšæããäœéšãããã°ããã²æããŠãã ããã
ã¯ããã« ããã«ã¡ã¯ããµã€ããŒã»ãã¥ãªãã£ãšçæAIæŽ»çšæšé²ãæ
åœããŠããããªã¡ã
ãŒã§ãã KINTOãã¯ãããžãŒãºïŒä»¥äžãKTCïŒã§ã¯ã 以åã®èšäº ã§ç޹ä»ããå
šç€Ÿæšªæãããžã§ã¯ããAI-Native Devããäžå¿ã«ãAIãã€ãã£ããªéçºã»æ¥åããã»ã¹ãžã®å€é©ãé²ããŠããŸããããŸã§ã¯è·çš®ãåããå€ãã®ã¡ã³ããŒããæ¥åžžæ¥åã®ããŸããŸãªå Žé¢ã§Claudeãå©çšããŠããŸããããããç°å¢ã®äžã§ããã¯ãŒãã€ã³ãäœæãAI-Nativeã«ãããããšèããã¡ã³ããŒãçŸãããããããClaudeã§å©çšãããããã¯ããã³ãã¬ãèªäœããããã«ãªããŸãããããããèªäœãã³ãã¬ã瀟å
ã§æŽ»çºã«äœ¿ãããŠããæ§åãç®ã«ããããšããä»åã®åãçµã¿ãå§ãã倧ããªãã£ããã§ãã äžæ¹ã§ããã®åãã«ã¯èª²é¡ããããŸããã èªäœãã³ãã¬ã¯ å人ããŒã¹ã»éå
¬åŒ ã«ãšã©ãŸãã瀟å
ã«è€æ°ã®æ§åŒã䞊è¡ããŠååšããŠãã AIçµç±ã§çæããã¹ã©ã€ãã® èŠãç®ããã©ãã©ã§ãäŒç€Ÿã®è³æãšããŠã®çµ±äžæãåºãªã ããã§ããããã®å人ã®åµæå·¥å€«ãæããŠã ãAIãå©çšããããäŒç€Ÿå
¬åŒãã¯ããã³ãã¬ããšããŠäžæ¬åã»å
šç€Ÿå±éãã ãããžã§ã¯ããç«ã¡äžããŸããããã®èšäºã§ã¯ããã®åãçµã¿ã玹ä»ããŸãã åãçµã¿ã®æŠèŠ ç®æããç¶æ
ãããžã§ã¯ãã®ãŽãŒã«ã¯ã·ã³ãã«ã§ã ãClaudeã«æç€ºããã ãã§ãKTCå
¬åŒãã¶ã€ã³ã«æã£ãã¹ã©ã€ããåºãŠãããç¶æ
ãå
šç€Ÿå¡ã«æäŸãã ããšã§ããããã«ãããæ¬¡ã®3ã€ã®äŸ¡å€ãçããŸããã çã å
容 æéççž® è³æäœæããã®ãŸãŸAIãžæž¡ããããã«ãªããäœææéãççž®ã§ãã ãã¶ã€ã³ã®çµ±äž AIçµç±ã§ããèŠãç®ã®æã£ãKTCãããè³æã«ãªã å人ã®åãçµã¿ã®çµç¹å AI-Nativeãªå人ã®åµæå·¥å€«ããçµç¹ãšããŠã®ææã«åŒãäžãã 3ã€ç®ãæ¬ãããžã§ã¯ãã®ç¹åŸŽçãªãã€ã³ãã§ããåã«ãã³ãã¬ãäœãã®ã§ã¯ãªãã ãã§ã«å人ãçã¿åºããŠããAI-Nativeãªå·¥å€«ããäŒç€Ÿå
¬åŒãã®æšæºã«ãã ããšãéèŠããŸãããAI-Native Devãæåéžæã®è»žãšããŠæ²ããŠãããå人ã®ç¥èŠãçµç¹å
šäœã§æŽ»ããããããã¯ããã³ãã¬ãšãã誰ã«ãšã£ãŠã身è¿ãªé¡æã§å®è·µãã圢ã§ãã äœå¶ãšé²ãæ¹ æšé²ã¯AI-Native Devãæ
ãããã³ãã¬ãŒãã®ãã¶ã€ã³ã¯ã¯ãªãšã€ãã£ãã°ã«ãŒããæ
åœãã忥äœå¶ã§é²ããŸãããä»åŸã¯æè¡åºå ±ã°ã«ãŒããšã飿ºããªãããå©çšä¿é²ã«åãçµãã§ããäºå®ã§ãã å
šäœåã¯æ¬¡ã®ãšããã§ãã é²ãæ¹ãšããŠç¹ã«å€§äºã«ããã®ã¯ã次ã®åæã§ãã ãAIã§åçŸãããããã©ãŒããã / ã¹ã¿ã€ã«ã¬ã€ãã¯ã©ãããã¹ãããã AIå©çšè
åŽããéç®ããŠãã¶ã€ããŒãžã€ã³ããã ãããã¶ã€ããŒããããåããŠãã©ãŒããããèšèšããã ãã¶ã€ã³ã宿ããŠããAIã«å¯Ÿå¿ãããã®ã§ã¯ãªããèšèšã®æ®µéãããAIãåºåããããæ§é ããèŠä»¶ã«å«ããŠããŸãããã®åãçµã¿ããAI-NativeããšåŒãã§ããã®ã¯ãããããé²ãæ¹ã«ãããã®ã§ãã ãã§ãŒãºã¯æ¬¡ã®ããã«åºåããŸããã ãã§ãŒãº å
容 Phase 0 ãã¯ããã³ãã¬ãžã®æåŸ
倿Žç Phase 1 ãããå°ãã³ãã¬ã®ç€Ÿå
å±é & ãã£ãŒãããã¯åé Phase 2 å
¬åŒãã³ãã¬ã®äœæãšãAIãå©çšãããã圢ïŒã³ã³ããŒãã³ãåã»ã¹ãã«åïŒãžã®å€æ Phase 3 å
šç€Ÿã¢ããŠã³ã¹ Phase 4 å©çšè
ãã¢ãªã³ã°ãšç¶ç¶çãªã¡ã³ããã³ã¹ ãããªã宿åãäœãã®ã§ã¯ãªãããŸãæå¿ã®èªäœãã³ãã¬ããããå°ãšããŠå±éããŠãã£ãŒãããã¯ãéãïŒå
¬éåŸ50å以äžãé²èЧã»ããŠã³ããŒãïŒããã®å£°ãããšã«å
¬åŒçãäœãããšãã2段éãèžãã§ããŸãã AIãå©çšãããããã³ãã¬ãŒãã®èšèš 宿ãããã³ãã¬ãŒãã«ã¯ãAIãšã®çžæ§ãé«ããããã®å·¥å€«ãããã€ãå
¥ã£ãŠããŸãã ããããŒïŒããã£ã®ã³ã³ããŒãã³ãæ§é ã¹ã©ã€ãããããããŒïŒããã£ïŒã·ã³ã°ã« / ã¹ããªãã / ãã«ãã«ã©ã ïŒããšããã³ã³ããŒãã³ãã®çµã¿åãããšããŠæ§é åããŸãããAIã¯èªç±ãªã¬ã€ã¢ãŠããæ¯åãŒãããäœããããã æ±ºããããéšåã®çµã¿åãããéžã¶æ¹ãå®å®ããŠé«å質ãªåºåãè¿ãã ããã§ãã ã¬ã€ã¢ãŠãéžæã«ãŒã«ã®ã¹ãã«å ãã©ããªå
容ã®ãšãã«ãã©ã®ã¬ã€ã¢ãŠããéžã¶ã¹ããããšããã«ãŒã«ãClaudeã®SkillïŒã¹ãã«ïŒãšããŠæŽåããŸãããããã«ãããæ¯åãã³ãã¬ãã¡ã€ã«ãæž¡ããªããŠããClaudeãèªåŸçã«é©åãªã¬ã€ã¢ãŠããéžæããŠã¹ã©ã€ããçµã¿ç«ãŠãããŸãã äœ¿ãæ¹ã¯3éã å±éã«ããã£ãŠã¯ãäœæ¥ã¹ã¿ã€ã«ã«åãããŠ3éãã®äœ¿ãæ¹ãçšæããŸããã å©ç𿹿³ åããŠãã人ã»å Žé¢ æ¹æ³1ïŒãã³ãã¬PPTXãClaudeãžæž¡ã ãŸã詊ããã人ãPowerPointã§ã®æåç·šéã䜵çšããã人 æ¹æ³2ïŒSkillã䜿ã è³æäœæã®é »åºŠãé«ãäººãæ¯åãã¡ã€ã«ãçšæããæéããªãããã人 æ¹æ³3ïŒClaude Designã䜿ã èŠãç®ã察話ããªãã现ããè©°ããã人ã1æãã®ãããžã¥ã¢ã«éèŠã®è³æ æ¹æ³1ã¯ãClaude Coworkããã£ããã«ãã³ãã¬ãã¡ã€ã«ãšã¢ãŠãã©ã€ã³ãæž¡ããŠããã®ãã³ãã¬ãèžè¥²ããŠããšäŸé Œããããã¡ã°ãæè»œãªå
¥å£ã§ãã æ¹æ³2ã®Skillã«ã¯ãã³ãã¬ã®ãã¶ã€ã³æ
å ±ãçµã¿èŸŒãŸããŠããããã瀟å
ã®ãã©ã°ã€ã³ããŒã±ãããã¬ã€ã¹ããäžåºŠã€ã³ã¹ããŒã«ããã°ããã¡ã€ã«ãçšæããªããŠãäŸé Œããã ãã§å
¬åŒãã¶ã€ã³ã®è³æãçæãããŸãã æ¹æ³3ã®Claude Designåãã«ã¯ãé
è²ã»ãã©ã³ãã»ã¬ã€ã¢ãŠããå®çŸ©ãããã¶ã€ã³ã·ã¹ãã ïŒããŒã¯ã»ã©ã€ãã®2ããŒã³ïŒãçšæããŸãããpptxãã¡ã€ã«ãšããŠé
åžã»ç·šéãããè³æã¯æ¹æ³1ã»2ãèŠãç®ã®äœã蟌ã¿ãåªå
ãããè³æã¯æ¹æ³3ããšãã䜿ãåãã§ãã ãè¿·ã£ããæ¹æ³1ããããšããå°ç·ã«ããŠãAIã§ã®è³æäœæã«éŠŽæã¿ã®ãªã瀟å¡ã§ãäžæ©ç®ãèžã¿åºããããããŠããŸãã ããããã®é²ãæ¹ã¯ãå
ã«ã¢ãŠãã©ã€ã³ãåºããã ã©ã®æ¹æ³ã§ãå
±éããŠæ¡å
ããŠããã®ãã ãããªãpptxãäœããããå
ã«Claudeãšå£æã¡ããŠã¢ãŠãã©ã€ã³ãMarkdownã§åºãã é²ãæ¹ã§ããçæãããpptxã«ã2æç®ãçŽããŠããæ§æãå€ããŠããšä¿®æ£ãç¹°ãè¿ããšããã®ãã³ã«ãã¡ã€ã«ã®åçæãèµ°ããæéãããŒã¯ã³ã倧ããæ¶è²»ããŸããå
容ã®è©Šè¡é¯èª€ã¯Markdownäžã§æžãŸããpptxã®çæã¯æåŸã®1åã ãã«ããããšã§ãããŒã¯ã³æ¶è²»ã倧ããæããããŸãã ãŸããçæãããè³æã®æ°å€ã»åºæåè©ã»äºå®é¢ä¿ã¯å¿
ã人ã®ç®ã§ç¢ºèªããããšããéçšãããããŠæ¡å
ããŠããŸãããã³ãã¬èªäœãäœã£ãŠçµããã§ã¯ãªããå©çšè
ãžã®ãã¢ãªã³ã°ããã£ãŒãããã¯ãã©ãŒã ãéããŠãã¬ã€ã¢ãŠãã®è¿œå ãªã©ãå«ããŠç¶ç¶çã«ãã©ãã·ã¥ã¢ããããŠããäºå®ã§ãã ãããã« ãAIã«æç€ºããã ãã§ãäŒç€Ÿå
¬åŒãã¶ã€ã³ã®ã¹ã©ã€ããåºãŠãããã®ã¯ã䜿ã£ãŠã¿ããšã·ã³ãã«ã«äŸ¿å©ã§ãããããŠããããå®çŸããéµã¯é«åºŠãªAIæè¡ã§ã¯ãªãã AIãæ±ãããã圢ã«ãã³ãã¬ãŒããšãããåããèšèšãçŽãããš ããã㊠ãã®åããã¶ã€ããŒãšAIå©çšè
ãäžç·ã«äœãããš ã§ããããã¶ã€ã³ã«ãŒã«ãã©ããŸã§å³å¯ã«çžããã©ããç·©ãããã®å¡©æ¢
ãããã®éçšã§èŠããŠããåç©«ã§ãã å人ã®åµæå·¥å€«ãšããŠå§ãŸã£ãAI-Nativeãªåãããçµç¹ã®å
¬åŒãªææã«åŒãäžããããã®ã¢ãã«ã¯ãã¯ããã³ãã¬ã«éãããããŸããŸãªç€Ÿå
è³ç£ã«é©çšã§ããã¯ãã§ãããã®èšäºããåããããªåãçµã¿ãæ€èšããŠããæ¹ã®åèã«ãªãã°å¬ããã§ãã AI-Native Devã®æŽ»åããã¬ããžã¯ãåŒãç¶ãããã¯ããã°ã§çºä¿¡ããŠãããŸããæåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
ãã®èšäºã§ãããããš 2026幎7æ31æ¥ãKINTOãã¯ãããžãŒãºïŒä»¥äžãKTCïŒã®Osaka Tech Lab JCTãäŒå ŽãšããŠãAnthropicå
¬èªã®ã³ãã¥ããã£ã€ãã³ããClaude Managed Agents Workshopããéå¬ãããçŽ30åãåå ããŸãããäž»å¬ã¯Claude Community Ambassadorã§ãããKTC瀟å¡ã§ãããæ£®ç°ããã§ãã Claude Managed Agentsã¯ããšãŒãžã§ã³ããåããããã®åå°ïŒå®è¡å¶åŸ¡ã»ãµã³ãããã¯ã¹ã»å±¥æŽããã¡ã€ã«ã®ä¿æïŒãAnthropicåŽãçšæããŠããããµãŒãã¹ã§ããå©çšè
ã¯ãšãŒãžã§ã³ãã®èšå®ãšã¡ãã»ãŒãžã®éä¿¡ã«éäžã§ããŸãã ã¯ãŒã¯ã·ã§ããã®ææã¯èª°ã§ãåç
§ã§ãã圢ã§å
¬éãããŠããŸããã€ãã³ãã«åå ããŠããªããŠããåãæé ã§ãšãŒãžã§ã³ããäœã£ãŠåãããŸãã ãã³ãºãªã³ã§å¯äžã€ãŸãããã®ã¯ClaudeåŽã§ã¯ãªããå€éšãµãŒãã¹ã§ããJina AIã®APIããŒã§ãããããŒã«ç¡æããŒã¯ã³ãæ®ã£ãŠãããšã¯éããªãã®ã§ãææã詊ãåã«æ®ããŒã¯ã³ã確èªããŠãããšè¶³ãæ¢ããã«é²ããããŸãã ã¯ããã« ããã«ã¡ã¯ãKINTOéçºéšã§ããã³ããšã³ããšã³ãžãã¢ãããŠãã éœè€ ã§ããæ®æ®µã¯KINTOã®ã·ãã¥ã¬ãŒã·ã§ã³ãç³ã蟌ã¿ããã€ããŒãžã®éçºãæ
åœããŠããŸãã 2026幎7æ31æ¥ïŒéïŒãKTCã®Osaka Tech LabãäŒå ŽãšããŠã Claude Community EventãClaude Managed Agents Workshopã ãéå¬ãããŸãããç§ã¯äŒå ŽæäŸã»éå¶ãµããŒããæ
åœãã€ã€ãåå è
ãšããŠãã³ãºãªã³ã«ãåãçµã¿ãŸããã æ¬èšäºã¯ããã®éå¬å ±åã§ãã  åœæ¥ã®ãšã³ãã©ã³ã¹ã®æ§å éå¬ããã€ãã³ãã®æŠèŠ é
ç® å
容 ã€ãã³ãå Osaka | Claude Managed Agents Workshop ïŒClaude Community EventïŒ é嬿¥ 2026幎7æ31æ¥ïŒéïŒ18:30ã21:05 äŒå Ž KINTOãã¯ãããžãŒãº Osaka Tech Lab JCTïŒå€§éªåžååºæ¢
ç°3-1-3 ããŒã¹ã²ãŒããã«ãã£ã³ã°20éïŒ äž»å¬ æ£®ç°ããïŒClaude Community AmbassadorïŒ äŒå ŽæäŸ KINTOãã¯ãããžãŒãº åå è
çŽ30å ã¿ã€ã ããŒãã«ã¯æ¬¡ã®ãšããã§ãã æé å
容 18:30ã19:00 åä»ã»äº€æµ 19:00ã19:10 ãªãŒããã³ã°ã»äŒå Žèª¬æ 19:10ã19:30 Claude Managed Agentsã®è§£èª¬ 19:30ã20:45 ãã³ãºãªã³ïŒå人ããŒã¹ïŒ 20:45ã21:00 ãããã¯ãŒãã³ã° 21:00ã21:05 ã¯ããŒãžã³ã° äŒå ŽæäŸã®çµç·¯ äž»å¬ã® 森ç°ãã 㯠Anthropicããèªå®ãããClaude Community Ambassador ã§ãããåæã«KTCã®Principal Generative AI Engineerã§ããããŸãã瀟å
åãã®AIãšãŒãžã§ã³ãæ§ç¯ã¯ãŒã¯ã·ã§ãããéå¬ãã話ã¯ã ãã¡ãã®èšäº ã§ç޹ä»ãããŠããŸãã ä»åã®ã€ãã³ãã¯ããã®æ£®ç°ãããå Žæè²žãã€ãã³ããšããŠç€Ÿå
ã§èµ·æ¡ããéå¶ååè
ã®åéãããã£ããšããã«ç§ãæãæããããšããæµãã§å®çŸããŸããã äŒå ŽïŒOsaka Tech Lab JCT Osaka Tech Labã¯ãæ±äº¬ã»åå€å±ã«æ¬¡ãKTCã®ç¬¬3ã®æ ç¹ã§ãã2022幎ã«å¿ææ©ã§éèšããã2025幎å€ã«JR倧éªé§
çŽçµã®ããŒã¹ã²ãŒããã«ãã£ã³ã°ãžç§»è»¢ããŸããããéGOïŒçºSHINïŒCO-LABããšããã³ã³ã»ãããæ²ããŠããŠãäŒè°å®€ã«GARAGEãPITãã¢ãŒã¿ãŒããŒã«ãšãã£ãè»ã«ã¡ãªãã ååãä»ããŠããããå·å宀ã®åºãã¬ãŒã·ã³ã°ã©ã€ã³ãæš¡ããéã³å¿ã®ãããã¶ã€ã³ã«ãªã£ãŠãããããŸãã ä»å䜿çšãã Osaka Tech Lab JCT ã¯ããã®20éã«ããã€ãã³ãã¹ããŒã¹ã§ãã40åã»ã©ãå容ã§ããåºãã§ãä»åã®åå è
ã¯çŽ30åã§ãããJR倧éªé§
çŽçµãšããç«å°ãªã®ã§ãéæå€ã®ã€ãã³ãã§ãã¢ã¯ã»ã¹ããããäŒå Žã§ãã ã¢ã¯ã»ã¹æ¹æ³ã¯ KINTOãã¯ãããžãŒãºOsaka Tech Labã«ãæ¥å Žã®ãããž ã§åçã€ãã§æ¡å
ããŠããŸãã åœæ¥ã®æ§å åœæ¥ã¯ãAnthropicã§ã³ãã¥ããã£æŽ»åãæ
åœãããŠãã 蟻ãã ã«ããæ¥å Žããã ããäŒã®åé ã«ãæšæ¶ãããã ããŸããã倧éªã§ã®ã¢ã³ããµããŒäž»å¬ã€ãã³ãã¯ä»åãåããŠã§ããããšãä»åŸãé¢è¥¿ã§ã³ãã¥ããã£ãçãäžããŠãããããšããã話ããããŠããŸããã ç¶ã30åã¯ã森ç°ããã«ããClaude Managed Agentsã®è§£èª¬ããŒãã§ãã  解説ããŒãã®æ§åãã¹ã¯ãªãŒã³ã«æåœ±ãããŠããã®ãåœæ¥äœ¿çšããææã§ã ãã®åŸã¯ãã³ãºãªã³ã«ç§»ããŸããåèªã®ããŒã¹ã§é²ãã圢åŒã ã£ãã®ã§ãå
šå¡ãé»ã
ãšããŒããŒããå©ããŠããæéãšãæãæ¢ãŸã£ã人ãåšãã«èããŠè³ªåãé£ã³äº€ãæéãã亀äºã«èšªããŠããŸããã åããŒãã«ã«ã¯ãèåãçšæãããŠããŠãã€ãŸã¿ãªãããã³ãºãªã³ãé²ããããŸããã  ãã³ãºãªã³äžã®äŒå Žãåèªã®ããŒã¹ã§é²ããŸã ãããããšäœæ¥ãé²ããªããæ£®ç°ãããäŒå Žãåã£ãŠãå°ã£ãŠãã人ãããªãã声ããããŠãµããŒãã«å
¥ãå Žé¢ããããŸããã æãæããã°äž»å¬è
ãçŽæ¥èŠã«æ¥ãŠããã ãšããäœå¶ã ã£ãã®ã§ãæ®æ®µClaude Codeã䜿ã£ãŠããªã人ã§ãå®å¿ããŠåå ã§ããã€ãã³ãã ã£ããšæããŸãã  ãµããŒãã«å
¥ã森ç°ãã åå è
ã®å¹Žéœ¢å±€ã¯å¹
åºããåŠçã®æ¹ãåå ãããŠããŸããã  Osaka Tech Lab JCTã¯40åã»ã©ãå容ã§ããŸã åå è
ã«ã¯ãClaude Managed Agentsã詊ãããã®$50çžåœã®APIã¯ã¬ãžãããé
åžãããŸããã ããã«èŸ»ããããã¯ãAnthropicå
¬åŒã®ããã«ãã£ãæäŸããŠããã ããŸããã  Claude Codeã®ãã¹ã³ãããã£ã©ã¯ã¿ãŒãClawdãã®ã¬ãããã¿ããµã³ã°ã©ã¹å§¿ãšãçœè¡£ã«ãã©ã¹ã³ãæã£ãç§åŠè
å§¿ã®2çš®é¡ããããŸãã  M5Stack Cardputer ADV æ°ã«éãã®ããããã«ãã£ã¯åžæè
ãçšæãããæ°ãäžåã£ãããã ãããããå€§äŒ ã§ããããäººãæ±ºããŸãããäŒå Žãäžçªçãäžãã£ãç¬éã ã£ããããããŸããã  ããããã倧äŒã®æ§å  æåŸã«åå è
ã®çãããšãæã«ããŠããã®ãClawdã®ã¬ãããã¿ã§ã Claude Managed Agentsãšã¯ ããã§ãåœæ¥ã®ããŒãã ã£ãClaude Managed Agentsã«ã€ããŠãç§ãçè§£ããç¯å²ã§æŽçããŠãããŸãã AIãšãŒãžã§ã³ããèªåã§ãŒãããäœãããšãããšãã¢ããªã±ãŒã·ã§ã³åŽã§çšæããªããã°ãªããªããã®ãæå€ãšå€ããããŸããã¢ãã«ãåŒãã§ããŒã«ãå®è¡ãããã®çµæããŸãã¢ãã«ã«æž¡ãããšããç¹°ãè¿ãã®å¶åŸ¡ãããŒã«ãå®å
šã«åããããã®å®è¡ç°å¢ãéäžã§çæããããã¡ã€ã«ãäŒè©±å±¥æŽã®ä¿æãClaude Managed Agentsã¯ããã®åå°ãAnthropicåŽããŸãããšçšæããŠããããµãŒãã¹ã§ããå©çšè
ãçšæããã®ã¯ãã©ããªãšãŒãžã§ã³ãã«ãããããšããèšå®ãšããäœãããŠã»ãããããšããã¡ãã»ãŒãžã ãã«ãªããŸãã Messages APIãšã®æ£²ã¿åãã¯ãå
¬åŒããã¥ã¡ã³ãã§ã¯ ãã现ããå¶åŸ¡ã欲ãããªãMessages APIãæ°åããæ°æéãããé·æéå®è¡ã¿ã¹ã¯ãéåæåŠçãªãClaude Managed Agents ãšããæŽçã«ãªã£ãŠããŸãã ç»å ŽããæŠå¿µã¯4ã€ã§ãã æŠå¿µ äœãæãã ãšãŒãžã§ã³ã 䜿ãã¢ãã«ãã·ã¹ãã ããã³ãããããŒã«ãMCPãµãŒããŒãã¹ãã«ããŸãšããèšå®ãäžåºŠäœãã°IDã§ã»ãã·ã§ã³ããåç
§ã§ãã ç°å¢ ãšãŒãžã§ã³ããèµ°ãããå ŽæãAnthropicåŽã®ã¯ã©ãŠããµã³ãããã¯ã¹ãšãèªåãã¡ã§ç®¡çããã€ã³ãã©äžã§åããã»ã«ããã¹ãåãéžã¹ã ã»ãã·ã§ã³ ç°å¢ã®äžã§å®éã«åããŠãããšãŒãžã§ã³ãã®å®äœãã¿ã¹ã¯ãå®è¡ããŠææç©ãæ®ã ã€ãã³ã ã¢ããªã±ãŒã·ã§ã³ãšãšãŒãžã§ã³ãã®ããã ã§äº€æãããã¡ãã»ãŒãžããŠãŒã¶ãŒã®æç€ºãããŒã«ã®å®è¡çµæãã¹ããŒã¿ã¹æŽæ°ãªã©ã該åœããã¬ã¹ãã³ã¹ã¯SSEã§ã¹ããªãŒãã³ã°ããã ãã³ãºãªã³ãããšãŒãžã§ã³ããäœã â ç°å¢ãäœã â ã»ãã·ã§ã³ãèµ·åãã â ã¡ãã»ãŒãžãéãããšããé çªããã®ãŸãŸãã©ãæ§æã«ãªã£ãŠããã®ã§ããã®4ã€ã®é¢ä¿ã¯æãåãããŠãããã¡ã«èªç¶ãšé ã«å
¥ããŸããã ãµã³ãããã¯ã¹ã®äžã§ã¯ãbashããã¡ã€ã«ã®èªã¿æžãã»ç·šéãglobã»grepãWebæ€çŽ¢ã»ååŸãšãã£ãããŒã«ãæåãã䜿ããŸããããã«MCPãµãŒããŒãç¹ãã°å€éšãµãŒãã¹ã®ããŒã«ãåŒã³åºããããšããçµã¿ç«ãŠã§ãã æéã¯æ¬¡ã®2軞ã§ãã ã»ãã·ã§ã³ã®ãªãã§ã¢ãã«ã䜿ã£ãããŒã¯ã³ã¶ãã®ãéåžžã®APIæéïŒããã³ãããã£ãã·ã³ã°ã®ä¹æ°ãåãããã«é©çšãããŸãïŒ ã»ãã·ã§ã³ã©ã³ã¿ã€ã ïŒã»ãã·ã§ã³æéããã$0.08ïŒ ã»ãã·ã§ã³ã©ã³ã¿ã€ã ã¯ããªç§åäœã§èšæž¬ãããã»ãã·ã§ã³ã running ã®ããã ã ãå ç®ãããŸããæ¬¡ã®ã¡ãã»ãŒãžãåŸ
ã£ãŠãã idle ã®æéã¯å ç®ãããŸãããè£ãè¿ãã°ã ãšãŒãžã§ã³ããé·æéæŸçœ®ããŠãåŸ
æ©äžã®ã³ã¹ãã¯å¢ããªã ãšããããšã§ãããã¯é·æéã¿ã¹ã¯åããšããäœçœ®ã¥ããšæŽåããŠããŸãããªããã»ãã·ã§ã³å
ã§Webæ€çŽ¢ãèµ°ã£ãå Žåã¯1,000æ€çŽ¢ããã$10ãå¥éããããŸãã æ¬èšäºå·çæç¹ã§Claude Managed Agentsã¯ããŒã¿çã§ãã詳现㯠å
¬åŒããã¥ã¡ã³ã ãš æéããŒãž ãåç
§ããŠãã ããã ãã³ãºãªã³ããã£ãŠã¿ã ç§ã¯åä»ãæ
åœããŠããããããã³ãºãªã³ã®éå§ãå°ãé
ããŸãããããã«ã€ãã³ãã®æ§åãæ®åœ±ããªããé²ããŠããã®ã§ãäžçŽã«ã¯å±ãã äžçŽãŸã§ ã®å°éã§ãã ææã¯åçŽã»äžçŽã»äžçŽã®3æ®µéæ§æã«ãªã£ãŠããŠãå
å®¹ã¯æ¬¡ã®ãããªãã®ã§ããã åçŽ ïŒãã³ãã¬ãŒããDeep researcherããããªãµãŒããšãŒãžã§ã³ããäœãããã£ããã§èšå®ãèªåçæããŠMicrosoft Learnã®MCPãµãŒããŒã䜿ãã¯ã€ãºãšãŒãžã§ã³ããäœããèªç±æŒç¿ äžçŽ ïŒJina AIã®MCPãµãŒããŒã«ã€ãªããWebãªãµãŒããšãŒãžã§ã³ããã ã³ã³ãœãŒã«ã»CLIïŒ ant ïŒã»Python SDK ã®3éã ã§äœã äžçŽ ïŒåæã¬ããŒãïŒã¹ã©ã€ãçæïŒãã¹ã±ãžã¥ãŒã«å®è¡ã§GitHub Pagesãæ¯ææŽæ°ãGmail飿ºãèšæ¶ãããšãŒãžã§ã³ãããã«ããšãŒãžã§ã³ã åããšãŒãžã§ã³ããã³ã³ãœãŒã«ã»CLIã»SDKã®3éãã§äœãããäžçŽã®èšèšãç¹ã«è¯ãã§ããŠããŠãç»é¢æäœã§çè§£ããæŠå¿µããã®ãŸãŸAPIã®ãªãœãŒã¹æ§é ã«å¯Ÿå¿ããŠããããšãäœæã§ããŸããã ãããŠç¹çãã¹ã㯠ææã®å®æåºŠ ã§ãã説æãäžå¯§ã§ç»åãè±å¯ã«çšæãããŠããŠãå
¬åŒãæäŸããææãšèšãããŠãéè²ãªããªãšæããå
容ã§ããããããã§Claude Managed Agentsã®éšåã§ã¯ãŸã£ããã€ãŸããããšãªãé²ããããŸããã ã€ãŸãããã®ã¯Jina AIã®APIã㌠匷ããŠæãããªããäžçŽã§äœ¿ã Jina AIã®APIã㌠ãå¯äžã®è©°ãŸãã©ããã§ãããç§ã®APIããŒã«ã¯ç¡æããŒã¯ã³ã®æ®ãããªããJina AIã®ããŒã«ãåŒã³åºããŸããã§ããã äžçŽã§äœãã®ã¯Webæ€çŽ¢ãããªãµãŒããšãŒãžã§ã³ãã§ãæ€çŽ¢ã¯ Jina AI ã® MCPãµãŒã㌠çµç±ã§å®è¡ããŸãããã®æ€çŽ¢ç³»ã®ããŒã«ã¯APIããŒãå¿
é ã§ããAPIããŒèªäœã¯ã¢ã«ãŠã³ãäœæãã¯ã¬ãžããã«ãŒãç»é²ããªãã«ãããããŒãžããååŸã§ããã®ã§ããã ãã®ããŒã«ç¡æããŒã¯ã³ãæ®ã£ãŠãããšã¯éããŸãã ã :::message ããããææãè©Šãæ¹ã¯ãå
ã« jina.ai ã®ãAPI KEY & BILLINGãã¿ãã§APIããŒã®æ®ããŒã¯ã³ã確èªããŠãããšãäžçŽã§è¶³ãæ¢ããã«é²ããããŸãã ::: ã€ãã³ãã«åå ããŠããªããŠãææã詊ããŸã ãã®ã¯ãŒã¯ã·ã§ããã®ææã¯ã森ç°ãããäœæãããã®ãå
¬éãããŠããŸãã Claude Managed Agents WorkshopïŒææãµã€ãïŒ ã€ãã³ãã«åå ããŠããªããŠããäºåæºåããäžçŽãŸã§åãæé ããã©ããŸããClaude Managed Agentsãè§Šã£ãŠã¿ããæ¹ã«ã¯ãå
¬åŒããã¥ã¡ã³ããèªã¿èŸŒãããå
ã«ãã¡ããäžåšããã®ãããããã§ãã :::message ãã®ææã¯Anthropicã®å
¬åŒã³ã³ãã³ãã§ã¯ãªããéå
¬åŒã®åŠç¿ææã§ããã©ã€ã»ã³ã¹ãCC BY-NC-ND 4.0ã®ãããæ¬èšäºã§ã¯äžèº«ã®è»¢èŒã¯ããããªã³ã¯ã®ç޹ä»ã«ãšã©ããŠããŸãã ::: 8æã«ãåãå
容ã®ã¯ãŒã¯ã·ã§ãããéå¬ãããŸã ä»åã®ã€ãã³ãã¯ç³èŸŒããã£ã³ã»ã«åŸ
ã¡ãŸã§äŒžã³ãåå ã§ããªãã£ãæ¹ãå€ãåºãŸãããããããæ¹ã«åããŠã åãå
容ã®ã¯ãŒã¯ã·ã§ããã8æã«ãéå¬ãããŸã ã é
ç® å
容 ã€ãã³ãå Osaka | Claude Workshop é嬿¥ 2026幎8æ18æ¥ïŒç«ïŒ äŒå Ž ã¯ã©ã¹ã¡ãœããæ ªåŒäŒç€Ÿ 倧éªãªãã£ã¹ïŒå€§éªåžäžå€®åºäŒèŠçº3-6-3 äžè±UFJä¿¡èšéè¡å€§éªãã«8éïŒ äž»å¬ æ£®ç°ããïŒClaude Community EventsïŒ è§£èª¬ã®ããšãã³ãºãªã³ãšããæµãã¯7æ31æ¥ãšåãæ§æã§ããç³èŸŒã«ã¯æ¿èªãå¿
èŠãªã®ã§ã詳现㯠ã€ãã³ãããŒãž ã確èªããŠãã ããã ãããã« Claude Managed Agentsã¯ããšãŒãžã§ã³ãã®èšå®ãšã¡ãã»ãŒãžã®éä¿¡ã ãã§èªåŸãšãŒãžã§ã³ããåããããã©ãããã©ãŒã ã§ããææãå
¬éãããŠããã®ã§ãèå³ãæãããæ¹ã¯ãã²æãåãããŠã¿ãŠãã ããã Osaka Tech Labã§ã¯ä»åŸãã€ãã³ãéå¬ãäºå®ããŠããŸãã KINTOãã¯ãããžãŒãºã®connpass ãããããŠãã§ãã¯ããŠããã ãããšå¬ããã§ãã åèãªã³ã¯ Claude Managed Agents WorkshopïŒåœæ¥äœ¿çšããææïŒ Claude Managed Agentsã®æŠèŠïŒå
¬åŒããã¥ã¡ã³ãïŒ Jina AI å
¬åŒMCPãµãŒã㌠瀟å
ã§AIãšãŒãžã§ã³ãæ§ç¯ã¯ãŒã¯ã·ã§ãããéå¬ããŸãããïŒæ£®ç°ããã®èšäºïŒ KINTOãã¯ãããžãŒãºOsaka Tech Labã«ãæ¥å Žã®ãããž
ã¯ããã« ããã«ã¡ã¯ã2026幎5æå
¥ç€Ÿã®yaMayuã§ãïŒ æ¬èšäºã§ã¯ã2026幎5æã«å
¥ç€Ÿããã¡ã³ããŒ2åã«å
¥ç€ŸçŽåŸã®ææ³ãã䌺ããããŸãšããŸããã KINTOãã¯ãããžãŒãºïŒä»¥äžãKTCïŒã«èå³ã®ããæ¹ããããŠãä»ååå ããŠãã ãã£ãã¡ã³ããŒãžã®æ¯ãè¿ããšããŠæçãªã³ã³ãã³ãã«ãªãã°ãããªãšæããŸãïŒ Y.Q èªå·±çŽ¹ä» ã°ã«ãŒãã³ã¢ã·ã¹ãã éšãããžãã¹ãã£ããããã¡ã³ãGã«é
å±ãããŸããã èªåè»éšåã¡ãŒã«ãŒâITã³ã³ãµã«âåœç€Ÿããšãã£ããã£ãªã¢ãæ©ãã§ããŸãã æå±ããŒã ã®äœå¶ã¯ïŒ ã°ã«ãŒãã³ã¢ã·ã¹ãã éšã®äººæ°ãå€ãã§ãããããžãã¹ãã£ããããã¡ã³ãGã¯å²ãšå°æ°ç²Ÿéã§ããïŒçŸåš6äººïŒ åãã°ã«ãŒãã®ã¡ã³ããŒã¯åºèº«å°ã倿§ã§ïŒæ¬§å·ãåç±³ãã¢ãžã¢etc.ïŒã°ã«ãŒãå
ã®å
¬çšèªã¯è±èªã§ãã KTCã®å
¥ç€Ÿåæ©ãå
¥ç€ŸååŸã®ã®ã£ããã¯ïŒ ããšã¿ã°ã«ãŒããšããŠã®å®å®æãšãè¥ãäŒç€Ÿããããã³ãã£ãŒã«ã«ãã£ãŒã®äž¡æ¹ã«é
åãæããããšããŸãã¢ããªãã£ãµãŒãã¹é åã§ã®ããžãã¹ãã£ããããã¡ã³ãã«æºãããããšèããããšãå
¥ç€Ÿã®åæ©ã§ãã ä»ã®ãšããã倧ããªã®ã£ããã¯æããŠããŸããã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ çé¢ç®ãªé°å²æ°ãšãã©ãããªé°å²æ°ã®ãè¯ããã©ã³ã¹ãåããŠãããšæããŸãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã Water Serverãããã åšãã«ã©ã³ãã§ãããåºãå€ããïŒç«å°ïŒ yaMayuãããã㮠質åïŒæ
è¡ãè¶£å³ãšã®ããšãªã®ã§ãããããã®å ŽæããŸãè¡ãããå Žæãããã°ã䌺ããããã§ãïŒïŒæ¥æ¬åœå
ã§ããæµ·å€ã§ãã©ã¡ãã§ãOKã§ãïŒïŒ å°ç¬ å諞島ã§ãïŒçé1æ¥ã»ã©ãããé·ãè¹æ
ãçµãŠèšªããåãéæ¥åžžãªäœéšãåŸ
ã£ãŠããŸããïŒãŠãã¬ã¡ã®ç£åµãã¢ãŒãããããã§ãïŒïŒã倪平æŽã«æµ®ãã¶å€ã®æç©ºãææ¥ã«ãæåãããŸã蚪ããããšæã£ãŠããŸãã yaMayu èªå·±çŽ¹ä» ãã©ãããã©ãŒã éçºéš Quality Engineering Gã§QAãšã³ãžãã¢ããã£ãŠããŸãã ç°æ¥çš®ããSESã«è»¢è·ãã第äžè
æ€èšŒãçµãŠKTCã«å
¥ç€ŸããŸããã 京éœåžåºèº«ã§ä»ã¯éœå
åšäœã宀çºãªãã£ã¹å€åã§ãã è¶£å³ãšåŒã¹ããã®ã¯ããŸããªãã§ãããç§»åäžã¯ãããªãŒãã£ãªããã¯ãèŽããŠããŸããèªæžã奜ãã§ãããã¹ããªãŒå€ãã§ããããŸã«æ ç»ã芳ã«è¡ã£ããããŸãã æå±ããŒã ã®äœå¶ Web QA, ã¢ããªQA, SETããŒã åãããŠ21åã§ãã 6æã«SETããŒã ãæ°èšããã倧å¹
ã«äººãå¢ããŸããã QA, SETããŒã ãšã宀çºãªãã£ã¹ãšOsaka Tech Labã«ã¡ã³ããŒãããŸãã ç§ã¯Web QAããŒã ã«æå±ããŠããŸãã çŸå Žã®é°å²æ° 倧éªã®ã¡ã³ããŒãšã¯æ ç¹ãé¢ããŠããŸãããSlackãzoomã§éæé£çµ¡ãçžè«ãããŠããŸãã ãªãã£ã¹ã«åºç€ŸããŠãããšãã¯ãäžç·ã«ã©ã³ãè¡ãããšãããåãããªé°å²æ°ã ãšæããŸãã KTCãžã®å
¥ç€Ÿåæ©ãå
¥ç€ŸååŸã®ã®ã£ãã åè·ãåã
è·ã§ã¯ã客æ§å
ã®ãããã¯ãã«æºãã£ãŠããã®ã§ãèªç€Ÿãããã¯ãã®QAã«æºãããããšæãã転è·ããŸããã ãããã¯ãã®ãžã£ã³ã«ã¯ããŸãçµã£ãŠããªãã£ãã®ã§ããããµãã¹ã¯ãµãŒãã¹ã¯ããããªãžã£ã³ã«ã§ã©ãã©ãåºãŸã£ãŠããã®ã§ãä»åŸãéèŠããããã ïŒ å€ãã®äººã«äœ¿ã£ãŠãããããããã¯ãã«æºããããããšæãå
¥ç€ŸããŸããã ã«ãžã¥ã¢ã«é¢è«ïœé¢æ¥ïœãªãã¡ãŒé¢è«ã§ããããã話ãèãããšãã§ããŠããã®ã§ãå
¥ç€ŸåŸã®å€§ããªã®ã£ããã¯ä»ã®ãšãããªãã§ãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã å°äžéã®é§
ããçŽçµãªã®ã§ãéšã§ãæ¿¡ããªãïŒæ¥å·®ããæããªããšããã åšèŸºã«ãããããåºãå€ããšãããïŒã倿®µã¯å®ãã¯ãªãã§ããâŠãïŒ ããªãŒããªã³ã¯ã§ã³ãŒããŒã飲ãããšããã Y.Qããããã®è³ªåïŒäº¬éœåºèº«è
ãšããŠã芳å
客ãããŸãç¥ããªããã¹ã¹ã¡ã®å Žæãæ¥œãã¿æ¹ããæç€ºãã ããïŒ æè¿ã¯ããããSNSã§ããåºãŸã£ãŠããŸãã®ã§é£ããã§ããâŠç¬ å¿æŽ¥å±ã®ã«ã«ãïŒãããã£ããæåã«ãªã£ãŠããŸããŸããããæãã奜ãã§ãä»ãå®å®¶ã«åž°ããšå¿
ãé£ã¹ãŸãïŒ æ³èŒªå¯º é»é»å®®ïŒé»æ°ã»é»æ³¢ã®ç¥æ§ãç¥ãç¥ç€Ÿã§ããïŒæ¥æ¬å¯äžãããã§ãïŒïŒITé¢é£ã®äººã«ã人æ°ããããŸããåµå±±ã«ãããŸãããæž¡ææ©ããå°ãé¢ããŠããã®ã§æ¯èŒç空ããŠãããšæããŸãã ææºè¶ïŒææºå
ç§ãæå®ç¥ç€Ÿã«åè©£ããéã«éã£ãéã§ãæ¬èœå¯ºãæ»ããéã«ãéã£ããšèšãããŠããŸããä»ã¯ãã€ãã³ã°ã³ãŒã¹ã«ãªã£ãŠããŠãæŽå²ãšèªç¶ãæããããŸããïŒå°é¢šã豪éšã®åœ±é¿ã§éãèããŠããå Žåããããããªã®ã§ã蚪ããéã¯ã泚æããïŒ ãããã« ã¿ãªããŸãå
¥ç€ŸåŸã®ææ³ãæããŠãã ãããããããšãããããŸããïŒ KINTOãã¯ãããžãŒãºã§ã¯æ¥ã
ãæ°ããªã¡ã³ããŒãå¢ããŠããŸãïŒ ä»åŸãããããªéšçœ²ã®ããããªæ¹ã
ã®å
¥ç€Ÿãšã³ããªãå¢ããŠãããŸãã®ã§ã楜ãã¿ã«ããŠããã ããŸããã幞ãã§ãã ãããŠãKINTOãã¯ãããžãŒãºã§ã¯ããŸã ãŸã ããŸããŸãªéšçœ²ã»è·çš®ã§äžç·ã«åãã仲éãåéããŠããŸãïŒ è©³ãã㯠ãã¡ã ããã確èªãã ããïŒ
ã¯ããã« ããã«ã¡ã¯ã2026幎4æå
¥ç€Ÿã®å±±æ¬ã§ãïŒ æ¬èšäºã§ã¯ã2026幎4æå
¥ç€Ÿã¡ã³ããŒã«å
¥ç€ŸçŽåŸã®ææ³ãã䌺ããããŸãšããŠã¿ãŸããã åã®æ¹ããã®è³ªåã«æ¬¡ã®æ¹ãçãããªã¬ãŒåœ¢åŒã§ãå±ãããŸãã KINTO ãã¯ãããžãŒãºïŒä»¥äžãKTCïŒã«èå³ã®ããæ¹ããããŠãä»ååå äžãã£ãã¡ã³ããŒãžã®æ¯ãè¿ããšããŠæçãªã³ã³ãã³ãã«ãªãã°ãããªãšæããŸãïŒ ãã£ãã  èªå·±çŽ¹ä» KINTOéçºéš éçºæšé²Gã«æå±ããŠããŸãã æ¡ä»¶å
šäœã®ç®¡çããAIãæŽ»çšãããµã€ãæ§ç¯ã®ãããžã§ã¯ããæ
åœããŠããŸãã ã¹ããŒã芳æŠãè¶£å³ã§ãæè¿ã¯å°å
ã®BãªãŒã°ã¯ã©ããå¿æŽããŠããŸãããã£ãããªã®ã§KINTOãšçžã®ããã¢ã«ãã«ã¯æ±äº¬ãããããæšããŠããããã§ãïŒ æå±ããŒã ã®äœå¶ã¯ïŒ éçºæšé²Gã¯8åäœå¶ã§ãKINTOãµãŒãã¹ã«é¢ããéçºæ¡ä»¶ã®ãããžã§ã¯ããããžã¡ã³ããäž»ã«è¡ã£ãŠããŸãã è·çš®ã¯PMãäžå¿ã§ãäºæ¥éšåŽã®ã¡ã³ããŒãéçºã¡ã³ããŒãšé£æºããªããããã®ã¥ãããé²ããŠããŸãã KTCãžå
¥ç€Ÿãããšãã®ç¬¬äžå°è±¡ã¯ïŒã®ã£ããã¯ãã£ãïŒ åè·ã®ååãåšç±ããŠããããšããããå
¥ç€Ÿåããæ°è»œã«è³ªåã§ããã«ãžã¥ã¢ã«é¢è«ã§ãçåããã®å Žã§è§£æ¶ã§ããã®ã§ãäžå®ãªãå
¥ç€Ÿã§ããŸããã å
¥ç€ŸåŸã¯ããããµã«ãçãã¬ãªã©ããããããªæŽ»åãæ¥œããã§ããã¢ã¯ãã£ããªæ¹ãå€ããããæå³ã§ã®ã®ã£ãããæããŸããã ãšã³ãžãã¢ã®å匷äŒãªã©åŠã³ãçºä¿¡ã®å Žãå€ãã®ãå°è±¡çã§ãèªåã®çµéšããªãåéã§ãèå³ãããã°æ°è»œã«åå ãããŠããã£ãŠããŸãã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ äŒæ©å®€ã§ã¯è±ãæœããŠã³ãŒããŒãæ·¹ããŠããæ¹ãããŠãéŠãã«ã€ãããŠãµããµããšæ··ããã«è¡ããŸããããšãŠããŠã§ã«ã«ã ãªé°å²æ°ã§ãæ¥åã§ãŸã é¢ããã®ãªãæ¹ãšããããç¹ãããã®ããããããã§ãã å
šå¡ãäžéæ¡çšãšããããšãããååéã®ãããã§ãã·ã§ãã«ãæã£ãŠããŠãæ¥ã
ã®äŒè©±ããå€ãã®åºæ¿ãããã£ãŠããŸãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã 宀çºãªãã£ã¹å€åã§ãã ãªãã£ã¹ããæ¥æ¬æ©ãããã£ãŠå
«é掲ã»é座ããããæ©ãã®ããæ°ã«å
¥ãã§ãè¡ã®ã«ããããæããªããã®æ£æ©ãããæ°å転æã«ãªã£ãŠããŸãã 寿åžãšçŽ
è¶ãã â ãã£ãããžã®è³ªå çãŸãå€ãã£ãããªãããè·æ¥ãšãã®çç±ãæããŠãã ãã æç人ãããã£ã·ãšã§ãããä»ã¯ããŒã ã§ãã®ã¥ãããããŠããŸãããçãŸãå€ãã£ããäžäººã§é»ã
ãšäœããçªãè©°ããŠã¿ããã§ãïŒ ã€ããã  èªå·±çŽ¹ä» æ°ãµãŒãã¹éçºéš FACTORY ECéçºGæå±ã§ãã è¶£å³ã¯çãã¬ã§ããäœã倧ãããããã§ãã æå±ããŒã ã®äœå¶ã¯ïŒ æ°ãµãŒãã¹éçºéš FACTORY ECéçºGã§ãTOYOTA/LEXUS UPGRADE FACTORYã®ECåºç€ãéçºã»éçšããŠããŸãã ããã³ããšã³ããããã¯ãšã³ããPdMãSREãQAããã£ã¬ã¯ã¿ãŒããããŒãžã£ãŒãªã©åãããŠ15åã»ã©ã®äœå¶ã§ãã KTCãžå
¥ç€Ÿãããšãã®ç¬¬äžå°è±¡ã¯ïŒã®ã£ããã¯ãã£ãïŒ å
¥ç€Ÿåã®é¢æ¥ã®æãè²ã
話ãããŠããã®ã§å€§ããªã®ã£ããã¯ãªãã£ãã§ãïŒ çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ ããã³ããšã³ããããã¯ãšã³ããPdMãªã©åæ¹é¢ã®ã¡ã³ããŒãæã£ãŠããã®ã§ææ¡âå®è¡ãŸã§ãçŽ æ©ãã§ããŠåããããã§ãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã é§
ããè¿ããæ¹æåºãŠãã5åããããã«èªåžã«åº§ãããšããã ãªãã£ã¹ã綺éºãªãšããã ãã£ãã â ã€ããããããžã®è³ªå TOYOTA UPGRADE FACTORY æ
åœãããŠããŸããããããªã¢ããã°ã¬ãŒããã£ãããããªãšæãã®ã¯ã©ããªãã®ã§ããïŒ èªåã®é転ã¹ã¿ã€ã«ãåŠç¿ããŠãçè²»ã»å¿«é©æ§ã®ãã©ã³ã¹ãèªåæé©åããAIã¢ãŒãã¿ãããªã¢ããã°ã¬ãŒãããã£ãããããªãšæããŸãã å±±æ¬é倪  èªå·±çŽ¹ä» æ°ãµãŒãã¹éçºéš ãããžã§ã¯ãæšé²ã°ã«ãŒãæå±ã®å±±æ¬é倪ã§ããããŒã«ã¯PjMã§ãã ä»äºã¯å¯ãæ·»ã䌎走ãããããªã¹ã¿ã€ã«ãæ§ã«åã£ãŠããã誰ãã®çºã«ã ãšããåãåºãã¿ã€ãã è¶£å³ã¯ãŽã«ãã»é£ãã»ãµãŠãã»ãã£ã³ããªã©ã¢ã¯ãã£ãç³»åºãããé
ã倧奜ãã§ããæè¿ã¯ãŽã«ãã«ããã£ãŠãŸãããã£ãš100ãåãã¯ãããŸããïŒ æå±ããŒã ã®äœå¶ã¯ïŒ ãããžã§ã¯ãæšé²ã°ã«ãŒãã¯10åã«ãæºããªãå°èŠæš¡äœå¶ã§ãããããšã¿ã°ã«ãŒãå瀟ã«å¯ŸããŠKTCã®æè¡åãæŽ»ãããŠæ¯æŽãäž»å°ããã°ã«ãŒãã§ããããããããã¯å€§ããã§ãã æå
端ãªåãçµã¿ã«ãé¢äžã§ãããã£ã³ã¹ãããã®ã§ãKTCã®äžã§ãäžçªé¢çœãã°ã«ãŒããªã®ã§ã¯ãšãæã£ãŠããŸãã KTCãžå
¥ç€Ÿãããšãã®ç¬¬äžå°è±¡ã¯ïŒã®ã£ããã¯ãã£ãïŒ ç¬¬äžå°è±¡ã¯âŠãªãã£ã¹ãã©ã®æ ç¹ãç«æŽŸïŒç¬ ã®ã£ããã¯æ³å以äžã«ã¹ãã«ãã«ãªã¡ã³ããŒãå€ãç¹ã§ãã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ å°æ°ããŒã ãšããæ§è³ªããããåèªå¥ã®ãããžã§ã¯ãã§äœæ¥ããŠããå®è³ªçãªé¢ããã¯å°ãªãã§ãã ãã ãå®äŸMTGã¯æ
å ±äº€æã掻çºã«è¡ãããŠãããçžäºã«å©èšã§ããçšããé°å²æ°ã«æããŸãã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã ç§ã¯Fukuoka Tech Labæå±ã§ã倧åã®ãªããã»ã«ãŒã«ãã³ã®çäžã«ãªãã£ã¹ãããæ¯è²ãè¯ãïŒå倿¹Ÿãäžæã§ããŠã倩æ°ãè¯ãæ¥ã«ã¯å¿è³å³¶ãèœå€å³¶ã綺éºã«èŠããçªéããæ°ã«å
¥ããè¯ããªãã¬ãã·ã¥ãŸãŒã³ã«ãªã£ãŠããŸãã ã€ããããã â å±±æ¬ãããžã®è³ªå ããããã®æ¥æ¬é
æããŠãã ããïŒ çŠå²¡ã¯é
èµãæå€ãšå€ããŠè¿·ããŸãããå¯åæãããããããŸãïŒ åæäžæãã¢ããŒãã«ããããã±ãŒãžããçªå£ããã£ãããèŠãç®ããæããŸãã 寿åžãšçŽ
è¶  èªå·±çŽ¹ä» ããžã¿ã«æŠç¥éšããŒã¿ã°ããŒã¹Gã§ãããŒãžã£ãŒãããŠããŸãã Webãšã³ãžã㢠â EMã»PdM â äºæ¥è²¬ä»»è
â VPoE ãšãã£ããã£ãªã¢ãæ©ãã§ããŸãã æå±ããŒã ã®äœå¶ã¯ïŒ 1ããŒã ã«æ©èœæšªæããŠããæ¹ã
ãæã£ãŠããã®ãç¹åŸŽã§ãã PdMããšã³ãžãã¢ããã¶ã€ããŒãšãã£ããããã¯ãããªãªãæã£ãŠãããããå€è§çãªèŠç¹ããæ©èœæ¹åãæ¡ä»¶é²è¡ãã§ããã®ã匷ã¿ã§ãã KTCãžå
¥ç€Ÿãããšãã®ç¬¬äžå°è±¡ã¯ïŒã®ã£ããã¯ãã£ãïŒ ãªãã¡ã©ã«ãªã®ã§äºåã«è³ªåã§ããŠããç¹ãšã«ãžã¥ã¢ã«é¢è«ãè€æ°å宿œãããŠããã ãããããã®ã£ããã¯ãããŸããã§ããã çŸå Žã®é°å²æ°ã¯ã©ããªæãïŒ æ¯èŒçã¹ã¿ãŒãã¢ããã®ããã«ã¯ã€ã¯ã€ãã£ãŠããé°å²æ°ã匷ãã§ããã äŒç€ŸèŠæš¡ã§èãããšç·åçã«çãããããããŸããã ãªãã£ã¹ã§æ°ã«å
¥ã£ãŠãããšãã ããªãŒããªã³ã¯ãçšæãããŠãããšãããå®
é
åŒåœãé Œãããšããã§ããã å±±æ¬ãã â 寿åžãšçŽ
è¶ãããžã®è³ªå ãããŸã§ã§äžçªæ¯ãããã®ãã£ãä»äºã¯ã©ããªä»äºã§ãããïŒ ãŒãããéçºçµç¹ãäœãããšã«ãªããæªçµéšããæ¡çšèŠä»¶ãã¹ã«ãŠãæ¥åãAG察å¿ãã«ãžã¥ã¢ã«é¢è«ã颿¥ããªãã¡ãŒå¯Ÿå¿ãªã©ãã¹ãŠãã£ãŠãŸããã ãããã« ã¿ãªããŸãå
¥ç€ŸåŸã®ææ³ãæããŠãã ãããããããšãããããŸããïŒ KINTOãã¯ãããžãŒãºã§ã¯æ¥ã
ãæ°ããªã¡ã³ããŒãå¢ããŠããŸãïŒ ä»åŸãããããªéšçœ²ã®ããããªæ¹ã
ã®å
¥ç€Ÿãšã³ããªãå¢ããŠãããŸãã®ã§ã楜ãã¿ã«ããŠããã ããŸããã幞ãã§ãã ãããŠãKINTOãã¯ãããžãŒãºã§ã¯ããŸã ãŸã ããŸããŸãªéšçœ²ã»è·çš®ã§äžç·ã«åãã仲éãåéããŠããŸãïŒ è©³ãã㯠ãã¡ã ããã確èªãã ããïŒ
ããã«ã¡ã¯ïŒ Principal Generative AI Engineerã®æ£®ç°ã§ããç§ã®æå±ããAIãã¡ãŒã¹ãGã§ã¯ã瀟å
ã®çæAI掻çšã«ãšã©ãŸããã販売åºãããšã¿ã°ã«ãŒãã«ãããAIæŽ»çšæ¯æŽãè¡ã£ãŠãããŸãã 瀟å
ã§AIãšãŒãžã§ã³ãã®æŽ»çšãé²ãäžãããéšçœ²ãããAIãšãŒãžã§ã³ãéçºã«åãçµã¿ããããã©ãããå§ããŠãããããããªãããšçžè«ãããããŸããã座åŠã ãã§ã¯æè§ŠãæãåŸãããªãã®ã§ãå®éã«æãåããã¯ãŒã¯ã·ã§ãã圢åŒã§éå¬ããããšã«ããŸããã åŒç€Ÿã¯AWSãäž»ãªã¯ã©ãŠãåºç€ãšããŠãããããAWSãæäŸããAIãšãŒãžã§ã³ãã®æ§ç¯ã»éçšåºç€ã§ãã Amazon Bedrock AgentCore ãšããšãŒãžã§ã³ãã®ããŒã«é£æºãããã³ã«ã§ãã MCPïŒModel Context ProtocolïŒ ãäžå¿ããŒãã«æ®ããŸããã ææãšããŠäœ¿çšããæžç± ãŒãããè³æãäœãããããäœç³»çã«ãŸãšãŸã£ãæžç±ã®ãã³ãºãªã³ãããŒã¹ã«ããæ¹ããåå è
ãåŸãã埩ç¿ãããããšèããŸãããä»åã¯ä»¥äžã®2åã䜿çšããŠããŸãã ã Amazon Bedrock AgentCore å®è·µå
¥é ââ Strands Agentsã§æ§ç¯ããAIãšãŒãžã§ã³ã ã ïŒSBã¯ãªãšã€ãã£ãïŒãâ»ä»¥äžãAgentCoreæ¬ ã AWSã§ã¯ãããMCPå®è·µã¬ã€ã ââ åºç€ããAIãšãŒãžã§ã³ãæ§ç¯ãŸã§åŸ¹åºè§£èª¬ ã ïŒæè¡è©è«ç€ŸïŒãâ»ä»¥äžãMCPæ¬ AgentCoreæ¬ã§ãšãŒãžã§ã³ããã¬ãŒã ã¯ãŒã¯ã§ããStrands AgentsãAgentCoreã®åæ©èœãåŠã³ãMCPæ¬ã§MCPãµãŒããŒã®èªäœãšAgentCore Gatewayã«ããããŒã«çµ±åãåŠã¶ããšããçµã¿åããã§ãã å®ã¯ãã©ã¡ããç§ãå
±èè
ãšããŠå·çã«æºãã£ãæžç±ã§ããæåå³åã§æçž®ãªã®ã§ãããäžèº«ãé
ã
ãŸã§ææ¡ã§ããŠããåãåå è
ããã³ãºãªã³ã§è©°ãŸã£ããšãã«ãè£è¶³ãããããææãšããŠéžã³ãŸããã éçºç°å¢ ä»åã¯ç°å¢ãæããããã GitHub Codespaces äžã«éçºç°å¢ãçšæããŸãããæžç±ã®æé ãããŒã¹ã«ã以äžã®å·¥å€«ã§ç°å¢æ§ç¯ã«ãããæéãççž®ããŠããŸãã ããŒã«ç®¡ç㯠mise ã«çµ±äžãã mise use aws-cli node uv claude ã§AWS CLIã»Node.jsã»uvã»Claude Codeãäžæ¬å°å
¥ AWSãžã¯ aws configure sso ã§SSOãã°ã€ã³ ã³ãŒãã£ã³ã°ã®ãäŸãšã㊠Claude Code ãã»ããã¢ãã ãµã³ãã«ã³ãŒãã¯æžç±èè
ãå
¬éããŠããGitHubãªããžããªã git clone ããŠåç
§ã§ããããã«ãããã¹ãŠã®ã³ãŒããææã¡ããªããŠããããã«ããŸããã ã¯ãŒã¯ã·ã§ããã®æ§æ 1æ¥ã®ã¯ãŒã¯ã·ã§ãããšããŠãååã»ååŸã«åããŠä»¥äžã®æµãã§é²ããŸããã ååã®éšïŒ1.5æéïŒã»ã»ã»Strands Agentsã«è§Šãã # ã¿ã€ãã« æžç±ã»è©²åœç®æ æŠèŠ 1 Strands Agentså
¥é AgentCoreæ¬ 3.4ç¯ ããŒã«å®çŸ©ããšãŒãžã§ã³ãäœæãäŒè©±ã«ãŒãã®å®è£
ãªã©åºæ¬ãäœéš 2 ãªãµãŒããšãŒãžã§ã³ãã®æ§ç¯ AgentCoreæ¬ 4ç« Webããæ
å ±åéã»èŠçŽãããšãŒãžã§ã³ããæ§ç¯ããããŒã«é£æºã®éçºãããŒãæŽã ä»»æ AgentCoreããŒãã¹ AgentCoreæ¬ 5.2ç¯ æéã«äœè£ããã人åãã«ãAgentCoreããŒãã¹ãäœéš ååŸã®éšïŒ3æéïŒã»ã»ã»AgentCoreãšMCPãå®è·µãã # ã¿ã€ãã« æžç±ã»è©²åœç®æ æŠèŠ 3 AgentCoreã©ã³ã¿ã€ã å
¥é AgentCoreæ¬ 5.3ç¯ agentcore create â agentcore deploy ã§ãšãŒãžã§ã³ããã¯ã©ãŠãã«ããã〠4 ã¢ã³ããšã³ããšãŒãžã§ã³ãã®æ§ç¯ AgentCoreæ¬ 15ç« S3ãžã®é åæžã¢ããããŒããããªã¬ãŒã«ãè§£æâConfluenceèšé²âã¡ãŒã«éç¥ããã€ãã³ãé§ååãšãŒãžã§ã³ããCDKã§æ§ç¯ 5 MCPãµãŒããŒã®æ§ç¯ MCPæ¬ 4.2ç¯ èªåã®MCPãµãŒããŒãšãã¹ããå®è£
6 AgentCore Gateway MCPæ¬ 6.2ç¯ MCPãµãŒããŒãAgentCore Gatewayã«ç»é²ããèªèšŒã»èªå¯ãçµ±å 瀟å
宿œã«ããã£ãŠå€æŽãå¿
èŠã ã£ããã€ã³ã æžç±ã®ãã³ãºãªã³ããã®ãŸãŸç€Ÿå
ã§å®æœããã«ããããããã€ãç°å¢å·®ç°ãžã®å¯Ÿå¿ãå¿
èŠã§ããã :::message ã¡ãŒã«ã¢ãã¬ã¹ã®ãšã€ãªã¢ã¹ 15ç« ã®ã¢ã³ããšã³ããšãŒãžã§ã³ãã§ã¯ããµã³ãã«ããŒã¿å
ã®è€æ°ãŠãŒã¶ãŒã®ã¡ãŒã«ã¢ãã¬ã¹ã«ããããéç¥ãéãèšèšã«ãªã£ãŠããŸããããã瀟å
ã®ã¡ãŒã«ç°å¢ã§ã¯ãšã€ãªã¢ã¹ã䜿ããªãã£ãããã data/users.json ã®ã¡ãŒã«ã¢ãã¬ã¹ããã¹ãŠèªåã®ã¢ãã¬ã¹ã«çµ±äžããŸããããã®çµæãåãã¢ãã¬ã¹ã§SNSãµãã¹ã¯ãªãã·ã§ã³ãéè€ããŠããŸãããã chapter15/cdk/lib/expense-agent-stack.ts ã§éè€ãæé€ããããä¿®æ£ããŸããã + const uniqueEmails = [...new Set(emailAddresses)]; - emailAddresses.forEach((email, i) => { + uniqueEmails.forEach((email, i) => { // åã¢ãã¬ã¹ããšã« SNS ãµãã¹ã¯ãªãã·ã§ã³ãäœæ }); ::: :::message Googleã«ã¬ã³ããŒé£æºã䜿ããªãç°å¢ 13ç« ã®ãã«ã¹ã¿ãã¯ãšãŒãžã§ã³ãæ§ç¯ãã³ãºãªã³ã¯Googleã«ã¬ã³ããŒé£æºïŒGoogleèªèšŒïŒãåæãšããŠããããã瀟å
ç°å¢ã§ã¯å®æœãé£ãã岿ããŸãããèå³ãããæ¹ã«ã¯èªå®
ã§ã®å®æœãæ¡å
ããŠããŸãã ::: :::message AWSã¢ã«ãŠã³ãã®å
±æ è€æ°äººã§1ã€ã®AWSç°å¢ã䜿ã£ãããããªãœãŒã¹åãä»ã®äººãšéè€ã»æ··åããªããããåèªã®ååãä»äžããã«ãŒã«ã«ããŸãããç¹ã«S3ãã±ããåã¯ã¢ã«ãŠã³ãå
ã§äžæã§ããå¿
èŠãããããã®ãŸãŸã ãšè¡çªããŠããŸããŸããCDKã¹ã¿ãã¯ã«ããŒãã³ãŒãããããã±ããåïŒ expense-agent-${account} ïŒã«èªåã®ååãä»ããŠåé¿ããŸãããAgentCoreã©ã³ã¿ã€ã ãã agentcore create ã§ä»ããååã handsonmorita ã®ããã«åèªã§åºå¥ã§ãããã®ã«ããŠããŸãã ::: :::message alert ãªãŒãžã§ã³ã®å·®ç° AgentCoreæ¬ãšMCPæ¬ã§ã䜿çšãªãŒãžã§ã³ãç°ãªã£ãŠãããããåäžãªãŒãžã§ã³ã§å®æœããã«ã¯èªã¿æ¿ããå¿
èŠã§ãããGitHubã§å
¬éãããŠãããµã³ãã«ãœãŒã¹ãå©çšããŠé²ããŠããã®ã§ãããã©ããä¿®æ£ããã°ããããèŠèœãšãããããã€ã³ãã§ããã ::: åå è
ããããã£ã質å ã¯ãŒã¯ã·ã§ããäžãåå è
ããããã€ãå°è±¡çãªè³ªåããããŸããã Q. ããŒã«ã®å®çŸ©ã¯Pythonã§ãã§ããã®ãïŒ Strands Agentsã®ããŒã«å®çŸ©ã¯Pythonã®ãã³ã¬ãŒã¿ @tool ã§è¡ããŸãã颿°ã®docstringããã®ãŸãŸããŒã«ã®èª¬ææïŒdescriptionïŒãšããŠLLMã«æž¡ããããããPythonã§å®çµããŸããMCPãµãŒããŒãšããŠå
¬éããå ŽåãPython SDKãå©çšå¯èœã§ãã Q. SwarmãšãŒãžã§ã³ãã¯ã©ããã£ãŠã¿ã¹ã¯ãæ¯ãåããŠããã®ãïŒ ãã«ããšãŒãžã§ã³ãæ§æïŒSwarmïŒã§ã¯ããªãŒã±ã¹ãã¬ãŒã¿ãŒãšãªããšãŒãžã§ã³ããLLMã®å€æã«åºã¥ããŠãåãµããšãŒãžã§ã³ãã«ã¿ã¹ã¯ãã«ãŒãã£ã³ã°ããŸããåãšãŒãžã§ã³ãã®nameãdescriptionã«åºã¥ããä»ã®ãšãŒãžã§ã³ãã®åœ¹å²ãææ¡ããããã§ãäœæ¥ãå§è²ãããšãŒãžã§ã³ããéžæããŸãã Q. ãã«ããšãŒãžã§ã³ãã«ããããã·ã³ã°ã«ãšãŒãžã§ã³ãã«ããããã©ã®ããã«æ±ºããã®ãè¯ããïŒ å人çãªæèŠãšããŠã¯ãæåããå³å¯ã«åãåããããšããªãæ¹ãããŸããããŸããã·ã³ã°ã«ãšãŒãžã§ã³ããšããŠäœãå§ããŠãè€éãªã¿ã¹ã¯ãããŸãåŠçã§ããªããªã£ãããã³ã³ããã¹ããåããæ¹ãåããå®å®ãããšæããæç¹ã§ããµããšãŒãžã§ã³ããžã®åå²ãèããããšããã®ãå®éã®é²ãæ¹ã«è¿ãã§ãã Q. ãšãŒãžã§ã³ãã§äœ¿çšããã¢ãã«ã¯ã©ã®ãããªåºæºã§éžãã§ããã®ãïŒ ã³ã¹ããæåããæèããããªãããšã倧äºã ãšæã£ãŠããŸããSonnetãããŒã¹ã«ãŸãäœã£ãŠã¿ãŠã倿ã®ç²ŸåºŠãè¶³ããªãéšåã¯Opusã«åãæ¿ããåçŽäœæ¥ã®éšåã ãHaikuã§ã³ã¹ããäžããããšããé çªã§ããå
ã«Haikuã§ã³ã¹ããæããããšãããšãå®çŸã§ããæ©èœã®ã¬ãã«ãäžãã£ãŠããŸãã®ã§ããŸãã¯ããšãŒãžã§ã³ããšããŠå®çŸã§ããããã確èªããŠãããã³ã¹ãæé©åã«ç§»ãæ¹ãã¹ã ãŒãºã«é²ã¿ãŸãã åå è
ã®å£° ã¯ãŒã¯ã·ã§ããã®ç· ãã«åå è
ã§ãæ¯ãè¿ãäŒããè¡ããããã§åºã声ã®äžããå°è±¡çã ã£ããã®ãããã€ã玹ä»ããŸãã ããåå è
ã¯ãããšãŒãžã§ã³ãã®åããããããŸã§ãµããããšããžãã¯ã®ããã«æããŠããã®ã«ãããããä»çµã¿ã§åããŠããã®ããšè
¹èœã¡ããããšè©±ããŠãããŸãããé£ããã®æ¬è³ªã¯ããã³ããã®äœã蟌ã¿ã«ããããšããæ°ã¥ããåŸãããããã§ãã å¥ã®åå è
ã¯ãããŒãã¹ã®æè»œãã«é©ããããã§ãããã³ãã¬ãŒãã«ãããªãã¯ããéçã«è©³ãã人ã§ããã®ãããªäžè¡ãæžãã ãã§ãšãŒãžã§ã³ããåããŠããŸãã®ãèŠãŠãæåæãããã»ã©åçŽã ã£ããšè©±ããŠããŸããã MCPãµãŒããŒã®èªäœã«åãçµãã åå è
ã¯ãååŸã®äžã§ãç¹ã«é£ããã£ããšæ¯ãè¿ã£ãŠããŸãããããã§ãèªåã®æã§å®è£
ããããšã§ãæ®æ®µäœ¿ã£ãŠããMCPã®è£åŽã®åããŸã§æ³åã§ããããã«ãªã£ãããšããèšèãå°è±¡çã§ããã ãããŸã§åºå®ãã€ãã©ã€ã³çãªå®è£
ïŒæ
å ±ãååŸããLLMã«æž¡ããæŽåœ¢ããŠåºåããïŒã«æ
£ããŠãããšããåå è
ã¯ããšãŒãžã§ã³ããå
¥åã«å¿ããŠåŠçã®ã«ãŒããåçã«æ±ºããŠããçºæ³èªäœãæ°é®®ã ã£ããšèªã£ãŠããŸãããåãå
¥åã§ãåºåã®ãã¹ãäºåã«æ±ºãŸã£ãŠããªãããšãããšããã«é¢çœããæããããã§ãã ã¯ãŒã¯ã·ã§ãããçµã㊠1æ¥ã«ããªãã®å
容ãè©°ã蟌ãã ããšããããé²ã¿å
·åã«ã¯å人差ãåºãŸãããååã®ä»»æé
ç®ã ã£ãAgentCoreããŒãã¹ïŒ5.2ç¯ïŒãŸã§å°éã§ããæ¹ãããã°ããããŸã§æãåããªãã£ãæ¹ãããŸããååŸã¯ããããã®èå³ã«åãããŠãã¢ã³ããšã³ããšãŒãžã§ã³ãã«åãçµãã°ã«ãŒããšMCPãµãŒããŒæ§ç¯ã«åãçµãã°ã«ãŒãã«åãããŠé²ããŠããããŸããã ä»åã®ã¯ãŒã¯ã·ã§ãããéããŠãæžç±ã®ãã³ãºãªã³ãããŒã¹ã«ããããšã§æºåã®è² æ
ãæãã€ã€ãå®è·µçãªå
容ãå±ããããã®ã¯è¯ãã£ãã§ããæ¬èšäºããããããAIãšãŒãžã§ã³ãéçºã«åãçµãæ¹ããåæ§ã®ã¯ãŒã¯ã·ã§ãããäŒç»ããæ¹ã®åèã«ãªãã°å¹žãã§ããæåŸãŸã§ãèªã¿ããã ããããããšãããããŸããã
ããã«ã¡ã¯! KINTOãã¯ãããžãŒãº(以äžãKTC)ã®AIãã¡ãŒã¹ãã°ã«ãŒãã§ãçæAIã®æŽ»çšæšé²ãæ
åœããŠããåç°ã§ãã å
æ¥ãJDLA(æ¥æ¬ãã£ãŒãã©ãŒãã³ã°åäŒ)ã®è³æ Œåæ Œè
ã³ãã¥ããã£ãCDLEãã®æ¥çš®å¥å匷äŒã«ãæãããã ãããå人ã®çºèŠããçµç¹ã®ç¥æµã«ããšããããŒãã§ç»å£ããŠããŸãããæ¬èšäºã¯ããã®å
容ãåæ§æãããã®ã§ãã https://jdla.connpass.com/event/393970/ 1. ã¯ããã« KTCã¯ããšã¿èªåè»ã®ã°ã«ãŒãäŒç€Ÿã§ãã¯ã«ãã®ãµãã¹ã¯ãKINTOããããã¯ã®åã§æ¯ããå
補éçºã®äŒç€Ÿã§ãã 2023å¹Žã®æ¥ãGPT-4ãšAPIçãåºãŠããã¿ã€ãã³ã°ã§å
補ã®çæAIãã£ãããç«ã¡äžããŠä»¥æ¥ã3幎以äžã«ããã£ãŠçæAIã®æŽ»çšæšé²ãç¶ããŠããŸãããæè¿ã§ã¯KTC/KINTOã§å¹ã£ãæè¡åããããšã¿ã°ã«ãŒãã®å瀟ãžãšã¢ããã€ãžã³ã°ãéçºæ¯æŽãéããæäŸãããŠããŸãã ãã®ç«å Žããåœå
ã®ç¶æ³ãçºãããšã察ç
§çãªæ°åããããŸããçæAIããå°å
¥æžã¿ããšåçããåœå
äŒæ¥ã¯57.7%^[ NRIãIT掻çšå®æ
調æ»(2025幎)ã ]ãå°å
¥ã®å£ã¯ãããã»ãšãã©è¶ããããŠããŸããäžæ¹ã§ãAIãå©ç(EBIT)ã«5%以äžå¹ããŠããŠããã€å€§ããªäŸ¡å€ãçãã§ãããšçããããäŒæ¥ã¯6%^[ McKinsey "The State of AI in 2025" ]ãå°å
¥ã¯ããããææãåºããŠãããšèšãåããäŒç€Ÿã¯ãŸã äžæ¡ãã§ãã ãããããã®èšäºãèªãã§ãããããªãæ°ããæè¡ãžã®æåºŠãé«ãæ¹ã¯ããã§ã«ä»äºã倧ããå€ãã£ãŠããã¯ãã§ããã¡ãŒã«ã®äžæžããè°äºé²ã®èŠçŽãã³ãŒãã£ã³ã°æ¯æŽãå°ãªããšããããããå
šãŠã«ã¿ã«ã¿æã§æã£ãŠãã人ã¯ãããªãæžã£ãŠããã®ã§ã¯ãªãã§ããããããããåé¡ã¯ãã®å
ã§ããããªãã®ãåšãã®äººãã¯ã©ãã§ãããããå人ãšããŠã¯äŸ¡å€ãåºãŠãããã§ããçµç¹ãšããŠã¯ã©ãã§ããããä»åã®ããŒãã¯ãåäººã®ææãšçµç¹ã®ææã®éã«ããããã®æºã«ã€ããŠã§ãã 2. ãã£ãºã ã®ã©ãã«æãæã€ã â 仿¥ã¯ãBãã®è©± æ¬é¡ã«å
¥ãåã«ãçµç¹ãžæ°ãããã®ãåºãããšãã®ã€ã¡ãŒãžãå
±æãããŠãã ãããäœåºŠãèŠãã§ãããããã£ãºã çè«^[ãžã§ããªãŒã»ã ãŒã¢ãæå±ãããæ°æè¡ã®æ®åããã»ã¹ã説æããçè«ãå©çšè
ãã€ãããŒã¿ãŒ/ã¢ãŒãªãŒã¢ããã¿ãŒ/ã¢ãŒãªãŒããžã§ãªãã£ãªã©ã®å±€ã«åããå±€ã®éã«ããæº(ãã£ãºã )ãè¶ããããšã®é£ãããè«ãããã®ã§ãã]ã®å³ã§ãã æ°ããæè¡ãæåãçµç¹ãžåºãããšãã®ææ³ãAã»Bã»Cã®ã©ãã«æãæã€ã ããã¯çæAIã®è©±ã ããæã¡åºããå³ã§ã¯ãããŸãããDXã®ãšãããRPAã®ãšãããæ°ããæè¡ãæåã倧ããªçµç¹ã«å
¥ããå Žé¢ã§ã¯ããã€ããã®æŠå¿µã䜿ã£ãŠããŸããã å³ã«ã¯Aã»Bã»Cãšãã3ã€ã®ç¢å°ãæããŠããŸãããããããå¥ã®æã¡æã§ããã¿ãªããã®çµç¹ã¯ãããŸã©ã®ç¢å°ã«æãæã£ãŠããã§ããããããããŠãèªèº«ã¯ã©ã®å±€ã«ããŠãã©ã®ç¢å°ãªãã³ãããã§ãããã§ããããããããªããšãèããªããèŠãŠããããã°ãšæããŸãã A:ã€ãããŒã¿ãŒã«èªç±ãæž¡ãã æ°ãããã®ã¯ãæŸã£ãŠãããŠãåæã«èª¿ã¹ãåæã«å§ããåæã«å®éšããŠããŸã人ãã¡ãããŸãã圌ãã«ã§ããéãèªç±ãªç°å¢ãæž¡ãããã èªç±ãªã ãã§ãªããã¬ãŒãã¬ãŒã«ãæ·ããŠãããã§ãªãå®å¿ããŠéãã§ããããšãã空éã«ããã®ãAã§ãã B:ãã£ãºã ã«æ©ããããã ã€ãããŒã¿ãŒãã¢ãŒãªãŒã¢ããã¿ãŒãèŠã€ãã䟡å€ã«ãã¢ãŒãªãŒããžã§ãªãã£ä»¥éã®äººãã¡ã远åŸã§ãããããåŽã«ãªã£ãŠãããã£ãºã ãžæ©ããããåãçµã¿ã§ãã C:åŸãåããªå±€ãåããã é
ã£ãŠããªããªãè§Šã£ãŠãããªããèå³ãæã£ãŠãããã«ããå±€ã«ãã©ã䜿ã£ãŠãããããããã«æ©ãã§ããäŒç€Ÿããã¯ããã£ãšå€ãã¯ãã§ãã 仿¥ã話ãããã®ã¯ããã®ãã¡Bãäžå¿ã§ããBãããã«ã¯ããã®æåã§Aãåã£ãŠããå¿
èŠãããã®ã§ãããæ¬èšäºã§ã¯ãèŠã€ãã£ã䟡å€ãããã£ãºã ã®åããåŽãžã©ãæž¡ãããã«è»žè¶³ã眮ããŸãã 3. 䟡å€åµåºã®äž¡èŒª â æ¢çŽ¢ãšå®è£
çµç¹ã§äŸ¡å€ãåºãã«ã¯ã2ã€ã®åŸªç°ãèŠãããšç§ã¯èããŠããŸãã 1ã€ã¯æ¢çŽ¢ãã€ãããŒã¿ãŒãã¢ãŒãªãŒã¢ããã¿ãŒã«ããã人ãã¡ãèªç±ã«äŸ¡å€ãæ¢ããç°å¢ãçšæããããã®äœ¿ãæ¹ã¯å¹ãããšããçºèŠãçãã§ããããã§ãŒãºã§ãããã1ã€ã¯å®è£
ãèŠã€ãã£ã0â1ã®çºèŠããçµç¹ã«åºå®ããŠ10ã«ã100ã«ããããã§ãŒãºã§ããèªãŸã¿ãã®äžãããã¿ã€ã¶ãã«æ©ããŠãŽãŒã«ãèŠã€ããã®ãæ¢çŽ¢ã ãšããã°ãèŠã€ãã£ãéãèè£
ããŠèª°ã§ãæ©ããããã«ããã®ãå®è£
ã§ãã æ¢çŽ¢ã ãã§ã¯ãå人ã®çºèŠã§æ¢ãŸããŸããIRã¬ããŒãã«èŒããããªã€ã³ãã¯ãã¯ãå人æããã¯åºãŸãããéã«ãçºèŠã®ãªãçµç¹ã§ãããªãå®è£
(ä»çµã¿å)ããå
¥ããšãèè£
ãã¹ãéãã©ãã«ããã®ãåãããªããŸãŸå·¥äºãå§ãŸããŸãããããã¯äž¡èŒªã§ãã£ãŠã©ã¡ããæ¬ ããŠãåé²ããããšã¯ã§ããŸããã ããããã¯ãKTCããã®äž¡èŒªãã©ãåããŠããããæ¢çŽ¢âå®è£
ã®é ã§ã話ãããŸãã 4. æ¢çŽ¢:ããŒã¯ã³ããã·ã³ã° â èªè»¢è»ã®ä¹ãæ¹ã¯ãæ¬ã§ã¯åŠã¹ãªã æ¢çŽ¢ã®æã¡æã®äžã€ãšããŠãããŒã¯ã³ããã·ã³ã°(Tokenmaxxing)ã^[ãããã®ã極éãŸã§çããšãããããã¹ã©ã³ã° "-maxxing" ããããŒã¯ã³æ¶è²»ã«ãã£ã€ããèšèã§ãã]ã玹ä»ããŸãã瀟å
ã®AIã®ããŒã¯ã³æ¶è²»ãããšã«ããæå€§åããã䟡å€åµåºã¯ãã£ããèã«çœ®ããŠããŸã䜿ãéãå¢ããæœç矀ã®ããšã§ãã ãªã䟡å€åµåºã«ãã ãããšèšã£ãŠãããªãããæ¶è²»éã«æ³šç®ããã®ã§ããããçæAIã®æ£ããäœ¿ãæ¹ã¯ãæºäžã§åŠã¹ãªãããã§ããç§ã¯ããèªè»¢è»ã®ä¹ãæ¹ã«äŸããã®ã§ãããèªè»¢è»ã®ä¹ãæ¹ãæ¬ã§åŠãã 人ã¯ãããããããŸãããè£å©èŒªãã€ããŠããµããŒã¿ãŒãã€ããŠãæ²³åã§äœåºŠã転ãã§ã身äœã§èŠããã¯ãã§ãããAIã«ããé ŒããšããŸãããããããã¯AIã«ã¯èŠæã ããšããæèŠãåãã§ã詊è¡é¯èª€ããããçãŸããŸãããã ããããŸãããããæŒãã§ããããã転ã¶ããšã§ãAIãšå¹çãã忥ããæèŠã磚ãããŸãã ããŒã¯ã³ããã·ã³ã°ãæ§æããæœçã¯ããæ¶è²»ãå¢ããæœçããšãæ¶è²»éã芳枬ããæœçãã§æ§æãããŸãã æ¶è²»ãå¢ããæœçã®äŸãšããŠã¯ãæäœæ¥ã³ãŒãã£ã³ã°çŠæ¢ãããããŸããäžå®æéã人æã§ã®ã³ãŒãã£ã³ã°ãçŠæ¢ããŠå®è£
ã¯AIãšãŒãžã§ã³ãã«ä»»ãã人éã¯æç€ºãšæ€èšŒã«éäžããããšãããã®ã§ããã³ãŒãã£ã³ã°çéã§åºãŸã£ãæœçã§ããããæäœæ¥ã§ã®è³æäœæçŠæ¢ãã®ããã«äºåç³»ãžã®ã¢ã¬ã³ãžãå©ããŸãã ç§èªèº«ã¯è³æäœæãžã®ãã ããã匷ããä»ã§ãã€ãæäœæ¥ã§ç±äžããŠããŸãæãããã®ã§ãããæåã®1å²ã¯äººéãäœãããããã7ã8å²ãŸã§ã¯AIã«æã£ãŠããããŠãæåŸã«ãŸãã人éã®ãã ãããå
¥ããããã«ããŠããŸããäœåºŠã倱æããªããæè¿ããããã¡ããã©è¯ãAIãšã®åæ¥æèŠãæŽããŠããŠããŸãã KINTOãã¯ãããžãŒãºã§å®æœããæäœæ¥ã³ãŒãã£ã³ã°ãçŠæ¢ããæœçãVibe Coding Weekãã«ã€ããŠã¯ãFindyããã«ããã€ã³ã¿ãã¥ãŒããã°ã§ãåãäžããŠããã ããŸããã https://jp.findy-team.io/blog/ai-casestudy/kintotechnologies_vibecodingweek/ ãã1ã€ã®èŠçŽ ã芳枬ã§ããå¢ããã£ã±ãªãã§ã¯ã³ã¹ããççºããã®ã§ã誰ãã»ã©ãã ã䜿ã£ãŠããããå¯èŠåããããã®æèã§æåã«ãªã£ãã®ãMetaã®ãClaudeonomicsãã§ã8.5äžäººè¶
ã®åŸæ¥å¡ãããŒã¯ã³æ¶è²»éã§ã©ã³ã¯ä»ããããäžäœ250åã«ã¯RPG颚ã®ç§°å·ãäžããããŠããããã§ã^[ FortuneãA Meta employee created a dashboard so coworkers can compete to be the company's No. 1 AI token userã(2026/04/09) ]ãKTCã§ããClaude Codeã®ã¡ããªã¯ã¹ãåãŠãŒã¶ãŒããåéããå人ãšçµç¹ããããã®äœ¿ãæ¹ãåæããä»çµã¿ãåãããŠããŸããããŒã«ã¯é
ã£ãããã©ãã®åŸãèŠãŠããªãããšããçµç¹ã¯ããŸãããããå§ããã®ãå§ããŸãã KTCã§éçšããŠããClaude Codeã¡ããªã¯ã¹ã®ããã·ã¥ããŒã(æ°å€ã¯ãããŒããŒã¿) 5. ãã ããããŒã¯ã³æ¶è²»ã¯ããã¯å¯èœ ã»ã»ã»ãã ãããŒã¯ã³æ¶è²»éã¯ããããŸã§éæ¥ææšã§ãã ãããã䜿ã£ãâ 䟡å€ãåºããå®éãMetaã®çªä»ã§ã¯ãé äœã®ããã«AIã空åãããŠæ¶è²»éãæ°Žå¢ãããåŸæ¥å¡ãçŸãããšããæ
å ±ããããŸãããããããã§ããããææšã¯å¿
ãããã¯ãããŸããå
¥åéã§ææã枬ãã®ã¯ãå°å·ããããŒãžæ°ã§æç« ã®è³ªã枬ããããªãã®ãªã®ã§ãå ±é
¬ã人äºè©äŸ¡ã«çŽæ¥ã²ãã¥ããã®ã¯æ
éã§ããã¹ãã§ããããŒã¯ã³ããã·ã³ã°ã¯ãçæçã«çµç¹ã®ã¢ã¡ã³ã¿ã ãäœãæå°ãšããŠã¯å¹ããŸããããã£ãšç¶ãããã®ã§ã¯ãããŸãããç¿çãé²ãã§æ¶è²»ãèœã¡çããŠãããšãããŸã§ãã»ããã§ãã æ¶è²»éã¯ãããŸã§éæ¥ææšãææšã¯å¿
ãããã¯ããã ãããŠãã1ã€ããã®æã¡æã«ã¯è³å³æéããããŸãããããŸã§ã®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®å€ãã¯æé¡å®é¡ãããã°æºåž¯ã®ãã±æŸé¡ã®ãããªå¥çŽã§ãããããšã«ãã䜿ãããå®å¿ããŠèšããã®ã¯ããã®å»ºãŠä»ãããã£ãããã§ãããšããã課éäœç³»ã¯åŸéå¶ãžåããŠããŸãã GitHub Copilotã¯2026幎6æ1æ¥ãã䜿çšéããŒã¹ã®èª²éãžç§»è¡ããŸã ããä»ã®ãšãŒãžã§ã³ããç¶ã
ãšåŸã远ã£ãŠããŸãã Uberã2026幎ã®AIäºç®ãããã4ãæã§äœ¿ãæãããã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®å©çšã«åŸæ¥å¡äžäººåœããã®æé¡äžéãèšãã ãšããå ±éãåºå§ããŸããã åŸé課éã®äžçã§å€§äºã«ãªãã®ã¯ãããŒã¯ã³ãããžã¡ã³ããæé©åãã€ãŸã劥åœãªã³ã¹ãã§ææãå¢ããèãæ¹ã§ããé£ããã®ã¯ãããã·ã³ã°ãçµéšããªããŸãŸåŸé課éã«å
¥ã£ãŠããŸã£ãçµç¹ã§ã転ãã ããšã®ãªããŸãŸç®¡çããå§ããããšã«ãªããŸããããããŸæå
ã«äœ¿ãæŸé¡ã®ãã©ã³ããããªããããã¯æåŸã®ã¢ã©ããªã¢ã ãããããŸããããã©ã³ãçããŠãããã¡ã«ãæ¢çŽ¢ãããåãããšããå§ãããŸãã å®é¡å¶(ãã±æŸé¡)ããåŸé課éãžãããšã«ãã䜿ãããèšããæä»£ã¯çµããã€ã€ãã ãããŸã§ãæ¢çŽ¢ã®è©±ã次ã¯ãèŠã€ããçºèŠãã©ãçµç¹ã«åºå®ãããã§ãã 6. å®è£
:çºèŠãAgent Skillã«åºãã â çºèŠããæ¬äººã«ãææžåãŸã§èè² ãããªã ã©ã®çµç¹ã«ãããã£ãºã ã§ããã€ãããŒã¿ãŒãã¢ãŒãªãŒã¢ããã¿ãŒã«ããã人ãã¡ãããŸããæ°ãããã®ãåæã«èª¿ã¹ãåæã«è©Šããããã®é Œã¿æ¹ãªãããŸãããããšããè¯ãäœ¿ãæ¹ãèŠã€ããŠãã人ãã¡ã§ããåé¡ã¯ããã®çºèŠãæ¬äººã®äžã«ãããªãããšã§ãã ããã§KTCã§ä»å¢ããŠããã®ãã Agent Skill ã§ããAgent Skillãšã¯ãAIãšãŒãžã§ã³ãã«ç¹å®ã¿ã¹ã¯ã®ãããæ¹ããæããåå©çšå¯èœãªæé æžã®ããšã§ããã€äœãããããæžããæç€ºæž(SKILL.md)ãæé ãšOK/NGã®ç·åŒãããã³ãã¬ãŒããã¹ã¯ãªãããšãã£ãåç
§ãã¡ã€ã«ã1ã€ã®ããã±ãŒãžã«ãŸãšãããã®ã§ããå±äººçã ã£ãã«ã³ã³ããåãåºããŠã誰ã§ãåçŸã§ãã圢ã«åºãããæé»ç¥ãã¯ã¶ããSkillãšãã圢ã§å
šå¡ã«é
ãããšãã§ããŸãã Agent Skillã¯æç€ºæžã»æé /å€æåºæºã»åç
§ãã¡ã€ã«ã®3ç¹ã»ãã KTCã®äŸã§ãããšãããšã¿ã°ã«ãŒãã«ã¯ãç©ãšæ
å ±ã®æµãå³(ç©æ
)ããšããæ¥åã®å¯èŠåææ³ãããã®ã§ããããã®ãã©ãããAIã«äœãããSkillãåºããŠã瀟å
ã«é
åžããŠããŸããå
è¡ãã人ãã¡ã®çºèŠãããæ¹¯ã泚ãã°èª°ã§ãé£ã¹ãããã€ã³ã¹ã¿ã³ãé£åã«å å·¥ããŠé
ãããšããã€ã¡ãŒãžã§ãã äžæ¹ã§ããããæ¢çŽ¢ã®æ
ãæã¯ãæ°ããäœ¿ãæ¹ãæ¢ãããšèªäœã¯å¥œãã§ãããããæé æžã«æžãèµ·ããããšã«ã¯é¢å¿ãèãã£ããããŸããã§ããã°ãæšªäž²ã®æšé²çµç¹ãæ¬äººã®ãšãããžåºåããŠããææžåã¯ãã¡ãã代ããã«ãããŸãããšåŒãåããŠããŸãã®ã¯ã©ãã§ãããããçºèŠããæ¬äººã«ãææžåã®æéãŸã§è² ãããå¿
èŠã¯ãªããããããŸããã 7. éçšãšæå â ãæã§ããã³ãããæããªãããšããé説 Skillã¯äœã£ãŠãããŸãã§ã¯ãªããéçšãå¿
èŠã§ãã誰ã§ãSkillãæ¢ããŠäœ¿ããå Žæ(Plugin Market)ãäœããåœåã«ãŒã«ã決ããã»ã»ã»æ€çŽ¢ã§ããªãSkillã¯ãååšããªãã®ãšåãã ããã§ãããã©ã³ãåã颿°åã«æã£ãŠããæ°é£ããæãåºããŠãã ããããããšåãæ°é£ããSkillã«ãå¿
èŠã§ãããã ãSkillã®åœåèŠåã®ãã¹ããã©ã¯ãã£ã¹ã¯ãŸã äžã®äžã«æŽåãããŠããªãã®ã§ãäŒç€Ÿããšã«ç¬èªã§æ±ºããŠããŸãã®ãæå¹ã ãšæããŸããããããã宿çãªã¡ã³ããã³ã¹ãæ°ãæã§åæãå€ããé åãªã®ã§ãå€ãSkillã¯æŸçœ®ããã°è² åµã«ãªããŸãã Skilléçšãæ¯ãã4ã€ã®ä»çµã¿(Plugin Marketã»åœåã«ãŒã«ã»å®æã¡ã³ãã»å¯Ÿè±¡çºæ) ãããŠããã®ã¡ã³ããã³ã¹ãã©ãåããããããå°å³ã«å€§å€ãªãšãããªã®ã§ãããKTCã§ã¯Skillã®ä¿å®ãã®ãã®ãSkillã«ããŠããŸãããšã詊ããŠããŸããããã°ãSkillãç¹æ€ã»æŽåããããã®Skill矀ã§ã^[å
¬éãããŠããmizchiããã®ã waxa ããåèã«ããŠããŸãã]ã圹å²ãåããã4ã€ã®ã¢ãŒãããããŸãã æ€èšŒãã:æžããã°ããã®SkillãããŸã£ãããªå¥ã»ãã·ã§ã³ã«çœçŽã§èªãŸããããããäŒãããªãããšããææ§ããæé»ç¥ãçãåºãã æ£åžããã:Skill矀ããã¶ãè€æ°ã®èгç¹ã§å¥åº·èšºæããã©ãããæãå
¥ããã¹ããã®ãªã¹ããäœããè¿·ã£ããããŸãããããã åœåãæŽãã:ååãšdescriptionã ããåœåèŠåã«åãããŠçŽããäœãããSkillãäžç®ã§çè§£ã§ããæ€çŽ¢ã§èŠã€ããç¶æ
ãä¿ã€ããã®æŽåã«ãªãã æ¬æãçŽã:å€ãSkillåãã¢ãã«åãURLãšãã£ãé³è
åããåç
§ããæ©æ¢°çã«äžæ¬çœ®æããã ã³ãã¯ãåä¿®æ£ã®ããªã·ãŒãã£ã¡ãåããŠã1ã€ã®ã»ãã·ã§ã³ã«äœãããããããªãããšãããã»ã©ãæ€çŽ¢ã§ããªãSkillã¯ååšããªãã®ãšåãããšæžããŸãããããã®ç¶æ
ãä¿ã€äœæ¥èªäœãã人éã®æ ¹æ§ã§ã¯ãªãSkillã«è©ä»£ãããããããã§ããéçšãšã¯ãããããå°å³ãªä»çµã¿ã®ç©ã¿éããªã®ã ãšæããŸãã Skillã®ä¿å®ãã®ãã®ãSkillã«ããã圹å²ãåãã4ã¢ãŒãã§éçšãåã(åè: mizchiããã®waxa) æåã®é¢ã§ã¯ãäºäŸå
±æäŒãå匷äŒãšãã£ãå°éãªåãçµã¿ãç¶ããŠãã ãããããããªå¹ãSkilläœã£ããããèŠãåãå Žã¯ãè©äŸ¡å¶åºŠã§ã¯ãªããã€ã誰ãã«èŠããããªãæ°æã¡ã§åãå§ããŸããå°å³ã§ãããæåéžæã¯ããããç©ã¿éãã§ããé²ãŸãªããšæã£ãŠããŸãã æåŸã«1ã€ãé説çãªè©±ããå人ã®ä»äºãçµç¹ã®ä»äºã«ããäžã§ãããã³ãããšã³ãžãã¢ãªã³ã°ã®ã¹ãã«ãéªéãããããšããããŸããå人ãåãšã³ãã§ããã³ãããäžå¯§ã«èª¿æŽãããšãŒãžã§ã³ããããæãã«åããã®ã¯ãè¯ãããã§ããŠæšªå±éãéåžžã«ãã«ãããããã³ããé Œã¿ã®æ¥åã¯ãããèªäœãå±äººåã§ãããªã®ã§KTCã§ã¯æè¿ãçµç¹ã®ä»äºã«ããå Žåã¯æã§ããã³ãããæã€ã®ãã§ããã ããããŠãã¹ã©ãã·ã¥ã³ãã³ããSkillã®åŒã³åºãã ãã§å®çµãããããšãæšå¥šããŠããŸããäžæã«æãŠã人ã»ã©ãæããªããåŠãªè©±ã§ãããçµç¹åãšã¯ããããããšã ãšèããŠããŸãã ãªãããããŸã§ã®æã¡æã¯ãKTCãã¯ã©ãŠãã»AIé åã§æ°ããããšã«èžã¿èŸŒã¿ãããç«å Žã«ããããšããåæãšåãé¢ããŸãããæ°ããããšã詊ããããŸããã£ããã®ãå°ããã€åšå²ãžåºããŠããââãããªæèã§åãçµãã§ããã®ã§ããã£ãºã ã§ããäžäœå±€ã«æèçã«æéãå¯ããŠããŸããã©ã®å±€ã«ã©ãã ãæéãããããã®ããŒããã©ãªãªã¯ãèªç€Ÿã®ç«ã¡äœçœ®ãæ¹éã«åŸã£ãŠæ±ºããçµå¶å±€ãšæ¡ã£ãŠããã®ãçã ãšæããŸãã 8. ãŸãšã â å人ã®çºèŠããçµç¹ã®ç¥æµã« ãå人ã®çºèŠããçµç¹ã®ç¥æµã«ãä»åãäŒããããã£ãã®ã¯ãçµå±ãã®äžè¡ã§ããæ¢çŽ¢ã®ãã§ãŒãºã§ã¯ãããŒã¯ã³ããã·ã³ã°ã§ãããã詊ããŠã転ã¶ããšãæããªããæ£ããäœ¿ãæ¹ã¯ã詊è¡é¯èª€ããããçãŸããªãããã§ããå®è£
ã®ãã§ãŒãºã§ã¯ãçºèŠãAgent Skillã®ãããªåœ¢ã«åºãã誰ã§ãåçŸã§ããããã«ããŠé
ãããããŠãä»çµã¿ãšæåã§åãç¶ããã æ¢çŽ¢âå®è£
âä»çµã¿ã»æåãå人ã®çºèŠããçµç¹ã®ç¥æµã« Gæ€å®ãEè³æ Œãæã£ãŠãããããªæ¹ã¯ããã§ã«äžæ¬ã®ã¹ãã·ã£ãªãã£ãããç¶æ
ã§ããAIã¯èªåã«ã¬ãã¬ããžããããéå
·ãªã®ã§ãèªåã10ã®äººãš100ã®äººã§ã¯ãæããåŸã®å·®ããŸãã§éããŸãããèªèº«ã®ãã¡ã€ã³ç¥èãšãè³æ ŒãéããŠåŠãã ç¥èãšãçæAIãAIãšãŒãžã§ã³ããæãç®ããŠããŸãã¯ãããã転ã¶ãšããããããããŠã転ãã§èŠã€ããçºèŠãããã²çµç¹ã«é
ã£ãŠãã ããã ãããŸã§èªãã§ããã ããããããšãããããŸãã! ããªããåšå²ã®äººã®çºèŠããçµç¹ã®ç¥æµã«ãªã£ãŠããããšãé¡ã£ãŠããŸãã
ããã«ã¡ã¯ãEngineering Officeã®ã¢ã¯ã»ã·ããªãã£ã¢ããã±ãŒãã蟻åå©ã§ãã 6æã®ããæãç§ã¯åå€å±ã®ãããã«ã®äžå®€ã§ãæ€æšé¢ãäž¡æã§æ±ããèãããŠããæ°Žã®é³ãé Œãã«æ©ããŠããŸãããé£ã§ã¯ç«¹äžãããç«ã®é³Žã声ã远ããããæµè°·ããã¯çŒãç¶²ã®äžã§èãçŒããé³ã«ãæ¯ãè©°ããŠè³ãããŸããŠããŸããäžäººãæã«ããŠããã®ã¯ãã©ããæ åã®ãªãããé³ãã ãã§éã¶ã²ãŒã ã§ããã åããèŠããããªããªãäžæè°ãªå€§äººäžäººçµã ã£ããšæããŸããã§ããã®å Žã«ããç§ãã¡ã¯ããã ãã 倢äžã§ãããç®ã§äœãã確ãããã®ã§ã¯ãªããè³ãããŸããŠãé³ã ããé Œãã«éã¶ããã®æ°é®®ãã«ããã£ãã倢äžã«ãªã£ãŠããã®ã§ãã ç§ãã¡ã蚪ããŠããã®ã¯ãããªãŒãã£ãªã²ãŒã ã»ã³ã¿ãŒããšããå±ç€ºã§ãããæ åã§ã¯ãªããé³ãããã²ãŒã ãã€ãããé³ã ãã§éã¶ââãããªãŠããŒã¯ãªäœåãéãŸã£ãå Žæã§ããåå€å±ã§éãããŠããããšãç¥ããåºåŒµã®ã€ãã§ã«ååãèªã£ãŠè¶³ãéãã§ã¿ãŸããã å¶éæéå
ã«ãé³ã ããé Œãã«è±ãžæ°Žãããããã¯ãªã¡ãããæãããäŒå Žã§æåã«å€¢äžã«ãªã£ãäœåã§ãã ãã®èšäºã§ã¯ããã®æã®ããšãæžããŠã¿ãããšæããŸãã ãªãããã®äžäººã§è¡ãããšæã£ãã®ã å°ãã ãã忥ã®è©±ããããŠãã ãããç§ãšç«¹äžããã¯åå€å±ã§ä»äºãããã忥ããåºåŒµããŠããŸããã ãã£ããåå€å±ãŸã§è¶³ãéã¶ã®ã ããããã®åºåŒµãã¢ã¯ã»ã·ããªãã£ã®æŽ»åã«ãã€ãªããããªããââããèããŠãããšãã«ãã¡ããã©ãªãŒãã£ãªã²ãŒã ã»ã³ã¿ãŒã®å±ç€ºãåå€å±ã§éãããŠããããšãç¥ããŸãããã¢ã¯ã»ã·ããªãã£ã®ã¢ããã±ãŒããšããŠãããã¯ãã²ãã®è³ã§ç¢ºãããŠããããå±ç€ºã§ããããèããç§ã¯ã竹äžããã«å ããŠãåå€å±ãªãã£ã¹ã§åãæµè°·ããã«ã声ããããŸãããæµè°·ããã¯ããã©ã€ããŒã«åãããµãŠã³ãèšèšãä»äºã«ãããŠããæ¹ã§ãããé³ããæ±ããããšäžç·ã«ãé³ã®ã²ãŒã ãäœéšã§ããããã以äžãªãçµã¿åããã ãšæããŸããã æ£çŽã«æã¡æãããšããã®ããèªããã«ã¯ãç§ãªãã®å°ããªçãããããŸããã ã¢ã¯ã»ã·ããªãã£ã®ã¢ããã±ãŒããšããŠãç§ãäŒç€Ÿã®ãªãã§æ
ããã圹å²ã¯ã補åããµãŒãã¹ã䜿ããããããããšã ãã§ã¯ãããŸããããã®æåã«ããããã¢ã¯ã»ã·ããªãã£ã®æåããã®ãã®ã瀟å
ã«å°ããã€æ ¹ã¥ãããŠããããšã ãšèããŠããŸãã ãã®ããã«ã¯ãã¬ã€ãã©ã€ã³ããã§ãã¯ãªã¹ããšåãåãæéã ãã§ãªãããŸã èŠãããšã»è§Šããããšã®ãªãé åã®ã¢ã¯ã»ã·ããªãã£ã«ãååãã¡ãèªç¶ãšåºäŒãããã£ãããã€ããããããããªæããã以åãããã£ãšãããŸãããä»åã®å±ç€ºã¯ããã®ãã£ããã«ãŽã£ããã ãšæããã®ã§ãã ãé³ããå
±éèšèªã«ããŠéãã ããã®æ¥ã®èšæ¶ ãã®å Žæã«ååãé£ããŠè¡ãããã£ãçç±ã¯ãããã²ãšã€ãããŸããããã¯ãç§èªèº«ã®å¿ããããªãåäœéšã§ãã ããã¶ãåã®ããšã«ãªããŸãããç§ã¯ãã€ãŠæ±äº¬ã§ãããªãŒãã£ãªã²ãŒã ãã€ããããã«ãœã³ãã«åå ããããšããããŸãããèŠèŠé害ã®ãã人ããç®ã®èŠãã人ããäžç·ã«ãªã£ãŠé³ã ãã®ã²ãŒã ãã€ããããã®å Žã§éã¶ããããªã€ãã³ãã§ããã ããã§ç§ãæããã®ã¯ããªããšãèšããªãå¿å°ããã§ããããã®å Žã«ã¯ãé£ãããã¢ã¯ã»ã·ããªãã£ãã®è©±ã¯ãã»ãšãã©åºãŠããªãã£ãã®ã§ãããèŠèŠé害è
ã®ããã«ããšããé
æ
®ããªããã°ããšãã£ãè©ã«åã®å
¥ã£ãèšèã§ã¯ãªãããã çŽç²ã«ããé³ãäžå¿ã«ããã²ãŒã ã£ãŠé¢çœãããããšããäžç¹ã§äººãéãŸã£ãŠããŸããã ãé³ããšããå
±éèšèªã®åã§ã¯ãç®ãèŠãããã©ããã¯ããã®å Žã®äž»åœ¹ã§ã¯ãããŸããã§ãããã¿ããªãåãããã«è³ãããŸããåãããã«æžæããåãããã«ç¬ãããã®å¯Ÿçã§ãã©ãããªç©ºæ°ããç§ã«ã¯ãšãŠãæ°é®®ã§ãå¿å°ããã£ãã®ã§ãã ãã®æèŠãããã²ååã«ãå³ãã£ãŠã»ãããé£ããçå±ã§ã¯ãªãããŸããé¢çœããããå
¥ã£ãŠããããäœéšãšããŠââããæã£ãããšããä»åã®ãèªãã®æ ¹ã£ãã«ãããŸããã åœæ¥ãç§ãã¡ã倢äžã«ãããäœåãã¡ ããŠãåœæ¥ã®äŒå Žã«ã¯ãããã€ãã®äœåãå±ç€ºãããŠããŸãããã©ãããæãããããããã¯!ããšå£°ãåºãŠããŸããããªããŠããŒã¯ãªãã®ã°ããã§ãã 1ã€ãã¯ã æ€æšé¢ãæ±ããŠãé³ãé Œãã«æ°Žãæ¢ãã²ãŒã ãé¢ãæã£ãŠæ©ãåããèãããŠããé³ãæãããã«ãæ°Žã®ããããæ¢ãåœãŠãŸããå¶éæéå
ã«è±ãžååãªãæ°Žãããããããã¯ãç§ãã¡ã®è³ãšæ¹åæèŠã«ããã£ãŠããŸããåé ã§ç§ãæ±ããŠããã®ãããã®é¢ã§ããã 2ã€ãã¯ã é³ã ãã§é²è¡ãã人çŒã²ãŒã ã誰ã人çŒãªã®ãã衚æ
ã§ã¯ãªã声ãšé³ã ãã§æšçããŠããç·åŒµæããããŸãããããããã®ãã¬ãŒã€ãŒã«ã¯ãå°ããªã¹ããŒã«ãŒãéããŠå¥ã
ã®æ¯åãäŒããããã©ããªæ¯åãå±ããã®ãã話ãåããªããã誰ã人çŒãªã®ããæšçããŠãããŸããèªåã«å±ããæ¯åã®ãªãºã ãããã®ãŸãŸå£°ã«åºããŠããŸããªãããæ°ãã€ããªãããæ
éã«äººçŒãæ¢ããŸããã 声ãšé³ã ãã§äººçŒãæšçããããµãŠã³ããŠã«ãããšã鳎ã声ããåç©ãåœãŠãã¯ã€ãºããã¬ãŒã€ãŒã«ã¯å°ããªã¹ããŒã«ãŒããå¥ã
ã®æ¯åãå±ããŸãã 3ã€ãã¯ã ç«ã®é³Žã声ãé Œãã«ãè¿·è·¯ã®äžã§ç«ãæ¢ããŠæãŸããã²ãŒã ãããã£ãŒããšãã声ã远ããããŠå€¢äžã«ãªã£ãŠãã竹äžããã®æ§åãããã®å£°ã®åŒŸã¿æ¹ããäŒãã£ãŠããŠããªããšã埮ç¬ãŸããæããŸãããèŠã€ãããšæã£ãç«ãããµã£ãšå¥ã®æ¹åãžé³ŽããªããéããŠããããã®æå¿ãã®ãªãã«ãç§ã¯æé£Œã£ãŠããããã¡ããªç¬ã®ããšãæãåºããŸããã ãEcholocation Maze â è¿·è·¯ã§ããæ¢ãããã¢ã«ãã®ãã¬ãŒã ã®äžã«å
¥ããè³ãããŸããŠç«ãæ¢ããŠãããšãããç®ã§ã¯ãªããé³ã«éäžããæéã§ãã 4ã€ãã¯ã é³ãé Œãã«ãã¡ããã©ããçŒãå æžãçã£ãŠçŒèãçŒãã²ãŒã ããèãçŒããé³ã®å€åã ãã§ãé£ã¹ãããèŠæ¥µããããµãŠã³ãèšèšãä»äºã«ããŠããæµè°·ããããããã§ãã¡ã°ãçå£ã«ãªã£ãŠããã®ãããã®åŒµãã€ããéäžã¶ãããäŒãã£ãŠããŸãããäžäººã§åæã«ãèãåãåºããšããŒãã¹ç¹ãããããããšããã£ãŠããããããçå£ã«ã¿ã€ãã³ã°ãèŠèšãããªããã²ãŒã ãé²ããŸããã ãèãçŒããé³ã®å€åã ãã§ãé£ã¹ãããèŠæ¥µããçŒèã²ãŒã ããµãŠã³ãèšèšãæ¬è·ã®æµè°·ãããããã¡ã°ãçå£ã«èãå
¥ã£ãŠããŸããã ãããŠããã²ãšã€ãã²ãŒã ãšããããã åãããšæ¯åã«åãããŠç¬ãåºãæç¯ã®ããã¡ã ããããŸãããæã®ãªãã§éããªããç¬ãæç¯ã«ãæãããã¡ããŸã§ç¬ã£ãŠããŸããŸãããåã©ãã®é ã«éãã ãç¬ãè¢ããæãåºããããªãã¡ãã£ãšæãããäœåã§ãã ã©ã®äœåããç®ã§èŠãŠæ¥œãããã®ã§ã¯ãããŸãããè³ãããŸããæã§æããé³ã®å€åã«èº«ããã ããŠéã¶ãæ°ãã€ãã°äžäººãšãããã£ããç«¥å¿ã«è¿ã£ãŠçãäžãã£ãŠããŸããã ãé¢çœãããããã¡ã°ãæåã«ãã£ãŠãã äŒå Žãåºãããšãç§ã¯ãµãšããã®æ±äº¬ã®ããã«ãœã³ã§æããå¿å°ãããããã®ãŸãŸããã«ããã£ãããšã«æ°ã¥ããŸããã ãã®æãç§ãã¡ã¯äžåºŠããè©è匵ã£ããã¢ã¯ã»ã·ããªãã£ãã®è©±ãããŸããã§ããããã ãé³ã®ã²ãŒã ãé¢çœããŠãäžäººã§ç¬ãåã£ãŠããã ãã§ããç®ãèŠããäºäººãšãèŠããªãç§ãšãããŸã£ããåãã¹ã¿ãŒãã©ã€ã³ã§æžæããåãããã«å€¢äžã«ãªãããããããäœéšããèšèã§ã¯ãªãã身äœã§åãã¡åããããšããç§ã«ã¯ãšãŠãå¬ããã£ãã®ã§ãã ã¢ã¯ã»ã·ããªãã£ãšããããŒãã¯ããšããããšãæ£ããããããããªããã°ãããªãããšããšããŠèªãããã¡ã§ããããããã¡ãã倧åãªããšã§ããã§ãããã®å
¥ãå£ã«ããããªãµãã«ããã çŽç²ã«é¢çœãããšããäœéšããã£ãŠãããã¯ãã ãšããããããŠæããŸãããé£ãã話ã®åã«ããŸãäžç·ã«æ¥œããã§ããŸããããããèªç¶ãšããé³ã ãã§ãããªã«éã¹ããã ããç®ã«é Œããªãäžçã«ãããããªè±ããããããã ããšããæ°ã¥ããçãŸããŠããã ãããããç§ã¯ã瀟å
ã®ããããªäººãšããããããè§Šãããã£ããããå°ããã€å¢ãããŠãããããšæã£ãŠããŸããé£ããé¡ã§èº«æ§ããåã«ããŸãäžç·ã«è³ãããŸããŠãç¬ã£ãŠããŸããã¢ã¯ã»ã·ããªãã£ã®æåã¯ãæ¡å€ããããæ¥œããæéã®ç©ã¿éãããæ ¹ã¥ããŠããã®ãããããªãââåå€å±åºåŒµã®ç· ããããã«ããããªããšãæã£ãã®ã§ããã ããã²ãšã€ã®åºäŒã â éŒåãäŒããã¢ããªãã£ãQUENELLEã äŒå Žã«ã¯ããªãŒãã£ãªã²ãŒã ãšã¯å¥ã«ãããã²ãšã€åŒ·ãå°è±¡ã«æ®ã£ãå±ç€ºããããŸããããQUENELLEïŒãããïŒããšãããå°åEVã®ã³ã³ã»ããäœåã§ãã ããã¯ãä¹ã人ã®éŒåãèªã¿åãããããé³ãå
ãæ¯åãšããŠæ ãåºãä¹ãç©ã§ãããä¹ãç©ããæäœããéå
·ããšããŠã§ã¯ãªããæèŠã§ã€ãªããçžæã®ããã«æããããŠãããââãããªè©Šã¿ã§ããç§ãå®éã«ãŸãããããŠããããŸããã ãQUENELLEãã«ãŸãããããŠããããŸããããªããååžãããã¹ã¿ããã®æ¹ãªã©ããæ¬äººã®åæã確èªã§ããŠããªãæ¹ã®ãé¡ã¯ç»ååŠçãããŠããŸãã éŒåãé³ã»å
ã»æ¯åã§æ ãåºããå°åEVã®ã³ã³ã»ããäœåãä¹ãç©ããæäœããéå
·ãããããšãã«ããååšããžãšè¿ã¥ããããšãã詊ã¿ã§ãã ãã©ã€ããŒã«åãããµãŠã³ãèšèšãä»äºã«ããæµè°·ãããããã®äœåã®åã§äœãæããŠããã®ããããã¯ãæ¬¡ã®ææ³ã«è²ããããšæããŸãã äžç·ã«è¡ã£ãäºäººãã æåŸã«ãåè¡ããŠãããäºäººã«ãåœæ¥ã®ææ³ãäžèšãã€æžããŠããããŸããã çŸå°ã«è¡ããŸã§ã¯ãé³ã®ã²ãŒã ããšãããã®ããŸã£ããæ³åã§ãããã©ã¡ãããšããã°ãèŠãç®ã«ã¯å°å³ã§è³ªçŽ ãªäœåãã€ã¡ãŒãžããŠããŸãããã§ããå®éã«ãã¬ãŒããŠã¿ããšãèªåèªèº«ã倢äžã«ãªã£ãŠéãã§ããŸãã»ã©é¢çœããŠé©ããŸãããåã©ããã倧人ãŸã§ãå¹
åºãäžä»£ã®äººãã¡ãäžç·ã«æ¥œãããââãªãŒãã£ãªã²ãŒã ã«ã¯ããããªå¯èœæ§ããããšæããŸãããïŒç«¹äžïŒ è»ãé転äžã®ãã©ã€ããŒã¯ããšãŠãäžèªç±ã§ãããã£ãšåãèŠãŠããªããšãããªããã奜ãã«åãããšãã§ããªããã»ãšãã©å¯äžã®æãã¿ã¯ãé³ãã§ããã鳿¥œãæµãããã©ãžãªãèŽãããåä¹è
ãšã®ãåãããããã£ãŠæ°å幎åããã»ãšãã©äœãå€ãã£ãŠããªãããé³ãæãããã£ãŠããã£ãšèªç±ã§ãè²ããªå¯èœæ§ãããããããªãã?ãšããã£ãšèããŠããŸãããäžç·ã«äœéšãããªãŒãã£ãªã²ãŒã ã»ã³ã¿ãŒã®äœåã¯ãèªåã®äžã«ãã£ãæŒ ç¶ãšãã仮説ãã確信ãžãšäžæ©è¿ã¥ããŠãããŸãããïŒæµè°·ïŒ ç®ã䜿ããã«ãé³ãã ãã§éã¶æéã¯ãç§ã«ãšã£ãŠãã¢ã¯ã»ã·ããªãã£ã®æ°ããå
¥ãå£ã確ããçŽãæéã§ããããŸãããããæ©äŒãããã°ããã²äžåºŠãè³ã ããé Œãã«éãã§ã¿ãŠãã ããããã£ãšãæã£ãŠãããããã£ãšè±ããªäžçãåºãã£ãŠããŸãã åèãªã³ã¯ ãªãŒãã£ãªã²ãŒã ã»ã³ã¿ãŒ: https://artscape.jp/exhibitions/64694/ ãªãŒãã£ãªã²ãŒã ãã€ããããã«ãœã³ïŒCCBTïŒ: https://ccbt.rekibun.or.jp/events/audiogamecenter_ccbt_hackathon