ããã«ã¡ã¯ããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã®éçºãæ
åœããŠãã執氞ã§ããä»åã¯ãç§ãã¡ã®ãªã³ã©ã€ã³åç»ç ä¿®ãµãŒãã¹ã§ Cloudflare Stream ãå°å
¥ããçµç·¯ãšããã®ã¡ãªããã»ãã¡ãªããã«ã€ããŠè©³ããã話ãããŸãã èæ¯ ãžã§ãã¡ãã¬ãŒã¢ã«ãã㌠ã¯ãWeb / ã¢ãã€ã«ã¢ããªã§æäŸããŠããä»è·ã»éããçŠç¥ã»åšå®
å»çäºæ¥è
åãã®ãªã³ã©ã€ã³åç»ç ä¿®ãµãŒãã¹ã§ããçŽè¿ã§ã¯è€æ°ã®æ¥çš®ãžã®æäŸãéå§ããå€ãã®è·å¡ã®æ¹ã
ã«å©çšããŠããã ãããããã¯ãã«æé·ããŠããŸãã èŠä»¶ã«åã£ãåç»é
ä¿¡ãã©ãããã©ãŒã ãæ¢ã ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãå€éšã®åç»é
ä¿¡ãã©ãããã©ãŒã ã«ç ä¿®åç»ãã¢ããããŒãããŠãçºè¡ãããé
ä¿¡çšã® URL ããããã¯ãå
ã§å©çšãããµãŒãã¹æäŸãè¡ã£ãŠããŸããããã¯åç»é
ä¿¡åºç€ãã¡ã³ããã³ã¹ããã³ã¹ããåæžããåç»é
ä¿¡ã®å®å®æ§ã確ä¿åºæ¥ãããšãç®çãšããŠããŸãã ããšããšå©çšããŠããåç»é
ä¿¡ãã©ãããã©ãŒã ã¯ãéåžžã«æ©èœãè±å¯ã§æ§ã
ãªãŠãŒã¹ã±ãŒã¹ã»ãããã¯ãã«å©çšããããšãå¯èœã§ãããããããè±å¯ãªæ©èœãæäŸãããŠããŠããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§å¿
èŠãšãããŠããã®ã¯äž»ã«åç»ã®é
ä¿¡ã®ã¿ã§ããããã®ä»ã®æ©èœã¯ã»ãšãã©å¿
èŠãããŸããã§ããã ãŸãããããã¯ãã®æ¥æé·ã«äŒŽã£ãŠåç»é
ä¿¡è²»çšã®å¢å€§ / 宿çãªåç»é
信容éã®èŠç©ãããããã«äŒŽãåè«ãšãã£ãããµãŒãã¹å©çšã®äžã§çºçããã³ã¹ãé¢ã«èª²é¡ãæããŠããŸããã ããã§ãåç»é
ä¿¡ãã©ãããã©ãŒã ã®ç§»è¡ãæ€èšããããšã«ããŸãããç§»è¡å
ã®åç»é
ä¿¡ãã©ãããã©ãŒã ãéžå®ããéãç§ãã¡ãéèŠããã®ã¯ä»¥äžã®ãã€ã³ãã§ãã ã·ã³ãã«ãªéçš ïŒå°ä»»ã®ã€ã³ãã©ãšã³ãžãã¢ãããªããŠãç°¡åã«éçšã§ããããš ã³ã¹ãå¹ç ïŒäœ¿ã£ãåã ãã®æéãçºçããäºç®ç®¡çãããããããš æ©èœé¢ ïŒé«åºŠãªæ©èœã¯äžèŠã§ãåç»é
ä¿¡ã«å¿
èŠãªæäœéã®æ©èœãããããš ãããã®èŠä»¶ãæºãããµãŒãã¹ãæ€èšããçµæãç§ãã¡ã¯ Cloudflare Stream ãæ¡çšããããšã«ããŸããã ç«¶åãµãŒãã¹ãšã®æ¯èŒ ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãCloudflare Stream å°å
¥åã«ããã€ãã®åç»é
ä¿¡ãã©ãããã©ãŒã ãæ€èšããŸããããã®äžã§ããç¹ã«æ¯èŒæ€èšããã®ã ULIZA ãš AWS Media Services ã§ããã ULIZA ULIZA ã¯æ¥æ¬äŒæ¥ãæäŸããåç»é
ä¿¡ãã©ãããã©ãŒã ã§ãæ¥æ¬èªã§ã®ãµããŒããå
å®ããŠããç¹ãé
åã§ããããŸããåç»ã®ç·šéãé
ä¿¡ãåæãªã©ãå€å²ã«ãããæ©èœãæäŸããŠãããWeb ãµãŒãã¹äžã§ CMS æ©èœãå©çšã§ãããããå€ãã®ãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ã§ããæè»æ§ããããŸãã ãããããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãåç»é
ä¿¡ã®åºæ¬çãªæ©èœã®ã¿ãå¿
èŠã§ãããULIZA ã®ãããªãªãããªæ©èœã¯å¿
ãããå¿
èŠã§ã¯ãããŸããã§ããããŸããæéäœç³»ã Cloudflare Stream ãšæ¯èŒããŠé«é¡ã§ãã£ããããã³ã¹ãé¢ã§ã®æžå¿µããããŸããã AWS Media Services AWS Media Services ã¯ãAWS äžã§åç»é
ä¿¡ã€ã³ãã©ãæ§ç¯ã§ãããµãŒãã¹ã§ããæè»æ§ãé«ãããããã¯ãã®èŠä»¶ã«åãããŠã«ã¹ã¿ãã€ãºã§ããç¹ãé
åã§ãããã€ã³ãã©æ§ç¯ãéçšã«ã¯éçºå·¥æ°ã»ä¿å®éçšã³ã¹ããèŠãããããããŒã¿ã«ã§ã®ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãåè¿°ã®éãã€ã³ãã©å°ä»»ã®ãšã³ãžãã¢ãããªããããéçšè² è·ã®äœããµãŒããŒã¬ã¹ãªåç»é
ä¿¡ãã©ãããã©ãŒã ãæ±ããããŠããŸããããã®ãããAWS Media Services ã¯æ¡çšãèŠéãããšã«ãªããŸããã Cloudflare Stream ãæ¡çšããçç± Cloudflare Stream ã®æ¡çšã決å®ããçç±ã«ã¯ãããã€ãã®èŠçŽ ããããŸãã ã·ã³ãã«ãªæéäœç³» Cloudflare Stream ã¯ãåç»ã®é
ä¿¡æéãšä¿åæéã«åºã¥ãã·ã³ãã«ãªåŸé課éå¶ã§ãã é
ä¿¡è²»çšïŒ 1,000 åããã 1 ãã« ä¿åè²»çšïŒ 1,000 åããã 5 ãã« Pricing | Cloudflare Stream docs ä»ã®åç»é
ä¿¡ãã©ãããã©ãŒã ãšæ¯ã¹ãŠããªãæçãªæéäœç³»ãšãªã£ãŠãããäºç®ç®¡çãè¡ããããã®ãç¹åŸŽã§ãã課é圢æ
ãå°ãç°ãªãããæ¯èŒãã¥ããã®ã§ããããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã®ã±ãŒã¹ã§ã¯ç«¶åãµãŒãã¹ãšæ¯èŒããŠãå®äŸ¡ãªæéã§ã®å©çšãå¯èœã§ããã ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ã7,500 æ¬ä»¥äžã®åç»ãæäŸããŠãããæé¡ã§çŽ 390 ãã«ã®ä¿åè²»çš + åçæéã«ããé
ä¿¡è²»çšãçºçããŠããŸãããã®æéäœç³»ã®ãããã§ãä»åŸã®ã³ã¹ããæç¢ºã«äºæž¬ã§ããäºç®ã«å¿ããéçšãå¯èœã«ãªããŸããã å®éã®èª²éæã®ç»é¢ é«å質ãªåç»ãå®å®ããŠæäŸ Cloudflare Stream ã§ã¯ããŠãŒã¶ãŒãé«ç»è³ªã»äœç»è³ªã©ã¡ãã§èŠèŽããŠãæéãå€ãããªããšããç¹é·ããããŸããç¹ã«ãç§ãã¡ã®ãããªç ä¿®ãµãŒãã¹ã§ã¯ãåç»å
ã®ããã¹ãã现ããéšåã®å¯èªæ§ãéèŠãšãªã£ãŠããå ŽåããããŸãã以åå©çšããŠãããµãŒãã¹ã§ã¯ãããŒã¿è»¢ééã«ãã£ãŠæéãå€åãããããé«ç»è³ªã®åç»ãæäŸããéã«ã³ã¹ãé¢ã§ã®æžå¿µããããŸããããCloudflare Stream ã§ã¯ãã®å¿é
ããªããå®å®ããé«ç»è³ªã®åç»é
ä¿¡ãå¯èœã«ãªããŸããã ç§»è¡ã³ã¹ãã®äœã ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯åè¿°ã®éããããšããšã¯å¥ã®åç»é
ä¿¡ãã©ãããã©ãŒã ãå©çšããŠããŸããããã¡ãããç§»è¡ããäœæ¥ãç°¡åã«å®çŸå¯èœã§ãã ãããã¯ãäžã§åé¡ãªãåç»ãèŠèŽã§ãããã®ç¢ºèªã¯ãWeb äžã§èšå®ã管çãå®çµãããããåç»ãã¢ããããŒãããã ãã§é
ä¿¡çšã® URL ãªã©ãçºè¡ãããã€ã³ãã©å°ä»»ã®ãšã³ãžãã¢ãããªããŠãåé¡ãªãæ€èšŒã«é²ãããšãå¯èœã§ããã å®éã®åç»ãã¡ã€ã«ç§»è¡ã«ã€ããŠãã ã¢ã¯ã»ã¹å¯èœãª URL ããèªåã§åãèŸŒãæ©èœã API ãšããŠæäŸããŠãã ãããæ¢åã®åç»ãã©ãããã©ãŒã ã§æéä»ãã®ãªã³ã¯ãçºè¡ããCloudflare Stream API çµç±ã§åç»é
ä¿¡ã® URL ãæž¡ãã ãã§ã¢ããããŒãããããšãå¯èœã§ãã éçºè
äœéšã®è¯ã éçºè
äœéšãšããé¢ã§ãã Cloudflare Stream ã®é
åã¯éåžžã«å€§ããã£ãã§ãããŸããGoãTypeScriptãPython åãã® SDK ãæäŸãããŠãããAPI ã䜿ã£ãéçºãéåžžã«ã¹ã ãŒãºã«é²ã¿ãŸããã ããã«ãå°çšãã¬ã€ã€ãŒã®æäŸããããããåç»ã®èŠèŽç°å¢ãè¿
éã«æ§ç¯ã§ããŸããã API ããã¥ã¡ã³ã ãéåžžã«å
å®ããŠãããSDK ãæªå¯Ÿå¿ã®èšèªã§ã容æã«å®è£
ãå¯èœã§ãã Example ãªã©ãå
å®ãã API ããã¥ã¡ã³ã å®éã«å°å
¥ããŠã®ææ Cloudflare Stream ãå®éã«éçšããŠã¿ãŠæããã¡ãªãããšãè§Šã£ãŠã¿ããŸã§å€æããªãã£ã課é¡ã«ã€ããŠããã€ãã玹ä»ããŸãã ã³ã¹ãé¢ã§ã®æºè¶³åºŠ â æåŸ
ããŠããéããã·ã³ãã«ãªæéäœç³»ã§äºç®ç®¡çãéåžžã«å®¹æã§ããããŸããèšèŒãããŠããæé以å€ã®è¿œå 課éãçºçãããã³ã¹ãé¢ã§ã®äžå®ã¯æããŠããŸããã å®å®æ§ â å°å
¥ããŠããä»ãŸã§ãCloudflare Stream ã®å®å®æ§ã«èª²é¡æã¯ãããŸãããé害æ
å ±ã¯ Cloudflare Status ã§ç¢ºèªã§ãããããéçšã®éã®äžå®èŠçŽ ãå°ãªãæžãã§ããŸãã éçšé¢ã§ã®è©äŸ¡ ð 以åå©çšããŠãããµãŒãã¹ã§ã¯ãå©çšåž¯åå¹
ã®ç£èŠããã©ã³å€æŽã®æç¶ãã»æ¬¡åå¥çŽã®ããã®æ³å®åž¯åå¹
ç®åºã«å·¥æ°ãããã£ãŠããŸããããCloudflare Stream ã§ã¯ãããäžèŠã«ãªããéçšå·¥æ°ãåæžã§ããŸããã äžæ¹ãCMS æ©èœãæå°éã«æããããŠããç¹ã¯å°å
¥ã«ãããŠèª²é¡ã«ãªããããç¹ã§ããäŸãã°ãåç»ã®ãã£ã¬ã¯ããªç®¡çãã§ããªããããID ããŒã¹ã§ã®ç®¡çãèªåã§èšèšããå¿
èŠããããŸãããŸããæ€çŽ¢æ©èœãªã©ãæäœéããæäŸãããŠããªããããåºæ¬çã«ç§éã®ãµãŒãã¹ã§ã¯ã Cloudflare Stream äžã«ã¢ããããŒããããåç»ã® meta ãã£ãŒã«ãã« API çµç±ã§ã¢ã¯ã»ã¹ããåç»ã®çš®å¥ç®¡çïŒãã¹ãçšã®åç» / æ¬çªçšã®åç»ãªã©ïŒãè¡ã£ãŠããŸãã ãã®ä»ã«ãã Cloudflare åŽã§æäŸãããŠããã¢ã©ãŒãã®ç²åºŠãç²ãã®ã¯èª²é¡ãšããŠãããŸãããé
信容éãšç°ãªãä¿å容éã¯æåäœã§äºå賌å
¥ãã課é圢æ
ã§ãããã®ããããŠãŒã¶ãŒã®å©çšç¶æ³ã«åãããŠæ®å®¹éãæžã£ãŠããã容éã賌å
¥ããå¿
èŠããããŸããå®å
šã«ãµãŒãã¹æäŸåŽã§ã¢ããããŒãããåç»ã管çã§ããå Žåã¯åé¡ã«ãªããªãã®ã§ããããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãŠãŒã¶ãŒãåç»ãã¢ããããŒããããŠãŒã¹ã±ãŒã¹ãååšããããã容éã®ç£èŠãå¿
èŠã§ãã Cloudflare ãæäŸããŠããæ©èœãšããŠå®¹éã®äžéãè¿ã¥ããšã¡ãŒã«ãå±ãã®ã§ãããå²åã§ã®éç¥ã®ãããç·å©çšå®¹éãå¢ããå Žåã¯ãæ®ã æ°%ã§ã¯ãããã容éã®å®æ°ïŒnGB ã¢ããããŒãå¯èœãïŒãèŠããšåœååé¡ãªãç¯å²ã§ããããšããããšãå€ã
ãããå®éã«å®¹éã賌å
¥ããªããšäžè¶³ããŠããŸãã¿ã€ãã³ã°ããã€ãããããŸãããCloudflare Stream åŽã§æ®å®¹éãååŸãã API ãæäŸãããŠãããããåç»ã¢ããããŒãæã«ãã® API ãå©çšããŠå®¹é確èªãè¡ããæ®å®¹éãå°ãªããªã£ãå Žåã« Slack éç¥ãè¡ãããã«éçºãè¡ããŸããã å®éã«éä¿¡ãããã¡ãŒã«éç¥ã3,322 åããã°çŽè¿ã¯å
åãªã®ã ããæ¯æ¥éç¥ãæ¥ã ãŸããWeb ããã·ã¥ããŒãäžã§ã®ãã¡ã€ã«ç®¡çãéå®çã§ãããããä»ã®åç»é
ä¿¡ãã©ãããã©ãŒã ïŒULIZA ãªã©ã®ãªãããªæ©èœãæã€åç»é
ä¿¡ãã©ãããã©ãŒã ïŒã«æ¯ã¹ãŠç®¡çã®æéããããéšåããããŸãã å®éã®ããã·ã¥ããŒãç»é¢ å®éã®åç»è©³çްç»é¢ æ©èœé¢ã§ã®è©äŸ¡ ð åºæ¬çã«ã¯æåŸ
ããŠããéããåç»é
ä¿¡ã®å®è£
ãã·ã³ãã«ã«å®çŸããããšãã§ããŸãããããããäžéšã®ã±ãŒã¹ã«ãã㊠HLS / MPEG-DASH ã䜿ã£ãåç»é
ä¿¡ãžã®å¯Ÿå¿ã«å·¥æ°ãããããŸããã HLS / MPEG-DASH ã§ã®é
信㯠ã¢ãããã£ãã»ãããã¬ãŒãã»ã¹ããªãŒãã³ã° ãåºæ¬ãšãªããèŠèŽè
ã®ãããã¯ãŒã¯ç°å¢ã«ãã£ãŠåçã«é
ä¿¡ãããç»è³ªã決ãŸããŸãããã®æ©èœã¯ãããã¯ãŒã¯ç°å¢ã«æé©ãªç»è³ªãèªåã§éžæããããããåç»ãèŠèŽããè·å¡ã®æ¹ã
ã«ãšã£ãŠããè¯ãèŠèŽäœéšãæäŸããããšã«ç¹ãããŸããã äžæ¹ããã®æ©èœãå©çšãããšäžéšã®åç»ãã¬ã€ã€ãŒã§ã¯èŠèŽç«¯æ«ã®ãããã¯ãŒã¯ç°å¢ã«é©ããæé«ç»è³ªã§ã®ã¿é
ä¿¡ãããç»è³ªããã¬ã€ã€ãŒäžã§éžæåºæ¥ãªããšããåé¡ããããŸããããžã§ãã¡ãã¬ãŒã¢ã«ãããŒã®åäœç°å¢ã®äžã§ã¯ãiOS Safari x Stream Player ã React Native ã® Expo Player ã該åœããŸãã ãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã§ã¯ãç§çšã¹ãããå©çšããŠåç»ç ä¿®ãåè¬ãããè·å¡ã®æ¹ã Wi-Fi ç°å¢ãçšæã§ãããããŒã¿éä¿¡éãç¯çŽããããã«ç»è³ªãäžããŠèŠèŽãããšããã±ãŒã¹ããããŸããèªåçã«æé«ç»è³ªã§ã®é
ä¿¡ãè¡ãããŠããŸãå Žåãæå³ããããŒã¿éä¿¡éãå¢å€§ããŠããŸãããšã§äžéšã®è·å¡ã®æ¹ã«ãšã£ãŠäžå©çãçããå¯èœæ§ããããŸãã 以åãŸã§å©çšããŠããåç»é
ä¿¡ãã©ãããã©ãŒã äžã§ã¯ãmp4 ãã¡ã€ã«ã§è€æ°ç»è³ªã®åç»ãæäŸãããŠãããããããŠã³ããŒããã mp4 ãã¡ã€ã«ã®ç»è³ªãéžæããããšã§èŠèŽããè·å¡ã®æ¹ãç»è³ªãå¶åŸ¡ããããšãåºæ¥ãŸãããäžæ¹ã Cloudflare Stream ã§ã¯ mp4 ãã¡ã€ã«ã§ã®é
ä¿¡èªäœã¯èšå®ã«ããå¯èœã§ãããé
ä¿¡ããã mp4 ã®ç»è³ªã¯åžžã«æé«ç»è³ªã§ã®é
ä¿¡ã«åºå®ããããããä»åã®ç»è³ªãéžæããããšããã±ãŒã¹ã«ã¯å©çšã§ããŸããã§ããã ãŸãã mp4 ãå©çšãããšåç»é
ä¿¡ãçºçããæ®µéã§åç»å
šäœã®åçæéã課é察象ã«ãªããŸããäŸãã° 30 åã®åç»ã 1 åã ãèŠèŽããŠé
ä¿¡ç»é¢ãéããå Žåã HLS / MPEG-DASH ã ãš 1 åãé
ä¿¡è²»çšã®èª²é察象ãšããŠèšäžãããã®ã«å¯Ÿãã mp4 ã§ã®é
ä¿¡ã ãš 30 åãé
ä¿¡è²»çšã®èª²é察象ãšããŠèšäžãããŠããŸããŸããå©çšç¶æ³ã«ãã£ãŠã¯ã³ã¹ãããããå¯èœæ§ããããããæ³šæãå¿
èŠã§ãã ãã®é
ä¿¡ããç»è³ªã«ã€ããŠã®èª²é¡ã¯ã Cloudflare Stream ã§æäŸãããŠããåç»é
ä¿¡æã« ç»è³ªãå¶åŸ¡ãããªãã·ã§ã³ïŒclientBandwidthHintïŒ ãå©çšããããšã§è§£æ±ºããããšãåºæ¥ãŸããããã®ãªãã·ã§ã³ã¯æçµææ®µã§ãããšããæšãããã¥ã¡ã³ãå
ã«èšèŒãããŠããŸãããä»åã®ã±ãŒã¹ã§ã®å©çšã¯åŠ¥åœã ãšããããšã Cloudflare Stream ã®éçºè
ã§ãã Zaid Saleem æ°ã« X äžã§ç¢ºèªæžã¿ã§ãã Makes sense. Have you already tried clientBandwidthHint feature of Stream? pic.twitter.com/6KAf94MNuR â Zaid Saleem (@zaid) May 17, 2024 çµæçã«ç»è³ªãéžæããæ©èœãæäŸããããšãåºæ¥ãŸãããããCloudflare Stream ãæäŸããé
ä¿¡æ¹æ³ã®ä»æ§äžä»æ¹ãªããšããã§ã¯ããã€ã€ãä»ã®åç»é
ä¿¡ãã©ãããã©ãŒã ã§æäŸããŠãã mp4 ã®ç¹å®ã®è§£å床ãé
ä¿¡ããæ¹æ³ãšæ¯èŒãããšãçŽæçã§ã¯ãªãéçºå·¥æ°ãããã£ãŠããŸããŸããã clientBandwidthHint ãšè§£å床ã®å¯Ÿå¿è¡šïŒãžã§ãã¡ãã¬ãŒã¢ã«ãããŒã®ãã«HDåç»ã§æ€èšŒããããŒã¿ïŒ clientBandwidthHint ç»è³ª 0.1 240p 0.2 360p 0.3 480p 0.4 480p 0.5 720p 0.6 720p 0.7 720p 0.8 720p 0.9 720p 1.0 1080p Cloudflare Stream ã®æ¡çšãæ€èšããŠããæ¹ãž Cloudflare Stream ãå°å
¥ããã¡ãªããã¯å€§ããã§ããããµãŒãã¹ã®ç¹æ§äžããã¹ãŠã®ã±ãŒã¹ã«é©ããŠããããã§ã¯ãããŸããã以äžã®ãã€ã³ããèžãŸããŠæ€èšããããšããå§ãããŸãã Cloudflare Stream ãåããŠããã±ãŒã¹ ã·ã³ãã«ã§äºæž¬å¯èœãªæéäœç³»ãåžæããŠãã é«å質ãªåç»ãå®å®ããŠæäŸããã éçºãªãœãŒã¹ãéçšãªãœãŒã¹ãéãããŠãã éçºè
åãã®ãµããŒããããã¥ã¡ã³ããå
å®ããŠããç°å¢ãæ±ããŠãã ç¹ã«ãCloudflare å
ã®ä»ãµãŒãã¹ïŒWorkers ã Pages ãªã©ïŒãå©çšããŠããå ŽåãStream ãšã®çµã¿åããã§ã³ã¹ãåæžãéçšã®å¹çåãæåŸ
ã§ããŸãã Cloudflare Stream ãåããŠããªãã±ãŒã¹ äžæ¹ã§ã以äžã®ãããªã±ãŒã¹ã§ã¯ä»ã®ãµãŒãã¹ãæ€èšããããšãéžæè¢ã«å
¥ããã¹ãã§ãã åç»ãµã€ãºã 30GB ãè¶
ãããããªåç»ãå¿
èŠãªå Žå Cloudflare Stream ã§ã¯ã1 åç»ãããæå€§ 30GB ã®ã¢ããããŒãå¶éããããŸããé·æéã®é«è§£å床åç»ãæ±ãå Žåã¯ããã®å¶éã«æ³šæãå¿
èŠã§ãã By default, a video upload can be at most 30 GB. Is there a limit to the amount of videos I can upload? | Frequently asked questions about Cloudflare Stream é«åºŠãªåææ©èœãå¿
èŠãªå Žå Cloudflare Stream ã®åææ©èœã¯ãããã ãªãã®ã§ãããããèŠèŽå±¥æŽã詳现ãªèŠèŽããŒã¿ã®åæã¯å€éšããŒã«ã§è¡ãå¿
èŠãããå ŽåããããŸãã å®éã®åæç»é¢ - åºæ¬çã«èª²éåäœã®åçæéã«æ³šç®ãããåææ©èœã®ã¿æäŸãããŠãã åç»ç®¡çæ©èœãæ±ããããå Žå åè¿°ã®éãã Cloudflare Stream ã¯ä»ãµãŒãã¹ãšæ¯ã¹ãCMS æ©èœã¯éåžžã«éãããŠããŸããåç»ã®ãã£ã¬ã¯ããªç®¡çãã¿ã°ä»ããªã©ã现ãã管çãå¿
èŠãªå Žåã«ã¯ãèªåã§ç®¡çã·ã¹ãã ãæ§ç¯ããããä»ã®ãµãŒãã¹ãéžã¶æ¹ãå¹ççã§ãã ãããã« Cloudflare Stream ã®ã·ã³ãã«ãªæéäœç³»ãšé«å質ãªåç»æäŸã¯å€§ããªé
åã§ããäžæ¹ã§ãCMS æ©èœãé«åºŠãªåææ©èœãæ±ããå Žåã«ã¯ãä»ã®ãµãŒãã¹ãèŠéã«å
¥ããå¿
èŠããããŸãã åç»é
ä¿¡ãã©ãããã©ãŒã ã®éžå®ã¯ããããã¯ãã®ç¹æ§ãããŒã ã®ç¶æ³ã«å¿ããŠç°ãªããŸããããã®èšäºããã®äžå©ã«ãªãã°å¹žãã§ããä»åŸããŠãŒã¶ãŒäœéšã®åäžãšãããã¯ãã®æé·ã«åããŠãæé©ãªæè¡éžå®ãç¶ããŠãããããšæããŸãã 2024 幎 9 ææç¹ã®æ
å ±ãããšã«å·çããŸããããµãŒãã¹å
容ã仿§ã¯å€æŽãããå¯èœæ§ããããŸãã®ã§ãææ°æ
å ±ã¯å
¬åŒã®æ
å ±ããåç
§ãã ããã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ã人æãã©ãããã©ãŒã æ¬éšã§ EngineeringManager ãããŠããåæã§ãã2024 幎 4 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããå°ãã¥ã€ãšã³ãžãã¢ã®çµç¹äœãã«æºããå§ããŠããŸãã ã¡ãã¬ãŒã¯ 2024/8/22 ã 8/24 ã® 3 æ¥éã«æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ã«ãŠéå¬ãããã iOSDC Japan 2024 ãã«ãã©ããã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã iOSDC ã¯ãiOS é¢é£æè¡ãã³ã¢ã®ããŒããšãããœãããŠã§ã¢æè¡è
ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãåæããã¢ããªãšã³ãžãã¢ãéãå€§èŠæš¡ãªã€ãã³ãã§ããæ¯å¹Žãå€ãã®ã¢ããªãšã³ãžãã¢ãéãŸããææ°ã®æè¡ããã¬ã³ããå
±æããæŽ»æ°ããã€ãã³ããšããŠç¥ãããŠããŸãã 2016 幎ããéå¬ãããä»å¹Žã§ 9 åç®ãã¡ãã¬ãŒã¯ãªããšä»å¹Žã§ 8 幎é£ç¶ã®ã¹ãã³ãµãŒåå ãšãªããä»å¹Žãæ¡çšæ
åœã»åºå ±ã»ãã€ãã£ãã¢ããªãšã³ãžãã¢ãåå ããå€ãã®ãšã³ãžãã¢ãé¢ä¿è
ã®æ¹ã
ãšã®äº€æµãæ·±ããããšãã§ããŸããã äŒå Žã®æ§å äŒå Žã¯æ©çš²ç°å€§åŠè¥¿æ©çš²ç°ãã£ã³ãã¹ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ããªãã©ã€ã³ 1100 åããªã³ã©ã€ã³ 400 åã®åèšçŽ 1500 å以äžã®åå è
ã§è³ãããŸããã ç»å£ã LT ãªã©ããããããããéåžžã»ãã·ã§ã³ã 50 ã»ãã·ã§ã³ãLT ãã«ãŒããŒãº LT å«ã㊠30 æ¬ä»¥äžã§å
容ãå¹
åºããæ§ã
ãªã€ã³ããããåŸãããšãã§ããŸããã ãŸãã«ãã¢ããªãšã³ãžãã¢ã®ãç¥ãããšããé°å²æ°ã§ããïŒ äŒå Žã¯åããŒã¹ãã¹ã¿ã³ãã©ãªãŒæ¹åŒã§å·¡ã圢åŒã ã£ãããšããããã©ã®ããŒã¹ã»ç©ºéãçµå§è³ããã§ãã¹ãã³ãµãŒã»äžè¬åå è
ã»ãšã³ãžãã¢ã»äººäºé¢ä¿ãªã亀æµãè¡ãããŠããŸããã倧åŠã§ã®éå¬ãšããããšãããã®ãåŠçãå€ãåå ããŠããã®ãå°è±¡çã§ããã ã¹ãã³ãµãŒããŒã¹ã¹ã¿ã³ãã©ãªãŒãããªãŒããªã³ã¯ã軜é£ããæŒæã«ã¯ãããã³ã«ãŒãæããŒããã倿¹ããã¯ã¢ã«ã³ãŒã«é¡ã®æäŸããã€ã«ãããã£ãã€ã³ããªã©ã®ã¢ãŒãããŒã¹ãªã©æ¥œããããã®æ§ã
ãªå·¥å€«ããããŠããŠããŸãã«ã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªã空éäœãããããã«ã³ãã¡ã¬ã³ã¹ã ã£ããšæããŸãããéå¶ã®æ¹ã
ã®æºåãšåœæ¥ã®ã¹ã ãŒãºãªå¯Ÿå¿ã«æè¬ã§ãã ïŒã¹ã¿ã³ãã 1 åæã㊠BINGO ãããšããçŒãã2 åæãããšã¯ã¬ãŒããå
šéšéãããš iOSDC ããã«ãã£ãšäº€æïŒ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãã¡ãã¬ãŒãå±éããã¢ããªã®ç޹ä»ãšãã¢ã³ã±ãŒãããã«ãçšããŠåå è
ã®æ¹ã
ã«å»çäœéšã«é¢ãããæ©ã¿ã䌺ããŸããã ç¹ã«èª²é¡ãšããŠå€ãã£ãã¯ä»¥äžã® ïŒ ã€ åŸ
ã¡æéãé·ã å§åçäžäœã§ãããç¹ã«åäŸãããå®¶åºã¯åäŸãé£ããŠè¬å±ãžãè¡ããªããŠã¯ãããªãã®ãèŸã ãšã®åçã倿° ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã 倧åå¢ããŠã¯ãããã©ããããšã®å£°ã§ããïŒ ãªã³ã©ã€ã³ã§äºçŽããã é»è©±ã§äºçŽããã®ãé¢åãšããæ¹ãå§åçã«å€ãã£ã äºçŽãšã¯ã¡ãã£ãšéããã©ç
é¢ã®å£ã³ããèŠããããšãã声ãå€ãã£ãã§ã ããããã®èª²é¡ã«ã€ããŠã¡ãã¬ãŒã®ãããã¯ãã»ãµãŒãã¹ãéããŠè§£æ±ºã§ããŠããããšã»ãããã解決ããŠããããšãªã©ãã玹ä»ãããŠããã ããŸããã iOS ã®ã€ãã³ããšããããšãããã宿œã« CLINICS ã¢ã㪠ã®ç»é¢ããèŠãããªãã説æãããŠããã ã以äžã®ãããªææ³ãããã ããŸããã ãªã³ã©ã€ã³èšºçãåãããŠãè¬ã Uber Eats ã§å±ãããããããŸã§äœéšãå°éããŠãããšãªæããªãã£ã ç
颿€çŽ¢ã® UI ãäœæãæ©ãå¿å°ããã»ã©ããã£ãŠå®è£
ããŠããã®ã ãªã³ã©ã€ã³èšºçã§è©±ããå
容ãé»åã«ã«ãã«æžã蟌ãã ãã§ããªãã®ãïŒãªã©æ°ããæ©èœææ¡ ãªã©ãªã©ã ã¡ãã¬ãŒã¯ã¢ããªãå±éããŠããå°è±¡ãããŸããªãã£ãã®ã§ãåèã«ãªã£ããªã©ã®å£°ãé ããŸããã åã¢ããªã®æè¡ã¹ã¿ãã¯ã¯ä»¥äžã®ç»åã®éãã§ãReact Native ã Flutter ãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã æè¡ã§éçºããŠãããã®ãããã° Swift, Kotlin ãªã©ãã€ãã£ãèšèªã§éçºããŠãããã®ãããæäŸããã䟡å€ãã¢ããªç¹æ§ã«ãã£ãŠæ§ã
ãªæè¡ã¹ã¿ãã¯ãéžå®ããŠããŸãã CLINICS ã§ã¯å
šç»é¢ã®å®è£
ã SwiftUI ãSPM ãçšãããã«ãã¢ãžã¥ãŒã«æ§æã ã£ãããšæ°ããæè¡ãç©æ¥µçã«å°å
¥ããŠããŸãã ã»ãã·ã§ã³ãããŒã¹ å人çã«æ°ã«ãªã£ãã»ãã·ã§ã³åã³ãåŒç€Ÿã¡ãã¬ãŒã®åç°ã«ããç»å£ã«ã€ããŠå°ã玹ä»ãããŠããã ããã°ãšæããŸãã Ditto SDK 玹ä»: ã€ã³ã¿ãŒããããªãã§å¿«é©ãªããŒã¿åæ ã¢ããªå
ã« SDK ã®åŠçãå
¥ããŠãããšãP2P ã§ç«¯æ«å士ãããŒã«ã«ã§ããåãããŠããŒã¿ãåæã§ããŸãããšãããµãŒãã¹ã®ç޹ä»ã Flutter ã RN ã«ã察å¿ããŠããŠãããŒã«ã«ã®ç«¯æ«å士㧠P2P ãããæãã«ããéšåããšãããŒã«ã«ã®ããŒã¿ãåžãäžããŠé©å®é
ä¿¡ããäžå€®ãµãŒããŒããšãã£ãå°è±¡ã§ãéèŠããããã ãšæããŸããã Swift 6 ã® Typed throws ãš Swift ã«ããããšã©ãŒãã³ããªã³ã°ã®å
šäœåãåŠã¶ Swift 6 ã®æ°æ©èœã® 1 ã€ã§ãã Typed throws ã«ã€ããŠã®ç޹ä»ã 宿ã«äœ¿ãã¹ãã§ã¯ãªããšããªãããã©ãããå Žé¢ã§ã¯å¹æçããªã©ãå®è·µçãªå
容ãèãããšãã§ããŸããã æ®æ®µäœ¿ã£ãŠãã Optional ããšã©ãŒãã³ããªã³ã°ã«ãããŠã©ã®äœçœ®ã¥ãããå«ãããšã©ãŒãã³ããªã³ã°ã®å
šäœåã®æŠèгãçè§£ããããšãã§ããŸããã 座è«äŒ ãStrict Concurrency ãš Swift 6 ãéãæ°æä»£: ç§ãã¡ã¯ã©ãçãããïŒã è¶
æºå¡ã®äººæ°ã»ãã·ã§ã³ã§ãSwift 6 察å¿ã®çãäžãããæããŸããã CLINICS ã¢ããªã§ã Swift 6 察å¿ãé²ããŠããã®ã§ãããã©ããŸã§ã MainActor ã®ã¹ã³ãŒããšããããã©ã®ã¬ãã«ã§ã®ãªãã¡ã¯ã¿ãªã³ã°ãåæã«ãã£ãŠããããè°è«ã«ãªã£ãŠããã®ã§ã倧å€åèã«ãªããŸããã 座è«äŒãšãã圢åŒãæ®æ®µã®ããŒã¯ãšã¯ç°ãªãæ°é®®ã§ããã bitkey ããããŒã¹ïŒbitlink ãããããŠïŒ å人çã«äžçªé¢çœãã£ãã®ã¯ Bitkey ããã®ããŒã¹ã§ããiBeacon ã«ãªãèªç€Ÿè£œå(bitlink)ãæºåž¯ããŠæ©ããŠãã瀟å¡ã®æ¹ãããã®ã§ãiOS ã¢ããªãèªäœããŠãã®äººãèŠã€ããããã°ãæ¯åãæž¡ãããšããäŒç»ã§ããã ã¡ãã¬ãŒã¡ã³ããŒãçµæ§æ©ãã«ã¢ããªäœã£ãŠæ¢ããŸãããã3 çªç®ã ã£ããšã®ããšãæ®å¿µïŒ Forkwell ããããŒã¹ äŒå Žã§é
åžããŠããè³æã«ãã€ãæšãæ±äººãšããŠã¡ãã¬ãŒã®æ±äººæ
å ±ãæ²èŒããŠããã ããŠããŸããïŒãã€ããäžè©±ã«ãªã£ãŠãããŸãïŒ ã¡ãã¬ãŒç»å£ å»çã¢ããªéçºã«ãããå®å
šæ§ãšçç£æ§ã®ãã©ã³ã¹ã«ã€ããŠå»çãã©ãããã©ãŒã æ¬é𠿣è
ãããã¯ãéçºã°ã«ãŒãã®åç° ( @shzero5 ) ãç»å£ãããŠããã ããŸããã å»çã¢ããªã®éçºã«ãããŠã¯ãæ£è
ã®å®å
šãšå©äŸ¿æ§ã®åäžãæéèŠèª²é¡ãšãªããŸããäžæ¹ã§ãå»çå¶åºŠã®å€æŽãžã®è¿
éãªå¯Ÿå¿ãæ°èŠæ©èœã®å®è£
ãªã©ãé«ãçç£æ§ãæ±ããããŸãããã® 2 ã€ã®èŠä»¶ã¯çžåãããã®ã§ããããã®äž¡ç«ã¯é¿ããããªã課é¡ã ãšæããŠããŸãã ä»åã®ç»å£ã§ã¯ãã¡ãã¬ãŒã®ãªã³ã©ã€ã³èšºçãµãŒãã¹ãå«ãç·åå»çã¢ããªãCLINICSãã®éçºãéããŠãããã«ããŠå®å
šæ§ãšçç£æ§ã®äž¡ç«ã«åãçµãã§ããããã玹ä»ããŸããã 蚺çå ±é
¬æ¹å®ãªã©ã®å¶åºŠå€æŽã«æè»ã«å¯Ÿå¿ã§ããäœå¶ SPM ãã«ãã¢ãžã¥ãŒã«ããã©ã³ã¯ããŒã¹éçºãªã©çç£æ§åäžã®å·¥å€« MagicPod ãæŽ»çšããèªåãã¹ãç°å¢ã§ã®å¹ççãªåè³ªç¢ºä¿ æ³åŸã»ã¬ã€ãã©ã€ã³ã»å¶åºŠå¯Ÿå¿ã瀟å
ä»éšéãšã®é£æºãå«ãç·åçãªã¢ãããŒã å»çã¢ããªã®éçºã¯æè¡çåŽé¢ã®ã¿ãªãããé©åãªèŠå¶å¯Ÿå¿ãçµç¹é調æŽãªã©æ§ã
ãªèª²é¡ã«çŽé¢ããŸãã ä»åã®ç»å£ã§ã¯ããããã課é¡ãžã®å
·äœçãªåãçµã¿ãã玹ä»ãã€ã€ãå質ãšé床ã®äž¡ç«ã«åããå®è·µçãªç¥èŠãã話ãããŸããã 質åãããã€ãããã ããŸããã ãã©ã³ã¯ããŒã¹éçºãšã®ããšã ãããã©ã³ãäœæããããŒãžãŸã§ã®ééã¯ïŒ 倧ããªæ©èœéçºã§ãããã©ã³ãäœæããã³ãŒãã¬ãã¥ãŒãéããŠããŒãžãŸã§ã1 æ¥ããããªãçšåºŠã®ç²åºŠã«åå²ããŠããŸã MagicPod ã®å°å
¥ãããŒã ã§é²ããŠããããèªååãããã¹ãã·ããªãªã®éžæåºæºã¯ïŒ MagicPod ã§èªååã§ãããã¹ãã·ããªãªã¯å
šãŠèªååããŠãããããããªé話ãªã©ãã©ãããŠãèªåãã¹ããã¥ããéšåã¯èª²é¡ãšããŠæ®ã£ãŠããŸã iOSãAndroidãWeb ã§è¶å¢ããŠå®è£
ããŠããšã®ããšã ããã³ãŒãã¬ãã¥ãŒã¯ã©ãããŠããã®ã åã
ã§åŒ·ã¿ã®ãã©ãããã©ãŒã ãããã®ã§ãç¥èŠã®ãã人ãã¬ãã¥ãŒããããšãå€ãã§ã çºè¡šåŸã«ããŒã¹ã«æ¥ãŠããã ããŠé¢çœãã£ããšã³ã¡ã³ãé ããããæ¹ããŠå»çé åã«èå³ããã£ãŠããã ãããããŸãããå»ç à ãã¯ãããžãŒã®æåç·ã§åŸãããåŠã³ããçæ§ã®éçºã«ã掻ãããŠããã ããã°å¹žãã§ãã çµããã« ã¡ãã¬ãŒã¯ãããããã¢ããªãéããŠæ§ã
ãªå»çäœéšã«ã€ã³ãã¯ãäžããããã«ãããã¯ãã»ãµãŒãã¹ãéçºããŠãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠iOSDC Japan 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Ž 10 åšå¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããã ããã°ãšæããŸãïŒã«ãžã¥ã¢ã«é¢è«ãªã©å®æœå¯èœã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/ ãŸã DroidKaigi 2024 ã«ãã¹ãã³ãµãŒãããŠããŒã¹ãªã©äºå®ããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²äŒå Žã«ãŠäŒè©±ãããŠããã ãããšå¬ããã§ãã
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã https://open.talentio.com/r/1/c/medley/pages/105574 Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éš ãããã¯ãéçºå®€ QA ã°ã«ãŒãæå±ã®å°å³¶å€§åš ( @Daishu ) ã§ãã2022 幎 4 æã« QA ãšã³ãžãã¢ãšããŠã¡ãã¬ãŒã«å
¥ç€ŸããŸããã䞻㫠â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ã®ãããã¯ãéçºã«ããã QA ãšãE2E ãã¹ãèªååãæ
åœããŠããŸãã ä»åã¯ãMagicPod ãšããèªåãã¹ãããŒã«ã«å幎éåãåãããã¹ãå
容ãšçµæã®ä¿¡é Œæ§ãé«ããæ¹åãè¡ã£ã話ããããŠããã ããŸãã â» èªåãã¹ãããŒã«å
šè¬ã«å
±éãã話ãªã®ã§ãèªåãã¹ãã«æºãã£ãŠããæ¹ã
ã«ã芧ããã ãããšå€§å€å¬ããã§ãã MagicPod åŒç€Ÿã¯ E2E ãã¹ãã®èªååã«å¯Ÿã㊠MagicPod ãšããããŒã«ãæ¡çšããŠããŸããMagicPod ã®è©³çްã¯å²æããŸãããå°å
¥æã®è©±ã¯ã UIãã¹ãã®èªååã« MagicPod ãå°å
¥ãã話 ãã«ãããŸãã®ã§ããã²ã芧ãã ããã æŽ»çšç¶æ³ãšèæ¯ ç§ãæå±ããå»çãã©ãããã©ãŒã æ¬éšã§ã¯ãå»çæ©é¢ã«åããŠäºçŽãå蚺ãèšºå¯ (é»åã«ã«ã)ãäŒèšçã®æ©èœãæäŸãã â ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS â ãšãæ£è
åãã«ãªã³ã©ã€ã³èšºçãã¯ãããç·åçãªå»çäœéšãæäŸãã â ãªã³ã©ã€ã³èšºçã»æè¬æå°ã¢ã㪠CLINICS â ãå±éããŠããŸãã ç§ã¯ç»åå·ŠåŽã®å»çæ©é¢åãã®ãããã¯ãã«ãããŠç€Ÿå
ã§ **åšèŸºé å 1 ** ãšåŒã¶æ©èœçŸ€ ãäžå¿ãšããQAã»ãã¹ãèªååãæ
åœããŠããŸããMagicPod ã¯å°å
¥ããŠ4幎ç®ã«ãªããŸãããå幎åãŸã§ãã®åšèŸºé åã®æ©èœã«é¢ããŠã¯ãMagicPod ãååæŽ»çšããããŠãããã以äžã®ãããªç¶æ³ã§ããã MagicPod ã®èªåãã¹ãå®è¡é »åºŠãé± 1 åã®ã¿ èªååãããªã°ã¬ãã·ã§ã³ãã¹ãã 3 ä»¶ãããªã ( 20ä»¶ãæšå¥šå€ ) ãã¹ãçµæãäžå®å®ã§ãèªåãã¹ãã®ä¿®æ£ã«ããã調æ»ã³ã¹ãã倧ãã ãŸããMagicPod ã«ã¯ â ãã«ã¹ã¹ã³ã¢æ©èœ â ããããŸãããåœæã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãšäœãæ°åã§ãããããã¯ç«¯çã«èšããšã èªåãã¹ãã®ä¿¡é Œæ§ãäœã ããšããç¶æ
ã§ããäžæ¹ã§ãç»åå³åŽã® CLINICS ã¢ã㪠(æ£è
åã) 㯠MagicPod ãååæŽ»çšã§ããŠãããæ¢ã«ãã«ã¹ã¹ã³ã¢ã 100 ç¹ã«éããŠããŸãããããããã«ãCLINICS (å»çæ©é¢åã) ã®èªåãã¹ãã®æ¹åãæãŸããŠããŸããã åœæã® CLINICS (å»çæ©é¢åã) ã®ãã«ã¹ã¹ã³ã¢ MagicPod ãã«ã¹ã¹ã³ã¢æ©èœ èªåãã¹ãã®æ¹åã«ã€ããŠè©±ãåã«ãMagicPod ãæäŸããŠãããã«ã¹ã¹ã³ã¢æ©èœã«ã€ããŠèª¬æããŸãããã«ã¹ã¹ã³ã¢æ©èœãšã¯ãèªåãã¹ãã®æŽ»çšåºŠåããæåçãªã©ã 100 ç¹æºç¹ã§ã¹ã³ã¢ãªã³ã°ãããã®ã§ã2023 幎 12 æã«ãªãªãŒã¹ãããŸããã ãã£ãããšããæ¡ç¹åºæºã®å
èš³ãšé
ç¹ã¯äžèšãšãªã£ãŠããŸãã åŒçšå
ïŒLeanãšDevOpsã®ããã« E2E ãã¹ããã§ããã㚠泚ç®ãã¹ãã¯ãã ãã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸãããŠããã ããéèŠããŠããç¹ã§ããããã¯ãæåãã¹ãã®å·¥æ°åæžããèªåãã¹ãã§ã®äžå
·åæ€åºæ°ã®ãã㪠費çšå¯Ÿå¹æãæèããææšã§ã¯ãªããéçºçç£æ§ãžã®è²¢ç®ãæèããææš ãšãªã£ãŠããŸããã¹ã³ã¢ãäœããšããããšã¯ããã¹ãã«ä¿¡é Œæ§ããªãå¿
èŠãªãã£ãŒãããã¯ãåŸãããŠããªããããšãæå³ããŠãããèªåãã¹ããéçºçç£æ§ã«è²¢ç®ã§ããŠããªãç¶æ
ãšãªããŸãã ç§å人ãããã¹ãã«ãã¬ããžãååããèªåãã¹ããçµ±åãã©ã³ãã§ãã¹ããŠãããªããéçºãã©ã³ãã§äžå
·åãæœ°ããŠããŒãžãããŠããããšèããŸãããèªåãã¹ãã§ã¯ã çµ±åãã©ã³ãã stable ã§ããããšãä¿èšŒãã ãããšãããäžå
·åãèŠã€ããä»¶æ°ããšäžŠãã§éèŠãšæããŠããŸãããã«ã¹ã¹ã³ã¢æ©èœããªãªãŒã¹ãããããšã§ããããã£ã掻åãå®éçã«æž¬å®ã§ããã®ã§éå®ããŠããŸãã äž»ã«3ã€ã®æ¹åã宿œããŸãã æ¬é¡ã§ãã E2E èªåãã¹ãã®æ¹åã«ã€ããŠè©±ããŠãããŸããçŽå幎åããæ¬è
°ããããŠèªåãã¹ãã®ä¿¡é Œæ§åäžã«åãçµã¿ãŸããã â ãã€ãªãŒå®è¡ã§äžå®å®ãªãã¹ããè§£æ¶ãã æ©ããµã€ã¯ã«ã§ãã£ãŒãããã¯ãåŸãã«ã¯ãèªåãã¹ãã®ãã€ãªãŒå®è¡ã¯å¿
é ã§ããããããããŠã£ãŒã¯ãªãŒå®è¡ã«ããŠããçç±ã¯ããã¹ãçµæãäžå®å®ãªã±ãŒã¹ (以äžãFlaky test) ã倿°ãããäžå
·åãã©ãã調æ»ããã³ã¹ãã倧ããã£ãããã§ããå®éã調æ»ããŠãã»ãšãã©ã Flaky test ã§èªåãã¹ãåŽã®äžåã§çµããããšãå€ããããã«æéãå²ããªãéçºæ©èœã® QA ã«äœ¿ããããšããèããåœæãããŸããããšã¯ãããFlaky test ãšäžå£ã«èšã£ãŠãçªãè©°ãããšäœãããã®åå ããããçºçãã¿ãŒã³ã¯éå®çã§ãããã¹ãçµæãä¿¡é Œã§ãããã®ã«ããããã«ãããã€ãªãŒå®è¡ã§ Flaky test ãšåãåããŸããã ãŸãããã€ãªãŒå®è¡ããã° Flaky test ãšãªããã¿ãŒã³ã«ééã§ããŸããæ¬¡ã«ããªã Flaky test ãšããŠå€±æããã®ãïŒãã 1 ä»¶ãã€è¿œæ±ããŠããããšã§ãèŠã€ãã â穎â ã確å®ã«å¡ãã§ãããŸãããããŠããã®æŽ»åãæ¯æ¥ç¹°ãè¿ãããšã§ãå
ç¢ã§ç²ŸåºŠã®é«ãèªåãã¹ããæ§ç¯ã§ããŸãããããã¯ä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãåŸãäžã§ãéèŠãªèŠçŽ ã§ãããä»ã¯ã èªåãã¹ãã¯ãã€ãªãŒå®è¡ã§è²ãŠããã® ããšããèãã§ãæ¥ã
ã®èªåãã¹ãã®çµæãšåãåãããšãã§ããŠããŸãã â¡ ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ãæ¢ãã ãã¹ãã«ãã¬ããžãååã§ãªããšãæ¯æ¥èªåãã¹ããåãããŠããçµ±åãã©ã³ãã stable ã§ããããšèšãåãããšã¯ã§ããŸãããä¿¡é Œæ§ãé«ããäžã§ããã¹ã察象ãšããæ©èœã®å
å®åã¯å¿
é èŠä»¶ã§ãããããããåœæã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååãããŒã¯ãæåãã¹ãçšã®ã±ãŒã¹ãã¹ãã¬ããã·ãŒãã§äœæããäžã§èªååããæµããšãªã£ãŠããããã¹ãã±ãŒã¹ãäºéã¡ã³ããã³ã¹ãã圢ãšãªã£ãŠããŸããããã®ããã«æ¬æ¥ã®å¿
èŠä»¥äžã®å·¥æ°ãããã£ãŠããŸãããšãããã¹ãã«ãã¬ããžãçŽ æ©ãäžãã¥ããç¶æ³ããããŸããã æåãã¹ãçšã®ã±ãŒã¹ã¯ãèªåååŸã«è§Šãæ©äŒãã»ãšãã©ãªãã«ãé¢ãããã仿§å€æŽãªã©ã§èªåãã¹ãã«æãå ãããã³ã«ã¡ã³ããã³ã¹ã³ã¹ããçºçããŸãããã¡ããã仿§ãã£ããã¢ããçã®ç¹å®ã·ãŒã³ã§åœ¹ç«ã€äºã¯ãããŸãããåžžã«ã§ã¯ãããŸããããããã£ãéçšã³ã¹ãã®èª²é¡ãããã ãã¹ãã±ãŒã¹ã®äºéã¡ã³ããã³ã¹ã¯ããªãæ¹é ã«åãæ¿ããŸããã çŸåšã¯äžèšãããŒã§ MagicPod ã®ãã¹ãå®è£
ã®ã¿è¡ãªã£ãŠããŸãã ãªã°ã¬ãã·ã§ã³ãã¹ãã®èªååæé ãã®æ¹éã«ãããçŽå幎㧠CLINICS ã®åšèŸºé åã«å«ãŸããæ©èœã®ãã¹ãã«ãã¬ããžã 100% ãŸã§æ¡å
ã§ããŸãããäžæ¹ã§ãæåãã¹ãçšã®ã±ãŒã¹ããªãããšã§ããã¹ãã±ãŒã¹ã䜿ã£ã仿§ãã£ããã¢ãããã§ããªããããããã©ããªèªåãã¹ããããã®ãå€ããèŠãã¥ããããšã£ã課é¡ãçãŸããŸããããMagicPod ããã¹ãå®è¡æã«ååŸãããã£ããã£ãçšãã仿§æžããæ©èœäžèЧãšèªååãããã¹ãã±ãŒã¹ããããã³ã°ããè³æãçšæããããšã§å¯Ÿå¿ããŠããŸãããã®åãçµã¿ã«ã€ããŠã¯ãå¥éãŸãã玹ä»ã§ããã°ãšæããŸãã MagicPod ã®ãã¹ãæŠèŠæ¬ã®èšèŒäŸ ⢠å
è¡ããŠå
±æã¹ããããäœæãã ãã®æ¹åãæãææã«çµã³ã€ããŸããã å
±æã¹ããã ãšã¯ MagicPod ã®æšæºæ©èœã§ããã¹ãã¹ããããæ±çšçãªã¹ããã (颿°å) ãšããŠæµçšã§ãããã®ã§ããäžè¬çã«ãè€æ°ã®ãã¹ãã§åäžã®ã¹ããããããå Žåãå
±æã¹ããããäœæããããšæããŸãããç§ã¯çŸæç¹ã§åäžã¹ãããããªããŠãã å
è¡æè³çã«å
±æã¹ããããäœæããæ¹é ã§å®è£
ãé²ããŸãããããã«ãããæ©ãæ®µéã§å
±æã¹ããããæ¡å
ã§ããŸããã çŸåšã¯ãå
±æã¹ããããããºã«ã®ããã«çµã¿äžãããå®éã®ã³ãŒãã£ã³ã°ã«è¿ãå®è£
ã¹ã¿ã€ã«ã確ç«ã§ããŸãããå®è£
ã¹ããŒãã¯æ Œæ®µã«äžãããåçºé²æ¢çã§ç¢ºèªé
ç®ã远å ããå Žå㯠10 åã»ã©ããŒããã倧ããã® E2E ãã¹ããå®è£
ããå Žåã§ã 1-2 æéã»ã©ã§äœæã§ããŸãã å®è£
ã¹ããŒãã®åäžã¯ãã¹ãã«ãã¬ããžãäžããäžã§ã圹ç«ã¡ãŸããããä»ã®ãã¹ãã§åäœä¿èšŒã§ããå
±æã¹ãããã䜿ãåãããšã§ã ãã€ãªãŒå®è¡ã§èªåãã¹ããè²ãŠãåããå®å®ãããã¹ããäœãããã ããšããç¹ã倧ããã£ãã§ãã å
±æã¹ãããäŸïŒMailtrapã«å±ããã¡ãŒã«ã®æ¬æããæ£èŠè¡šçŸã«äžèŽããããã¹ããååŸ æ¹åããçµæã©ããªã£ãã äžçªã®ææã¯ã忥ã«ããŒãžããã Pull Request ã®äžå
·åæ€åºãæ¯æè¡ããããã«ãªããåé 玹ä»ããããã¹ãããä¿¡é Œæ§ã®ãããã£ãŒãããã¯ãæ©ããµã€ã¯ã«ã§åŸããããç¹ãéæã§ããããšã§ãããŸãããã¹ãã«ãã¬ããžãååããã®ã§ãçµ±åãã©ã³ãã stable ã§ãããããšãä¿èšŒã§ãã æ©èœéçºã QA ããããç¶æ³ã¥ãã (=éçºçç£æ§) ã«ãã³ãããã§ããŠãã ãšæããŸãã é害çºçæã«ã¯ãMagicPod ã§åçºé²æ¢çã®èªåãã¹ããäœããšããææ®µã QA ãšã³ãžãã¢ã ãã§å®çµã§ããããã«ãªããŸããããããŸã§ QA åŽã§å¯Ÿå¿ã§ããããšã¯æåã®ãªã°ã¬ãã·ã§ã³ãã¹ãã远å ããæ¹æ³ãå€ãã£ãã§ããã èªåãã¹ãã§åçºãææ¢ãããšããè§£æ±ºææ®µã QA ãšã³ãžãã¢ãæãŠãããšã¯éçšã³ã¹ãçã«ã倧ãã ã§ãã ãããã®æ¹åãéããŠãéçºãšã³ãžãã¢ã®æ¹ã
ããã®èªåãã¹ãã«å¯Ÿããä¿¡é Œæãé«ãŸã£ãŠããããšæããããšãå¢ããŠããŸããã é害ã®åçºé²æ¢ãšããŠèªåãã¹ããäœæããé ãŸãå
æ¥ã«ã¯MagicPod 瀟㮠ããŒãã¢ããã€ãã³ã ã«ç»å£ããæ©äŒãããã ããŸãããç»å£æã«å©çšããã¹ã©ã€ãã¯äžèšã§ããå
±æã¹ãããã® Tips ãå®å®ãã Xpath ãã±ãŒã¿ãååŸããæ¹æ³ãªã©ã玹ä»ããŠããã®ã§ãæ¢ã« MagicPod ãå©çšãããŠããæ¹ã¯ãã²ã芧ãã ããã ä»åŸããããããš äžè¿°ããæ¹åã«ãããCLINICS (å»çæ©é¢åã) ã®åšèŸºé åã«ããã MagicPod ã®ãã«ã¹ã¹ã³ã¢ã¯ 30 ç¹ãã 100 ç¹ãŸã§äžããããšãã§ããŸãããçŸåšã¯ãèªåãã¹ãã®æ°èŠè¿œå ã倿Žãå ããéã«ã¹ã³ã¢ãå€åããªããæ³šèŠããªããæ¹åãç¶ç¶ããŠããã ãã€ãªãŒå®è¡ããèªåãã¹ãã®å®å®çšŒåãšæ¡åŒµã®äž¡ç« ãã§ããŠããŸãã ä»åŸããã®ããã»ã¹ã厩ããã CLINICS ã®åºå¹¹é å 2 ã«å¯ŸããŠããã¹ãã«ãã¬ããžãåºããŠãããã ãšèããŠããŸãããŸãã¯ãåºå¹¹é åã®äžã§E2Eã§ç¢ºèªãã¹ãæ©èœã®æŽãåºããæ¬¡ã«æŽãåºããæ©èœã®èªååã¿ã¹ã¯ãå人ã«ã¢ãµã€ã³ã§ããäœå¶ã¥ãããæ€èšããŠããŸãããã®ããã«ãããªã³ããŒãã£ã³ã°ãã¬ãã¥ãŒäœå¶ãã³ãŒãã£ã³ã°ã«ãŒã«çã®ä»çµã¿ã¥ãããã»ããã§èããŠãããŸãã ãŸãã CLINICS ã«æºããéçºã®æ¹ã
ã¯å®è£
ããªãããã¹ãã³ãŒããæžãçŽ æŽãããæå ããããŸãããMagicPod ã®èªåãã¹ããšäžéšéè€ããŠç¢ºèªããŠããç®æããããŸãããã¹ã察象ã¯éè€ãã€ã€ãã ãã¹ãç²åºŠã®æ¹éãå®ããŠèªåãã¹ãå
šäœã®æé©å ã«ãåãçµãã§ããäºå®ã§ãã ãããã« ç§ãæå±ããå»çãã©ãããã©ãŒã ã® QA ããŒã ã¯ããããå®å
šå
補åã§å°æ°äœå¶ã§ããããããMagicPod ã®å®è£
ã®å®¹æããã¡ã³ããã³ã¹ã³ã¹ãã®äœãã«ããå°æ°ã§ãè€æ°ã®ãããã¯ããåºç¯å²ã§ã«ããŒã§ããŠããŸããçµç¹äœå¶ã«ã倧ããè²¢ç®ã§ãã MagicPod ã¯çŽ æŽãããããŒã«ã§ãããã®å ŽããåãããŠæ¹ããŠæè¬ç³ãäžããããšæããŸãããã€ãããããšãããããŸãã ã¡ãã¬ãŒã¯ãçŸåš QA ãšã³ãžãã¢ãåéããŠããŸããå»çåéã«ãããé«ãåè³ªç®æšãšããã¡æ©ãã客æ§ã«äŸ¡å€æäŸãããšãã課é¡ã®äž¡ç«ã«å¯ŸããŠãQA ãšã³ãžãã¢ã ããã§ãã解決çã®æã¡æãäžç·ã«èããŠã³ãããããŠãããæ¹ãšæ¯éãäŒããããã§ãã å»çPF QAãšã³ãžã㢠/ æ ªåŒäŒç€Ÿã¡ãã¬ãŒ æ ªåŒäŒç€Ÿã¡ãã¬ãŒã¯å»çPF QAãšã³ãžãã¢ãæ¡çšããŠããŸãã open.talentio.com Footnotes åšèŸºé åãšã¯ã䞻㫠CLINICS ã®äºçŽãå蚺ãè³æ Œç¢ºèªãšãã£ãå»çæ©é¢ãšæ£è
ãšã®æ¥ç¹ãšãªãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â© åºå¹¹é åãšã¯ã䞻㫠CLINICS ã®åä»ã»èšºå¯ã»äŒèšãšãã£ãæ¥åã«ãããŠãé»åã«ã«ããšã¬ã»ã³ã³(ã¬ã»ããã³ã³ãã¥ãŒã¿ã®ç¥ãå»çæ©é¢ããå¥åº·ä¿éºçµåãªã©ã®æ¯æãæ©é¢ã«å¯Ÿãã蚺çå ±é
¬ãè«æ±ããããã«ãã¬ã»ãããšåŒã°ãã蚺çå ±é
¬æçްæžãäœæããã·ã¹ãã )ãšã®ãããšããè¡ãã·ã¹ãã ãæãã瀟å
ã§ã®åŒç§°ã â©
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éšã»ãããã¯ãéçºå®€ã»ç¬¬1éçºã°ã«ãŒãæå±ã®å è€ã§ãã ãªã³ã©ã€ã³èšºçã»ãªã³ã©ã€ã³æè¬æå°ã¢ããªãCLINICSã ã®éçºãæ
åœããŠããŸãã ä»å㯠CLINICS ã§æ¡çšããŠãã Next.js ãš Server-side Rendering (SSR) ã«ã€ããŠã話ãããããšæããŸãã Next.js ã¯æšä»æ³šç®ãéããŠãã React ããŒã¹ã® Web ãã¬ãŒã ã¯ãŒã¯ã§ãã ãããã Web ããã³ããšã³ãã®éçºãå§ããã«ããã£ãŠæ¡çšãæ€èšããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã Next.js ãšããã° React ã³ã³ããŒãã³ãããµãŒããŒäžã§å®è¡ã㊠HTML ãè¿ã SSR ã«å¯Ÿå¿ããŠããã®ã倧ããªç¹åŸŽã§ãã SSR ã«ã¯æ§ã
ãªã¡ãªãããããäžæ¹ã§ãæ¡çšã«ããã£ãŠèªåãã¡ã®ãããã¯ãã« SSR ã¯äžèŠãªã®ã§ã¯ãªãããšãã£ãæžå¿µã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ããæ°ã«ãã声ãããè³ã«ããŸãã ãã®èšäºã§ã¯ã¡ãã¬ãŒã§ã® Next.js, SSR ã®æ¡çšäºäŸã玹ä»ãã€ã€ãæ¡çšã«ããã£ãŠäžè¬ã«æžå¿µãããç¹ãå®éã«æ¡çšããŠã¿ãäžã§ã®ææã亀ããŠã話ãã§ããã°ãšæã£ãŠããŸãã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ã㊠ãŸãã¯ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ããŠç°¡åã«ç޹ä»ãããŠãã ããã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ã¯ã2016幎ã«ãªã³ã©ã€ã³èšºçã·ã¹ãã ãšããŠãªãªãŒã¹ããã ãCLINICSã ãåç¹ãšããŠããŸãã åœæã¯å»çæ©é¢ã®æ¹ãæäœããæ¥åã·ã¹ãã éšåãšæ£è
ããåãã® iOS/Android ã¢ããªãšãã® Web çãååšãããšããæ§æã§ããã ãã®åŸ CLINICS ã«ã¯é»åã«ã«ããªã©ã®æ§ã
ãªæ©èœã远å ãããçŸåšã§ã¯ãªã³ã©ã€ã³èšºçã«çãŸããå»çæ©é¢ã®æ§ã
ãªæ¥åãæ¯æŽããã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãžãšçºå±ããŠããŸãã ãŸãã2020幎ã«ãªãªãŒã¹ããããããã€ãè¬å±æ¯æŽã·ã¹ãã ãPharmsã ã2022幎ã«ãªãªãŒã¹ãããã¯ã©ãŠãæ¯ç§æ¯æŽã·ã¹ãã ãDentisã ããããã¯ãã®ã©ã€ã³ãããã«å ãããããå€ãã®å»çæ©é¢ã®æ¥åãæ¯æŽãããã©ãããã©ãŒã ãšããŠãµãŒãã¹ã®èŠæš¡ãæ¡å€§ããŠããŸãã å»çæ©é¢åãã®æ¥åã·ã¹ãã ã¯å»ç§ã»æ¯ç§ã»èª¿å€è¬å±ãšããããã®æ¥åç¹æ§ã«åãããŠãããã¯ããåãããŠããäžæ¹ã§ãæ£è
ããåãã®æ©èœã¯ãã¹ãŠ CLINICS ã¢ããªã«éçŽãããŠããŸãã æ¥åã·ã¹ãã ã®æ©èœæ¡å
ã«äŒŽã£ãŠ CLINICS ã¢ããªã®æ©èœãæ¡å
ãããŠãããçŸåšã§ã¯ãªã³ã©ã€ã³æè¬æå°æ©èœãåŠæ¹ç®ã®äºåéä¿¡æ©èœãªã©æ§ã
ãªæ©èœã远å ãããŠããŸãã ä»åã話ãããã®ã¯ãã® CLINICS ã¢ããªã® Web ç (以äžãCLINICS) ã®ããã³ããšã³ãéçºã«ã€ããŠã§ãã Next.js æ¡çšã®ã¢ãããŒã·ã§ã³ CLINICS ã¢ããªã¯ãªãªãŒã¹ä»¥åŸç¶ã
ãšæ©èœãæ¡åŒµãããŠããã®ã§ãããããããéçºãæ¯ãããã 2021幎ã«å€§èŠæš¡ãªãªãã¥ãŒã¢ã«ã宿œããŸããã ç¹ã« Web çã¯ãªãã¥ãŒã¢ã«ã®ã¿ã€ãã³ã°ã§ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãéžæãããŠããŸãã ãªãã¥ãŒã¢ã«ä»¥åã®ãããããŒãž çŸåšã®ãããããŒãž ãªãã¥ãŒã¢ã«ä»¥åã® CLINICS ã¯ãã°ã€ã³ã®ååŸã§å®è£
ãåãããŠããããã®ç¹ããã«ã¹ã¯ã©ããã§ã®å®è£
ãéžæãã倧ããªã¢ãããŒã·ã§ã³ãšãªããŸããã CLINICS ã¯éçºåœåãã Ruby on Rails ã§éçºãããŠããã®ã§ãããæ£è
ããåãã®ããŒãžã¯ Rails ã®ãã³ãã¬ãŒããšã³ãžã³ãçšããŠå®è£
ãããŠããéšåãš SPA ãšããŠå®è£
ãããŠããéšåãæ··åšããŠããŸããã å»çæ©é¢ã®æ€çŽ¢ã詳现ãªã©ã®æ€çŽ¢ãšã³ãžã³ããã®æµå
¥ã確ä¿ãããããŒãžã§ã¯ãã³ãã¬ãŒããšã³ãžã³ãçšã㊠HTML ãçŽæ¥ã¬ã¹ãã³ã¹ããããã°ã€ã³ããŒãžãäºçŽããŒãžãªã©ã®æäœæ§ãéèŠããããŒãžã§ã¯ SPA ãšããŠå®è£
ãããŠããããšãã£ãå
·åã§ãã ãããããã³ãã¬ãŒããšã³ãžã³ãš SPA ã®äœµçšæ§æã§ã¯ããã°ã€ã³ã®ååŸã§äžè²«ãããŠãŒã¶ãŒäœéšãæäŸããã®ã¯å°é£ã ãšæããŠããŸããã äŸãã°ãåãæ©èœããã°ã€ã³åãšåŸãšã§2ã€ååšããç®æãããããŠãŒã¶ãŒããèŠããšãã°ã€ã³ãæãã§ UI ãå€ãã£ãŠããŸããããŸãè¯ããŠãŒã¶ãŒäœéšãšã¯èšããªãç¶æ
ã§ããã ãã¡ãããããã£ã課é¡ã¯ãã°ã€ã³ååŸã®äž¡æ¹ã®ããŒãžã® UI ãäžå¯§ã«èšèšããããšã§è§£æ±ºãå¯èœã§ã¯ãããŸãããç°ãªãæè¡ã¹ã¿ãã¯ã§åããããªæ©èœãå®è£
ãã€ã€ UI ã®äžè²«æ§ãä¿ã€ã®ã¯å®¹æã§ã¯ãããŸããã ãããã£ãèæ¯ãããªãã¥ãŒã¢ã«ã§ã¯ãã°ã€ã³ååŸã§ã®å®è£
ãäžæ¬åããæ¹éãç«ãŠãŠããŸããã å®è£
ãäžæ¬åããäžã§ SSR ã«å¯Ÿå¿ããŠãã Next.js ã¯éåžžã«é
åçãªéžæè¢ã§ããã SSR ã«ã¯åæè¡šç€ºã®ããã©ãŒãã³ã¹åäžãªã©ã®ã¡ãªãããããã®ã§ãããæ¡çšã«ããã£ãŠã¯ SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããã è¿å¹Žã§ã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ãããçŽæ¥ HTML ãã¬ã¹ãã³ã¹ã§ããã®ã§ããã°ãã®æ¹ããã確å®ã ãšå€æããŸããã ããã Next.js ãæ¡çšããã«è³ã£ãæå€§ã®çç±ã§ãã ã¡ãªã¿ã«ããã®åœæã¯ App Router ããªãªãŒã¹ãããåã ã£ãããã Pages Router ã§éçºãéå§ããŸããã 以éã®å
容ãåºæ¬çã« Pages Router ãåæãšããŠã話ãããŠãããŸããã App Router ãä»ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããå Žåã§ã SSR ã«ã€ããŠã®èãæ¹ã¯å
±éããŠããéšåãå€ãã®ã§å°ãã§ãåèã«ããŠããã ããã幞ãã§ãã Server-side Rendering ã®ä»çµã¿ Server-side Rendering (SSR) ãšã¯ãNext.js ã Remix ãªã©ã® React ããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ãæã€æ©èœã®ã²ãšã€ã§ãã SSR ãšããçšèªã¯æšä»ã® React ã«é¢ãã話é¡ã®äžã§ã¯ããè³ã«ããèšèã§ãããå®ã¯ React ã®å
¬åŒããã¥ã¡ã³ãã« SSR ãšã¯äœããšããèšè¿°ã¯ååšããŠããŸããã ããã§ã¯ React æ¬äœã«ã¯ãµãŒããŒç°å¢åãã®æ©èœãååšããªãã®ããšãããšããã§ã¯ãªããReact 㯠ã³ã³ããŒãã³ããã HTML ãçæããããã® API ãæäŸããŠããŸãã Next.js ã Remix ã¯ãããã API ãå©çšããŠãµãŒããŒç°å¢ã§ HTML ãçæãã€ã€ãã©ãŠã¶ç°å¢ã§ã¯åŸæ¥ã® SPA ã®ãããªæ¯ãèããå®çŸããæ©èœãæäŸããŠãããããããæ©èœã«ã¯ SSR ãšããååãä»ããããŠããŸãã äŸãã°ãNext.js ã® Pages Router ã§ã¯ getServerSideProps ã䜿çšããŠãªã¯ãšã¹ãæ¯ã« HTML ãçæããæ©èœã SSR ãšåŒãã§ããŸãã åãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠãµãŒããŒåŽã§ã®ããŒã¿ååŸã®æ¹æ³ã¯ç°ãªããŸãããReact ã³ã³ããŒãã³ããã HTML ãçæããä»çµã¿ã¯å
±éããŠããŸãã ãµãŒããŒäžã§ HTML ãçæãããšèšããšãã³ãã¬ãŒããšã³ãžã³ãªã©ãçšããå Žåãšå€ãããªãããã«æãããããããããŸããããSSR ã«ã¯ ãã€ãã¬ãŒã·ã§ã³ ãšããä»çµã¿ãååšããã®ã倧ããªç¹åŸŽã§ãã çæããã HTML ã¯ã¯ã©ã€ã¢ã³ãã«ã¬ã¹ãã³ã¹ãããŠãã©ãŠã¶äžã§è¡šç€ºãããã®ã§ããããã®æç¹ã§ã¯ã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ãããããŠãããããŠãŒã¶ãŒã®æäœã«å¯ŸããŠåå¿ããããšãã§ããªãç¶æ
ã§ãã ããã§ React ã¯ãã©ãŠã¶äžã§å床ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŠã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ããããŸãã ãã®åŠçã¯ãã€ãã¬ãŒã·ã§ã³ãšåŒã°ããŠããŸãã ãã€ãã¬ãŒã·ã§ã³ãè¡ããããšã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒæäœã«åå¿ããããšãã§ããããã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ãããã Client-side Rendering (CSR) ãšåŒã°ãã useEffect ã«ããããŒã¿ã®ååŸãšè¿œå ã®æç»ãè¡ãããå ŽåããããŸãã ããã«ããã€ãã¬ãŒã·ã§ã³ãè¡ãããç¶æ
ããããŒãžé·ç§»ãè¡ãããå Žåã«ã¯ history API ã䜿çšãããŸãã äžé£ã®æµããã·ãŒã±ã³ã¹å³ã«ãããšä»¥äžã®ããã«ãªããŸãã ãã®ããã« SSR ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã§ããã€ãã¬ãŒã·ã§ã³ãè¡ãããåŸã¯åŸæ¥ã® SPA ãšåæ§ã«æ¯ãèããŸãã ãã®ãããContext API ã Redux ãªã©ã®ç¶æ
管çã©ã€ãã©ãªã䜿çšããŠããŒãžãè·šãã§ç¶æ
ãå
±æããããšãå¯èœã§ãã ãããã£ãç¹åŸŽããèãããšãSSR ã¯ãããŸã§ã® React ãšå¯Ÿç«ãããã®ã§ã¯ãªããããããã®æ©èœãäžå±€åŒ·åãããã®ãšèšããã§ãããã CLINICS ã§ã®æŽ»çšäºäŸã®çŽ¹ä» ããããã¯å®éã«ã©ããã£ã圢㧠Next.js ãš SSR ãå©çšããŠããã®ããCLINICS ã®æŽ»çšäºäŸã玹ä»ããŠãããŸãã CLINICS ã®ã·ã¹ãã æ§æã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã (å®éã«ã¯ããå°ãè€éãªæ§æãåã£ãŠããã®ã§ãããä»åã®èª¬æã§ã¯ç°¡ç¥åããŠããŸã) CLINICS ã® Next.js ãµãŒããŒã¯åºæã®ããŒã¿ããŒã¹ãæã£ãŠããããå¿
èŠãªããŒã¿ã¯ãã¹ãŠããã¯ãšã³ãã® API ããååŸããŠããŸãã SSR ã®éã«ã¯ Next.js ãµãŒããŒãããCSR ã®éã«ã¯ãã©ãŠã¶ãã API ã«ãªã¯ãšã¹ããéä¿¡ãããŸãã ã»ãã·ã§ã³æ
å ±ã«ã€ããŠã¯ API ãµãŒããŒåŽã§ç®¡çããŠãããNext.js ãµãŒããŒåŽã«ã¯ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ¹éãåã£ãŠããŸãã SEO é¢ã§ã®ã¡ãªãããéèŠããŠãããããSSR ããã®ã¯ãã°ã€ã³äžèŠã§é²èЧå¯èœãªããŒãžã®ã¿ã§ååã ãããšå€æããŸããã ãã®ãããSSR ãããéã«ã¯ãã°ã€ã³äžèŠã§ååŸã§ããæ
å ±ã®ã¿ã衚瀺ãããã°ã€ã³ãå¿
èŠãªæ
å ±ã衚瀺ããéã«ã¯ CSR ã䜿çšããŠããŸãã SSR ã䜿çšããŠããããŒãžã§ãéšåçã« CSR ãçµã¿åãããŠäœ¿çšããŠãããããŒãžã«ãã£ãŠã¯ SSR ãçšããã«å
šäœã CSR ã§å®è£
ãããŠããã±ãŒã¹ããããŸãã æèŠçã«ã¯åŸæ¥ã® SPA ãããŒã¹ãšããŠéšåçã« SSR ãçµã¿åãããŠãããšèšã£ãŠãè¯ããããããŸããã æ¡çšããŠè¯ãã£ããšæããŠããç¹ ããããã¯å®éã« Next.js ã䜿ã£ãŠã¿ãææã亀ããŠã話ãããŠããããšæããŸãã ãŸãã¯ãNext.js ãæ¡çšããŠè¯ãã£ããšæããŠããç¹ã«ã€ããŠã§ãã å
šäœçãªéçºäœéš ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãäžã§ Next.js ã¯è¯ãéžæã ã£ããšæããŠããŸãã Next.js ãšãããš SSR ã®ã€ã¡ãŒãžã匷ããããããŸããããSSR ãæãã«ããŠã SPA ã®éçºã«å¿
èŠãªèŠçŽ ã¯äžéãåãã£ãŠããŸãã Webpack ããã©ã³ã¹ãã€ã©ãªã©ã®ãã«ãããŒã«ã®èšå®ãããã©ã«ãã§å«ãŸããŠãããReact ã®ãããžã§ã¯ããæ°èŠã«ç«ã¡äžããéã«ã¯éåžžã«äŸ¿å©ãªãã¬ãŒã ã¯ãŒã¯ã ãšæããŠããŸãã CLINICS ã§ã¯ CSS é¢é£ã§è¿œå ã®ã©ã€ãã©ãªã䜿çšããŠããã®ãé€ãã°ãã»ãšãã©ã®å®è£
ã Next.js ãš React ã®æšæºæ©èœã ãã§éçºããŠããŸãã SEO é¢ã§ã®æ±ãããã ãã¡ã㯠Next.js ãæ¡çšããã«ããã£ãŠéèŠããŠããç¹ãªã®ã§ããããã¯ã SSR ã§ãµãŒããŒããçŽæ¥ã¬ã¹ãã³ã¹ãè¿ãããšããç¹ã§ SEO é¢ã§ã¯æ±ãããããšæããŠããŸãã title ã¿ã°ã meta ã¿ã°ãªã©ããã¡ããã§ãããHTTP ã¹ããŒã¿ã¹ã³ãŒããå¶åŸ¡ã§ãããããã¯ããŒã©ãŒã«æå³ãäŒããäŒçµ±çãªæ¹æ³ããã®ãŸãŸäœ¿ããç¹ã¯éåžžã«äŸ¿å©ã§ãã SEO ãšã¯çŽæ¥é¢ä¿ãããŸããããSNS ã§ãªã³ã¯ãã·ã§ã¢ãããéã® OGP çšã® meta ã¿ã°ãåçã«çæããããšãã£ãã±ãŒã¹ãžã®å¯Ÿå¿ã容æã§ãã ãšã¯ãããè¿å¹Žã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ SPA ãå¿
ããã SEO çã«äžå©ãšããããã§ã¯ãããŸããã ã¯ããŒã©ãŒã JavaScript ãçè§£ããèœåã¯å¹Žã
åäžããŠããã®ã§ãé©åã«èšèšããã SPA ã§ããã° SEO çã«åé¡ãªããšããã±ãŒã¹ãå€ãããã§ãã ããããã¯ããŒã©ãŒã®é²æ©ãå®è£
äžã®ãã¯ããã¯ãèžãŸãããš SSR ã® SEO é¢ã§ã®ã¡ãªããã¯ãããŸã§ãã®æ±ãããããšãã芳ç¹ã§èãããšè¯ããããããŸããã ããã©ãŒãã³ã¹ã®åäž SSR ãåãå
¥ããã«ããã£ãŠããã©ãŒãã³ã¹é¢ã«ã€ããŠç¹ã«æèããŠããããã§ã¯ãªãã®ã§ãããå®éã« SSR ã䜿ã£ãŠã¿ãŠ FCP (First Contentful Paint) ã LCP (Largest Contentful Paint) ãšãã£ãåæè¡šç€ºã®é床ãè¡šãææšã®æ¹åã«å¹æããããªãšæããŠããŸãã CSR ã§ã¯ JS ã§ã®ããŒã¿ååŸãå®äºããŠå§ã㊠LCP èŠçŽ ã衚瀺ãããã±ãŒã¹ãå€ããããJS ãã¡ã€ã«ã®ããŠã³ããŒããå®è¡ã®åã ã FCP ã LCP ãé
å»¶ããããåŸåã«ãããŸãã SSR ã§ã¯ãããã JS ã®ããŠã³ããŒããå®è¡ã®æéãæžãåãåæè¡šç€ºã®ããã©ãŒãã³ã¹æ¹åãæåŸ
ã§ããŸãã äœæçã«ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã®è¡šç€ºãæãŸãã«ã³ã³ãã³ãã衚瀺ãããããããŠãŒã¶ãŒã«ãšã£ãŠã¯ããå¿«é©ãªäœéšãšãªãã®ã§ã¯ãªãããšæããŠããŸãã ãŸããSSR 以å€ã«ã Next.js ã¯ç»åã®æé©åãã³ãŒãã¹ããªããã£ã³ã°ãªã©ã®ããã©ãŒãã³ã¹åäžã«åœ¹ç«ã€æ©èœãå€ãæäŸããŠãããããå®å®ããããã©ãŒãã³ã¹ã® Web ã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§ã¯éåžžã«å¿åŒ·ãååšã§ãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã®åçç¹ Next.js ãã®ãã®ã«ã€ããŠäžäŸ¿ã«æããŠããç¹ã¯ããŸããªãã®ã§ãããSSR ãåãå
¥ããã«ããã£ãŠã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ããèããŠããã¹ãã ã£ããšåçããŠããéšåããããŸãã åŸæ¥ã® SPA ã§ããã°ã»ãã·ã§ã³ç®¡ç㯠API ãµãŒããŒã管çãããšããã®ãäžè¬çã§ãããSSR ãæ¡çšããå Žåã§ã¯ Next.js ãµãŒããŒãš API ãµãŒããŒãååšãããšããæ§æã«ãªãã±ãŒã¹ãå€ãããšæããŸãã ãã®å ŽåãNext.js ãµãŒããŒãš API ãµãŒããŒã®ã©ã¡ãã§ã»ãã·ã§ã³ã管çããã®ããã»ãã·ã§ã³æ
å ±ãå
±æããã®ããå
±æããã®ã§ããã°ã©ã®ãããªæ¹æ³ã§å
±æããã®ããšãã£ãç¹ã§è€æ°ã®éžæè¢ãèããããŸãã CLINICS ã§ã¯åè¿°ã®éã API ãµãŒããŒã§ã»ãã·ã§ã³ã管çã㊠Next.js ãµãŒããŒãšã®éã§ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ§æãæ¡çšããŠããŸãã ããããæ§æã®éœåã§ Next.js ãµãŒããŒã§ã»ãã·ã§ã³æ
å ±ãæ±ãããšãã§ããªãããããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒåºæã®æ
å ±ã¯ SSR ããããšãã§ãããCSR ã§ååŸããŠæç»ããå¿
èŠããããŸãã ãã®ããã«ã㊠SSR ãš CSR ãçµã¿åãããå ŽåãCSR ã§ååŸããããŒã¿ãæç»ããéã«ã¬ã€ã¢ãŠãã·ãããçºçãããããªããŸãã ãŸãããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒã«å¯ŸããŠã¯æ€çŽ¢çµæãã«ã¹ã¿ãã€ãºãããäžŠã³æ¿ããããšãã£ãèŠä»¶ãžã®å¯Ÿå¿ãé£ãããªã£ãŠããŸããŸãã ãããã£ãé¢ã§ SSR ãš CSR ãçµã¿åãããããåŸãªãçŸç¶ã®èªèšŒæ§æã«ã¯èª²é¡ããããšæããŠããŸãã ãããã課é¡ãè§£æ¶ããããã«ããä»åŸã¯ã»ãã·ã§ã³æ
å ±ã Next.js ãµãŒããŒãšå
±æããæ§æãžãšå€æŽããCSR ããŠããéšåã SSR ãã圢ã«å€æŽããŠãããããšèããŠããŸãã ãã®ããã« SSR ãæŽ»çšããå Žåã«ã¯åŸæ¥ã® SPA ãããã»ãã·ã§ã³ç®¡çã®éžæè¢ãå¢ãããããã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ç¹ã«æ
éã«èããå¿
èŠããããšæããŠããŸãã SSR ãä»ã¯å¿
èŠãšããŠããªããšããã±ãŒã¹ã§ããå°æ¥çãªå°å
¥ã«åããŠã»ãã·ã§ã³ç®¡çã«ã€ããŠå°ãèããå·¡ãããŠãããšè¯ããããããŸããã Next.js ã®æ¡çšãæ€èšããŠããæ¹ãž æåŸã«ããããã Next.js ãæ¡çšããããšããŠããæ¹ãæ°ã«ãªã£ãŠããã®ã§ã¯ãªãããšæããããã€ã³ãã«ã€ããŠã話ãããŠããããšæããŸãã Next.js ãæ¡çšããã«ããã£ãŠæãæ°ã«ãªããã€ã³ãã¯ãã¯ã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ãã§ã¯ãªãã§ããããã Next.js ã§ã¯äžéšã®äŸå€ãé€ãã° SSR ã䜿çšãããåŠãã«é¢ãããå®è¡ã«ã¯ Node.js ãµãŒããŒãå¿
èŠãšãªããŸãã SSR ã¯å¿
èŠãšããŠããªãã Next.js ã®æ§ã
ãªæ©æµãåããããšããéçºè
ã«ãšã£ãŠã¯ Node.js ãµãŒããŒã®éçšã³ã¹ããæ°ã«ãªããšããããšæããŸãã CLINICS ã§ã¯ AWS ECS/Fargate ã§ Next.js ãµãŒããŒãéçšããŠããã®ã§ãããNode.js ã®å®è¡ç°å¢ãéçšããã³ã¹ãã¯ç¢ºãã«çºçããŠãããã®ã®ãçŸç¶ã§ã¯ããã»ã©å€§ããªè² æ
ã«ã¯æããŠããŸããã API ãµãŒããŒãå¥ã§ååšããæ§æã§ã¯ Next.js ãµãŒããŒãæ
ãã®ã¯ã«ãŒãã£ã³ã°ã«åŸã£ãŠ API ãµãŒããŒããããŒã¿ãååŸã㊠SSR ãããšãã£ãæ¯èŒçã·ã³ãã«ãªåœ¹å²ã«ãªããŸãã ãã®ãããããŒã¿ããŒã¹ãæ±ããããªæ¬æ Œçãªããã¯ãšã³ãã«æ¯ã¹ããšéçšã®æéã¯äœãæããããŠããå°è±¡ã§ãã ã©ãããŠã Node.js ã®å®è¡ç°å¢ãæããã«éçšããããšããå Žåã«ã¯ Static Exports ãšãããã«ãæã« HTML ãå«ãéçã¢ã»ãããåºåããæ©èœã®å©çšãæ€èšããŠã¿ããšè¯ããããããŸããã ãã ããæ©èœé¢ã§ããã€ãã®å¶çŽãããã®ã§ãæ¡çšãæ€èšããéã«ã¯ãã確èªããŠããããšããå§ãããŸãã ã©ã¡ãããšèšãã° Static Exports ã¯éçãªãµã€ããæ§ç¯ããã®ã«åããŠããæ©èœã§ãããåçãªã³ã³ãã³ããæ±ããããªã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŸãåããŠããªããšããã®ãæ£çŽãªææ³ã§ãã åŸæ¥ã® SPA ã«å€ãèŠããããããªãã«ãæžã¿ã® JavaScript, CSS ãªã©ã®éçã¢ã»ããã S3 ãªã©ã®ã¹ãã¬ãŒãžã«é
眮ã㊠HTML ã¯ããã¯ãšã³ãã®ãµãŒããŒããé
ä¿¡ãããšãã£ãæ§æãæ³å®ãããŠããªãç¹ã泚æãå¿
èŠããšæããŸãã ãŸããNext.js ã®æ¡çšã«ããã£ãŠ App Router ã«è¿œåŸãã¹ãããšããã®ãæ©ãŸãããã€ã³ãã§ãã App Router 㯠Next.js 13 ã§å°å
¥ãããæ°ããã«ãŒãã£ã³ã°ã·ã¹ãã ã§ãServer Components/Actions ãªã©ã® React ã®æ°æ©èœããµããŒãããŠããç¹ãé
åã§ããããªãªãŒã¹ããæ¥ãæµ
ããŸã ãã°ããã¯æ§åãèŠãããšèããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã çŸç¶ CLINICS ã§ã¯ãŸã App Router ãžã®ç§»è¡ã¯èããŠãããå®éã®äœ¿çšæãªã©ãã話ãããããšã¯ã§ããªãã®ã§ãããããã¥ã¡ã³ããèªãéãã§ã¯ Pages Router ã®æ±ãã«ããéšåãããŸãæ¹åãããŠããå°è±¡ã¯ãããŸãã ãã ãPages Router ã®ã«ãŒãã£ã³ã°æ©èœãšå®å
šãªäºææ§ããªãç¹ãç§»è¡ãèããäžã§æå€§ã®ããã¯ã ãšæããŠããŸãã ãããã£ãç§»è¡ã®ã³ã¹ãã Next.js èªäœã App Router ãžã®ç§»è¡ãæšå¥šããŠããããšãèžãŸãããšãä»ããæ°èŠã«éçºãå§ããã®ã§ããã° App Router ã§éçºãå§ããŠããŸã£ãæ¹ãç¡é£ãªéžæãããããŸããã ç·ããŠãNode.js ãµãŒããŒã®éçšã³ã¹ãã蚱容ã§ããããApp Router ã Server Components/Actions ã«é
åãæããããšãã£ãç¹ã Next.js ã®æ¡çšãæ€èšããäžã§ã®ãã€ã³ãã«ãªãã®ã§ã¯ãªãã§ããããã ãŸãšã CLINICS ã§ã¯ Next.js ãæ¡çšããŠãããSSR ãš CSR ã䜵çšããåœ¢ã§æ¯èŒçã©ã€ãã« SSR ãåãå
¥ããŠããã³ããšã³ãã®éçºãé²ããŠããŸãã åœå㯠SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããããå®éã«äœ¿ã£ãŠã¿ããšããã©ãŒãã³ã¹ã®åäžãéçºäœéšã®åäžãªã©æ§ã
ãªã¡ãªãããæããŠããŸãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯èª²é¡ãæ±ããŠããéšåããããŸãããä»åŸã¯ãããã£ãéšåãæ¹åãããäžå±€ SSR ã®æ©æµãåããããããã«ããŠãããããšèããŠããŸãã Next.js ã®ä»ã«ã Remix ãš React Router ã®çµ±å ãçºè¡šããããªã©ãããã« SSR ãæŽ»çšããããç°å¢ãæŽãã€ã€ãããšããç¹ã§ããSSR ã®ä»åŸã¯éåžžã«æ¥œãã¿ãªéšåãå€ããšæããŠããŸãã
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éšã»ãããã¯ãéçºå®€ã»ç¬¬1éçºã°ã«ãŒãæå±ã®å è€ã§ãã ãªã³ã©ã€ã³èšºçã»ãªã³ã©ã€ã³æè¬æå°ã¢ããªãCLINICSã ã®éçºãæ
åœããŠããŸãã ä»å㯠CLINICS ã§æ¡çšããŠãã Next.js ãš Server-side Rendering (SSR) ã«ã€ããŠã話ãããããšæããŸãã Next.js ã¯æšä»æ³šç®ãéããŠãã React ããŒã¹ã® Web ãã¬ãŒã ã¯ãŒã¯ã§ãã ãããã Web ããã³ããšã³ãã®éçºãå§ããã«ããã£ãŠæ¡çšãæ€èšããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã Next.js ãšããã° React ã³ã³ããŒãã³ãããµãŒããŒäžã§å®è¡ã㊠HTML ãè¿ã SSR ã«å¯Ÿå¿ããŠããã®ã倧ããªç¹åŸŽã§ãã SSR ã«ã¯æ§ã
ãªã¡ãªãããããäžæ¹ã§ãæ¡çšã«ããã£ãŠèªåãã¡ã®ãããã¯ãã« SSR ã¯äžèŠãªã®ã§ã¯ãªãããšãã£ãæžå¿µã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ããæ°ã«ãã声ãããè³ã«ããŸãã ãã®èšäºã§ã¯ã¡ãã¬ãŒã§ã® Next.js, SSR ã®æ¡çšäºäŸã玹ä»ãã€ã€ãæ¡çšã«ããã£ãŠäžè¬ã«æžå¿µãããç¹ãå®éã«æ¡çšããŠã¿ãäžã§ã®ææã亀ããŠã話ãã§ããã°ãšæã£ãŠããŸãã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ã㊠ãŸãã¯ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ããŠç°¡åã«ç޹ä»ãããŠãã ããã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ã¯ã2016幎ã«ãªã³ã©ã€ã³èšºçã·ã¹ãã ãšããŠãªãªãŒã¹ããã ãCLINICSã ãåç¹ãšããŠããŸãã åœæã¯å»çæ©é¢ã®æ¹ãæäœããæ¥åã·ã¹ãã éšåãšæ£è
ããåãã® iOS/Android ã¢ããªãšãã® Web çãååšãããšããæ§æã§ããã ãã®åŸ CLINICS ã«ã¯é»åã«ã«ããªã©ã®æ§ã
ãªæ©èœã远å ãããçŸåšã§ã¯ãªã³ã©ã€ã³èšºçã«çãŸããå»çæ©é¢ã®æ§ã
ãªæ¥åãæ¯æŽããã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãžãšçºå±ããŠããŸãã ãŸãã2020幎ã«ãªãªãŒã¹ããããããã€ãè¬å±æ¯æŽã·ã¹ãã ãPharmsã ã2022幎ã«ãªãªãŒã¹ãããã¯ã©ãŠãæ¯ç§æ¯æŽã·ã¹ãã ãDentisã ããããã¯ãã®ã©ã€ã³ãããã«å ãããããå€ãã®å»çæ©é¢ã®æ¥åãæ¯æŽãããã©ãããã©ãŒã ãšããŠãµãŒãã¹ã®èŠæš¡ãæ¡å€§ããŠããŸãã å»çæ©é¢åãã®æ¥åã·ã¹ãã ã¯å»ç§ã»æ¯ç§ã»èª¿å€è¬å±ãšããããã®æ¥åç¹æ§ã«åãããŠãããã¯ããåãããŠããäžæ¹ã§ãæ£è
ããåãã®æ©èœã¯ãã¹ãŠ CLINICS ã¢ããªã«éçŽãããŠããŸãã æ¥åã·ã¹ãã ã®æ©èœæ¡å
ã«äŒŽã£ãŠ CLINICS ã¢ããªã®æ©èœãæ¡å
ãããŠãããçŸåšã§ã¯ãªã³ã©ã€ã³æè¬æå°æ©èœãåŠæ¹ç®ã®äºåéä¿¡æ©èœãªã©æ§ã
ãªæ©èœã远å ãããŠããŸãã ä»åã話ãããã®ã¯ãã® CLINICS ã¢ããªã® Web ç (以äžãCLINICS) ã®ããã³ããšã³ãéçºã«ã€ããŠã§ãã Next.js æ¡çšã®ã¢ãããŒã·ã§ã³ CLINICS ã¢ããªã¯ãªãªãŒã¹ä»¥åŸç¶ã
ãšæ©èœãæ¡åŒµãããŠããã®ã§ãããããããéçºãæ¯ãããã 2021幎ã«å€§èŠæš¡ãªãªãã¥ãŒã¢ã«ã宿œããŸããã ç¹ã« Web çã¯ãªãã¥ãŒã¢ã«ã®ã¿ã€ãã³ã°ã§ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãéžæãããŠããŸãã ãªãã¥ãŒã¢ã«ä»¥åã®ãããããŒãž çŸåšã®ãããããŒãž ãªãã¥ãŒã¢ã«ä»¥åã® CLINICS ã¯ãã°ã€ã³ã®ååŸã§å®è£
ãåãããŠããããã®ç¹ããã«ã¹ã¯ã©ããã§ã®å®è£
ãéžæãã倧ããªã¢ãããŒã·ã§ã³ãšãªããŸããã CLINICS ã¯éçºåœåãã Ruby on Rails ã§éçºãããŠããã®ã§ãããæ£è
ããåãã®ããŒãžã¯ Rails ã®ãã³ãã¬ãŒããšã³ãžã³ãçšããŠå®è£
ãããŠããéšåãš SPA ãšããŠå®è£
ãããŠããéšåãæ··åšããŠããŸããã å»çæ©é¢ã®æ€çŽ¢ã詳现ãªã©ã®æ€çŽ¢ãšã³ãžã³ããã®æµå
¥ã確ä¿ãããããŒãžã§ã¯ãã³ãã¬ãŒããšã³ãžã³ãçšã㊠HTML ãçŽæ¥ã¬ã¹ãã³ã¹ããããã°ã€ã³ããŒãžãäºçŽããŒãžãªã©ã®æäœæ§ãéèŠããããŒãžã§ã¯ SPA ãšããŠå®è£
ãããŠããããšãã£ãå
·åã§ãã ãããããã³ãã¬ãŒããšã³ãžã³ãš SPA ã®äœµçšæ§æã§ã¯ããã°ã€ã³ã®ååŸã§äžè²«ãããŠãŒã¶ãŒäœéšãæäŸããã®ã¯å°é£ã ãšæããŠããŸããã äŸãã°ãåãæ©èœããã°ã€ã³åãšåŸãšã§2ã€ååšããç®æãããããŠãŒã¶ãŒããèŠããšãã°ã€ã³ãæãã§ UI ãå€ãã£ãŠããŸããããŸãè¯ããŠãŒã¶ãŒäœéšãšã¯èšããªãç¶æ
ã§ããã ãã¡ãããããã£ã課é¡ã¯ãã°ã€ã³ååŸã®äž¡æ¹ã®ããŒãžã® UI ãäžå¯§ã«èšèšããããšã§è§£æ±ºãå¯èœã§ã¯ãããŸãããç°ãªãæè¡ã¹ã¿ãã¯ã§åããããªæ©èœãå®è£
ãã€ã€ UI ã®äžè²«æ§ãä¿ã€ã®ã¯å®¹æã§ã¯ãããŸããã ãããã£ãèæ¯ãããªãã¥ãŒã¢ã«ã§ã¯ãã°ã€ã³ååŸã§ã®å®è£
ãäžæ¬åããæ¹éãç«ãŠãŠããŸããã å®è£
ãäžæ¬åããäžã§ SSR ã«å¯Ÿå¿ããŠãã Next.js ã¯éåžžã«é
åçãªéžæè¢ã§ããã SSR ã«ã¯åæè¡šç€ºã®ããã©ãŒãã³ã¹åäžãªã©ã®ã¡ãªãããããã®ã§ãããæ¡çšã«ããã£ãŠã¯ SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããã è¿å¹Žã§ã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ãããçŽæ¥ HTML ãã¬ã¹ãã³ã¹ã§ããã®ã§ããã°ãã®æ¹ããã確å®ã ãšå€æããŸããã ããã Next.js ãæ¡çšããã«è³ã£ãæå€§ã®çç±ã§ãã ã¡ãªã¿ã«ããã®åœæã¯ App Router ããªãªãŒã¹ãããåã ã£ãããã Pages Router ã§éçºãéå§ããŸããã 以éã®å
容ãåºæ¬çã« Pages Router ãåæãšããŠã話ãããŠãããŸããã App Router ãä»ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããå Žåã§ã SSR ã«ã€ããŠã®èãæ¹ã¯å
±éããŠããéšåãå€ãã®ã§å°ãã§ãåèã«ããŠããã ããã幞ãã§ãã Server-side Rendering ã®ä»çµã¿ Server-side Rendering (SSR) ãšã¯ãNext.js ã Remix ãªã©ã® React ããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ãæã€æ©èœã®ã²ãšã€ã§ãã SSR ãšããçšèªã¯æšä»ã® React ã«é¢ãã話é¡ã®äžã§ã¯ããè³ã«ããèšèã§ãããå®ã¯ React ã®å
¬åŒããã¥ã¡ã³ãã« SSR ãšã¯äœããšããèšè¿°ã¯ååšããŠããŸããã ããã§ã¯ React æ¬äœã«ã¯ãµãŒããŒç°å¢åãã®æ©èœãååšããªãã®ããšãããšããã§ã¯ãªããReact 㯠ã³ã³ããŒãã³ããã HTML ãçæããããã® API ãæäŸããŠããŸãã Next.js ã Remix ã¯ãããã API ãå©çšããŠãµãŒããŒç°å¢ã§ HTML ãçæãã€ã€ãã©ãŠã¶ç°å¢ã§ã¯åŸæ¥ã® SPA ã®ãããªæ¯ãèããå®çŸããæ©èœãæäŸããŠãããããããæ©èœã«ã¯ SSR ãšããååãä»ããããŠããŸãã äŸãã°ãNext.js ã® Pages Router ã§ã¯ getServerSideProps ã䜿çšããŠãªã¯ãšã¹ãæ¯ã« HTML ãçæããæ©èœã SSR ãšåŒãã§ããŸãã åãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠãµãŒããŒåŽã§ã®ããŒã¿ååŸã®æ¹æ³ã¯ç°ãªããŸãããReact ã³ã³ããŒãã³ããã HTML ãçæããä»çµã¿ã¯å
±éããŠããŸãã ãµãŒããŒäžã§ HTML ãçæãããšèšããšãã³ãã¬ãŒããšã³ãžã³ãªã©ãçšããå Žåãšå€ãããªãããã«æãããããããããŸããããSSR ã«ã¯ ãã€ãã¬ãŒã·ã§ã³ ãšããä»çµã¿ãååšããã®ã倧ããªç¹åŸŽã§ãã çæããã HTML ã¯ã¯ã©ã€ã¢ã³ãã«ã¬ã¹ãã³ã¹ãããŠãã©ãŠã¶äžã§è¡šç€ºãããã®ã§ããããã®æç¹ã§ã¯ã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ãããããŠãããããŠãŒã¶ãŒã®æäœã«å¯ŸããŠåå¿ããããšãã§ããªãç¶æ
ã§ãã ããã§ React ã¯ãã©ãŠã¶äžã§å床ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŠã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ããããŸãã ãã®åŠçã¯ãã€ãã¬ãŒã·ã§ã³ãšåŒã°ããŠããŸãã ãã€ãã¬ãŒã·ã§ã³ãè¡ããããšã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒæäœã«åå¿ããããšãã§ããããã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ãããã Client-side Rendering (CSR) ãšåŒã°ãã useEffect ã«ããããŒã¿ã®ååŸãšè¿œå ã®æç»ãè¡ãããå ŽåããããŸãã ããã«ããã€ãã¬ãŒã·ã§ã³ãè¡ãããç¶æ
ããããŒãžé·ç§»ãè¡ãããå Žåã«ã¯ history API ã䜿çšãããŸãã äžé£ã®æµããã·ãŒã±ã³ã¹å³ã«ãããšä»¥äžã®ããã«ãªããŸãã ãã®ããã« SSR ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã§ããã€ãã¬ãŒã·ã§ã³ãè¡ãããåŸã¯åŸæ¥ã® SPA ãšåæ§ã«æ¯ãèããŸãã ãã®ãããContext API ã Redux ãªã©ã®ç¶æ
管çã©ã€ãã©ãªã䜿çšããŠããŒãžãè·šãã§ç¶æ
ãå
±æããããšãå¯èœã§ãã ãããã£ãç¹åŸŽããèãããšãSSR ã¯ãããŸã§ã® React ãšå¯Ÿç«ãããã®ã§ã¯ãªããããããã®æ©èœãäžå±€åŒ·åãããã®ãšèšããã§ãããã CLINICS ã§ã®æŽ»çšäºäŸã®çŽ¹ä» ããããã¯å®éã«ã©ããã£ã圢㧠Next.js ãš SSR ãå©çšããŠããã®ããCLINICS ã®æŽ»çšäºäŸã玹ä»ããŠãããŸãã CLINICS ã®ã·ã¹ãã æ§æã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã (å®éã«ã¯ããå°ãè€éãªæ§æãåã£ãŠããã®ã§ãããä»åã®èª¬æã§ã¯ç°¡ç¥åããŠããŸã) CLINICS ã® Next.js ãµãŒããŒã¯åºæã®ããŒã¿ããŒã¹ãæã£ãŠããããå¿
èŠãªããŒã¿ã¯ãã¹ãŠããã¯ãšã³ãã® API ããååŸããŠããŸãã SSR ã®éã«ã¯ Next.js ãµãŒããŒãããCSR ã®éã«ã¯ãã©ãŠã¶ãã API ã«ãªã¯ãšã¹ããéä¿¡ãããŸãã ã»ãã·ã§ã³æ
å ±ã«ã€ããŠã¯ API ãµãŒããŒåŽã§ç®¡çããŠãããNext.js ãµãŒããŒåŽã«ã¯ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ¹éãåã£ãŠããŸãã SEO é¢ã§ã®ã¡ãªãããéèŠããŠãããããSSR ããã®ã¯ãã°ã€ã³äžèŠã§é²èЧå¯èœãªããŒãžã®ã¿ã§ååã ãããšå€æããŸããã ãã®ãããSSR ãããéã«ã¯ãã°ã€ã³äžèŠã§ååŸã§ããæ
å ±ã®ã¿ã衚瀺ãããã°ã€ã³ãå¿
èŠãªæ
å ±ã衚瀺ããéã«ã¯ CSR ã䜿çšããŠããŸãã SSR ã䜿çšããŠããããŒãžã§ãéšåçã« CSR ãçµã¿åãããŠäœ¿çšããŠãããããŒãžã«ãã£ãŠã¯ SSR ãçšããã«å
šäœã CSR ã§å®è£
ãããŠããã±ãŒã¹ããããŸãã æèŠçã«ã¯åŸæ¥ã® SPA ãããŒã¹ãšããŠéšåçã« SSR ãçµã¿åãããŠãããšèšã£ãŠãè¯ããããããŸããã æ¡çšããŠè¯ãã£ããšæããŠããç¹ ããããã¯å®éã« Next.js ã䜿ã£ãŠã¿ãææã亀ããŠã話ãããŠããããšæããŸãã ãŸãã¯ãNext.js ãæ¡çšããŠè¯ãã£ããšæããŠããç¹ã«ã€ããŠã§ãã å
šäœçãªéçºäœéš ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãäžã§ Next.js ã¯è¯ãéžæã ã£ããšæããŠããŸãã Next.js ãšãããš SSR ã®ã€ã¡ãŒãžã匷ããããããŸããããSSR ãæãã«ããŠã SPA ã®éçºã«å¿
èŠãªèŠçŽ ã¯äžéãåãã£ãŠããŸãã Webpack ããã©ã³ã¹ãã€ã©ãªã©ã®ãã«ãããŒã«ã®èšå®ãããã©ã«ãã§å«ãŸããŠãããReact ã®ãããžã§ã¯ããæ°èŠã«ç«ã¡äžããéã«ã¯éåžžã«äŸ¿å©ãªãã¬ãŒã ã¯ãŒã¯ã ãšæããŠããŸãã CLINICS ã§ã¯ CSS é¢é£ã§è¿œå ã®ã©ã€ãã©ãªã䜿çšããŠããã®ãé€ãã°ãã»ãšãã©ã®å®è£
ã Next.js ãš React ã®æšæºæ©èœã ãã§éçºããŠããŸãã SEO é¢ã§ã®æ±ãããã ãã¡ã㯠Next.js ãæ¡çšããã«ããã£ãŠéèŠããŠããç¹ãªã®ã§ããããã¯ã SSR ã§ãµãŒããŒããçŽæ¥ã¬ã¹ãã³ã¹ãè¿ãããšããç¹ã§ SEO é¢ã§ã¯æ±ãããããšæããŠããŸãã title ã¿ã°ã meta ã¿ã°ãªã©ããã¡ããã§ãããHTTP ã¹ããŒã¿ã¹ã³ãŒããå¶åŸ¡ã§ãããããã¯ããŒã©ãŒã«æå³ãäŒããäŒçµ±çãªæ¹æ³ããã®ãŸãŸäœ¿ããç¹ã¯éåžžã«äŸ¿å©ã§ãã SEO ãšã¯çŽæ¥é¢ä¿ãããŸããããSNS ã§ãªã³ã¯ãã·ã§ã¢ãããéã® OGP çšã® meta ã¿ã°ãåçã«çæããããšãã£ãã±ãŒã¹ãžã®å¯Ÿå¿ã容æã§ãã ãšã¯ãããè¿å¹Žã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ SPA ãå¿
ããã SEO çã«äžå©ãšããããã§ã¯ãããŸããã ã¯ããŒã©ãŒã JavaScript ãçè§£ããèœåã¯å¹Žã
åäžããŠããã®ã§ãé©åã«èšèšããã SPA ã§ããã° SEO çã«åé¡ãªããšããã±ãŒã¹ãå€ãããã§ãã ããããã¯ããŒã©ãŒã®é²æ©ãå®è£
äžã®ãã¯ããã¯ãèžãŸãããš SSR ã® SEO é¢ã§ã®ã¡ãªããã¯ãããŸã§ãã®æ±ãããããšãã芳ç¹ã§èãããšè¯ããããããŸããã ããã©ãŒãã³ã¹ã®åäž SSR ãåãå
¥ããã«ããã£ãŠããã©ãŒãã³ã¹é¢ã«ã€ããŠç¹ã«æèããŠããããã§ã¯ãªãã®ã§ãããå®éã« SSR ã䜿ã£ãŠã¿ãŠ FCP (First Contentful Paint) ã LCP (Largest Contentful Paint) ãšãã£ãåæè¡šç€ºã®é床ãè¡šãææšã®æ¹åã«å¹æããããªãšæããŠããŸãã CSR ã§ã¯ JS ã§ã®ããŒã¿ååŸãå®äºããŠå§ã㊠LCP èŠçŽ ã衚瀺ãããã±ãŒã¹ãå€ããããJS ãã¡ã€ã«ã®ããŠã³ããŒããå®è¡ã®åã ã FCP ã LCP ãé
å»¶ããããåŸåã«ãããŸãã SSR ã§ã¯ãããã JS ã®ããŠã³ããŒããå®è¡ã®æéãæžãåãåæè¡šç€ºã®ããã©ãŒãã³ã¹æ¹åãæåŸ
ã§ããŸãã äœæçã«ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã®è¡šç€ºãæãŸãã«ã³ã³ãã³ãã衚瀺ãããããããŠãŒã¶ãŒã«ãšã£ãŠã¯ããå¿«é©ãªäœéšãšãªãã®ã§ã¯ãªãããšæããŠããŸãã ãŸããSSR 以å€ã«ã Next.js ã¯ç»åã®æé©åãã³ãŒãã¹ããªããã£ã³ã°ãªã©ã®ããã©ãŒãã³ã¹åäžã«åœ¹ç«ã€æ©èœãå€ãæäŸããŠãããããå®å®ããããã©ãŒãã³ã¹ã® Web ã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§ã¯éåžžã«å¿åŒ·ãååšã§ãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã®åçç¹ Next.js ãã®ãã®ã«ã€ããŠäžäŸ¿ã«æããŠããç¹ã¯ããŸããªãã®ã§ãããSSR ãåãå
¥ããã«ããã£ãŠã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ããèããŠããã¹ãã ã£ããšåçããŠããéšåããããŸãã åŸæ¥ã® SPA ã§ããã°ã»ãã·ã§ã³ç®¡ç㯠API ãµãŒããŒã管çãããšããã®ãäžè¬çã§ãããSSR ãæ¡çšããå Žåã§ã¯ Next.js ãµãŒããŒãš API ãµãŒããŒãååšãããšããæ§æã«ãªãã±ãŒã¹ãå€ãããšæããŸãã ãã®å ŽåãNext.js ãµãŒããŒãš API ãµãŒããŒã®ã©ã¡ãã§ã»ãã·ã§ã³ã管çããã®ããã»ãã·ã§ã³æ
å ±ãå
±æããã®ããå
±æããã®ã§ããã°ã©ã®ãããªæ¹æ³ã§å
±æããã®ããšãã£ãç¹ã§è€æ°ã®éžæè¢ãèããããŸãã CLINICS ã§ã¯åè¿°ã®éã API ãµãŒããŒã§ã»ãã·ã§ã³ã管çã㊠Next.js ãµãŒããŒãšã®éã§ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ§æãæ¡çšããŠããŸãã ããããæ§æã®éœåã§ Next.js ãµãŒããŒã§ã»ãã·ã§ã³æ
å ±ãæ±ãããšãã§ããªãããããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒåºæã®æ
å ±ã¯ SSR ããããšãã§ãããCSR ã§ååŸããŠæç»ããå¿
èŠããããŸãã ãã®ããã«ã㊠SSR ãš CSR ãçµã¿åãããå ŽåãCSR ã§ååŸããããŒã¿ãæç»ããéã«ã¬ã€ã¢ãŠãã·ãããçºçãããããªããŸãã ãŸãããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒã«å¯ŸããŠã¯æ€çŽ¢çµæãã«ã¹ã¿ãã€ãºãããäžŠã³æ¿ããããšãã£ãèŠä»¶ãžã®å¯Ÿå¿ãé£ãããªã£ãŠããŸããŸãã ãããã£ãé¢ã§ SSR ãš CSR ãçµã¿åãããããåŸãªãçŸç¶ã®èªèšŒæ§æã«ã¯èª²é¡ããããšæããŠããŸãã ãããã課é¡ãè§£æ¶ããããã«ããä»åŸã¯ã»ãã·ã§ã³æ
å ±ã Next.js ãµãŒããŒãšå
±æããæ§æãžãšå€æŽããCSR ããŠããéšåã SSR ãã圢ã«å€æŽããŠãããããšèããŠããŸãã ãã®ããã« SSR ãæŽ»çšããå Žåã«ã¯åŸæ¥ã® SPA ãããã»ãã·ã§ã³ç®¡çã®éžæè¢ãå¢ãããããã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ç¹ã«æ
éã«èããå¿
èŠããããšæããŠããŸãã SSR ãä»ã¯å¿
èŠãšããŠããªããšããã±ãŒã¹ã§ããå°æ¥çãªå°å
¥ã«åããŠã»ãã·ã§ã³ç®¡çã«ã€ããŠå°ãèããå·¡ãããŠãããšè¯ããããããŸããã Next.js ã®æ¡çšãæ€èšããŠããæ¹ãž æåŸã«ããããã Next.js ãæ¡çšããããšããŠããæ¹ãæ°ã«ãªã£ãŠããã®ã§ã¯ãªãããšæããããã€ã³ãã«ã€ããŠã話ãããŠããããšæããŸãã Next.js ãæ¡çšããã«ããã£ãŠæãæ°ã«ãªããã€ã³ãã¯ãã¯ã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ãã§ã¯ãªãã§ããããã Next.js ã§ã¯äžéšã®äŸå€ãé€ãã° SSR ã䜿çšãããåŠãã«é¢ãããå®è¡ã«ã¯ Node.js ãµãŒããŒãå¿
èŠãšãªããŸãã SSR ã¯å¿
èŠãšããŠããªãã Next.js ã®æ§ã
ãªæ©æµãåããããšããéçºè
ã«ãšã£ãŠã¯ Node.js ãµãŒããŒã®éçšã³ã¹ããæ°ã«ãªããšããããšæããŸãã CLINICS ã§ã¯ AWS ECS/Fargate ã§ Next.js ãµãŒããŒãéçšããŠããã®ã§ãããNode.js ã®å®è¡ç°å¢ãéçšããã³ã¹ãã¯ç¢ºãã«çºçããŠãããã®ã®ãçŸç¶ã§ã¯ããã»ã©å€§ããªè² æ
ã«ã¯æããŠããŸããã API ãµãŒããŒãå¥ã§ååšããæ§æã§ã¯ Next.js ãµãŒããŒãæ
ãã®ã¯ã«ãŒãã£ã³ã°ã«åŸã£ãŠ API ãµãŒããŒããããŒã¿ãååŸã㊠SSR ãããšãã£ãæ¯èŒçã·ã³ãã«ãªåœ¹å²ã«ãªããŸãã ãã®ãããããŒã¿ããŒã¹ãæ±ããããªæ¬æ Œçãªããã¯ãšã³ãã«æ¯ã¹ããšéçšã®æéã¯äœãæããããŠããå°è±¡ã§ãã ã©ãããŠã Node.js ã®å®è¡ç°å¢ãæããã«éçšããããšããå Žåã«ã¯ Static Exports ãšãããã«ãæã« HTML ãå«ãéçã¢ã»ãããåºåããæ©èœã®å©çšãæ€èšããŠã¿ããšè¯ããããããŸããã ãã ããæ©èœé¢ã§ããã€ãã®å¶çŽãããã®ã§ãæ¡çšãæ€èšããéã«ã¯ãã確èªããŠããããšããå§ãããŸãã ã©ã¡ãããšèšãã° Static Exports ã¯éçãªãµã€ããæ§ç¯ããã®ã«åããŠããæ©èœã§ãããåçãªã³ã³ãã³ããæ±ããããªã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŸãåããŠããªããšããã®ãæ£çŽãªææ³ã§ãã åŸæ¥ã® SPA ã«å€ãèŠããããããªãã«ãæžã¿ã® JavaScript, CSS ãªã©ã®éçã¢ã»ããã S3 ãªã©ã®ã¹ãã¬ãŒãžã«é
眮ã㊠HTML ã¯ããã¯ãšã³ãã®ãµãŒããŒããé
ä¿¡ãããšãã£ãæ§æãæ³å®ãããŠããªãç¹ã泚æãå¿
èŠããšæããŸãã ãŸããNext.js ã®æ¡çšã«ããã£ãŠ App Router ã«è¿œåŸãã¹ãããšããã®ãæ©ãŸãããã€ã³ãã§ãã App Router 㯠Next.js 13 ã§å°å
¥ãããæ°ããã«ãŒãã£ã³ã°ã·ã¹ãã ã§ãServer Components/Actions ãªã©ã® React ã®æ°æ©èœããµããŒãããŠããç¹ãé
åã§ããããªãªãŒã¹ããæ¥ãæµ
ããŸã ãã°ããã¯æ§åãèŠãããšèããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã çŸç¶ CLINICS ã§ã¯ãŸã App Router ãžã®ç§»è¡ã¯èããŠãããå®éã®äœ¿çšæãªã©ãã話ãããããšã¯ã§ããªãã®ã§ãããããã¥ã¡ã³ããèªãéãã§ã¯ Pages Router ã®æ±ãã«ããéšåãããŸãæ¹åãããŠããå°è±¡ã¯ãããŸãã ãã ãPages Router ã®ã«ãŒãã£ã³ã°æ©èœãšå®å
šãªäºææ§ããªãç¹ãç§»è¡ãèããäžã§æå€§ã®ããã¯ã ãšæããŠããŸãã ãããã£ãç§»è¡ã®ã³ã¹ãã Next.js èªäœã App Router ãžã®ç§»è¡ãæšå¥šããŠããããšãèžãŸãããšãä»ããæ°èŠã«éçºãå§ããã®ã§ããã° App Router ã§éçºãå§ããŠããŸã£ãæ¹ãç¡é£ãªéžæãããããŸããã ç·ããŠãNode.js ãµãŒããŒã®éçšã³ã¹ãã蚱容ã§ããããApp Router ã Server Components/Actions ã«é
åãæããããšãã£ãç¹ã Next.js ã®æ¡çšãæ€èšããäžã§ã®ãã€ã³ãã«ãªãã®ã§ã¯ãªãã§ããããã ãŸãšã CLINICS ã§ã¯ Next.js ãæ¡çšããŠãããSSR ãš CSR ã䜵çšããåœ¢ã§æ¯èŒçã©ã€ãã« SSR ãåãå
¥ããŠããã³ããšã³ãã®éçºãé²ããŠããŸãã åœå㯠SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããããå®éã«äœ¿ã£ãŠã¿ããšããã©ãŒãã³ã¹ã®åäžãéçºäœéšã®åäžãªã©æ§ã
ãªã¡ãªãããæããŠããŸãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯èª²é¡ãæ±ããŠããéšåããããŸãããä»åŸã¯ãããã£ãéšåãæ¹åãããäžå±€ SSR ã®æ©æµãåããããããã«ããŠãããããšèããŠããŸãã Next.js ã®ä»ã«ã Remix ãš React Router ã®çµ±å ãçºè¡šããããªã©ãããã« SSR ãæŽ»çšããããç°å¢ãæŽãã€ã€ãããšããç¹ã§ããSSR ã®ä»åŸã¯éåžžã«æ¥œãã¿ãªéšåãå€ããšæããŠããŸãã
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éšã»ãããã¯ãéçºå®€ã»ç¬¬1éçºã°ã«ãŒãæå±ã®å è€ã§ãã ãªã³ã©ã€ã³èšºçã»ãªã³ã©ã€ã³æè¬æå°ã¢ããªãCLINICSã ã®éçºãæ
åœããŠããŸãã ä»å㯠CLINICS ã§æ¡çšããŠãã Next.js ãš Server-side Rendering (SSR) ã«ã€ããŠã話ãããããšæããŸãã Next.js ã¯æšä»æ³šç®ãéããŠãã React ããŒã¹ã® Web ãã¬ãŒã ã¯ãŒã¯ã§ãã ãããã Web ããã³ããšã³ãã®éçºãå§ããã«ããã£ãŠæ¡çšãæ€èšããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã Next.js ãšããã° React ã³ã³ããŒãã³ãããµãŒããŒäžã§å®è¡ã㊠HTML ãè¿ã SSR ã«å¯Ÿå¿ããŠããã®ã倧ããªç¹åŸŽã§ãã SSR ã«ã¯æ§ã
ãªã¡ãªãããããäžæ¹ã§ãæ¡çšã«ããã£ãŠèªåãã¡ã®ãããã¯ãã« SSR ã¯äžèŠãªã®ã§ã¯ãªãããšãã£ãæžå¿µã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ããæ°ã«ãã声ãããè³ã«ããŸãã ãã®èšäºã§ã¯ã¡ãã¬ãŒã§ã® Next.js, SSR ã®æ¡çšäºäŸã玹ä»ãã€ã€ãæ¡çšã«ããã£ãŠäžè¬ã«æžå¿µãããç¹ãå®éã«æ¡çšããŠã¿ãäžã§ã®ææã亀ããŠã話ãã§ããã°ãšæã£ãŠããŸãã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ã㊠ãŸãã¯ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ãš CLINICS ã¢ããªã«ã€ããŠç°¡åã«ç޹ä»ãããŠãã ããã ã¡ãã¬ãŒã®å»çãã©ãããã©ãŒã äºæ¥ã¯ã2016幎ã«ãªã³ã©ã€ã³èšºçã·ã¹ãã ãšããŠãªãªãŒã¹ããã ãCLINICSã ãåç¹ãšããŠããŸãã åœæã¯å»çæ©é¢ã®æ¹ãæäœããæ¥åã·ã¹ãã éšåãšæ£è
ããåãã® iOS/Android ã¢ããªãšãã® Web çãååšãããšããæ§æã§ããã ãã®åŸ CLINICS ã«ã¯é»åã«ã«ããªã©ã®æ§ã
ãªæ©èœã远å ãããçŸåšã§ã¯ãªã³ã©ã€ã³èšºçã«çãŸããå»çæ©é¢ã®æ§ã
ãªæ¥åãæ¯æŽããã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãžãšçºå±ããŠããŸãã ãŸãã2020幎ã«ãªãªãŒã¹ããããããã€ãè¬å±æ¯æŽã·ã¹ãã ãPharmsã ã2022幎ã«ãªãªãŒã¹ãããã¯ã©ãŠãæ¯ç§æ¯æŽã·ã¹ãã ãDentisã ããããã¯ãã®ã©ã€ã³ãããã«å ãããããå€ãã®å»çæ©é¢ã®æ¥åãæ¯æŽãããã©ãããã©ãŒã ãšããŠãµãŒãã¹ã®èŠæš¡ãæ¡å€§ããŠããŸãã å»çæ©é¢åãã®æ¥åã·ã¹ãã ã¯å»ç§ã»æ¯ç§ã»èª¿å€è¬å±ãšããããã®æ¥åç¹æ§ã«åãããŠãããã¯ããåãããŠããäžæ¹ã§ãæ£è
ããåãã®æ©èœã¯ãã¹ãŠ CLINICS ã¢ããªã«éçŽãããŠããŸãã æ¥åã·ã¹ãã ã®æ©èœæ¡å
ã«äŒŽã£ãŠ CLINICS ã¢ããªã®æ©èœãæ¡å
ãããŠãããçŸåšã§ã¯ãªã³ã©ã€ã³æè¬æå°æ©èœãåŠæ¹ç®ã®äºåéä¿¡æ©èœãªã©æ§ã
ãªæ©èœã远å ãããŠããŸãã ä»åã話ãããã®ã¯ãã® CLINICS ã¢ããªã® Web ç (以äžãCLINICS) ã®ããã³ããšã³ãéçºã«ã€ããŠã§ãã Next.js æ¡çšã®ã¢ãããŒã·ã§ã³ CLINICS ã¢ããªã¯ãªãªãŒã¹ä»¥åŸç¶ã
ãšæ©èœãæ¡åŒµãããŠããã®ã§ãããããããéçºãæ¯ãããã 2021幎ã«å€§èŠæš¡ãªãªãã¥ãŒã¢ã«ã宿œããŸããã ç¹ã« Web çã¯ãªãã¥ãŒã¢ã«ã®ã¿ã€ãã³ã°ã§ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãéžæãããŠããŸãã ãªãã¥ãŒã¢ã«ä»¥åã®ãããããŒãž çŸåšã®ãããããŒãž ãªãã¥ãŒã¢ã«ä»¥åã® CLINICS ã¯ãã°ã€ã³ã®ååŸã§å®è£
ãåãããŠããããã®ç¹ããã«ã¹ã¯ã©ããã§ã®å®è£
ãéžæãã倧ããªã¢ãããŒã·ã§ã³ãšãªããŸããã CLINICS ã¯éçºåœåãã Ruby on Rails ã§éçºãããŠããã®ã§ãããæ£è
ããåãã®ããŒãžã¯ Rails ã®ãã³ãã¬ãŒããšã³ãžã³ãçšããŠå®è£
ãããŠããéšåãš SPA ãšããŠå®è£
ãããŠããéšåãæ··åšããŠããŸããã å»çæ©é¢ã®æ€çŽ¢ã詳现ãªã©ã®æ€çŽ¢ãšã³ãžã³ããã®æµå
¥ã確ä¿ãããããŒãžã§ã¯ãã³ãã¬ãŒããšã³ãžã³ãçšã㊠HTML ãçŽæ¥ã¬ã¹ãã³ã¹ããããã°ã€ã³ããŒãžãäºçŽããŒãžãªã©ã®æäœæ§ãéèŠããããŒãžã§ã¯ SPA ãšããŠå®è£
ãããŠããããšãã£ãå
·åã§ãã ãããããã³ãã¬ãŒããšã³ãžã³ãš SPA ã®äœµçšæ§æã§ã¯ããã°ã€ã³ã®ååŸã§äžè²«ãããŠãŒã¶ãŒäœéšãæäŸããã®ã¯å°é£ã ãšæããŠããŸããã äŸãã°ãåãæ©èœããã°ã€ã³åãšåŸãšã§2ã€ååšããç®æãããããŠãŒã¶ãŒããèŠããšãã°ã€ã³ãæãã§ UI ãå€ãã£ãŠããŸããããŸãè¯ããŠãŒã¶ãŒäœéšãšã¯èšããªãç¶æ
ã§ããã ãã¡ãããããã£ã課é¡ã¯ãã°ã€ã³ååŸã®äž¡æ¹ã®ããŒãžã® UI ãäžå¯§ã«èšèšããããšã§è§£æ±ºãå¯èœã§ã¯ãããŸãããç°ãªãæè¡ã¹ã¿ãã¯ã§åããããªæ©èœãå®è£
ãã€ã€ UI ã®äžè²«æ§ãä¿ã€ã®ã¯å®¹æã§ã¯ãããŸããã ãããã£ãèæ¯ãããªãã¥ãŒã¢ã«ã§ã¯ãã°ã€ã³ååŸã§ã®å®è£
ãäžæ¬åããæ¹éãç«ãŠãŠããŸããã å®è£
ãäžæ¬åããäžã§ SSR ã«å¯Ÿå¿ããŠãã Next.js ã¯éåžžã«é
åçãªéžæè¢ã§ããã SSR ã«ã¯åæè¡šç€ºã®ããã©ãŒãã³ã¹åäžãªã©ã®ã¡ãªãããããã®ã§ãããæ¡çšã«ããã£ãŠã¯ SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããã è¿å¹Žã§ã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ãããçŽæ¥ HTML ãã¬ã¹ãã³ã¹ã§ããã®ã§ããã°ãã®æ¹ããã確å®ã ãšå€æããŸããã ããã Next.js ãæ¡çšããã«è³ã£ãæå€§ã®çç±ã§ãã ã¡ãªã¿ã«ããã®åœæã¯ App Router ããªãªãŒã¹ãããåã ã£ãããã Pages Router ã§éçºãéå§ããŸããã 以éã®å
容ãåºæ¬çã« Pages Router ãåæãšããŠã話ãããŠãããŸããã App Router ãä»ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããå Žåã§ã SSR ã«ã€ããŠã®èãæ¹ã¯å
±éããŠããéšåãå€ãã®ã§å°ãã§ãåèã«ããŠããã ããã幞ãã§ãã Server-side Rendering ã®ä»çµã¿ Server-side Rendering (SSR) ãšã¯ãNext.js ã Remix ãªã©ã® React ããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ãæã€æ©èœã®ã²ãšã€ã§ãã SSR ãšããçšèªã¯æšä»ã® React ã«é¢ãã話é¡ã®äžã§ã¯ããè³ã«ããèšèã§ãããå®ã¯ React ã®å
¬åŒããã¥ã¡ã³ãã« SSR ãšã¯äœããšããèšè¿°ã¯ååšããŠããŸããã ããã§ã¯ React æ¬äœã«ã¯ãµãŒããŒç°å¢åãã®æ©èœãååšããªãã®ããšãããšããã§ã¯ãªããReact 㯠ã³ã³ããŒãã³ããã HTML ãçæããããã® API ãæäŸããŠããŸãã Next.js ã Remix ã¯ãããã API ãå©çšããŠãµãŒããŒç°å¢ã§ HTML ãçæãã€ã€ãã©ãŠã¶ç°å¢ã§ã¯åŸæ¥ã® SPA ã®ãããªæ¯ãèããå®çŸããæ©èœãæäŸããŠãããããããæ©èœã«ã¯ SSR ãšããååãä»ããããŠããŸãã äŸãã°ãNext.js ã® Pages Router ã§ã¯ getServerSideProps ã䜿çšããŠãªã¯ãšã¹ãæ¯ã« HTML ãçæããæ©èœã SSR ãšåŒãã§ããŸãã åãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠãµãŒããŒåŽã§ã®ããŒã¿ååŸã®æ¹æ³ã¯ç°ãªããŸãããReact ã³ã³ããŒãã³ããã HTML ãçæããä»çµã¿ã¯å
±éããŠããŸãã ãµãŒããŒäžã§ HTML ãçæãããšèšããšãã³ãã¬ãŒããšã³ãžã³ãªã©ãçšããå Žåãšå€ãããªãããã«æãããããããããŸããããSSR ã«ã¯ ãã€ãã¬ãŒã·ã§ã³ ãšããä»çµã¿ãååšããã®ã倧ããªç¹åŸŽã§ãã çæããã HTML ã¯ã¯ã©ã€ã¢ã³ãã«ã¬ã¹ãã³ã¹ãããŠãã©ãŠã¶äžã§è¡šç€ºãããã®ã§ããããã®æç¹ã§ã¯ã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ãããããŠãããããŠãŒã¶ãŒã®æäœã«å¯ŸããŠåå¿ããããšãã§ããªãç¶æ
ã§ãã ããã§ React ã¯ãã©ãŠã¶äžã§å床ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŠã€ãã³ããã³ãã©ãŒã DOM ã«ã¢ã¿ããããŸãã ãã®åŠçã¯ãã€ãã¬ãŒã·ã§ã³ãšåŒã°ããŠããŸãã ãã€ãã¬ãŒã·ã§ã³ãè¡ããããšã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒæäœã«åå¿ããããšãã§ããããã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ãããã Client-side Rendering (CSR) ãšåŒã°ãã useEffect ã«ããããŒã¿ã®ååŸãšè¿œå ã®æç»ãè¡ãããå ŽåããããŸãã ããã«ããã€ãã¬ãŒã·ã§ã³ãè¡ãããç¶æ
ããããŒãžé·ç§»ãè¡ãããå Žåã«ã¯ history API ã䜿çšãããŸãã äžé£ã®æµããã·ãŒã±ã³ã¹å³ã«ãããšä»¥äžã®ããã«ãªããŸãã ãã®ããã« SSR ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã§ããã€ãã¬ãŒã·ã§ã³ãè¡ãããåŸã¯åŸæ¥ã® SPA ãšåæ§ã«æ¯ãèããŸãã ãã®ãããContext API ã Redux ãªã©ã®ç¶æ
管çã©ã€ãã©ãªã䜿çšããŠããŒãžãè·šãã§ç¶æ
ãå
±æããããšãå¯èœã§ãã ãããã£ãç¹åŸŽããèãããšãSSR ã¯ãããŸã§ã® React ãšå¯Ÿç«ãããã®ã§ã¯ãªããããããã®æ©èœãäžå±€åŒ·åãããã®ãšèšããã§ãããã CLINICS ã§ã®æŽ»çšäºäŸã®çŽ¹ä» ããããã¯å®éã«ã©ããã£ã圢㧠Next.js ãš SSR ãå©çšããŠããã®ããCLINICS ã®æŽ»çšäºäŸã玹ä»ããŠãããŸãã CLINICS ã®ã·ã¹ãã æ§æã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã (å®éã«ã¯ããå°ãè€éãªæ§æãåã£ãŠããã®ã§ãããä»åã®èª¬æã§ã¯ç°¡ç¥åããŠããŸã) CLINICS ã® Next.js ãµãŒããŒã¯åºæã®ããŒã¿ããŒã¹ãæã£ãŠããããå¿
èŠãªããŒã¿ã¯ãã¹ãŠããã¯ãšã³ãã® API ããååŸããŠããŸãã SSR ã®éã«ã¯ Next.js ãµãŒããŒãããCSR ã®éã«ã¯ãã©ãŠã¶ãã API ã«ãªã¯ãšã¹ããéä¿¡ãããŸãã ã»ãã·ã§ã³æ
å ±ã«ã€ããŠã¯ API ãµãŒããŒåŽã§ç®¡çããŠãããNext.js ãµãŒããŒåŽã«ã¯ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ¹éãåã£ãŠããŸãã SEO é¢ã§ã®ã¡ãªãããéèŠããŠãããããSSR ããã®ã¯ãã°ã€ã³äžèŠã§é²èЧå¯èœãªããŒãžã®ã¿ã§ååã ãããšå€æããŸããã ãã®ãããSSR ãããéã«ã¯ãã°ã€ã³äžèŠã§ååŸã§ããæ
å ±ã®ã¿ã衚瀺ãããã°ã€ã³ãå¿
èŠãªæ
å ±ã衚瀺ããéã«ã¯ CSR ã䜿çšããŠããŸãã SSR ã䜿çšããŠããããŒãžã§ãéšåçã« CSR ãçµã¿åãããŠäœ¿çšããŠãããããŒãžã«ãã£ãŠã¯ SSR ãçšããã«å
šäœã CSR ã§å®è£
ãããŠããã±ãŒã¹ããããŸãã æèŠçã«ã¯åŸæ¥ã® SPA ãããŒã¹ãšããŠéšåçã« SSR ãçµã¿åãããŠãããšèšã£ãŠãè¯ããããããŸããã æ¡çšããŠè¯ãã£ããšæããŠããç¹ ããããã¯å®éã« Next.js ã䜿ã£ãŠã¿ãææã亀ããŠã話ãããŠããããšæããŸãã ãŸãã¯ãNext.js ãæ¡çšããŠè¯ãã£ããšæããŠããç¹ã«ã€ããŠã§ãã å
šäœçãªéçºäœéš ãã«ã¹ã¯ã©ããã§å®è£
ãçŽãäžã§ Next.js ã¯è¯ãéžæã ã£ããšæããŠããŸãã Next.js ãšãããš SSR ã®ã€ã¡ãŒãžã匷ããããããŸããããSSR ãæãã«ããŠã SPA ã®éçºã«å¿
èŠãªèŠçŽ ã¯äžéãåãã£ãŠããŸãã Webpack ããã©ã³ã¹ãã€ã©ãªã©ã®ãã«ãããŒã«ã®èšå®ãããã©ã«ãã§å«ãŸããŠãããReact ã®ãããžã§ã¯ããæ°èŠã«ç«ã¡äžããéã«ã¯éåžžã«äŸ¿å©ãªãã¬ãŒã ã¯ãŒã¯ã ãšæããŠããŸãã CLINICS ã§ã¯ CSS é¢é£ã§è¿œå ã®ã©ã€ãã©ãªã䜿çšããŠããã®ãé€ãã°ãã»ãšãã©ã®å®è£
ã Next.js ãš React ã®æšæºæ©èœã ãã§éçºããŠããŸãã SEO é¢ã§ã®æ±ãããã ãã¡ã㯠Next.js ãæ¡çšããã«ããã£ãŠéèŠããŠããç¹ãªã®ã§ããããã¯ã SSR ã§ãµãŒããŒããçŽæ¥ã¬ã¹ãã³ã¹ãè¿ãããšããç¹ã§ SEO é¢ã§ã¯æ±ãããããšæããŠããŸãã title ã¿ã°ã meta ã¿ã°ãªã©ããã¡ããã§ãããHTTP ã¹ããŒã¿ã¹ã³ãŒããå¶åŸ¡ã§ãããããã¯ããŒã©ãŒã«æå³ãäŒããäŒçµ±çãªæ¹æ³ããã®ãŸãŸäœ¿ããç¹ã¯éåžžã«äŸ¿å©ã§ãã SEO ãšã¯çŽæ¥é¢ä¿ãããŸããããSNS ã§ãªã³ã¯ãã·ã§ã¢ãããéã® OGP çšã® meta ã¿ã°ãåçã«çæããããšãã£ãã±ãŒã¹ãžã®å¯Ÿå¿ã容æã§ãã ãšã¯ãããè¿å¹Žã¯ Google ã®ã¯ããŒã©ãŒã JavaScript ãå®è¡ããŠãããã®ã§ SPA ãå¿
ããã SEO çã«äžå©ãšããããã§ã¯ãããŸããã ã¯ããŒã©ãŒã JavaScript ãçè§£ããèœåã¯å¹Žã
åäžããŠããã®ã§ãé©åã«èšèšããã SPA ã§ããã° SEO çã«åé¡ãªããšããã±ãŒã¹ãå€ãããã§ãã ããããã¯ããŒã©ãŒã®é²æ©ãå®è£
äžã®ãã¯ããã¯ãèžãŸãããš SSR ã® SEO é¢ã§ã®ã¡ãªããã¯ãããŸã§ãã®æ±ãããããšãã芳ç¹ã§èãããšè¯ããããããŸããã ããã©ãŒãã³ã¹ã®åäž SSR ãåãå
¥ããã«ããã£ãŠããã©ãŒãã³ã¹é¢ã«ã€ããŠç¹ã«æèããŠããããã§ã¯ãªãã®ã§ãããå®éã« SSR ã䜿ã£ãŠã¿ãŠ FCP (First Contentful Paint) ã LCP (Largest Contentful Paint) ãšãã£ãåæè¡šç€ºã®é床ãè¡šãææšã®æ¹åã«å¹æããããªãšæããŠããŸãã CSR ã§ã¯ JS ã§ã®ããŒã¿ååŸãå®äºããŠå§ã㊠LCP èŠçŽ ã衚瀺ãããã±ãŒã¹ãå€ããããJS ãã¡ã€ã«ã®ããŠã³ããŒããå®è¡ã®åã ã FCP ã LCP ãé
å»¶ããããåŸåã«ãããŸãã SSR ã§ã¯ãããã JS ã®ããŠã³ããŒããå®è¡ã®æéãæžãåãåæè¡šç€ºã®ããã©ãŒãã³ã¹æ¹åãæåŸ
ã§ããŸãã äœæçã«ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã®è¡šç€ºãæãŸãã«ã³ã³ãã³ãã衚瀺ãããããããŠãŒã¶ãŒã«ãšã£ãŠã¯ããå¿«é©ãªäœéšãšãªãã®ã§ã¯ãªãããšæããŠããŸãã ãŸããSSR 以å€ã«ã Next.js ã¯ç»åã®æé©åãã³ãŒãã¹ããªããã£ã³ã°ãªã©ã®ããã©ãŒãã³ã¹åäžã«åœ¹ç«ã€æ©èœãå€ãæäŸããŠãããããå®å®ããããã©ãŒãã³ã¹ã® Web ã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§ã¯éåžžã«å¿åŒ·ãååšã§ãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã®åçç¹ Next.js ãã®ãã®ã«ã€ããŠäžäŸ¿ã«æããŠããç¹ã¯ããŸããªãã®ã§ãããSSR ãåãå
¥ããã«ããã£ãŠã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ããèããŠããã¹ãã ã£ããšåçããŠããéšåããããŸãã åŸæ¥ã® SPA ã§ããã°ã»ãã·ã§ã³ç®¡ç㯠API ãµãŒããŒã管çãããšããã®ãäžè¬çã§ãããSSR ãæ¡çšããå Žåã§ã¯ Next.js ãµãŒããŒãš API ãµãŒããŒãååšãããšããæ§æã«ãªãã±ãŒã¹ãå€ãããšæããŸãã ãã®å ŽåãNext.js ãµãŒããŒãš API ãµãŒããŒã®ã©ã¡ãã§ã»ãã·ã§ã³ã管çããã®ããã»ãã·ã§ã³æ
å ±ãå
±æããã®ããå
±æããã®ã§ããã°ã©ã®ãããªæ¹æ³ã§å
±æããã®ããšãã£ãç¹ã§è€æ°ã®éžæè¢ãèããããŸãã CLINICS ã§ã¯åè¿°ã®éã API ãµãŒããŒã§ã»ãã·ã§ã³ã管çã㊠Next.js ãµãŒããŒãšã®éã§ã»ãã·ã§ã³æ
å ±ãå
±æããªãæ§æãæ¡çšããŠããŸãã ããããæ§æã®éœåã§ Next.js ãµãŒããŒã§ã»ãã·ã§ã³æ
å ±ãæ±ãããšãã§ããªãããããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒåºæã®æ
å ±ã¯ SSR ããããšãã§ãããCSR ã§ååŸããŠæç»ããå¿
èŠããããŸãã ãã®ããã«ã㊠SSR ãš CSR ãçµã¿åãããå ŽåãCSR ã§ååŸããããŒã¿ãæç»ããéã«ã¬ã€ã¢ãŠãã·ãããçºçãããããªããŸãã ãŸãããã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒã«å¯ŸããŠã¯æ€çŽ¢çµæãã«ã¹ã¿ãã€ãºãããäžŠã³æ¿ããããšãã£ãèŠä»¶ãžã®å¯Ÿå¿ãé£ãããªã£ãŠããŸããŸãã ãããã£ãé¢ã§ SSR ãš CSR ãçµã¿åãããããåŸãªãçŸç¶ã®èªèšŒæ§æã«ã¯èª²é¡ããããšæããŠããŸãã ãããã課é¡ãè§£æ¶ããããã«ããä»åŸã¯ã»ãã·ã§ã³æ
å ±ã Next.js ãµãŒããŒãšå
±æããæ§æãžãšå€æŽããCSR ããŠããéšåã SSR ãã圢ã«å€æŽããŠãããããšèããŠããŸãã ãã®ããã« SSR ãæŽ»çšããå Žåã«ã¯åŸæ¥ã® SPA ãããã»ãã·ã§ã³ç®¡çã®éžæè¢ãå¢ãããããã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯ç¹ã«æ
éã«èããå¿
èŠããããšæããŠããŸãã SSR ãä»ã¯å¿
èŠãšããŠããªããšããã±ãŒã¹ã§ããå°æ¥çãªå°å
¥ã«åããŠã»ãã·ã§ã³ç®¡çã«ã€ããŠå°ãèããå·¡ãããŠãããšè¯ããããããŸããã Next.js ã®æ¡çšãæ€èšããŠããæ¹ãž æåŸã«ããããã Next.js ãæ¡çšããããšããŠããæ¹ãæ°ã«ãªã£ãŠããã®ã§ã¯ãªãããšæããããã€ã³ãã«ã€ããŠã話ãããŠããããšæããŸãã Next.js ãæ¡çšããã«ããã£ãŠæãæ°ã«ãªããã€ã³ãã¯ãã¯ã Node.js ã®å®è¡ç°å¢ã®éçšã³ã¹ãã§ã¯ãªãã§ããããã Next.js ã§ã¯äžéšã®äŸå€ãé€ãã° SSR ã䜿çšãããåŠãã«é¢ãããå®è¡ã«ã¯ Node.js ãµãŒããŒãå¿
èŠãšãªããŸãã SSR ã¯å¿
èŠãšããŠããªãã Next.js ã®æ§ã
ãªæ©æµãåããããšããéçºè
ã«ãšã£ãŠã¯ Node.js ãµãŒããŒã®éçšã³ã¹ããæ°ã«ãªããšããããšæããŸãã CLINICS ã§ã¯ AWS ECS/Fargate ã§ Next.js ãµãŒããŒãéçšããŠããã®ã§ãããNode.js ã®å®è¡ç°å¢ãéçšããã³ã¹ãã¯ç¢ºãã«çºçããŠãããã®ã®ãçŸç¶ã§ã¯ããã»ã©å€§ããªè² æ
ã«ã¯æããŠããŸããã API ãµãŒããŒãå¥ã§ååšããæ§æã§ã¯ Next.js ãµãŒããŒãæ
ãã®ã¯ã«ãŒãã£ã³ã°ã«åŸã£ãŠ API ãµãŒããŒããããŒã¿ãååŸã㊠SSR ãããšãã£ãæ¯èŒçã·ã³ãã«ãªåœ¹å²ã«ãªããŸãã ãã®ãããããŒã¿ããŒã¹ãæ±ããããªæ¬æ Œçãªããã¯ãšã³ãã«æ¯ã¹ããšéçšã®æéã¯äœãæããããŠããå°è±¡ã§ãã ã©ãããŠã Node.js ã®å®è¡ç°å¢ãæããã«éçšããããšããå Žåã«ã¯ Static Exports ãšãããã«ãæã« HTML ãå«ãéçã¢ã»ãããåºåããæ©èœã®å©çšãæ€èšããŠã¿ããšè¯ããããããŸããã ãã ããæ©èœé¢ã§ããã€ãã®å¶çŽãããã®ã§ãæ¡çšãæ€èšããéã«ã¯ãã確èªããŠããããšããå§ãããŸãã ã©ã¡ãããšèšãã° Static Exports ã¯éçãªãµã€ããæ§ç¯ããã®ã«åããŠããæ©èœã§ãããåçãªã³ã³ãã³ããæ±ããããªã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŸãåããŠããªããšããã®ãæ£çŽãªææ³ã§ãã åŸæ¥ã® SPA ã«å€ãèŠããããããªãã«ãæžã¿ã® JavaScript, CSS ãªã©ã®éçã¢ã»ããã S3 ãªã©ã®ã¹ãã¬ãŒãžã«é
眮ã㊠HTML ã¯ããã¯ãšã³ãã®ãµãŒããŒããé
ä¿¡ãããšãã£ãæ§æãæ³å®ãããŠããªãç¹ã泚æãå¿
èŠããšæããŸãã ãŸããNext.js ã®æ¡çšã«ããã£ãŠ App Router ã«è¿œåŸãã¹ãããšããã®ãæ©ãŸãããã€ã³ãã§ãã App Router 㯠Next.js 13 ã§å°å
¥ãããæ°ããã«ãŒãã£ã³ã°ã·ã¹ãã ã§ãServer Components/Actions ãªã©ã® React ã®æ°æ©èœããµããŒãããŠããç¹ãé
åã§ããããªãªãŒã¹ããæ¥ãæµ
ããŸã ãã°ããã¯æ§åãèŠãããšèããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã çŸç¶ CLINICS ã§ã¯ãŸã App Router ãžã®ç§»è¡ã¯èããŠãããå®éã®äœ¿çšæãªã©ãã話ãããããšã¯ã§ããªãã®ã§ãããããã¥ã¡ã³ããèªãéãã§ã¯ Pages Router ã®æ±ãã«ããéšåãããŸãæ¹åãããŠããå°è±¡ã¯ãããŸãã ãã ãPages Router ã®ã«ãŒãã£ã³ã°æ©èœãšå®å
šãªäºææ§ããªãç¹ãç§»è¡ãèããäžã§æå€§ã®ããã¯ã ãšæããŠããŸãã ãããã£ãç§»è¡ã®ã³ã¹ãã Next.js èªäœã App Router ãžã®ç§»è¡ãæšå¥šããŠããããšãèžãŸãããšãä»ããæ°èŠã«éçºãå§ããã®ã§ããã° App Router ã§éçºãå§ããŠããŸã£ãæ¹ãç¡é£ãªéžæãããããŸããã ç·ããŠãNode.js ãµãŒããŒã®éçšã³ã¹ãã蚱容ã§ããããApp Router ã Server Components/Actions ã«é
åãæããããšãã£ãç¹ã Next.js ã®æ¡çšãæ€èšããäžã§ã®ãã€ã³ãã«ãªãã®ã§ã¯ãªãã§ããããã ãŸãšã CLINICS ã§ã¯ Next.js ãæ¡çšããŠãããSSR ãš CSR ã䜵çšããåœ¢ã§æ¯èŒçã©ã€ãã« SSR ãåãå
¥ããŠããã³ããšã³ãã®éçºãé²ããŠããŸãã åœå㯠SEO é¢ã§ã®ã¡ãªãããéèŠããŠããŸããããå®éã«äœ¿ã£ãŠã¿ããšããã©ãŒãã³ã¹ã®åäžãéçºäœéšã®åäžãªã©æ§ã
ãªã¡ãªãããæããŠããŸãã ã»ãã·ã§ã³ç®¡çã«ã€ããŠã¯èª²é¡ãæ±ããŠããéšåããããŸãããä»åŸã¯ãããã£ãéšåãæ¹åãããäžå±€ SSR ã®æ©æµãåããããããã«ããŠãããããšèããŠããŸãã Next.js ã®ä»ã«ã Remix ãš React Router ã®çµ±å ãçºè¡šããããªã©ãããã« SSR ãæŽ»çšããããç°å¢ãæŽãã€ã€ãããšããç¹ã§ããSSR ã®ä»åŸã¯éåžžã«æ¥œãã¿ãªéšåãå€ããšæããŠããŸãã