- TOP
- ã¿ã°äžèЧ
- Playwright
Playwright
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
æè¡ããã°
ããã«ã¡ã¯ããã¡ã€ã³ãã£æ ªåŒäŒç€Ÿã§ããªã³ã·ãã«ãšã³ãžãã¢ãããŠããæžç°ã§ãã ãã¡ã€ã³ãã£ã§ã¯ãæœçã®ç«æ¡ããIssueã®çæãã¿ã¹ã¯åè§£ãAIãšãŒãžã§ã³ãã«ãã䞊åå®è£
ãQAãŸã§ãéçºãããŒã®åæã«AIãšãŒãžã§ã³ããçµã¿èŸŒãã§ããŸãã ãã®èšäºã§ã¯ãéçºãããŒå
šäœã®ã¢ãŒããã¯ãã£ãå³ã§ç€ºããæ§æèŠçŽ ããšã«åœ¹å²ã解説ããŸããPMãéçºãQAã®ããããã§ãšãŒãžã§ã³ããäœãæ
ãã人éãã©ãã§å€æããŠããã®ããéçºã®ç¶æ
ãGitHubã®ã©ãã«çœ®ããŠããã®ããåããå
容ãšãªã£ãŠããŸãã è€æ°ã®AIãšãŒãžã§ã³ããéçºãããŒã«çµã¿èŸŒãããšããŠããæ¹ããAIãšãŒãžã§ã³ããšã®åœ¹å²åæ
ãèããŠãããšã³ãžãã¢ã®æ¹ã®åèã«ãªããšæããŸããããã§ã¯èŠãŠãããŸãããïŒ éçºãããŒã®ã¢ãŒããã¯ã㣠æœçãäœããšãŒãžã§ã³ã æœçææ¡ã¹ãã« èŠä»¶å®çŸ©ã¹ãã« èŠä»¶ãIssueã«åè§£ãããšãŒãžã§ã³ã Issueã®äŸåé¢ä¿ããå®è£
ã®é çªã決ããèšç»ãšãŒãžã§ã³ã 䞊åã§åãå®è£
ãšãŒãžã§ã³ã ã¹ã¿ãã¯ãã«ãªã¯ãšã¹ã QAã®ãšãŒãžã§ã³ã ãŸãšã éçºãããŒã®ã¢ãŒããã¯ã㣠ãšãŒãžã§ã³ããã¹ãã«ã¯ãPMåããéçºåããQAåãã®3ã€ã®Pluginã«ãŸãšããŠããŸãã éçºãããŒã¯æ¬¡ã®é ã«é²ã¿ãŸãã PMåãPlugin PMã®ãšãŒãžã§ã³ããNotionãGitHubãªã©ããã³ã³ããã¹ããéããŠæœçãäœããèŠä»¶å®çŸ©ã®IssueãšããŠGitHubã«äœæãã éçºåãPlugin éçºã®ãšãŒãžã§ã³ããèŠä»¶å®çŸ©ã®Issueãã¿ã¹ã¯ã«åè§£ãã芪IssueãSub-issueãäŸåé¢ä¿ãGitHubã«äœæãã èšç»ãšãŒãžã§ã³ããGitHubããIssueãšäŸåé¢ä¿ãèªã¿ãå®è£
ã®é çªã決ãã å®è£
ãšãŒãžã§ã³ããäŸåã®é ã«Issueãå®è£
ããã¹ã¿ãã¯ãã«ãªã¯ãšã¹ããšããŠç©ã ã¬ãã¥ãŒ 人éãAIããã«ãªã¯ãšã¹ããé ã«ã¬ãã¥ãŒããŠããŒãžãã QAåãPlugin QAã®ãšãŒãžã§ã³ããèŠä»¶å®çŸ©ã®IssueããQA芳ç¹ãšãã¹ãã±ãŒã¹ãäœããPlaywrightã§å®è¡ãã ããããã¯ãæ§æèŠçŽ ããšã«è§£èª¬ããŸãã æœçãäœããšãŒãžã§ã³ã ãããŒã®èµ·ç¹ã¯ãæœçãäœã段éã§ããPMåãã®ç€Ÿå
Pluginã«ãæœçãææ¡ããã¹ãã«ãšãæœçã®èŠä»¶ãå®çŸ©ããã¹ãã«ãçšæããŠããŸããæœçææ¡ã¹ãã«ã§æ¡ãéžã³ãèŠä»¶å®çŸ©ã¹ãã«ã§GitHubã®Issueã«ããããšããé ã«äœ¿ããŸãã æœçææ¡ã¹ãã« æœçææ¡ã¹ãã«ã¯ãPMããããŒããé åãåãåããåãçµãã¹ã課é¡ãæ¢ããšããããå§ããŸãã æåã«ãå°çšã®ãšãŒãžã§ã³ããæ
å ±ã䞊åã«åéããŸãã瀟å
ããã¥ã¡ã³ãããã¯KPIãæŠç¥ãã³ãŒãããŒã¹ããã¯æ¢åã®æ©èœãããŒã¿ã¹ããŒããGitHubããã¯æ¢åã®Issueãšãã«ãªã¯ãšã¹ããNotionããã¯ä»æ§æžãè°äºé²ãªã©ãéããŸããããããŠãGoogle AnalyticsãšSearch Consoleã®ã¢ã¯ã»ã¹è§£æã®ããŒã¿ãšãWebäžã®åžå Žãç«¶åã®æ
å ±ãååŸããŸãã åéããçµæãããšã«ãå¥ã®ãšãŒãžã§ã³ããè€æ°ã®èгç¹ããæœçã®ã¢ã€ãã¢ãåºããããã«å¥ã®ãšãŒãžã§ã³ããã€ã³ãã¯ããšå®çŸå¯èœæ§ãªã©ã§è©äŸ¡ããŠåªå
é äœãä»ããŸãã PMã¯ãé äœä»ããããææ¡ã®äžèЧããæ¡çšããæ¡ãéžã³ãŸããæ¡çšããæ¡ã¯æ¬¡ã«ç޹ä»ããèŠä»¶å®çŸ©ã¹ãã«ã«åŒãç¶ããŸãã èŠä»¶å®çŸ©ã¹ãã« èŠä»¶å®çŸ©ã¹ãã«ã¯ãææ¡ãããæœçã®èŠä»¶ãå®çŸ©ããŸãã æ
å ±åéã®æ®µéã§ã¯ã仮説ãšãŒãžã§ã³ããšåéãšãŒãžã§ã³ãã䞊åã«åãããŸãã仮説ãšãŒãžã§ã³ãã仮説ãç«ãŠããšãåéãšãŒãžã§ã³ãã¯ãã®ä»®èª¬ã«æ²¿ã£ãŠå¿
èŠãªããŒã¿ãéããŸãã仮説ãšãŒãžã§ã³ãã¯è¿œå ã§éãŸã£ãããŒã¿ãåãåãã仮説ãè£ä»ãããä¿®æ£ãããããŸãã ç¶ããŠãæœçã®èŠæš¡ãå€å®ããŸãããŠãŒã¹ã±ãŒã¹ããŠãŒã¶ãŒçš®å¥ãè€æ°ã«ãŸãããå Žåã¯ãMVPãšåªå
床ä»ãã®æ¡åŒµé
ç®ã«åããŸãããã®ããã§ãåéããããŒã¿ã仮説ãè£ä»ããŠããããšãæè¡çã«å®çŸã§ããããæŽçããŠãçµ±åãã©ããã«ãŸãšããŸããPMã¯ãã®ãã©ãããã¬ãã¥ãŒããä¿®æ£ãè£è¶³ãããã°äŒããŸãã PMããã©ãããæçµæ¿èªãããšãèŠä»¶å®çŸ©ã®èŠªIssueãGitHubã«äœæããŸãã èŠä»¶ãIssueã«åè§£ãããšãŒãžã§ã³ã èŠä»¶å®çŸ©ã®Issueãåãåãã®ããIssueçæã¹ãã«ã§ããèŠä»¶å®çŸ©Issueã®URLãå
¥åã«ãå®è£
ã¿ã¹ã¯ã®IssueãäœããšãããŸã§ã察話çã«é²ããŸãã æåã«ãèŠä»¶å®çŸ©Issueã®æ¬æãšã³ã¡ã³ããèªãã§èŠä»¶ãçè§£ãã察象ã®ã³ãŒãããŒã¹ãæ¢çŽ¢ããŠæ¢åã®æ§é ãšå®è£
ãã¿ãŒã³ãææ¡ããŸãã tech.findy.co.jp èšèšã®æ®µéã§ã¯ãæ¹éã®ç°ãªãèšèšæ¡ã䞊åã«äœããéçºè
ãæ¯èŒããŠèšèšæ¹éãæ±ºããŸããæ±ºããæ¹éãããšã«ãã¿ã¹ã¯ã«åè§£ããŸãã tech.findy.co.jp Issueã®äœæã¯ãå°çšã®ãµããšãŒãžã§ã³ãã«åãåºããŠããŸãããµããšãŒãžã§ã³ãã¯ãèŠä»¶å®çŸ©Issueã芪IssueãšããŠåå©çšããåIssueãSub-issueãšããŠäœæããããã§ãIssueéã®äŸåé¢ä¿ãèšå®ããŸããäŸåé¢ä¿ãæ¬æã® #çªå· ã§ã¯ãªãGitHubã®IssueäŸåé¢ä¿æ©èœïŒ blocked_by ïŒã§ç»é²ããŠããã®ã¯ãåŸæ®µã®èšç»ãšãŒãžã§ã³ããæ©æ¢°çã«èªããããã«ããããã§ãã blocked_by ã¯ãããIssueãå¥ã®Issueã®å®äºãåŸ
ã€é¢ä¿ããIssueå士ã«èšå®ããæ©èœã§ããSub-issueã§ãäœãäœãããã芪åã«æŽçãã blocked_by ã§ãã©ã®é ã«äœãããã衚ããŸãã Issueã®äŸåé¢ä¿ããå®è£
ã®é çªã決ããèšç»ãšãŒãžã§ã³ã 䞊åå®è£
ãææ®ããã®ãèšç»ãšãŒãžã§ã³ãã§ããèšç»ãšãŒãžã§ã³ãã®åœ¹å²ã¯å®è¡èšç»ã®äœæãšå®è£
ãšãŒãžã§ã³ãã®èµ·åã«éãããŠããŠãã³ãŒãã®ç·šéãworktreeã®æäœãGitHubãžã®æžã蟌ã¿ã¯ããŸããã èšç»ãšãŒãžã§ã³ãã¯èŠªIssueãèµ·ç¹ã«ãGitHubããopenãªSub-issueãšãããããã® blocked_by ãèªã¿èŸŒã¿ãŸããclosedã®Issueã¯å¯Ÿè±¡ããå€ããclosedã®Issueãžã®äŸåã¯è§£æ±ºæžã¿ãšããŠæ±ããŸãã éçºè
ã¯ãèšç»ãšãŒãžã§ã³ããæç€ºããå®è¡èšç»ã確èªããŸãã確èªãåãããšãèšç»ãšãŒãžã§ã³ãã¯ãäŸåã§ã€ãªãã£ãIssueã®ã°ã«ãŒãããšã«å®è£
ãšãŒãžã§ã³ãã䞊åã§èµ·åããŸãã tech.findy.co.jp 䞊åã§åãå®è£
ãšãŒãžã§ã³ã å®è£
ãšãŒãžã§ã³ãã¯ãäŸåã§ã€ãªãã£ãIssueã®ã°ã«ãŒãããšã«èµ·åãããæ
åœã®Issueãå®è£
ããŠãã«ãªã¯ãšã¹ããäœããŸã§ããå®å
šã«é察話ã§åãæã¡ãŸãã èšç»ã®æ¿èªãå¿
èŠãªå Žåã¯ãå
ã«èšç»ã ããè¿ãå®è£
ãšãŒãžã§ã³ããèµ·åããŸããéçºè
ãèšç»ãæ¿èªããããšã§ãæ¹ããŠå®è£
ãšãŒãžã§ã³ããèµ·åããŸãã å®è£
ãšãŒãžã§ã³ãã¯ãæ
åœã®IssueãäŸåã®é ã«äžããå®è£
ããŸããIssueããšã«git worktreeãäœãã2çªç®ä»¥éã®Issueã¯åã®Issueã®ãã©ã³ããbaseã«ããŸãããã®æç¹ã®ãã©ã³ãã¯pushãããæå
ã«çœ®ãããŸãŸã§ãã tech.findy.co.jp ã°ã«ãŒãã®äžã«äºãã«äŸåããªãIssueãããå Žåã¯ããããã䞊åã«å®è£
ããããšãçµã¿ç«ãŠãšãŒãžã§ã³ãããªããŒã¹ããŠäŸåã®é ã«äžŠã¹çŽããŸãããªããŒã¹ãå®è¡ããæš©éã¯ããã®ãšãŒãžã§ã³ãã ãã«æãããŠããŸãã 䞊ã¹çµãã£ããã©ã³ããããã«ãªã¯ãšã¹ããäœæããã¹ã¿ãã¯ãã«ãªã¯ãšã¹ããšããŠç»é²ããŸãã ã¹ã¿ãã¯ãã«ãªã¯ãšã¹ã å®è£
ãšãŒãžã§ã³ãã¯ããã«ãªã¯ãšã¹ããã¹ã¿ãã¯ãã«ãªã¯ãšã¹ããšããŠç»é²ããããã§çµäºããŸãã tech.findy.co.jp ãã«ãªã¯ãšã¹ãã®æ¬æã«ã¯ã察å¿ããIssueïŒ Closes #çªå· ïŒã芪IssueãäŸåããŠãããã«ãªã¯ãšã¹ããã»ã«ãã¬ãã¥ãŒãªã©ã®å質ä¿èšŒã®çµæãå
¥ããŸãã éçºè
ã¯ãã¹ã¿ãã¯ãäžããé ã«ã¬ãã¥ãŒããŠããŒãžããŸããäžäœã®ãã«ãªã¯ãšã¹ããããŒãžããããšãGitHubãäžäœã®ãã©ã³ããèªåã§ãªããŒã¹ããbaseãä»ãæ¿ããŸããå³ã®äŸã§ã¯ã#201ãããŒãžãããš#202ã®baseãmainã«ä»ãæ¿ãããŸããã©ããŸã§ããŒãžãããããšããç¶æ
ã¯GitHubãæã£ãŠããããããšãŒãžã§ã³ãã¯ããŒãžãåŸ
ã¡ãŸããã ããŒãžããããã«ãªã¯ãšã¹ãã¯ã Closes ã«ãã£ãŠå¯Ÿå¿ããIssueãèªåã§closeããŸããcloseãããIssueã¯ã次ã«èšç»ãšãŒãžã§ã³ããèµ·åãããšãã®èšç»ã®å¯Ÿè±¡ããå€ããŸãã QAã®ãšãŒãžã§ã³ã QAã«ã¯ãQAåãã®ç€Ÿå
Pluginã䜿ã£ãŠããŸããéçºãªããžããªãšã¯å¥ã®QAçšãªããžããªã§åãããåæå¯Ÿè±¡ã®éçºãªããžããªãèšå®ã§ç»é²ããŠãããŸãã QA芳ç¹ãäœãã¹ãã«ã¯ãèŠä»¶å®çŸ©ã®Issueã仿§ãœãŒã¹ãšããŠèªã¿ãŸããNotionãFigmaã®ããŒãžã仿§ãœãŒã¹ãšããŠæž¡ããŸãããŸã仿§ãæœåºãããšãŒãžã§ã³ãããããŒã¯ãŒããšå¯Ÿè±¡ãã¡ã€ã«ã決ããŠæ¢çŽ¢ã®ç¯å²ãçµããŸããç¶ããŠãç»é¢ãšæäœãããŒã調ã¹ããšãŒãžã§ã³ããšã倿Žã«ããååž°ãªã¹ã¯ãå€å®ãããšãŒãžã§ã³ãã䞊åã«åããããã®éã«èŠä»¶ãã³ãŒããšãã¹ãã§æºããããŠããããçªãåãããŸãã éããæ€èšŒé
ç®ã¯ããã¹ãæŠç¥ã®ã¹ãã«ã§ããã¹ãã³ãŒãã§èªååãããã®ããšãQAãã¹ãã§ç¢ºèªãããã®ãã«åããŸããQA芳ç¹ã«ã¯QAãã¹ãåŽã®é
ç®ã ããå±éãããã¹ãã³ãŒããè¶³ããŠããªãç®æã¯å¥ã®ãã¡ã€ã«ãšããŠåºåããŸãã ãã¹ãã±ãŒã¹ãäœãã¹ãã«ã¯ãQA芳ç¹ãããšã«ãåææ¡ä»¶ãæé ãæåŸ
å€ãããŒã«ããšã®çµææ¬ãæã€ãã¹ãã±ãŒã¹ãäœããŸããåã±ãŒã¹ã«ã¯ããã©ãŠã¶æäœã§èªåå®è¡ããAutoãã人éãç®èŠã§ç¢ºèªããManualããä»ããŸãã倿ã«è¿·ãã±ãŒã¹ã¯Manualã«å¯ããŠããŸãã äœæãã芳ç¹ãšãã¹ãã±ãŒã¹ã¯ãQAåºæºã®ã«ããŽãªããšã«ã¬ãã¥ãŒçšã®ãšãŒãžã§ã³ãã䞊åã«èµ·åããŠãç¶²çŸ
æ§ãšå質ã確èªããŸããQAæ
åœã¯ãææã®ãã¡ã©ããåæ ããããéžã³ãŸãã Autoã®ã±ãŒã¹ã¯ãPlaywright MCPã䜿ã£ãŠããŒã«ããšã«é ã«å®è¡ããŸããçµæã¯ã倱æããã±ãŒã¹ã®ã¹ã¯ãªãŒã³ã·ã§ãããå«ãã¬ããŒããšããŠåºåããå
ã®ãã¹ãã±ãŒã¹ã«ã¯æžãæ»ããŸãããManualã®ã±ãŒã¹ã¯ç®èŠç¢ºèªã®äžèЧãšããŠãŸãšããQAæ
åœãç®èŠã§ç¢ºèªããŸãã ãŸãšã AIãšãŒãžã§ã³ããéçºãããŒã«çµã¿èŸŒãããã§å€§äºãªã®ã¯ãAIã«ä»»ããç¯å²ãšäººéã倿ããéšåãåãåããããšã ãšèããŠããŸãã æ
å ±ã®åéãèšèšæ¡ã®äœæãå®è£
ããã¹ãã®å®è¡ãšãã£ãäœæ¥ã¯AIã«å§ä»»ããæœçã®æ¡æãèšèšæ¹éã®æ±ºå®ãå®è¡èšç»ã®ç¢ºèªãããŒãžãQAã®ç¢ºèªãšãã£ãæçµçãªå€æã¯äººéãè¡ããŸãã AIã«å§ä»»ããŠäººéãæçµå€æãããšããç·åŒããæ±ºããŠããããšããAIãšãŒãžã§ã³ããšäžç·ã«éçºãé²ããããã§ã®åæã«ãªããŸãã éçºãããŒã®ã©ãã«AIãšãŒãžã§ã³ãã眮ããã¯ãããŒã ã«ãã£ãŠçããå€ãããšæããŸãããã®èšäºã®å³ããèªåãã¡ã®ãããŒãèŠçŽããšãã®ãããå°ã«ãªãã°ããããã§ãã ãã¡ã€ã³ãã£ã§ã¯äžç·ã«äŒç€ŸãçãäžããŠãããã¡ã³ããŒãåéäžã§ããèå³ãæã£ãŠããã ããæ¹ã¯ãã¡ãã®ããŒãžãããå¿åãé¡ãããŸãã herp.careers
ã¯ããã« å
æ¥ã瀟å
ã§ AI Coding Agent Hackathon ãšããã€ãã³ããéå¬ããããŸãããæ¬èšäºã§ã¯ããã®ã€ãã³ãã®æ§åã玹ä»ããŸãã ç®ç RevComm ã«ã¯ãAIæŽ»çšæšé²å®€ (AI Promotion Office)ããšããçµç¹ããããŸããAIæŽ»çšæšé²å®€ã«ãããæŽ»åã®äžç°ãšããŠããAI Coding Agents Optimization Guideããšããã¬ã€ãã©ã€ã³ãçå®ããŠããŸãããã®ã¬ã€ãã©ã€ã³ã¯ãAI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®äŸ¡å€ãæå€§åããããã«ãåããŒã ãæ®µéçã« AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®æŽ»çšãé²ããŠããããããªæéãå®ããŠããŸããå
·äœçã«ã¯ããŸã AGENTS.md ã®å°å
¥ãªã©ããå§ããæçµçã«ã¯ãµããšãŒãžã§ã³ããã¹ãã«ãMCP ãªã©ã®æŽ»çšãã³ã¹ãåæžã®ããã®æ¹æ³è«ãªã©ã®å¿çšçãªæŽ»çšæ³ã段éçã«åãå
¥ããŠããããã®ãã©ã¯ãã£ã¹ãæŽåããŠããŸãã ãã® AI Coding Agents Optimization Guide ãå®è·µãéããŠçµç¹çã«åŠã¶å ŽãšããŠãããã«ãœã³ãéå¬ããŸããã 宿œããããš æŠèŠ é嬿é: 3 æé 䜿çšãã AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ã: Claude Code ãŸã㯠Codex 顿 ä»åã®ããã«ãœã³ã§ã¯ã¿ã€ãã³ã°ã²ãŒã ã®éçºã顿ãšããŸãããæ®æ®µãããã³ããšã³ãéçºã«æºãã£ãŠããã¡ã³ããŒãåå ãããããããã©ã³ã¿ã€ã ãšããŠã¯ Node.js ãéžå®ããŸããã åœæ¥ã®é²è¡ãã¹ã ãŒãºã«ããããã«ãããããããã³ãã¬ãŒããªããžããªãæŽåããŸãããååå è
ã¯ãã®ãã³ãã¬ãŒããããŒã¹ã«ãªããžããªãäœæããããšã§ãããã«éçºã«åãæããããšãã§ããŸãã ã¡ããªã¯ã¹ã®åéã»å¯èŠå åçš®ã¡ããªã¯ã¹ãåéã»å¯èŠåããããšã§ããŒã¯ã³äœ¿çšéãªã©ã®ã³ã¹ããæèããŠèª²é¡ã«åãçµããããã«ããããã«ãããã·ã¥ããŒããäœæããŸããããã®ããã·ã¥ããŒã㯠Claude Code ã Codex ãªã©ã®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã OpenTelemetry ãä»ã㊠Datadog ãšé£æºãããããšã«ãã£ãŠå®çŸãããŠããŸãããã³ãã¬ãŒããªããžããªã® Markdown ããã¥ã¡ã³ãã« Datadog ãšåçš®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®é£æºæ¹æ³ãèšèŒããŠãããã¹ã ãŒãºã«ã»ããã¢ããã§ããããã«ããŸããã Datadog ã«ããã¡ããªã¯ã¹ã®å¯èŠå 課é¡ã®çæ ãã³ãã¬ãŒããªããžããªã«ã¯ãåãçµãã¹ãã¿ã¹ã¯ã詳现ã«èšèŒãã Markdown ããã¥ã¡ã³ããå«ãŸããŠããŸãã ã¿ã¹ã¯ã®äžèЧ åã¿ã¹ã¯ã«ã¯ priority ãèšå®ãããŠãããããã«å¿ããŠæçµçãªæ¡ç¹çµæãå ç®ãããŸãã ã¿ã¹ã¯ã®äŸ ææçºè¡š æåŸã«ææçºè¡šã宿œããŸãããåèªã§åãçµãã å
容ã工倫ããããšã«å ããŠãæ®æ®µã®éçºç°å¢ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®æŽ»çšæ¹æ³ã«ã€ããŠã®å
±æã宿œããŸããã ææçºè¡šã®æ§å ã¹ã³ã¢ãšåæçµæã®å
±æ åã¡ã³ããŒã®ã¹ã³ã¢ã®æ¡ç¹ãšå
šäœçãªåæçµæã®å
±æã宿œããŸãããã¹ã³ã¢ã¯ runn ãš Playwright ãæŽ»çšããŠãèªåã§æ¡ç¹ã§ããä»çµã¿ãæ§ç¯ããŸããããŸããããã«ãœã³ã«åå ããã ããåã¡ã³ããŒãä»åŸããã广çã« AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããæŽ»çšã§ããããã«ãããããDatadog ã§åéããã³ã¹ãæ
å ±ãšã¹ã³ã¢ã®ããããããDatadog ã§åéããæ
å ±ãã倿ããè¯ãæŽ»çšæ³ãªã©ã«ã€ããŠãå
šäœã§å
±æããŸããã ãã£ãŒããã㯠ãŸãšã ææçºè¡šã®å ŽãéããŠãåå è
ã®æ¹ã
ãããŸããŸãªå·¥å€«ãæŽ»çšæ³ãªã©ãå®è·µãããŠããããšãããããŸããã Git worktree ã herdr / cmux ãªã©ã掻çšããŠã»ãã·ã§ã³ã䞊åå®è¡ããããšã§ãã¿ã¹ã¯ãããå¹ççã«ããªãã claude-code-orchestra ãæŽ»çšãããã«ããšãŒãžã§ã³ãã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ /grill-me ã¹ãã«ã®æŽ»çš èªåèªèº«ããŸã 詊ããããšã®ãªãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®æŽ»çšæ³ãªã©ãç¥ãããšãã§ãããããä»åŸãå®è·µããŠããããã§ãã ä»åã®ããã«ãæ®æ®µã®æ¥åãšç°ãªãé¡æã§æ°è»œã«è©Šããå Žãèšããããšã§ãçµç¹å
šäœãšã㊠AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®ç¥èŠãå
±æããæ©äŒã«ãªã£ããšæããŠããŸããä»åŸããã®ãããªåãçµã¿ãéããŠãããå®è·µç㪠AI 掻çšãé²ããŠãããŸãã
ããã«ã¡ã¯ãã¢ãã€ã«ã¢ããªéçºéšã® 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
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã









