ãããã¯ããšã³ãžãã¢ãªã³ã°3Uã®äºå®®ã§ãã LIFULLã«ã¯ããŒã ãã«ãã£ã³ã°ã®å¶åºŠããããå幎ã1幎ã«äžåºŠãåãããŒã ã®ã¡ã³ããŒã§åæ¥ã1æ¥åäœã§äº€æµã®æ©äŒãèšããŠããŸããå
容ãåéšçœ²å
ã§æ±ºããããšãã§ããå€çš®å€æ§ãªäŒç»ãè¡ãããŠããŸããã¯ãªãšã€ã¿ãŒãºããã°ã§ããéå»ã«ã ãšã³ãžãã¢ã®ããã®ããŒã ãã«ãã£ã³ã°ïŒã³ãŒãã§èªã é ã䜿ã£ãŠ è¬ãè§£ã ããã ç¬èªäŒç»ãæµ
èBINGO鬌ãã£ããã§ããŒã ãã«ãã£ã³ã°ããŠã¿ãïŒ ããªã©ã玹ä»ãããŠããŸãã LIFULLã§ã¯æ°åã³ãããŠã€ã«ã¹ã®æµè¡ããã£ããã«ãªã¢ãŒãã¯ãŒã¯äž»äœã®åãæ¹ã«ãªã£ãŠãããããŒã ãã«ãã£ã³ã°ããªã¢ãŒãã§è¡ãããã«ãªããèªåãã¡ã®ããŒã ã§ãããããèŠæ
®ããªãã宿œããŸãããããããä»ã®äŒç€Ÿã®æ¹ããããªã®ã§ã¯ãªãã§ããããïŒ ããã§ããã®èšäºã§ã¯ç§ãã¡ã®ããŒã ã§ã¯ã©ãäŒç»ããŠãã©ã宿œã»ä»åŸã«æŽ»ãããŠããããšèãããããŸãšããŸããããã²äžã€ã®ç¥èŠãšããŠåœ¹ç«ãŠãŠé ãããšå¬ããã§ãð ããŒã ã®çŸç¶ãšç®ç æã
ã®ãŠãããã§ã¯ããã®äžã«ããã°ã«ãŒãïŒäžäœããŒã ïŒãå¥ã
ã®ãããã¯ããæ
åœããŠããŠãæ®æ®µã®æ¥åã§ã®é¢ããã¯å€ããããŸããããã ãçŸåšã¯æ¥µç«¯ã«ããŒã å€ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãèããªãããµããŒããåŸããã¥ããç¶æ
ãªã®ã§ãªããšãããããšèããŠããŸãããç¹åŸŽçãªãšããœãŒããšããŠãããæ°åã«ãçŽå±ã®äžåžãšã¯å®éã«äŒã£ãããšããããã2ã€äžã®äžåžãšã¯ãããè¶ãã§ããäŒè©±ããããšããªãããšãã瀟å
ã§ãã°ã«ãŒãå€ã®ç¥ãåããã»ãšãã©ããªãããšèšãããã³ãã¥ãã±ãŒã·ã§ã³ã®ããæ¹ãå¯åºŠã以åãšå€§ããéãããšã«ã·ã§ãã¯ãåããããšããããŸãã 9æã«ãããŒã ãã«ãã£ã³ã°ã宿œããã®ã§ããããã®æã¯éœåã«ãã£ãŠéãããæéã§èªå·±ç޹ä»ãšç°¡åãªã²ãŒã ãããããšããã§ããŸããã§ããããŸããããããã¡ã³ããŒã®å
¥ãæ¿ããããã£ãŠãã¯ãããŸããŠã®äººãäœäººãããŸããã ãŠãããå
šäœã§ã¯11人åšç±ããŠããŠãåã°ã«ãŒãã¯æ¬¡ã®ãããªãããã¯ããèŠãŠããŸãã åäžãããã¯ããèŠãŠããããŒã ã»ã©å¯ã«é£æºããå¿
èŠã¯ãªãããåã
å°ããªãããã¯ããèŠãŠããã®ã§æ©ã¿äºã®çžè«ãªã©ã¯ã§ããã¯ãã ãšèãã以äžã®ãŽãŒã«ãšæ¹åæ§ã«æ±ºããŸããã ãŽãŒã«: æ®æ®µããã°ã«ãŒãéã§çžè«ïŒå®è£
é¢ãã¹ãã«é¢ãªã©ïŒãã§ãããããªä¿¡é Œé¢ä¿ãäœãããŠãã æ¹åæ§: çžè«ãæèŠã亀ãããªãããäžç·ã«å
±éã®ãŽãŒã«ãç®æãããããªã¢ã¯ãã£ããã£ã宿œãã 宿œæºå çµæãšããŠã1æ¥ã䜿ã£ãŠã次ã®ãããªã¢ã¯ãã£ããã£ã宿œããããšã«ãªããŸããã ã¢ã€ã¹ãã¬ã€ã¯: å
±éç¹æ¢ãã²ãŒã ã¡ã€ã³ã³ã³ãã³ã: ãªã³ã©ã€ã³ãªã¢ã«è±åºã²ãŒã ÃãµããŒãŠã©ãŒãºãAIã«ããäžçæ¯é
ããã®è±åºã ãªã³ã©ã€ã³æèŠªäŒ ãŸãã¢ã€ã¹ãã¬ã€ã¯ãšããŠèªå·±ç޹ä»ãå
Œããã²ãŒã ãè¡ããæ¬¡ã«ããã€ãã®ããŒã ã«åãããŠããäžç·ã«å
±éã®ãŽãŒã«ãç®æããããšã®ã§ãããªã³ã©ã€ã³ãªã¢ã«è±åºã²ãŒã ã宿œããŸããã ãAIã«ããäžçæ¯é
ããã®è±åºã ãéžãã ã®ã¯ãä»ã®ããŒã ããã以åãã£ãŠã¿ãŠããã°ã©ããŒåããªå
容ã§é¢çœãã£ãããšããè©å€ãèããããšãäžçªã®èŠå ã§ãããŸããéå¶ããŒã ã§ä»ã®ã²ãŒã ãã³ã³ãã³ããã§ããã ãæ¢ããŠæ€èšããã®ã§ããããªã³ã©ã€ã³ã§11人ãäžç·ã«ã§ãããã®ãèŠã€ãããªã£ããšããçç±ããããŸãã ãŸããæèŠªäŒã§ã¯ããŒãããªããªãŒãµãŒãã¹ã® nonpi ãå©çšããŸãããä»ãŸã§ã¯ãåã
ãå¥ã
ã«çšæããããæ¹ã ã£ãã®ã§ãããããªãã©ã€ã³ã®æèŠªäŒãšåããåãã¡ãã¥ãŒã®ãã®ãé£ã¹ãã°ããŒã ã®äžäœæã«ãã€ãªããããããªããããšãé£äºã®æºåããªãããŠæ°æ¥œã«æ¥œãããããã«ãããããšããããšãæåŸ
ããŠè©ŠããŠã¿ãŸããã åœæ¥ã®æ§å â ã¢ã€ã¹ãã¬ã€ã¯ ã¢ã€ã¹ãã¬ã€ã¯ã§è¡ã£ããå
±éç¹æ¢ãã²ãŒã ãã¯æ¬¡ã®ãããªãã®ã§ããã ãªã¢ãŒãã¯ãŒã¯ã§ã®çžäºçè§£ãæ·±ããïŒå
±éç¹æ¢ãã²ãŒã ïŒ ããšããèšäºããåŒçšãããŠããã ããŸãã ãå
±éç¹æ¢ãã²ãŒã ããšã¯ããã®åã®éããå¶éæéå
ã«å¯Ÿè©±ãéããŠã°ã«ãŒãã®ä»²éãšå
±éç¹ãèŠã€ããã²ãŒã ã§ãããŸãã³ãã¥ãã±ãŒã·ã§ã³èœåã§éèŠãªå
±éç¹ãæ¢ãåãé€ãããšãã§ããã°ã«ãŒãã¯ãŒã¯ã§ããããŸããã²ãŒã ã®ç®çã¯å
±éç¹ãç¥ãããšã§ã¯ãªããå
容ãäŒãåãããšã§ãäžäœæãæããŠçžæã®ç¹åŸŽãããç¥ãããšãç®çãšããŠããŸããçµæãšããŠããŒã ã®ååïŒã³ã©ãã¬ãŒã·ã§ã³ïŒãçãŸããããããçžäºã«å©ãåããç°å¢ãç¯ãããšãç®æšãšãããããŒã ãã«ãã£ã³ã°ã®ããã®äžã€ã®ææ®µã§ããããŸãã ä»åã¯ãè±åºã²ãŒã ãè¡ãããŒã ã«åããã20åã§ãæå€ãªå
±éç¹ããèŠã€ãããããšãã圢åŒã§å®æœããŸããã ãšããããŒã ã¯ãéäžã§èªæžãå
±éããŠããã ãšæ°ã¥ããããããæ¬ã®å
±éç¹ãæ¢ãããšããå
šå¡ããã¹ããªå°èª¬ã奜ããšããããšãããããããŒã å
ã§ãã¹ããªå°èª¬ã®è©±ãããŠããããã§ãã éå¶åŽã¯ããã£ããèªå·±ç޹ä»ããããªããã²ãŒã ã«ããã»ããæ¥œãããªãïŒããšãã軜ãçç±ã ã£ãã®ã§ãããåŸè¿°ããããã«ãåŸæ¥å®æœããã¢ã³ã±ãŒãã§ã¯äºæ³ä»¥äžã«è©å€ãããé©ããŸããã â¡ã¡ã€ã³ã³ã³ãã³ã: ãªã³ã©ã€ã³ãªã¢ã«è±åºã²ãŒã ã¡ã€ã³ã³ã³ãã³ãã®ãªã³ã©ã€ã³ãªã¢ã«è±åºã²ãŒã ã¯ãããŸãè£ãã€ããŠåé¡ãè§£ããŠãããããªå
容ã§ãåè©å€ã®éããããã«ãšã³ãžãã¢åãã ã£ãããã«æããŸãã ãã ãã©ããŸã§è§£çãã¡ã³ããŒéã§å
±æããŠãããåãããªããŠå°æããããŒã ããã£ãããå®çãããŸã§ã®æéãããŒã ããšã«ãã©ããã倧ããã£ããããŠãéå¶åŽãšããŠã¯ããå°ãããŸããã¡ã·ãªããŒã·ã§ã³ã§ããããããªãããšåçç¹ã¯ãããŸããã â¢ãªã³ã©ã€ã³æèŠªäŒ ãªã³ã©ã€ã³æèŠªäŒã§ã¯ãnonpiã®ããŒããšãé
ãæ¥œãã¿ãªããã ããŒãã²ãŒã ã¢ãªãŒã ã§éã³ãŸãããèªåãã¡ã¯ä»ã®ãªã³ã©ã€ã³æèŠªäŒã§ãããŒãã²ãŒã ã¢ãªãŒããå©çšããŠããŠãç¹ã«ã ã€ã©ã¹ããªãŒ ããæäŸã«ãªãã€ã€ãããŸããããã¯ã€ã©ã¹ãã«ããã€ããŠèšèãèãã"ãããšã"ã§ããããããæãã€ãããããšããããããã¯ç¡çããã§ããããšãäŒè©±ãçãäžããã²ãŒã ã§ãã çµæã»æ¯ãè¿ã æåŸã«ã次åã®å®æœå
容ãããŒã ã®ããæ¹ã«æŽ»ãããããšãç¡ãããåŸæ¥ã¢ã³ã±ãŒããåã£ãŠæ¯ãè¿ããè¡ããŸããã ã¡ã€ã³ã³ã³ãã³ãã§ã¯ã楜ããã£ããšããæèŠã¯å€ãã£ããã®ã®ã次ã®ãããªèª²é¡ãæããããäžç·ã«å
±éã®ãŽãŒã«ãç®æãããšãããšããããå€ããŠããŸã£ãŠããéšåããã£ãããã§ãã è§£ãããšã«éäžããŠç¡èšã«ãªã£ãŠããŸã£ã ã©ããŸã§è§£çãããåãããŠãããåãããªãã£ã äžéšã¡ã³ããŒãè§£ããŸãã£ãŠåŸããã€ããŠããããšãå€ãã£ã ãã®èŸºãã¯éå¶ã«èª²é¡ããã£ãããã«æããŸããæ¬¡åã¯æ¬¡ã®ããã«å¯ŸåŠããããšèããŠããŸãã ãç©æ¥µçã«è©±ãåã£ãŠã»ãããã¿ããã«æåŸ
ããããšãæç¢ºã«æ¡å
ãã ä»ã®è±åºã²ãŒã ã®äžã«ã¯äººã®æ¡å
圹ããããã®ãããAãããšBãããå¥ã
ã®åé¡ãè§£ããªããã°è±åºã§ããªãããšããã³ã³ãã³ãããããããããæ€èšããŠããããã ãŸããéå¶åŽã®äºæ³ããã¯å€ãããå
±éç¹æ¢ãã²ãŒã ãã®è©å€ãè¯ãã£ãããšã§ãããã³ãã¥ãã±ãŒã·ã§ã³ãåããŠè¯ãã£ãããšããæèŠãå€ããããŸããã ãããããªã¢ãŒã以åã®æä»£ãããæã
ãæã£ãŠãã以äžã«ãæ®æ®µã®éè«ããšããåãéçºããŒã å€ã®äŒè©±ã®æ©äŒããæžã£ãŠããŠãç¹ã«æ°èŠã¡ã³ããŒã¯ä»ã®äººã®äººãšãªããç¥ãæ©äŒãæžã£ãŠãããããªããããªãããšæšæž¬ããŠããŸãããããããããªãã²ãŒã ãããªããæ¥œãããäºããç¥ããã®ã¯ä»ã®ããŒã ã§ãéèŠã倧ããã®ãããããŸããã ããŒãããªããªãŒã¯ãã¯ãæºåã®æéãçããç¹ãããã©ã®ã¡ãã¥ãŒéžãã ïŒããšãããããªè©±é¡ã§è©±ãçãŸããç¹ãåã°ããŠããŸãããå®ã¯éå¶ã¡ã³ããŒãå
±éããŠããå
šç€Ÿã®ã€ãã³ãã§ãããŒãããªããªãŒãå©çšãããããã§ãããã ã飲ã¿äŒåãã®ã¡ãã¥ãŒãå€ãã®ã§ãäºæ
ããã£ãŠé£²ããªã人ã¯ã¡ãã¥ãŒéžã³ã«å°ã£ãŠããããã§ããã ãŸãæèŠªäŒã§ã¯ãåæã«1人ããããã¹ããªãã®ã§äŒè©±ã«å°ãããšããåçãè€æ°ããããã£ãšç©æ¥µçã«ãã¬ã€ã¯ã¢ãŠãã»ãã·ã§ã³ãå©çšãã話é¡ã®ããã«ã³ã³ãã³ããçšæããŠâŠãšããããã«ããªãã©ã€ã³ããäºåã®æºåãå¿
èŠãªå°è±¡ããããŸãããŸããä»ã®ç€Ÿå
ã€ãã³ãã§äœ¿ãããŠãã oVice ã Gather ãªã©ã®ããŒã«ãæ€èšããŠãããã®ãããããŸããã ãã®ããŒã ã®åå¥ã®è©±ã§ãããšãç·ããŠãå
±éã®ãŽãŒã«ãç®æããããšããããã¯ããŸãã¯çžäºçè§£ãç®æããããªå
容ãããã£ãããããªãããšæããŸããäŸãã°ãä»ã®ããŒã ã§è¡ãããŠããäžã§ã¯ã ã«ã©ãŒããªã¥ãŒã«ãŒã ããã ã¢ã³ã¬ãŒãããžã¡ã³ãã²ãŒã ããªã©ããããã£ãéžæè¢ã«ãªãããã ãšæã£ãŠããŸãã ãŸãšã ä»ã®ããŒã ã§ãå
±éãããããªç¥èŠããŸãšãããšã次ã®ãããªãã®ãããããªãšæããŸãã ãå
±éç¹æ¢ãã²ãŒã ãã®ããã«ã楜ããèªå·±é瀺ããã²ãŒã ã¯ããªã¢ãŒãæä»£ã®ã³ãã¥ãã±ãŒã·ã§ã³äžè¶³ã®è£å®ã«ããã®ãããããªã ã³ãã¥ãã±ãŒã·ã§ã³ãã¹ã ãŒãºã«è¡ãããããã«æºåã倧äºã ãç¹ã«ãã¡ã·ãªããŒã·ã§ã³æ¹æ³ãéšå±åãã¯ãã£ãšå·¥å€«ã®äœå°ãããããã ããŒãããªããªãŒã¯åã
ã®æºåã®æéãçããã®ãå¬ãã ãŸããä»ã®æã¯ãŠãããå
ã§ãã£ããã§ã®äŒè©±ãå€å°ã¯çãŸããŠããŠãããŒã ãã«ãã£ã³ã°ããã®ãã£ããã«ã¯ãªã£ãŠãããšæããã®ã®ããæ®æ®µããã°ã«ãŒãéã§çžè«ïŒå®è£
é¢ãã¹ãã«é¢ãªã©ïŒãã§ãããããªä¿¡é Œé¢ä¿ãäœãããŠããããšãããŽãŒã«ãèŠè¿ããšãŸã ãŸã ãªç¹ãå€ããšæããŠããŸããããŒã ãã«ãã£ã³ã°ä»¥å€ã§ããæ®æ®µããã©ãã³ãã¥ãã±ãŒã·ã§ã³ãåãã°ããã®ã詊è¡é¯èª€ãå¿
èŠããã§ãã ãããŠãäŒç»æãããªã³ã©ã€ã³ã§ã®äº€æµã®é£ããã¯æããŠããã®ã§ãããäŒç»ã¡ã³ããŒä»¥å€ãããããã£ã±ããªãã©ã€ã³ã®ã»ãã仲è¯ããªããããä»ã¯ã ãªã ããã³ãããåæãããããããŠããŒã ãã«ãã£ã³ã°ã®ãšãã¯éãŸãããããšããæèŠãåºãŸããã ãªã³ã©ã€ã³äž»äœã®ããŒã ã®ããæ¹ã¯é£ããã§ããã詊è¡é¯èª€ããªããããã°ã£ãŠãããŸãããð æåŸã«ãªããŸãããLIFULLã§ã¯äžç·ã«åã仲éãåéããŠãããŸããããèå³ãæã£ãŠããã ããããåéæ±äººãã«ãžã¥ã¢ã«é¢è«ã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ãšã³ãžãã¢ã®å³¶ã§ããAIæŠç¥å®€ã§ããã¯ãšã³ãã·ã¹ãã ã®éçºãããŠããŸãã æ¬èšäºã§ã¯Prometheusãå©çšããŠãç¬èªã®ã¡ããªã¯ã¹ãèšæž¬ããããšã§ç£èŠãå¹çããè¡ããããšã玹ä»ããŸãã èæ¯ ããŒã ã§äœã£ãŠããã㮠瀟å
å
±éåºç€ã®æŽ»çš 广çãªç£èŠã§åŸããããã® åé¡ã®äºå
ã«æ°ä»ããããã«ãªã åé¡ã®åå ç¹å®ã«ã€ãªãã æç³»åã§ã®åŸåãææ¡ã§ãã Prometheusãšã¯ ææ³ ã¡ããªã¯ã¹ã®å
¬é custom metricsã远å ããã Prometheusã§ç£èŠããã custom metricsã§èšæž¬ãããšå¬ãããã® å€éšIOã«é¢ã㊠å
éšç¶æ
ã«é¢ã㊠å€éšèµ·å ã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒã®æ° æå¹ããŒã¿ã®ãã¡ãã¢ãã«ãå€ãè¿ããŠããå²å æ©æ¢°åŠç¿ã¢ãã«ã®ã¹ã³ã¢(histogramãå©çš) ãã®ã»ã çµããã« æåŸã«å®£äŒ èæ¯ ããŒã ã§äœã£ãŠãããã® LIFULLã®AIããŒã ã§ã¯ãããã€ãã®æ©æ¢°åŠç¿ãããã¯ããæ¬çªéçšããŠããŸãã 2022幎2æã«AIããŒã ãºããᎮᎱáµáެããªãªãŒã¹ããŸããïŒ(SPãµã€ãã®ã¿ã§ã) https://www.homes.co.jp/ai-homeskun/ ãŸãã3Déåãã2021幎ã«ãªãªãŒã¹ããŠããŸãã https://www.homes.co.jp/3dmadori/ ãã®ä»ã«ã¯ãLIFULL HOME'Sã®ã¬ã³ã¡ã³ãæ©èœã§ãæ©æ¢°åŠç¿ã掻çšããŠããŸãã https://www.homes.co.jp/chintai/tokyo/list/ ãã以å€ã®éçºãããžã§ã¯ããããã€ãé²è¡äžã§ãïŒ ç€Ÿå
å
±éåºç€ã®æŽ»çš ãããã®ãããã¯ãã¯ç€Ÿå
å
±éåºç€ããŒã ãéçºããKEELãšããã In-house PaaSãšããŠåçš®æ©èœãæäŸããKubernetesããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã§åããŠããŸãã www.lifull.blog KEELããŒã ãéçºããŠããã³ãŒããžã§ãã¬ãŒã¿ïŒkeelctlïŒã«ãã£ãŠãProduction Readyãªã¢ã©ãŒããèªåçã«èšå®ãããŸãã äŸãã°äžèšãç£èŠããããããå€ãæ€ç¥ãããšéç¥ãããŸãã ãµã¯ã»ã¹ã¬ãŒãäœäž ã¬ã¹ãã³ã¹ã¿ã€ã CPUã»ã¡ã¢ãªäœ¿çšé www.lifull.blog success rateãresponse timeãªã©ã®åºæ¬çãªææšã¯ãããã·ã¥ããŒãã§é²èЧã§ããŸãããŸãããããã®éç¥ãçæããããããåºæ¬çãªææšã®æªåã«æ°ä»ããŸãã ãããŠKEELããŒã ãéçšããPrometheus,AlertManager,Grafanaãšãã£ããœãããŠã§ã¢ããã¢ã©ãŒãã®åãåããåéããã¡ããªã¯ã¹ã確èªã§ããŸãã www.lifull.blog ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ãã®ä»çµã¿ã掻çšããªããã DevOpsã®èãæ¹ã«åŸããèªåãã¡ã§ã¢ããªã±ãŒã·ã§ã³åºæã®ãšã©ãŒå¯Ÿå¿ãç£èŠãè¡ãããšãåºæ¥ãŸãã éçºãããããã¯ããå¢ããŠããã«ã€ããéçšã³ã¹ããå¢ããŠãããããèªååã§ãããšããã¯èªååãããã¢ãããŒã·ã§ã³ããããŸãã 广çãªç£èŠã§åŸããããã® åé¡ã®äºå
ã«æ°ä»ããããã«ãªã ç£èŠã®æ©æµãšããŠãããäžçªå€§ããã§ãã æ¬çªãµãŒããçªç¶èœã¡ãŠãããã«ããå²ã蟌ã¿å¯Ÿå¿ãæ®æ¥ãäœåãªãããããšããã®ã¯ãéçºè
äœéšãšããŠææªã§ãããã ãã°ã®æ©æçºèŠã«ãã察å¿ã³ã¹ããåçã«äžããã®ãšåæ§ãé害察å¿ãæ©æè§£æ±ºã»é¡åšååã®è§£æ±ºãæãå¹ççã§ãã é©åã«ç£èŠãããããšã§ããµãŒãã¹å©çšè
ãžã®äŸ¡å€æäŸãç¶ç¶ã§ããã ãã§ãªããããªããååã®æéãå®ãäºã«ãã€ãªãããŸãã åé¡ã®åå ç¹å®ã«ã€ãªãã custom metricsãäœæããããšã®æ©æµã¯ãã¡ãã«ãªããŸãã åé¡ãçºçãããšãã«ãæãããããªããšèª¿æ»ããå§ããªããšãããŸããã custom metricsãæããããšãªãã°ãåé¡ãè¿
éã«åãåããããšãã§ããŸãã ä»®ã«åé¡ããªãã£ããšããŠãããåé¡ã¯ããã§ã¯ãªãããšãã貎éãªæ
å ±ãåŸãããŸãã çµæçã«ååãæ©ããªããåé¡ãè¿
éã«è§£æ±ºã§ããã§ãããã æç³»åã§ã®åŸåãææ¡ã§ãã ãã¡ãã¯ã¡ããªã¯ã¹å€ãèç©ããããšã®æ©æµã«ãªããŸãã éç¥ãèšå®ããªãã£ããšããŠããèç©ããããŒã¿ã調ã¹ãããšã§ãã·ã¹ãã ã®é·æçãªåŸåãç¥ãããšãã§ããŸãã ãªãªãŒã¹ããŠããããµãŒãã®ã¡ã¢ãªã¯å¢å ããŠããªãã äŸåãµãŒãã¹ã®ã¿ã€ã ã¢ãŠãã¯äžæçãªã®ãåšæçãªã®ã catchããŠæ¡ãã€ã¶ããŠããäŸå€ã®æ°ã¯èŠå®å
ã«åãŸã£ãŠããã æ©æ¢°åŠç¿ã¹ã³ã¢ã®åŸåã«å€ããã¯ãªãã ããŸããŸãªæ
å ±ãç¥ãããšã§ããµãŒãã¹éçºã»éçšã«åœ¹ç«ãŠãããšãã§ããŸãã Prometheusãšã¯ äžèšã§ãããšã·ã¹ãã ç¶æ
ã®åéã»å¯èŠåãšç£èŠãã§ããOSSã§ãã prometheus.io å
ã¯CNCF(Cloud Native Computing Foundation)ãããžã§ã¯ããšããŠå§ãŸããŸããã ä»ã§ã¯AWSãããŒãžããµãŒãã¹ãåºãŠãããç£èŠæšæºãšèšã£ãŠè¯ãã§ãããã aws.amazon.com ææ³ Zen of Prometheus ãåãããããã®ã§ç޹ä»ããŸãã(éå
¬åŒãµã€ãã§ãã) https://the-zen-of-prometheus.netlify.app/ ïŒè¡ã§ãŸãšãããšã ã¡ããªã¯ã¹ååŸã¯å®äŸ¡ã«è¡ããã®ã§ãã©ãã©ãååŸãããã ãã°ãåã£ãããå¯èŠåããããããã®ã§ããã°ããã®ã¡ããªã¯ã¹ãèšæž¬ããŠã¢ã©ãŒããããããã«äœã£ãŠãããã ãã£ãããªåé¡ãžãšæ·±å»åããåã«ãããæ°ä»ããŠæ©æå¯ŸåŠãããã ãšãã£ããšããã§ãããã ã¡ããªã¯ã¹ã®å
¬é Prometheuså
¬åŒã«ãŠãããã€ãã®ããã°ã©ãã³ã°èšèªçšã®ã©ã€ãã©ãªããµããŒããããŠããŸãã ãã¡ããå©çšããã ãã§ãç°¡åã«å®è£
ã§ããŸãã github.com Pythonã®FastAPIãã¬ãŒã ã¯ãŒã¯ã§ããã°ãäŸãã°ä»¥äžã®ããã«èšèŒããã ãã§ããã©ã«ãã®ã¡ããªã¯ã¹ãå
¬éã§ããŸãã import prometheus_client ... @app.get('/my_prometheus_metrics') def prometheus_metrics(): return fastapi.responses.PlainTextResponse( prometheus_client.generate_latest() ) ãã®äžã§èšå®ãããã¹ /my_prometheus_metrics ã«ã¢ã¯ã»ã¹ãããšãèšæž¬ããŠããã¡ããªã¯ã¹ã次ã®ãããªãã¬ãŒã³ããã¹ãã§ååŸã§ããŸãã # HELP process_start_time_seconds Start time of the process since unix epoch in seconds. # TYPE process_start_time_seconds gauge process_start_time_seconds 1.64446715949e+09 # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. # TYPE process_cpu_seconds_total counter process_cpu_seconds_total 260.51 custom metricsãããã°ã©ã åŽã§è¿œå ãããšããã®ãã¬ãŒã³ããã¹ãã«è¡ã远å ãããŠããããšã«ãªããŸãã Prometheusãèšå®ãããšã³ããã€ã³ããããŒãªã³ã°ããã¡ããªã¯ã¹ãèªã¿èŸŒã¿ãŸãããããã£ãŠè¿œå ãããcustom metricsã飿ºããããšãã§ããŸãã custom metricsã远å ããã å©ç𿹿³ãPrometheusã®ã©ã€ãã©ãªåŽã«æžããŠããã®ã§ãéåžžã«èŠªåã§ãã ããšãã°äžèšã®ããã«èšèŒãããšã¿ã€ã ã¢ãŠããã©ããããèµ·ããŠãããã®ã¡ããªã¯ã¹ã远å ã§ããŸãã â»ç°ãªãã¢ããªã±ãŒã·ã§ã³éã§ã®ã¡ããªã¯ã¹åãæç¢ºã«åºå¥ããããã«ããã¬ãã£ãã¯ã¹ãä»ããŠããŸãã PREFIX = 'your_awesome_app' TIMEOUT_REDIS_COUNTER = prometheus_client.Counter(f'{PREFIX}_timeout_redis_counter', 'redis timeout counts') try: # some redis execution ... except redis.exceptions.TimeoutError: my_prometheus.TIMEOUT_REDIS_COUNTER.inc() Prometheusã§ç£èŠããã Prometheusã§ã¯PromQLãšããèšæ³ã§æ¡ä»¶åŒã衚çŸã§ããŸãã äŸãã°äžèšã®ããã«å²åã衚çŸã§ããŸããå
¥åããæ©æ¢°åŠç¿ã¢ãã«ã®ã€ã¬ã®ã¥ã©ãŒå€ã®å²åããã¢ãã«ã«æž¡ããªãé€å€ããŒã¿ã®æ°ãé€å€ããŠèšç®ããŠããŸãã ããã«ãããæå¹ããŒã¿ã®ãã¡ãã¢ãã«ãå€ãè¿ããŠããå²åããç£èŠã§ããŸãã (sum(increase(your_awesome_app_zero_score{app="your-awesome-app"}[10m])) - sum(increase(your_awesome_app_exclude{app="your-awesome-app"}[10m]))) / (sum(increase(your_awesome_app_input_records{app="your-awesome-app"}[10m])) - sum(increase(your_awesome_app_exclude{app="your-awesome-app"}[10m]))) < 0.0025 ãã®PromQLã«ããæ€ç¥ãPrometheusã®Alertmanagerã«æž¡ãããäºåã«èšå®ããéç¥èšå®ã§Slackã«éç¥ãããŸãã custom metricsã§èšæž¬ãããšå¬ããã㮠以äžã®ããã«å€éšIOããã¢ããªã±ãŒã·ã§ã³ã®å
éšç¶æ
ãèšæž¬ããŠããŸãã å€éšIOã«é¢ããŠ è€æ°ã®å€éšIOã«æ¥ç¶ããŠãã¬ã¹ãã³ã¹äœäžãèµ·ãã£ãŠããå Žåã«ãã©ãã§åé¡ãèµ·ããŠããããç¹å®ã§ããŠäŸ¿å©ã§ãã response time(histogramãå©çš)ãnetwork timeoutæ°ãèšæž¬ããŠããŸãã 忣ãã¬ãŒã·ã³ã°ã«é¢ããŠã¯JaegerãåŸæãªã®ã§ããã¡ãã§å¯èŠåããŠãè¯ãã§ãã Prometheusã§ååŸããããšã§ãPromQLã§ä»ã¡ããªã¯ã¹ãšåãããã«æ±ããããã¢ã©ãŒãéç¥ãè¡ããããšã¡ãªãããããã®ã§ãã¡ãã§èšæž¬ããŠããŸãã å
éšç¶æ
ã«é¢ã㊠泚èŠããŠããããå€ãèšæž¬ããŠãããšãæç³»åã§è¿œããã®ã§äŸ¿å©ã§ãã å€éšèµ·å ã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒã®æ° åçŽãªsuccess rateã ãšå€éšèµ·å ãšã©ãŒãšå
éšèµ·å ãšã©ãŒã亀ãããããåé¢ããŠç£èŠããŠããŸãã ä»ã®æãå®å®ããŠå€ãè¿ããŠããŸãããã®ãããªå®å®ããæ°å€ã¯æå確èªã ãšèŠãªããªãåŸåããããããèªåç£èŠã®æ©æµã倧ããã§ãã æå¹ããŒã¿ã®ãã¡ãã¢ãã«ãå€ãè¿ããŠããå²å åçŽãªsuccess rateã ãšç°åžžå€ã¯0ç¹ã¹ã³ã¢ãšããŠ200 OKã§è¿ãããããã®ã¡ããªã¯ã¹ãç£èŠããŠããŸãã ç£èŠããããšã§ã¢ãã«ãå
¥åããŒã¿ã®ç°åžžã«æ°ä»ãããšãã§ããŸãã ãã¡ããåæ§ã«æ®æ®µçºçããªããããèªåç£èŠã«ä»»ããŠããŸãã æ©æ¢°åŠç¿ã¢ãã«ã®ã¹ã³ã¢(histogramãå©çš) Grafanaã§PromQLãèšè¿°ããPrometheusã®ã¡ããªã¯ã¹ãå¯èŠåã§ããŸãã æ©æ¢°åŠç¿ã¹ã³ã¢ã®æšç§» ãã¡ãã¯åé¡ãçºçããå Žåã®èª¿æ»çšã«èšæž¬ããŠããŸãã â»ã¹ã³ã¢èªäœã¯ãçžå¯Ÿçãªé åºãæ£ãããã°ããã§ããã絶察çãªæ°å€ã§æ£åžžã»ç°åžžã枬ãããšãã§ããªããšå€æããŠããŸãã æ©æ¢°åŠç¿ã¹ã³ã¢ã®æ¯çã¯ã现ããªãã¬ã¯ãããŸããé·æã§èŠãŠå€åãªãããšã確èªã§ããŸãã â»å¹Žæ«å¹Žå§ã«äžåç£äŒç€ŸããäŒã¿ã®ã¿ã€ãã³ã°ã®ã¿åŸ®æžããŠãããããã¯æ°é®®ãªç©ä»¶åºåã®äŸçµŠãéçµ¶ããŠãããããšèããããŸãã ã¢ãã«ã®ç¶ç¶çãªå質æ
ä¿ã¯å¥ã®æ¹æ³ã§è¡ãå¿
èŠããããABãã¹ãã«ãããµã€ãã®CTRãCVRãç®èŠããŠããŸãã â»ããã¯Prometheusã§ç£èŠããŠããŸãããããµã€ãããã©ãŒãã³ã¹ã®ããŒã¿ã¯å¥ç³»çµ±ã§éèšãããŠããããã§ãã Google Analyticsã§èšæž¬ããããã®ããData Studioã®ããã·ã¥ããŒãã«è¡šç€ºããŠããŸãã ãã®ã»ã ããããã¡ããªã¯ã¹ãèšæž¬ãããšè¯ããšãããã®ãããã°ããã²ãã³ã¡ãªã©ã§æããŠãã ããïŒ çµããã« Prometheusã®custom metricsãèšæž¬ããŠéç¥ãããšãç£èŠãå¹çããè¡ããããšã玹ä»ããŸããã åé¡ããã£ãããªãã®ã«ãªãåã«ãæ©ãã®å¯ŸåŠã§è¯ããµãŒãã¹ãæäŸããŠãããŸãããïŒ æåŸã«å®£äŒ ãã®ããã«ããã¯ãšã³ããµãŒãã¹ã®éçºããå
±éåºç€éçºãŸã§ãããŸããŸãªè·çš®ãåéããŠããŸãïŒãããããã°ãã²ãã¡ãã®ããŒãžãã芧ãã ããïŒ hrmos.co ã«ãžã¥ã¢ã«é¢è«ããåŸ
ã¡ããŠãããŸãïŒãã²ãã²ã©ããïŒ hrmos.co
ãããã¯ããšã³ãžãã¢ãªã³ã°éšã®æµ·è柀ã§ãã LIFULLã§ã¯2020幎3æé ããèªå®
ããã®ãªã¢ãŒãã¯ãŒã¯ãäž»äœã®åãæ¹ãšãªã£ãŠããŸãããåŒç€Ÿãéå¶ããŠããã³ãã¥ãã㣠ãLivingAnywhere Commonsã ã®å
šåœã®æ ç¹ã§ã®å°±æ¥ãå¯èœã§ãã ããã¯åŸæ¥å¡èªããåãæ¹ãåãå Žæãéžæã§ãèªåãããåãæ¹ãå®çŸããããšããäžäººã²ãšãã®Well-Beingãããã©ãŒãã³ã¹ã®åäžã»ã€ãããŒã·ã§ã³ã®çš®ã®çºèŠã«ç¹ãããšèããããŠããããã§ãã èªå®
ã ãã§ãªãæ
å
ã®éäŒæœèšã§ä»äºããããããããã¯ãŒã±ãŒã·ã§ã³ãè¡ããŸãã lifull.com ä»å㯠ãLivingAnywhere Commonsã ã§äºæ³äžæ¥ã®ã¯ãŒã±ãŒã·ã§ã³ãããŠããŸããã æ§ããã«èšã£ãŠæé«ã ã£ãã®ã§ç޹ä»ãããŠãã ããã ãLivingAnywhere Commonsã ãšã¯ LIFULLã¯ãããããLIFEããFULLã«ãããã³ãŒãã¬ãŒãã¡ãã»ãŒãžãšããŠæ²ããããŸããŸãªç€ŸäŒèª²é¡ã«åãçµãã§ããŸãã ãã®äžã§ããèªåããããããã£ãšèªç±ã«ããããŒãã«ãã©ã€ãã©ã€ã³ã®éçããè§£æŸãããæ¬åœã®æå³ã§ã®èªç±ãªçãæ¹ãç®æãåãçµã¿ããLivingAnywhereãã§ãã ãããã£ãçãæ¹ãå®è·µããã³ãã¥ããã£ãšããŠ2019幎㫠ãLivingAnywhere Commonsã ã®éå¶ãéå§ãããŸããã ã³ãã¥ããã£ã«ã¯ã³ã¯ãŒãã³ã°ã¹ããŒã¹ã»ã¬ãžãã³ã¹ã¹ããŒã¹ãå®åãããŠãããå
šåœã«æ ç¹ãããããèªåã®å¥œããªå Žæã§ä»äºã»ãããæ®ãããã§ããŸããïŒ2022幎1æçŸåš29æ ç¹ã»ç¶ã
å¢ããŠãŸãïŒïŒ LIFULLã®ç€Ÿå¡ã¯ãããã®æ ç¹ãæ Œå®ã»ãããã¯ç¡æã§å©çšã§ããäžã«ã¯æ¯æå©çšãããŠããæ¹ãããŸãã ã¯ãŒã±ãŒã·ã§ã³ã¬ããŒã ä»åã¯å±±æ¢šçã«ãã ãå
«ã¶å²³åæã æ ç¹ãå©çšããŸããã æå¯ã¯å°æ·µæ²¢é§
ãJRæ°å®¿é§
ããç¹æ¥ã§2æéã§ãã ããŒã ãºãããäžç·ã«ã¯ãŒã±ãŒã·ã§ã³ããŠããŸãã åšèŸºã®ããã é§
ããè»ã§20åã»ã©ã®å Žæã«æ ç¹ããããŸãã å
«ã¶å²³åææ ç¹ åšèŸº å
«ã¶å²³åææ ç¹ ãšã³ãã©ã³ã¹ ããšããšã¯æ°éäŒæ¥ã®ç ä¿®æœèšã ã£ãããã§ãäŒè°å®€ãå€§æµŽå Žãªã©èšåã¯ãšãŠãå
å®ããŠããŸããã å±±ã®äžïŒæšé«1000mïŒã«ããããéæŸæããããã§ããå¯å£«å±±ãããããªèŠãããŸãð» å人çã«å€æ®ãã®ãªã¬ã³ãžãšå±±ã
ã®éã®ã³ã³ãã©ã¹ããæé«ã§ããã 倿¹ã®å¯å£«å±± æŸã飌ãã«ãããŠããã€ã®ãããŸãã ã€ã®ã®ããŒãã¡ãã ã¯ãŒãã³ã° æ ç¹ã¯Wi-Fiããã£ããé£ãã§ããã®ã§ã©ãã§ãèªç±ã«ãä»äºãã§ããŸãã ã³ã¯ãŒãã³ã°ã¹ããŒã¹ãå
å®ããŠãããåã
äœæ¥ç°å¢ãæŽããŠãããŸããã äºé¢ãã£ã¹ãã¬ã€ã®äœæ¥ç°å¢ åå²ããŒããŒãå¢ã®äœæ¥ç°å¢ ããŒã ãºããã®äœæ¥ç°å¢ ãã±ãŒã·ã§ã³ æ¥ååŸã¯ãã±ãŒã·ã§ã³ã楜ãããŸãã åŒç€Ÿã¯ãã¬ãã¯ã¹ã¿ã€ã ãå°å
¥ããŠãããããæ©ãã«éå€ããŠãè²·ãç©ã«ãã£ãããµãŠããæ¥œããã¡ã³ããŒãããŸããã ãµãŠããŒããŒã ãºãã æ ç¹ã«ã¯ãµãŠãã«ãŒããããã»ã«ãããŠãªã¥ãå¯èœã§ãã ãšãšã®ãç°å¢ãå®ç§ã§ã氎颚åã¯ãªããš è¿ãã®å·ã«é£ã³èŸŒãã¹ã¿ã€ã« ã§ããã¯ã€ã«ããïŒ æŽããŠããæ¥ã¯æºå€©ã®æç©ºãçºããªããå®å
šåªåããŸãããã å§åçæç©º ãµãŠãåŸã«ããŒããã¥ãŒãã§ããŸãã倩æïŒ 11æäžæ¬ã®å±±ã§ããŒããã¥ãŒã¯å¯ãã£ã ææ³ ããããããªããåãã æ®æ®µãšéãç°å¢ã«ãããããããšæããããæå€ãšéäžããŠæ¥åã«åãçµããŸããã ãã€ãã®ãªã¢ãŒãã¯ãŒã¯ã ãš1æ¥å€ã«åºãªãããšãããããã®ã§ããã æ¥ååã®æ©æã«ãæ£æ©ããããå°å
ã®ãåºã®ããããã±ãŒããé£ã¹ããQOLãçäžããããŸããð£ã æé«ã®æ å宿ã§å©çšããã ä»åã¯ãLiving Anywhere Commons è¡ã£ãŠã¿ããïŒããšãã奜å¥å¿ããããŸããŸãªéšçœ²ã®æå¿ãéãŸã£ãŠå©çšããã®ã§ãããããŒã ãã«ãã£ã³ã°ãéçºå宿ã«ãæé©ãªç°å¢ã ãšæããŸããã åãã®ã«ã¯ãŸã£ããäžèªç±ããªãç°å¢ã§ãããæ®æ®µãšã¯éãã¢ã¯ãã£ããã£ã楜ãããã®ã§æ¬¡åã¯éšçœ²åäœã§å©çšããŠã¿ããã§ãã èªåããããããã£ãšèªç±ã« LIFULLã§ã¯ãšãã«åã仲éãåéããŠããŸãã ãèªåããããããã£ãšèªç±ã«ããå®çŸãããæ¹ãã«ãžã¥ã¢ã«é¢è«ãšããåœ¢ã§æ°è»œã«ã話ããããŠããã ããšããããšãå¯èœã§ãã®ã§ããèå³ãããæ¹ã¯ä»¥äžã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ãšã³ãžãã¢ã®æŸå°Ÿã§ããLIFULL HOME'Sã®å£²è²·é åãæ¯ãããšã³ãžãã¢ããŒã ã®ãããžã¡ã³ããæ
åœããŠããŸãã ç§ã®éšçœ²ãå§ããLIFULLã§ã¯è€æ°ã®éšéã§ãšã³ãžãã¢æ¡çšãè¡ã£ãŠããŸãã人äºéšéã®æ¡çšæ
åœãšçŸå Žã§é£æºããæžé¡å¯©æ»ãšè€æ°åã®é¢æ¥ã«ããéžèãè¡ããŸãã ä»åã¯ãšã³ãžãã¢æ¡çšãé²ããäžã§æãã課é¡ãšãã®è§£æ±ºãžã®åãçµã¿ã«ã€ããŠç޹ä»ããããšæããŸãã æ¡çšã«ãããŠæ±ããŠããã¢ã€ã¢ã€ ããã€ãã®æžé¡å¯©æ»ãšé¢æ¥ãçµããŠãæ¥ã
䌌ããããªäœæ¥ãç¹°ãè¿ããªããããã€ãã®ã¢ã€ã¢ã€ãæ±ããŠããŸããã ã¢ã€1: æžé¡å¯©æ»ã«æéãããã æçããããŸãã¯ææ°ãããè¯ãåè£è
æ§ãèŠã€ãåºãããã«ãã§ããã ãå€ãã®æžé¡ã«ç®ãéãããã«ããŠããŸãããã ãã©ã®æ¹ãçå£ã«çµæŽãæžããŠãã ãã£ãŠããããã¹ãŠã«ç®ãéãã«ã¯ãªããªãæéãããããŸãã æ¡çšä»¥å€ã«ãããã¹ãä»äºã¯å€ããããŸããæžé¡å¯©æ»ã«æéããããããããšã§ãã»ãã®æ¥åã®è³ªãäžããŠããŸããªã¹ã¯ããããŸãã ã¢ã€2: 颿¥ã®æéãæå¹ã«äœ¿ããªã å®éã«åè£è
æ§ãšå¯Ÿé¢ãã颿¥ã¯ãæéãç¡é§ã«ããªãããæ
éã«è¡ããŸãããããçµæãåºãããã«ã¯èãåºãããæ
å ±ãå€ãããããã¹ãŠã質åããŠãããšããã«çµäºæå»ã«ãªããŸãã äºåã«è·åçµæŽæžå
ã®æãäžãããç®æã«ã€ããŠã¯ç¢ºèªãã€ã€ããèªåã®äžã§èŠç¹ãå®ãŸã£ãŠããªãç¶æ
ã§ããã ã¢ã€3: èªåã§è©äŸ¡ããçµæãè
¹ã«èœã¡ãªã å
šåã§æžé¡ãã§ãã¯ãšé¢æ¥ãããçµæãšããŠãæå
ã«ã¯å€ãã®å€æææããããŸããã§ããããã®ç¹ã¯ç©è¶³ããªããã©ããã®éšåããããè¯ãããOKã«ãããããªãâŠããšè©äŸ¡ãã€ã³ããåºæºãå®ãŸã£ãŠããããçµè«ãåºãã®ã«æéãããããŸãããããŠã»ãã®è©äŸ¡è
ãšããåããããšæèŠãå²ããåè°ã§ã®çµæåºãã«ãŸãæéãèŠããŸãã æçµçã«ã¯åè°ã§æ£ããçµè«ãåºããŠãããšæã£ãŠããŸãããå人ã§ã®è©äŸ¡ã«ã¯äžåããããçŽåŸã«è³ããŸã§ã®ããã»ã¹ã«æéãããããããŠããç¶æ³ã§ããã åãçµãã ããš äœãããå°ãããŸããããæ¹æ³ã暡玢ã§ããªããâŠãšäººäºãäžåžã«çžè«ãããããšèããŠãããšãã«ã äžèšãªã³ã¯ã®èšäºãçºèŠããŸããã çŸå Žã¡ã³ããŒã®ç¥èã人æèŠä»¶å®çŸ©ã«æŽ»ããææ³ãJob Analysisãã®çŽ¹ä» åèæç®ãããšã«éžèããã»ã¹ã®èšèšã«ã€ããŠèšèŒãããŠããŸãããç§ã®éšçœ²ã®æ¡çšã§ã¯ä»¥äžã®2ç¹ããŸã äžååã§ããå°è±¡ãæã¡ãŸããã æ¡çšããã人ã®äººæèŠä»¶ãå®çŸ©ãã 人æèŠä»¶ã®ãã¡ãèŠæ¥µãããèœåãç¹å®ãã ããã§ãããã°ã®å
容ãåèã«æ±ãã人æã®åãæããã«ããæ±äººããŒãžã®å¿åè³æ Œãåèšå®ããããã®åãçµã¿ãé²ããŸããã æ¥åäžçºçããã¿ã¹ã¯ã®æŽãåºã æ¡çšããã人æãšããžã·ã§ã³ã䌌ãã¡ã³ããŒã«ååããŠããããæ¥åå
ã§ã©ã®ãããªã¿ã¹ã¯ãè¡ã£ãŠããããæŽãåºããŸããããšã³ãžãã¢ã«ãšã£ãŠã¯èšèšãããã°ã©ãã³ã°ããã¹ããªã©ãäž»ããæ¥åã§ãããã»ãã®è·çš®ãšã®ãããšããã¡ã³ããŒè²æãªã©ãã¿ã¹ã¯ã¯å€å²ã«æž¡ããŸãã ç§ã¯æ¯èŒççŸå Žã«è¿ãããžã·ã§ã³ãªã®ã§ããçšåºŠã¯ææ¡ããŠããŸãããããããããŠçºããŠã¿ããšæ°ä»ãããããŸãã å®è£
ãããã¬ãã¥ãŒã®æ¯éã倧ããã ä»ã®ã¡ã³ããŒã«äœããæãããååãããããã¿ã¹ã¯ãå€ã ãããã¯ãŒã¯ãDBã®èšå®ãã¹ã¯ã©ããã§è¡ãæ©äŒã¯å°ãªã æ±ããããŠããèœåïŒã³ã³ããã³ã·ãŒïŒã®æŽãåºã ã¿ã¹ã¯ãšã¯å¥ã«ãã©ã®ãããªã¹ãã«/çµéšãæ±ããŠããããæŽãåºããŸãã èšèªãOSSãå°éåéãªã©ã®ãªãã¡ã¬ã³ã¹ãšããŠã Qiita ã®äººæ°ã®ã¿ã°ãæœåºããŠäœ¿çšããŸãããããããããã€ãºãé€å»ããæ®ã£ãé
ç®ããçŸå Žã§å¿
èŠã«ãªãåŸãé
ç®ããŸãšããŠãããŸããã åŒç€Ÿã«ã¯æ°æ§å«ããŠå€ãã®ã·ã¹ãã ãååšããããé¢ããæè¡ã¯å€ããé
ç®å
šäœã§èŠããšãªããªãã®æ°ã«ãªããŸããéèŠåºŠã®äœããã®ã¯ãã®ããšã®å·¥çšã§åãèœãšããããããçŸæ®µéã§ã¯ãã¹ãŠå«ããŠãããŸãã ã¹ã³ã¢ãªã³ã°ãšæç« å ããã°ã®å
容ãåèã«ãã¿ã¹ã¯ãšã³ã³ããã³ã·ãŒã®ããããã«ã¹ã³ã¢ãã€ããŠãããŸããé »åºŠãéèŠåºŠãªã©ã®èгç¹ã§ç¹æ°ãä»ããããããã«åºåãã§ããŸããã¹ã³ã¢ãªã³ã°ã¯ã»ãã®ãããŒãžã£ãŒãšçžè«ããªãããã©ã³ãã³ã°ããŒã«ãŒã®ãããªèŠé ã§é²ããŸããã ã¿ã¹ã¯ãšã³ã³ããã³ã·ãŒã®äžäœé
ç®ãçªãåãããŠãçµæãããšã«åŸ¹åºçã«è°è«ããŸãã ãä»ããã¡ã³ããŒã®ç«ã¡åããèæ
®ãããšãPJ管ççµéšã¯å¿
é ã ãã ãèšèªã®å
·äœçãªç¥èãããèšèšåãåªå
ãããã§ããã ãããã¯é¢æ¥ã§è³ªåããŠããã©ãå
¥ç€ŸããŠããèŠããã§ãåé¡ãªããã ãšãããããªãããšããçµãŠã人æèŠä»¶ãæ°ããå®çŸ©ãããŸãããçµæãšããŠãå¿åè³æ Œã«èšèŒããŠããã¹ãã«ãäžèšã®ããã«å€æŽããŠããŸãã å¿åè³æ Œã®å€æŽ 人æèŠä»¶ãèŠçŽããŠæ¹åããããš å®éã«çŸå Žã§å¿
èŠãšããŠããã¿ã¹ã¯ãæ±ããŠããèœåãèŠã€ãçŽãããšã§ã以åãšã¯éã£ã人æèŠä»¶ãã§ããŸãããæŽãåºããã ãã§ã¯ãªãããããã®åªå
床ã確èªãããããæ¡çšæŽ»åã®äžã§åè£è
æ§ãè©äŸ¡ããé åºã芳ç¹ãéã£ãŠããŸãã èŠçŽãåã®ã¢ã€ã¢ã€ãšæ¯èŒããŠãæ¹åããç¹ã«ã€ããŠãŸãšããŸãã æžé¡éžèã§ãã§ãã¯ã§ãã人æ°ãå¢ãã èŠä»¶ããšã®åªå
åºŠãæ±ºãŸã£ãããšã§ãæžé¡ã®äžã§ç¢ºèªããç®æãæç¢ºã«ãªãããã§ãã¯ã®æèŠæéãåæžã§ããŸãããåªå
床ã®é«ãèŠä»¶ãæºãããŠããªãå Žåã¯æ©ãã«åè£ããå€ãããããªããšãªãé
åçã«èŠããŠããŸãã¹ãã«ã«ç®ç§»ãããªããªã£ãããšã§ãæžé¡éžèã®éãšè³ªã®äž¡æ¹ãæ¹åãããšæããŠããŸãã 颿¥ãæéå
ã«å®äºãããããªã åªå
床ã®é«ãèŠä»¶ããæ©ãã«è³ªåããŠããããšã§ã颿¥å
ã§éäžè¶³ãªããã¢ãªã³ã°ãçµããããããšãå€ããªããŸãããèŠä»¶ããšã®éèŠåºŠãé ã«å
¥ã£ãŠãããããã§ã質åããšã«ãããæéã®å€æããããããªããŸãããŸãæã
ããã®è³ªåãæçã«çµããããããšã§ãåè£è
æ§ããã®è³ªåãå€ãåãä»ããããŸãã è©äŸ¡æã®ããåãããã¹ã ãŒãºã«ãªã ã¿ãŒã²ãããšãªã人æã®åãææžåããŠèªèãåããããããè€æ°ã®è©äŸ¡è
ã§è°è«ããŠçµè«ãåºãå Žåã«ãæèŠãå²ãã¥ãããªããŸããããè©äŸ¡é
ç®Aã¯æå¥ãªãã§ãããBã¯æºãããŠããªãã§ãããããšããé
ç®ããšã®è©äŸ¡ã«é¢ããäŒè©±ããããããªããååŠã®çç±ä»ãã以åããæç¢ºã«ãªã£ãŠããŸãã ãŸãšã æ¡çšæŽ»åã¯éåžžã«éèŠãªä»äºã§ãããæ¬æ¥åã§ãããšã³ãžãã¢ãªã³ã°ãšåæã«é²ããããã«ã¯å¹çåãå¿
é ã§ãããšæããŠããŸããä»åã¯ã¹ã¿ãŒãå°ç¹ã«ããã人æèŠä»¶ã®äœæã«æéããããããšã§ãæ°ããæžé¡éžèã颿¥ãã¹ã ãŒãºã«è¿·ããªãé²ããããããã«ãªããŸããã çµæããã°ããæ£ç¢ºã«åºããããšã¯ãæ¡çšãããæã
ã ãã§ã¯ãªãåè£è
æ§ã®è»¢è·æŽ»åã®ããã«ãææçŸ©ã§ããä»åŸãããå€ãã®æ¹ãšã話ããããšãã«åã仲éãã¿ã€ããããã«ã劥åã®ãªãæ¡çšãç¶ããŠãããããšæããŸãã ãã®ããã«éžèå
å®¹ã®æ¹åãèããªãããäžç·ã«åã仲éãåéããŠãŸãããããããã°ãã²ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
äºæ¥åºç€ãŠãããã¢ãŒããã¯ãã°ã«ãŒãã®yoshikawaã§ãã ä»åã®ããã°ã§ã¯LIFULL HOME'Sãæ§æããã¬ã¬ã·ãŒã·ã¹ãã ã®ãªã¢ãŒããã¯ãã£ã³ã°ã«ã€ããŠæžããŠãããŸãã 2幎åã«ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ããçºè¶³ãããœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®ããŒã¹ã«Clean Architectureãèšèªã«TypeScriptãæ¡çšã æ°ããªAPI(Backend For Frontend)ãéçºããŠããŸããã ãã³ãŒãã®å質ããšããããã¯ãéçºãšã³ãžãã¢ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ããéµãšãªã£ãŠããæ¬ãããžã§ã¯ãã§ããã ãã®ããã°èšäºã§ã¯ãã³ãŒãã®å質ããäž»é¡ãšããŠåãçµã¿ããªã ããã¹çã«ç޹ä»ããŠãããŸãã ãã®èšäºã§äŒããããš æ³å®ãã察象èªè
éå»ã®ããã°ã®çŽ¹ä» ããŒã¿ãããŒã«æ³šç®ããLIFULL HOME'Sã®ã·ã¹ãã æŠèг ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã«ã€ã㊠ã¢ãŒããã¯ãããŒã (ã€ãã€ããªã³ã°ããŒã )ãšãããžã§ã¯ãã®æŠèŠ æ°BFFãžã®ãªã¢ãŒããã¯ãã£ã³ã°å¯Ÿè±¡æ©èœ æ©èœã®ç¹æ§ãšæ·±å»ãªå
éšå質ã®å£å ãšã³ãžãã¢çµç¹ãšæšªæçãªæ©èœ ãããžã§ã¯ãåºç€ïŒæ°BFFã®ã¢ãŒããã¯ãã£éžå®ãæè¡éžå®ãPoC ãããžã§ã¯ãäžç€ãçŸåšïŒåè³ªç¶æã»æ¹å ãŠããããã¹ã ã³ãŒãéå¢å ãšBFFç¹æåŠç ã¢ãžã¥ãŒã«ã®ç¹åŸŽãçè§£ããé«åéççµåã« åé床ãé«ãã¢ãžã¥ãŒã«ãåããäœãã¢ãžã¥ãŒã«ãèã åé床ã«çç®ãã解決çã®å¹æ çµåãã¹ãã»ååž°ãã¹ã æ©èœç³»ã®ãã¹ã ããã©ãŒãã³ã¹ãã¹ã è² è·ãã¹ã ãã¹ãçµæã®èç© ãªãªãŒã¹åŸã®åè³ªç¶æãšæ€èšŒãšã¡ããªã¯ã¹ å
éšå質: æè¡çè² åµã®å¯èŠå å€éšå質: ããã©ãŒãã³ã¹ã®å¯èŠå ãªã¢ãŒããã¯ãã£ã³ã°ã®çŸåšãšä»åŸïŒããŠããŠã®èç©ãšãªãã¬ã€ã¹ã«åã㊠çµããã« Clean Architectureã®èããç¶æ¿ãã€ã€ãã¢ãŒããã¯ãã£å
補åãž å
補ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãæ®åãããä»çµã¿ãšæè² çæ³ãšããããã®èª²é¡ ããŒã¿æŽåã®èª²é¡ãšãã®è§£æ±ºã®ããã« æ±äººæ
å ± ãã®èšäºã§äŒããããš LIFULLã®ã¬ã¬ã·ãŒã·ã¹ãã ã§ããåç
§ç³»ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®æ©èœãæ°ããªAPI(Backend For Frontend)ãžãšãªã¢ãŒããã¯ããããŸã§ã®åãçµã¿ ãªã¢ãŒããã¯ãã£ã³ã°ãæ¯ããåè³ªç¶æã®ããã®ããŒã«ããã¹ããã³ãŒãã£ã³ã° ã³ãŒãã®å質ããœãããŠã§ã¢ã¢ãŒããã¯ãã£ããªãã¡ã¯ã¿ãªã³ã°ãClean Architectureã«é¢ãããã©ã¯ãã£ã¹ æ³å®ãã察象èªè
åæ°å¹Žä»¥äžçšŒåãæè¡çè² åµãå€ãæ±ããWebãµãŒãã¹ã«ãããã¬ã¬ã·ãŒã·ã¹ãã ã®æ¹åã«ã€ããŠç¥ããã人 ãªã¢ãŒããã¯ãã£ã³ã°(ãªã¢ãŒããã¯ãã£)ããªãã¡ã¯ã¿ãªã³ã°ãã³ãŒãã®å質ã«é¢ããå®è·µçãªåãçµã¿ãç¥ããã人 ã³ãŒãã®å質ããœãããŠã§ã¢ã¢ãŒããã¯ãã£ã«èå³ããã人 éå»ã®ããã°ã®çŽ¹ä» ãããžã§ã¯ãçºè¶³ã®çµç·¯ãæ°ãã«éçºããBFFã®ã¢ãŒããã¯ãã£éžå®ãæè¡éžå®çç±ãªã©ãããžã§ã¯ãåæã®å
容ã¯éå»ã®ããã°ã«ãŸãšããŠããŸãã æ°ã«ãªã£ãæ¹ã¯ãã¡ããã芧ãã ããã(èªãŸãªããšããã®ããã°ã®å
容ã¯çè§£ã§ããŸã) www.lifull.blog ããŒã¿ãããŒã«æ³šç®ããLIFULL HOME'Sã®ã·ã¹ãã æŠèг æ¬é¡ãžãšå
¥ãåã«ãLIFULL HOME'Sã®ã·ã¹ãã ã®æŠèгããäŒãããŸãã BtoBtoCåã®äºæ¥ã«é¡ãããLIFULL HOME'Sã§ã¯å€æ§ãªã·ã¹ãã ããå
šäœãæ§æãããŠããŸãã toBçšã®æžã蟌ã¿ç³»ã·ã¹ãã ããç©ä»¶ããŒã¿ãå
¥çš¿ããããããã»DBãªã©ã®ã·ã¹ãã ãçµãŠåŠçã»èç©ãããåŸã ç©ä»¶æ€çŽ¢æ©èœãªã©LIFULL HOME'Sã®åçš®ãµãŒãã¹ã§ç©ä»¶æ
å ±ãå©çšå¯èœãšãªããŸãã ãã®ããŒã¿ãããŒãç°¡æœã«ç€ºããã·ã¹ãã æ§æå³ãäžèšã§ãã LIFULL HOME'S ã®ç©ä»¶æ
å ±åç
§ç³»ã·ã¹ãã æŠèг ãªãããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã§ã¯åç
§ç³»ã·ã¹ãã ã®æè¡çè² åµè§£æ¶ãç®çãšããŠããã®ã§ã ãã®å¯Ÿè±¡å€ãšãªãã·ã¹ãã ã詳现ãªãããã¯ãŒã¯æ§æãã€ã³ãã©æ§æã«ã€ããŠã¯çç¥ããŠããŸãã å³äžã®ãã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ãããããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã§ã®æ¹ä¿®å¯Ÿè±¡ãšãªãã¬ã¬ã·ãŒã·ã¹ãã ã§ããã ãæ°BFFããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³äžã«å®è£
ããã諞æ©èœã®ç§»è¡å
ãšãªããŸãã ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã«ã€ã㊠LIFULL HOME'Sãæ§æããã·ã¹ãã ã®æŠèгãã€ããããšããã§ãæ¬é¡ã§ããã¬ã¬ã·ãŒã·ã¹ãã ã®ãªã¢ãŒããã¯ãã£ã³ã°ããã³ãããžã§ã¯ãã«ã€ããŠç޹ä»ããŸãã ã¢ãŒããã¯ãããŒã (ã€ãã€ããªã³ã°ããŒã )ãšãããžã§ã¯ãã®æŠèŠ çè
ãåšç±ããŠããã¢ãŒããã¯ãããŒã (ã€ãã€ããªã³ã°ããŒã ã®äžã€)ã®æ¥åã¯2çš®é¡ã«åããããšãã§ããŸãã äžã€ã¯ããããã¯ãéçºããŒã ã§çºçããèšèšãå®è£
ã«é¢ããåé¡ã®çžè«ããã³è§£æ±ºçã®æäŸã§ãã ããäžã€ã¯ãããã¯ãéçºããŒã ã§ã®å®è¡ãé£ããæšªæçãªåé¡ãžã®åãçµã¿ã§ãã ãããã®æ¥åãããããã¯ãéçºãšã³ãžãã¢ã®çç£æ§åäžã«å¯äžãç¶ããããšãç®çãšããŠããŸãã ãããŠ2幎åãåŸè
ã®æ¥åã®äžç°ãšããŠLIFULL HOME'Sã®åç
§ç³»ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã«ãããæè¡çè² åµã®è§£æ¶ãç®æããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ããçºè¶³ããŸããã ãã®ãããžã§ã¯ãã®ããã·ã§ã³ã¯ãã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ãæ
ã£ãŠããæ©èœã®ããã³ããšã³ãéšåãšããã¯ãšã³ãéšåã®åŠçã®ãã¡ã ããã¯ãšã³ãåŠçã®ãªã¢ãŒããã¯ãã£ã³ã°ãå®äºãããããšã§ãã ãã®ãªã¢ãŒããã¯ãã£ã³ã°å
ãšããŠãæ°ããªBackend For Frontend(æ°BFF)ã®éçºãããããšãšãªããŸããã æ°BFFãžã®ãªã¢ãŒããã¯ãã£ã³ã°å¯Ÿè±¡æ©èœ ãã®èšå€§ãªLOCãšåœ±é¿ç¯å²ã®å€§ãããããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠããªã¢ãŒããã¯ãã£ã³ã°å¯Ÿè±¡ã«ãªãããã§ã¯ãããŸããã ç§»è¡äºå®ã®æ©èœãæ§æ³ããåŸããªã¢ãŒããã¯ãã£ã³ã°ã«ããäºæ¥äžã®ã€ã³ãã¯ããæ©èœã®ç¹æ§ããããã¯ãéçºããŒã ãšã®èª¿æŽããšãå å³ããŠæ°BFFãžç§»è¡ãããæ©èœã決å®ããŸããã æ°BFFãžã®ãªã¢ãŒããã¯ãã£ã³ã°æ§æ³ïŒå·šå€§ã¢ãã¬ããè€æ°ã®GitHub Repositoryããæ§æãããæ°BFFã«ç§»è¡ãã ãã®äžã€ããç©ä»¶äžèЧæ©èœãã§ããæ€çŽ¢æ¡ä»¶ã®èšå®ã»å€æŽããã奜ããªæ¡ä»¶ãå
¥åããå
¥åå®äºãšåæã«æ€çŽ¢ãéåæçã«å®è¡ãããŠæ¡ä»¶ã«åèŽããç©ä»¶æ
å ±ãäžèЧã§ãããšããæ©èœã§ãã 100äžä»¶è¶
ã®äžåç£ã»äœå®
æ
å ±ãåãæ±ã£ãŠãããæŽŸçç³»ã®æ©èœãå«ããŠ100éã以äžã®å°ç·(URL)ãæããŠããããšãããªã¢ãŒããã¯ãã£ã³ã°ã«ãã察å€çãªåœ±é¿ã倧ããæ©èœã§ãã ãããŠæšªæçã«æ
å ±ãæ€çŽ¢å¯èœãšããç¹æ§äžãè€æ°ã®ãããã¯ãéçºããŒã ã§æšªæçã«éçºãããŠããæ©èœã§ããããŸãã æ©èœã®ç¹æ§ãšæ·±å»ãªå
éšå質ã®å£å ç©ä»¶äžèЧæ©èœã§ã¯äžèšã®ãããªå
éšå質ã®å£åãæ·±å»ã§ããã å
¥åããç©ä»¶æ€çŽ¢æ¡ä»¶ãããŒã¹ããåŠçããååŸããç©ä»¶æ
å ±ãæŽåœ¢ããåŠçãã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³å
ã®ControllerãViewãªã©ã«æ£ä¹±ããŠãããã³ãŒãã®ãã¬ãŒãµããªãã£ãäœã ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãå®è£
èŠçŽã®é³è
åã責åãå€éããã¢ãžã¥ãŒã«(ããããç¥ã¯ã©ã¹)ã®ååšãã³ãŒãã®ãã¬ãŒãµããªãã£ã®äœããçžãŸã£ãŠãæ©èœæ¹ä¿®ã»è¿œå ã«ãã圱é¿ç¯å²ç¹å®ãå°é£ å€ãã®ããŒãžã§ã³ã®PHPã§å®è£
ãããŠãããåä»ããè¡ãããŠããããŠããããã¹ãã®æ©æ§ããªãã®ã§å¯èªæ§ããã¹ã¿ããªãã£ãäœããæœåšçãªãã°ã¬ãŒã·ã§ã³ãå€ã ããã¥ã¡ã³ããæ©èœããŠããªãã®ã§ç€Ÿå
æèè
ãžã®ãã¢ãªã³ã°ãé »çºããæ°èŠéçºè
ã«ãšã£ãŠå®è£
å®äºãŸã§ã®ãªãŒããŒãããã倧ãã(ææªã®å Žåãæèè
ãéè·ããŠãã調æ»ãå°é£) å
éšå質ã®å£åã¯ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«ãå€ãåœãŠã¯ãŸããŸããããç©ä»¶äžèЧæ©èœã«ãããŠã¯é¡èã§ãããããŒå¹çã®äœäžãæããŠããŸããã ãã®ãããªçç±ãããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¿ã察象ãšãããªãã¡ã¯ãªã³ã°ãæ°BFFãžã®ç§»è¡ã䌎ããªããªã¢ãŒããã¯ãã£ã³ã°ã ãã§ã¯æè¡çè² åµã®è§£æ¶ã«ã¯äžååãšå€æãããŸããã ãšã³ãžãã¢çµç¹ãšæšªæçãªæ©èœ LIFULL HOME'Sã§ã¯ãäžåç£ã»äœå®
æ
å ±ããšãããã¡ã€ã³ã®é¢å¿ãèµ·ç¹ãšããŠãè³è²žããã売買ããªã©äžåç£ã®ããŒã±ããå¥ã«ãããã¯ãéçºããŒã ãåå²ãããŠããŸãã ãããŠãç©ä»¶äžèЧæ©èœãã§ã¯è³è²žçšã®ç©ä»¶ã売買çšã®ç©ä»¶ãªã©ãè€æ°ã®äžåç£ããŒã±ããã®æ
å ±ãæšªæçã«äžèЧå¯èœã§ãã ã€ãŸãç©ä»¶äžèЧæ©èœã¯æ©èœåäœãšããŠã®æè¡çè² åµã ãã§ãªãã責åãåå²ãããæšªæçãªæ©èœã§ããããšãããããã¯ãéçºããŒã ãšã®æšªæçãªé£æºãèŠããããšããæ§è³ªãåããŠããŸããã æšªæçãªæ©èœãã€æ°èŠAPIã®éçºã䌎ããããžã§ã¯ããšããããšããããéçºã«å¯Ÿããã¹ããŒã¯ãã«ããŒãå€ãããã æšªæçãªåºç€éçºã®å¯èœãªã¢ãŒããã¯ãããŒã ãéçºã®äžå¿ãšãªããŸããã LIFULLã®ãšã³ãžãã¢çµç¹ã®æŠèгïŒããŒã ããããžãŒã®4ã€ã®åºæ¬çãªããŒã ã¿ã€ãã«ããåé¡ ãããžã§ã¯ãåºç€ïŒæ°BFFã®ã¢ãŒããã¯ãã£éžå®ãæè¡éžå®ãPoC æè¡çè² åµã解決ãã¹ãã Clean Architecture ãããŒã¹ã«ãããœãããŠã§ã¢ã¢ãŒããã¯ãã£ã§ æ°ããªBackend For Frontend API(æ°BFF)ãéçºããããšã決å®ãããŸããã èšèªã«ã¯åŠç¿ã³ã¹ãã®äœããšåã·ã¹ãã ã®ååšãã TypeScript ãéžã°ããOASãåãããããã«ãªWeb API Frameworkãšã㊠Loopback ãæ¡çšãããŸããã æè¡ã¹ã¿ãã¯ã®éžå®ãªã©ããããžã§ã¯ãåºç€ã®ãã詳现ãªå
容ã¯åé ã§ãäŒãããéå»ã®ããã°ãã芧ãã ããã æ°BFFã®æè¡ã¹ã¿ã㯠ã¢ãŒããã¯ãã£ãšæè¡éžå®ãå®äºããåŸã¯ãPoC(Proof of Concept)ã®äžç°ãšããŠãäžåç£çšèªéãæ©èœãšããå®åšã®æ©èœãæ°BFFãžãªã¢ãŒããã¯ãããŸããã ãã®åŸæ€èšŒããã»ã¹ãçµãŠæ°BFFãæè¡çè² åµã®è§£æ¶ã«å¯äžããããšã確èªãããããžã§ã¯ãã®æ¬æ Œå§åãšãªããŸããã ãããžã§ã¯ãäžç€ãçŸåšïŒåè³ªç¶æã»æ¹å åææ®µéã§æ£ããã¢ãŒããã¯ãã£éžå®ãæè¡éžå®ãããããšããããã¯åæã®ãã¹ããªå®è£
ã®ã¿ã«ãã£ãŠæè¡çè² åµã®è§£æ¶ãäºé²ã«ãªãããã§ã¯ãããŸããã ãè² åµããšããã¢ãããžãŒã®éããåææ®µéã§ã¯äºæ¥ã®æé·ãæ¯ããè³ç£ãšãèšããæè¡åºç€ã§ãã£ãŠããç¶ç¶çãªåè³ªç¶æã®ããã®æ¹åãæ¬ ããŠããŸããšè² åµãžãšè»¢ãåŸããŸãã ç¶ç¶çãªæ¹åã宿œããããã«ãå
éšå質(å¯èªæ§ã«åé¡ã¯ãªããã»ä¿å®æ§ã¯é«ããetc)ãšå€éšå質(仿§éãã«åäœãããã»é床å£åãçããŠããªããetc)ã®äž¡æ¹ã®ç¹ã§ ãœãããŠã§ã¢ãã¹ãã培åºããŠè¡ããåæã«ãã¹ãããããããªããããªæ¹åãè¡ã£ãŠããŸããã ãŠããããã¹ã æ°BFFã§ã¯ãŠããããã¹ããšAPIãã¹ãçšã®ãã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ãšããŠJestã䜿çšããŠããŸãã jestjs.io äž»ã«ãã¹ãã©ã³ããŒããã¹ãã«ãã¬ããžã®åºåãCI/CDã§ã®èªåãã¹ããšããçšéã§å©çšããŠããŸãã Clean ArchitectureããŒã¹ãšããããšããããã¢ããã³ã°ã«ã€ããŠã¯Jestã®æ©èœãå©çšããŠãããã¢ãã¯çšã®ã³ãŒããäœæããŠããŸãã ã³ãŒãéã®å°ãªãã£ããªã¢ãŒããã¯ãã£ã³ã°åæãã§ãŒãºã§ã¯ãŠããããã¹ãã®éçšã¯é 調ã§ããããã³ãŒãéãå¢ããã«ã€ãããåé¡ãé¡åšåããŸããã ã³ãŒãéå¢å ãšBFFç¹æåŠç ãã¹ãã¯éèŠã§ãããããã³ãŒãéãå¢ããã«ã€ããäœãæ
ä¿ãããã¹ããªã®ãç®çãåãããªããªãã»ã©åé·ãªãã¹ãã³ãŒããæžããŠããŸãããšããã±ãŒã¹ãç®ç«ã¡å§ããŸããã ç¹ã«é¡èã ã£ãã®ã¯DTO倿åŠçã§ãã æ°BFFã«ãããç©ä»¶äžèЧæ©èœçšAPIã§ã¯ç©ä»¶æ
å ±ãå«ããDTO(Data Transfer Object)ã倿ããåŠçãé »åºããŸãã ãããã¯ä»¥äžã®ããã«ãDomainãé€ã3ã€ã®å±€(Gateway, UseCase, Presenter)éããã³å€éšã³ã³ããŒãã³ããšã®In/Outã®2éãèš8ãã¿ãŒã³ã§åé¡ã§ããŸãã å€éšããŒã¿ãœãŒã¹(=LSUDs API)ã®ã¬ã¹ãã³ã¹ãªããžã§ã¯ããBFFå
ã®Gateway(Repository) DTOã«å€æããåŠçãšãRepository DTOãå€éšããŒã¿ãœãŒã¹ãžã®ãªã¯ãšã¹ããªããžã§ã¯ãã«å€æããåŠç RepositoryçšDTOãšUseCaseçšDTOãšã®çžäºå€æåŠç UseCaseçšDTOãšPresenterçšDTO(æ€çŽ¢æ¡ä»¶DTOãšView Model)ãšã®çžäºå€æåŠç UI(ããã³ããšã³ããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³)ããéä¿¡ããããªã¯ãšã¹ããªããžã§ã¯ããControllerçšDTOã«å€æããåŠçãViewModelãUIãžã®ã¬ã¹ãã³ã¹ãªããžã§ã¯ãã«å€æããåŠç æ°BFFå
ã®ããŒã¿ãããŒå³ïŒDomain以å€ã®å±€ã§ã¯DTOãä»ããŠããŒã¿ãéåä¿¡ DTO倿åŠçã¯ã¬ã€ã€ãŒéã®è²¬åã®éãã«ããå·®åãããããŸããã倧éšåã¯äŒŒããããªå®è£
ãšãªã£ãŠããŸããŸãã äžèšã¯ãã®ãµã³ãã«ã³ãŒãã§ãPresenterã«ãããŠInputDtoã®ããããã£(ValueObjec)ããOutputDtoãèŠæ±ããããããã£ãäœæãè©°ãæ¿ããåŠçã§ãã export class Presenter { constructor(private readonly input: UseCaseInputDto ) {} present () : OutputDto { return new OutputrDto ( { money: this .input.money ? helper ( this .input.money , this .input.unit , this .input.house_type ) : 'default price' , houseName: // ã¯ã³ã©ã€ããŒããã«ããŒé¢æ°ã®åŒã³åºããªã© houseAddress: // // ã¯ã³ã©ã€ããŒããã«ããŒé¢æ°ã®åŒã³åºããªã© } ); } helper ( money?: MoneyValueObject , unit?: UnitValueObject , houseType?: HouseTypeValueObject ) : string { // money(éé¡)ã®ãã©ãŒãããåŠçãè¡ããã«ããŒé¢æ° } } ãªã¢ãŒããã¯ãã£ã³ã°åææ®µéã§ã¯DTOãããããã£ã®å€æåŠçã¯åçŽãªãã®ã§ãã£ããããã¯ã³ã©ã€ããŒã峿çãªãã«ããŒé¢æ°ãžã®åå²ã§ãåé¡ãããŸããã§ããã ãããŠã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã«ååšããŠããæ©èœã®ç§»è¡ãé²ããšãBFFã«å®è£
ããåŠçãè€éã«ãªããã¹ãã®ãèŸããç®ç«ã¡å§ããŸããã ãã®èŸããã«ããŒãã¹ãåé·ãªãã¹ãã³ãŒãããã³å·šå€§ãªã¢ãã¯ãå¢ããŠããŸããŸããã ãã®ç¶æ³ãèŠçŽãã¹ãå®è£
ãã¿ãŒã³ã®èŠçŽããè¡ããŸãã ã¢ãžã¥ãŒã«ã®ç¹åŸŽãçè§£ããé«åéççµåã« ããããDTO倿åŠçã¯ããã³ããšã³ãã®èŠæ±ã«åŸã£ãŠå¿
èŠãªããããã£ãå¯ãéããçšéã«æ²¿ã£ãå å·¥ãæœããæ±ããããããéçŽããåŠçãšãèšããŸãã ãã£ãŠããã³ããšã³ãã®èŠæ±ãåãå
¥ããã ãã®BFFããèŠãã°ãå¶çºçã«éžã°ããããããã£ã«å¯Ÿãç¹ã«èŠåæ§ã®ãªãåŠçãæœããäžãµæã«åéãããåŠçãšã¿ãªããŸãã ãã®ããæ³šæããŠå®è£
ããªããã°å¿
ç¶çã«å¶çºçåéã»è«ççåéãçããåé床ã®äœãã¢ãžã¥ãŒã«ãåºæ¥äžãã£ãŠããŸããŸãã å®éã«äžèšã®ã³ãŒããããããããã«ãåé床ãšçµå床ã®èгç¹ã§DTO倿åŠçã«ã¯æ¹åã®äœå°ããããŸãã OutputDtoã®constructorã®åŒæ°ã®è€éãã»çµ±äžæ§ã®ç¡ãããPresenterã¯ã©ã¹ã®è²¬åã®å€ããèŠãŠã®éãã å®è£
ã®èгç¹ã§äŒŒããããªåŠçããã éããè«ççåéãã€ãŸãåé床ã®äœãç¶æ
ãçããŠããŸãã ãããŸã§ã®æ°BFFã§ã¯Clean Architectureã瀺ãã責åå¥ã®ã¬ã€ã€ãŒåå²ãå¿ å®ã«æ¡çšãã dependency-cruiser ã«ããäŸåé¢ä¿éåã®æ€ç¥ã§ã¢ãžã¥ãŒã«ã®éåé(=ã¬ã€ã€ãŒ)ã®å¥å
šæ§ã¯æ
ä¿ãããŠããŸããã ããããäžã€ã®ã¬ã€ã€ãŒå
ã§ã®ã¢ãžã¥ãŒã«éã®çµåãããã³åäžã¢ãžã¥ãŒã«ã®åéæ§ã¯åçååããã³ãã«ãã€ã€èªåãã¡ã§èããå¿
èŠããã£ãã®ã§ãã åé床ãé«ãã¢ãžã¥ãŒã«ãåããäœãã¢ãžã¥ãŒã«ãèã åé床ãšãã¹ãã®èŸããçžãŸã£ãDTO倿åŠçåé¡ã®è§£æ±ºçãšããŠãHumble Objectãã¿ãŒã³ã«ãã³ããèŠåºããŸããã ãã¹ãã®æžãããããšåé床ãäž¡ç«ãããã¹ããDTO倿åŠçããåé床ãé«ããã¹ãéšåããšãåé床ãäœããŠãè¯ãéšåãã«åé¢ããã®ã§ãã ãåé床ãé«ããã¹ãéšåãã§ã¯ããã¹ããã¹ãããžãã¯(ãã©ãŒããããããªããŒã·ã§ã³ãªã©)ãåå©çšãã¹ãããžãã¯ãéçŽããããšãšãã«ããã¹ãã«ãã¬ããž100%ãç®æããªã©ããŠãã¹ãã³ãŒããå
å®ãããŸãã ãåé床ãäœããŠãè¯ãéšåãã§ã¯ããã¹ãã³ãŒããã»ãŒæžãããšãTypeScriptã®åã·ã¹ãã ã ãã§å質ãæ
ä¿å¯èœãšãªããããªå®è£
ã«éå®ããŸãã ã€ãŸãããåé床ãé«ããã¹ãéšåãã«æž¡ãå€ãšãã®æ»ãå€ãåæããã€ã³ã¿ãã§ãŒã¹ãšããŠã®ã³ãŒããèšè¿°ããã ãã«ããŸããã ç°¡åãªäŸã§ãããå
·äœçã«ã¯äžèšã®ããã«å®è£
ããŠããŸãã åé床ãäœããŠãè¯ãéšå // åé床ãäœããŠãè¯ãéšåã®å®è£
ããã¹ãã¯èããŠãã export class PresenterDtoConverter { constructor(private readonly input: UseCaseInputDto ) {} // (BFFçã«ã¯)å¶çºçã«å¿
èŠãšãããããããã£ã¯åæããã ã covert () : PresenterDto { return new PresenterDto ( { // ãã¹ããã¹ãåé床ã®é«ãåŠç(å®éã®PresentationåŠç)ãåŒã³åºã money: MoneyPresenter.format ( this .input.money , this .input.unit , this .input.house_type ), houseName: HouseNamePresenter.format ( this .input.name , this .input.house_type ), houseAddress: HouseAddressPresenter.format ( this .input.address , this .input.house_type , ), } ); } } åé床ãé«ããã¹ãéšå // åé床ãé«ããã¹ãéšåã®å®è£
ããã¹ããåããã export class MoneyPresenter { private static readonly defaultPrice = 'default price' ; // åŒæ°ã¯BFFã®æå°æ§æåäœã§ããValue Objectã ã static format ( money?: MoneyValueObject , unit?: UnitValueObject , houseType?: HouseTypeValueObject ) : string { // è€éãªPresentationåŠç } } åé床ã«çç®ãã解決çã®å¹æ åé床ãèµ·ç¹ã«å®è£
ãã¿ãŒã³ãå®ããããšã«ããããã¹ããšå¯èªæ§ã®äž¡èгç¹ã§ã¡ãªããããããŸãã å¯èªæ§ã®èгç¹ã§ã¯ãåå¥ã®å€ã«é¢ãã仿§ã«ã€ããŠã¯ãåé床ãé«ããã¹ãéšåããã ããã³ããšã³ããèŠæ±ããå€ã®äžèЧã«ã€ããŠã¯ãåé床ãäœããŠãè¯ãéšåããèŠãã°è¯ããšããå
±éèªèã圢æãããŸãã ãã¹ãã®èгç¹ã§ã¯ããåé床ãé«ããã¹ãéšåãã¯ç¶²çŸ
æ§ã®é«ããã¹ããããåé床ãäœããŠãè¯ãéšåãã¯å
šäœã®çµæã®æåŠã確èªããçšåºŠã®ãã¹ããèšè¿°ã㊠ãã¹ãã®ãããããšä¿å®æ§ãæ
ä¿ã§ããŸããã ãã¡ãããã¡ãªããããããããã¯å®è£
ã®LOC(Lines Of Code)ã®å¢å ã§ãã è€éãªã³ãŒãã«æ
£ã芪ããã çç·Žè
ããèŠãã°ã倿Žåã®ã³ãŒãããè¡æ°ãå°ãªãã·ã³ãã«ã§è¯ããšèšããŸãããããä»åã¯æ°äž»çã«ã³ãŒãã®å質ãæ
ä¿ããããšãåªå
ããŸããã ãã¹ãã³ãŒãã®åé·åã«ç«¯ãçºããäžé£ã®åé¡ã§ããããåéåºŠã«æ³šç®ããã³ãŒãå質ã®åäžãšããã¢ãããŒãã§è§£æ±ºã§ããŸããã çµåãã¹ãã»ååž°ãã¹ã ããã³ããšã³ã(ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³)ãšããã¯ãšã³ã(æ°BFF)ããã³ããŒã¿ãœãŒã¹(LSUDs API)ãšã®çµåã®éã«ã¯ è€æ°ã®èгç¹ã§çµåãã¹ãã»ååž°ãã¹ãã宿œããŠåç
§ç³»ã¢ããªã±ãŒã·ã§ã³å
šäœã®å質ãæ
ä¿ããŠããŸãã ãããããŠããããã¹ãã®æ©æ§ãæŽåãããŠããªãã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ããã¹ã察象ã«å«ãŸããŠãããããCI/CDã§ã®ãã¹ãèªåå®è¡ã ãã§ã¯æ
ä¿ããããªãé
ç®ãå€ãã§ãã ãã®ãããå°çšã®ãã¹ãå®è¡ã¹ã¯ãªãããåçš®ããŒã«ã®ã°ã«ãŒã³ãŒããéçŽããã©ã€ãã©ãªãäœæãã ãã¹ãèªåå®è¡ãšããŒã«ã«ã§ã®ã¹ã¯ãªããå®è¡ãšã亀ããŠãã¹ãã宿œããŠããŸãã 以äžã§ã¯ãã»ãŒãã¹ãŠã®ãã¹ãé
ç®ãšãã®å¹çåã®ããã®åãçµã¿ã«ã€ããŠç޹ä»ããŠãããŸãã æ©èœç³»ã®ãã¹ã ãªã¢ãŒããã¯ãã£ã³ã°ã«ãããŠã¯ãã®å®æœååŸã§ãå€éšããèŠãæåãæ©èœãæãªãããªãããšãæ
ä¿ããããšãå¿
é ã§ãã ç©ä»¶äžèЧæ©èœã«ãããŠã¯è¡šç€ºãããç©ä»¶æ
å ±ã«å·®åãçãããæ€çŽ¢ã®æåã仿§ã©ããã§å€åããªãããšãæ
ä¿ããŸãã ãã®æ¹æ³èªäœã¯ä»¥äžã®éããã€ãŒããªã¢ãããŒãã§ãã ãªã¢ãŒããã¯ãã£ã³ã°ååŸã®ãã¹ãçšã®ç°å¢ãããããçšæãã ããããã®ç°å¢ã§æçµçã«serveãããhtmlãã¡ã€ã«ãcurlã«ãã£ãŠååŸãã htmlããäžèŠãªèŠçŽ ã»ã¡ã¿ããŒã¿ãã¹ã¯ãªããã§ã¯ã¬ã³ãžã³ã°ãã ã¯ã¬ã³ãžã³ã°ãããhtmlã®diffã®æç¡ãæ€ç¥ãã diffãçããªããã°ãã¹ãæå åããã»ã¹ã®ã¹ã¯ãªããåã Playwright ã«ããç»é¢æäœã®èªååãªã© ãã¹ãå¹çåã®ããã®åãçµã¿ã«å ãã1.ã®ãã¹ãç°å¢ã®çšæã§ã¯èªç€Ÿã®ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã掻çšãå¹çåããŠããŸãã ãã¹ãçšã®ç°å¢ãçšæããéã«ã¯ãKubernetesããŒã¹ã®å
補ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã«ããæäŸãããŠãããšãã§ã¡ã©ã«ãªéçºç°å¢ãå©çšããŠããŸãã ããããããšã§ãã¹ãçšç°å¢ã®æŽåã»ç®¡çã®æéãåæžãããšãšãã«ãããŒã«ã«ç°å¢ã®å·®åãªã©å±äººçãªèŠå ãæé€ããåçŸæ§ã®ãããã¹ãå®è¡ç°å¢ãçšæã§ããŸãã ãã¹ãçšç°å¢ã¯Pull Requeståäœã§äœæå¯èœã§ãPull Requestå
ã§ã®ç¹å®ã©ãã«ä»äžãããªã¬ãšããGitHub Actionsãå®è¡ããã24æéã ãæäŸãããŸãã "preview"ã©ãã«ãPull Requestå
ã§æå®ããã ãã§ãã¹ãçšç°å¢ãäœæ èªç€Ÿã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã«ã€ããŠã¯äžèšãªã©ã®LIFULL Creators Blogãã芧ãã ããã www.lifull.blog ããã©ãŒãã³ã¹ãã¹ã è€æ°ã®ã³ã³ããŒãã³ããçµåãããåç
§ç³»ã¢ããªã±ãŒã·ã§ã³ã§ã®ããã©ãŒãã³ã¹ãã¹ãã§ã¯ã ãšã³ããŠãŒã¶ãŒã«äžçªè¿ãããã³ããšã³ãéšåã®ã¬ã¹ãã³ã¹ã¿ã€ã ã®ããŒã»ã³ã¿ã€ã«å€(p95)ãã¡ããªã¯ã¹ãšããŸãã ãã®ããŒã»ã³ã¿ã€ã«å€ãšSLAãåºæºã«ããé床å£åã®èš±å®¹å€ãæ¯èŒãæåŠã倿ããŸãã ãã¹ãå®è¡ãèšæž¬ã¯åè¿°ã®ãã¹ãçšã¹ã¯ãªããããšãã§ã¡ã©ã«ãªç°å¢ãçšããŠå®æœããŠããŸãã 蚱容ã§ããªãé床å£åãèšæž¬ããéãªã©ã詳现ãªããã©ãŒãã³ã¹è§£æãå¿
èŠã«ãªã£ãå Žåã«ã¯FlameGraphãæŽ»çšããã¹ã¿ãã¯ãã¬ãŒã·ã³ã°ã«ããåå ã®ç¹å®ãè¡ããŸãã éçºéäžã§ããæ°BFFã«ãããŠã¯ 0x ã§ããŒã«ã«ã§ã®è§£æã宿œãã ãã以å€ã®æçããã³ã³ããŒãã³ãã§ã¯ Datadog APM äžã§è§£æãè¡ããŸããã è² è·ãã¹ã è² è·ãã¹ãã§ã¯Amazon CloudWatchããç§»è¡å¯Ÿè±¡æ©èœã®å¹³åžžæ/ããŒã¯æã¢ã¯ã»ã¹æ°ãªã©éå»ã®æ°å€ãåéãã ããããåºæºãšããŠãç§éãªã¯ãšã¹ãæ°ããªã¯ãšã¹ãéä¿¡æéãªã©ãå€ããè€æ°ã®ã·ããªãªãäœæããŸãã æ°BFFã¯KubernetesããŒã¹ã®èªç€Ÿã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ãã€ã³ãã©ãšããŠåäœããŠããããã ãã®ã·ããªãªäžã®è² è·ã§ãæ©èœãæ£åžžã«ã¢ã¯ã»ã¹ã§ããããããã¯æåŸ
éãã«ã¹ã±ãŒã«ã¢ãŠããããã㪠Podã®æ§èœãPodã®ã¹ã±ãŒã©ããªãã£ãªã©ã®ãªãœãŒã¹èª¿æŽãå®äºãããããšãè² è·è©Šéšã®ãŽãŒã«ã§ãã ã·ããªãªããŒã¹ã§è² è·ãã¹ãã宿œãã¹ããè² è·ãã¹ãã®ããŒã«ã¯HTTPéä¿¡çšã®è² è·ãã¹ãããŒã« Vegeta ãããŒã¹ã«äœããã Kubernetes Controllerã§ããVegetaControllerã䜿çšããŠããŸãã github.com äžèšã®ãããªyamlãã¡ã€ã«ã«ã·ããªãªãèšè¿°ãã kubectl apply å®è¡æã®åŒæ°ã«ã·ããªãªãã¡ã€ã«ãæå®ããããšã§å®è¡ãå¯èœã§ãã # ã·ããªãªäŸ: 30req/sec * 60sec ã®ã¹ãã€ã¯ãã¹ã metadata : name : attack-bff-ephemeral spec : scenario : |- GET bff-ephemeral/v1 GET bff-ephemeral/v1?param=1&flg= true output : text option : duration : 60s rate : 30 çµæè§£æãã§ãŒãºã§ã¯ãµã¯ã»ã¹ã¬ãŒããæ¶è²»ã¡ã¢ãªã®æšç§»ãã¹ã±ãŒã«ã«äŒŽãpodæ°ã®æšç§»ãªã©ãVegetaControllerã®åºåãšGrafanaããååŸãã åã·ããªãªã®ååŠãå€å®ããŸãã grafana.com Grafanaã«ããè² è·ãã¹ãã®åæ(å³ã¯Podæ°ã®æšç§») ãã¹ãçµæã®èç© ãããŸã§ç޹ä»ãããã¹ãã®æåŠããã¹ãã±ãŒã¹ããã³ãã®ã«ãã¬ããžããã¹ãå®è¡æ¹æ³ããã¹ãå®è¡æã®æ¡ä»¶ãçºçãããã°ã®è©³çްãªã©ã ãã¹ãçµæã«é¢ããäºæã¯å
補ã®ãã¹ã管çããŒã«ã掻çšããããšã§ããã·ã¥ããŒãåãããšãšãã«äžãµæã«éçŽããŠããŸãã å
補ãã¹ã管çããŒã«ïŒãã¹ãã«é¢ããããŒã¿ãšããã·ã¥ããŒããéçŽãããŠãã ãã®ããã«ããŠéå»ã®ãã¹ãçµæãèç©ã掻çšããããããããšã¯ãé·æéã«ãªããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã«ãšã£ãŠéèŠãªããšã§ãã ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ã㯠ã¹ãã©ã³ã°ã©ãŒãã¿ãŒã³ ãšããã¢ãããŒããå·ã£ãŠããããã 察象ãšãªãæ©èœãã¹ãŠã®ç§»è¡äœæ¥ãå®äºãããŸã§ã«ã¯è€æ°åã®ãªãªãŒã¹ãå¿
èŠãšãªããŸãã å®äºã«ã¯æéã«ããŠ2幎èŠãããšãããŠããŸããã ãããŠããã®è€æ°åã®ãªãªãŒã¹ã®ãããã«ãããŠãäžèšã®ãã¹ãããã»ã¹ãå«ãŸããŠããŸãã å°æ¥ã®ãã¹ãããã»ã¹ãå¹çåãããšããç¹ã§ãéå»ã®ãã¹ãããã»ã¹ã掻çšã§ããããã«ããŠããããšã«ã¯å€§ããªæå³ããããŸããã ãŸãç¥èŠãäžãµæã«èç©ã誰ã§ãã¢ã¯ã»ã¹å¯èœã«ããããšã§ããã¹ãã«å¿
èŠãªç¥èŠãå±äººåãããã«SSOTåã§ããŸãã(Single Source Of Truth: ä¿¡é Œã§ããåäžã®æ
å ±æº) SSOTãæ§ç¯ããããšã§ããããžã§ã¯ãæéäžã«ããŒã ã¡ã³ããŒã®å
¥ãæ¿ãããçºçããéã§ããªã³ããŒãã£ã³ã°æã®ãªãŒããŒããããæå°åãããããžã§ã¯ãå®éãžã®ãªã¹ã¯ãæããããšãã§ããŸãã ãªãªãŒã¹åŸã®åè³ªç¶æãšæ€èšŒãšã¡ããªã¯ã¹ ããããã®ãã¹ãããã»ã¹åŸãç¡äºãªãªãŒã¹ãããåŸãåè³ªç¶æã®ããã®åãçµã¿ã¯ç¶ããŸãã å
éšå質ãšå€éšå質ã®äž¡æ¹ã®èгç¹ã§æè¡çè² åµã®è§£æ±ºãç€ºãææšãèšæž¬ãããªã¢ãŒããã¯ãã£ã³ã°ã«ãã圱é¿åæãè¡ã£ãŠããŸãã ãã®äž»ãããã®ãšããŠãæè¡çè² åµã®å¯èŠåãšããã©ãŒãã³ã¹ã®å¯èŠåã玹ä»ããŸãã å
éšå質: æè¡çè² åµã®å¯èŠå LIFULLã§ã¯æè¡çè² åµã®ç¶æ³ããªã¢ã«ã¿ã€ã ã«åæ ããŠããããã·ã¥ããŒããæ§ç¯ããŠããŸãã ãšã³ãžãã¢ãªã誰ã§ãã»ãã€ã§ãã»å°çšã®ç³è«ãªãã§ã»åãæ
å ±ã«ã¢ã¯ã»ã¹ã§ããããããŸãSSOTã®äžã€ã§ãã ä»çµã¿ãšããŠã¯ãGitHub APIãCodeClimateQuality APIã®2ã€ããã³ãŒãã®å質ã«é¢ããããŒã¿ãååŸãããããã®ããŒã¿ã Metabase ã§å¯èŠåãããšãããã®ã§ãã å¯èŠåããã·ã¥ããŒããæè¡çè² åµã«é¢ããææšã«ã€ããŠã¯ãéå»ã®ããã°ãã芧ãã ããã www.lifull.blog 以äžã®å³ã®ããã«ãGitHub Repositoryåäœã§æè¡çè² åµãå¯èŠåããŠãããŸãã æè¡çè² åµã®æšç§»ã®å¯èŠåã€ã¡ãŒãž ãªã¢ãŒããã¯ãã£ã³ã°å
ã®æ°BFFã¯æè¡çè² åµã«ã€ããŠã¯ãå
·äœçãªæ°åããèŠãããããšã¯ã§ããŸãããã»ãŒè² åµãæ±ããããšãªãéçºã§ããŠããŸãã æè¡çè² åµæ¯ç(å³äžå·Šäžã®ããŒã»ã³ããŒãž)ã¯ãCode Climate Quality ã® Maintainabilityã§Açžåœãšäœãæããããšãã§ããŠãããŸãã docs.codeclimate.com äžæ¹ããªã¢ãŒããã¯ãã£ã³ã°å
ã®ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®æè¡çè² åµã«ã€ããŠã¯ãã¢ããªã¹ããã®é£ãããååšããŸãã ã¢ããªã¹ããç¹å®æ©èœã«çµã£ãæ¹åãèšæž¬ããããšãé£ãããããã«å ããŠç©ä»¶äžèЧæ©èœã®ãªã¢ãŒããã¯ãã£ã³ã°å®æœäžã«ãå¥ã®ãªãã¡ã¯ã¿ãªã³ã°ãããžã§ã¯ããé²è¡ããŠããŸãã ãã®ãããããã·ã¥ããŒãã ãããç©ä»¶äžèЧæ©èœã®ãªã¢ãŒããã¯ãã£ã³ã°ã«çµã£ãŠæè¡çè² åµè§£æ¶ãžã®å¯äžåºŠåããèšæž¬ããããšã¯é£ããã§ãã ããããªãããèšå€§ãªæšå®ä¿®åŸ©æé(=æè¡çè² åµãè¿æžãããŸã§ãããæé)ãèŠãããšãããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®äž»æ©èœã®äžã€ã§ããç©ä»¶äžèЧæ©èœã ã»ãŒæè¡çè² åµãèŠãããªãæ°BFFã«ç§»è¡ã§ããŠããããšãããæ¬ãããžã§ã¯ããæè¡çè² åµè§£æ¶ã®å€§ããªäžæ©ã«ãªã£ãŠãããšèšããŸãã å€éšå質: ããã©ãŒãã³ã¹ã®å¯èŠå æ¢åºã®éããå€éšå質ã«ã€ããŠã¯Datadogã§ã®ããã©ãŒãã³ã¹å¯èŠåãGrafanaã§ã®ã€ã³ãã©ãªãœãŒã¹ç¶æ³æšç§»ã®å¯èŠåã宿œããŠããŸãã ãããã«å ããç·åçãªããã©ãŒãã³ã¹æšç§»ãèšæž¬ããããã«LIFULL HOME'Sã®Webãµã€ãã®ããã©ãŒãã³ã¹ã®æšç§»ãSpeedCurveã§èšæž¬ã»å¯èŠåããŠããŸãã www.speedcurve.com äžèšã¯è³è²žç©ä»¶äžèЧæ©èœ(ç©ä»¶äžèЧæ©èœã®äžã€)ã®æšå¹Žã®ããã©ãŒãã³ã¹ã®æšç§»ã瀺ããå³ã§ãã SpeedCurveã«ããç©ä»¶äžèЧæ©èœWebãµã€ãã®ããã©ãŒãã³ã¹æšç§» å€éšå質ã®ç¹ã§ãå¥ãããžã§ã¯ãã«ãã軜埮ãªåœ±é¿ã¯ååšããå®éã®æ°åããèŠãããããšã¯ã§ããŸããããªã¢ãŒããã¯ãã£ã³ã°ã«ãã£ãŠããã©ãŒãã³ã¹ã¯ç¶æã©ãããç·ããŠæ¹åã§ããŠããŸãã ãªã¢ãŒããã¯ãã£ã³ã°ã®çŸåšãšä»åŸïŒããŠããŠã®èç©ãšãªãã¬ã€ã¹ã«åã㊠2022幎1æçŸåšããã€ãŠã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã«ååšããç©ä»¶äžèЧæ©èœã®å€ããæ°BFFãžãšç§»è¡ãããŸããã ãããžã§ã¯ãçºè¶³åœåã®ã¢ãŒããã¯ãã£éžå®ãæè¡éžå®ãã2幎è¿ããçµéããåŸããæ°BFFããã³ç©ä»¶äžèЧæ©èœã«ãããŠã€ã³ã·ãã³ãã¯ã»ãŒçºçããå®å®çšŒåãå®çŸã§ããŠããŸãã ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã¯ããå°ãç¶ããŸãããæ°BFFãžã®ãªã¢ãŒããã¯ãã£ã³ã°ãçµç€ã«å·®ãæããã仿¥ã«äºå®ããŠããç§»è¡äœæ¥ãå®äºããèŠèŸŒã¿ã§ãã ããããäºæ¥ã®æé·ã®é°ã«èç©ããç¶ããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®æè¡çè² åµã®å®å
šè§£æ±ºã«ã¯ãŸã ãŸã æéããããã2å¹Žã®æéãããããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã¯ãã®äžæ©ã«éããŸããã ãšã¯ããããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã§åŸãããã³ãŒãå質ãã¢ãŒããã¯ãã£ã«é¢ããããŠããŠãšããããæŽ»çšããåŸçºãããžã§ã¯ãã®ååšããããå¯èŠåããã·ã¥ããŒãäžã®æ°åã»ã©ã¯éæ¹ããªãäœæ¥ã§ã¯ãªããšèšããŸãã ããã³ããšã³ãéšåãå«ããŠã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®ãªãã¬ã€ã¹ãå®çŸãã¹ãããããã¯ãéçºããŒã ã«ãããªãã¡ã¯ã¿ãªã³ã°ã»ãªã¢ãŒããã¯ãã£ã³ã°ããã³åè³ªç¶æãä¿é²ããããäºå®ã§ãã çµããã« æè¡çè² åµã解決ããã³äºé²ããç¶ç¶çã«ãããŒå¹çã®é«ãéçºãè¡ãããã«ãå
補ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãå«ãããã³ãŒãã®å質ãã®ããã®åãçµã¿ã¯ä»åŸãç¶ããŸãã æåŸã«ãä»åŸã®LIFULL HOME'Sã®ã·ã¹ãã ã«ãããã³ãŒãå質ã®ä»åŸã®å±æãšããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ããéããŠèŠããããŒã¿ã®èª²é¡ããäŒãããŸãã Clean Architectureã®èããç¶æ¿ãã€ã€ãã¢ãŒããã¯ãã£å
補åãž Clean ArchitectureãããŒã¹ã«éçºãéå§ããæ°BFFã®ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã§ããã ã¢ãŒããã¯ãããŒã ã§ã¯Clean ArchitectureãäŒããŠãããã®ã¯ãããŸã§ããªããã£ããªåçååã§ãããšããèªèã§éçºããŠããŸãã åé床ã®äŸã«ããããã«ãå®éã«ã©ã®ããã«å®è£
ããã¿ãŒã³åãããã¯æ©èœã®ç¹æ§ããã£ãŠå€æããŠããŸãã ãã®ãã¿ãŒã³ã®äžã«ã¯ãåé床ã®é
ã§ãäŒããããããªæ¯èŒçäžè¬åå¯èœãªãã®ãããLIFULLç¬èªã®å¶çŽã«ç±æ¥ããããšã§å Žåã«ãã£ãŠã¯ã¢ã³ããã¿ãŒã³ãšåŒã°ããŠããŸããã®ããããããããŸããã ãŸããæ°BFFã®ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã¯ç©ä»¶äžèЧæ©èœã®ãªã¢ãŒããã¯ãã£ã³ã°ãè¡ã£ããããžã§ã¯ãããã³ãã®åœäºè
ã§ããã¢ãŒããã¯ãããŒã ã ãã§å®çµãããã®ã§ã¯ãããŸããã ã³ãŒãã®å質åäžã«å¯Ÿããææãèªããããè€æ°ã®æ°æ©èœå®è£
ãããžã§ã¯ããå¥ã®ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã«ãããŠãæ°BFFã®ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãæ¡çšã»å¿çšãããŠããŸãã ä»åŸã¯å¹
åºããããžã§ã¯ãã§ã®å©çšã«èãåŸãããã«ãClean Architectureã®èããç¶æ¿ãã€ã€ãLIFULLç¬èªã®ãã¿ãŒã³ãšããŠããŠãåããå
補ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãæ£ããæ®åããéçšããããšãæ±ããããŸãã å
補ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãæ®åãããä»çµã¿ãšæè² å
補ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®æ®åã®ããã«ã¯ãããã¥ã¡ã³ããŒã·ã§ã³ãéçºè
ã³ãã¥ããã£ã¥ãããªã©ã ãããã¯ãéçºããŒã ãèªåŸçã«éçºå¯èœã«ãªãããšãè£å©ããããã®ä»çµã¿ããã³æè²ãå¿
èŠã§ãã åŸæ¥å
¬éäºå®ã®ããã°ã«ãŠããã®ä»çµã¿ã¥ãããªã©ããããã¯ãéçºãšã³ãžãã¢ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãã«ãããŠã¢ãŒããã¯ãããŒã ã宿œããããšã詳ãããäŒãããäºå®ã§ãã çæ³ãšããããã®èª²é¡ LIFULL HOME'S ã®ç©ä»¶æ
å ±åç
§ç³»ã·ã¹ãã æŠèгïŒã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®æè¡çè² åµãè§£æ¶ããå Žåã®çæ³åœ¢ äžèšã¯åé ã«èŒããããŒã¿ãããŒå³ãšã»ãŒåãã§ããããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãçã®ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³äžã®æè¡çè² åµè§£æ¶ã®åãçµã¿ã«ãã£ãŠãåç
§ç³»ã¢ããªã±ãŒã·ã§ã³éçºã®åæ£çµ±æ²»ãå¯èœã«ãªã£ãå°æ¥çãªçæ³åœ¢ã§ãã éçºã®åºŠã«å
šç€Ÿçãªèª¿æŽãèŠããããšãããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ãããéšçœ²ã¬ãã«ã§ã®èªæ²»(self-service)ãå¯èœãªåäœã§æ©èœãåãé¢ãããããšããæ§å³ã§ãã ãã®ç«¯ç·ã§ãããæè¡çè² åµè§£æ¶ãšããåœåã®ç®çãæããã€ã€ãããªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã§ãããself-serviceã®éå£ãšãªãåŸã課é¡ããããžã§ã¯ããéããŠé¡ã«ãªããŸããã ãããããŒã¿æŽåã§ãã å³äžã§LIFULL HOME'Sã®ã·ã¹ãã ããããŒã¿åæã·ã¹ãã ãã»ãããŒã¿å©çšã·ã¹ãã ãã»ãããŒã¿æäŸã·ã¹ãã ãã®3ã€ã«åé¡ããŸãããã ãã®3ã€ãéããŠéçšãããããŒã¿ã®å質ã«ã¯äŸç¶ãšããŠèª²é¡ããããæŽåããäœå°ããããšèããŠããŸãã ããŒã¿æŽåã®èª²é¡ãšãã®è§£æ±ºã®ããã« ããŒã¿åæã»æŽ»çšã®æèã§èªãããããšã®å€ãããŒã¿æŽåã§ãããLIFULLã®ããã«äžå®ä»¥äžã®èŠæš¡ãšæŽå²ãæã€æ¥åçšã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠãããŒã¿æŽåã®èª²é¡ã¯é¡èã§ãããšèããŠããŸãã ãã®äžã§ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ãã«ãããŠäœæãã課é¡ã¯ããŒã¿ã®çºèŠå¯èœæ§ã§ãã æ¢åã·ã¹ãã ã®çè§£ã®ããã«ã³ãŒããªãŒãã£ã³ã°ãè¡ãæ©äŒã¯å€ã
ãããŸãããã æ¹ä¿®å¯Ÿè±¡ã®ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããªãŒãã£ã³ã°ã«å ãã倧å
ã®ããŒã¿ãœãŒã¹ã§ããLSUDs APIãããŒã¿ããŒã¹ã察象ãšããå©çšãã¹ãããŒã¿ã®çºæãããŒã¿ä»æ§èª¿æ»ã«ãå€ãã®æéãèŠããŸããã ã€ãŸãããããŒã¿æäŸã·ã¹ãã ãã§çæãããããŒã¿ããããŒã¿å©çšã·ã¹ãã ãã§å©çšå¯èœã«ãªããŸã§ã«å±äººçãªåãçµã¿ãå¿
èŠã ã£ãã®ã§ãã ãªã¢ãŒããã¯ãã£ã³ã°ãããžã§ã¯ããšã¯å¥ã®èª¿æ»ã§å€æããŠããããšã§ãããäžèšä»¥å€ã«ã以äžã®ãããªèª²é¡ããããšèããŠããŸãã åæçšããŒã¿(OLAP)ãšãã¢ããªã±ãŒã·ã§ã³çšããŒã¿(OLTP)ã®äžè²«æ§ã®åé¡(âãããŒã¿åæã·ã¹ãã ããšãããŒã¿å©çšã·ã¹ãã ãéã®ããŒã¿çžäºéçšæ§ãäœã) ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³åãã«å å·¥ãããããŒã¿ãåå å·¥ããå¿
èŠæ§ã®ååš(âãããŒã¿å©çšã·ã¹ãã ãéã®ããŒã¿çžäºéçšæ§ãäœã) åå©çšãã¹ã倧å
ã®ããŒã¿ããã³ãã®ããŒã¿ã«è³ãçµè·¯ãèŠã€ããããªããèŠã€ããããªãã®ã§äŒŒããããªããŒã¿ã䜿ããèªäœããŠããŸã(âã·ã¹ãã ãéããããŒã¿ç³»çµ±æš¹ïŒData Lineageã®åé¡) ããŒã¿æŽåãèµ·å ãã課é¡ã¯ããã¥ã¡ã³ããŒã·ã§ã³ãæèè
ãžã®ãã¢ãªã³ã°ãªã©ãéçãªã³ã³ãã³ãã®æŽåãå±äººçãªåªåã«ãã£ãŠäžæçã«ã¯è§£æ±ºå¯èœãªåé¡ã§ãã ããããå€§èŠæš¡ãªããŒã¿ãæ±ããLIFULLã«ãããŠæç¶å¯èœæ§ã®ãã解決çãå®çŸããããã«ã¯ãããŒã¿ããããžã¡ã³ãã»çºèŠã»äžèЧå¯èœãªåºç€ã¥ãããå¿
èŠãšèãçŸåšã¯ãã®æ€èšŒãé²è¡äžã§ãã æ±äººæ
å ± LIFULLã§ã¯ãšã³ãžãã¢ã®åéãããŠãããŸãã ãã®ããã°ã§ç޹ä»ãããŠããã ãããããªãClean ArchitectureãšTypeScriptã§å
ç¢ãªã¢ããªã±ãŒã·ã§ã³éçºãè¡ãæ¥åãå¯èœã§ãã®ã§ãåéäžã®è·çš®ã詳现ãªã©ã¯äžèšãã芧ãã ããã hrmos.co hrmos.co
ã¿ãªãããããã«ã¡ã¯ãå質æ¹åæšé²ãŠããã ã¯ãªãªãã£ãšã³ãžãã¢ãªã³ã°ã°ã«ãŒãã®å¹³éã§ãã 2020幎4æã«æ°åã§å
¥ç€ŸããçŸåšã¯ã»ãã¥ãªãã£/ãã¹ãèªååã«é¢ããæšé²ãæ¯æŽãªã©ãäžå¿ã«åãçµãã§ããŸãã ç§äºã§ã¯ãããŸãããæå±ããã°ã«ãŒãã§ã®æ¥åã®æ§è³ªãªã©ããããããã¯ãããŒããããã£ãããšäœããšããçµéšãããããšããããŸããã§ããã ãããªç§ãLIFULLã§ã®æ°åãšã³ãžãã¢2幎ç®ç ä¿®ãSETããåè¬ããŠäœãåŸããã«ã€ããŠãç ä¿®ã®ç޹ä»ãšåãããŠèª¬æããŸãã ç®æ¬¡ SETãšã¯ éçºãµãŒãã¹çŽ¹ä» ã€ã³ãã© ããã³ããšã³ã ããã¯ãšã³ã åŠã³ã»åçç¹ åŠã³ åçç¹ ãããã« SETãšã¯ ã¯ããã«ç³ãäžããŸããšãããã§ããSETãšã¯ç€Ÿå
ã§ã®é èªã§ãSophomore Engineers Trainingãã®ç¥ã§ãã ãã¹ãã®èªååãªã©ãæšé²ãããšã³ãžãã¢ã§ããSETïŒSoftware Engineer in TestïŒãšã¯å
šãã®å¥ç©ã§ãã LIFULLã®ãçæ³ã®ãšã³ãžãã¢åãã®ã²ãšã€ã¯ãããã¯ãšã³ãããããã³ããŸã§äžéãããªããWebã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢ã§ãã ããããæ¥åã§è§Šããã¹ã³ãŒããéãããŠããã±ãŒã¹ãå€ãå¹
åºãæ¥åãè¡ãæ©äŒãåŸãããªãããšãã課é¡ããããŸããã ãã®ãããªèæ¯ããçãŸããã®ããã®ç ä¿®ã§ãããéå§ãã7幎ã»ã©è¡ãããŠããŸãã 以äžãç ä¿®ã®ç®çã§ãã ãµãŒãã¹ãã¹ã¯ã©ããããéçºããéçšãéããŠãµãŒãã¹ãåããããã«å¿
èŠãªèŠçŽ ãåŠã¶ ä»ãŸã§è§Šããæ©äŒã®å°ãªãã£ãåéãçµéšããæ©äŒãäœãåºã ç ä¿®ã§ã¯æ°äººäžçµã®ããŒã ã§ãµãŒãã¹ããŒãããåµãäžããããšã課é¡ãšããŠäžããããåå è
ã¯æ®æ®µã®æ¥åããé¢ãéäžçã«åãçµã¿ãŸãã éçºãµãŒãã¹çŽ¹ä» ä»å¹Žã®ç ä¿®ã§ã¯ç§ãã¡ãå«ãèš3ããŒã ãããŸããããç§ãã¡ã¯Quoraãæš¡ããQ&AãµãŒãã¹ãéçºããŸããã ãããããŒãž Q&AãµãŒãã¹ãéžãã çç±ã¯ããã€ããããŸãããäžçªã®çç±ã¯èšèšãæ¯èŒç容æãã€èªèšŒãããŒã¿ããŒã¹ãªã©Webã¢ããªã±ãŒã·ã§ã³éçºã§å¿
èŠäžå¯æ¬ ãªæè¡ã«è§Šããããããã§ãã jp.quora.com éçºã¯å€§ãŸãã«ä»¥äžã®3ã€ã«åããŠè¡ããç§ã¯ãã®äžã§ãããã¯ãšã³ããäž»ã«æ
åœããŸããã ãªããããŒã ã¡ã³ããŒãããããæªçµéšã®åéãæ
åœããŠããŸãã ã€ã³ãã©ïŒAWSãå©çšïŒ ããã³ããšã³ãïŒVue.jsïŒ ããã¯ãšã³ãïŒGo+Gin+GORMïŒ ã€ã³ãã© éçºç°å¢ãšæ¬çªç°å¢ã®2çš®é¡ãçšæãããããããAWSã®æäŸããIaCïŒInfrastructure as CodeïŒãµãŒãã¹ã§ããAWS CloudFormationã§ã³ãŒãåããŸããã éçºç°å¢ æ¬çªç°å¢ ããã³ããšã³ã Vue.jsãçšããŠSPAã«å¯Ÿå¿ãããããšã«ããã質åãåç远å ããŒãžãäžèŠ§è¡šç€ºããŒãžãã·ãŒã ã¬ã¹ã«é·ç§»ã§ããŸãã ããã¯ãšã³ãïŒAPIãµãŒãïŒãžã®POSTãªã¯ãšã¹ãã¯ãJSON圢åŒã§ããŒã¿ãéä¿¡ãããŸãã ããã¯ãšã³ã APIãµãŒããæ§ç¯ããããã³ããšã³ãããæå®ããURLïŒè³ªå远å ãåçäžèŠ§è¡šç€ºãªã©ïŒã«ãªã¯ãšã¹ããæ¥ãéã«JSON圢åŒã§ããŒã¿ãè¿åŽããããã«ããŸããããã®éã«DBãæäœããORMãšããŠGORMãå©çšããŠããŸãã 以äžã¯åçäžèŠ§è¡šç€ºã®è¿åŽå€ãµã³ãã«ã§ããã results ã®äžã«åçIDãåçå
容ã質åã«çŽã¥ãåçIDãªã©ãé
åãšããŠå
¥ããããšã§äžæ¬è¿åŽãã§ããããã«ããŠããŸãã { "results": [ { "user_id": 15, "question_id": 6, "question_title": "Vue.jsãåãããŸãã", "question_body": "ããããã®åŠç¿æ¹æ³ã¯ãããŸããïŒ", "question_rate": 2, "answer_ids": [ 10 ], "n_answers": 1, "answer_id": 10, "comment": "ãŸãã¯å
¬åŒããã¥ã¡ã³ããèªã¿ãŸããã", "answer_rate": 3, "user": { "user_id": 15, "user_name": "homes-kun" } }, { .... } ] } åŠã³ã»åçç¹ åŠã³ å人ãšããŠã¯ãç ä¿®ãéããŠ3ã€ã®ããŠããŠãåŸãããšãã§ããŸããã APIèšèšã®åºç€ ã¢ãŒããã¯ãã£ãæèããéçºã¹ãã« DBèšèšã»æäœã®ç¥è 1ã€ç®ã®APIèšèšã®åºç€ã«ã€ããŠãç§èªèº«APIã®æŠèŠãè¯ãæªãã¯ææ¡ããŠãããã®ã®å®éã«èšèšããããšã¯ãããŸããã§ããã æ®æ®µã®æ¥åã§ããããŸã§è§Šããããšã®ãªãã£ãç®æã«ãã£ãããšè§Šããããšãã§ãã倧ããªåŠã³ãšãªããŸããã 2ã€ç®ã®ã¢ãŒããã¯ãã£ãæèããéçºã¹ãã«ã«ã€ããŠãä»åã®éçºã§ã¯ä»£è¡šçãªã¢ãŒããã¯ãã£ã®äžã€ã§ããMVCãæ¡çšããŸããã ç¥èãšããŠåºæ¬çãªããšã¯ç¥ã£ãŠããŠããããå©çšããéçºçµéšã«ä¹ããã£ãç§ã«ãšã£ãŠãå®è£
ã¯èŠåŽãããã®ã®MVCã®æ©æµã身ããã£ãŠäº«åã§ãã¹ãã«åäžã«ã€ãªãããŸããã 3ã€ç®ã®DBèšèšã»æäœã®ç¥èã«ã€ããŠãã座åŠã§çè§£ããã ãã§ã¯åŸãããªããã®ãå®è·µãéããŠåŸãè¯ãæ©äŒãšãªããŸããã ãªããããŒã ã¡ã³ããŒããã¯ä»¥äžã®ãããªå£°ããããŸããã ã¡ãããšããããã³ããšã³ãã®éçºãã¯ãããŠã ã£ãã®ã§ãåŠã³ã«ãªã£ãïŒããã³ããšã³ãæ
åœïŒ ãããã€ãæèããæ¬çªç°å¢æ§ç¯ãã§ããïŒã€ã³ãã©æ
åœïŒ åçç¹ å人ãšããŠã®åçç¹ã¯ä»¥äžã®2ã€ã§ãã ã€ãŸãã調æ»ããæéãç ä¿®æéã®å€ããå ããŠããŸããäºå®ããç®æãŸã§å®è£
ãå®äºããªãã£ã ããã³ããšã³ãåŽãšã®é£æºãããŸãã§ããªãã£ã 1ã€ç®ã«ã€ããŠãåãããªãããšã調æ»ããããšèªäœã¯èªèº«ã®åŠã³ã«ã€ãªãããŸãã äžæ¹ã§ã調æ»ã«æéã䜿ããããŠããŸããããã§ã¹ããããç¶ããŠããŸãã®ã¯ãããããŸããã ä»åã¯ç ä¿®ã ã£ãã®ã§ææ¥ãŸã§ã«ãã¹ãŠå®è£
ã§ããªããŠãåé¡ãããŸããã§ããããå®éã®æ¥åã§ããã¯ãããŸãããçµæçã«æ©ãã«çžè«ããæ¹ãã¹ã ãŒãºã«é²ããšããããšã¯å€ã
ããããšæããŸãã®ã§ã調æ»ãšçžè«ã®ãã©ã³ã¹ãããŸãåããªããä»åŸã®æ¥åãããŠãããããšåŒ·ãæããŸããã 2ã€ç®ã«ã€ããŠãéçºæéäžã¯ããã³ããšã³ããšããã¯ãšã³ãããããã§éçºããŠãããŸããã ã§ãã®ã§ãã€ãªãåãããŠã®åäœç¢ºèªãèªèº«ã®æ
åœã ã£ãããã¯ãšã³ãã®éçºãããçšåºŠé²ãã§ããããããšèããŠãããšãããéçºã®é
ãããç ä¿®æçµæ¥ã«ããããšãšãªã£ãŠããŸããŸããã ããã€ãªãåãããŠã¿ããšãããã³ããšã³ãããéãããŠããããŒã¿ãšããã¯ãšã³ãåŽã§åãåãããŒã¿ã®åœ¢åŒãéãããšã«ãããšã©ãŒãªã©åäœã§ã¯çºçããªãã£ãåé¡ãè€æ°çºçããŸããããããŠãèšèšã®éèŠæ§ãçæãããšãšãã«ãã£ãšæ©ããã確èªã§ããŠããã°ãšæããŸããããã®ããšã¯ãä»åŸã®æ¥åã«æŽ»ãããŠãããããšæããŸãã ãããã« ä»åã®èšäºã§ã¯ãLIFULLã§ã®æ°åãšã³ãžãã¢2幎ç®ç ä¿®ãSETãã®èª¬æãšããã§åŸãããšã«ã€ããŠç޹ä»ããããŸããã 2é±éè¶
ãæ®æ®µã®æ¥åããé¢ããŠã¹ãã«ã¢ããã«å
ãŠãæ©äŒãããã ããã®ã¯å€§å€ããããããçµæãšããŠå€ãã®åŠã³ãåŸãããšãã§ããŸãããä»åŸãç ä¿®ã§åŸãããšãå¿ãããæ¥åãèªå·±ç éœçã§ã¹ãã«ãã¢ãããç¶ããäžäººåã®ãšã³ãžãã¢ãç®æããŠãããŸãã æåŸã«ãªããŸãããLIFULLã§ã¯äžç·ã«åã仲éãåéããŠãããŸãããããããã°ãã²ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
LIFULLæå¹éçºæ ç¹ã§åããšã³ãžãã¢ã®æç°ã§ãã æ¬ãšã³ããªãŒã¯ LIFULL Advent Calendar2021 ã12æ20æ¥ã®èšäºã«ãªããŸãã ç§ãåãæå¹ã§ã¯ããã®ææéªãç©ããå§ãå¯ããå³ãããªã£ãŠããŸãã æ±äº¬æ¬ç€Ÿããæå¹ã«è·å Žãç§»ããŠããæ©3幎ãçµã¡ãŸããããããããæå¹ã®å¯ãã«ãæ
£ããŠãã仿¥ãã®é ã§ãã ç§ãæå±ããéšçœ²ã¯æ±äº¬æ¬ç€Ÿãšæå¹æ¯ç€Ÿã®ãšã³ãžãã¢ã§æ§æãããéšçœ²ã«ãªãã瀟å
ã§ã¯éç§°KEELããŒã ãšåŒã°ããŠããŸãã KEELãšã¯ãLIFULLã°ã«ãŒãå
šäœã§å©çšããããšãç®çãšããKubernetesããŒã¹ã®å
補ã®ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã§ãã 詳ããã¯ä»¥äžã®ãšã³ããªãŒãã芧ãã ããã www.lifull.blog KEELã¯LIFULLã®ã¢ããªã±ãŒã·ã§ã³ã®éçºã»éçšã«å¿
èŠãªå€ãã®æ©èœãæäŸããŠããŸãã æ¬ãšã³ããªãŒã§ã¯ãKEELãæäŸããç£èŠåºç€ã®äžéšã§ããURIæ¯ã®ãµã¯ã»ã¹ã¬ãŒãå¯èŠåæ©èœã®ã話ããããããšæããŸãã èæ¯ LIFULLã®äž»èŠãµãŒãã¹ã§ããLIFULL HOME'Sã¯20幎以äžç¶ããŠãããµãŒãã¹ã§ãããéåžžã«å€ãã®ã³ã³ãã³ããä¿æãããµãŒãã¹ã«æé·ããŠããŸãã ãã®ã¢ããªã¹ãªå·šå€§ã¢ããªã±ãŒã·ã§ã³ãéçšããã«ããããé害æ€ç¥ã«é¢ãããšããåé¡ãçºçããŠããŸããã ããšLIFULL HOME'Sã«ãããŠã¯ããµã€ãå
šäœã«åœ±é¿ãåãŒããããªãããçšåºŠèŠæš¡ã®å€§ããé害ã§ããã°ããã«æ€ç¥ã§ããã®ã§ãã ç¹å®ã®ã³ã³ãã³ãã®ã¿ã§é害ãçºçããå Žåãã¢ããªã±ãŒã·ã§ã³å
šäœã®ãµã¯ã»ã¹ã¬ãŒããéŸå€ãŸã§æŒãäžãããã¢ã©ãŒãéç¥ãããªããŸãŸããã®äžå
·åãèŠéããããŠããŸããšãã£ãäºããããŸããã URIæ¯ã®ãµã¯ã»ã¹ã¬ãŒãã®éçº KEELããŒã ãåé¡è§£æ±ºã®ã¢ãããŒããšããŠå°ãåºããçãã¯ãURIæ¯ã«ãµã¯ã»ã¹ã¬ãŒãã確èªã§ããããã·ã¥ããŒãæ©èœã®éçºã§ããã 説æããããããŸãã¯çŸåšéçšãããŠããå®ç©ã®ç»é¢ãèŠãŠãããæ¹ãã€ã¡ãŒãžãã€ãããããšæããŸãã ã¢ããªã±ãŒã·ã§ã³ããã·ã¥ããŒã ã¢ããªã±ãŒã·ã§ã³ã®ããã·ã¥ããŒãã®äžéšã«ã¯ãã¹ããŒã¿ã¹ã³ãŒãæ¯ã®RPSããããã©ãŒãã³ã¹ã®ããŒã»ã³ã¿ã€ã«å€ããã®äžã«ã¯åURIã®RPSã»ããã©ãŒãã³ã¹ã»ãµã¯ã»ã¹ã¬ãŒãã衚瀺ãããŠããŸãããµã¯ã»ã¹ã¬ãŒããæ£åžžã§ããã°ç·ã§è¡šç€ºãããŸãããäœäžããŠããç¶æ
ã ãšèµ€ããã€ã©ã€ãããäžç®ã§ã©ã®ã³ã³ãã³ãã«ç°åžžãèµ·ããŠããããããããã«ãªã£ãŠããŸãã äžèšã®ã€ã¡ãŒãžã«è¡šç€ºãããŠããŸããããCPUãã¡ã¢ãªã®ãªãœãŒã¹ã®ç¶æ
ãPodæ°ã®æšç§»ãªã©ã®ããã«ãçšæãããŠãããã¢ããªéçºè
ã¯ãã®ããã·ã¥ããŒããèŠãã ãã§ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãææ¡ããããšãã§ããŸããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®workeræ°ãªã©ã確èªããããšãã§ããŸãã ã©ã®ããã«å®çŸããã URIæ¯ã®ãµã¯ã»ã¹ã¬ãŒãã®å¯èŠåã¯ã以äžã®ãããªã¹ãããã§å®çŸããŠããŸãã ã³ã³ããããåºåãããã¢ã¯ã»ã¹ãã°ãFluentdã«ãŠéèšãPrometheusã«ã¡ããªã¯ã¹ãéä¿¡ ããã·ã¥ããŒãã§äœ¿çšããã¡ããªã¯ã¹ãRecording Ruleã§äºãéèšããŠçšæããŠãã Grafanaã®ããã·ã¥ããŒãã§éèšããã¡ããªã¯ã¹ãå¯èŠåãã ã¢ã©ãŒãã«ãŒã«ãèšå®ãã ãŸããã³ã³ãããåºåããã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ã»ã¹ãã°ãFluentdã«ãŠéèšããPrometheusã«ã¡ããªã¯ã¹ãéä¿¡ããŠããŸãã ããã§äœæãããã¡ããªã¯ã¹ã¯ã©ãã«ã«URIãHTTPã¡ãœãããæã¡ããªã¯ãšã¹ããèå¥ã§ããããã«ããŠããŸãã ã¡ããªã¯ã¹ã¿ã€ãã¯ãã¹ãã°ã©ã ãå©çšããŠãããããã©ãŒãã³ã¹ãããŒã»ã³ã¿ã€ã«å€ã§è¡šç€ºããã®ã«é©ãã圢ã«ãªã£ãŠããŸãã ããã§æ³šæãããã®ããå
šãŠã®URIãã©ãã«ã«å«ãã§ããŸããšã«ãŒãã£ããªãã£ãé«ããªãPrometheusã®ãªãœãŒã¹ã倧éã«æ¶è²»ããŠããŸããŸãã URIã«IDãšãã£ããã©ã¡ãŒã¿ãå«ãŸããŠããå Žåãããã ãã§ç¡æ°ã®URIãçãŸããŠããŸããŸãã®ã§ããããªããªãããã«ãã¢ããªã±ãŒã·ã§ã³æ¯ã«ãã©ãã«ãšããŠç»é²ã§ããURIã®ãã¬ãã£ãã¯ã¹ãªã¹ãããå®çŸ©ããŠãããéèšå¯Ÿè±¡ãšãªãURIãéå®ããŠããŸãã ããã§å¿
èŠæäœéã®ã¡ããªã¯ã¹ã®æºåã¯ã§ããŸããããå®éã¯ãããããŒã¹ã«æ§ã
ãªPromQLåŒãè©äŸ¡ããŠç®çãšããããŒã¿ãåŸãå¿
èŠããããŸããPrometheusã«ã¯ãããããPromQLåŒãè©äŸ¡ããã®çµæãæ°ããªã¡ããªã¯ã¹ãšããŠä¿æããããšãã§ããRecording Ruleãšããæ©èœããããŸãããã®æ©èœãå©çšããå¿
èŠãªããŒã¿ãåãã£ãŠèšç®ããŠããããšã§åŠçã®é«éåãã¯ãã£ãŠããŸãã ã¡ããªã¯ã¹ã®å¯èŠåã«ã¯Grafanaãå©çšããŠããŸãã Grafanaã®ããã·ã¥ããŒãã¯ãUIãå©çšããŠæåã§ããã«ãçµã¿åãããŠæ§ç¯ããããšãå¯èœã§ãããã¢ããªã±ãŒã·ã§ã³æ¯ã«æåã§æ§ç¯ããã®ã¯éçšã®é¢ããèããŠãé¿ããããã®ã§ãã ããã§Grafanaã®ããã·ã¥ããŒããJsonnetã§ã³ãŒã管çããããšã«ããŸããã åœåJsonnetã®çšæã¯éçºè
ãæåã§è¡ã£ãŠããŸããããã³ãŒããžã§ãã¬ãŒã¿ãŒã§ãã keelctl ãéçºãããŠããã¯ãäžèšã®Jsonnetãã¡ã€ã«ãã³ãã³ãäžçºã§èªåçæãããããã«ãªãã容æã«ããã·ã¥ããŒãã®äœæãã§ããããã«ãªããŸããã æåŸã¯ã¢ã©ãŒãã®èšå®ã§ãã éŸå€ã調æŽããããã¢ã©ãŒãçºçæã®Runbookãèšå®ããããšãURIããããã§å¯èœã«ãªããŸãããã¢ã©ãŒãã«ãŒã«ãäžèšãšåæ§ã«Jsonnetã§ç®¡çãããŠãããkeelctlãå©çšããŠéçºè
ã¯å®¹æã«ã¢ã©ãŒãèšå®ãè¡ãããšãã§ããŸãã äœãå€ãã£ãã ã¢ããªã±ãŒã·ã§ã³ã®URIæ¯ã®ãµã¯ã»ã¹ã¬ãŒããå¯èŠåãããçµæãã©ã®ãããªå€åãLIFULLã«ããããããã§ããããïŒ äžçªå€§ããå€ãã£ãã®ã¯ãä»ãŸã§èŠããŠããªãã£ã现ããªäžå
·åãèŠã€ããããã«ãªããŸããã URIæ¯ã«ãµã¯ã»ã¹ã¬ãŒããèšæž¬ã§ããããšã«ãªã£ãããšã§ãããããã®URIåäœã§ã¢ã©ãŒããéç¥ã§ããããã«ãªããŸããã ä»ãŸã§ã¯ãµã€ãå
šäœã®ãµã¯ã»ã¹ã¬ãŒããéŸå€ãå²ããªããšã¢ã©ãŒããéç¥ãããã现ããäžå
·åã¯é²åãããŸããã§ããã ãã¹æ¯ã«ã¢ã©ãŒããé£ã°ãããšãã§ããããã«ãªã£ããããä»ãŸã§èŠéããããŠããå€ãã®äžå
·åãèŠã€ããããšãã§ããŸããã çµæLIFULLã®ãµãŒãã¹ã®å質åäžã«ããªãå¯äžã§ãããšæããŸãã ããã«ãé害調æ»ã®ç¹ã§ãå¹çãäžããçµæãšãªããŸããã åŸæ¥ãé害ãçºçããéã«ããŸãã¯åœ±é¿ç¯å²ã調æ»ããå¿
èŠããããŸããããããã·ã¥ããŒãã確èªããã ãã§ã¢ããªã±ãŒã·ã§ã³ã®ã©ã®éšåã§ãšã©ãŒãçºçããŠããã®ãããã«ææ¡ã§ããããã«ãªã£ãŠããŸãã URIæ¯ã®ã¢ã©ãŒãã«Runbookãèšå®ã§ããããã«ãªã£ãŠããŸãã®ã§ãäŸãã°DBã«ã¢ã¯ã»ã¹ããŠããã³ã³ãã³ãã§ãµã¯ã»ã¹ã¬ãŒããäœäžããŠãããªãã察å¿ããURIã®ã¢ã©ãŒãã«DBã®é害ãçããšãã£ããã³ããèšè¿°ããŠãããšãã£ããããªããšãã§ãã調æ»å¹çãé£èºçã«åäžããŸããã slackã«éç¥ãããã¢ã©ãŒã é害ãã©ã®URIã§çºçããŠããã®ããæç¢ºã«ããããšã§ãé害察å¿ã®ãããŒã«ãå€åãèµ·ããŸããã LIFULL HOME'Sã¯äžã€ã®ã¢ããªã±ãŒã·ã§ã³ã«å€ãã®ã³ã³ãã³ããå«ãŸããŠãããããã管èœããéšçœ²ãå€å²ã«æž¡ããŸãã ä»®ã«é害ãçºçããå Žåãã©ãã®éšåã§é害ãçºçãããã§å¯Ÿå¿ããéšçœ²ãå€ãã£ãŠããŸãã KEELããŒã ãéå®³ãæ€ç¥ãããšããŠãããããã©ãã®éšçœ²ã«å ±åããã°è¯ãã倿ãé£ããå ŽåããããŸããã ããã§URIã®ãã¿ãŒã³ã«ãã£ãŠç®¡èœéšçœ²ãå®çŸ©ããããšã§ãé害çºçæã®ãšã¹ã«ã¬ãŒã·ã§ã³ãç¡é§ãªãè¡ãããšãã§ããããã«ãªããŸããã å
·äœçã«ã¯ãé害ãçºçããéã«Botçµç±ã§GitHubã«é害ãã±ãããäœæãããã®å¯Ÿè±¡URIã«å¯Ÿå¿ããéšçœ²ã®ã©ãã«ãèªåã§ä»äžããŸãã éçºè
ã¯èªåãæå±ããéšçœ²ã®ã©ãã«ãä»äžãããé害ãã±ãããçºè¡ããããšããã®é害ã®èª¿æ»ã»è§£æ¶ã«ãããããšãã£ãé害察å¿ãããŒã確ç«ãããããã«ãªããŸããã èªå起祚ãããissue ãŸãšã LIFULLãæ¯ããç£èŠåºç€ãæ§æããèŠçŽ ã®äžã€ã§ããURIæ¯ã®ãµã¯ã»ã¹ã¬ãŒãå¯èŠåã«ã€ããŠç޹ä»ãããŠããã ããŸããã ã¢ããªã±ãŒã·ã§ã³ã®URIæ¯ã«çްããæ
å ±ãå¯èŠåããããšã§ãä»ãŸã§èŠéããããŠããæãã¬äžå
·åãèŠã€ããããšãã§ããé害çºçæã«ãå¹çè¯ã調æ»ãå¯èœã«ãªããŸããã é害察å¿ãããŒãæŽåãããä»ã§ã¯çްããäžå
·åãèŠéããæ€ç¥ããããŸã察å¿ã§ãããããªäœå¶ãæ§ç¯ãããŸããã çµæãURIæ¯ã®ãµã¯ã»ã¹ã¬ãŒãå¯èŠåãèµ·ç¹ã«BPRã«ç¹ãã圢ã«ãŸã§çºå±ãããããããšãå¬ããæããŸãã KEELããŒã ã¯LIFULLãæ²ãããããããLIFEããFULLã«ããã®å®çŸã«åããŠãLIFULLã®ãã®ã¥ãããå éãããããã®ãã©ãããã©ãŒã ãé©é²ãç¶ããŠããŸããä»åã話ããããŠããã ããæ©èœä»¥å€ã®åãçµã¿ã«ã€ããŠã¯ã以äžã®ãšã³ããªãŒäžèЧãã芧ãã ããã www.lifull.blog æåŸã«LIFULLã®æ¡çšã«ã€ããŠå°ãè§ŠããããŠãã ããã LIFULLã§ã¯ããããããLIFEããFULLã«ããã«å®çŸãç®æããŠå
±ã«åããŠããã ãã仲éãåéããŠããŸãã ã«ãžã¥ã¢ã«é¢è«ãšãã圢ã§ããŸãã¯æ°è»œã«ã話ããããŠããã ãããšããããšãå¯èœã§ãã®ã§ããèå³ãããæ¹ã¯ä»¥äžã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ïŒLtechéå¶ããŒã ã®äºäžã§ããä»åã¯2021幎12æ15æ¥ïŒæ°ŽïŒã«éå¬ãããKubernetesãçšããã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã®åãçµã¿ãã«ã€ããŠã¬ããŒãããŸãã lifull.connpass.com Ltechãšã¯ Ltech(ãšã«ããã¯)ãšã¯ãLIFULLããéããããæè¡æ¬²ãFULLã«ããã€ãã³ãã§ããç¹å®ã®æè¡ã«åãããæ§ã
ãªæè¡ã®è©±ãå±éããŠããäºå®ã§ãã LIFULLã®å
šç€Ÿã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ KEEL ã«ã€ã㊠LIFULLã§ã¯KubernetesããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ãå
補ããŠãããKEELãšåŒãã§ããŸããKEELã¯ç€Ÿå
ã§ãã§ã«3å¹Žã®æ¬çªç°å¢ã§ã®éçšå®çžŸããããLIFULL HOME'Sã®å€§éšåã¯KEELäžã§çšŒåããŠããŸãã LIFULL HOME'Sã®å
šãã©ãã£ãã¯ã®çŽ9å²ããã®KEELäžã§çšŒåããŠããã¢ããªã±ãŒã·ã§ã³ã«ããåŠçãããŠããŸãã ãããªLIFULLå
補PaaSã§ããKEELããªãçãŸããã®ãããããŠã©ã®ãããªèª²é¡ã解決ããããšããŠããã®ãã«ã€ããŠã®ã話ã§ãã LIFULLã®å
šç€Ÿã¢ãããªã±ãŒã·ã§ã³å®è¡åºç€ KEEL ã«ã€ã㊠from LIFULL Co., Ltd. www.slideshare.net KEELãã§ãã以åã®LIFULLã§ã¯ã ãã€ã¯ããµãŒãã¹åãæšé²ããŠãããããããã®ã¢ããªã±ãŒã·ã§ã³ã皌åããŠããŸããããã€ã¯ããµãŒãã¹åãé²ããŠããããšã«ãã£ãŠéçºå¹çã®åäžã«æåããäžæ¹ã§ãç£èŠããããã€ã®ä»çµã¿ã®ãè»èŒªã®åçºæããé »çºãããªã©ãæ°ããªèª²é¡ãé¡åšåããŠããŸããããããã®èª²é¡ã解決ããããã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®äžå€®éæš©åãæ±ºæããã®ãKEELã®å§ãŸãã§ããã KEELã¯ãã§ã«éçºè
ã®è² æ
ã軜æžããå€ãã®äŸ¿å©ãªæ©èœãæããŠããŸãããæŽã«éçºå¹çã®åäžãå®çŸããæ©èœã远å ãããããKEELããŒã ã§ã¯éçºè
ãžã®ãã¢ãªã³ã°ãªã©ãéœåºŠè¡ãã远å ããæ©èœã®éžå®ãåªå
床ä»ããè¡ãªã£ãŠããŸãã ç§ãLIFULLã®éçºè
ã®1人ãšããŠãä»åŸã®æ©èœè¿œå ãæ¥œãã¿ã ãšæ¹ããŠæããçºè¡šã§ããïŒ Kubernetesã»ãã¥ãªãã£ã®æ©ãæ¹ LIFULLã§ã¯ãã«ãããã³ãã®Kubernetesã¯ã©ã¹ã¿ãéçšããŠããŸããæ§ã
ãªã¢ããªã±ãŒã·ã§ã³ã1ã€ã®ã¯ã©ã¹ã¿ã«æ··åšããäžã§ãOPA GatekeeperãConftest ãçšããŠãã»ãã¥ã¢ãªKubernetesã¯ã©ã¹ã¿ãå®çŸããŠããæ¹æ³ã«ã€ããŠã®ã話ã§ããã Kubernetesã»ãã¥ãªãã£ã®æ©ãæ¹ from LIFULL Co., Ltd. www.slideshare.net 以åã®KEELã§ã¯ãäžé©åãªèšå®ãæªæã®ããèšå®ãå«ããããã§ã¹ãããããã€å¯èœãªç¶æ
ã«ãªã£ãŠããŸããããŸãããããã§ã¹ãã®ãã§ãã¯ã人åã§è¡ãªã£ãŠããããããã§ãã¯ã®ã³ã¹ããå°ãªããããŸããããèŠèœãšãã®å¯èœæ§ããŒãã«ã§ããŠããŸããã§ããã ã»ãã¥ãªãã£ã«ã€ããŠã¯æ
å ±ã®æµãããšãŠãæ©ããéçºè
å
šå¡ãå
šãŠãçè§£ããããšã¯ãšãŠãå°é£ã§ããããGitHub Actions ã§ Pull Request ããšã«ãããã§ã¹ãã®ãã§ãã¯ãèªååããããšã§ããã§ãã¯ã®ã³ã¹ããã»ãŒ lint ã®å®è¡æéã ãã«ãªãããŸãèŠèœãšãã®ãªã¹ã¯ããŒãã«ããããšãã§ããŸãããéçºè
ãæããäžå®ã®å€§éšåãè§£æ¶ããããšãã§ããŠããŠãç§ãLIFULLã®éçºè
ã®äžäººãšããŠãã®æ©æµã享åããããšãã§ããŠããŸãã Kubernetesã¯ã©ã¹ã¿ããŒãžã§ã³ã¢ãããæ¯ããæè¡ LIFULLã®Kubernetesã¯ã©ã¹ã¿ã§ã¯ãå®å
šã«ããŒãžã§ã³ã¢ãããè¡ãããã«Kubernetesã¯ã©ã¹ã¿æ§ç¯ãšE2Eãã¹ãã®èªååãè¡ã£ãŠããŸãããŸãAdmission Webhookãå©çšãåŸæ¹äºæãä¿ã¡ãªããããŒãžã§ã³ã¢ãããè¡ãä»çµã¿ãå°å
¥ããŠããŸãããããã®èªååã®ææ³ã«ã€ããŠã®ã話ã§ããã Kubernetesã¯ã©ã¹ã¿ãããŒã·ãã§ã³ã¢ããããæ¯ããæè¡ from LIFULL Co., Ltd. www.slideshare.net ã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠåã£ãŠãåããªãã®ãããŒãžã§ã³ã¢ããããã®ãããªéçšäœæ¥ã¯ãã¹ãèš±ãããªãçºãé »ç¹ã«è¡ãããšãé¿ããã¡ã«ãªã£ãŠããŸããŸãããŸãã¡ã³ããŒå
¥ãæ¿ãã§ã®äœæ¥æé ã®åŒç¶ããªã©ãããŸãããããèŠåŽããã±ãŒã¹ã¯å°ãªããªãã§ãããã äœæ¥æé ã®ã¹ã¯ãªããåã«ãã£ãŠãšã«ããæäœæ¥ããªããã誰ã§ãäœã³ã¹ãé«é »åºŠã§ããŒãžã§ã³ã¢ããäœæ¥ãã§ããããã«ããããšã¯ãå®å
šãªã¢ããªã±ãŒã·ã§ã³éçšãããŠããäžã§ã¯ãKubernetesã¯ã©ã¹ã¿ä»¥å€ã«ãå¿
èŠäžå¯æ¬ ãªããšã ãšæããŸããèªåãã¹ããå«ããèªåã¢ããããŒãã®ä»çµã¿ãäœã£ãŠãå¥å
šãªãµãŒãã¹éçšãæŽã«é²ããŠãããããšæããããããçºè¡šã§ããïŒ ãŸãšã ä»åã¯LIFULLã®å
補ã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã§ããKEELã«ã€ããŠã3åã®ãšã³ãžãã¢ã«çºè¡šããã ããŸãããKEELã«ã€ããŠã¯ããŒã ã¡ã³ããŒãéæ LIFULL Creators Blog ã«ãŠæ
å ±ãçºä¿¡ããŠããŸããèå³ãæã£ãŠããã ããæ¹ã«ã¯ãã²1床ã芧ããã ãããèšäºã°ããã«ãªã£ãŠããŸãïŒ www.lifull.blog Ltechã§ã¯ãLIFULLã®ãšã³ãžãã¢ãäžå¿ã«ãªã£ãŠçæ§ã®æè¡æ¬²ãæºããããå®äŸã亀ããå匷äŒãéå¬ããŠããŸããä»åŸã Ltech ãç©æ¥µçã«éå¬ããŠãããŸãã®ã§ããã²æ°ã«ãªã£ãæ¹ã¯ãconnpass ã§ LIFULL ã®ã¡ã³ããŒç»é²ããããããé¡ãããŸãïŒ lifull.connpass.com ãŸããLIFULLã§ã¯ä»å玹ä»ããã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ã«é¢ãããã®ãå«ããæ°å€ãã®è·çš®ã®ä»²éãåéããŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ãã¯ãããžãŒæ¬éšã®çžéЬã§ãã奜ã㪠Web API 㯠Window.requestAnimationFrame() ã§ãã ç§ãçŸåšæå±ããŠããã°ã«ãŒãã§ã¯ãåŒç€Ÿã®ã¡ã€ã³äºæ¥ã§ãã LIFULL HOME'S ã«ãããéçºå¹çã®æ¹åãªã©ãè¡ã£ãŠããŸãã ç§ã¯ããã³ããšã³ãã®éçºç°å¢ã®æ¹åãªã©ãäž»ã«æ
åœããŠãããŸãã ä»åã¯ãLIFULL HOME'S ã® JavaScript éçºç°å¢ã®ãã«ãããesbuild ã䜿ã£ãŠãã«ããããšãããåœç€Ÿæ¯ã§ 55 åé«éã«ãªã£ãäºäŸã«ã€ããŠç޹ä»ããããŸãã ç®æ¬¡ ãµã㪠Before/After ã¯ããã« åŸæ¥ã®éçºç°å¢ã«ã€ã㊠éçºç°å¢ã®ã€ã³ã¹ã¿ã³ã¹ã¹ããã¯äžåååé¡ npm run dev é
ãããåé¡ esbuild ãšã¯ïŒ éçºäžå€§å€ã ã£ããšãã/ã¡ãã£ãšããã¯ãããšãã esbuild ã«åœæ watch option ããªãã£ã ãããã¬ãã« this ã®ã¹ã³ãŒãåé¡ UMD ã©ã€ã¯ã§å®è¡ç°å¢æ¯ã« global object ã倿ããã©ã€ãã©ãªã®ã³ãŒããå£ãã ãããã« ãµããª æ¬æ¹ä¿®ä»¥åããã³ãã©ãŒ ã«ã¯ Rollup ã䜿ããtranspiler 㯠IE11 ããã«èšå® æ¬æ¹ä¿®æç¹ã§ 401 æ¬ã®ãã³ãã«ãã¡ã€ã« ãäœæïŒæŽå²ççµç·¯ïŒ æ¬æ¹ä¿®ä»¥åã npm run dev ã³ãã³ãããå
šãŠã®ãã³ãã«ã® warmup ãçµãããŸã§ 220sec(m4.4xlarge) 䜿çšã¡ã¢ãª 3.7GB/process æ¬æ¹ä¿®ä»¥åŸã npm run dev ã³ãã³ããã esbuild ã§å
šãŠã®ãã³ãã«ã® warmup ãçµãããŸã§ 4sec(m4.4xlarge) 䜿çšã¡ã¢ãª 685MB/process Before/After Before After ãã³ãã©ãŒ Rollup esbuild time 220 sec ð¢ 4 sec ð memory 3.7 GB 685 MB ã¯ããã« LIFULL HOME'S ã¯åŒç€Ÿã§ãã£ãšãéçºãçããªã¢ããªã±ãŒã·ã§ã³ïŒRepositoryïŒã§ãã Commit æ°ã Contributor æ°ã¯åŒç€Ÿã§ãã£ãšãå€ãããŸãéçºã®æŽå²ãæ¯èŒçã«é·ãïŒ10 幎ïŒéšé¡ã«å
¥ããŸãã ãããŸã§ããããã³ããšã³ãã®éçºç°å¢ã®æ¹åããšããæèã§ãäœåºŠãèšäºãæžããŠããã®ã§ããæéããéã«èªãã§ããã ãããšåã³ãŸããç§ãã 9 幎ãè¶
ããŠéçºãç¶ã LIFULL HOME'S ã® Web ããã³ããšã³ãéçºç°å¢ã®æ¹å - LIFULL Creators Blog Node.js ã§ Twig ã®ããªããã»ããµãŒãäœã£ãŠèšèªã®æ©èœæ¡åŒµãããŠã¿ã話 - LIFULL Creators Blog åŸæ¥ã®éçºç°å¢ã«ã€ã㊠以åã®èšäºã§è§£èª¬ãããŠããã ãããè¿ä»£åãã«ãããããã³ããšã³ãã«ããããªãã«ã¢ãã³ãªéçºç°å¢ãæŽããŸããã è¿ä»£åãè¡ã£ãŠå
šãŠãããããŒãšã³ãã ã£ãããšãããšããã§ã¯ãªããæ°ããã¢ããå°å
¥ããããšã§éšåçã«äžéœåãçããŠããç®æããããŸããã éçºç°å¢ã®ã€ã³ã¹ã¿ã³ã¹ã¹ããã¯äžåååé¡ npm run dev é
ãããåé¡ éçºç°å¢ã®ã€ã³ã¹ã¿ã³ã¹ã¹ããã¯äžåååé¡ çŸåš LIFULL HOME'S ã®éçºç°å¢ã¯ãäžã€ã®éçºãµãŒãã«å人ã®éçºãã·ã³ãã ssh ããŠéçºããããšããæ¹åŒããšã£ãŠãããããé«äŸ¡ãªåŠçãè¡ããããªããã»ã¹ãéçºç°å¢ã§å¿
èŠãªå Žåãéçºãã·ã³äžã§ã¯ã ãã°ã€ã³ãŠãŒã¶(éçºäžã®ãŠãŒã¶)*é«äŸ¡ãªåŠç ãã ã該åœãã·ã³äžã§ãªãœãŒã¹ãå¿
èŠã«ãªã£ãŠããŸããŸãã Rollup ãå°å
¥ããããšã§ãJS ã®äŸåé¢ä¿ãæç¢ºã«ãªãæ§ã
ãªããŒã«ã®å©çšãå¯èœã«ãªã£ãåé¢ãåœç¶ãã³ãã«ã minify ãšãã£ãæ¯èŒçã«é«äŸ¡ãªæäœãå¿
èŠã«ãªã£ãŠããŸããŸããã ãããŸã§ã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã§ã¯äžååã§ãã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®å€æŽãäœåãªããããããšãèšæ¶ã«ããéãã§ 2,3 åãããŸãã npm run dev é
ãããåé¡ ãããŸã§ã¯æŽå²ççµç·¯ã«ãã 401 æ¬ã®ãã³ãã«ãã¡ã€ã«ãçŽåã§äœæ ããŠããããã220sec(m4.4xlarge) ã»ã© warmup ã«æéãããã£ãŠãããéçºæã®åé¡ã®çš®ãšãªã£ãŠããŸããã JavaScript(Node.js) ã¯ãåç¥ã®éãã·ã³ã°ã«ã¹ã¬ããã®å®è¡ã¢ãã«ã§ããããããããã£ã AST ããã©ããŒã¹ãããæååã®çœ®æãªã©ãé«äŸ¡ãªèšç®åŠçãèŠæãšããŸãã The Node.js Event Lvop, Timers, and process.nextTick() | Node.js Node.js ã ãã§é«äŸ¡ãªèšç®ãåŠçãããå Žåã jest-worker ãªã©ã§ worker-thread ãé§äœ¿ããŠãã©ã¬ã«ã§å®è¡ããããšã§å®æéã®ççž®ãªã©ãå¯èœã§ãã Rollup ã«ã JS API ãååšããŠããã®ã§ãããããšæãã°ã§ãããã§ãããã·ã³ãã«ã«ãããŸã§ãã£ãŠããŸããã§ããã ãããªããšãæã£ãŠããäžãJS ãã³ãã«çãæºãããæåŸ
ã®æ°æãšã㊠esbuild ã颯çœãšç»å ŽããŸããã åæããååãèŠå®ãç¶ãããããã¯ã·ã§ã³ã§ãããããªããšãç®èŠã§ç¢ºèªããã®ã§ãesbuild ã«ãã©ã€ããŠã¿ãããšå¥®ãç«ã¡ãŸããã esbuild ãšã¯ïŒ Figma ã® CTO ã§ãã Evan æ°ãäœæãããGo 補㮠JS ãã³ãã©ãŒã§ããJS ãšãã£ãŠããŸãããããã©ã«ã(ç¹ã«èšå®äžèŠ)ã§ TypeScript ã®ãã©ã³ã¹ãã€ã«/ãã³ãã«ãã tsconfig.json ããããªã«è§£éããå®è¡ããŠãããŸãã esbuild - An extremely fast JavaScript bundler An extremely fast JavaScript bundler â ãšè©ãããŠããéããæ¢åã® JS ãã³ãã©ãŒ(webpack/rollup/parcel)ãšæ¯ã¹ãŠãã³ãããŒã¯ã®ã¹ã³ã¢ã§ 10-100 åã»ã©é«éã§ãã Snowpack ã Vite ãšãã£ãã¢ãã³ãªãã³ãã©ãŒã«ãæ¡çšãããŠãããã³ãã©ãŒã§ãéåžžã«é«éã§ããããšã§ç¥ãããŠããŸãã ãã¿ãã¬(ãšããããã§ã«äžã§ãæžããŠãã®ã§ãã¬ãæªããã§ãã)ã«ãªããŸãããåœç€Ÿæ¯ã§ã Rollup ãã esbuild ãžã®ç§»è¡ã§ 55 åçšåºŠé«é ã«ãªããŸããã ãªããããªé床ãåºããŠããã®ããšãããšãç°¡åã«ãŸãšãããšäžŠè¡åŠçãšã¡ã¢ãªå¹çãé«åºŠã«é
æ
®ãããèšèšã§ãã«ã¹ã¯ã©ããã§èšè¿°ãããã©ã€ãã©ãªã ãããšããæãã§ãã äŸãã°ãJS ã®ãã³ãã©ãŒã¯ã³ãŒãã® parser/generator 㯠3rd party ã®ã©ã€ãã©ãªã«äŸåããŠããããŸã transpiler ã minifier ãããããå¥ã®ã©ã€ãã©ãªããã©ã°ã€ã³ãšããŠæ©èœã远å ã§æäŸããŠãã圢ãå€ããšæããŸãã ããããã®ã©ã€ãã©ãªã¯ããããã®äž»ããç®çããããå
šãŠã®ã©ã€ãã©ãªãããã©ãŒãã³ã¹ãæåªå
ãšããŠããããã§ã¯ãããŸããã esbuild 㯠read/parse/traverse/compile/minify/generate å
šãŠã®æ©èœãåããŠãããããã©ã€ãã©ãªéã® I/O 調æŽã®ããã ããªäžèŠãªããŒã¿æ§é ã®ã³ããŒãå€éã« AST ãææ»ãããªãŒããŒããããªã©ã極åæããããšã§ããã®å§åçãªããã©ãŒãã³ã¹ãå®çŸããŠããŸãã 詳ããç¥ãããæ¹ã¯äžèšãªã³ã¯å
ã®èšäºãã芧ãã ããããã詳现ãã確èªããã ããŸãã Why is esbuild fast? - esbuild FAQ ãŸããesbuild 㯠ES6(ES2015) 以éã®ã³ãŒãããçæã§ããªããšããç¹åŸŽããããŸããã¢ãã³ãªæ§æã®ã¿ããµããŒãããããšã§ãé床ãä¿ã£ãŠãããšããåŽé¢ããããŸãããã£ãŠ IE 察å¿ãªã©ãå¿
é ãªå Žå esbuild ã¯å©çšã§ããŸããã(ãã³ãã«åŸã®ã³ãŒããå床 Babel ã«ããããªã©ã®å¯Ÿå¿ã¯å¯èœã§ãããesbuild åäœã§ã®æ©èœå®éã¯ã§ããªããšããæå³ã§ãã) Lowering for ES5? · Issue #297 · evanw/esbuild LIFULL HOME'S ã§ã¯äŸç¶ãšã㊠IE11 ããµããŒãããŠããŸããã§ããéçºç°å¢ã§ã¯ãéçºã®æã¯éçºè
ã¯ã¿ããªã¢ãã³ãªãã©ãŠã¶ã䜿ã£ãŠããã¯ãã ãšããããšãæ
ä¿ã«ããšããããéçºç°å¢ã«ã ãå
¥ããŠã¿ãããšããããšã§ãäœæ¥ã«åãæããããšã«ããŸããã éçºäžå€§å€ã ã£ããšãã/ã¡ãã£ãšããã¯ãããšãã esbuild ã«åœæ watch option ããªãã£ã äœæ¥ãéå§ããã¿ã€ãã³ã°ã§ã¯ãesbuild ã¯ãã³ãã©ãŒãšããŠã¯ãããŸã§å€ãã®æ©èœãæã£ãŠããŸããã§ãããCLI ã JS API ããã¯ã³ã·ã§ããã§ãã³ãã«ã§ããã ãã§ããããããã£ãã®ã§ããããã¡ã€ã«ã®å€æŽå·®åãç£èŠãã倿Žããã£ãã¿ã€ãã³ã°ã§å床 build ãèµ°ãããããã watch ã¢ãŒããååšããªãã£ãã®ã§ããã®èŸºã¯ chokidar ãªã©ã§ watch ã¢ãŒããã©ãããããããªåŠçãæžããŠæºè¶³ã㊠PR ãæž©ããŠãããšãããå
¬åŒãã watch ãªãã·ã§ã³ãç»å Žããã®ã§ãã®ã³ãŒãã¯æ¥ã®ç®ãèŠãããšããªããŠå®å µããŠããŸãã ãããã¬ãã« this ã®ã¹ã³ãŒãåé¡ esbuild ã¯ãã®åã®éã ESM(ECMAScript Module) åãã®ã¢ãžã¥ãŒã«ãã³ãã©ãŒã§ãããããcontext é¢é£ã§ patch ãããŠãå¿
èŠããããŸããã ESM ã§ã¯ãããã¬ãã«(global context)ã® this 㯠undefined ãšè§£éãããŸãã ãã®ãããesbuild ãåœç¶åãæ¯ãèããããŸãã Bug: global this is optimized to void 0, which will lead to runtime errors. · Issue #1225 · evanw/esbuild ããããå€ãããåããŠãæã
ã®ã³ãŒã㯠ESM ãåæãšããŠããããäžéšã®ãã¡ã€ã«ã§ã¯ä»¥äžã®äŸã®ããã«ãããã¬ãã«ã® this ã window ã§ããããšãåæã«ããã³ãŒããå«ãŸããŠããããšãããããŸããã ( function (win) { // do something } )( this ); ãããã£ãã³ãŒããè»äžŠã¿ undefined ã«ãªã£ãŠããŸãããã®ãŸãŸã§ã¯åããªãã³ãŒããå€ããããŸããã ããã§ ãããã¬ãã«ã® context ã window ã§ bind ãã颿°ã injection ãããã©ã°ã€ã³ ãæžããŸããã esbuild - Plugins ãã©ã°ã€ã³ã®ã³ãŒãã®èãšãªãç®æãäžéšæç²ããŸããããããªæãã§å¿
èŠãªãã¡ã€ã«ã«å¯Ÿã㊠const banner = "(function () { " ; const footer = " \n }).bind(window)();" ; // ........... // ãªããããããã£ãŠ // ........... build.onLoad( { filter: /.*/ } , async (args) => { const path = args.path; const fileBody = await fsp.readFile(path, "utf-8" ); if (!needWindowCtxWrap(fileBody, path)) { return { contents: fileBody, loader: "js" , } ; } const contents = `$ { banner } $ { fileBody } $ { footer } `; return { contents, loader: "js" , } ; } ); ãã®ãã©ã°ã€ã³ãæãããšã§ãå
çšã®ã³ãŒã㯠( function () { ( function (win) { // do something } )( this ); } .bind( window )()); ãšãªããããã«ãã£ãŠããã©ã°ã€ã³ é©å¿åã«ãããã¬ãã«ã§ãã£ã contextã㯠window ã§ããããšã確å®ããŸããããã«ãã£ãŠæé»ïŒïŒïŒã®å€æã¯è¡ããããæåŸ
éã window ãè§£éã§ããããã«ãªããŸããã ãŸããäžå¿ esbuild ã«ã Rollup ã§ãããšããã® context ãªãã·ã§ã³ ã®ãã㪠--define ãšãããªãã·ã§ã³ããããããã«ãã£ãŠ this ã®å€ãæžãæããããããªã®ã§ãããåæã¯ this ã« window ãæå®ããããšã¯ã§ããŸããã§ããã ããã«é¢ããŠãissue ã§èµ·ç¥šããŠãããçŸåšã¯ window ã®æå®ãã§ããããã«ãªã£ãŠããããã§ããããã¡ãã¯æå®ããäžèšã®ãã©ã°ã€ã³ãåŒãç¶ãå©çšããŠããŸãã [feat] optional global context setting in ESM #1361 UMD ã©ã€ã¯ã§å®è¡ç°å¢æ¯ã« global object ã倿ããã©ã€ãã©ãªã®ã³ãŒããå£ãã LIFULL HOME'S ã®ã³ãŒã矀ã®äžã®ã©ã€ãã©ãªã«ã¯ãæŽå²çãªçç±ã§ npm ããã§ã¯ãªãå
éšçã«ãœãŒã¹ã³ãŒããæ±ããŠãããã®ãããã€ãååšããŠããããã®äžã«ã¯ UMD ã©ã€ã¯ãªåœ¢åŒã®å®£èšãå€ããããŸããã UMD ã¯ãå®è¡ç°å¢ã«ãã£ãŠã¢ãžã¥ãŒã«ãã©ã®ããã«ãšã¯ã¹ããŒããããããŠããŒããµã«ã«æ±ºå®ããæ©æ§ã§ãã æ±ºå®ããžãã¯ã« exports 倿°ã®ååšç¢ºèªãå«ãŸããŠãããããååšããå Žå㯠Node ç°å¢ã ãšè§£éãããŠããŸããŸãã ç§ãã¡ã®æ±ãããã³ãŒãã¯ãã©ãŠã¶åãã®ã³ãŒãã ã£ãã®ã§ãããesbuild ã§ãã³ãã«ããéã«æ¿å
¥ãããã³ãŒãã« exports 倿°ãå«ãŸããŠããããã誀ã£ãŠè§£éããããšããåé¡ãçºçããŸããã ããã«ã€ããŠã ãã©ã°ã€ã³ ã«ãã£ãŠè§£æ¶æžã¿ã§ãdummy ã®åŒæ°ããããã¬ãã« IIFE ã«å¯ŸããŠä»äžããããšã§æ¬äŒŒçã«å
šã¹ã³ãŒãã«ãããŠãããã®å€æ°ã undefined ãšãªãã¹ã(ã€ãŸã window ãæ£ãã倿ãããã¹ã)察å¿ããŸããã const banner = "(function (module, exports, require) { " ; const footer = " \n }).bind(window)();" ; ãã®ããã« exports ã®å€æ°ãååšããå Žåãesbuild ãšããŠã¯ exports ãªããžã§ã¯ãã injection ããããšãã§ãããååã®è¡çªãé¿ããããšãã§ããŸãã LIFULL HOME'S ã®ã³ãŒãã¯å
šãŠãã©ãŠã¶ã§ã®å®è¡ãæåŸ
ãããŠããããããã®ããã«å¥ç°å¢ã§æªããããããªå€æ°ã¯è»äžŠã¿åŒ·å¶çã«å
šã¹ã³ãŒãã§ undefined ãšããããšã§ããšãªããåŸãŠããŸãã ãããã« é床ãšããã©ãŒãã³ã¹ã¯å§åçã«æ£çŸ©ã§ããããšã esbuild ã§åèªèãããŠããããŸããã esbuild 㯠ãã©ã°ã€ã³ ã®æ¡åŒµæ§ãé«ããRollup ãªã©æ¢åã®ãã³ãã©ãŒã§è€éãªãã«ããçµãã çµéšãããããã³ãã©ãŒã®ç¹æ§ãç¹æã®æåãªã©ã«ç¥èŠãããå Žåãããã¥ã¡ã³ããèªãã°ãã¡ããé£ãªãå©çšã§ãããšæããŸãã 幞ããLIFULL HOME'S ã®æ¢åã® JS ãã«ãã¯ãããŸã§è€éã§ã¯ãªãã£ãã®ã§ãä»åã¯æ¯èŒçã·ã³ãã«ã«åãŸããŸãããããããžã§ã¯ãã«ãã£ãŠã¯ãã©ã°ã€ã³ãªã©ããã€ãçšæããå¿
èŠããããããããŸãããããã®åŽåã«èŠåãã ãã®èŠè¿ããåŸããããšæããŸãã®ã§ãesbuildãããããã§ãïŒ æåŸã«ãLIFULL ã§ã¯äžç·ã«åã仲éãåéããŠããŸãããããããã°ãã¡ããåãããŠã芧ãã ããã ããšã³ãžãã¢ãåéæ±äººäžèЧ | æ ªåŒäŒç€Ÿ LIFULL ããšã³ãžãã¢ãã«ãžã¥ã¢ã«é¢è« | æ ªåŒäŒç€Ÿ LIFULL
ã¿ãªããããã«ã¡ã¯ã å質æ¹åæšé²ãŠãããQAã°ã«ãŒãã§QAãšã³ãžãã¢ãããŠãã飯æ³ã§ãã ä»åã¯æè¡çãªè©±ããã¡ãã£ãšé¢ããŠããã®ã§ããã 瀟å
åãã®ãµãŒãã¹ãåºããããã«å·¥å€«ãã話ãããããšæããŸãã æ°ããããŒã«å°å
¥ãã¢ã€ãã¢æµžéã§èŠåŽããçµéšãããæ¹ã«ã¯é¢çœã話ãããããŸããã ãæéãããã°æ¯éèªãã§ã¿ãŠãã ããã çµè« ãFEARLESS CHANGE ã¢ãžã£ã€ã«ã«å¹ã ã¢ã€ãã¢ãçµç¹ã«åºããããã®48ãã¿ãŒã³ããåèã«ããã€ãã¢ãããŒããè¡ã£ãçµæããµãŒãã¹ã®å©çšã»çžè«ãå¢ããŸããã æ°ãããµãŒãã¹ãäœãæã¯ãèšç»æããã©ãåºãããã»äœ¿ã£ãŠãããããã«ãããèããã¹ãã§ããããšãä»ååŸãããæèšã§ãã QAã°ã«ãŒããå±éãããµãŒãã¹ QAã°ã«ãŒãã§ã¯LIFULLãå±éãããããã¯ãã®å質ãåäžãããããšãç®çã«ç€Ÿå
ã®éçºã»äŒç»ã¡ã³ããŒåãã«æ§ã
ãªãµãŒãã¹ãæäŸããŠããŸãã ä»ã®èšäºã§ã玹ä»ããŠããŸãã®ã§èå³ãããã°èªãã§ã¿ãŠãã ããã 本番障害からテストのヒントを抽出して活用する - LIFULL Creators Blog 新卒エンジニアのテストワークショップではテストを考えられるようになってもらっている - LIFULL Creators Blog プロジェクトに直接的に関わらないQAのアプローチ - LIFULL Creators Blog LIFULLのQAの取り組みについて - LIFULL Creators Blog æ°ãããµãŒãã¹ããªããªã䜿ã£ãŠããããªã çããããæ°ããããŒã«ã®å°å
¥ãã¢ã€ãã¢ã®æµžéãäžã
é²ãŸãã«èŠåŽããçµéšã¯ãããŸãããïŒ QAã°ã«ãŒãã§ããè²ã
èããŠæ°ãããµãŒãã¹ãäœã£ãŠç€Ÿå
ãžå
¬éã»åç¥ããã®ã§ãããæåã¯å
šç¶äœ¿ã£ãŠããããŸããã ãã®èª²é¡ã¯QAã°ã«ãŒãã®é·å¹Žã®æ©ã¿ã§ãæè¿ãæ°ãããµãŒãã¹ãäœããŸããããäœã£ãŠéãç¡ãé ã¯äŸé Œãæ¥ãªããŠå°ã£ãŠããŸããã ãµãŒãã¹ã浞éãããæ¹æ³ãèãã ããŒã ã¡ã³ããŒããã®ææ¡ã§ãã¢ã€ãã¢ãæ¹æ³è«ãçµç¹ã«åºããã¢ãããŒããæžãããæ¬ ãFEARLESS CHANGE ã¢ãžã£ã€ã«ã«å¹ã ã¢ã€ãã¢ãçµç¹ã«åºããããã®48ãã¿ãŒã³ã ãåèã«ãQAã°ã«ãŒããå±éãããµãŒãã¹ã«é©ãããã¿ãŒã³ãããã¯ã¢ããããŠããå
·äœçãªã¢ã€ãã¢ãèããŸããã 工倫ããçµæ å®è¡ããŠäžçªå¹æããã£ãã®ã¯ãã質åãã©ãŒã ãèšããŠããã§æ°è»œã«çžè«ãæçš¿ã§ããããã«ãããã§ããã æ°è»œãªçžè«ã»è³ªåãåã£æãã§ãµãŒãã¹ãå©çšããŠãããæ©äŒãå¢ããã®ãããããŸããã ãã 宣äŒããã ãã§ã¯ç¡ãããµãŒãã¹ã®å©çšã·ãŒã³ãæ¡ä»¶ãçžè«ã»è³ªåã§ããå Žããããšã€ã¡ãŒãžãã€ãããããªãã ãµãŒãã¹ã®å©çšã«ç¹ãããšããããšãããããŸããã
æ€çŽ¢ãšã³ãžã³ããŒã ã®å¯ºäºã§ãã21åæ°åãšã³ãžãã¢ã§ãã æ°ã¥ãã°å
¥ç€Ÿããåå¹Žãæ¬é
å±ããã¯çŽ4ã¶æãçµéããŠãå
¥ç€ŸåŸæåã®åæãçµäºããŸããã ã¡ããã©ç¯ç®ã®ããæ©äŒãªã®ã§ãäž»ã«é
å±ãããŠããä»ãŸã§ãã£ãŠããããšãæ¯ãè¿ãã€ã€ã䜿çšããæè¡ããã£ãšäºåã«å匷ããŠããã°è¯ãã£ãããšãªã©ãæžããŠãããããªãšæããŸãã ä»åŸãšã³ãžãã¢ãšããŠå
¥ç€ŸãèããŠããã¿ãªããããåå¿è
ãšã³ãžãã¢ã®ã仲éãããã¡ãã£ãšæ°ã¥ããåŸãããèšäºãç®æããŸãã â»ãšã¯èšãã€ã€ä»åã¯ãã¯ãã«ã«ãªè©±ã¯ã»ãšãã©åºãŠããŸããã®ã§ãããèªã¿ç©ãšããŠèªãã§ããã ããããšæããŸãã å
¥ç€ŸãŸã§ã®è©± åŠçæä»£ã¯èªç¥å¿çåŠã®åéã«åŒ·ååŠç¿ãåãå
¥ããç ç©¶ããã£ãŠããŸããã åœæã®ãšã³ãžãã¢çãªèœåã¯Pythonãå©çšããã·ãã¥ã¬ãŒã·ã§ã³ãããŒã¿è§£æãç ç©¶ã§æ±ã£ãŠããã®ãšãç«¶æããã°ã©ãã³ã°ãå°ããã£ãŠãã(ç·)ãããã§ãäœãã§ããªããšããããã§ã¯ãªããã©âŠã§ãã³ãŒãæžãã®ã¯æ¥œããïŒïŒãšããæãã§ããã ãŸããWebã¢ããªã®éçºçµéšã¯ã»ãšãã©ãããŸããã§ããããã°ãã§ããã (LIFULLã®æ°åãšã³ãžãã¢ã¯çŽ1ã¶æåã®ç ä¿®ã§å
šå¡ãåºç€ã®åºç€ããåŠãã§Webã¢ããªãäœã£ãŠçºè¡šãããšãã鬌ã«ãªãã¥ã©ã ã«ãªã£ãŠããã®ã§æªçµéšã§ãã°ã£ã¡ãåŠã¹ãŠå®å¿ã§ãïŒ) é
å±åŸã«ãã£ãŠããããš ãããªãšã³ãžãã¢è¶
åå¿è
ã®ç§ã§ãããæ°åãšã³ãžãã¢ç ä¿®ãç¡äºä¿®äºããŠ5ææ«ã«æ€çŽ¢ãšã³ãžã³ããŒã ãžé
å±ãããŸãããä»ãŸã§ãã£ãŠããä»äºã®å
容ã¯äž»ã«ä»¥äžã®éãã§ãã æ€çŽ¢ãšã³ãžã³Solråšãã®æ©èœã®æ¹å å
éšæ©èœã§äœ¿ãããã³ã³ããŒãã³ãã®ããŒãžã§ã³ã¢ãã é害ãçºçãã¥ãããªããããªä»çµã¿ã®è¿œå Solrã®æ°ããŒãžã§ã³ã®æ€èšŒ 倿Žç®æã®èª¿æ» æ°ããŒãžã§ã³ã§åäœãããã©ãŒãã³ã¹ã«åé¡ãªããããã¹ã åŒç€ŸãµãŒãã¹ã®ãLIFULL HOME'Sãã®ã¡ã€ã³æ©èœã§ããç©ä»¶æ€çŽ¢ã¯å
šææ€çŽ¢ãšã³ãžã³ã®Solrãå©çšããŠããŸããæ€çŽ¢ãšã³ãžã³ããŒã ã§ã¯ãŠãŒã¶ãŒã®çæ§ã®ããè¯ãç©ä»¶æ€çŽ¢ãæ€çŽ¢äœéšã®åäžãç®æããŠãSolrãææ°ã®ããŒãžã§ã³ã«ä¿ã£ãããSolré¢é£ã®æ©èœã䜿ãããã圢ã«ã¡ã³ããã³ã¹ããããšãªã©ã«æ¥ã
åãçµãã§ããŸãã æ¥åã§äœ¿çšããæè¡ãããã€ãæãããšã Solr: ãªãŒãã³ãœãŒã¹ã®å
šææ€çŽ¢ãšã³ãžã³ã§ã AWSé¢é£: æ§ã
ãªãªãœãŒã¹ã掻çšããŠSolrã®æ§ç¯ããèªååãŸã§ããããããšã«æŽ»çšããŠããŸã mitamae: ãµãŒããããããžã§ãã³ã°(åæèšå®ã¿ãããªããš)ããã®ã«äœ¿ããŸã goss: YAMLã§ãã¹ããèšè¿°ããŠãµãŒãæ§ç¯ã®ãã¹ããããããšãã§ããŸã Node.js: AWSäžã®Lambdaã®äžèº«ãèšè¿°ããŠããŸã mocha: JSçšã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã§èªåãã¹ãã«äœ¿ãããŸã 现ããæãããšããªããªãã®ã§ããããã®èŸºãã®ãã®ã¯äœ¿çšããŸããã å
¥ç€ŸãããŸã§ã«ããããå©çšããçµéšã¯ã»ãšãã©ãããŸããã§ããã®ã§æ¥åäžã«èŠãã¿ãªããåŠã³ãŸããã人ã¯çã¿ã䌎ããšãã£ãããšèšæ¶ã«å»ãŸãããã ãªãšå®æããŸãã(å
茩ãšã³ãžãã¢ã®ã¿ãªããã«æåãè¶³åãæããŠããã ããæ¯æ¥å€§å€ãäžè©±ã«ãªã£ãŠãããŸã)ã ãã£ãŠãããæ¹ãè¯ãã£ããšæã£ãããš AWSã«è§ŠããŠããããš çã£å
ã«æãã€ããã®ãããã§ããå
ã»ã©äœ¿çšããæè¡ãããã€ãæããŸãããããã®äžã§ãç¹ã«ãã£ãŠããã¹ãã ã£ããªãšæããŠããŸãã çç±ãšããŠã¯ãAWSã¯ç¬èªã®çšèªãããããåºãŠããŠè¬ãè¬ãåŒã¶ç¶æ
ã«ãªãã®ã§ã0â1ã®éšåããã£ãããšæŒãããŠããªãç¶æ
ã§ãããªããµãŒãã¹éçšã«æºããããšããŠãè¿·åã«ãªã£ãŠããŸãããã§ãã ãããª0â1ã®éšåãèªåã®ããŒã¹ã§ãã£ãããšæŒãããããã«ã¯ãã¡ããå®éã«è§Šã£ãŠäœãäœã£ãŠã¿ãããšãäžçªããçµéšã«ãªããšæãã®ã§ããããããããªããŠãAWSã«ãããµãŒãã¹ã«ã€ããŠçè§£ããããšããŠã¿ãã ãã§ãæåã®äžæ©ãšããŠã¯ååã ãšæããŸãã äºåã«ãã£ãããšãµãŒãã¹ã®æŠèŠãç¥ã£ãŠããã ãã§ããé
å±ãããŠããEC2âŠïŒCloudFormationã£ãŠäœâŠïŒäœãããããªããâŠã£ãŠæ³£ãã¡ããããšã¯æžãããšã§ãããããŸãããã£ãããšç¥ã£ãŠããã°é Œããå
茩ãšã³ãžãã¢ã®ã¿ãªããã«è³ªåããæã«ãæå©ã§ã(äœãããããªãã®ããããããªãåé¡ãäœæž)ã ãã®å
¥éãšããŠãããããããã®ãAWSãæ¯æç¡æã§éå¬(2021幎9æçŸåš)ããŠãããAWSome Day Online Conferenceãã§ãã aws.amazon.com çŽ3æéã§ãå
šãç¥èããªãç¶æ
ããããçšåºŠæåºãAWSã®ãµãŒãã¹ãåŠã¶ããšãã§ããŸãã ã¡ãã£ãšãµãŒãã¹ãè§Šã£ãããšãããååŠè
ã®æ¹ã«ããç¥èãæŽçãçŽãããšããæå³ã§ããããã§ãã ç§ã¯é
å±åœåãæ¥åã®äžç°ãšããŠäžé·ããèš±å¯ãããã ããŠåå ãããŠããŸããã 確ãã«å®éã«æ¥åã§äœ¿ãããŠããéçšã®ã¬ãã«ãšæ¯èŒãããšéåžžã«åæ©ã®å
容ããåãäžããããŠããªãã®ã§ãããããã§ãã©ãããæãã€ããŠãããåãããªãã»ã©ã®åå¿è
ã ã£ãç§ã«ã¯åŠã³ã®å€ãçµéšã§ããã ã¡ãªã¿ã«åæãšã³ãžãã¢ãå¥äŒæ¥ãžå
¥ã£ãåŠçæä»£ã®å人ãã¡ãåããããªèŠãã¿ãå³ãã£ãŠããã¿ãããªã®ã§ãä»ãŸã§AWSãé¿ããŠãããšã³ãžãã¢å¿æã®æ¹ã
ã¯æ©ãã«ã¢ã¯ã·ã§ã³ãèµ·ããã®ãããããã§ããã¹ã¿ãŒãããã·ã¥ã§å·®ãã€ãããã äžäººã§äœãåããã®ãäœã£ãŠã¿ãããš æ¥åã§ã¯åºæ¬çãªããã°ã©ãã³ã°ã¹ãã«ã«å ããéä¿¡ã«é¢ããç¥èããµãŒãæ§ç¯ã«é¢ããããšãããã«Linuxã«é¢ããç¥èããã®ä»è«žã
ãåºç€çãªç¥èãšããŠäœ¿ãããŸãã æ°åãšããŠé¢ããããŠããã£ãŠããæ¥åã§ã¯ãç¥èã¬ãã«ãšããŠã¯åºæ¬æ
å ±æè¡è
ã§åºãŠããçšåºŠã®å
容ã®ãã®ãå€ãã®ã§ãããå®éã«èªåã§æãåãããŠã·ã¹ãã ãè§Šã£ãããšãã»ãšãã©ãªããšãæèšããã ãã®ç¥èã ãã§ã¯å®åã§æŽ»çšããŠããã®ã¯ãªããªãé£ããã§ãã ããããæã£åãæ©ã身ã«ä»ããæ¹æ³ãšããŠã¯èªåã§äœã1ã€ãåãã·ã¹ãã ãäœæããããšãè¯ãã®ã§ã¯ãªãããšæããŸãã ç§ã¯ãšã³ãžãã¢ç ä¿®äžã«åããŠäžäººã§ã¢ããªãäœãäžããŸããããæ³å以äžã«åºæ¬çãªæ
å ±ã¹ãã«ãå¹
åºãèŠæ±ãããããšãå°è±¡çã§ããã 倧å€ãªããšãå€ãã£ãã®ã§ããåŸããããã®ãå€ãããšã³ãžãã¢ãšããŠã®ã¬ãã«ãäžæ®µéäžããéåžžã«è¯ãçµéšã«ãªããŸããã ãããåæã«ãæéã®ããåŠçã®å
ã«ãã£ãšéçºçµéšãããŠããã°è¯ãã£ããšãæããŸããã ãªã®ã§ãäžäººã§åããã®ãäœã£ãçµéšããããšããããšã¯å€§ããªã¢ããã³ããŒãžã«ãªããšä¿èšŒããŸãããã²åãçµãã§ããã ãããã§ããã¹ã¿ãŒãããã·ã¥ã§å·®ãã€ãããã éã«ãã£ãŠããŠããã£ããšæã£ãããš 1ã€ã®ããã°ã©ãã³ã°èšèªã«ã€ããŠããçšåºŠè€éãªã³ãŒããæžããçµéšããã£ãããš ããã°ã©ãã³ã°èšèªã¯äœ¿ãåããå¹ããšã¯ããèšãããŸããæ¬åœã«ãã®éãã§ããã èšèªã«ãã£ãŠå€å°ã®è¡šèšã®éããå®è£
æŠå¿µã®éãã¯ãããŸãããéã«èšãã°ããã ãæŒãããŠããŸãã°ããšã¯æ±çšçãªããã°ã©ãã³ã°ã¹ãã«ã§äœãšãé£ããã€ãããšãã§ããŸãã(äžäºè§£æ±ºã§ããããã§ã¯ãªãã§ã)ã ãŸããããã倧äœã®äŒæ¥ã§å
±éããŠãããšæããŸãããæ¥åã§å©çšããã³ãŒãã¯ããªãè«å€§ãªéã§ãã 1ã€ã®æ©èœãèŠãã ãã§äœçŸè¡ã远ã£ãããããšãã£ãããšãå€ã
ããã®ã§ããã¯ãããçšåºŠã¯è€éãªã³ãŒããæžããçµéšã欲ãããšããã§ãã ãšã¯ããããŸã身æ§ããå¿
èŠããªããšæã£ãŠããŠãé·ãã®ã³ãŒããèŠããšãã«åŒ·çãªå«æªæãæ±ãããšããªããããã«ãããã°ã©ãã³ã°ã«è§ŠããŠæ
£ããŠããã°ããããããªãããšæã£ãŠããŸãã ãã®ããã«ããªãã¹ãæ¥åžžçã«ããã°ã©ãã³ã°ã«è§Šããæ©äŒãå¢ãããŠããããšã倧äºã ãšæããŸãã äŸãã°ãã²ãŒã æèŠã§æ¥œãããç«¶æããã°ã©ãã³ã°ãªã©ã楜ãã¿ã€ã€æè»œã«ããã°ã©ãã³ã°ãè§Šããç°å¢ãèªåã«åãããŠæ§ç¯ããŠããããšãããããã§ãã ã³ãŒããæžãã®ã¯æ¥œãããšããæèŠã身ã«ã€ããŠããã®ã¯ããšã³ãžãã¢ã«ãšã£ãŠããªãå¿ã®æ ãæãšãªããŸãã ã¡ã¢ãåãçããã£ãããš ç§ã¯æ£çŽèšæ¶åããããŸã§è¯ãæ¹ã§ã¯ãªãã®ã§ãæããèããå
容ããã®æèããŠããããšãªã©ããªãã¹ãã¡ã¢ã«æžãåºãããã«ããŠããŸããã ä»äºãå§ããŠããã¯æ¯æ¥ã®æ¥åã«å ããæ°ããç¥èã®ã€ã³ããããªã©æ±ãæ
å ±ã®éãèŠããããšãå¢ããã®ã§ããã®ã¡ã¢ãåãçãããªã圹ã«ç«ã£ãŠããŸãã ãã¡ããèšãããããšãå¿ããªãããã«ããç®çããããŸããã宿çã«èŠçŽããããŸãšãçŽãããããããšã§ããç¥èãå®çããããšãã§ããŠãããšæããŸãã ãŸããéå€ã«æžãæ®ãã®ã«å ããŠãéšçœ²ã«é
å±ãããŠããã¯æ¯æ¥ãã£ãããšããã®ææ©ãã§ããç¹ããã®æ¥ã®æ°åãäžèšã§ ãªã©ãçã蟌ãã æ¥å ±ãæžãããã«ãªããŸããã ä»åã®èšäºãæžãéã«ãæ¥å ±ãèªã¿è¿ãã€ã€ãããªããšããã£ããªããšæãåºããªããå·çããŠããŸãã èªåããã£ãŠããããšãæç³»åé ã«æžãæ®ãããšã§ãæé·ã宿ããŠã¢ãããŒã·ã§ã³ã«ã€ãªããããšãã§ããŸãããåœæã®èšè¿°ãã¬ãã«ã¢ããããä»ã®èªåãèªããšæããããªãæ°ããçºèŠããã£ãããããŠæ¥œããã§ãã ã¡ã¢ãåãçãã€ããŠã¿ãã®ãšãæ¥å ±ãããã¯æ¥èšã®ããã«æ¥ä»é ã«èŠããã圢åŒã§èªåã®æç« ãæ®ãããšããããããªã®ã§ãã²ãã£ãŠã¿ãŠãã ããã ãããã« åé ã«ãæžããéããæ°ã¥ããšåæãçµãã£ãŠãã£ãšããéã®ç€ŸäŒäºº0.5幎ç®ã§ããã ã§ãæ¯ãè¿ã£ãŠã¿ããšäžèº«ã®è©°ãŸã£ãæ¿ãæ¯æ¥ã§ãå
å®ããæ¥ã
ãéãããŠããŸã(ä»åæžããããŠããªãä»äºã®è©±ãããŒã å
å€ã§ã®å匷äŒã®è©±ãããŒã ãã«ãã£ã³ã°ã§ãã€ã³ã¯ã©ããããã£ããLIFULLç¬èªã®ã€ãã³ãããã£ãããšçãæ²¢å±±ã§ããïŒ)ã æ¥åãããããªãããšãé£ããå
容ãå€ãèŠããããšãå€ã
ãããŸãããããã§ãé£ããããšã«ææŠãããããšã¯æ¥œããã§ããããããéæã§ããæã®å¬ããã¯ä»ã®äœã«ãåããšæã£ãŠããŸãã ä»åŸã粟é²ããŠåŒ·ããšã³ãžãã¢ãç®æãã€ã€ããŠãŒã¶ãŒã®ã¿ãªããŸã«ããè¯ããããã¯ãããå±ãã§ããããã«é 匵ã£ãŠãããããšæããŸãã æåŸã«ãªããŸãããLIFULLã§ã¯äžç·ã«åããŠããã ãã仲éãåéããŠããŸããã«ãžã¥ã¢ã«é¢è«ããã£ãŠããŸãã®ã§ããããããã°ãã¡ããã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ããããã¯ããšã³ãžãã¢ãªã³ã°éšã®å³¶æã§ãã ä»åã¯éšçœ²ã®å£æ ¹ãè¶
ããŠãµãŒãã¹ã®æ¹ä¿®ãé²ãããæšªææ¡ä»¶ãã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ãããã¯ããšã³ãžãã¢ãªã³ã°éšã®èª²é¡ ãããã¯ããšã³ãžãã¢ãªã³ã°éšã¯LIFULL HOME'Sã®éçºãæ
åœãããšã³ãžãã¢ãéãŸã£ãéšçœ²ã§ãã LIFULL HOME'Sã¯ãäžåç£ã»äœå®
æ
å ±ã®ç·åãµãŒãã¹ãã§ããã倿°ã®é åãæ±ã£ãŠãããããããããã®é åãæ±ãã°ã«ãŒããããããååšããŸãã ãã®ãããäžèšã®ãããªèª²é¡ãååšããŠããŸããã åã°ã«ãŒãã¯åºæ¬çã«ããããã®æ
åœé åã®éçºã«å°å¿µãããããæ
åœå€é åã«åœ±é¿ãåã¶æ¹ä¿®ã¯èª¿æŽã³ã¹ããåŠç¿ã³ã¹ããé«ã éšçœ²ããšã«åå¥ã®éçºãè¡ããããããåããããªä»çµã¿ãåéšçœ²ã§éçºããŠããã±ãŒã¹ããããå¹çãæªã 倿°ã®é åãæ±ã巚倧ãªãµãŒãã¹ã§ãããããã察å¿åªå
床ãäžãããã«æŸçœ®ãããæè¡çè² åµãååšãã äžèšã®ããã«ãããã¯ããšã³ãžãã¢ãªã³ã°éšã§ã¯ãé åããŸããæšªæçãªæ¹ä¿®ãé²ãã«ãããšãã課é¡ããããŸããã ãŸããåãä»çµã¿ãå®è£
ããŠããã±ãŒã¹ãªã©ãæè¡çè² åµã«ãªããããªèª²é¡ã«ã€ããŠãæ©ãã«åžãäžãã察å¿å¯åŠå«ããŠæ€èšãããå¿
èŠããããŸããã æšªææ¡ä»¶WG äžèšèª²é¡ã«å¯Ÿãã察çã®ããããããã¯ããšã³ãžãã¢ãªã³ã°éšã§ã¯æšªææ¡ä»¶WGãçºè¶³ããŸããã ãã®WGã§ã®æŽ»åã¯äž»ã«äžèšã§ãã ã¡ã³ããŒã«èµ·ç¥šããŠããã£ããæšªææ¡ä»¶ãã®å®æœã«é¢ããåè° å®æœäžã®ãæšªææ¡ä»¶ãã®é²æç¢ºèª ã¡ã³ããŒããã¯äžãã£ãŠããªãããWGãšããŠãæšªææ¡ä»¶ããšããŠæ±ãã¹ã課é¡ã«é¢ããåè° æšªææ¡ä»¶WGã§ã¯åéšçœ²ããã¡ã³ããŒãåºãåããæšªææ¡ä»¶ãå¹ççã«å®æœããããšãç®çã«æŽ»åããŠããŸãã æšªææ¡ä»¶ã®é²ãæ¹ åéšçœ²ã®ã¡ã³ããŒã«ã¯ã ããããªåãçµã¿ãæšªææ¡ä»¶ã§é²ããŠã»ããïŒã ãããæè¡çè² åµã«ãªãããã»ã»ã ãšãã£ãæ¡ä»¶ãäºåã«ã·ãŒãã«èšå
¥ããŠããããŸãã WGã§ã¯äžèšã®ã·ãŒãã確èªããæšªææ¡ä»¶ãšããŠã®å®æœãåè°ããŸãã 宿œã決ãŸã£ãæ¡ä»¶ã«ã€ããŠã¯ãäžèšã®ã¹ãããã§å®æœã«åããŠé²ããŸãã 宿œããããšã決ããæ¡ä»¶ã«ã€ããŠã¯WGå
ããæ
åœè
ãã¢ãµã€ã³ ãã®æ
åœè
ãæ¡ä»¶ãå
·äœåããå®éã«æ¡ä»¶ã宿œããã¡ã³ããŒãå
¬å 宿œããã¡ã³ããŒãç¡äºèŠã€ããã°æ¡ä»¶ãé²ããŠããããå®äºãŸã§WGããµããŒã æ¡ä»¶ã¯ã¡ã³ããŒã«èµ·ç¥šããŠããã£ããã®ãã¡ã€ã³ã§ã¯ãããŸãããWGå
ã§ãæšªææ¡ä»¶ããšããŠå¯Ÿå¿ãã¹ãéç¹é
ç®ã決ãããã®é
ç®ã«é¢ããæ¡ä»¶ã起祚ããŠé²ããããšããããŸãã æŽ»åã®ææã«ã€ã㊠äžèšã®ãããªä»çµã¿ã§ä»å¹Ž1幎掻åããäžèšã®ãããªå®æœçµæãšãªã£ãŠããŸãã 起祚ãããæ¡ä»¶ïŒ32ä»¶ 宿œããæ¡ä»¶ïŒ23ä»¶ 宿œå®äºããæ¡ä»¶ïŒ11ä»¶ äŸãã°äžèšã®ãããªæ¡ä»¶ããã®1幎ã§å®æœãããŸããã ãããã¯ãããšã«å¥ã
ã®ãªãœãŒã¹ãåç
§ããŠããç¥æ¥æ
å ±ãAPIåããŠå
±éå ç¬èªç®¡çãããŠããã¢ããªã±ãŒã·ã§ã³ãå
šç€Ÿã¢ããªã±ãŒã·ã§ã³å®è¡åºç€ãKEELãã«èŒãæ¿ã è€æ°é åã®ãããã¯ãã§åé¡ãšãªã£ãŠãããã£ãã·ã¥æ©æ§ã®ãã°ã®è§£æ¶ ãã®1幎ã¯åããããªããŒã¿ãåç
§ããŠããã®ã«åå¥ç®¡çã«ãªã£ãŠãããããªãã®ãå
±éåãããç¹å®é åã®åé¡ã§ãªããããçµç¹çåé¡ã§åªå
床ãäžãã£ãŠããªãã£ãè² åµ/ãã°ã®è§£æ¶ãæ¡ä»¶ãšããŠã¯å€ãã£ãã§ãã æšªææ¡ä»¶ã®èª²é¡ãšå±æ ãã®ãæšªææ¡ä»¶ãã®åãçµã¿ã§ãããçŸç¶ã§ã¯ãŸã ãŸã äžæããã£ãŠãããšã¯èšããªãä»çµã¿ã ãšã¯æããŸãã æ¡ä»¶ãé²ããäžã§ã®äž»ãªèª²é¡ã¯äžèšã§ãã 起祚ãããæ¡ä»¶ããŸã ãŸã å°ãªã æ¡ä»¶ã宿œãã宿œæ
åœè
ãèŠã€ãããªã èªéšçœ²æ¡ä»¶ãšã®å
Œãåãã§ã©ãããŠãåªå
床ãå£åŸããŠããŸã ç¹ã«å®æœæ
åœè
ãèŠã€ãããªãåé¡ã¯è§£æ±ºãé£ãããæ
åœè
ãæ±ºãŸããªãå Žåã«ã¯æ
åœéšçœ²ã決ããäžã§ãéšéé·ã«ã¢ãµã€ã³ãå§ããçã®è©Šè¡é¯èª€ãããŠã¿ãã®ã§ããããªããªãç¶æ³ã®æ¹åã«ã¯è³ã£ãŠããªãç¶æ³ã§ãã ä»çµã¿çãªé¢ã§ã®é£ããããããããå
šäœçãªä»çµã¿ã®æ¹åãã€ã³ã»ã³ãã£ãã®åŒ·åçå«ããä»åŸæ¹åãé²ããŠåããŸãã äžæ¹ããã£ãããšææãåºãæ¡ä»¶ãè€æ°ååšããŠãããç¹ã«è¥æã®ãšã³ãžãã¢ãç©æ¥µçã«æ¡ä»¶ã«ææŠããŠãããå§¿ã¯å€§å€å¿åŒ·ãã£ãã§ãã ãã®ãããªæ¡ä»¶ãããŒã«ã¢ãã«ãšãã€ã€ã圌ãã®å©ä»ã®å¿ã«çããããªããããªä»çµã¿ã«ä»äžããLIFULL HOME'Sã®éçºã«æ ¹ä»ããåãçµã¿ã«ããŠãããã°ãšæã£ãŠããŸãã ãŸãšã ä»åã¯éšçœ²ã®å£æ ¹ãè¶
ããŠãµãŒãã¹ã®æ¹ä¿®ãé²ãããæšªææ¡ä»¶ãã«ã€ããŠç޹ä»ããŸããã æšªææ¡ä»¶WGã§æ±ã£ãŠããã調æŽã³ã¹ãã®é«ãæ¡ä»¶ã®å¯Ÿå¿ãæè¡çè² åµãžã®å¯Ÿå¿ã«ã€ããŠã¯ãé ãæ©ãŸããäŒæ¥ãå€ãã®ã§ã¯ãªãã§ããããã LIFULLã§ã¯çµç¹ãšããŠåªå
床ã®é«ã課é¡ã¯ãå°éããŒã ã®çºè¶³çã§å¯Ÿå¿ãé²ããŠãããã®ã®ãã©ãããŠãããŒãèœã¡ã課é¡ã¯åºãŠããã®ã§ããããã課é¡ã«ã§ããã ãããã ã¢ããã§è§£æ±ºããŠãããã°ãšèããŠããŸãã LIFULLã§ã¯ãã®ãããªèª²é¡è§£æ±ºã«ãèå³ããããäžç·ã«åã仲éãåéããŠããŸãããããããã°ãã¡ããåãããŠã芧ãã ããã hrmos.co hrmos.co
LIFULLã®ãããã¯ããšã³ãžãã¢ãªã³ã°éšã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒããã£ãŠãããŸãéæŸ€ãšç³ããŸãã ããšããšã¯ã²ãŒã çšéã§äœ¿ãããããšã®å€ãã£ãDiscordã§ãããæè¿ã¯ITç³»ã®ã€ãã³ãã§ã¯å¿
ããšãã£ãŠããã»ã©äœ¿ãããããã«ãªããŸãããLIFULLã§ãæšå¹Žå°å
¥ãããåéšçœ²ã§Discordã䜿ã£ãŠæ¥ã
ã³ãã¥ãã±ãŒã·ã§ã³ãåã£ãŠããããã§ãã ã³ããçŠã«ãªãåã¯ãªãã£ã¹ã§å¶ç¶åºäŒã£ã人ãšè©±ããããé£çµ¡ãããšããµãã£ãšäŒããã人ã«äŒãã«è¡ã£ãŠè©±ãããããŠããŸããããšãããããªã¢ãŒãã¯ãŒã¯ã ãšã©ãããŠãèªåãæå±ãããããžã§ã¯ããããŒã ã®äººãšããã³ãã¥ãã±ãŒã·ã§ã³ããªããªããã¡ã§ã¯ãªãã§ããããã ããã§ãç§ãæå±ãããããã¯ããšã³ãžãã¢ãªã³ã°éšã§ã¯Discordã䜿ã£ãããã³ã¬ãŒãã©ã€ãããšããã³ãã¥ãã±ãŒã·ã§ã³æœçãè¬ããŠã¿ãã®ã§å°ãã ãã玹ä»ã§ããã°ãšæããŸãã ãã³ã¬ãŒãã©ã€ã OkÀnd fotograf "Montering / underhÃ¥ll av flygplan S 6 samt B 4 pÃ¥ CVM, Centrala verkstÀderna MalmslÀtt. Arbete i hangar." Public Domain Mark 1.0 https://digitaltmuseum.se/021016832015/montering-underhall-av-flygplan-s-6-samt-b-4-pa-cvm-centrala-verkstaderna é£è¡æ©ãæ ŒçŽããå庫ã®ããšããã³ã¬ãŒãã©ã€ããšåŒã¶ããã§ãã ãšããããé£è¡æ©ã®ãã€ããããã¡ãå€©åæªåãªã©ã®çç±ã§ç©ºãé£ã¹ãªããšãã«ããã³ã¬ãŒãã©ã€ãã«éãŸã£ãŠé£è¡æè¡ã®ã³ããªã©ã«ã€ããŠéè«ããããæ
å ±äº€æãããŠããããšããããã®è¡çºèªäœããã³ã¬ãŒãã©ã€ããšåŒã¶ããã«ãªã£ãããã§ãã (詳ããã¯åžè°·è¡åããã®ã ã«ã€ãŒã³ã»ãžã£ãŒã㌠ãããåç
§ãã ãã) ã³ããçŠã®åœ±é¿ã§ãªã¢ãŒãã¯ãŒã¯ãäžå¿ã«ãªããèªéšçœ²ä»¥å€ã®ã¡ã³ããŒãšè©±ãæ©äŒãæ¿æžãããããã¡ãã£ãšã§ãè©±ãæ©äŒãäœãããšæã£ãã®ããã£ããã§ãç§ãæå±ããéšçœ²ã§ãZOOMã䜿ã£ãŠãã³ã¬ãŒãã©ã€ããå§ããŠã¿ãŸãããæ¯é±æ±ºãŸã£ãæéã«èªéšçœ²ä»¥å€ã®ã¡ã³ããŒå«ãæ°åã§ãããã¹ããããŠããŸããã ã³ããçŠãé·æåãããªã¢ãŒãã¯ãŒã¯ãåžžæ
åããŸããããã®ããšã«ãã£ãŠãäŒç€Ÿã§ãä»éšçœ²ã®äººãšäº€æµããæ©äŒãæžã£ãããšã«å¯ŸããŠèª²é¡æèã匷ãŸã£ãŠããŸãããããã§ãèªåãã¡ã®åšãã§ãããã£ãŠããªãã£ããã³ã¬ãŒãã©ã€ããããšã³ãžãã¢çµç¹å
šäœã§ãã£ãŠã¿ãŠã¯ã©ãã ãããšæãç«ã¡ã宿œããããšã«ããŸããã ååããŠããã仲éãšãšãã«éå¬ããæéãæ±ºããDiscordãµãŒããŒã«ãšã³ãžãã¢å°çšã®ãã£ã³ãã«ãäœããŸãããæåã¯ãããªã«åå è
ãå€ããªãã ããããããã£ãããä»äºã«ã€ããŠãããã£ãªã¢ã«ã€ããŠããéè«ããšãã3ã€ã®ãã€ã¹ãã£ã³ãã«ãäœããŸãããã¡ãã£ãšããä»äºã®æ¯æããã誰ããšåããããšãã«ãèå³ã®ããããŒãã®ãã£ã³ãã«ã«å
¥ã£ãŠãããã¹ãããããšããæãã§ãã å§ããŠã¿ãŠã©ãã ã£ãã 8æã®äžæ¬ããéå§ããä»ã®ãšããç«ææ¥ã®16:00-17:00ãšãéææ¥ã®13:00-14:00ã®é±2åã§éå¬ããŠããŸããæåã¯æ°åããåå ããŠãããªãã£ããã®ã®ãæè¿ã§ã¯å€§äœ10åãããã®æ¹ãåå ããŠãããŸãã æ®æ®µããŸãäžç·ã«ä»äºãããªããããªäººããåããŠè©±ã人ãªã©ãéšçœ²é¢ä¿ãªãããããªäººãéãŸããŸããç¹ã«æ°åãäžéæ¡çšã§å
¥ç€Ÿãããæ¹ã
ã«åã°ããŠããå°è±¡ã§ã(ãŸã 人æ°èªäœã¯å°ãªãã§ãã)ã話ãèããšãå
¥ç€ŸããŠããçŽæ¥äŒã£ãŠè©±ããããšã®ããäººã¯æ°åã ããèªéšçœ²ä»¥å€ã®ç€Ÿå¡ãšè©±ãããšãã»ãšãã©ãªãã£ããããšããããšã§ãã 話ã®å
容ãšããŠã¯ããã¯ãä»äºã®ããšãæè¿ã®äŒç€Ÿã§ã®åºæ¥äºããã£ãªã¢ãæè¡ç³»ã®ãã¥ãŒã¹ãªã©ã«ã€ããŠã®è©±ãçãäžãããŸããã奜ããªèšèªã«ã€ããŠè©±ããããšãæè¿åå ããã»ãããŒã®ææ³ãLIFULLã«å
¥ç€Ÿããçç±ãä»åŸã©ããã£ãããšããã£ãŠãããããããªã©ãªã©æ§ã
ãªè©±é¡ã§çãäžãããŸãã ãã ããåããŠã®äººå士ã ãšãªããªã話ãã®ã倧å€ã§ãããªãã¹ãç§ãé±äžåã¯åå ãããã¡ã·ãªããŒã·ã§ã³ãããŠãããããªäººã®è©±ãèããããã«åªããŠããŸãããã®ãã¡ç¹å®ã®ãã¡ã·ãªããŒã¿ãŒãããªããŠããã®å Žã§èªç¶ã«è©±ããããã«ãªããšãããªãšæã£ãŠããŸãã ãã³ã¬ãŒãã©ã€ã以å€ã®æéã§ãæã
Discordã«æ¥ãŠèª°ããåã£ãŠããã®ãèŠãããŸãããåŒç€Ÿã®CTOãã¡ããã¡ããé¡ãåºããŠããããã§ãæ®æ®µCTOãšè©±ãæ©äŒãç¡ããããªã¡ã³ããŒããCTOãšçŽæ¥è©±ãããšãã§ããŠããããã§ãã çµæãšããŠãä»ãŸã§çžè«ãã«ããã£ãéšçœ²ãžã®çžè«ããããããªã£ãããä»ã®éšçœ²ã§å®æœããŠããã³ãã¥ãã±ãŒã·ã§ã³æœçãå¥ã®éšçœ²ã§ãããããŠã¿ãããšãå°ããã€æ¥åæ¹åã«ãã€ãªãã£ãŠããŠããŸããæè¿æœè¡ãããã»ãã¥ãªãã£æœçã®æ
åœè
ãåå ããŠãããŠãã¿ããªã§ãã®æœçã®å
容ã«ã€ããŠè³ªåãããã解説ããŠããã£ãããšäºæ³ããŠããªãã£ããããªæ
å ±ã®å
±æãè¡ãããŠãããåå ããŠãããæ¹ã®ãªããŒãçã¯éåžžã«é«ãã§ãã ä»åŸã®èª²é¡ãšå±æ ãšã¯ãã£ãŠãããªããªãåå 人æ°ãå¢ããŸããããŸãã¯ç²ã匷ããšã³ãžãã¢å
šå¡ãå
¥ã£ãŠãããã£ããã«ãŒã ã§éå¬30ååã«ã¢ããŠã³ã¹ãããããåå ããŠããã人ã«ã身ã®åãã®æ¹ãé£ããŠäžç·ã«åå ããŠã¿ãŠæ¬²ããæšãäŒãç¶ããŠããŸããæè¿ã¯å€ãã®ç€Ÿå
ãšã³ãžãã¢ãåå ããã€ãã³ãã§ãé¢é£ããŠåç¥ããããããŠããŸãã 匱ããªã£ãŠããŸã£ã瀟å¡å士ã®ã€ãªããã修埩ããããšããŠããã®ã§æéããããã®ã¯åœããåã§ããçŠããã諊ãããæ ¹æ°åŒ·ããã£ãŠããããšã倧äºããªãšæã£ãŠããŸãããåèã«ãªãã°å¹žãã§ãã LIFULLã§ã¯å
±ã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ããã¯ãããžãŒæ¬éšåºç€éçºãŠãããæ¹åæšé²ã°ã«ãŒãã®è±å²¡ã§ãã æ¹åæšé²ã°ã«ãŒãã§ã¯æè¡çè² åµè§£æ¶ã®äžç°ãšããŠLIFULL HOME'S ã§äœ¿çšãããŠããDBãšã³ãžã³ãããžã§ã¯ãã«åãçµãã§ããŸãã ä»åã¯DBãšã³ãžã³ç§»è¡ãããžã§ã¯ãã«ãããSQLæ¹ä¿®æŒããé²ãããã®åãçµã¿ã«ã€ããŠç޹ä»ããããšæããŸãã DBãšã³ãžã³ç§»è¡ãããžã§ã¯ãã®æŠèŠ LIFULLã§ã¯éçšã³ã¹ãã®åæžãéçºå¹çãããã©ãŒãã³ã¹æ¹åã®ããã«Oracle DatabaseããPostgreSQLãžã®ç§»è¡ãé²ããŠããŸãã äž¡DBã®ããŒã¿ãåæããã€ã€ã¢ããªã±ãŒã·ã§ã³ã®SQLæ¹ä¿®ãé²ããŠããŸãã ⻠以äžã§ã¯Oracle DatabaseãOracle, PostgreSQLãPostgresãšåŒã³ãŸãã ãããžã§ã¯ãã®å
容ã«ã€ããŠã¯ä»¥äžã®åŒç€Ÿããã°ã§ã玹ä»ãããŠããŸãã®ã§ãã¡ããã芧ããã ããã°ãšæããŸãã www.LIFULL.blog www.lifull.blog DBãšã³ãžã³ç§»è¡ã®é²ãæ¹ã«ã€ã㊠https://www.LIFULL.blog/entry/2021/03/24/151447 ã§ã玹ä»ãããŠããŸãããæ¬ãããžã§ã¯ãã§ã¯ä»¥äžã®ããã«DBãšã³ãžã³ç§»è¡ãé²ããŠããŸããçŸåšã¯åç
§ç³»SQLã®ç§»è¡ãé²ããŠããæäžã§ãã ã¹ããŒããªããžã§ã¯ããšã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã®æŽãåºã Postgresã«ç§»è¡å
ã®ããŒãã«ãäœæ(AWS SCTãäœ¿çš OracleãšPostgresã®ããŒã¿åæ(AWS DMSãäœ¿çš åç
§ç³»SQLãç§»è¡ äžèšã®ããã°ã§ãèšåãããŠããŸãããç§»è¡ãå¿
èŠãªSQLã®èª¿æ»ãäžååãªããšã«ããã¢ããªã±ãŒã·ã§ã³ã®é害ã課é¡ã®äžã€ãšãªã£ãŠããŸããã ããã§ä»åã¯æãæŒãæ€ç¥ã®ããã®DBã¢ã¯ã»ã¹ç£èŠã®ããã¿ãæ§ç¯ããããšã§ç§»è¡æŒããæ©ãæ€ç¥ã§ããæ§ã«ããŸããã DBã¢ã¯ã»ã¹ç£èŠã®ããã¿ DBã¢ã¯ã»ã¹ç£èŠã®ããã¿ã¯ä»¥äžã®éãã§ãã Oracleã«ã¢ã¯ã»ã¹ããã£ãéã«æ€ç¥ããŠChatWorkãžéä¿¡ããŠéçºè
ã確èªã§ããæ§ã«ããŸãã Oracleã®å¯Ÿè±¡ããŒãã«ã«ç£æ»ãã°(以äžAudit Log)ãèšå®ããŠã¢ã¯ã»ã¹ç¶æ³ããã°åºåããã â¬ïž CloudWatch Logsã®ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã§ç£èŠå¯Ÿè±¡ã¹ããŒããªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæ€ç¥ããŠLambdaãèµ·åãããç£èŠå¯Ÿè±¡ã¹ããŒããªããžã§ã¯ãã¯JSONã§ç®¡çããã â¬ïž Lambdaã§ããŒã¿ãæŽåœ¢ããŠChatWorkãžéä¿¡ããã â¬ïž ChatWorkã§ã¢ã¯ã»ã¹æ
å ±ã衚瀺ããã å
šäœã®æ§æã¯ä»¥äžã®éãã§ãã ããããã¯ããããã®èšå®ãåŠçå
容ã«ã€ããŠããå°ã詳现ã«èª¬æããŠãããããšæããŸãã Oracle Oracleãžã®SQLã®å®è¡ãæ€ç¥ããããã«ãAudit Logãåºåããèšå®ãããŸãã ç£æ»ãã°ã«ã¯ã¢ã¯ã»ã¹å¯Ÿè±¡ã®ã¹ããŒããªããžã§ã¯ããå®è¡ãããSQLã®çš®é¡ãåºåã§ããŸãã 察象ããŒãã«ã®åç
§ç³»SQLããã¹ãŠPostgresçšã«æ¹ä¿®ãããæ®µéã§ã以äžã®ã³ãã³ãã§å¯Ÿè±¡ããŒãã«ã«ç£æ»ãã°ã®èšå®ã远å ããŸãã AUDIT SELECT ON <察象ããŒãã«>; ãã®èšå®ã«ããç£æ»ãã°ãåºåãããæ§ã«ãªããŸãã ãã°ã®å
容ã«ã€ããŠã®è©³ãã説æã¯çããŸããããã®ãã°ã§ã©ã®ã¹ããŒããªããžã§ã¯ããã¢ã¯ã»ã¹ãããŠããããã¹ããŒããªããžã§ã¯ãã«å¯ŸããŠã©ã®ãããªæäœããã£ãã®ãã調æ»ã§ããŸãã ä»åã¯ç£æ»ãã°ããã¢ã¯ã»ã¹ãããã¹ããŒããªããžã§ã¯ãåãæœåºããŸãã ç£æ»ãã°ã«ã€ããŠè©³ããç¥ãããæ¹ã¯ãã¡ããåç
§ããŠãã ããã docs.oracle.com Oracleã§Audit Logãåºåã§ããæ§ã«ããåŸãAmazon RDSåŽã§CloudWatchã«ãã°ãåºåããèšå®ãããã°ç£æ»ãã°ã®èšå®ã¯å®äºã§ãã CloudWatch Logs Audit Logãèšé²ããŠããCloudWatchLogsã®ãã°ã°ã«ãŒãã«ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ãã€ããŠããã°ã°ã«ãŒããžã®ãã°ã®è¿œå ãããªã¬ã«ããŠLambdaãå®è¡ããæ§ã«ããŸãã ããã§ããã°ã®ããŒã¿ãLabmdaã§åãåãããšãå¯èœã«ãªããŸãã ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã¯ä»¥äžã®ã³ãã³ãã§è¿œå ããŸãã $ aws logs put-subscription-filter \ --log-group-name $LOGGROUP_NAME \ --filter-name ora2pos-notification-filter --filter-pattern "$FILTER_PATTERN" \ --destination-arn arn:aws:lambda:ap-northeast-1:$AWS_ACCOUNT:function:$FUNCTION_NAME \ --profile $AWS_PROFILE --region ap-northeast-1 ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã®filter patternã¯ç£èŠå¯Ÿè±¡ã®ã¹ããŒããªããžã§ã¯ããªã¹ãããæœåºããŠäœæããŸãã ç£èŠå¯Ÿè±¡ã®ã¹ããŒããªããžã§ã¯ããªã¹ãã¯ä»¥äžã®ããã«JSONã§ç®¡çããŠããŸãã { " objects ": [ { " schema ":" HOMES ", " object ":" object1 " } , { " schema ":" HOMES ", " object ":" object2 " } , { " schema ":" HOMES ", " object ":" object3 " } , ] } ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã§Lambdaã«éä¿¡ããããŒã¿ã¯Base64ã§ãšã³ã³ãŒããããgzip圢åŒã«å§çž®ãããŸãã è€ååããããŒã¿ã¯ä»¥äžã®ããã«ãªããŸãã { " awslogs ": { " data ": { " owner ": " xxxx ", " logGroup ": " xxxx ", " logStream ": " xxxx ", " subscriptionFilters ": [ " xxxx " ] , " messageType ": " DATA_MESSAGE ", " logEvents ": [ { " id ": " xxxx ", " timestamp ": 000000000000, " message ": " Audit Logã®å
容 " } , ] } } } ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã®èšå®æ¹æ³ã«ã€ããŠè©³ããç¥ãããæ¹ã¯ãã¡ããåç
§ããŠãã ããã docs.aws.amazon.com Lambda LambdaåŽã§åãåã£ããã°ããå¿
èŠãªæ
å ±ãæœåºããŠæŽåœ¢ããChatWorkãžéä¿¡ããŸãã Lambdaã¯gzip圢åŒã§å§çž®ãããããŒã¿ãåãåãããã以äžã®ããã«ããŠãã°æ
å ±ãååŸããŸãã const zlib = require( 'zlib' ); var payload = Buffer.from( event .awslogs.data, 'base64' ); zlib.gunzip(payload, function (error,result) { if (error) { console.log(error); } else { result = JSON.parse(result.toString( 'ascii' )); const logs = result.logEvents; const logGroup = result.logGroup; const logStream = result.logStream; ... SQLã§ã¢ã¯ã»ã¹ãããã¹ããŒããªããžã§ã¯ããç£èŠå¯Ÿè±¡ã®ã¹ããŒããªããžã§ã¯ããªã¹ããšç
§åããŸãããã®ãªã¹ãã¯ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿ã®filter patternã«äœ¿çšããã®ãšåãç©ã䜿çšããŸãã ç
§åãçµãã£ããåãåã£ãããŒã¿ã以äžã®åœ¢åŒã«æŽåœ¢ããŸãã ããã§ã¢ã¯ã»ã¹ãããã¹ããŒããªããžã§ã¯ãã確èªãããã°ã®URLããåå 調æ»ã§ããæ§ã«ããŸãã oracleç°åžžã¢ã¯ã»ã¹ãã°æ€ç¥ ç°åžžã¢ã¯ã»ã¹ããããªããžã§ã¯ãäžèЧ: ... ... ... 以äžã®LogStreamãåç
§ããŠãã ãã: <ãã°ã®URL> ããŒã¿ãæŽåœ¢ãããChatwork APIã§Chatworkã«éç¥ã¡ãã»ãŒãžãéä¿¡ããŸãã APIã®åœ¢åŒã¯ä»¥äžã®éãã§ãã URL https://api.chatwork.com/v2/rooms/$CHATWORK_ROOM_ID/messages ããã 'X-ChatWorkToken': $CHATWORK_TOKEN ChatWork APIã«ã€ããŠã¯ã以äžã®ããã¥ã¡ã³ããåç
§ãã ããã developer.chatwork.com ChatWork ChatWorkã§APIãåãåããšä»¥äžã®ãããªã¡ãã»ãŒãžã衚瀺ãããŸãã ã¢ã¶ã€ã¯ã§é ããŠããŸãããã¢ã¯ã»ã¹ã®ãã£ãã¹ããŒããªããžã§ã¯ããšãã°ã®URLã衚瀺ãããæ§ã«ãªã£ãŠããŸãã ããã§Oracleã®ã¢ã¯ã»ã¹ãChatWorkã§ç¢ºèªããã§ããããã«ãªããŸããã ç§»è¡æŒãæ€åºæã®éçšãã㌠ChatWorkã§ã¢ã¯ã»ã¹ãæ€ç¥ããå Žåã¯ä»¥äžã®ãããªéçšãããŒã§åé¡ãææ¡ããŠå¯ŸåŠããŸãã ChatWorkã§SQLã®ç§»è¡æŒããæ€åºããã â¬ïž ç£æ»ãã°ã®è©³çްïŒãã°ãçºçããåå ïŒã調æ»ããã ãŠãŒã¶ãŒãã¢ã¯ã»ã¹å¯Ÿè±¡ã®ãªããžã§ã¯ããã©ã®ãµãŒãããã¢ã¯ã»ã¹ãããŠãããïŒSQLã®çš®é¡ã¯äœãïŒãææ¡ãããSQLã®çš®é¡ã¯ SQL Command Codes ãåèã«ãã â¬ïž ãã°çºçã®åå ãç¶æ³ã«å¿ããŠç·æ¥åºŠã倿ããŠå¯Ÿå¿ããã åå ã»ç¶æ³ ç·æ¥åºŠ 察å¿å
容 æäœæ¥ã«ããSQLå®è¡ãªã©ãç§»è¡æŒããåå ã§ãªãå Žå 察å¿ã®å¿
èŠãªã - ç§»è¡æŒãã ãé害ã«ã€ãªãããªãå Žå ç·æ¥åºŠäœ ã»å¯Ÿè±¡ã®SQLãç¢ºèª ã»ç§»è¡èšç»ãç«ãŠã察象ã®SQLãç§»è¡ãã ã»ç§»è¡åŸããã°ãåºãªããªã£ãå Žåã¯OKãšãã ç§»è¡ããã«ããé害ãçºçããå Žå(ãããã¯çºçããå¯èœæ§ãé«ãå Žå)ã ç·æ¥åºŠé« ã»è³æ¥ã§é害察å¿ã宿œãã ã»é害察å¿åŸããã°ãåºãªããªã£ãå Žåã¯OKãšãã ããã§SQLã®ç§»è¡æŒãããã£ãå Žåã«æ©ãæ€ç¥ããŠå¯ŸåŠããããã¿ãäœãäžããããšãã§ããŸããã ãŸãšã ä»åã¯CloudWatchãLambdaã䜿ã£ãSQLæ€ç¥ã·ã¹ãã ã«ã€ããŠç޹ä»ããŸããã DBãšã³ãžã³ç§»è¡ãè¡ã£ãŠããæ¹ã«ãšã£ãŠå°ãã§ãã圹ã«ç«ãŠãã°å¹žãã§ãã ãŸã DBãšã³ãžã³ç§»è¡ãããžã§ã¯ãã¯éåã°ã§ãããäžã€äžã€ã®èª²é¡ã«å¯ŸããŠè§£æ±ºæ¹æ³ã暡玢ãã€ã€é²ããŠããŸãã ããã§ç޹ä»ããã®ã¯ãã®åãçµã¿ã®äžã€ã§ããã ããããçºä¿¡ã§ããæ§ãªåãçµã¿ãããã°åŒãç¶ãããã°ã§ç޹ä»ããŠãããããšæããŸãããã²æ¥œãã¿ã«ããŠãã ããã LIFULLã§ã¯ãšãã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
æ€çŽ¢ãšã³ãžã³ããŒã ã®å è€å®è©ã§ãã çªç¶ã§ãããèªåãã¡ãè¡ãæœçããã£ãšéè«ã«è¿ããšããããæ±ºããããããããªãšæã£ãããšã¯ãªãã§ããïŒ ç§ã¯æ°è»œã«è©±ããç°å¢ã®ã»ãããããããªæèŠãåºãããããŸããããã£ã話ãåãããçãŸããã¢ã€ãã£ã¢ãæå€ãšè¯ããã®ã ã£ããããã®ããªãšèããŠããŸãã æ€çŽ¢ãšã³ãžã³ããŒã ã§ã¯ããæ€çŽ¢ããšããããŒãã軞ã«ã©ããªè°è«ãè¡ããã®äžããæ¬¡ã«ããæœçãæ±ºãããšããæ¹æ³ãå幎ã»ã©ç¶ããŠããŸãã ãã®çµæã çŸç¶ã®LIFULL HOME'Sãå©çšããŠããæ€çŽ¢ãšã³ãžã³ã®æ§æãåæã«ããã®ã§ã¯ãªã詊éšçãªãŠãŒã¶ãŒäœéšãã·ãŒã ã¬ã¹ã«æäŸã»æ€èšŒããŠããæ€çŽ¢ãšã³ãžã³ã®ç°å¢ãçšæãããããžã§ã¯ããã§ããŸããã LIFULLã«ã¯ãã¯ãªãšã€ã¿ãŒã®æ¥ããšããã€ãããŒã·ã§ã³ãåµé ãããããéåžžæ¥åãé¢ãæ°ããªæè¡ãææ³ã«åãçµãããã®ä»çµã¿ãããã ãããã£ãä»çµã¿ãå©çšããŠæ€çŽ¢ãšã³ãžã³ã®éçºãã§ããããã«ããããšããã¢ã€ãã£ã¢ãããã®ãããžã§ã¯ããçãŸããŸããã ãã以å€ã«ãããã€ããããžã§ã¯ããåŸã
ã«é²è¡ãå§ããŠããŸãã ä»åã¯ãã®æœçã®äœãæ¹ã«ã€ããŠç޹ä»ããŸãã æ°è»œãªäŒè©±ããæœçãäœããšã¯ã©ã®ãããªããšãïŒ ãã®æŽ»åã¯å€§ãã以äžã®4ã¹ãããã«åãããŠããŸãã æãã€ãã課é¡ã解決çãã¡ã³ããŒã«å
±æããã¹ããã ããŒãã«å¯ŸããŠèª²é¡ã解決çã話ãåãã¹ããã 課é¡ãšè§£æ±ºããŸãšããŠãã§ããããªæœçãèŠã€ããã¹ããã 調æ»ãèšèšãå®è£
ãããã¹ããã 1. æãã€ãã課é¡ã解決çãã¡ã³ããŒã«å
±æããã¹ããã ããã§ã¯ãµãšæãã€ããã¢ã€ãã£ã¢ãå¿ããªãããã«ã¡ã³ããŒã«å
±æããŸã æœçã®ã¢ã€ãã£ã¢ã«ã€ããŠè©±ãåãããã®slackã®ãã£ã³ãã«ããããŸãã MTGäžãäŒæ©æéã«æãã€ããã¢ã€ãã£ã¢ããçŽã«ç«ã¡ãããªæ
å ±ããã®ãã£ã³ãã«ã«èšå
¥ããŠããŸãã èšå
¥ããã¢ã€ãã£ã¢ããæ
å ±ã¯æ¬¡ã®ãããŒãã«å¯ŸããŠèª²é¡ã解決çã話ãåãã¹ããããã§è©±é¡ã®ïŒã€ãšããŠæŽ»çšããŸãã 2. ããŒãã«å¯ŸããŠèª²é¡ã解決çã話ãåãã¹ããã ããã§ã¯ã¢ã€ãã£ã¢ã®çºæ£ãããŸã é±ã«äžåºŠå
šå¡ã§è©±ãåãMTGãèšå®ããŸãã æ¯é±äžäººã®ã¡ã³ããŒããæ€çŽ¢ãã軞ã«ããããŒããçšæããŸãã(ããŒããæã¡å¯ãã¡ã³ããŒã¯ããŒããŒã·ã§ã³) ããŒãçºè¡šåŸããã®ããŒãã«ã€ããŠèª²é¡ã解決çãåã¡ã³ããŒãæãããŸãŸã«æããŠãããŸã ç§éã®å Žåãslackã«ããŒããèšå
¥ããŠãã¹ã¬ããã«ã³ã¡ã³ãã§æžããŠããŸãããããå°ããããããæ¹æ³ããããšæããŸãã ãã®ã¹ããããå
šã¡ã³ããŒãããŒããæã£ãŠãããŸã§ç¹°ãè¿ããŸãã(5人ã®ã¡ã³ããŒã§ããã°5é±ãããŠè¡ã) 3. 課é¡ãšè§£æ±ºããŸãšããŠãã§ããããªæœçãèŠã€ããã¹ããã ããã§ã¯ã¢ã€ãã£ã¢ã®åæãè¡ããŸãã å
šå¡ãããŒããåºãçµããæ¬¡ã®é±ã®MTGã§å
šå¡ãåºãã課é¡ã解決çãã°ã«ãŒãã³ã°ããŸãã LIFULLã§ã¯ã³ã³ãã«ãšã³ã¹ã䜿ã£ãŠãããããã«ä»ãŸã§ã®ã¢ã€ãã£ã¢ã®ãŸãšãããŒãžã远å ããŸãã åã¡ã³ããŒãããŸãšããã宿œãããæœçãéžã³ãšããŸã 4. æœçãšããŠããããã¹ããã ããã§ã¯ã¢ã€ãã£ã¢ãå®çŸãããŠãããŸã ä»ã®ãããžã§ã¯ããšåæ§ã«è£œåèŠæ±ä»æ§æž(PRD)ãäœã£ãŠèª¿æ»ãèšèšãå®è£
ãè¡ããŸãã MTGã®æåŸã®æéã«ã鲿ãå
±æããŸãã 䌌ãŠãããšããããã£ãŠããã°æè»ã«ã¡ã³ããŒãåæµããããéäžã§åè£ãããããŸãã ãªããã®åçµã¿ãå§ããã ããšããšæ€çŽ¢ãšã³ãžã³ããŒã ã¯éçšã«æéãåãããŠããŸããå©çšè
ãžã®äŸ¡å€æäŸã«æéã䜿ããŠããªããšãã課é¡ããããŸããã ããã解決ããããã«ãéçšæ¹æ³ã®å€æŽãèªååãæé åãè¡ã£ãŠããŸããã éçšã³ã¹ããäžããçµæãå©çšè
ãžã®äŸ¡å€æäŸã«æéãå²ããããã«ãªã£ãŠãããšããçµç·¯ããããŸãã ãã®æ¹æ³ã§é²ããŠããã£ãããš LIFULLã®ç¥èãå¢ããŸãã ç§ã®ããã«LIFULLã§ã®çµéšã®æµ
ãã¡ã³ããŒã«ãšã£ãŠã¯ãä»ãŸã§éãã®æœçã®ä»æ¹ã ãã§ã¯åŸãããªãç¥èŠãæºãŸã£ãŠãããŸãã(éšçœ²å€ã§éçšããŠããããŒã¿ããµã€ããæ€èšŒæ¹æ³ç) ããŒã ã¡ã³ããŒãèããŠããèª²é¡æãç¥ãããšãã§ããŸãã éçºè
ãSolrã®éçºã«èŠææèãæã£ãŠãããå®çŸããªãã£ãäºæ¥æ¡ãããããšãããããŸãã(調æ»ã®éã®å¯ç£ç©ã§ãã) éçºè
ã«å¯ŸããSolrã®å匷äŒã®éå¬ãç©æ¥µçã«è¡ãããã«ãªãã瀟å
ã«å¯ŸããŠããã圱é¿ãäžããŠããŸã ãã®æ¹æ³ã§é²ããŠèª²é¡ã ãšæããŠãããšãã ãžã£ã¹ãã¢ã€ãã£ã¢ã§è©±ããŠãããããããŒã¿ããªããŠãã以äžè©±ãé²ãŸãªããšãããšãããããŸã MTGäžã«ç€Ÿå
ã®æ
åœã®æ¹ã«èããŠè§£æ±ºããããšããããŸãããã©ãããŠãéçããããŸãã ãŸãšã ä»åã¯æ€çŽ¢ãšã³ãžã³ããŒã ã§ã®åãçµã¿ã«ã€ããŠç޹ä»ããŸããã éè«ã®ãããªæ°è»œãªäŒè©±ã®äžã§åºãŠããèãã¯ä»ãŸã§ãšã¯éãèŠç¹ããã®æ°ããã¢ã€ãã£ã¢ãçã¿åºãæ©äŒã«ããªããŸãã ãŸããããã ã¢ããã«æœçãäœãããšã¯äŒç€Ÿã®ããšãç¥ããèãããã£ããã«ããªããŸãã ã¡ãªã¿ã«LIFULLã§ã¯ããããã³ãã¥ãã±ãŒã·ã§ã³ããæ°ããªããšãå§ããåãçµã¿ãè²ã
ãªãšããã§è¡ã£ãŠããŸãã äŸãã°æã«äžåºŠãéšå
ã®ä»ããŒã ãšéè«ããããšããæ©äŒãããããã®ãããªéè«ããæ°ããªç®çãæ§æ³ãèªçºãããšèããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ããã£ãŠããŸãã®ã§ãLIFULLãLIFULLã®åãçµã¿ã«èå³ããããŸããããã²ã話ããŸãããïŒ ãããŸã§èªãã§ããã ãããããšãããããŸããã hrmos.co
ããã«ã¡ã¯ã ãããã¯ããšã³ãžãã¢ãªã³ã°éšã®åæ°žã§ãã æ¬æ¥ã¯LIFULL HOME'S ã«ãããLINEãæŽ»çšããæœçã LINEã§æ°çç©ä»¶éç¥ãåãåã ãã«ã€ããŠæ©èœæ¹åãè¡ã£ãããã»ã¹ãšãªãªãŒã¹å
容ã«ã€ããŠç޹ä»ããããšæããŸãã ãããžã§ã¯ãã¡ã³ããŒã以åæçš¿ããäžèšèšäºãäžç·ã«ã芧ããã ãããšå¹žãã§ãã www.lifull.blog www.lifull.blog ã¢ãžã§ã³ã LINEã§æ°çç©ä»¶éç¥ãåãåããšã¯ ã©ã®ãããªæ©èœæ¹åãè¡ã£ãã®ã æ©èœæ¹åã«è³ããŸã§ã®ããã»ã¹ ãŸãšã LINEã§æ°çç©ä»¶éç¥ãåãåããšã¯ LIFULL HOME'Sã«ãããLINEæŽ»çš #1 LINEã§æ°çç©ä»¶éç¥ãåãåã ã®åæ²ã«ã¯ãªããŸãããæ¹ããŠæ¬æ©èœã«ã€ããŠã玹ä»ããããŸãã ãã®ååã®ãšããã æ¯æ¥æ±ºãŸã£ãæéã«åžæã«æ²¿ã£ãæ°çç©ä»¶ãLINEã§ãç¥ããããŠãããæ©èœ ã«ãªããŸãã æ°çç©ä»¶ãååããŸã§ã®ãããŒãç°¡æçã«ãããããšäžèšã®ããã«ãªããŸãã LIFULL HOME'Sã§ä»»æã®æ¡ä»¶ã§ç©ä»¶ãæ€çŽ¢ããã æ€çŽ¢çµæç»é¢ãããLINEã§ååãããã¿ã³ãæŒãã LIFULL HOME'Så
¬åŒLINEã¢ã«ãŠã³ããåéç»é²ããã ç¿æ¥ä»¥éã«ãç»é²ããæ€çŽ¢æ¡ä»¶ã«åèŽããæ°çç©ä»¶æ
å ±ãLINEã§éç¥ãããããã«ãªãã â»LINEã§ååããŸã§ã®è©³çްãªãããŒã«ã€ããŠã¯ ãã¡ãã®ããŒãž ããåç
§ãã ããã ãŸããéçºã«æºãã£ããšã³ãžãã¢ãšããŠãå人çã«æ°çç©ä»¶éç¥æ©èœã§è¯ããªãšæã£ãŠããç¹ã玹ä»ãããšäžèš3ç¹ã«ãªããŸãã åžææ¡ä»¶ã決ããŠãæ°çæ
å ±åãåãèšå®ãããŠããã°ã èªåãããµã€ããèŠã«è¡ããªããŠã æ°çç©ä»¶æ
å ±ãéç¥ããŠãããã éç¥æ
å ±ã§ããçšåºŠã®æŠèŠæ
å ±ïŒè³æãæåšå°ãæå¯ãé§
ããã®åŸæ©åæ°ãªã©ïŒãææ¡ã§ããã®ã§ã æ¬åœã«æ°ã«ãªã£ãç©ä»¶ã®ã¿ ããµã€ãã«èŠã«è¡ãã°è¯ãã æ®æ®µãã 䜿ãæ
£ããŠããLINEã¢ã㪠ã§ãããã®æçãªæ
å ±ãååããã ãã®æ©èœãéçºãããšæ±ºãŸã£ãéã«ãã¡ããã©èªåãäœã¿æ¿ããæ€èšããŠããã®ã§ãçŽ çŽã«ã ãã®æ©èœäœ¿ããããªã欲ãã㪠ããšæã£ãããšãèŠããŠããŸãã ã©ã®ãããªæ©èœæ¹åãè¡ã£ãã®ã æ°çæ
å ±åãåãèšå®ã®å»¶é·æ©èœ åæãªãªãŒã¹ã§ã¯æ°çæ
å ±åãåãèšå®ãè¡ã£ãŠããã30æ¥åŸã«ã¯èªåã§æ°çæ
å ±ã®é
ä¿¡ã忢ããã仿§ã§ããã ãã£ãŠã31æ¥ç®ä»¥éãæ°çæ
å ±ãåãåãçºã«ã¯ãç©ä»¶ã®æ€çŽ¢ç»é¢äžããããäžåºŠæ°çæ
å ±åãåãèšå®ãè¡ãå¿
èŠããããŸããã ä»åèªåã§åæ¢ãã仿§ã¯ãã®ãŸãŸãªã®ã§ãããèªåã§é
ä¿¡ã忢ãããŠããããšã«æ°ã¥ããŠããªãæ¹ãããã§ããããšããããšããã29æ¥ç®ã«ãææ¥ã§é
ä¿¡ã忢ããŸãããåŒãç¶ãé
ä¿¡ãååããŸããïŒããšãããç¥ãããšãšãã«ãLINEããŒã¯ç»é¢äžããæè»œã«å»¶é·ãè¡ãããã¿ã³ãé
ä¿¡ãã å©çšè
ãç°¡åã«é
ä¿¡åãåããå»¶é·ã§ããæ©èœ ã远å ããŸããã åäžç©ä»¶æ
å ±ãç¹°ãè¿ãéããªãããã«ãã åæãªãªãŒã¹ã§ã¯ãé
ä¿¡åãåãèšå®åŸãç»é²ããåžææ¡ä»¶ã§æ€çŽ¢ããçµæãã1é±é以å
ã«ç»é²ãããç©ä»¶æ
å ±ã®æ°çé ããLINEã§æ°çéç¥ã¡ãã»ãŒãžãéã£ãŠããŸããããåžææ¡ä»¶ã«ãã£ãŠã¯æ€çŽ¢çµæãå°ãªããæ¯æ¥åããããªæ
å ±ãéãããŠããŠããŸãæ¹ãäžéšããŸããã ä»åã¯ãã¡ãã®æ¹åãããçºã«ãäžåºŠéç¥ããç©ä»¶æ
å ±ã¯ç¹°ãè¿ãéããªãããã«ããŠã LINEã§éç¥ãæ¥ãæã®ããŸãåãæ
å ±ã...ããšãããã£ããäœéšãç¡ãã ããã«ããŸããã åãæ¥ã«åã建ç©ã®éšå±æ
å ±ãéããªãããã«ãã äžèšã®æ¹è¯ãšåããããªãã¹ãåãåãæ
å ±ãæçãªãã®ã«ãªãããã«ã åã建ç©ã®éšå±æ
å ±ãåäžæ¥ã«ã¯éç¥ããªã ããã«ããŸããã ç©ä»¶ã«ãã£ãŠã¯åã建ç©ã®å¥ã
ã®éšå±ãåæã«ç©ºãéšå±ãšããŠç»é²ãããããšããããåæãªãªãŒã¹ã§ã¯éç¥ãããã¡ãã»ãŒãžã®ç©ä»¶1ä»¶ç®ã101å·å®€ã2ä»¶ç®ã201å·å®€ãªã©ã®ããã«åã建ç©ã®å¥ã®éšå±ã䞊ã¶ããšããã£ãã®ã§ããªãã¹ãå€ãã®ç©ä»¶æ
å ±ãæ°çæ
å ±ãšããŠå±ããããšã®ããšããããã®æ©èœã远å ããŸããã ç©ä»¶æ
å ±ã§è¡šç€ºããæ
å ±ã远å åæãªãªãŒã¹ã§ã¯ãç©ä»¶åãæåšå°ãæå¯ãé§
ãŸã§ã®åŸæ©åæ°ãè³æãç©ä»¶ç»åãªã©ãLINEã§éç¥ããŠããŸããã ä»åã®æ¹ä¿®ã§ãç©ä»¶ãæã£ãŠãããã ããæ¡ä»¶ïŒ2é以äžãè§éšå±ãªã©ïŒåèŽæ
å ±ãå
ã«ã ãã ããæ¡ä»¶ãã«ããŽã©ã€ãºããæ
å ±ã衚瀺 ããããã«ããŸããã äŸãã°ãæ°çéç¥ãšããŠãç¥ããããç©ä»¶ãã2é以äžããããã¯ãååãããªã©ã®ãã ããæ¡ä»¶ãšåèŽããŠããå Žåã«ã¯ æ¥åœãããè¯ãããã ãšããã«ããŽãªæ
å ±ãããã¹ãã§ãç©ä»¶æ
å ±ãšåãããŠè¡šç€ºããããã«ããŸããã ç»é²ããåžææ¡ä»¶ã«å ããŠããã ããæ¡ä»¶ãåãããããäŒããæ
å ±ãåæã«èŠããããšã§ãç©ä»¶ã決ããéã®å€æææã®äžã€ã«ãªãã°ãããªãšæãããã®æ©èœã远å ããŸããã æ©èœæ¹åã«è³ããŸã§ã®ããã»ã¹ ç¶ããŠãäžèšã®æ©èœãå®éã«éçºãããŸã§ã«ã©ã®ãããªããã»ã¹ãçµãã®ãã«ã€ããŠç޹ä»ããããšæããŸãã åæãªãªãŒã¹çŽåŸ ãŸãã¯åæãªãªãŒã¹åŸã«éçºã«æºãã£ãã¹ããŒã¯ãã«ããŒã§KPTãçšããæ¯ãè¿ãäŒãéå¬ããŸããã æ¯ãè¿ãäŒã®å
容ã¯ã ãããžã§ã¯ãé²è¡ã«ãããŠè¯ãã£ãããšãæªãã£ãããšã次åãã©ã€ããŠã¿ããããšã«çç®ããŠã®æ¯ãè¿ãäŒ ã ã£ãã®ã§ãå
·äœçã«æ©èœæ¹åãããããšã«ã€ããŠã®èšåã¯ããŸããããŸããã§ããã åæãªãªãŒã¹ãã1ãæåŸ ãã®ãããžã§ã¯ãã«çŽæ¥çã«é¢ãã£ããé¢ãã£ãŠããªãã«éããããã©ã³ããŒããã¶ã€ããŒããšã³ãžãã¢ã§ãªã³ã©ã€ã³ãã¯ã€ãããŒãããŒã«ãçšããŠã®æ©èœæ¹åæ¡ã®ãã¬ã¹ãã宿œããŸããã ãã¬ã¹ãã§ã¯æ¹ä¿®ã«ãããå·¥æ°ããå®çŸå¯èœæ§ã«ã€ããŠã®èæ
®ã¯ãããã²ãšãŸãåã
ãã ãããªé¢šã«ãªã£ãæ¹ãè¯ãããªãšæãæ©èœ ãæ¬¡ã
ãšäžããããããã®ã¢ã€ãã£ã¢ãã°ã«ãŒãã³ã°ãããšãããŸã§ãè¡ããŸããã åæãªãªãŒã¹ãã1ãæååŸ ãã¬ã¹ãã§åºãã¢ã€ãã£ã¢ã®å
·äœçãªå®çŸæ¡ããUXåäžã®çºã®æ¹åæ¡ãªã©ããã©ã³ããŒãšãšã³ãžãã¢ã§åºããããããããã®æ¹ä¿®ã€ã¡ãŒãžãçã§å
±æããŸããã ãŸããéçºå·¥æ°ã«ã€ããŠãããŒã å
ã®ãšã³ãžãã¢éã§èªèãçµ±äžãããã£ãã®ã§ããã©ã³ãã³ã°ããŒã«ãŒãè¡ãã ããããã®éçºå·¥æ°ã€ã¡ãŒãžã®å
±æ ããã©ã³ããŒãšãšã³ãžãã¢éã§è¡ããŸããã åæãªãªãŒã¹ãã2ãæåŸ ãã©ã³ããŒåŽã§ã å©çšè
ã¢ã³ã±ãŒãã§ããã ãããæèŠããã©ã³ãã³ã°ããŒã«ãŒã§ç®åºããããã€ã³ããå
ã«æ¹ä¿®æ¡ã®åªå
床ä»ã ãè¡ããä»åã®æ©èœæ¹ä¿®ã宿œããŸããã ãŸãšã ä»åã¯ãLINEã§æ°çç©ä»¶éç¥ãåãåããæ©èœãšãLIFULLå
ã§ã©ã®ãããªæµãã§æ©èœæ¹åãè¡ã£ãŠããã®ãã«ã€ããŠç޹ä»ãããŠããã ããŸããã æ©èœæ¹åãããŸã§ã®ããã»ã¹ã«ã€ããŠã¯ãããžã§ã¯ããããŒã æ¯ã«ç°ãªãã®ã§ããã®æ¹æ³ãLIFULLã®ã¹ã¿ã³ããŒããšããããã§ã¯ãªãã®ã§ããã瀟å
ã§äžã€ã ãå
±éããŠããããšããããšããã°ã æã
ã¯è·çš®ã«é¢ãããåžžã«å©çšè
ç®ç·ã§ç©äºãæããèªåããšåããŠèããããã«ããŠãã ãšããç¹ã ãšæããŸãã LIFULLã®çµå¶ç念ã§ãã åžžã«é©é²ããããšã§ãããå€ãã®äººã
ãå¿ããã®ãå®å¿ããšãåã³ããåŸããã瀟äŒã®ä»çµã¿ãåµã ãå®çŸããçºã«ãç§ãã¡ã¯LINEã«éãããããããã£ãã«ãéããŠæåäœéšãåµåºã§ããããã«æ¥ã
ãããã¯ãæ¹åã«åãçµãã§ããŸãïŒ ãLINEã§æ°çç©ä»¶éç¥ãåãåããæ©èœã«ã€ããŠããä»åŸæŽã«æ©èœæ¹è¯ããŠããã€ããã§ãã®ã§ãã¢ããããŒãæ
å ±ãæ¥œãã¿ã«ãåŸ
ã¡ããã ããŸããšå¹žãã§ãã æåŸã«ãLIFULLã§ã¯å
±ã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
LIFULLãããã¯ããšã³ãžãã¢ãªã³ã°éšã®å ã§ããå
·äœçã«ã¯LIFULL HOME'Sã®éçºãè¡ã£ãŠããŸããç§ã¯ãã®äžã§ãè³è²žé åã®éçºãæ
åœããã°ã«ãŒãã«æå±ããŠããŸãã ä»åã¯ããšã³ãžãã¢ã»äŒç»ã»ãã¶ã€ããŒ3è·ç𮿷·åããŒã ã§ãå°ãä»ãŸã§ãšã¯éã£ã圢ã§ã¹ã¯ã©ã éçºã«åãçµãã ã®ã§ãã®è©±ãããããšæããŸãã ããŒãã¯ã3è·çš®äžæµã ã§ãã åæ æ¬èšäºã®ç«ã¡äœçœ® ãããŸã§ã®èª²é¡æ 3è·çš®äžæµã§å¹çè¯ãéçº 3è·çš®äžæµãšã¯ åæã®ç®æšèšå® æœçæ€èš æœçãã¬ã¹ãäŒ UTïŒãŠãŒã¶ãŒãã¹ãïŒå®æœ ãã€ãªãŒã¹ã¯ã©ã éçºå¹çã®åäž ã¹ããªã³ãã¹ã±ãžã¥ãŒã« ãŸãšã åæ éçºäœå¶ãªã©ã¯ããŒã ã®æ§æãä»çµã¿ã«ãã£ãŠå€§ããå€ããã®ã§ããŸãåæãšããŠç§ãæå±ããŠããããŒã ã®èª¬æãè¡ããŸãã æã
ã®éšéã¯LIFULL HOME'Sã®è³è²žéçºãæ
åœããŠããã仿ã¯5ã€ã®ããŒã ã«åãããŠããŸãããã®äžã§ãç§ã¯ãããã¯ãã®ã°ããŒã¹ããŒã ã«æå±ããŠããŸãã ããŒã ã®ã¡ã³ããŒã¯ãšã³ãžãã¢4人ãäŒç»2人ããã¶ã€ããŒ1人ãšããæ§æã«ãªã£ãŠããŠããšã³ãžãã¢ã®1人ãSMïŒã¹ã¯ã©ã ãã¹ã¿ãŒïŒãå
Œä»»ããŠããŸãã ãããã¯ããªãŒããŒãšåŒã°ããååšã¯ããŒã å
ã«ã¯ååšããããããã¯ãã®æ¹åæ§ãããã¯ãã°æœçã®åŠ¥åœæ§ã¯äŒç»äŒè°ã§å€æãããŸãã ã°ããŒã¹ããŒã ã¯ãšãããããã¯ãã«å¯ŸããŠKPIç®æšãæã£ãŠãããæã
ã¯ãã®ç®æšãæãéããŠéæããããšã䜿åœãšããŠåããŠããŸãã ãŸããåã¹ããªã³ãã¯2é±éåäœã§èšå®ãããŠããŸãã æ¬èšäºã®ç«ã¡äœçœ® æ¬èšäºã¯ç§ãæå±ããŠãã1ããŒã ã®åãæ¹ã«ãã©ãŒã«ã¹ãåœãŠãŠæžããŠãããŸããã仿ã¯ããŒã éã®èª¿æŽãå
šäœã§ã®ããã¯ãã°ã®éçšãªã©ã«ãéšéãäžããŠåãçµãã§ããã®ã§ããã¡ãã®å
容ã¯ä»¥äžã®èšäºãåèã«ããŠã¿ãŠãã ããã www.lifull.blog ãŸããããã§ã¯ã¹ã¯ã©ã äžã®å
·äœçãªåãæ¹ã説æããŠããŸããããä»è·çš®ã«æåŸ
ããŠããããšããããŒã å
ã§æŠãåãããŠè·çš®éã®é£æºã匷ããåãçµã¿ãå¥éšéã®æ¹ãæè¿èšäºã«ããŠããã®ã§ããã¡ããæ¯éã芧ãã ããã www.lifull.blog ãããŸã§ã®èª²é¡æ ãããŸã§ã®ã¹ã¯ã©ã éçºã§ããã¡ã³ããŒæ§æãç®æšã®æã¡æ¹ã¯ã»ãŒåãã§ããã æã
ãæããŠããèª²é¡æã¯ãç¹ã«åæœçã®ä»æ§èª¿æŽã«é¢ããŠã§ããåºæ¬çã«ããã¯ãã°ã«è¿œå ããæœçã¯äŒç»ã®æ¹ãæœçæ¡ãåºããäŒç»å
šäœã®äŒè°ã§æ±ºå®ãã仿§äœæåŸã«åªå
é äœä»ããè¡ã£ãç¶æ
ã§ããã¯ãã°ã«è¿œå ããŠããŸããããããŠèšç»MTGã§åãšã³ãžãã¢ã«ã¢ãµã€ã³ãè¡ããŸãã éçºãå§ãããšã仿§ã«é¢ããŠçåãæã£ãããã£ãšè¯ãæ¹æ³ãæãã€ãããããããšãè¯ããããŸããããŸã仿§æ±ºå®åŸã«ãã¶ã€ã³ããã¶ã€ããŒãè¡ãã®ã§ããããã®æã«ãäŒããã«ããããªã©UX芳ç¹ã§ã®èª²é¡ç¹ãçºèŠãããããšãããããã®åºŠã«ä»æ§èª¿æŽãçããŠããã®ã§å°ãå¹çæªããæããŠããŸããã 3è·çš®äžæµã§å¹çè¯ãéçº 3è·çš®äžæµãšã¯ ãããŸã§ã®èª²é¡ã解決ããããã«ãæœçç«æ¡ãã仿§æ±ºå®ãŸã§ããšã³ãžãã¢ã»äŒç»ã»ãã¶ã€ããŒ3è·çš®å
šå¡ã§è¡ãããšããåãçµã¿ãæã
ã¯3è·çš®äžæµãšåŒãã§ããŸãã åæã®ç®æšèšå® åŸæ¥ã¯ãªãŒããŒéãåããŒã ã®è¿œãç®æšãèšå®ããã¡ã³ããŒã¯ãããèªåã®äžã«èœãšã蟌ãã§æã®å§ãŸããè¿ããŠããŸãããããã«å¯ŸããŠä»æã¯3è·çš®äžæµãå®çŸããããã«ããŸãããŒã ãçµæãããæåã«ãåããŒã æ¯ã«å幎ã§è¿œãã¢ãŠãã«ã ã®èšå®ãè¡ããŸãããç®çãšããŠã¯ åãæ¹åãåããŠèµ°ãåºãããšãã§ããç¶æ
ã«ãã ããããã§èªåŸããŠç®æšã®ããã«åããç¶æ
ã«ãã 以äž2ç¹ã§ãã ä»ãæãçµããããšããŠãããšããã§ããæ¯ãè¿ã£ãŠã¿ããšããã®ç®æšèšå®ã¯ãšãŠã倧äºã ã£ããªãšæ¹ããŠæããŸãããåŒç€Ÿã¯KPIãããžã¡ã³ãã«åãçµãã§ããã®ã§ãéšãšããŠå€§ããªKPIã¯æã£ãŠããã®ã§ããããã®KPIãéæããããã®æ¹æ³ã¯åããŒã ã«å§ããããŠããŸãããããã¡ã³ããŒã§æ±ºããããšã§ãæãéããŠ3è·çš®å
šå¡ã§ãã£ãããšç®æšãèŠæ®ããŠåãããªãšæããŸãã æœçæ€èš æœçãã¬ã¹ãäŒ ç®æšãéæããããã®æœçæ€èšã¯ããããŸã§äŒç»è·ãã¡ã€ã³ã§è¡ã£ãŠããŸããããããäžã«æããèª²é¡æããã£ãã®ã§ãè·çš®é¢ä¿ãªãæœçæ¡åºãããå
¥ãããã«ããŸããã倧äœãé±1æéã®ããŒã¹ã§æœçãã¬ã¹ãäŒãéå¬ããæ¬¡ä»¥éã®ã¹ããªã³ãã§å®æœããæœçã®å€§ãŸããªä»æ§æ±ºå®ãŸã§è¡ããŸããã ãšã³ãžãã¢ãäžæµããå
¥ãããšã§ãããå·¥æ°ã®å°ãªãæ¹æ³ãå¥ã®å®çŸæ¹æ³ãªã©ã¢ã€ãã¢ã®å¹
ãåºãã£ããããã¶ã€ããŒãå
¥ãããšã§ æœçãã®ãã®ã«å¯ŸããŠãŒã¶ãŒã®èŠç¹ãåæ ãããããšãã§ãããããŸãããŸã仿§äœæã®æç¹ã§ãã¶ã€ããŒããã¥ãžã¥ã¢ã«çã«å¯èŠåã§ããã®ã§ãä»è·çš®ããã仿§ãçè§£ãããããªã3è·çš®äžæµãå éãããããšãã§ããŸãã UTïŒãŠãŒã¶ãŒãã¹ãïŒå®æœ UXãããã¯ããäœã£ãŠãããšæ°å€åæã¯è¡ã£ãŠããã®ã§èª²é¡ãšãªã£ãŠããéšåã¯åããã®ã§ãããããªããŠãŒã¶ãŒã¯é¢è±ããã®ãããäœãè¿·ãããŠããã®ããçã®åå ãäœã£ãŠããåŽã®ç®ç·ã ãšåãããªãäºãå€ã
ãããŸããããã§ã¯3è·çš®éãŸã£ãŠãææçŸ©ãªæœçãã¬ã¹ãã¯è¡ããŸããã ããã§æã
ã®ããŒã ã¯UTãããŒã å
ã§è¡ãã課é¡ã®åå ãæ¢ãããã«ããŸãããUTåæããèŠããŠããåå ããã¬ã¹ãäŒã«æã¡èŸŒãããšã§æœçã®æ¡åºãã®ææãšããäºãã§ããŸããã åŒç€Ÿã«ã¯UTãå°éã«ããŠããéšçœ²ãããã®ã§ãããæ§ã
ãªãããã¯ããèŠãŠããã®ã§å®æœåæ°ã«éçããããŸãããããããŒã å
ã§è¡ãããšã§PDCAãæ©ãåããããã«ãªããŸãããUTãè¡ãããšã§èª²é¡æãèŠããã ãã§ãªããæœçã®å¹æãå®éã®åããèŠãªãã確èªã§ããã®ã§ã¢ãããŒã·ã§ã³ã«ãç¹ãããŸãããã ãããŒã å
ã§å®æœãããšã¡ã³ããŒã®å·¥æ°ã嵩ãã®ã§ãUTããŒã ãšé£æºãåã£ãŠèšæ©å¿å€ã«æ
åœç¯å²ã決ããããªã©å·¥å€«ãããšè¯ããšæããŸãã ããŒã ã§èšèšãåæã®åèã«ããæžç±ãåèã«çœ®ããŠãããŸãã http://www.amazon.co.jp/dp/4274226719 www.amazon.co.jp ãã€ãªãŒã¹ã¯ã©ã æœçãã¬ã¹ãäŒã§å®æœã決ãŸã£ãæœçã¯ãäŒç»ã现ãã仿§æ±ºå®ãè¡ãããã¶ã€ããŒããã¶ã€ã³ãäœæããŸããéäžã§æ©ããã€ã³ããåºãŠããå Žåãçžè«ãå¿
èŠãªå Žåã¯ãããŒã ã¡ã³ããŒãæã£ãŠãããã€ãªãŒã¹ã¯ã©ã ã§çžè«ãè¡ããŸãã ããã§ã®çžè«ã§ã¯figmaãXDãªã©ã®ããŒã«ã䜿ã£ãŠå¯èŠåããããã®ãããŒã¹ã«å
šå¡ã§è°è«ããã®ã§ãèŠèŠçã«ãæ³åããããæ·±ãè°è«ãå¯èœã§ããå¿
èŠã«å¿ããŠãšã³ãžãã¢ããããã¿ã€ããäœæãæã¡èŸŒãããšããããŸãã éçºå¹çã®åäž åŸæ¥ã¯èª²é¡ã®çºèŠãã仿§ã«èœãšã蟌ãéšåãŸã§ãäŒç»è·ãè¡ãããã®åŸã«ãã¶ã€ã³ã»å®è£
ã»ãªãªãŒã¹ãšç¶ã圢ãåãããŠããŸããããã®å Žåã ãšäžæµå·¥çšã¯ãŠã©ãŒã¿ãŒãã©ãŒã«ã®ããã«ãªã£ãŠãããçµæãåºããŸã§ã«æéãããããŸãã ããããäžã«è¿°ã¹ããããªUTã»æœçãã¬ã¹ããéããŠ3è·çš®å
šå¡ã§èª²é¡çºèŠããã¢ã€ãã¢åºããŸã§ãè¡ããå
šå¡ã®èªèãæã£ãç¶æ
ã§ä»æ§äœæã»å®è£
ã»ãã¶ã€ã³ãªã©ãåæäžŠè¡ã§è¡ãããšã«ãã£ãŠããªãªãŒã¹ãŸã§ã®å·¥çšãçããªãå¹çããéçºãé²ããããšãå¯èœã«ãªããŸãã ãŸããå
šå¡ã®èªèãæã£ãŠããç¶æ
ãªã®ã§ãçžè«ãè°è«ãå¿
èŠãªéã¯ããããã®è·çš®ã®èгç¹ã§ã¹ã ãŒãºã«æèŠãèšãåãããšãå¯èœã§ãã éçºå¹çã®åäž ã¹ããªã³ãã¹ã±ãžã¥ãŒã« åèã«ãªãããç¥ããªãã®ã§ãã¹ããªã³ãã®ã¹ã±ãžã¥ãŒã«äŸãèšèŒããŸãã ã¹ããªã³ãã¹ã±ãžã¥ãŒã« ãªãªãŒã¹ã¹ã±ãžã¥ãŒã«ã®é¢ä¿ã§ãæšææ¥ãã¹ããªã³ãåºåãã«ãªã£ãŠããŠãèšç»MTGãšæ¯ãè¿ãMTGãè¡ããŸãã èšç»MTGã§ã¯äž»ã«æœçã¢ãµã€ã³ãšã¹ããŒãªãŒãã€ã³ãã®èšå®ãè¡ããŸãã æœçã®åªå
é äœä»ãããã¯ãã°ã®æŽçã¯åºæ¬çã«SMãšäŒç»è·ã§æ°Žææ¥ã®ããã¯ãã°ãªãã¡ã€ã¡ã³ãã®æéã«è¡ããŸãã äžã§è¿°ã¹ãæœçãã¬ã¹ãäŒã¯æææ¥ã«è¡ãããã«ããŠããŸããã ãŸãšã ä»åã3è·çš®äžæµã§ã¹ã¯ã©ã ãæŠã£ãŠã¿ãŠããšã³ãžãã¢ç®ç·ã§éçºã®ãããããã¯å¿è«ãç®æšã«ã³ãããããããšæãææ¬²ãïŒã€ïŒã€ã®æœçã«å¯Ÿããæãå
¥ãã以åããå¢ããããªãšæããŸããã å®éã®ãŠãŒã¶ãŒã®åããèŠãŠãããŒã å
ã§æã¡æãèããããšã§ãªããã®æœçãããã®ãããŠãŒã¶ãŒã«ã©ããªã£ãŠæ¬²ããã®ããèªåã®äžã«ãããŒã ã®äžã«ããã£ãããšèœãšã蟌ãããšæã£ãŠããŸãã 3è·çš®äžæµã¯ã©ã®è·çš®ã§ãã£ãŠããããŒã ã®ç®æšãåæœçã«ããã³ãããããŠããåãã®äžã€ã ãšæã£ãŠããã®ã§ãä»åŸãããè¯ãéçºäœå¶ãç®æããŠãããããšæããŸãã LIFULLã§ã¯å
±ã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ãLIFULLã§iOSã¢ããªã±ãŒã·ã§ã³ã®éçºãæ
åœããŠããå±±æã§ãã LIFULL HOME'S iOSã¢ããªã¯2009幎12æã«ãªãªãŒã¹ãããŠä»¥æ¥ãçŽ12幎ã»ã©ãµãŒãã¹ãç¶ç¶ããŠãããããžã§ã¯ãèŠæš¡ã¯å¹Žã
倧ãããªã£ãŠããŸãã æ°æ©èœå°å
¥ãæ¢åæ©èœã®æ¹ä¿®ãªã©ãéããã«ã€ããŠã¢ããªã®ãã«ãæéãå»¶ã³ã ãšã³ãžãã¢ã®äœæ¥æéãå§è¿«ãéçºå¹çãäžã£ãŠããŸãæºè¶³ããç¶æ
ã§éçºãè¡ãããšãé£ãããªããŸãã ãããªç¶æ³ãåé¿ãã¹ããèªååããŠä»»ããããéšåã¯ä»»ããŠãšã³ãžãã¢ã¯éçºã«å°å¿µã§ããç°å¢ãäœãããã«ãCI/CDãµãŒãã¹ã®Bitriseã2018幎6æé ããå°å
¥ãçŽ3幎ã»ã©å©çšããŠããŸãã ä»åã¯ãèŠæš¡ã®å€§ãããªã£ãLIFULL HOME'S iOSã¢ããªã§Bitriseãå©çšããéã«çŽé¢ããåé¡ãäºäŸãªã©ãã玹ä»èŽããŸãã Bitriseãšã¯ Bitriseã¯ã¢ãã€ã«ã¢ããªéçºã«ç¹åããCI/CDãã©ãããã©ãŒã ãæäŸããŠããããµãŒãã¹ã§ãã ãã«ãã®äžé£ã®æµãããã¯ãŒã¯ãããŒããšãã圢ã§äœæã§ããŸãã äœæããã¯ãŒã¯ãããŒã«å¯ŸããŠããªã¬ãŒãèšå®ããããšã§ãããªã¬ãŒã¿ã€ãã³ã°ã§èªåçã«ã¯ãŒã¯ãããŒãèµ°ãå§ããŸãã ãŸãããããã®äœæã¯GUIäžã§èšå®ããããšãã§ããç°¡åã«CI/CDç°å¢ãæ§ç¯ããããšãã§ããŸãã HOME'S iOSã¢ããªã«ãããBitrise(CI/CD)ã®åœ¹å² ãã¹ããåã³Lint Checkã®å®è¡ Pull Requestãç«ã¡äžããã¿ã€ãã³ã°ããŸãã¯PRã«ã³ãŒããPushããã¿ã€ãã³ã°ã§ãã¹ããšLint Checkã宿œããçµæãPRã«ã³ã¡ã³ãããŸãã ãã¹ãçšã¢ããªã®äœæãåã³é
åž ãã¹ãçšã¢ããªãäœæããã€ã³ã¹ããŒã«çšãªã³ã¯(Bitrise.io)ã®QRã³ãŒããSlackã«éç¥ããŸãã App Store Connectãžã®ããªããªãŒ masterãã©ã³ãããReleaseãã©ã³ããžPRãåºããæã«ãApp Store Connectãžã®ã¢ããªã®ããªããªãŒã宿œããŸãã CIãæ¢ãããã«ãæé ææ°ã®æéãã©ã³ã§ã¯ããã«ãæéã®äžéã¯èšããããŠããŸãããã以åã®æéãã©ã³ã§ã¯45åãŸãã¯90åã®ãã«ãæéã®äžéãèšããããŠããããã«ãã«æéãããããããžã§ã¯ãã®å Žåã¯CIãå®äºããåã«åŒ·å¶çµäºãããŠããŸãããšããããŸããã ç»åã¯ä»¥åã®Bitriseã®ç®¡çç»é¢ã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã â»äžéšç»åãå å·¥ããŠããŸã çŸåšã¯å¥çŽãã©ã³ãèŠçŽãäžéæéã90åã«ãªã£ãŠããŸããåœæã¯45åã®ãã©ã³ã§ãã£ãããããææãå¢ã«ãã¹ãŠã®Pull Requestã®UTãéããªããšããåé¡ãçããŸããã äž»ãªåå ãšããŠã¯ãã¢ãã€ã«ããŒã¿ããŒã¹ã®Realmã®ãã«ãæéã圱é¿ããŠããŸãã 45åã®ãã«ãæéã®å
ãçŽ14åãRealmã®ãã«ãæéã«å°æãããŠããŸãUTãèµ°ãåã«åŒ·å¶çµäºãããŠããŸã£ãŠããã®ã§ãã åœæã¯CocoaPodsçµç±ã§ãRealmãå©çšããŠããŸãããCocoaPodsçµç±ã§å©çšããŠããçç±ã¯ãRealm Frameworkèªäœã®ãµã€ãºã§ãã Carthageãçšããã°ãã«ãæžã¿ã®Frameworkããªããžããªã«å«ããããšãã§ããã®ã§ãã«ãæéãççž®ããããšãåºæ¥ãŸãããRealm Frameworkã®ãã«ãåŸã«åŸãããFrameworkã®ãã¡ã€ã«ãµã€ãºã100MBãè¶
ããŠããŸãGitHubã«Pushåºæ¥ãŸããã§ããã äžæ¹CocoaPodsã¯ãéœåºŠãã«ãããŠFrameworkãçæããŸãããªããžããªã«ã¯Podfileã®ã¿å«ããããšã§ãéçºè
ãè€æ°äººããŠãPod installãå®è¡ããã ãã§å©çšããŠããFrameworkãæå
ã«å°å
¥ããããšãå¯èœã§ãã ãã以å€ã«ãCarthage + Git LFSãçšããŠããã«ãæžã¿ã®FrameworkãGit LFSåŽã«çœ®ããªã©ã®æ¡ããããŸãããè²»çšãªã©ã®åé¡ããåœæã®éçºããŒã ã§ã¯CocoaPodsã§Realmãæ±ãããšãšããŸããã Realmå°å
¥ããæãæµããå©çšããFrameworkãªã©ãå¢ã次第ã«ãã«ãæéãè¥å€§åãç¶ããããšã§ãã€ãã«å¥çŽãã©ã³ã®äžéæéãè¶
ããããã«ãªã£ãŠããŸããŸããã 倧ããªèŠå ãšããŠã¯ãApple Watchåãã®æ°æ©èœã§ãRealm Frameworkãå©çšããããšã圱é¿ããŠããŸããåŸæ¥iOSåãã®ãã«ãã ãã ã£ããã®ãwatchOSåãã®ãã«ããå¿
èŠã«ãªã£ãããšã§ãã«ãæéã倧å¹
ã«äŒžã³ãŠããŸããŸããã ãã®ãŸãŸCIãåããªãç¶æ³ãç¶ããšBitriseã®æé¡è²»çšãç¡é§ã«ãªã£ãŠããŸãããšããiOSããŒã ãšããŠã¯CIç°å¢äžã§ã®ãã«ãæéççž®ãæ¥åã§ããã ãã€è¿œå ã®ã³ã¹ãã倧ããæããã«åé¡ãè§£æ¶ãããšããããšãæ±ããããŸããã CarthageãæŽ»çšãã Carthageã«ã¯GitHubäžã«ã¢ããããŒããããŠãããã«ãæžã¿ã®Frameworkãå©çšããæ©èœãåãã£ãŠããŸãã ãã®æ©èœãå©çšããã«ã¯Frameworkããã«ãããXcodeã®Versionãæããå¿
èŠããããŸãã ä»åã¯ãã®æ©èœã«çç®ãCIç°å¢äžã§ã®ãã«ãæéãççž®ããŠã¿ãããšã«ããŸããã è³åŠäž¡è«ããåé¡ã§ãããä»ååé¡ã«ãªã£ãŠããRealmé¢é£ã®Carthageã§ã®ãã«ãåŸåŸããããã¡ã€ã«ã.gitignoreã§gitã®è¿œè·¡å¯Ÿè±¡ããé€å€ããŸãã Realm以å€ã®Carthageçµç±ã§å°å
¥ããFrameworkã¯ããªããžããªã«å«ããããã«å€æŽããŠããŸãã # Realmã¯binaryãåå©çšãããããã远跡ããé€å€ãã */Carthage/Build/iOS/**Realm**.framework/ */Carthage/Build/iOS/**Realm**.framework.dSYM/ */Carthage/Build/iOS/**Realm**.framework/ */Carthage/Build/iOS/**Realm**.framework.dSYM/ ãã®å€æŽã«ãããªããžããªãã¯ããŒã³ããçŽåŸãRealm以å€ã®å¿
èŠãªFrameworkã¯åŸãããç°å¢ãåºæ¥äžãããŸãã ãªããžããªã¯ããŒã³åŸãäžèšã®ã³ãã³ããå®è¡ãRealmã®ã¿ååŸããŸãã $ carthage update --platform " iOS, watchOS " realm-cocoa å®è¡æãCartfileã§æå®ããRealm Frameworkã®ããŒãžã§ã³ã«çŽã¥ããã«ãæžã¿ã®Frameworkããã«ãããXcodeã®ããŒãžã§ã³ãCIç°å¢ã§å©çšããŠããããŒãžã§ã³ãšäžèŽããå Žåã¯ããã«ãäžèŠã§Frameworkãå©çšããããšãã§ããŸãã ããã«ãã£ãŠCIç°å¢äžã§çŽ14åã»ã©ããã£ãŠãããã«ãæéãçŽ2åãŸã§ççž®ããããšã«æåããŸããã å°å
¥åŸã®ãã¡ãªãã ãã«ãæžã¿ã®Frameworkããã«ãããXcodeããŒãžã§ã³ã§ãªãããŒãžã§ã³ã§ãã¢ããªããã«ãã«ããããšFrameworkãåãã«ãã®å¿
èŠãçãŸããŠããŸããã«ãæéãå»¶ã³ãŠããŸããŸãã ãã®ãããããŒã å
ã§å©çšããXcodeã®ããŒãžã§ã³ãäžããéã«ã¯Realmã®ããŒãžã§ã³ãèŠçŽãå¿
èŠãçãŸããŠããŸããŸããã éåžžã®æ©èœæ¹ä¿®ãæ°æ©èœè¿œå ã§ã¯å€§ããªæ¯éã«ã¯ãªããªããã®ã®ãæ¯å¹Ž9æé ã«è¡ãããXcodeã®ã¡ãžã£ãŒã¢ããããŒãã®éã¯ãFrameworkåŽãææ°ã®Xcodeã«å¯Ÿå¿ããããšãåŸ
ããªããšCIãå©çšã§ããªããšããç¹ãé£ç¹ã§ãã ãã®ãããªãã¡ãªããã䌎ãã®ã§ããããªæ¹æ³ãããšããäºäŸãšããŠé ã®çé
ã«æ®ããŠããã ããã°å¹žãã§ãã ãã¡ãªãããéçšã§ã«ããŒãã ãã¡ãªããã蚱容ããŠããŸããšXcodeã®ã¡ãžã£ãŒã¢ããããŒããç¡ãéãXcodeã®ããŒãžã§ã³ãšFrameworkããŒãžã§ã³ãåºå®åãããŠããŸããªã¹ã¯ãçãŸããŠããŸããŸãã å€ãããŒãžã§ã³ã§ãéçºãç¶ç¶ããããšã¯åºæ¥ãŸãããFrameworkå
ã§å©çšããŠããiOSã®ã¡ãœããã®éæšå¥šã廿¢ãªã©ã«ãã£ãŠFrameworkã®ããŒãžã§ã³ã¢ãããæ¥éœæ±ããããŠããŸãå Žé¢ãªã©ãçãŸããŸãã宿çãªã¢ããããŒããè¡ãäœå¶ãæŽããããšã§äœè£ãæã£ã察å¿ãå¯èœã«ãªããæ°ããæ©èœãªã©ã®å°å
¥ãç©æ¥µçã«è¡ãããšãåºæ¥ãŸãã çŸåšiOSããŒã ã§ã¯ã宿çãªFrameworkã®ããŒãžã§ã³ã¢ããããŒããè¡ãããšã§ãããŒãžã§ã³åºå®åã®ãã¡ãªããã»ãªã¹ã¯ãäœæžããããšããŠããŸãã Bitriseã§ã©ã€ãã©ãªããŒãžã§ã³ã®æŽæ°ãç£èŠãã ä»åã¯ãã©ã€ãã©ãªã®ã¢ããããŒãã確èªãSlackã«éç¥ããã®ã¯ãŒã¯ãããŒãçšæã宿çã«ã¯ãŒã¯ãããŒãå®è¡ããããšã§ãã©ã€ãã©ãªããŒãžã§ã³ã®æŽæ°ãç£èŠããããã«ããŸããã çŸåšã¯ãCocoaPodsã§ç®¡çããŠããã©ã€ãã©ãªã®ã¿ã察象ã«ããŠããŸãã ãããå®çŸããããã®ç°¡åãªæé ã¯ä»¥äžã«ãªããŸãã CocoaPods管çäžã®ã©ã€ãã©ãªã®ææ°ããŒãžã§ã³ã pod outdated ãçšããŠããªã¹ãã¢ãããã ãªã¹ãã¢ããããäžãããã©ã€ãã©ãªãšããŒãžã§ã³ã«ã€ããŠèšèŒãããŠããåè¡ãæœåºãã æœåºããçµæãSlackã«éç¥ãã å®éã«äœæããã¯ãŒã¯ãããŒãåäœããå±ããSlackãžã®éç¥ãäžèšã«ãªããŸãã iOSããŒã ã§ã¯ãéææ¥ã«æ¬¡é±ã®ã¿ã¹ã¯èšå®ãè¡ãããŒãã£ã³ã°ãããã®ã§æ¯é±éææ¥ã« pod outdated ã®çµæãéç¥ããŠããŸãã ããã«ããããŒãã£ã³ã°æã«Frameworkã®æŽæ°ç¶æ³ã確èªããããŒã ã¡ã³ããŒå
šå¡ã§ã©ã®Frameworkã®ã¢ããããŒãã«å¯ŸããŠåªå
çã«å¯Ÿå¿ãè¡ãããªã©ã話ãåããæ©äŒãäœã£ãŠããŸãã ä»åŸã®å±é çŸåšã¯Slackãžã®éç¥ã«çãŸã£ãŠãããã¢ããããŒãäœæ¥ãªã©ã¯æäœæ¥ã«é Œã£ãŠããŸãããŸããç£èŠå¯Ÿè±¡ãCocoaPodsã§ç®¡çããŠããFrameworkã«çãŸã£ãŠããŸãã ä»åŸã¯ãFrameworkã®ã¢ããããŒãã®å¿
èŠãçãŸããã°èªåçã«Pull Requestãèªåçæããä»çµã¿ãCarthageã§ç®¡çããŠããFrameworkãå«ããŠéç¥ã§ãããããªä»çµã¿ã¥ãããé²ããŠããäºå®ã§ãã çµããã« é·å¹Žéçºãç¶ããããŠãããããžã§ã¯ãã®ããéæã«ã¬ã¬ã·ãŒãªéçšã§ãã£ãããåŠçãæ®ã£ãŠããŸãã æ¥ã
ã¢ããªãå©çšããŠãã ããæ¹ã«å¯ŸããŠãããè¯ã䟡å€ãçŽ æ©ãæäŸãç¶ããããã«ããã®æãã®æã§ããŒã ã«åã£ãéçšã®æ¹åãä»çµã¿äœããè¡ãç¶ããããšã倧åã§ãã iOSã¢ããªãéããäœãŸãæ¢ãäœéšãä»ä»¥äžã«ããè¯ãããããã«ããéçºã®ãããããã¢ããªã®å質åäžã«ã€ãªããæ¹åã¯ããŒã ãšããŠç¶ç¶çã«æ¹é©ãç¶ããŠãããããšèããŠããŸãã LIFULLã§ã¯äžç·ã«ããè¯ãäœéšãäœã£ãŠããã仲éãåéããŠããŸãããããããã°ãã¡ããåãããŠã芧ãã ããã hrmos.co hrmos.co
æ€çŽ¢ãšã³ãžã³ããŒã ã®å®®åŽã§ãã 仿¥ã¯ãSolrå
éšã§ã䜿çšãããŠããå
šææ€çŽ¢ã¢ã«ãŽãªãºã ã®è»¢çœ®ã€ã³ããã¯ã¹ã«ã€ããŠè©±ãããããšæããŸãã 転眮ã€ã³ããã¯ã¹ã®ä»çµã¿ã«ã€ããŠãã£ããçè§£ãããäººã®æå©ãã«ãªãã°å¹žãã§ãã å
šææ€çŽ¢ã¢ã«ãŽãªãºã å
šææ€çŽ¢ã®æ¹æ³ãšããŠå€§ãŸãã« ãgrepåããšãã€ã³ããã¯ã¹åãããããŸãã å€ãã®æ€çŽ¢ãšã³ãžã³ãå
šææ€çŽ¢ã©ã€ãã©ãªã§ã¯ãã€ã³ããã¯ã¹åã䜿ãããŠããŸãã ããã¯grepåãéœåºŠãã¹ãŠã®ææžãæ€çŽ¢ããã®ã«å¯ŸããŠãã€ã³ããã¯ã¹åã¯ãã®åã®éã玢åŒãçšããŠå¹ççã«æ€çŽ¢ãè¡ãããšãã§ããããã§ãã ã€ã³ããã¯ã¹ã®ã¢ã«ãŽãªãºã ãããã€ããããŸãããä»å㯠apache/solrã»apache/luceneã§ã䜿çšãããŠãã転眮ã€ã³ããã¯ã¹ã«ã€ããŠãç°¡åãªäŸãçšããŠè§£èª¬ããããšæããŸãã ä»åã¯è»¢çœ®ã€ã³ããã¯ã¹ã䜿çšããç°¡åãªäŸãšããŠãã google/codesearch ãã䜿çšããŸãã 転眮ã€ã³ããã¯ã¹é¢é£ã®åºç€ç¥è å®éã®äŸãèŠãªãã説æããåã«ã説æããäžã§å¿
èŠãªåºç€ç¥èã«ã€ããŠè§ŠããŠãããŸãã ãã¹ãã£ã³ã°ãªã¹ã ãã¹ãã£ã³ã°ãªã¹ããšã¯ãèŸæžã®ååèªãã©ã®ææžã«åºçŸããããä¿åãããã®ã§ãã ããŒãåèªãå€ãææžã®é
åãšãã飿³é
åãã€ã¡ãŒãžãããšããããããããšæããŸãã æ€çŽ¢ãè¡ãéã¯æ€çŽ¢ã¯ãšãªã«å«ãŸããåèªããšã«ãã¹ãã£ã³ã°ãªã¹ããååŸãããã®ç©éåãåãããšã§æ€çŽ¢ã¯ãšãªã«å«ãŸããåèªãå«ãã ææžãååŸããããšãã§ããŸãã 以äžã®ãããªãã¹ãã£ã³ã°ãªã¹ãããã£ãå Žåããsearchãã®åèªãå«ãŸããŠããã®ã¯ãdoc1, doc2, doc3ãã§ããããšãããããŸãã ãsearchããengineãã®äž¡æ¹ã®åèªãå«ãŸããŠããã®ã¯ãdoc1, doc2, doc3ããšãdoc1, doc5ãã®ç©éåãªã®ã§ããdoc1ãã®ã¿ãšãªãããšãããããŸãã ãã®ããã«ãåèªã«å¯ŸããŠææžãä¿åãããŠãããã®ãææžã¬ãã«ã®ãã¹ãã£ã³ã°ãªã¹ããšåŒã³ãŸãã search: doc1,doc2,doc3 searcher: doc1,doc2,doc3,doc4 engine: doc1,doc5 ... ãã ãããsearch engineãã®ããã«é£ç¶ããŠããåèªãæ€çŽ¢ããããã¬ãŒãºæ€çŽ¢ãè¡ãå Žåã¯ã©ã®ææžã«åºçŸãããã ãã§ã¯ãªããåºçŸããäœçœ®ãåæã«ä¿åããå¿
èŠããããŸãã ãã®ããã«åºçŸããäœçœ®ãä¿åãããŠãããã®ãåèªã¬ãã«ã®ãã¹ãã£ã³ã°ãªã¹ããšåŒã³ãŸãã æ€çŽ¢ãè¡ãéã¯ãæ€çŽ¢ã¯ãšãªã«å«ãŸããåèªããšã«ãã¹ãã£ã³ã°ãªã¹ããååŸãããã®ç©éåãåããååŸããææžã®åºçŸäœçœ®ããsearch engineãã®ããã«é£ãåã£ãŠããã®ã ããåãåºãããšã§ãã¬ãŒãºæ€çŽ¢ãè¡ãããšãã§ããŸãã å®éã®è»¢çœ®ã€ã³ããã¯ã¹ã®äžèº« ããã§ã¯ãcodesearchã®ã€ã³ããã¯ã¹ã®äžèº«ãå®éã«è¿œã£ãŠãããŸãããã Indexæ§é äœã®äžèº«ãã»ãŒãã®ãŸãŸã€ã³ããã¯ã¹ãã¡ã€ã«ã«å¯Ÿå¿ããŸãããã¡ã€ã«ã®æ§é ã¯ä»¥äžã®ããã«ãªã£ãŠããããã€ããªãã©ãŒãããã§ä¿åãããŠããŸãã index format: "csearch index 1\n" # magic list of paths list of names list of posting lists name index posting list index offset of path list # 4bytes offset of name # 4bytes offset of posting lists # 4bytes offset of name index # 4bytes offset of posting list index # 4bytes "\ncsearch trailer\n" # trailer magic ããããã®é
ç®ã«ã€ããŠèª¬æããŠãããŸãã list of paths ã¯ããã¡ã€ã«åãããã¯ãã£ã¬ã¯ããªåããNULLçµç«¯(\x00)ã§ä¿åãããŠããŸãã 空æåã§çµäºããŸããã€ã³ããã¯ã¹äœæã®éã«æå®ãããã¹ãä¿åãããŸãã list of names ã¯ããã¡ã€ã«åãNULLçµç«¯(\x00)ã§ä¿åãããŠããŸãããã¡ã€ã«ã«ã¯ãããããã¡ã€ã«IDãå²ãåœãŠãããŠããããã¡ã€ã«IDé ã«ãœãŒããããŠããŸãã空æåã§çµäºããŸããå®éã®ãã¡ã€ã«äžã€äžã€ã®ååãæ ŒçŽãããŠããŸãã list of posting lists ã¯ããã¹ãã£ã³ã°ãªã¹ããtrigramãšãã¡ã€ã«IDã®å·®åã®ãã¢ã§ä¿åãããŠããŸãããã¡ã€ã«IDã¯32-bitã®æŽæ°ã§è¡šçŸãããŠããŸãããå
šãŠããã®ãŸãŸãšã³ã³ãŒããããšç¡é§ã倧ãããªãã®ã§ããã¡ã€ã«IDã®å·®åã§ããã°å€§äœå°ããå€ã«ãªããå¹ççã«ãšã³ã³ãŒãã§ããããšãå©çšããããããã¡ã€ã«IDã®å·®åãä¿åããŠããŸãã è©³çŽ°ãæ°ã«ãªãæ¹ã¯ https://pkg.go.dev/encoding/binary ã®uvarintã«ã€ããŠèŠãŠã¿ãŠãã ããã name index ã¯ããã¡ã€ã«IDã«å¯Ÿå¿ããååãžã®ãªãã»ãããä¿åãããŠããŸããååã¯å¯å€é·ãªã®ã§ãã¡ã€ã«IDã«å¯Ÿå¿ããååãæ¢çŽ¢ããéã«ã¯ç·åœ¢æ¢çŽ¢ãè¡ãå¿
èŠããããŸããããããªãã»ãããæã€ããšã«ãã£ãŠåºå®é·ã®ããŒã¿ã«ãªãããã name index ã®ãã¡ã€ã«ID*4ã®ãªãã»ããã®å Žæãåç
§ããã ãã§ãååãžã®åç
§ãååŸããããšãã§ããã®ã§æ¢çŽ¢ããå¿
èŠããããŸããã posting list index ã¯ãåèªã«å¯Ÿå¿ããããã¥ã¡ã³ãã®æ°ãšå®éã®ãã¹ãã£ã³ã°ãªã¹ããžã®ãªãã»ãããä¿åãããŠããŸãããã¹ãã£ã³ã°ãªã¹ãã¯å¯å€é·ã§ããããã®ããã«æã€ããšã«ãã£ãŠãã¹ãã£ã³ã°ãªã¹ãã€ã³ããã¯ã¹ãåºå®é·ãšãªãã®ã§ãæ€çŽ¢æã«æ€çŽ¢ã¯ãšãªã«å«ãŸããåèªã2åæ¢çŽ¢ã§å¹ççã«ååŸããããšãã§ããŸãã name index ãã posting list index ã§äœ¿ãããããªãã»ãããæ±ã£ãŠåºå®é·ã«ããããšã§æ¢çŽ¢ãå¹ççã«è¡ãããšã¯ããè¡ãããããã§ãã ããšã¯ããããã®é
ç®ã«å¯Ÿãããªãã»ããã4ãã€ããã€ä¿åãããŠããŸãã å®éã«ã¯ãã€ããªã§ä¿åãããŠããŸãããã€ã¡ãŒãžãšããŠã¯ä»¥äžã®ãããªæãã§ããLæ°å ã¯æœè±¡åããŠè¡æ°ã衚ããŠããŸããå®éã®ã€ã³ããã¯ã¹ã«ãããŠã¯è¡æ°ã§ã¯ãªãããªãã»ãããä¿åãããŠããŸãã ãŸããå®éã«ã¯ããããã«æ¹è¡ã¯ç¡ãã list of paths ã®ãããªã©ãã«ããããŸããã L1: csearch index 1 list of paths: L2: /opt/codesearch list of names: L3: /opt/codesearch/AUTHORS L4: /opt/codesearch/CONTRIBUTORS ... list of posting lists: L30: aaa 1,2,3 L31: aab 1 L32: aac 1,2,4,5 L33: aad 1,2,3,5,6,8,9,10,11 ... name index: L50: 0 # list of namesã®ãªãã»ãã(L3)ããã®ãªãã»ãã(=0)ãä¿åãããŸã L51: 1 ... posting list index: L77: aaa 3 0 # list of posting listã®ãªãã»ãã(L30)ããã®ãªãã»ãã(=0)ãä¿åãããŸã L78: aab 1 1 L79: aac 4 2 L80: aad 9 3 ... offsets: L97: L2 # list of paths L98: L3 # list of names L99: L30 # list of posting lists L100: L50 # name index L101: L77 # posting list index csearch trailer æ€çŽ¢ã«å¿
èŠãªåŠç 転眮ã€ã³ããã¯ã¹ã®åºæ¬çãªèŠçŽ ã«ã€ããŠã¯ãããŸã§ã§è©±ãããšããã§ãã ããããæ€çŽ¢ã«å¿
èŠãªåŠçã«ã€ããŠèŠãŠãããŸãã æ€çŽ¢æã«å¿
èŠãªåŠçããŸãšãããšä»¥äžã®åŠçã«ãªããŸãã ã¯ãšãªã®æ§ç¯åŠç ã€ã³ããã¯ã¹ã®ãªãŒãã³åŠç æ€çŽ¢åŠç ãã¡ã€ã«åã®ååŸ å®éã®æ€çŽ¢ã¯ãšãªãäœãããã«ãã¯ãšãªã®æ§ç¯åŠçããå¿
èŠã«ãªããŸãã ãã€ããªãã©ãŒãããã®ã€ã³ããã¯ã¹ãããŒã¹ããŠãæ€çŽ¢æã«äœ¿çšã§ãã圢ã«å±éããããã«ãã€ã³ããã¯ã¹ã®ãªãŒãã³åŠçããå¿
èŠã«ãªããŸãã ã¯ãšãªãå
ã«ãå®éã«ã€ã³ããã¯ã¹ãã該åœã®ããã¥ã¡ã³ããååŸããããã«ãæ€çŽ¢åŠçããå¿
èŠã«ãªããŸãã æ€çŽ¢åŠçã®çµæããã¡ã€ã«IDãååŸãããããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§æŽ»çšã§ãã圢ã«ããããã«ããã¡ã€ã«IDããããã¡ã€ã«åã®ååŸããã§ããå¿
èŠããããŸãã ããããã®åŠçã«ã€ããŠãcodesearchã®å
·äœçãªã³ãŒããèŠãŠãããŸãã ã¯ãšãªã®æ§ç¯åŠç codesearchã¯æ£èŠè¡šçŸã§æ€çŽ¢ã§ããããã«ãæ£èŠè¡šçŸããåºçŸãããæååã trigram ã«å€æããŠããŸãã ãããäžã€ã®ãããã¯ãšããŠé¢çœãã§ãããä»å話ããã転眮ã€ã³ããã¯ã¹ã®æ¬è³ªãšã¯ãããã®ã§ããã§ã¯å²æããŸãã ã€ã³ããã¯ã¹ã®ãªãŒãã³åŠç ã€ã³ããã¯ã¹ã®ãªãŒãã³ã§ã¯ã€ã³ããã¯ã¹ãã¡ã€ã«ã®ããŒã¹ãè¡ãã以éã®æäœã«å¿
èŠãªãããããžã®ãªãã»ããã®ååŸãããªãã»ããã®å·®åããå¿
èŠãªçµ±èšå€ãèšç®ããŸãã ã€ã³ããã¯ã¹ã®Openæã«ã¯ã€ã³ããã¯ã¹ãã¡ã€ã«ãmmapãããã¡ã€ã«ã®æåŸã®éšåãããªãã»ãããé ã«èªã¿åºããŸãã ãªãã»ããã¯ãã¹ãŠ4ãã€ãã§ä¿åãããŠããã®ã§åºå®ãµã€ãºãæå®ããããšã§ãªãã»ãããååŸããããšãã§ããŸãã https://github.com/google/codesearch/blob/8ba29bd255b740aee4eb4e4ddb5d7ec0b4d9f23e/index/read.go#L97-L112 æ€çŽ¢åŠç ã¯ãšãªã®æ§ç¯åŠçã§å€æãã trigram ãå
ã«ãã¹ãã£ã³ã°ãªã¹ããååŸããŸããæ§ç¯ããã¯ãšãªã¯ãã¹ãŠ trigram ã§è¡šçŸãããŠããããã3æåããé·ãæå㯠AND ãªã©ã䜿ã£ãŠçµåãããŠããŸãã Hello ãæ€çŽ¢ããå Žåã¯ä»¥äžã®ãããªã¯ãšãªã«ãªããŸãã Hel AND ell AND llo ãªã®ã§ã"Hel", "ell", "llo" ã®ãã¹ãã£ã³ã°ãªã¹ããååŸãããããã®ããã¥ã¡ã³ãIDã AND ã®æ¡ä»¶ã«åŸã£ãŠããŒãžããŸãã ãã¡ã€ã«åã®ååŸ ãã¡ã€ã«åã¯ã list of names ã®ã»ã¯ã·ã§ã³ã«ä¿åãããŠããŸãããªãã»ãããçŽæ¥ã¯ããããªãã®ã§ã name index ã®ãªãã»ãã+ãã¡ã€ã«ID*4ãã€ãç®ã«æžãããŠãããªãã»ãããå
ã« list of names ãããã¡ã€ã«åãååŸããŸãã ããã§æ€çŽ¢ã¯å®äºã§ãã ããã å®éã®ã€ã³ããã¯ã¹ã®äžèº«ãã€ã³ããã¯ã¹ãçšããæ€çŽ¢ã«ã€ããŠèŠãŠããŸãããæ€çŽ¢ãšã³ãžã³ãå
éšã§ã©ã®ãããªããšãè¡ã£ãŠããããããå
·äœçã«ã€ã¡ãŒãžã§ããããã«ãªããã°å¬ããã§ãã æ¬¡åã¯ã€ã³ããã¯ã¹ã®æ§ç¯ç·šã§ãäŒãããŸãããã
ããã³ããšã³ããšã³ãžãã¢ã®å¶ç°ã§ããä»åã LIFULL Creators Blog ãžã®åããŠã®æçš¿ã§ãã ããµãŒãã¹å
±éãããã»ããã¿ãã¯ããã ã®ãããã»ããã¿ã§ã¯ãããŸããããœãŒã¹ã³ãŒãã¯ããã€ãã®ãµã€ãããµãŒãã¹ã§äœ¿ããŸããããŸããçµèŸŒã¿å
ãæã£ãŠãã CSS ã«ãã£ãŠã¯è¡šç€ºã厩ããŠããŸããããããŸããããã¬ãŒã¯ãã€ã³ããã³ã³ãã³ãã®å¹
ãããããªããããããŸããããµãŒãã¹å
±éã§äœ¿ãããããã»ããã¿ã«ã¯çžå¿ã®åŒ·ããæè»ããæ±ããããŸãã ãã®èšäºã§ã¯ãLIFULL HOME'S ã®ãµãŒãã¹å
±éã®ã¬ã¹ãã³ã·ãçãããã»ããã¿ãå®è£
ããããã«åå¡ããã匷ãã»å
ç¢ã«å®è£
ããããã®ããŠããŠãã玹ä»ããŸãã ã©ãã«ã§ãçµã¿èŸŒããããã«å®è£
ãã éè€ããªãã¯ã©ã¹åã«ãŒã«ãèšå®ãã 詳现床ãç¶æ¿ãšããŸãä»ãåã ãã¬ãŒã³ãªæè¡ã䜿ã ãã¬ãŒã¯ãã€ã³ãã z-index çãã«ã¹ã¿ãã€ãºå¯èœã«ãã html { font-size: 62.5% } ã«å¯Ÿå¿ãã ããã«å®è£
å質ãé«ãã ããã¹ãéã®å€åãèæ
®ãã äžéšåºå®ããããšããŒãžå
ãªã³ã¯å
ã®èŠçŽ ã被ããªãããã«ãã è€æ°ã®ãªã»ãã CSS ç°å¢äžã§åäœç¢ºèªãã èªã¿èŸŒã¿é床ã«é
æ
®ãã ã¢ã¯ã»ã·ããªãã£ãžã®é
æ
® div ã§ã¯ãªã button ã䜿ã ã¹ããããªã³ã¯æ©èœ æåã®èŠèªæ§ æåãµã€ãºãåºå®ããªã ããŒããŒãæäœå¯Ÿå¿ WAI-ARIA 屿§ãæå®ãã ããã¥ã¡ã³ããæžã ã©ãã«ã§ãçµã¿èŸŒããããã«å®è£
ãã å
±éãããã»ããã¿ãã©ããªã³ãŒãããŒã¹ã«å
¥ããŠã厩ããããšãªã衚瀺ãããããšã¯æ±ããããå質ã®äžã€ã§ãããµãŒãã¹ããšã«é©çšãããŠãã CSS ãããããªãäžã§ããããå®ç§ã«å®è£
ããããšã¯å°é£ã§ãããæ¥µå厩ãã«ããå®è£
ãªãå¯èœã§ãã éè€ããªãã¯ã©ã¹åã«ãŒã«ãèšå®ãã ã¯ã©ã¹åãéè€ãããšæå³ããªãã¹ã¿ã€ã«ãåœãã£ãŠããŸããŸããããšãã°æ¬¡ã®ãã㪠CSS ãš HTML ããããšã .container ã®èŠçŽ ã«ã¯æå³ããªãã¹ã¿ã€ã«ãé©çšãããŠããŸããŸãã /* æ¢åã® CSS */ .container { color : red ; } /* ããããŒã»ããã¿ãŒã® CSS */ .header .container { ... } < header class = "header" > < div class = "container" > <!-- æåè²ã¯èµ€ã«ãªã --> </ div > </ header > ãã®åé¡ãé¿ããã«ã¯ä»¥äžã«çæãããšããã§ãããã BEM ã®èãæ¹ãåãå
¥ãã ãŠããŒã¯ãªãããã¯åã«ãã BEM ã¯èšãããšç¥ãã CSS åœåèŠåã§ãäžå®ã® UI ã®ãŸãšãŸãã Block ãšããBlock ãæ§æããåèŠçŽ ã Element ãšããŠæ±ããŸããElement ã¯å¿
ãæ¥é èŸãšã㊠Block åãå«ããããåé·ãªãããéè€ãé¿ããã¯ã©ã¹åãä»ããããšãã§ããŸãã .header { ... } .header__container { ... } ããã ãã ãšã .header ãšããã¯ã©ã¹åããµãŒãã¹æ¢åã® CSS ã§äœ¿ãããŠããå¯èœæ§ãæšãŠãããŸããããã®ãã Block åèªäœã®ãŠããŒã¯ããå¿
èŠã§ããBlock åã®å
·äœæ§ãé«ããããã«è€æ°ã®åèªã䜿ã£ãããæ¥é èŸãä»ãããããŠéè€ããªã Block åãèããŸãããã /* è€æ°ã®åèªã䜿ã */ .responsive-header { ... } /* å
±éããŒãããããã cmn- æ¥é èŸãä»ãã */ .cmn-header { ... } /* 䜿ãããŠããªã倧æåå°æåã«ãŒã«ã«ãã */ .Header { ... } åŒç€Ÿã®ãµãŒãã¹ã®å Žåã倧æåå§ãŸãã®åèªã§ã¯ã©ã¹åãã€ããŠãããµãŒãã¹ã¯ãªãããã ã£ãã®ã§ãæåŸã® .Header ã®åœ¢åŒã®åœåãæ¡çšããŸããã 詳现床ãç¶æ¿ãšããŸãä»ãåã CSS ã»ã¬ã¯ã¿ã®è©³çŽ°åºŠãç¶æ¿ïŒã«ã¹ã±ãŒãïŒã®ããã¿ããã£ããçè§£ããŠããªããšãçµèŸŒã¿ã®æãã¬ã¹ã¿ã€ã«ãé©çšãããŠããŸããŸãã åéã®éœåäžã詳现床ã®è§£èª¬ã¯å²æããŸãã詳现床èšèšã«ãããŠèŠéãããã¡ãªã®ã¯ãã»ã¬ã¯ã¿ã®è©³çŽ°åºŠãã©ãã ãé«ããŠããå
åŽã®èŠçŽ ã«é©çšãããã¹ã¿ã€ã«ã«ã¯åãŠãªããšããããšã§ãã a { color : red ; } #header { color : black !important ; } < header id = "header" > < a href = "/" > LIFULL HOME'S </ a > </ header > ãã®ãã㪠CSS ãš HTML ããã£ããšãããLIFULL HOME'Sãã®æåè²ã¯èµ€ã«ãªã£ãŠããŸããŸãã çµèŸŒã¿ã«ã©ã®ãã㪠CSS ãæå®ãããŠãããã¯åºæ¬çã«äºæã§ããªãã®ã§ã念ãå
¥ããŠããå¿
èŠããããŸãã念ãå
¥ããã«ã¯å
šç§°ã»ã¬ã¯ã¿ * ã䜿ãã®ãããã§ããããæ¬¡ã«ç€ºãã³ãŒãã§ã¯ Header å
ã®ããããèŠçŽ ãšç䌌èŠçŽ ã«ã€ããŠãã¹ã¿ã€ã«ããªã»ããããŠããŸãã .Header * , .Header * :: before , .Header * :: after { box-sizing : border-box ; margin : 0 ; padding : 0 ; list-style-type : none ; color : inherit ; line-height : 1.5 ; font-family : inherit ; letter-spacing : 0 ; text-decoration : none ; } 泚æç¹ããããŸããå
šç§°ã»ã¬ã¯ã¿ã¯è©³çŽ°åºŠãå¢ãããªãããã .Header * ã®ã»ã¬ã¯ã¿ã®è©³çŽ°åºŠã¯ã¯ã©ã¹åãã»ã¬ã¯ã¿ã«ãšããŠåç¬ã§äœ¿ãå Žåãšåãã§ãããã®ããããããã¡ãª a:visited ãªã©ã®ã»ã¬ã¯ã¿ã«ã¯è² ããŠããŸããŸãã ãããã®ã±ãŒã¹ã¯äŸå€çã§ãã¿ãŒã³ãéãããã®ã§ããããã»ããã¿ã® CSS ã§ä»»æã®ã¹ã¿ã€ã«ãåœãŠãŠãããŸãããã .Header a : visited { color : inherit ; text-decoration : none ; } ããäžå
šãæãã®ã§ããã°ãå
±éã®ãããã»ããã¿ã® Block ã«ã¯ãã¹ãŠ id 屿§ãä»äžããID èµ·ç¹ã§ã»ã¬ã¯ã¿ãæžãããã«ãããšããã§ãããã #Header { ... } #Header .Header * , #Header .Header * :: before , #Header .Header * :: after { ... } #Header .Header__element { ... } æã¡åã¡ããæ°æã¡ãæ©ãŸã£ãŠ !important ã¯ä»ããªãããã«ããŸãããããã£ããä»ããŠããŸããšãåèŠçŽ ã«ããããæå®ããã¹ã¿ã€ã«ã«ããã¹ãŠ !important ãä»ããªããŠã¯ãããªããªã£ãŠããŸããŸãã ãã¬ãŒã³ãªæè¡ã䜿ã çµèŸŒã¿ã®ãµãŒãã¹ãã©ã®ãã¬ãŒã ã¯ãŒã¯ãæ¡çšããŠããã®ããå
±éãããã»ããã¿ã«ãšã£ãŠã¯ç¥ãç±ããããŸããããã®ããå
±éãããã»ããã¿ã¯ãç¹å®ã®ãã¬ãŒã ã¯ãŒã¯ã«äŸåããªãã³ãŒãã§å®è£
ãããŠããããšãæãŸããã§ãããã ããç¹å®ã®ãã¬ãŒã ã¯ãŒã¯ã«äŸåããŠããŸããšããŠãŒã¶ãŒã¯å©çšé »åºŠã®é«ããªãå
±ééšåã®ããã«ãã¬ãŒã ã¯ãŒã¯å
šäœãããŠã³ããŒãããªããã°ãããŸããã衚瀺ããã©ãŒãã³ã¹ãæªåããããšã¯ãµãŒãã¹å
šäœã«ãšã£ãŠããããšã§ã¯ãããŸããã jQueryã»Bootstrapã»Reactã»Vueã»Tailwind CSS ãšãã£ã JS/CSS ãã¬ãŒã ã¯ãŒã¯ã¯äœ¿ããããã¬ãŒã³ãªã³ãŒããæžããšããã§ããããjQuery ãå
¥ããŠãªããµãŒãã¹ã¯ãªãïŒããšããããšãªã jQuery ãããã®ã³ãŒããæžãã®ãããã§ãããã®ãããã¯çŸå Žã«ããããã§ãã Sass ã TypeScript ãªã©ãéçºã«åãå
¥ããããšã¯ç¹ã«åé¡ãããŸãããã¯ã©ã€ã¢ã³ããµã€ãã§ã®åäœã«ã¯çŽæ¥åœ±é¿ããªãããã§ãã ãã¬ãŒã¯ãã€ã³ãã z-index çãã«ã¹ã¿ãã€ãºå¯èœã«ãã çµèŸŒã¿ã®ãã¶ã€ã³ã«é©çšã§ããããã«ãããçšåºŠã«ã¹ã¿ãã€ãºãã§ããããã«ããŠããå¿
èŠããããŸãã代衚çãªãã®ã¯ããã¬ãŒã¯ãã€ã³ãã z-index ã®å€ã§ãã ãã¬ãŒã¯ãã€ã³ãã¯ããµãŒãã¹ã«ãã£ãŠãã®å€ã¯ãã©ãã©ãªããšãå€ãã§ããããå
±éãããã»ããã¿ã®ãã¬ãŒã¯ãã€ã³ãã¯ããµãŒãã¹åŽãçšæããŠãããã€ã³ããšäžèŽããŠããã»ããæãŸããã§ãã z-index ã®èšèšããµãŒãã¹ããšã«ãŸã¡ãŸã¡ã§ããããšãã°å
±éãããã«æ¥µããŠå€§ã㪠z-index ã®å€ãèšå®ããããšã§ããµãŒãã¹åŽãæã£ãŠããã¢ãŒãã«ãã€ã¢ãã°ïŒç»é¢å
šäœãèŠãã¿ã€ãã®ãã€ã¢ãã°ïŒã®äžã«éãªã£ãŠããŸããããããŸããã ãããã®å€ãã«ã¹ã¿ãã€ãºããããã« PostCSS ã Sass ãšãã£ãããªããã»ããµã䜿ããšããã§ãããããµãŒãã¹ã«ãã£ãŠå€åããå€ã¯å€æ°ãšããŠçšæããŠãããåãµãŒãã¹ã§çµã¿èŸŒãéã«ã¯ãã®å€æ°ã®å€ãä¿®æ£ããããªããã»ããµã«ãããŠãããããšã«ããŸããããæ¬¡ã®ã³ãŒã㯠SassïŒscss èšæ³ïŒã§ã®äŸã§ãã /* èšå®éšå */ // ãã¬ã€ã¯ãã€ã³ãã®èšå® $mq-mobile : '(max-width: 1023.9px)' ; $mq-desktop : '(min-width: 1024px)' ; // z-index ã®èšå® $zi-header : 50 ; $zi-menu : 51 ; /* å©çšéšå */ @media # {$mq-mobile} { // ã¢ãã€ã«åãã¹ã¿ã€ã« } @media # {$mq-desktop} { // ãã¹ã¯ãããåãã¹ã¿ã€ã« } ãã®ããã«æºåããŠããããšã§ããµãŒãã¹ããšã«åèŠçŽ ãžã®ã¹ã¿ã€ã«ã埮調æŽããããšãªãå
±éãããã»ããã¿ãé©çšã§ããŸãã倿Žç®æã倿°ã®ã¿ã«éå®ãããããšã§ããªãªãžãã«ãšã®å·®åããã¡ã€ã«ã®äžã«åæ£ããããšããªããªããå°æ¥ã®ããŒãžã§ã³ã¢ãããžã®è¿œéãç°¡åã«ãªããŸããããã¬ã€ã¢ãŠãã厩ãããšãã®è²¬ä»»åæ
ãæç¢ºã«ãªããŸãã ã¡ãªã¿ã« LIFULL HOME'S ã®å
±éãããã»ããã¿ã«ã¯ãã以å€ã«ã次ã®å€ãã«ã¹ã¿ãã€ãºå¯èœãªé
ç®ãšããŠçšæããŠããŸããã ã³ã³ãã³ãã®æå€§å¹
ã³ã³ãã³ãã®å·Šå³ã«èšããããŠã£ã³ããŠãšã®äœçœã®å€§ãã éãããã¡ãã¥ãŒã® z-index ã©ã®ãããªé
ç®ãã«ã¹ã¿ãã€ãºå¯èœã«ãããã¯ããã¶ã€ã³èŠä»¶ãæ©èœèŠä»¶ã«å¿ããŠèšèšãããšããã§ãããã html { font-size: 62.5% } ã«å¯Ÿå¿ãã LIFULL HOME'S ç¹æã®èŠä»¶ã§ããããµã€ãã«ãã£ãŠã¯ html èŠçŽ ã« font-size: 62.5% ãšããã¹ã¿ã€ã«ã宣èšãããŠããããšããããŸããããã㯠rem åäœã®æ±ãã簡䟿ã«ããããã®ãã¯ããã¯ã§ãã font-size: 62.5% ãã¯ããã¯ãšã¯ ããã¯ãCSS ã«ããã rem åäœã®æå®ã簡䟿ã«ããããã®ã¡ãã£ãšãããã¯ããã¯ã§ããrem åäœã¯ãã«ãŒãèŠçŽ ïŒ html èŠçŽ ãæã£ãŠãããã©ã³ããµã€ãºã«å¯Ÿããçžå¯Ÿå€ãã衚ãåäœã§ãããã©ãŠã¶ãŒã®ããã©ã«ãæåãµã€ãºã¯ãããŠã 16px ã§ãããã 1rem 㯠16px * 62.5% * 1 = 10px ãšãªããŸãããã¶ã€ã³ãã¡ã€ã«ããæŸã£ãå€ã 10 ã§å²ãã ãã§ CSS äžã®æ°å€ã«å€æã§ããããã«ãªãããããªãã¬ãŒã·ã§ã³ãã¡ãã³ã£ãšå¹çåããã¡ãªããããããšãããŠããŸãã ãã©ãŠã¶ãŒã®æåãµã€ãºèšå®ãå°éããããã« CSS ã®äžã®æåãµã€ãºã¯ rem åäœã§èšè¿°ããããšã«ãªããŸããrem åäœã¯ã«ãŒãèŠçŽ ïŒïŒ html èŠçŽ ïŒãåºæºãšããããã html { font-size: 62.5% } ã®æç¡ã«ãã£ãŠ 1rem ãããã®å€§ãããå€ãã£ãŠããŸããŸããrem åäœã䜿ã£ãŠ 62.5% æå®ã®ãµã€ããããã§ãªããµã€ãäž¡æ¹ã«å¯Ÿå¿ããå¿
èŠããããŸããã ä»åã¯ãhtml èŠçŽ ã«ããã£ãæåãµã€ãºãæã¡æ¶ãããã®ä¿æ°ãçšæããrem åäœã䜿çšããå Žé¢ã§ã¯å¿
ããã®ä¿æ°ããããå€ãå©çšããããã«ããŸããã // HTML èŠçŽ ã«é©çšãããŠãã font-size ã®éæ°ãæ¯çã§ // äŸ: html{font-size:62.5%} ã®å Žåã 1 / 0.625 = 1.6 // äŸ: html{font-size:12px} ã®å Žåã1 / (12 / 16) = 1.333333 $font-scale-factor : 1 ; // åžžã« 16px ã«ãªã rem å€ $rem : 1rem * $font-scale-factor ; // è£æ£æžã¿ã® rem åäœãå©çš $font-size-20 : 1.25 * $rem ; $font-size-16 : 1 * $rem ; $font-size-12 : 0.75 * $rem ; . Header__logo { // ã©ããªç°å¢ã§ã 16px ã§è¡šç€ºããã font-size : $font-size-16 ; } ããã«å®è£
å質ãé«ãã å°ãããã¢ãã¯ãªå
容ã§ããããµãŒãã¹æšªæçã«åºã䜿ããããããã»ããã¿ã§ãã®ã§ãããã«ã¯ãªãªãã£ãäžããŠãããŸãã ããã¹ãéã®å€åãèæ
®ãã ããã¹ãéãå¢ãããšãã«ã©ãããããæ±ºããŠå®è£
ã«åæ ããŸãããããã»ããã¿ã®å
容ã®å€ãã¯ããã²ãŒã·ã§ã³ã®ããããã¹ãéã®å¢æžã¯èããªããŠããããšãå€ãã§ãããäžéšå¿
èŠã«ãªãç®æã¯ãã£ãããšå¯Ÿå¿ããŠãããŸããæ©æ¢°ç¿»èš³ã«ããããšã©ãã³ç³»ã®èšèªã§ã¯ããã¹ãéãå¢ããã¡ãªã®ã§çæããŸãããã äžéšåºå®ããããšããŒãžå
ãªã³ã¯å
ã®èŠçŽ ã被ããªãããã«ãã æ°ãããã»ããã¿ã«ã¯ãããŒãžãã¹ã¯ããŒã«ããŠãããšç»é¢äžéšã«åºå®ãããããã§ãããšçŸãã仿§ããããŸãã ããã·ã¥ïŒ # ïŒä»ããªã³ã¯ã®ããã©ã«ãã®æåã¯ãé·ç§»å
ã®éšåããŠã£ã³ããŠã®äžç«¯ã«ããã¿ãªãã£ã€ãããã«ã¹ã¯ããŒã«ãããŠè¡šç€ºãããŸãããã®ããäžéšã«åºå®ããŠãããããããããšãé·ç§»å
ã®èŠçŽ ãšåºå®ããŠããããããšã®å¹²æžãçºçããŸãã ããŸããã¶ããªãããã«è¡šç€ºããããã®ã§ãã倧äžå€«ã§ãããŸãã«ãã®ããã«äœ¿ããã CSS ããããã£ããããŸãã scroll-margin-top ã§ãã /* åºå®ããããŒã®åã ãã¹ã¯ããŒã«äœçœ®ã調æŽãã */ : target { scroll- margin-top : 64px ; } ããã§åºå®ããããšãžã£ã³ãå
ã®èŠçŽ ãå¹²æžããªããªããŸããã è€æ°ã®ãªã»ãã CSS ç°å¢äžã§åäœç¢ºèªãã ãªã»ãã CSS ã¯ããã€ãã®çš®é¡ããããåãµãŒãã¹ã§ã©ã®ãªã»ãã CSS ã䜿ãããŠãããããããŸããããªã»ãã CSS ã¯ããŒãžå
šäœã®ã¹ã¿ã€ã«ã«åœ±é¿ãåãŒããã®ã§ããããçš®é¡ã«ãã£ãŠã¯ãããŸã§æžããŠãã CSS ãšã®çžæ§åé¡ããããããããŸããã ãªã»ãã CSS ã®åæ°ã¯æéã§ããããããã€ãã¡ãžã£ãŒã«äœ¿ãããŠãããªã»ãã CSS ã©ã€ãã©ãªãå®éã«å
¥ããŠã¿ãŠã衚瀺ã«åŽ©ãããªããã©ããã確ãããŸããä»åã®å®è£
ã§ã¯ä»¥äžã®ãªã»ãã CSS ã詊ããŠã¿ãŠãåé¡ãªãããšã確èªããŸããã Normalize.css v8 Eric Mayer Reset CSS Modern CSS Reset CSS Remedy Bootstrap Reboot Tailwind CSS LIFULL HOME'S resetïŒç¬èªãªã»ããïŒ ãªã»ãã CSS ãå
¥ãæ¿ããŠæ€èšŒããŠãããšããããã»ããã¿ãç§»æ€ãããšãã«è¡šç€ºåŽ©ããèµ·ããå¯èœæ§ã¯ããã£ãšäœããªããŸãã èªã¿èŸŒã¿é床ã«é
æ
®ãã ãããã»ããã¿ã«ã¯ããŽç»åãã¢ã€ã³ã³ç»åã䜿ãããŠããŸãããããã®ç»åã¯æ¥ãã§èªã¿èŸŒãå¿
èŠã¯ãããŸããããããã»ããã¿ã¯ããããŸã§ããã²ãŒã·ã§ã³ãæ
å ±æäŸãç®çãšããŠããŠãæ£å³ã®ã³ã³ãã³ãã«æ¯ã¹ããéèŠåºŠã¯é«ããªãããã§ãã SVG ç»åã®å ŽåãHTML ã« SVG ããŒã¿ãçŽæ¥åã蟌ãããšã§å€éšãã¡ã€ã«ã®ãªã¯ãšã¹ãæ°ãæžããããšãã§ããŸãããããè¿°ã¹ãéããããã»ããã¿ã®ç»åã¯éèŠåºŠãé«ããªããåããŒãžã§ç¹°ãè¿ããŠç»å Žããããšã«ãªããŸããç»åã¯å€éšãã¡ã€ã«åãããã©ãŠã¶ãŒã®ãã£ãã·ã¥ãå©çšããæŠç¥ã®ã»ããããããã§ãã ç»åãé
å»¶èªã¿èŸŒã¿ãããããã«ã loading 屿§ãš decoding 屿§ãå©çšã§ããŸããloading 屿§ã«ãã£ãŠããŸã ç»é¢å
ã«è¡šç€ºãããŠããªãç»åã®èªã¿èŸŒã¿ãé
å»¶ãããããšãã§ããŸããdecoding 屿§ã«ãã£ãŠãããŠã³ããŒããããç»åã®ãã³ãŒãåŠçãéåæã«è¡ã£ãŠããããšãæç€ºããŸãã loading 屿§ | MDN (mozilla.org) decoding 屿§ | MDN (mozilla.org) < a href = "https://www.homes.co.jp/search/bukken-history/" > < span > æè¿èŠãç©ä»¶ </ span > < div > < b > 3 </ b > < img src = "images/icon-clock.svg" alt = "" width = "24" height = "24" decoding= "async" loading= "lazy" > </ div > </ a > ãã¹ãŠã® img èŠçŽ ã« width 屿§ãš height 屿§ãå«ããããšãå¿ããŠã¯ãããŸãããç»åèªã¿èŸŒã¿ã«ãããªãããŒãæããé«éåã«ã€ãªãããŸãã Core Web Vitals ã«ããã CLS ã®åæžã«ããªããŸãã ã¢ã¯ã»ã·ããªãã£ãžã®é
æ
® LIFULL HOME'S ã®ããã³ããšã³ãã¯ã¢ã¯ã»ã·ããªãã£ãéèŠèŠããŠããŸãããããã»ããã¿ã®å®è£
ã«ãããŠãã倿§ãªãŠãŒã¶ãŒãã¢ã¯ã»ã¹æ¹æ³ãåãå
¥ããããããã«é
æ
®ããå®è£
ãè¡ã£ãŠããŸãã div ã§ã¯ãªã button ã䜿ã ã¡ãã¥ãŒãéãåäœã¯ JavaScript ã䜿ã£ãŠå®çŸããŠããŸããã¡ãã¥ãŒãééãããã¿ã³ã® click ã€ãã³ãã賌èªããã€ãã³ãã®çºçã«å¿ããŠã¡ãã¥ãŒã®è¡šç€ºã»é衚瀺ãåãæ¿ããŸãã ãããã¡ãªã®ããééãã¿ã³ã div èŠçŽ ã span èŠçŽ ã䜿ã£ãŠããŒã¯ã¢ããããŠããŸãã±ãŒã¹ã§ããããŠã¹ãã¿ããæäœã§åé¡ãªãæäœã§ããããã«æããããTab ããŒã䜿ã£ãŠãã©ãŒã«ã¹ãåœãŠãããšãã§ããããŒããŒãã§æäœã§ããªããªã£ãŠããŸããŸãã ééã®æäœã«éããã ã¯ãªãã¯èµ·ç¹ã§ JavaScript ã®åŠçãäœåãããããªèŠçŽ ã¯ button èŠçŽ ã䜿ã£ãŠããŒã¯ã¢ãããã å¿
èŠããããŸãã ãšããã§ãã¡ãã¥ãŒããã£ã¹ã¯ããŒãžã£ïŒããããã¢ã³ãŒãã£ãªã³ç UIïŒã®ééã®ããã«ããã§ãã¯ããã¯ã¹ãš CSS ãé§äœ¿ããŠå®çŸãããã§ã€æãå··ã«ãããŸããããã¯æ¬æ¥ã®äœ¿ãæ¹ã§ã¯ãªããããããšã JavaScript ãäžèŠã«ãªããšããŠããå§ãã§ããŸããã ã¹ããããªã³ã¯æ©èœ ã¹ããããªã³ã¯ãšã¯ããããçãµã€ãã®å
±éé åããã£é£ã°ããŠããããªãã¡ã€ã³ãšãªã¢ãããã²ãŒã·ã§ã³ã«ãžã£ã³ãããããã®ã¢ã¯ã»ã·ããªãã£ã®æ©èœã§ããããŒããŒããã¹ã¯ãªãŒã³ãªãŒããŒãå©çšãã人ã«ãšã£ãŠæçšãªæ©èœã§ãã å·Šãã GitHubã»Googleã»IBM ã®Webãµã€ãäžã§ã¹ããããªã³ã¯ã衚瀺ãããšããã LIFULL HOME'S ã®ãããã»ããã¿ã«ãã¹ããããªã³ã¯æ©èœãå®è£
ããŸãããã¹ããããªã³ã¯ã¯åæç¶æ
ã§ã¯é ããŠããŸããããŒãžãéããããšããŒããŒãã® Tab ããŒãæŒããšã¹ããããªã³ã¯ãçŸããŸãã ã¹ããããªã³ã¯ã®å®è£
ã¯é£ãããããŸãããåæç¶æ
ã§èŠããªãããŠãããŸããã display: none ã visibility: hidden ã䜿ããšã¿ããã©ãŒã«ã¹ã®å¯Ÿè±¡ãããæ¶ããŠããŸããŸãããããã以å€ã®ææ®µã§èŠèŠçã«èŠããªãããŸãããã㊠:focus ç䌌ã¯ã©ã¹ã䜿ãããã©ãŒã«ã¹ãåœãã£ããšãã ã衚瀺ããã°ãªãŒã±ãŒã§ãã .Header__skipLink { position : absolute ; top : 0 ; left : 0 ; padding : 0.5em 1.5em ; background-color : #ed6103 ; font-weight : bold ; transform : translateY( -100% ) ; } .Header__skipLink : link , .Header__skipLink : visited { color : #fff ; } .Header__skipLink : focus { transform : translateY( 0% ) ; } æåã®èŠèªæ§ æåãèããããå°ããããããããšãæåã¯èªã¿ã¥ãããªããŸããç¬æã§ãèªãããããïŒããšå€æããŠããŸãã®ã¯å°æ©ã§ããå±å€ã§åŒ·ãæ¥å·®ãã®äžã§ã¯ç»é¢ãèŠãã«ãããããããŸããããããããèŠãæ¹ã«ã¯å人差ããããŸãã ãã®ãããªãã¶ã€ã³ãèŠãããããå®è£
ããåã«ãåŸ
ã£ãïŒãããããŸããããå©çšè
ã®èœåãç¶æ³ã倿§ã§ããããšã説æããããå°ãã¯ãããªããè²äœ¿ãã«ã§ããªããæ€èšããŠããããŸãããã å®è£
é¢ã§ãé
æ
®ã§ããããšããããŸããLIFULL ã®æ¥æ¬èªéšåã®ãã©ã³ãæžäœã¯ãWindows ã macOS ã«æšæºæèŒãããŠããæžžãŽã·ãã¯ã§ãããã°ãããæžäœã§ãããWindowsïŒChrome ã®çµã¿åããã§è¡šç€ºãããšãã«ã¬ã³ããªã³ã°ã现ããªããããŠããŸãåé¡ããããŸãã ãã®åé¡ãžã®å¯ŸåŠæ¹æ³ã¯ããããã®ããã°ã§å€åœ©ãªè§£æ±ºã詊ã¿ãããŠããŸãããäžæã«è§£æ±ºããŠããã±ãŒã¹ã¯ããŸãå€ããããŸããã body { font-family : "Yu Gothic Medium" , sans-serif ; } äžèšã¯ font-family ã«ãŠã§ã€ãä»ã®æžäœåãèšè¿°ãããã¿ãŒã³ãå®ã¯ä»æ§ã«ãªãæžãæ¹ã§ãæžžãŽã·ãã¯ã衚瀺ã§ããŠããã®ã¯ããŸããŸã§ãããŸã倪åã«ãããšããåœããŒã«ããã«ãªã£ãŠããŸãããšãç¹åŸŽã§ãã body { font-family : "Yu Gothic" , sans-serif ; font-weight : 500 ; } ãã®ããã«ãããšãbody ã®èŠå®ã®ãŠã§ã€ãã 500ïŒMediumïŒã«ãªããŸãããåœããŒã«ããã«ããªããè¯ãæãã§ããã§ãã 500 ãšããæ°å€ãããžãã¯ãã³ããŒçã«ãªã£ãŠããŸããããæ°ä»ãã font-weight: normal ãšæžããŠããŸããšå
ã®æšé¿åŒ¥ã§ãããŸãããã¹ãŠã®ããã¹ãã®ã¬ã³ããªã³ã°ã Medium çžåœã®å€ªãã«ãªã£ãŠããŸããã䜿ãã¥ããããããŸãã Windows ãšæžžãŽã·ãã¯ã®çµã¿åããã«ã ã調æŽããããã®ã«ãã¹ããªæå®ã¯ã次ã®ãããªæžãæ¹ã ãšèããŠããŸãã @font-face { font-family : AdjustedYuGothic; font-weight : normal ; src : local( "Yu Gothic Medium" ) ; } @font-face { font-family : AdjustedYuGothic; font-weight : bold ; src : local( "Yu Gothic Bold" ) ; } .Header , .Footer { font-family : AdjustedYuGothic , YuGothic , sans-serif ; } 詳现ãè¿°ã¹ããšé·ããªã£ãŠããŸãã®ã§å²æããŸãããäžèšã®ãããªæå®ãããŠãããš Windows ãšæžžãŽã·ãã¯ã®çµã¿åããã®ã¿è¥å¹²å€ªãæžäœãé©çšãããããã«ãªããå¯èªæ§ãåäžããŸããã»ãã®ãã©ã³ãããmacOS ã§ã®ã¬ã³ããªã³ã°ã«ã¯åœ±é¿ããŸããã æåã®èŠèªæ§ã¯éèŠã§ãã®ã§ã䜿ãåæã®ãã UI ãå®è£
ããããã«ããã®ãããªçްãããã¯ããã¯ãç¥ã£ãŠãããšããã§ãããã æåãµã€ãºãåºå®ããªã ãã©ãŠã¶ãŒã«ã¯ïŒçš®é¡ã®æ¡å€§æ©èœãããããšã¯ãåãã§ããããïŒããããã銎æã¿æ·±ãã®ã¯ãºãŒã æ©èœã§ãããããºãŒã æ©èœã¯ç»åãå«ããã©ãŠã¶ãŒã«è¡šç€ºããããããããã®ãæ¡å€§è¡šç€ºããæ©èœã§ããããã²ãšã€ã¯æåãµã€ãºã®æ¡å€§æ©èœã§ããWebããŒãžã«è¡šç€ºãããããã¹ãã®å€§ããã ããããã©ã«ããã倧ããã§ããŸãã åè
ã®ãºãŒã æ©èœã¯ãã©ãŠã¶ãŒãåæã«ãã£ãŠããããããç¹ã«æèããå¿
èŠã¯ãããŸãããåŸè
ã®æåãµã€ãºæ¡å€§æ©èœã¯ãæå³ããç¡å¹åããŠããŸããªãããã«å¶äœè
ã¯æèããå¿
èŠããããŸãããã®èšå®ãæå¹ã«ããŠãããŠãŒã¶ãŒã¯å°ããæåãèªãã®ãèŠæãªãŠãŒã¶ãŒãšèããããŸãããã®èšå®ã¯å¯èœãªéãå°éããã»ããããã§ãããã font-size ã«æå®ããå€ã rem åäœã«ããããšã§æåãµã€ãºèšå®ã衚瀺ã«åæ ã§ããŸãã .Header__links dt { font-size : 0.75rem ; /* 16px à 0.75 = 12px */ } æåãµã€ãºã倧ãããªãããšã§æåãèªããªããªããªãããã«ããŠããããšãéèŠã§ããèŠçŽ ã®å¹
ãé«ããåºå®å€ã«ããŠãããšãæåãµã€ãºã倧ãããªã£ããšãã«ã¯ã¿åºãŠããŸã£ãããã»ãã®èŠçŽ ãšè¢«ã£ãŠèªããªããªã£ããããŠããŸããŸããå€åããæåãµã€ãºãåæãšããã³ãŒãã£ã³ã°ã¯ãªããªãé«åºŠã§ããããã²èº«ã«çããŠããããæèœã§ãã æåãµã€ãºã倧ãããããšãã®ç»é¢ãã£ããã£ãŒããã¶ã€ã³éãã®èŠãç®ã§ã¯ãªããªã£ãŠãããããŠãŒã¶ãŒã®èšå®ã®éãã«æåãµã€ãºã倧ãããªã£ãŠããã ããŒããŒãæäœå¯Ÿå¿ Webãµã€ãã®ã¢ã¯ã»ã·ããªãã£ãé«ããããã«æãéèŠãªããšã®äžã€ããããŒããŒãã§ãæäœå¯èœã«ããŠããããšã§ããããŒããŒãã§æäœã§ããããã«æããŠããã¹ããã€ã³ãã¯æ¬¡ã®ãããªããšã§ãã Tab ããŒã䜿ã£ãŠãã©ãŒã«ã¹ãåœãã ã©ãã«ãã©ãŒã«ã¹ãåœãã£ãŠãããèŠèŠçã«ããã ãã©ãŒã«ã¹é åºãèªç¶ã§ãã ãdiv ã§ã¯ãªã button ã䜿ããã®ç¯ã§è¿°ã¹ãéããã¯ãªãã¯ãèµ·ç¹ã«äœããåããããªãã¿ã³ã¯ button èŠçŽ ã䜿ã£ãŠããŒã¯ã¢ããããŸããããbutton èŠçŽ ã¯ Tab ããŒã§ãã©ãŒã«ã¹ãåãåã察象ã«ãªããããŒããŒãæäœå¯èœã«ãªããŸãã < button type = "button" > < span > < span > ã¡ãã¥ãŒ </ span > < img src = "images/icon-menu.svg" alt = "" width = "24" height = "24" decoding= "async" loading= "lazy" > </ span > </ button > ãŸãããã©ãŒã«ã¹ãåãåã£ãŠããããšãèŠèŠçã«ãããããšãåããããéèŠã§ããCSS ã§ outline: none ãæå®ããŠãã©ãŒã«ã¹ã€ã³ãžã±ãŒã¿ïŒãã©ãŒã«ã¹ãããšãã«åºãæ ç·ïŒãå®å
šã«é衚瀺ã«ããŠããŸã£ãŠããã±ãŒã¹ã«ã¯ããŸã ã«ããééããŸãã倧ååãšã㊠ããã¿ãª outline: none ã¯é¿ããŠãã ãã ãèŠèŠç衚çŸãéèŠãããããžã§ã¯ãã ãšããã©ãŠã¶ãŒããã©ã«ãã®ã¢ãŠãã©ã€ã³ã衚瀺ãããããšãå«ãããã©ãŒã«ã¹ã€ã³ãžã±ãŒã¿ãé衚瀺ã«ããããšãæ±ããããããšããããŸãããããããšã㯠focus-visible ããªãã£ã« ã what-input ãã€ãã£ãŠãããŒããŒãæäœæã®ã¿ã¢ãŠãã©ã€ã³ã衚瀺ããããã«ããŠãã ããã ã¡ãªã¿ã«å
±éãããã»ããã¿ã®ã¢ãŠãã©ã€ã³ã¯æ¬¡ã®ãããªã³ãŒãã«ãªããŸããã /* åºæ¬ã®ãã©ãŒã«ã¹ã¹ã¿ã€ã«ã®èšå® */ .Header : focus -visible , .Footer : focus -visible { outline : 2px solid ; outline : 1px auto -webkit- focus-ring-color; outline-color : #005fcc ; } .js-focus-visible .Header .focus-visible , [ data-whatintent = "keyboard" ] .Header : focus , .js-focus-visible .Footer .focus-visible , [ data-whatintent = "keyboard" ] .Footer : focus { outline : 2px solid ; outline : 1px auto -webkit- focus-ring-color; outline-color : #005fcc ; } .Header__stickyBar : focus -visible { outline-color : #ffe680 ; outline-offset : -3px ; } .js-focus-visible .Header__stickyBar .focus-visible , [ data-whatintent = "keyboard" ] .Header__stickyBar : focus { outline-color : #ffe680 ; outline-offset : -3px ; } ãã€ã³ãã¯ïŒç¹ã§ããâ ãµãŒãã¹åŽã§ focus-visible Polyfillã what-input ãå°å
¥ããããšãåæã«ãã©ã¡ããå°å
¥ãããŠãæå³éãåãããã«ãªã£ãŠããŸããâ¡LIFULL ãªã¬ã³ãžãèæ¯ãšããç®æã¯ãã¶ã€ããŒèŠæã§è²ãå€ããŠããŸããâ¢Firefox ã§ã®ãã©ãŒã«ã¹ã€ã³ãžã±ãŒã¿ã®èŠèªæ§ã確ä¿ãã€ã€ãChrome ã Edge ã®ããã©ã«ãã€ã³ãžã±ãŒã¿ã®ã¹ã¿ã€ã«ãèžè¥²ããããã«ããŠããŸãã WAI-ARIA 屿§ãæå®ãã JavaScript ã䜿ã£ãŠè¡šç€ºãå€ãåçã«å€ãã UI ã«ã¯ã WAI-ARIA ãå®ãã屿§ãæå®ããããšã§ã¢ã¯ã»ã·ããªãã£ãé«ããããããšããããŸãã å
±éãããã»ããã¿ã«ã¯äœãµæã JavaScript ã§å¶åŸ¡ããŠããç®æããããŸããã°ããŒãã«ã¡ãã¥ãŒãšãããã¿ã®æããããŸãããªã³ã¯éã§ããã©ã¡ããå
±éããŠãã¯ãªãã¯ãããç¹å®ã®èŠçŽ ã®è¡šç€ºã»é衚瀺ãåãæ¿ããããšããæ¯ãèããããŸããããã£ã¹ã¯ããŒãžã£ããšåŒã°ãã UI ãã¿ãŒã³ã§ãã < button type = "button" aria-controls= "Menu" aria-expanded= "false" > < span > < span > ã¡ãã¥ãŒ </ span > < img src = "images/icon-menu.svg" alt = "" width = "24" height = "24" decoding= "async" loading= "lazy" > </ span > </ button > < div class = "Menu" id = "Menu" > <!-- ã¡ãã¥ãŒã®äžèº« --> </ div > aria-expanded 屿§ã«ã¯ééç¶æ
ã«å¿ã㊠true ããã㯠false ãåãæ¿ããããã«å®è£
ããŸãããã®ããã« aria-expanded ãš aria-controls 屿§ãçšãããšããã£ã¹ã¯ããŒãžã£ã®ééç¶æ
ãã¹ã¯ãªãŒã³ãªãŒããŒçã®æ¯æŽæè¡ã«äŒããããŸãã ãããã®å±æ§ä»¥å€ã«ããUI ã®çš®é¡ãç¶æ
ã衚çŸããããã®å±æ§ã WAI-ARIA ã«ã¯ããããå®çŸ©ãããŠããŸãã WAI-ARIA ãªãŒãµãªã³ã° ãã©ã¯ãã£ã¹ ã«ã¯åäœãµã³ãã«ä»ãã§ UI ãã¿ãŒã³ããšã®å®è£
æ¹æ³ã解説ãããŠããŸããäžåºŠæµãèŠããŠãããŠãUI å®è£
ã®æ©äŒããã£ããšãã«æãåºããŠã¿ããšãããããããŸããã ããã¥ã¡ã³ããæžã å
±éãããã»ããã¿ã¯å¿
ãããæ°å¿ã®ç¥ãããšã³ãžãã¢ã䜿ã£ãŠããããšã¯éããŸããã亀æµã®ãªãã»ãéšçœ²ã®ãšã³ãžãã¢ãçµèŸŒã¿äœæ¥ããããããããŸãããå®è£
ã®ä»äžãã«ãäœ¿ãæ¹ãçµèŸŒã¿æ¹ãèšããææžãæ®ããŠããããšã倧åã§ãã LIFULL HOME'S ã®ãããã»ããã¿ã«ã€ããŠãéåãªããã¥ã¡ã³ããçšæããŸãããå
容ãããã€ãŸããšããšãã°æ¬¡ã®ãããªå
容ãèšèŒããŸããã z-index ãã³ã³ãã³ãå¹
ã®ã«ã¹ã¿ãã€ãºæ¹æ³ CSS ãš JS ã®ãã«ãæ¹æ³ focus-visible Polyfillã®å°å
¥æ¹æ³ ãµãŒãã¹ããšã«æ¹å€å¯èœãªç®æ ã¹ããããªã³ã¯ãåäœããããããã¡ã€ã³ãšãªã¢ã« id 屿§ãä»äžããããš ã¡ãã¥ãŒã®ééãã€ãã³ãã§åãåãããã® JS API äžæãªç¹ããã£ãå Žåã®é£çµ¡å
ããšã¯ç€Ÿå
ã«åšç¥ã§ããã°ãä»äºã¯çµããã§ããããã¥ã¡ã³ãã«ã¯é£çµ¡å
ãªã©ãæžãæ·»ããŠãããŠãå©çšããŠããã人ã®ãµããŒã圹ã«ãŸãããšããã§ãããã ä»åç§ãäœæãããããã»ããã¿ã¯ã LIFULL HOME'S 泚æäœå®
ã§èŠãããšãã§ããŸããä»åŸãå±éãé²ã¿ãåºãå©çšãããŠãããã®ãšæåŸ
ããŠããŸãã é«å質ãªå®è£
ãã¢ã¯ã»ã·ããªãã£ã«ãšãã«åãçµãã§ããã仲éãåã£ãŠããŸãããããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co