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
ãšã³ãžãã¢ã®æŸå°Ÿã§ããLIFULL HOME'Sã®å£²è²·é åãæ¯ãããšã³ãžãã¢ããŒã ã®ãããžã¡ã³ããæ
åœããŠããŸãã åŒç€Ÿã®ãµãŒãã¹ã¯ãäž»ã«ãµãŒãã¹äŒç»ããã¶ã€ããŒããšã³ãžãã¢ã®3è·çš®ã«ããé²ããããŠããŸããä»åã¯ããè¯ããããã¯ãéçºã®ããã«3è·çš®ã®é£æºã匷ããåãçµã¿ã«ã€ããŠç޹ä»ããŸãã ããè¯ããããã¯ããéçºããããã« çŸåšLIFULLã§ã¯çµç¹ãè·èœå¥ã«åãããŠãããåé åã®å°éæ§ãé«ããããã«ããŸããŸãªåãçµã¿ãè¡ãããŠããŸãã ç§ãæå±ãããããã¯ããšã³ãžãã¢ãªã³ã°éšã§ãã å匷äŒã®éå¬ ã ç¬èªã®KPIã®èšå® ã æè¡çè² åµè§£æ¶ãžã®åãçµã¿ ãªã©ãé²ããŠããŸããã äžæ¹ã§è·çš®éã®é£æºã«ããŸã ãŸã 䌞ã³ããã¯ãããŸããããã§ãçŸå Žã«ãããã³ãã¥ãã±ãŒã·ã§ã³äžã®èª²é¡ãšæã¡æãèããŠã¿ãŸãã äžæã«æåŸ
æãããåãããã æžç±ã ã¢ãžã£ã€ã«ãµã ã©ã€ ãã§ã¯ãããŒã ã¡ã³ããŒã©ããã§ãäºãã®æåŸ
æãäŒãåãããã®ããã©ãã«ãŒé¢šãšã¯ãµãµã€ãºããšããææ³ã玹ä»ãããŠããŸããèªèº«ãæã匷ã¿ã圹å²ãšä»è
ããã®æåŸ
ã®ã®ã£ãããæããã«ããããšã§ããäºãã®é
åãåŒãåºããŸãã åŒç€Ÿã§ããããžã§ã¯ãããšã«ããã¯ãªãã®ã¿ã€ãã³ã°ã§å®æœãããŠããããšãå€ããããŒã ãã«ãã£ã³ã°ã®äžã€ãšããŠéå®ãããŠããŸããããããçŸåšã®çµç¹ã¯æ§æäººæ°ãå€ãããããžã§ã¯ãã¡ã³ããŒã®å€æŽãçºçããããšããããå人éã®æåŸ
ãããåããç¶ããããšã¯ãªããªãã®ã³ã¹ãã§ãã ãããªæ©ã¿ãæ±ããŠãããšãã«ã ã©ããããã¶ã€ããŒãšã ãšä»äºããããã ããšããèšäºãæèŠããå人以åã«ã»ãã®è·çš®ã«å¯ŸããŠã®æåŸ
ãå°ãªããªãããšã«æ°ä»ããŸããã ããã§ãã³ãã¥ãã±ãŒã·ã§ã³ã®åå°ãšããŠããµãŒãã¹äŒç»ããã¶ã€ããŒããšã³ãžãã¢ã®3è·çš®éã§ã®æåŸ
æãããåãããããã®åãçµã¿ã«çæããŸããã ããŒã ã§åãçµãã ããš ä»åã®åãçµã¿ã§ã¯LIFULL HOME'Sã®å£²è²·é åã§ãšã³ããŠãŒã¶åãã®éçºã«é¢ããã¡ã³ããŒã察象ã«ããŸãããåè·çš®ã¯äžèšã®ãããªå
èš³ã§ãã ãµãŒãã¹äŒç»: 10å ãã¶ã€ããŒ: 5å ãšã³ãžãã¢: 15å äºåèª²é¡ èªåã®è·çš®ã«ã€ããŠãã圹å²/匷ã¿ããèšå
¥ãã ä»ã®è·çš®ã«å¯ŸããŠããæåŸ
ããããšããèšå
¥ãã ãæåŸ
ããããšããèŠæž¡ããŠãåæãããã®ã«ãªã¢ã¯ã·ã§ã³ãã€ãã æ°è»œã«åçã§ããããšãåªå
ãããããèšå
¥ããå
容ã¯ãã©ãã«ãŒé¢šãšã¯ãµãµã€ãºããã·ã³ãã«ã«ããŠããŸãããšã¯ãã倧人æ°ã§ã®æèŠããŸãšããå¿
èŠããããããã¹ããŒã¹ã人æ°ã®å¶éãå°ãªããã¯ã€ãããŒããšããŠmiroãæ¡çšããŸããã è°è« èšèŒãããå
容ã«ã€ããŠãäžæçãªéšåãèæ¯ãèãããéšåãè·çš®éã§è°è«ããªããæ·±æã£ãŠãããŸãããã¹ãŠçè§£ã§ããããšã«ãè·çš®å
ã§æåŸ
ãããŠããããšã«å¯ŸããŠã®æ¯ãèãããµãããããæèšãšã¢ã¯ã·ã§ã³ããŸãšããŸããã è·çš®ããšã«çšæããmiroã®ããŒã ç§éãæåŸ
ããŠãã/ãããŠããããš å
šäœçã«ãååã¯æããŸãªãã®ã§ã劥åããã«ãã£ãŠã»ããããšããå§¿å¢ã®æèŠãå€ãèŠãããŸããããã人ã«ãšã£ãŠã¯ãåœç¶ã®ããšã§ã¯ïŒããšããããšã§ãæç€ºçã«äŒããããšã§ãããäºãã®çè§£ãæ·±ãŸããŸããã å®éã«åºãŠããæèŠã®äžéšãæç²ããŠç޹ä»ããŸãã ãµãŒãã¹äŒç»ãžã®æåŸ
PJå
šäœã®åªå
é äœã®çžè«ã倿 ç®ç/æçŸ©/广ã«çŽåŸã§ããæœçãææ¡ããŠã»ãã ãªãªãŒã¹åŸã«ãç¶ç¶çã«ãã®æ©èœãèŠçŽããŠããããšãããã ãã¶ã€ããŒãžã®æåŸ
ããããšæãã/説åŸåã®ãã/æè¯ã®ãã¶ã€ã³ ãµãŒãã¹å
šäœã俯ç°ããæ
å ±ã»ãã¶ã€ã³ã®æŽåæ§ UIã ãã§ãªãUXãäžç·ã«èããŠã»ãã ãšã³ãžãã¢ãžã®æåŸ
å®è£
æ¹æ³ã®å·¥å€«ã§ä»æ§ã®å¯èœæ§ãåºããããš ä»ã®ãµãŒãã¹ã«æšªå±éããããããã«å®è£
ããŠãããããš å®è£
äžã«ã¢ã€ã¢ã€ãããšãããããã°ççŽã«äŒããŠã»ãã ãŸãšã èªçµç¹ã«ãããŠè·çš®éã®æåŸ
ãäŒãåãæ¹æ³ã玹ä»ããŸãããä»åã®çµæã¯ãããŸã§ãåŒç€Ÿã§ã®äžäŸã§ãã®ã§ããããã¯ãã®ç¹åŸŽãçµç¹ã®ããæ¹ã«å¿ããŠãã£ãšéãçµæãåºãŸãã ã¡ãªã¿ã«åŸæ¥ã¡ã³ããŒãããã察å人ãããªãã®ã§çŽ çŽã«æžããããã£ãããšããã³ã¡ã³ãããããŸãããå®æåºŠã®é«ãããŒã ã§ã¯å人éã§ççŽã«äŒãåãã°æžã話ã§ãããããã«è³ããŸã§ã®éäžæ®µéãšããŠä»åã®ãããªã¯ãŒã¯ã·ã§ãããæãã®ãè¯ãææ®µã ãšæããŸãã ä»åŸãããè¯ããããã¯ããäžã«éãåºããŠãããŸãããšãã«æé«ã®ããŒã ãäœã£ãŠãã仲éãåéããŠãããŸãã®ã§ããããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ïŒLIFULLã®ãããã¯ããšã³ãžãã¢ãªã³ã°éšã®äºäžã§ãã ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒããã£ãŠããŸãã ä»åã¯ãç§ã管æããçµç¹ã§ãå€§èŠæš¡ã¹ã¯ã©ã ããšãããã¹ã¯ã©ã ãæ¡åŒµããŠè€æ°ããŒã ã§éçšããéçºææ³ãžãã£ã¬ã³ãžããçç£æ§åäžãå³ã£ã話ãããããšæããŸãã çµè« çµè«ããäŒããŸããšãçµç¹ã俯ç°ããŠç®¡çããç«å Žãããããšãäžå®ã¬ãã«ãã¡ã³ããŒäž»äœã§åççã«åããä»çµã¿ãã€ããã宿ãããŠãŸããïŒ ãã®åé¢ãçµéšå€äžè¶³ããããŸããæ¬è³ªçãªçµç¹çãªã¹ã¯ã©ã éçºãå®è·µã§ããŠãããïŒãšèšããšããŸã ãŸã æ¹åãããŠããå¿
èŠããããšã¯æããŠããŸãã åçµã¿ã®ãã€ã³ã ã¹ã¯ã©ã ã®ïŒæ¬æ±ãéææ§ããæ€æ»ããé©å¿ãã«å£ããªããã€ã³ãã¯ãã®ãããªæãã§ãã éææ§ ããã¯ãã°ã¯çµç¹ã«ïŒã€ã ã 誰ã§ããã€ã§ãå
šäœåãèŠããã倿ã§ããç¶æ
ãã€ããïŒããŒã ã誰ãã ãããç¥ãããªãç¶æ
ã¯çŠæ¢ïŒ ãã ãèªç¥ã³ã¹ãåæžã®çºã«ããŒã åäœã§ãã£ã«ã¿ãäœãã®ã¯åé¡ãªã æ€æ» ææçµ±äžã§ããå Žãçšæ å
šäœïŒåããŒã ã®ç¶æ³ãå
±æãçžè«ã§ããå Žãå
±æãè°è«ã§ããå®äŸãçšæ é©å¿ åªå
床ã«ãŒã« åºæ¬çã«ã¯åããŒã å
æœçã«éäžããã°ãã ãã ããåªå
床ãé«ãé害ããçµç¹å€æã§åªå
床ãé«ãã®æœçãçŸããããåããŒã ã®æœçã«å°å¿µããéãã§ã¯ãªããšããã«ãŒã«ãåæã«åŸ¹åº ãŸãšãã®å³ åæïŒãããŸã§ã®çµç¹ã®æ§é ïŒ æåã«ãç§ã管æããŠããçµç¹ã®è©±ãããããŠãã ããã ç§ã管æããçµç¹ã§ã¯ãããããã¯ãã«å¯ŸããŠïŒã€ããã·ã§ã³ãæã£ãŠããŸãã ä»åã®åãçµã¿ä»¥åã¯ããããã®éæã®ããã«ïŒïœïŒäººçšåºŠã®è·ç𮿷·åã®å°ããŒã ãïŒïœïŒããŒã çšçµæããããããã§æœç衚/課é¡è¡šïŒããã¯ãã°ïŒãã€ããéçºããŠããŸããã ããŒã ã ãã§èããã°é¢å¿ããšãããŒã äžã§éããŠããçºãæææ±ºå®éåºŠã¯æ
ä¿ãããã®ã§ãããããŒã ã§ããã·ã§ã³ãåºå®ããŠããæ
ã«ããŒã å€ãžã®æèã匱ããªã£ãããå
šäœã§ã¯åªå
床ãé«ãæœçãå€åã«å¯ŸããŠãæè»æ§ãæãªããã課é¡ãã¿ããŠããŸããã çµç¹æ§é ã®å³ ç§ãã¡ãç®æãããããš éããããªãœãŒã¹ã§ãå¹çããæå€§ã®å¹æãåºãããã«ã¯ã»ã» ïŒããŒã ãžããã·ã§ã³ãåºå®ããããããå
šäœèŠç¹ã§åªå
床ãé«ã課é¡ãã察å¿ã§ãããšè¯ããã çã®åªå
床ãé«ãæœçããå®è¡ããã ãããå®çŸããããã«ã¯ãã²ãšã€ã®ããã·ã§ã³ãåè§£ãã課é¡çŸ€ãçµç¹ã§ïŒã€ã®ããã¯ãã°ã§ç®¡çãããåããŒã ãããã¯ãã°ããèªäž»èªåŸçã«ãåªå
床ãé«ã課é¡ãéžãã§å®è¡ããŠããããšãçæ³ãšèããŸããã è€æ°ããŒã ãïŒã€ã®ããã¯ãã°ãããã±ãããååŸããå³ æè»ãªçµç¹ ãŸããæã®éäžã§ãã£ãŠãããã·ã§ã³å®çŸã®ããã«åœåèšç»ããŠããã¿ã¹ã¯ãšã¯å¥ã«ãéèŠãªèª²é¡ãçºçããã±ãŒã¹ãèããããçªçºã®äºæ
ã«æè»ã«å¯ŸåŠã§ããä»çµã¿ã§ããå¿
èŠããããŸãã æ³å®ããããèšç»å€æ¡ä»¶ïŒ éå®³å¯Ÿå¿ ä»éšçœ²ããã®äŸé Œã»çžè« ææãåºãããã«ãæŠè¡ã¬ãã«ã§ã®åªå
åºŠå€æŽ ãªã© 广çãªããŒã ã®çµæ 广çãªããŒã ã§ããçºã«ã¯å¿ççå®å
šæ§ãéèŠã§ãããšãã調æ»çµæãã§ãŠããŸãïŒGoogleãå
¬éããŠããre:WorkããïŒãããã®èгç¹ã§ãé
æ
®ã¯ãããããšèããŸããã ãã®çºã«ããŒã ã¡ã³ããŒãåºå®ããããšãã§ããã°ãäºãã«ä¿¡é Œãåãåãæ¹ãèãæ¹ã»æåŸ
å€ãäžèŽãããããšããããããä»®ã«åªå
床ã«ããããŠããã·ã§ã³ãKPIãå€å°å€åãããšããŠãé«ãããã©ãŒãã³ã¹ã§ä¹ãããããããšèããŸããã éã«ãããŒã ã¡ã³ããŒãã³ãã³ãå€åããã°ä¿¡é Œãèãæ¹ã®äžèŽãåºæ¥ãããã«è³ããŸã§ãããã©ãŒãã³ã¹äœäžã¯å
ããªãã§ãããã çŸå®ã¯è€é æ°èŠéçºãªã©ã·ã³ãã«ãªKPIã远ããããæ§é ã®ããã·ã§ã³ããã¹ã¯ã©ã ã«å¯ŸããŠç¿ç床ãé«ãã¡ã³ããŒãæã£ãŠããã°ãäžè¿°ããä»çµã¿ãã¯ãŒã¯ããæ°ãããã®ã§ããã»ã»ã» æœçåªå
床ãåçŽã«æ¯èŒã§ããªã æ°å¹Žéãéçšãç¶ããŠãããããã¯ãã«å¯ŸããŠé©çšããããšãæ¹åæ§ãããããéãè€æ°ã®æã¡æã䞊åã§äžŠãã§ããŸãã ãããšãããŒã éã§åªå
床ã®å€æã¯éåžžã«å°é£ã«ãªã£ãŠããŸãã åªå
床ã倿ã§ããªã課é¡çŸ€ïŒäŸïŒ ããŒã æã¡æ èª²é¡ A UX远å ããã¢ãŒãã«ã®æåèª¿æŽ B SEO察ç ããèšäºããã®ãªã³ã¯ã®æ°èŠèšçœ® C æ°æ©èœéçº ããæ©èœã®éçº å
šäœã§åªå
床ã倿ããããã«ã¯ãæ¹åæ§ã®ç°ãªãæã¡æã誰ãã管çããå¿
èŠããããšæããŸãã ãã®æ¹æ³ãšããŠä»¥äžã®ãããªãã¿ãŒã³ãèããããŸãã æ¹æ³â ïŒåããŒã ã®ã¹ã¯ã©ã ãã¹ã¿ãŒãéãŸããå
šäœããã¯ãã°ãªãã¡ã€ã³ã¡ã³ãã宿œãå
šäœç®¡çããŠååªå
åºŠãæ±ºå®ã æ¹æ³â¡ïŒ å
šäœãã¿ãŠããäžé·ãããããããŠã³ã§åªå
床ã倿ã ããããåè
ã¯èªç¥è² è·ã倧ããã£ãããåŸè
ãäžé·ãéœåºŠæææ±ºå®ããããã»ã¹ãå¢ããŠããŸããäžèŠãªã³ã¹ããããããããããã«æããŸããã åæãšãªãã¹ã¯ã©ã / ã¢ãžã£ã€ã«éçºã«å¯ŸããŠãçè§£ãç¿ç床ããã©ãã© ããããã¹ã¯ã©ã ãã¢ãžã£ã€ã«éçºãç¥ããªãã»çµéšããªããšããã¡ã³ããŒã¯ãããªããã®ã®ãç¿ç床ãèå³ã人ã«ãã£ãŠå·®ã倧ãããçæ³åœ¢ããçµç¹ã«èœãšããŠããã«ã¯ãå°å
¥ã³ã¹ããã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã倧ããå²ã«ååãªãªã¿ãŒã³ãåŸããããäžéæã§ãå°é£ã極ããäºãæ³å®ãããŸããã å°å
¥ã®çºã«ãæèããããš çæ³ãšçŸå®ã®ãžã¬ã³ãã¯ããã®ã§ãããæåãããã¹ãŠå®ãºãã«å®è¡ããã®ã§ã¯ãªããæ¬¡ã®ïŒç¹ãããŒã¹ã« 極åã·ã³ãã«ãªã«ãŒã« ãèšããäºãšããŸããã æææ±ºå®ã®é床ãé«ãããäžèŠãªãã®ãå¯èœãªéãæé€ ããŒã ã¡ã³ããŒå
šå¡ãããŒã ã®äžãšå€ã®äž¡è»žã«ã€ããŠãåžžã«é¢å¿ãæã¡ç¶ããããšã¯èªç¥ã³ã¹ããé«ãå¹çæ§ãäžããŠããŸããŸãã ãã£ãŠãã·ã³ãã«ã«ååããŒã ã«éäžããŠããã«ãŒã«ãšããããŒã å
ã¯ãã¡ããçµç¹å
šäœã§çºçããåªå
床ãé«ã課é¡ããšããã¯ããŒã ã®èªäž»ã»èªåŸæ§ã«ä»»ããäœå¶ãšããŸããã åãããŠäžé·ãæææ±ºå®ãæ¿èªã«å
¥ãã±ãŒã¹ãæäœéãšããããšã§ããã广ãé«ããããšãå³ããŸããã 宿çã«ãå
šäœã®æ°åã課é¡ã確èªã»è°è«ã§ããå Žãçšæ ãšã¯ãããããŒã ã«é¢å¿ãéäžãããããšã暪æçãªæœçãªã©ã«å¯ŸããŠçµç¹çãªæè»æ§ã¯å€±ãããäžé·ãæç€ºããããšããŠãèªäž»æ§ããªãããã¹ãã¬ã¹ãæ±ããããªããšèããŸããã ããã¯å¿çåŠã§ããã¶ã€ãªã³ã¹å¹æïŒåçŽæ¥è§Šå¹æïŒã«ãããèªèº«ãäžçªããè§Šããæ°åã課é¡ããããã¯ãã«å¯ŸããŠãèå³ããã£ãŠããŸãã®ã§èŽãæ¹ããªãããšã ãšèããŠããŸãããæ¥µç«¯ã«ãªããããªãããã«ããªããã°ãããŸããã å¹çããçµæãåºãçºã«ã¯ãé£ã®ããŒã ãšååã§ããçšåºŠã®æ
å ±å
±æã¯ãããŠããã¹ãã§ãããäžè¿°ããŠããŸãããåœåèšç»ããŠããªãã£ãæŠè¡ã®å€åãç·æ¥å¯Ÿå¿ã¯ããããäºã ãã察åŠãåœç¶å¿
èŠã§ãã ãã®çºã«ãéé±ã§ã¹ã¯ã©ã ãã¹ã¿ãŒãéããŠçµç¹å
šäœã®äžã§ãç¹ã«èª²é¡ãšãªã£ãŠããéšåã ããè°è«ããå Žãçšæãã話ãåãã§åççã«åŠçããããã«ããŸããã åŠç¿ã³ã¹ãã¯æäœéã« ã«ãŒã«ã¯ãã·ã³ãã«ã« å¯èŠåã«ããçµç¹å
šå¡ãå
±éèªèããšããããã«ãã çºã®ã«ãŒã«ïŒïŒå°ããªåŠç¿ã³ã¹ãïŒã ããå¿
èŠãšã ãäŒããŠããŸããã çµè« åé ã«ãèšè¿°ããŠããŸãããïŒãæã»ã©éçšããæç¹ã§ã®ææ³ãšããŠã¯ãæ¬åœã®æå³ã§ãçµç¹ã®ç®æãKPIã«å¯ŸããŠåªå
床ãé«ããã®ããåããŠãããïŒãšãããšããŸã ãŸã 䌞ã³ä»£ãæããŠããŸãããæåã®äžæ©ãšããŠã¯ãããç¶æ
ãã€ããããšæããŠããŸãã å°å
¥ã®ãã€ã³ã ä»åãã¢ãžã£ã€ã«ãã¹ã±ãŒãªã³ã°ããéçºææ³ãå°å
¥ããã«ããããScrum of ScrumãLeSSã»SAFeãšãã£ãæ§ã
ãªãã®ãåèã«ãããŠããã£ãã®ã§ããããã¬ãŒã ã¯ãŒã¯ã®ã«ã¿ãã«æãããããããèªçµç¹ã®èª²é¡ãããããå§¿ãšç
§ããåãããŠã·ã³ãã«ã«å°ããé©çšããã®ãããã£ãæ°ãããŠããŸãã ãããŸã§ããã®èšäºãèªãŸããæ¹ã¯ã ã¢ãžã£ã€ã«ãã¹ã±ãŒãªã³ã°ããããšã«èå³ãããæ¹ããšæããŸãããäœãã®åèã«ãªãã°å¹žãã§ãã æåŸã« ä»åãšãããããçµç¹ã§å®è¡ããã¹ã¯ã©ã ã¯ç§èªèº«ãäžæãè¡ããäžå®ããã£ããã®ã®ã ãã£ã³ã¬ã³ãžããããŠããã£ãŠäžå®ã®æ¬¡ã«ç¹ããã«ã¿ãã«ã§ããããªãšæã£ãŠããŸãã ãã®ããã«ãLIFULLã§ã¯ãããŸããŸãªæ°ãããã£ã¬ã³ãžã«åãçµã¿ãããç°å¢ãæŽã£ãŠããŸãã LIFULLã§ã¯äžç·ã«åã仲éãåéããŠããŸãããããããã°ãã¡ããåãããŠã芧ãã ããã hrmos.co hrmos.co
KEELããŒã ã®çžåã§ãã ããéåãšåã®ããšã«ãªãã®ã§ããã以åæã
ã管çããKubernetesã¯ã©ã¹ã¿ã§ããKEELã§èµ·ããé害ã®ãµããããã«ã€ããŠæžããŸãã ä»åèµ·ããé害 PriorityClassãšã¯ãªã«ã çµç·¯ äœãèµ·ããã ãªãPodDisruptionBudgetã¯æ©èœããªãã£ãã®ã ã©ãããã°ããã£ãã æåŸã« ä»åèµ·ããé害 æ¢ã«ãµãŒãã¹ã€ã³ããŠããKubernetesã¯ã©ã¹ã¿ ã«å¯Ÿã㊠globalDefault: true ãªPriorityClassããããã€ãã 圱é¿ã§ããŸã PriorityClassãèšå®ãããŠããªã priority: 0 ãªPodãäžæã«Preemptããäžæçã«ãµãŒãã¹ã«é害ãèµ·ããã PriorityClassãšã¯ãªã«ã 詳ãã説æã¯å
¬åŒããã¥ã¡ã³ãã® Pod Priority and Preemption ã«è²ããŸãããåãã«PriorityClassã«ã€ããŠè»œã説æããŠãããŸãã kubernetes.io PriorityClassãšã¯ä»¥äžã®ããã«å®çŸ©ããKubernetesçµã¿èŸŒã¿ã®ãªãœãŒã¹ã§ãKubernetesãPodãã¹ã±ãžã¥ãŒãªã³ã°ããæã®åªå
床ã衚ããŸãã apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : high value : 1000 PodåŽã® priorityClassName ã§ä»¥äžã®ããã«æå®ããããšã§æå¹ã«ãªãããã®Podã®ã¹ã±ãžã¥ãŒãªã³ã°æã«Nodeã«ååãªãªãœãŒã¹ããªããã° priority ã®å€ã 1000 ããå°ããPodã察象ã®NodeããéžæããŠPreemptãããšãããã®ã§ãã apiVersion : v1 kind : Pod metadata : name : example spec : priorityClassName : high ... Preemptionãšã¯kube-schedulerã«ãã£ãŠå®è¡ãããåãªãPodã®çµäºã®ããšã§ãéåžžã®Podã®çµäºãšåãããã« preStop ã®å®è¡ -> SIGTERMã®éä¿¡ -> terminationGracePeriodSeconds ã®ç§æ°çµã£ãŠPodãçµäºããªããã°SIGKILLãéä¿¡ãã ãšãã£ããããŒã§å®è¡ãããŸãã PriorityClassã« preemptionPolicy: Never ãšæžãã°Preemptionãç¡å¹ã«ã§ããŸããããã®å ŽåãªãœãŒã¹ã«ç©ºããåºãæã«åªå
çã«ã¹ã±ãžã¥ãŒãªã³ã°ããããšããã ããªã®ã§åœç¶åŸ
ã¡æéã¯é·ããªããŸãã globalDefault: true ãšæžãããšã§ priorityClassName ãæå®ããŠããªãPodã«èªåçã«PriorityClassãèšå®ããããšãå¯èœã§ãã ããã©ã«ãã§ã¯Podã® priority ã®å€ã¯0ãšãªããããåºæºãšãªã priority ã globalDefault: true ãšããŠäœæããŠãããšããã§ãããã priority ã¯Kubernetesã®Admission Controllerã«ãã£ãŠèšå®ããããããæ¬¡åã®Podãããã€æããæå¹ã«ãªããŸãã åŸè¿°ããŸãããããä»åã®é害ã®åå ãšãªããŸããã ã¡ãªã¿ã«ããã®PriorityClassã«ã¯ããã©ã«ãã§ system-cluster-critical ãš system-node-critical ã®2ã€ã®PriorityClassãååšããŠããŠããããã¯Kubernetes 1.13ã§å»æ¢ããã scheduler.alpha.kubernetes.io/critical-pod ã®ä»£ãããšããŠçšæãããããã«ãªã£ããã®ã§ãã 絶察ã«Preemptãããããªãã¯ã©ã¹ã¿ã®éèŠãªã³ã³ããŒãã³ãã§ããDaemonSetã«ä»äžããããšãæ³å®ãããŠããŠã kube-system 以å€ã§ã¯å©çšããããšãã§ãããã çµç·¯ æã
ã管çããKubernetesã¯ã©ã¹ã¿ã§ããKEELã§ã¯Podã®ã»ãšãã©ãAWSã®ã¹ãããã€ã³ã¹ã¿ã³ã¹äžã§çšŒåãããã¹ãã ã¹ãããããªãŒã ã®å°å
¥ããã¹ãããã€ã³ã¹ã¿ã³ã¹å£²ãåãæã®ãã©ãŒã«ããã¯æ©èœãã¹ãããã€ã³ã¹ã¿ã³ã¹äžã®Podã®å®å
šãªçµäºåŠçã®éçºãªã©ãé²ããŠããŸããã ãã©ãŒã«ããã¯æ©èœã¯éçºãããã®ã®äŸç¶ã¹ã±ãžã¥ãŒãªã³ã°åŸ
ã¡ã¯äºæ³ã§ãããããåŸ
ã¡æéãã§ããã ãçãããã¹ãã¹ãããã€ã³ã¹ã¿ã³ã¹äžã®Podã®äžã§ãã¹ã±ãžã¥ãŒãªã³ã°ã®åªå
床ãã€ããå¿
èŠãåºãŠããŸããã ãããPriorityClassã§ãã ããã§æã
ã¯ä»¥äžã®3ã€ã®PriorityClassãçšæããŠé©çšããŸããã PreemptãããŠãããPodã«ä»äžãã value: 100 ã® low PriorityClass æšæºçãªPodã«ä»äžãã globalDefault: true ã〠value: 1000 ã® medium PriorityClass åªå
床ã®é«ãPodã«ä»äžãã value: 10000 ã® high PriorityClass é©çšåŸãç¡äºã«low PriorityClassãæã£ãPodã®Preemptionã確èªããããšãã§ããããã§æŽã«å®å®ããŠã¹ãããã€ã³ã¹ã¿ã³ã¹ãå©çšã§ããããã«ãªããŸããã ãšãæã£ãã®ãã€ãã®éãçªåŠããŒã ã«å¯ŸããŠå€§éã®ã¢ã©ãŒããå±ããŸãã ã¢ã©ãŒãã®çºçå
ã¯å€åœ¢ç£èŠã§ãã©ããã¯ã©ã¹ã¿å€ããã®ãªã¯ãšã¹ãã®ãšã©ãŒã¬ãŒããæ¥äžæããŠãããã§ãã 調æ»ãããŠã¿ããšãã¯ã©ã¹ã¿å€ããã®ãªã¯ãšã¹ããåãä»ãããªããŒã¹ãããã·ã§ãã istio-ingressgateway ãã¯ãããšããŠå€ãã®Podã«åèµ·åãã圢跡ãèŠãããŸããã ã¯ã©ã¹ã¿å
ã®ãªã¯ãšã¹ãã¯KEELã§å©çšããŠããService Meshã§ããIstioã«ãã£ãŠãªãã©ã€ãããŠãããã倧ããªåœ±é¿ã¯ãããŸããã§ããããã¯ã©ã¹ã¿å€ããã®ãªã¯ãšã¹ããåãä»ãããªããŒã¹ãããã·ã®å°æ°ãæžã£ãããšã«ãã£ãŠå€ããã®ãšã©ãŒã¬ãŒããæ¥äžæããŠããŸããã äœãèµ·ããã ãã®é害㯠globalDefault: true ã«ãã£ãŠåŒãèµ·ããããŸããã åè¿°ã®éããããã©ã«ãã®Podã® priority ã®å€ã¯0ã§ãã PriorityClassãå°å
¥ããåã«ãããã€ãããPodã«ã¯ãã¹ãŠ priority: 0 ãèšå®ãããŠããŸãã priority ã¯Admission Controllerã«ãã£ãŠèšå®ããããããPriorityClassãé©çšããŠãæ¢åã®Podã¯åŒãç¶ã priority: 0 ã®ãŸãŸã§ãã ããã«ä»å value: 1000 ãªPriorityClassã« globalDefault: true ãèšå®ãã圱é¿ã§ãååãªãªãœãŒã¹ããªãNodeã«æ°ãã« priority: 1000 ãªPodããããã€ãããPriorityClasså°å
¥ä»¥åã®Podãäžæã«PreemptãããŸããã ãªãPodDisruptionBudgetã¯æ©èœããªãã£ãã®ã Kubernetesã«ã¯EvictionãšããPreemptionã«äŒŒãæåãååšããŸãã Eviction㯠Node-pressureãèµ·ããé ã Taintã«ãã£ãŠ PodãNodeããéé¿ããããã®ã§ãããPodDisruptionBudgetã«ãã£ãŠäžåºŠã«éé¿ãããPodæ°ã«å¶éããããããšãã§ããŸãã KEELäžã«ãããã€ãããŠããPodã«ã¯ã»ãŒãã¹ãŠPodDisruptionBudgetãèšå®ãããŠããããããããã£ãçŸè±¡ã¯é²ãããŠããã¯ãã§ãã ããããPreemptionã®ããã¥ã¡ã³ãã«ã¯ä»¥äžã®ããã«ãããŸãã Kubernetes supports PDB when preempting Pods, but respecting PDB is best effort. The scheduler tries to find victims whose PDB are not violated by preemption, but if no such victims are found, preemption will still happen, and lower priority Pods will be removed despite their PDBs being violated. kubernetes.io ãªãã¹ãPodDisruptionBudgetã®éãã«Preemptããããšããããå®å
šã«ä¿èšŒãããããã§ã¯ãããŸããã ãã®ãããPodDisruptionBudgetãèšå®ããŠããã«ãé¢ãããä»åã®ãããªé害ãèµ·ããŠããŸããŸããã ã©ãããã°ããã£ãã ãŸã第äžã«ã皌åããŠããã¯ã©ã¹ã¿ã«å¯ŸããŠPriorityClassãèšå®ããããšã«ã¯æ
éã«ãªããªããã°ãªããŸããã å
šãŠã®Podã«ã¯ããã©ã«ãã§ priority: 0 ãèšå®ãããŠãããããPriorityClassã®èšå®ã«ãã£ãŠæå³ããªãPreemptionãçºçããŠããŸãå¯èœæ§ããããŸãã globalDefault: true ãèšå®ãããªããªãããã§ã以éãããã€ãããå
šãŠã®Podã«ã¯ priority ãèšå®ããããããããã0ãè¶
ããŠããå ŽåPriorityClasså°å
¥ä»¥åã®å
šãŠã®PodãPreemptionã®å¯Ÿè±¡ãšãªã£ãŠããŸããŸãã priority ã®åãããæ°å€ã¯ n < 2000000000 ãšåºããããã€ãå¹
ãæã£ãŠPriorityClassãäœããããªã£ãŠããŸããŸãããæããããã»ã©çްãã priority ãèšå®ããããšã¯å°ãªããããKEELã§ã¯ä»¥äžã®ãããªPriorityClassã®å®çŸ©ã«èœã¡çããŸããã apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : low value : -10 --- apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : low-nonpreempting value : -10 preemptionPolicy : Never --- apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : medium value : 0 globalDefault : true --- apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : medium-nonpreempting value : 0 preemptionPolicy : Never --- apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : high value : 10 --- apiVersion : scheduling.k8s.io/v1 kind : PriorityClass metadata : name : high-nonpreempting value : 10 preemptionPolicy : Never globalDefault: true ãªPriorityClassã® value ã0ã«ããŠãããããäžãäžåŸããPriorityClassãèšå®ããããšã«ãªã£ãŠãæ¢åã®PodãPreemptãããããšã¯ãããŸããã KEELã¯StatelessãªKubernetesã¯ã©ã¹ã¿ã§ããããã倧ããªå€æŽã䌎ãããŒãžã§ã³ã¢ããã®éã«ã¯ã¯ã©ã¹ã¿ã®çšŒåç³»ã2ã€çšæããŠCanary Deploymentãããã®ã§ã念ã®ããåŸãããPriorityClassãèšå®ã§ããããã«ããŸããã ãŸãã kubernetes/autoscaler ã®cluster-autoscalerãå©çšããŠããå Žåã --expendable-pods-priority-cutoff ãäžåã£ã priority ã¯ç¡èŠããããã ããã©ã«ãå€ã®-10 ãäžéãšããŠããŸãã æåŸã« å®ã¯æãããããšã«ããã®é害ã®2é±éåã« Grafana瀟ã§ã®åæ§ã®é害ã®Postmortem ãããŒã å
ã§å
±æããã°ããã§ããã grafana.com ããããã®PriorityClasså°å
¥ã®äœæ¥è
ã§ããç§ãã§ãã Preemptionã®æåãé ã«å
¥ã£ãŠããã¯ãã«ãé¢ãããã®å€§å€±æ
ã§ããããKubernetesã®å€±æè«ãéãã Kubernetes Failure Stories ã«ãPriorityClassã«ãŸã€ãããšããœãŒãã¯å€ãããããã®ãšã³ããªã§ã®æ³šæåèµ·ããã£ãŠçœªæ»
ãŒããšãããŠãã ããã k8s.af Multi TenancyãªKubernetesã¯ã©ã¹ã¿ã§ã¯å©çšè
ã«ããæå³ããªãPreemptionãé²ããããåæã«PriorityClassããããã€ã§ããªãããæš©éãçµãã®ã¯ãã¡ããã®ããšãResourceQuotaãOPA Gatekeeperã§å©çšã§ããPriorityClassã现ããã³ã³ãããŒã«ããå¿
èŠãããããšã«ããæ³šæãã ããã
èªå·±çŽ¹ä» ãããã¯ããšã³ãžãã¢ãªã³ã°ããŒã ã®ç³å·ã§ãã 2020幎æ°åå
¥ç€Ÿã§2幎ç®ã®ãšã³ãžãã¢ã§ãã ä»åã®èšäºã§ã¯ããšã³ãžãã¢ã ãã§æ°æ©èœéçºã»æ€èšŒãè¡ãPEChallengeã«ã€ããŠç޹ä»ãããŠããã ããŸãã ãŠãŒã¶ãŒãã¹ãã®å
·äœçãªããæ¹ãŸã§ç޹ä»ãããŠããã ããŸãã®ã§ãæåŸãŸã§èªãã§ããã ããã°å¹žãã§ãïŒ PEChallengeãšã¯ PEChallengeã¯ãProduct Engineer Challengeãã®ç¥ã§ããšã³ãžãã¢ã ãã§HOME'Sã®æ°æ©èœã®ãããã¿ã€ããäœããããžã§ã¯ãã§ãã éçºã¯ ã¯ãªãšã€ã¿ãŒã®æ¥ ãšãã瀟å
å¶åºŠã掻çšããŠãçŸåšã¯å幎ããšã«7å¶æ¥æ¥ã®æŽ»åæéã確ä¿ããŠããŸãã 2020幎7æã«çºè¶³ãããããã¿ã€ããäºåºŠäœããçŸåšãŠãŒã¶ãŒãã¹ãã宿œããŠããŸãã ãããžã§ã¯ãã®å
容ã¯äŒæ¥ç§å¯ã«ãªããããå
·äœçãªå
å®¹ãæžãããšã¯ã§ããªãã®ã§ãããä»åã®èšäºã§ã¯ãšã³ãžãã¢ã ãã§ãã©ã®ããã«æ°æ©èœã®ãããã¿ã€ããäœããäœã«æ©ãã ã®ããæžãããŠããã ããŸãã ã¡ã³ããŒæ§æ ãšã³ãžãã¢ãããŒãžã£ãŒïŒ1人 ãšã³ãžãã¢ïŒ4人 ããã«èšèŒããŠãããšã³ãžãã¢ã¯ãæ®æ®µHOME'Sã®éçºãããŠãããšã³ãžãã¢ã®äžããæå¿ã§éãŸã£ãã¡ã³ããŒã§æ§æãããŠããŸãã èªåãã¡ã§äŒç»ãè¡ãæè¡éžå®ãã§ããã®ã§ãããã«é
åãæããŠéãŸã£ãã¡ã³ããŒãå€ãå°è±¡ã§ãã éçºãè¡ãã®ã¯ãšã³ãžãã¢ã®4人ã§ããšã³ãžãã¢ãããŒãžã£ãŒã¯ãMTGã®é²è¡ãåããããžã§ã¯ãã®æ¹åæ§ã決ãããã瀟å
ã§ã®æ¿èªå¯Ÿå¿ãããŠããŸãã ã©ã®ããã«é²ããŠããã®ãïŒ PEChallengeã§ã¯æè¡çãªé¢ã§ã¯ãªããããžãã¹çãªé¢ã§ã®HOME'Sã®èª²é¡ããšã³ãžãã¢ãªã³ã°ã§è§£æ±ºããäºãç®çãšããŠããŸãã ãã®ããã«é±æ¬¡ã§å
šå¡ã§1æéMTGãéå¬ããHOME'Sã®ãµãŒãã¹ãšããŠã®èª²é¡ãå®çŸ©ãããšã³ãžãã¢ãªã³ã°ã§ã®è§£æ±ºçãèãããããã¿ã€ãã®æè¡éžå®ãè¡ããŸãããã©ããªæè¡ã§äœãäœãã®ãããæ±ºãŸããšå®éã«éçºã«å
¥ããŸãã éçºã¯å幎ã«äžåã7å¶æ¥æ¥ã®æéãå©çšããŠé²ããŠããã®ã§ãããã§äžæ°ã«èšèšãããããã¿ã€ãäœæãŸã§è¡ããŸãã ãã®åŸãŠãŒã¶ãŒãã¹ããæ¯ãè¿ãã宿œãããããã¯ããäœãçŽãã®ããæ¡åŒµãããã®ããæ±ºããŸãã ãã®ãµã€ã¯ã«ãå幎ã§åãããã«é²è¡ããŠããŸãã ããŒã ããšã³ãžãã¢ã¡ã³ããŒã®ã¿ã§æ§æãããããããµãŒãã¹ã®èª²é¡èšå®ãããããã¿ã€ãäœæã»æ€èšŒãŸã§è¡ãããšãã§ããéåžžã«ããããã®ãããããžã§ã¯ãã§ãïŒ äœã倧å€ãªã®ãïŒ èšèšãå®ãŸã£ãŠããªããšãéçºãæ»ã ãã®ããŒã ã¡ã³ããŒã§åããŠãããã¿ã€ããäœãéã«ãç»é¢èšèšãAPIèšèšãDBèšèšã圹å²åæ
ããŠè¡ããŸããã ç»é¢èšèš(2人)ãAPIèšèšãDBèšèšã®åœ¹å²ã決ããåŸã«ãåæé²è¡ã§èšèšãé²ããŠããŸããŸããã åã¯APIã®èšèšãæ
åœã ã£ãã®ã§ãDBèšèšãããã£ãããšé ã§æ³åããªãããèšèšãè¡ã£ãŠããŸããã ããããã®åŸã«DBã®æ§æã«å€æŽãå ããããšã«ãªããéäžãŸã§äœãäžããŠããAPIã®èšèšã倧å¹
ãªä¿®æ£ãããããšã«ãªããŸããã æèšãšããŠã¯ç»é¢èšèš(2人)ãAPIèšèšãDBèšèšãåæäžŠè¡ã§é²è¡ãããã«ãäžã€äžã€ã®èšèšãã¡ã³ããŒã§è°è«ãåå³ããŠçå®ã«é²ããããšã倧åã ãšæããŸããã äœãMVPã«ããïŒ ããæ°èŠäºæ¥ããããšãã«ãMVPãäœãããšèšãããäºãå€ãããšæããŸãã MVPãšã¯ãminimum viable productãã®ç¥ã§ãã䟡å€ãæäŸã§ããæå°éã®ãããã¯ãããšããäºã§ãã ä»åã®ãããžã§ã¯ãã§ã¯äœããå®çšçãªæäœéæ©èœããšããã®ããšããããšã«åºŠã
ã€ãŸããŸããã æ°ããååãäœãããšãããšãã©ãããŠãããããªæ©èœã欲ããããšããããæ©èœã远å ããããšããæ°æã¡ã«ãªããŸãã ãããã¯ããäœãäžã§å€ãã®äººããã®åé¡ã«æ©ãããšæãã®ã§ãããåãã¡ãåãåé¡ã«æ©ãŸãããŸããã ããã§åãã¡ã¯å床課é¡ã«æ»ãããã«ãã誰ã®ãã©ããªèª²é¡ã解決ããã®ãããšããåé¡ã«å¯ŸããŠã以äžã®æé ã§ã¢ã€ãã¢ã粟æ»ããŸããã ããããæã倧ããªèª²é¡ã¯äœãïŒ ä»ã®æ¹æ³ã§ãã®èª²é¡è§£æ±ºã§ããŠãããïŒ ãã®æ¹æ³ã¯æµææãªã䜿çšããŠããããã®ãïŒ çµæãšããŠãæã倧ããªèª²é¡ã ãã解決ããããã®MVPãäœæããäºãã§ããŸããã ãããããã§å®å¿ããŠã¯ãããŸããã ãªããªãã°ãMVPãäœæããåŸã®ãŠãŒã¶ãŒãã¹ããè¡ã£ãæã«ãå床ã¢ã€ãã¢ãçºæ£ããããã§ãã ãŠãŒã¶ãŒãã¹ãããããšããã¹ã¿ãŒã®æ¹ããããããªæ©èœããã£ããå¬ãããªãŒããªã©ãšæèŠãããã ãäºãå€ã
ãããŸãã ããã¯éåžžã«ãããããäºãªã®ã§ããããã®æèŠãå
šãŠåæ ãããŠãããšãçµå±ãŸãã誰ã®ãã©ããªèª²é¡ã解決ããã®ãããšããéšåãããããã«ãªã£ãŠããŸããŸãã ã§ãã®ã§ããŠãŒã¶ãŒãã¹ãã§ä»åéçºããæ©èœã課é¡è§£æ±ºã«çµã³ã€ããŠããã®ããæåªå
ã§ç¢ºèªãã ãŠãŒã¶ãŒãã¹ãã®çµæãèžãŸããŠå床ã¡ã³ããŒã§äžèš3ã€ã®æé ã«æ»ãããšã倧åã§ãã å
šãŠã®ã¹ããŒã¯ãã«ããŒãéããããŠãããïŒ LIFULL HOME'Sã§ã¯æ°æ©èœãäœãéã« ãŠãŒã¶ãŒ(HOME'Sã䜿ã£ãŠäœã¿æ¿ãããã人)ãšã¯ã©ã€ã¢ã³ã(HOME'Sã«ç©ä»¶ãèŒããŠããäžåç£äŒç€Ÿ) ã®ã©ã¡ãã«å¯ŸããŠãã¡ãªãããåºããŠããããèããå¿
èŠããããŸããã äž¡è
ã«ãšã£ãŠã¡ãªãããããç¶æ
ã«ããäºã¯ããªãé£ããã解決çã®ç«æ¡ã«èŠåŽããŸãããã©ã¡ãã®ç«å ŽããèŠãŠãè¯ããããã¯ãã«ããããã«ãåãã¡ã¯åããããã¿ã€ãã®ãã¹ããããŠãŒã¶ãŒåŽãšã¯ã©ã€ã¢ã³ãåŽã®äž¡æ¹ã§è¡ããŸããã ãããã¿ã€ãã«å¯Ÿããäž¡è
ã®æèŠãåãå
¥ããŠãã©ãããã°äž¡è
ãç«ãŠããããã¯ããã§ããã®ããæš¡çŽ¢ããŠãããŸãã äž¡è
ã«ãã£ãŠè¯ããããã¯ããèãããšããŸãã¢ã€ãã¢ãçºæ£ããŠæ··æ²ãšããç¶æ
ã«ãªã£ãŠããŸãã®ã§ã ãŠãŒã¶ãŒãã¹ãå®äºåŸãå床ã誰ã®ãã©ããªèª²é¡ã解決ããã®ãããšããåé¡ã«æ»ããããšæã£ãŠããŸãã ãŠãŒã¶ãŒãã¹ã PEChallengeã®ãŠãŒã¶ãŒãã¹ãã®æé ã»çµæã¯äžèšã®ããã«ãªããŸããã æé (PEChallengeã®ãŠãŒã¶ãŒãã¹ã) ãã¹ã¿ãŒã¯ãä»åã®æ°æ©èœã§è§£æ±ºãã課é¡ãæã£ãŠããããã§éžå® ãã¹ã¿ãŒ1人ã«å¯ŸããŠå¯Ÿé¢ã§ãŠãŒã¶ãŒãã¹ãã宿œ(çŽ30å) 1人ã®ãŠãŒã¶ãŒãã¹ãã«ããŒã ã¡ã³ããŒãå
šå¡åå ããåžäŒã»æžèšãåæ
ããŠè¡ã åžäŒ(PEChallengeã¡ã³ããŒã®äžäºº)ããããã¿ã€ãã䜿çšããæé ãäžã€ãã€èª¬æããŠãæé ãçµããæ¯ã«è³ªåãã ãOOãšãããã¿ã³ãæŒããŠãã ããã ãæåŸ
éãã«åäœããŸãããïŒãã©ã®ãããªåãã ãšè¯ããšæããŸããïŒã ããã®æ©èœã«5段éã§ç¹æ°ãã€ãããªãäœç¹ã§ããïŒã çµæ(PEChallengeã®ãŠãŒã¶ãŒãã¹ã) 1æéãããŠ2人ã«å¯ŸããŠãã¢ãªã³ã°ååŸ äœ¿ãæ¹ãäžå¯§ã«èª¬æããªãã質åãéããã®ã§ãæ©èœãçè§£ããŠããã£ãäžã§åçããŠããããŸãã ãã¹ã¿ãŒã®æ¹ããã®è³ªåã«å¯ŸããŠãåãã¡ãéæåçããããšã§ããããã ã£ããããªã¢ã€ãã¢ã®æ¹ãè¯ããªãã§ããïŒããšããææ¡ãé ãããšãå€ãã質ã®é«ããã£ãŒãããã¯ãåŸãããšãã§ããŸãã ãã¹ã¿ãŒã®æ¹ã«æé ãäžã€äžã€èª¬æãããã®åŸã«å®éã®ãããã¿ã€ãã®æäœã宿œããŠããããæåŸã«è³ªåãããŠããã®ã§ ãã¹ã¿ãŒã®æ¹ãæ©èœããã£ããçè§£ããç¶æ
ã§ãã¢ãªã³ã°ãããäºãã§ããŸããã ãŸã1人ã®ãã¹ã¿ãŒã«å¯ŸããŠååãªæéã確ä¿ããåæ¹åã«ã³ãã¥ãã±ãŒã·ã§ã³ããšãããããããæ·±ããŸã§æèŠãèãããšãã§ããŸããã èªäœã¢ããªã±ãŒã·ã§ã³ã§è¡ã£ããŠãŒã¶ãŒãã¹ããšã®æ¯èŒ å人çãªè©±ã«ãªããŸãããåããã©ã€ããŒãã®æéã§èªäœã¢ããªã±ãŒã·ã§ã³ãäœæããŠãå人ã«ãŠãŒã¶ãŒãã¹ããè¡ãããšããããŸãããä»åPEChallengeã§è¡ã£ããŠãŒã¶ãŒãã¹ããšèªäœã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãã¹ãã®éããæ¯ã¹ãŠãåŠã¹ãéšåããã£ãã®ã§ãããã§å°ãæžãããŠããã ããŸãã æé (ç³å·ã®èªäœã¢ããªã±ãŒã·ã§ã³ã§è¡ã£ããŠãŒã¶ãŒãã¹ã) LINEã§è€æ°ã®å人ã«ãèªäœã¢ããªã±ãŒã·ã§ã³ã®URLãšGoogle form(ã¢ã³ã±ãŒã)ã®URLãå
±æããŠåçããŠããã å人ã®éžå®ã¯ååããŠãããããã§å€æ Google formã«èªäœã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããã¢ã³ã±ãŒããæèš ã¢ã³ã±ãŒãã®åé ã§èªäœã¢ããªã±ãŒã·ã§ã³ã®ç¹åŸŽãšäœ¿çšæé ããã£ãã説æ 質åå
容ã¯ä»¥äž2〠ããã®ã¢ããªã䜿ããšOOãšãã課é¡ã解決ãããç¶æ
ã«ãªããŸããïŒã ããã®ã¢ããªã空ãæéã§äœ¿çšãããã§ããã éžæè¢ã5段éã§çšæããŠãã§ãã¯ããŠåçããŠããã çµæ(ç³å·ã®èªäœã¢ããªã±ãŒã·ã§ã³ã§è¡ã£ããŠãŒã¶ãŒãã¹ã) 1æéLINEã§è€æ°ã®å人ã«ãã¹ãã®äŸé Œãè¡ãã13ä»¶ã®åçãååŸ æ©èœãšäœ¿ãæ¹ã®èª¬æããã£ããã§ãã£ããããèªäœã¢ããªã±ãŒã·ã§ã³ã®äœ¿ãæ¹èªäœãããããªããšããå£°ãæ®ºå° èªäœã¢ããªã±ãŒã·ã§ã³ã§å®æœãããã¹ãã§ã¯æè»œã«å€ãã®åçãåŸãããšããããŸãããã¹ã¿ãŒã®æ¹ãæ©èœãçè§£ããªããŸãŸãã¹ããçµäºããŠããŸãäºããããŸããã èšèšææ³ã䜿çšçšéãæ¿è©°ããããããªé»è©±ãããã ããŸããç¬(è¯ãå人ãªã®ã§å€§äºã«ããŸã)ããã®ããã«ãã¹ã¿ãŒã®æ¹ãæããçåã«å¯ŸããŠãåæ¹åã§ã³ãã¥ãã±ãŒã·ã§ã³ãåããªãã£ãããããã现ãããã£ãŒãããã¯ãåŸãããšãã§ããŸããã§ããã ãŸããã¹ã¿ãŒã®éžå®ã«ãããŠãéãããããŸãããèªäœã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã§ã¯ç¡å·®å¥ã«è¡ããPEChallengeã®ãã¹ãã§ã¯ãéçºããæ©èœã䜿çšããããšæ³å®ããã人ãäžå¿ã«éžå®ããŸããã ãã®ããåŸè
ã®ãŠãŒã¶ãã¹ãã®æ¹ãããã¹ã¿ãŒã®æ¹ãèªåäºãšããŠæããŠãã¹ããåããŠãã ãã£ãã®ã§ãããæ·±ããã£ãŒãããã¯ãåŸãäºãã§ããŸããã ä»åã®PEChallengeã®ãŠãŒã¶ãã¹ãã¯äžç¹å®å€æ°ã®äººããæè»œã«åçãåŸãäºã§ã¯ãªããæ°æ©èœã䜿ããšæ³å®ãããäººã«æ·±ã質åããäºãæèããŠããŸããã ãã®ããäºåã«ãã©ã®ããã«ããã°å®éã«äœ¿çšããŠããããã«æããããã®ãïŒãããã©ãããæé ãªãã°æ©èœãçè§£ããŠãããããïŒããªã©ãèãã ã€ã³ã¿ãã¥ãŒã®æµãã質åå
容ãåå³ãèšèšããŠããŸããããã®ããã«ç®çã«åãããŠãã¹ãèšèšãè¡ãäºãå¿
èŠãªåçãåŸãããã«éèŠãªã®ã ãšæããŸããã ãŸãšã çŽ1幎éãã®ãããžã§ã¯ãããã£ãŠã¿ãŠã䜿ã£ãŠããããæ°æ©èœãã€ããäºããããªã«ã倧å€ãªã®ããšæããŸããã å®è£
ã®åã«èšèšã確å®ãããäºãè¿·ã£ããåžžã«èª²é¡ã«ç«ã¡æ»ãäºãé©åãªãŠãŒã¶ãã¹ãã宿œããäºãèã«éããŠãããããéçºããããšæããŸãã ä»åŸæ°èŠäºæ¥ãæ°æ©èœéçºããããæ¹ããããã§å°ã£ãŠããæ¹ã
ã®ãåèã«ãªãã°å¹žãã§ãã ãŸãLIFULLã§ã¯ãPEChallengeã®ããã« ããšã³ãžãã¢ãšããŠçµå¶ããªãŒãããã ãäœçŸãããæ¹ãåéããŠãããŸãããèå³ã®ããæ¹ã¯ãã¡ãã®ããŒãžãã芧ãã ããïŒ hrmos.co hrmos.co
ã¯ãããŸããŠãå質æ¹åæšé²ãŠãããã®æ ¹æ¬ã§ãã ãŠãããã§ã¯ãããã¯ããæ¥åããã»ã¹ã®å質ãç¶ç¶çã«ã¢ãã¿ãªã³ã°ããæ¹åèšç»ã®äœæãæ¯æŽããŠããããŒãããŒã·ããããã°ã©ã ãšããåãçµã¿ãå§åããŸããã 詳ããã¯äžèšã®èšäºãã芧ãã ããã www.lifull.blog ã¢ãã¿ãªã³ã°ã®ã¹ã³ãŒãã«ã¯ã»ãã¥ãªãã£ãå«ãŸããŸããä»åã¯ããã®ã»ãã¥ãªãã£ã®ã¢ãã¿ãªã³ã°ã«ãã¹ã¬ããã¢ããªã³ã°ãåãå
¥ãã詊ã¿ã«ã€ããŠãã玹ä»ããããšæããŸãã èª²é¡ ã¢ãã¿ãªã³ã°ã®æ¹æ³ãšããŠã¯ãã·ã¹ãã ãçŽæ¥èšºæãããã®ãã»ãã¥ãªãã£ã«ããããæ¥åããã»ã¹ã蚺æãããã®ãèããããŸããäŸãã°ãã·ã¹ãã ã蚺æãããã®ãšããŠã¯ãWebã¢ããªã±ãŒã·ã§ã³ããã©ãããã©ãŒã ã®è匱æ§èšºæ ãªã©ããããããæ¥åããã»ã¹ã蚺æãããã®ãšããŠã¯ãè匱æ§ãžã®å¯Ÿå¿æ¥åããã»ã¹ãæŽåç¶æ³ãéçšç¶æ³ã®é¢ããè©äŸ¡ãããã®ãªã©ããããããŸãã ãããã¯ã第äžè
ãããã¯ããŒã«ã蚺æã宿œãéçºã»éçšããŒã åŽã«ã¬ããŒãããããšãäžè¬çã§ãããã®ããã¬ããŒããããéçºã»éçšããŒã åŽã¯åã身ã®å§¿å¢ã«ãªããã¡ããšããç¶æ³ãçºçããŸãã 第äžè
ã«ãã客芳çãªèšºæçµæã¯å¿
é ãªãã®ã§ãããæãã·ã¹ãã ã«ã€ããŠè©³ããã®ã¯éçºã»éçšããŒã ã§ãããããã£ãããªãç¶æ³ãšããããŸããéçºã»éçšããŒã ããã€ã·ã¹ãã ãããŠæ¥åããã»ã¹ã«é¢ããæ
å ±ã蚺æã®ç²ŸåºŠãäžããããšã¯ééããããŸããã ãã®èª²é¡ã«ã€ããŠãã¹ã¬ããã¢ããªã³ã°ã解決ã®äžå©ã«ãªããããããŸããããããã¯ãéçºã»éçšã®ã¹ããŒã¯ãã«ããŒãåå ããèªãã»ãã¥ãªãã£é¢ã®è
åšïŒã¹ã¬ããïŒãæŽãåºããŠãããšããã«å¹æãæåŸ
ã§ããããã§ãã ã¹ã¬ããã¢ããªã³ã° ã¹ã¬ããã¢ããªã³ã°ã¯ãã·ã¹ãã ã®èšè𿮵éã§çšããããè
åšã®æŽãåºãã»åæã»è©äŸ¡ã®ææ³ã§ããããã§ã«éçšã«å
¥ã£ãã·ã¹ãã ã«ã€ããŠã宿œãã䟡å€ããããšãããŸãã倧ããªã·ã¹ãã ã®å Žåãã©ãã«å¯ŸããŠåªå
çã«ã»ãã¥ãªãã£å¯Ÿçã宿œããŠããããªã©ãéããããªãœãŒã¹ãæ¯ãåããéã®å€æææã«ãªãããã§ãã ã¹ã¬ããã¢ããªã³ã°ã«ã€ããŠè©³ããç¥ãããæ¹ã¯äžèšãã芧ãã ããã owasp.org ä»åã®è©Šã¿ã§ã¯äºã€ã®ã¢ãããŒãããšããŸããã STRIDEã¢ãã«ã®æŽ»çš å
¬éãããŠããã¹ã¬ããã¢ãã«æ
å ±ã®æŽ»çš ïŒïŒSTRIDEã¢ãã«ã®æŽ»çš ãŸããDFDïŒããŒã¿ãããŒå³ïŒã®äœæãéããŠãéèŠãªããŒã¿ã®æµãã«ã€ããŠåå è
éã§æ
å ±ãå
±æããŸããã€ãã«ãSTRIDEã¢ãã«ãšãã°ããè
åšãæŽãåºãããã®èгç¹ãéããŠããŒã¿ã®æµãã远ããæãã€ãæžå¿µç¹ãåºãåã£ãŠãããŸãããã®æŽãåºãäœæ¥ãè
åšãã¬ã¹ããšåŒãã§ãDFDäžã«ä»ç®çŽãåŒµãæ¹æ³ã§é²ããŸããã Microsoft ã®STRIDEå®çŸ© åºå
žïŒ https://docs.microsoft.com/ja-jp/azure/security/develop/threat-modeling-tool-threats ãã®ã¢ãããŒãã§ã¯å€ãã®æžå¿µç¹ãåºãåãããšãã§ããŸãããäžæ¹ã宿œäžã®èª²é¡ãèŠããŠããŸããã åœåã¯æœè±¡åºŠã®é«ãDFDããã¯ãããæ®µéãèžãã§å
·äœæ§ãé«ããããã«åãããŠæŽãåºãè
åšã®å
·äœæ§ãé«ããŠããäºå®ã§ãããããããã·ã¹ãã ãšåžžã«åããåãéçºã»éçšããŒã ã¯ãã§ã«å
·äœçãªæžå¿µç¹ãæã£ãŠãããè
åšãã¬ã¹ããããæ¢ç¥ã®æžå¿µç¹ãçŽæ¥ãªã¹ãåããæ¹ãå¹ççã§ããã ãã®ããã«ããã§ã«å
·äœçãªæžå¿µç¹ãèªèãããŠããå Žåãå¿
ç¶çã«ãã¡ãã«ãã©ãŒã«ã¹ããããšã«ãªããããã¡ãªãããçããŸãããæ°ããªè
åšãèŠã€ãåºãããšãæèã«ãªãç¹ã§ããSTRIDEã§è
åšãæŽãåºããŠããã«ã¯ã緎床ãäžããããšãå¿
èŠãšæããŸããã ãŸããè
åšãã¬ã¹ãã«ãããæ¢ç¥ã®æžå¿µç¹ã®ãªã¹ãåã«ãããããã§åºãŠãããã®ãæ¬åœã«è
åšã§ãããã¯ãããã«èžã¿èŸŒãã 調æ»ãå¿
èŠãšãªããŸãããçãéçºãµã€ã¯ã«ã§å€ãã®æ©èœãå®è£
ã»æ¹ä¿®ããéçºã»éçšããŒã ã«ãšã£ãŠã¯ããã®æŽ»åã®ããã®ãªãœãŒã¹ç¢ºä¿ãæå€§ã®èª²é¡ãšãããŸãã ïŒïŒå
¬éãããŠããã¹ã¬ããã¢ãã«æ
å ±ã®æŽ»çš ç¹å®ã®æè¡ã«ã€ããŠã¯ããã§ã«ã¹ã¬ããã¢ãã«ãæ€èšããå
¬éãããŠãããã®ããããŸããä»åã®è©Šã¿ã§ã¯ãOAuth2.0 ã«é¢ããäžèšã®ææžã掻çšããããšãã§ããŸããã datatracker.ietf.org ææžã®æ±ãã«ã¯äœæ³ããããå°ãææžèªäœã«ã€ããŠèª¬æãããŸãã ãã®ææžã¯ãçŸåšã€ã³ã¿ãŒããããã©ãããšããç¶æ
ã§ããŸã äœæ¥ãé²è¡äžïŒwork in progressïŒã®ææžã§ãã2016幎11æããäœæããå§ã2021幎4æã«ã¯ãã©ããã®18çãã§ãŸãããææžå
ã«ããã®18çã®æå¹æéã¯2021幎10æãšèšãããŠããŸãã ãŸããBCPïŒBest Current PracticeïŒãšããçš®é¡ã®ææžã«å±ããOAuth2.0å®è£
ã«ãããã»ãã¥ãªãã£é¢ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠããææžãšããããšã«ãªããŸãã ææžã®ç¬¬ïŒç« ã«ã¯å®è£
æã®ã»ãã¥ãªãã£ã«é¢ããæšå¥šäºé
ããŸãšããããŠããŸããå
容çè§£ã«ã¯OAuth2.0ã«é¢ããåæç¥èãå¿
èŠãšãããŸãããOAuth2.0ã«ã€ããŠã¯æžç±ã®åºçããããã€ã³ã¿ãŒãããäžãããå€ãã®æ
å ±ãåŸãããšãã§ããã®ã§ãããããåç
§ããªããçè§£ãé²ããŠããããšãã§ããŸãã 第ïŒç« ã§ã¯ã©ã®ãããªæ»æè
ãæ³å®ããå¿
èŠãããã®ã確èªããããšãã§ãã第ïŒç« ã§ã¯å
·äœçãªè
åšããã³å¯Ÿçã«ã€ããŠç¥ãããšãã§ããŸãã 第ïŒç« ã®æšå¥šäºé
ã第4ç« ã®å¯Ÿçäºé
ã¯ãMUSTïŒNOTïŒãããSHOULDããªã©ã®åœ¢ã§è¡šçŸããã察çã®å¿
èŠæ§ã«ã€ããŠåŒ·åŒ±ãåããããã«ãªã£ãŠããŸãããããã®è¡šçŸã察çåªå
床ã®å€æã«ãããŠæ ãã©ãããšãªãããããžã䟿å©ãšãããŸããå衚çŸã®å®çŸ©ã¯ãRFC2119ãRFC8174ã§ç¢ºèªããããšãã§ããŸãã åºå
žïŒ https://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/ datatracker.ietf.org datatracker.ietf.org ä»åã®è©Šã¿ã§ã¯ãã¢ãã¿ãªã³ã°å¯Ÿè±¡ã®ã·ã¹ãã ã«åœãŠã¯ãŸãè
åšãææžããæ¢ãåºããå
ã®ãMUSTïŒNOTïŒãããSHOULDããèæ
®ããªãã確èªé
ç®ããªã¹ãã¢ããããããšãã§ããŸããã ãã®ãããªææžã掻çšã§ããã®ã¯ãè
åšã®èæ
®æŒããé²ããšããé¢ã§ã倧倿å¹ã ãšæããããŸãããŸããå
·äœçãªå¯ŸçãŸã§ç¥ãããšãã§ããã®ã§è
åšãæŽãåºããåŸã®å¯Ÿçæ€èšã楜ã«ãªããŸãã äžæ¹ããã®ã¢ãããŒãã«ãããŠã課é¡ããªãããã§ã¯ãããŸãããå
ã»ã©ãã·ã¹ãã ã«åœãŠã¯ãŸãè
åšããšæžããŸããããOAuth2.0ã®å®è£
ã®è©³çްãç¥ãããã«ãDFDããã詳ããã·ãŒã±ã³ã¹å³ãå¿
èŠãšããŸãããéçºããŒã ããã¯è©³çްãªå³ãæäŸããã ã確èªé
ç®ã®ãªã¹ãã¢ãããå¯èœã«ãªããŸããã ãŸãšã ãã¬ã¹ããéããŠãã£ãã°ããã«æžå¿µäºé
ãåºããŠããã¢ãããŒããç¹å®ã®æè¡ã«ã€ããŠå
¬éãããææžããæ žå¿éšã確èªããŠããã¢ãããŒããäž¡æ¹ã«ã¡ãªãããããããšã¯ç¢ºãã ãšæããŸããã ãããŠãã¹ã¬ããã¢ããªã³ã°ãšããææ³ã«ãã©ã€ããªãããè
åšããããããããªãäºé
ã«æ°ã¥ãããšããæ°ã¥ããè
åšã«ç¹åããŠãã®æç¡ãæ€èšŒããäœæ¥ãå¿
èŠã«ãªãããã ãšæããŸããã ã¹ã¬ããã¢ããªã³ã°ã®æ¹æ³ãšããŠãSTRIDEãšãšãã«ç޹ä»ãããããšã®ããPASTAãšããæ¹æ³ãæå¹ã§ã¯ãªãããšèããŠããŸãã ä»åã¯ãã»ãã¥ãªãã£ã®ã¢ãã¿ãªã³ã°ã«ã¹ã¬ããã¢ããªã³ã°ãåãå
¥ãã詊ã¿ã«ã€ããŠã倧ãŸãã«ç޹ä»ãããŠããã ããŸããã ãã®è©Šã¿ããããããªãã§ãã玹ä»ã§ãããããªå€±æè«ãæåäºäŸãªã©ãåºãŠãããšæããŸããããããããŸãå¥ã®æ©äŒã«ã玹ä»ã§ããã°ãšæããŸãã LIFULLã§ã¯å
±ã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ããã¯ãããžãŒæ¬éšã®yoshikawaã§ãã奜ããªW3C Recommendation 㯠RDF 1.1 Concepts and Abstract Syntax ã§ãã äŒè°ããã£ããã§ã®ããåãã®æ±ºå®äºé
ã»è°äºé²ãã¢ããªã±ãŒã·ã§ã³ãæ©èœã®èšèšæžã»ä»æ§æžãREADMEãªã©ãªã©... LIFULLã®éçºçŸå Žã«ãããŠã¯ããœãŒã¹ã³ãŒã以å€ã«ããã®ããã«æ§ã
ãªææžã®ç®¡çã»èç©(=ããã¥ã¡ã³ããŒã·ã§ã³)ã宿œããŠããŸãã å€ãã®éçºè
ã»ã¡ã³ããŒãããã¥ã¡ã³ããŒã·ã§ã³ã®éèŠæ§ããã®æ©æµã¯çè§£ã¯ããŠãããã®ã®ããªããªãããŸãæ
å ±ã®èç©ã»ç®¡çãã§ããªãã ãã®çµæãæ¬è³ªçã§ã¯ãªã調æ»ã«æéãåãããŠããŸãDeveloper ExperienceãäžèœããŠããŸãã ãã®ãããªèª²é¡ãæ±ããŠãããããžã§ã¯ããããŒã ã¯äžã®éçºçŸå Žã«ãããŠå°ãªãããååšãããšæããŸãã LIFULLã®éçºçŸå Žã«ããã®èª²é¡ã¯åœãŠã¯ãŸããŸãã ç§ãåå ããŠããããã¯ãšã³ãå·æ°ãããžã§ã¯ãã§ã¯ããã¥ã¡ã³ããŒã·ã§ã³ã«ãŸã€ãã課é¡ã解決ãã¹ãæ§ã
ãªåãçµã¿ãè¡ã£ãŠããŸããã ãã®èšäºã§ã¯ç§ãåå ããŠããããã¯ãšã³ãå·æ°ãããžã§ã¯ããäžå¿ã«å®æœããŠãããç¶ç¶çãªããã¥ã¡ã³ããŒã·ã§ã³ãå¯èœã«ããä»çµã¿ã«ã€ããŠç޹ä»ããŸãã ããã¯ãšã³ãå·æ°ãããžã§ã¯ãã«ã€ããŠã¯ãã¡ãã®èšäºãã芧ãã ãããClean Architectureãæ¡çšãããã¯ãšã³ãAPIéçºãè¡ã£ãŠããŸãã www.lifull.blog æ³å®ããŠãã察象èªè
ããã¥ã¡ã³ããŒã·ã§ã³ãããŸãæ©èœãããããã®ä»çµã¿ããã³ããç¥ããã人 瀟å
WikiãREADME(Markdownãã¡ã€ã«)ã§ã®ããã¥ã¡ã³ãã®äœæãšç®¡çã«éçãæããŠãã人 GitHub Discussionsã®æŽ»çšäºäŸãç¥ããã人 ã©ããã£ãŠããã¥ã¡ã³ããŒã·ã§ã³ã宿œããŠããã®ã LIFULLã§ã¯äž»ã«ç€Ÿå
WikiããŒã«ãå©çšããŠããã¥ã¡ã³ããŒã·ã§ã³ã宿œããŠããŸãã ã¡ã³ããŒããšã³ãžãã¢ã®ã¿ã§æ§æãããŠããããŒã ã§ã¯å°çšGitHub RepositoryãäœæãMarkdownãã¡ã€ã«ãããŒãžã§ã³ç®¡çãããã GitHub Wikiãªã©ã®æ©èœã掻çšããŠããã±ãŒã¹ããããŸããããã¯ãšã³ãå·æ°ãããžã§ã¯ãããã®ã±ãŒã¹ã®äžã€ã§ãã çŸåšã¯äž»ã«ç€Ÿå
Wikiãããã¥ã¡ã³ããŒã·ã§ã³å°çšGitHub RepositoryããããŠGitHub Discussionsã®3ã€ãããŒã«ãšããŠæŽ»çšãããã¥ã¡ã³ããŒã·ã§ã³ã宿œããŠããŸãã ããã¥ã¡ã³ãã®æ§è³ªãšããŒã«ã®äœ¿ãåã ããã¥ã¡ã³ãã®æ§è³ªã«ãã£ãŠãããã¯ãšã³ãå·æ°ãããžã§ã¯ãã§ã¯ä»¥äžã®ããã«ããŒã«ã䜿ãåããŠããŸãã 以äžã§æããŠããããŒã«ä»¥å€ã«GitHub Wikiãå©çšããŠããææããããŸãããèšäºã®æ¬é¡ãšéžããããçµç·¯ã¯å²æããŸããGitHub Repositoryãžãšç§»è¡ããŠããŸãã 瀟å
Wiki: æè¡èŠçŽ ãèããšã³ãžãã¢è·ä»¥å€ãèŠãããšãæ³å®ããŠãããã®ã䟿å®äžç€Ÿå
Wikiå
ã®æ©èœãå©çšããããã® äŸ: ãããžã§ã¯ãæ²ç« ãRetrospectiveè³æ GitHub Repository: æè¡çãªå
容ã«é¢ããèŠçŽãã«ãŒã«ããã¹ããã©ã¯ãã£ã¹ãåŠç¿è³æãªã©ããæ±ºãŸããã£ããã®ã äŸ: ã³ãŒãã£ã³ã°èŠçŽãæšå¥šå®è£
ãã¿ãŒã³ãClean ArchitectureåŠç¿è³æ GitHub Discussions: æè¡çãªå
容ã«é¢ããã¡ã¢ããã°ãæ§æ³ãªã©ãããšããããèšé²ããŠãããããã®ã äŸ: ã¢ãŒããã¯ãã£ã«é¢ããèŠçŽããã¿ãŒã³ã®ææ¡ã決å®äºé
ã®ã¡ã¢(Architecture Decision Records) ãã®ããã«ç€Ÿå
Wikiã¯å¿
èŠæ§ãçããéã«å©çšãããªãã¹ãGitHubäžã«æ
å ±ãèç©ãããŠããéçšãããŠããŸãã åœåã¯éåžžã®ãœãŒã¹ã³ãŒã管çãšåæ§ã«ãGitHub Repositoryã§å
šãŠã®ããã¥ã¡ã³ãã®ããŒãžã§ã³ç®¡çã宿œããŠããŸãããããããããäŒããããããªãèŸãããçããŠããŸã£ãããã«ã ãæ±ºãŸããã£ããã®ãã¯Repositoryå
ã«ãããšããããèšé²ããããã®ãã¯Architecture Decision Recordsã®èãã®äžãGitHub Discussionsã«èç©ããéçšã«å€æŽããŸããã GitHub Repositoryã ãã§ããã¥ã¡ã³ãã管çããŠã¿ãçµæãšèª²é¡ ã©ããã£ãŠéçšããŠããã®ã åœåã¯GitHub Repositoryã®ã¿ã§æè¡çãªããã¥ã¡ã³ãã管çããŠããŸããã å人ããã°ãåçš®ããã°ãµãŒãã¹ã®èšäºç®¡çãšåãããã«ãéåžžã®ãœãŒã¹ã³ãŒããšåæ§ã«ããã¥ã¡ã³ã(.mdãã¡ã€ã«)ã管çãããšãããã®ã§ãã ããã¥ã¡ã³ããŒã·ã§ã³å°çšGithub Repository ããã¥ã¡ã³ããäœæã»æŽæ°ããããŸã§ ããã¥ã¡ã³ãã®äœæãæŽæ°ã®éã«ã¯ãããã¥ã¡ã³ãã®äœè£ã厩ããããšãçšèªã®è¡šèšæºããé²ãããã«textlintãšããã©ã€ãã©ãªãå©çšããŠããã¥ã¡ã³ãã®ãã©ãŒãããã宿œããŠããŸãã github.com äžèšã®ããã«èšå®ãã¡ã€ã«ãäœæãäœè£ã衚èšã®æºããã鲿¢ããŠããŸãã version : 1 rules : - expected : Library patterns : - ã©ã€ãã©ãª - expected : Application patterns : - ã¢ããªã±ãŒã·ã§ã³ - expected : CleanArchitecture patterns : - clean architecture - Clean architecture - Clean Architecture - ã¯ãªãŒã³ã¢ãŒããã¯ã㣠- ã¯ãªãŒã³ã¢ãŒããã¯ãã£ãŒ ããŒã«ã«ã§ã¯npm script, pushããåŸãGitHub Actionsã§textlintãå®è¡&èŠçŽææããããã«èšå®ãã æç« ã®äœè£ããã©ãŒãããã®æºãããé²ãã€ã€ãããã¥ã¡ã³ãã®äœæã»æŽæ°ã宿œããŠããŸããã ããã¥ã¡ã³ãäžã®æç« ã®äœè£ããã©ãŒãããã ãã§ãªããããã¥ã¡ã³ãã®ãã¡ã€ã«åãããã¥ã¡ã³ãã®éå±€æ§é ã®é©åããã¬ãã¥ãŒæã«ãã§ãã¯ããããã¬ãã¥ãŒäœå¶ã®éçšãããŠããŸããã ãã®äžé£ã®å³æ Œãªããã¥ã¡ã³ããŒã·ã§ã³æŽæ°ãããŒã«ãã£ãŠèªè
ã«åªããèªã¿ãããããã¥ã¡ã³ããæäŸã§ããŸãã ãããã峿 Œãªããã¥ã¡ã³ããŒã·ã§ã³ã®ãããŒã倿Žã®å€ããããžã§ã¯ãã«ãããŠé©çšããããšã¯ããã¥ã¡ã³ãæäŸè
ãžã®è² è·ãšãªãåŸãŸãã æµ®äžãã課é¡: æžãã®ããèŸãã ããã¥ã¡ã³ããŒã·ã§ã³ã«å¯ŸããŠèª²é¡ãæã¡ãªããããéçºè
ã¯äººéãªã®ã§æ§é åããæŽã£ãããã¥ã¡ã³ããæžãããšãèŸããšããããšããããŸãã å®éã«éçšããŠãããšã¡ãã£ãšããããã¥ã¡ã³ãã®å€æŽãããéã«ãtextlintããã®å³æ Œãªææãpassããå¿
èŠãããããæç« ãæžãèŸãããç®ç«ã€ããã«ãªããŸããã textlintã®èšå®ãç·©åããã°å€å°ã®æ¹åã«ãªããŸãããããã¥ã¡ã³ãã®å質ã¯ç¶æãããããæ ¹æ¬çãªè§£æ±ºã«ã¯ãªããŸããã æç« ãæžãèŸã以å€ã«ãããéå±€æ§é ãç¶æããèŸããããŸãèŠéãããšã¯ã§ããŸããã§ããã ææ°æã
ãšããã°ãå§ããŠæåã¯äžå¯§ã«èšäºã®éå±€æ§é ãã«ããŽãªç®¡çãããŠããããããŠé¢åã«ãªã£ãããããªçµéšãæã£ãããšãããæ¹ãããããšæããŸãã ããã¥ã¡ã³ããŒã·ã§ã³äžå
šãæããã£ã¹ãã㢠ã¹ããŒã¯ãã«ããŒãå€ãããã仿§å€æŽãå®è£
èŠçŽãæšå¥šå®è£
ãã¿ãŒã³ãªã©ã®å€æŽããªãã¹ãææ°ã®ç¶æ
ã«ä¿ã€å¿
èŠããããšãããããã¯ãšã³ãå·æ°ãããžã§ã¯ãã®æ§è³ªäžã 倿Žã®é »åºŠã®å€ãã«ä¹ããŠèšãäžãããã®èŸãã¯ç¡èŠã§ãããã®ã§ã¯ãããŸããã ããã¥ã¡ã³ããæžãããšãèŸããªããšãããã¥ã¡ã³ããŒã·ã§ã³å°çšRepositoryãè§Šã/èŠãã®ãèŸããªããŸãã éçºããã»ã¹ã«ãããŠãåŸã
ã«ããŠããã¥ã¡ã³ããŒã·ã§ã³ã¯åªå
床ãäœããªããåŸåãã«ãããã¡ã§ãã ãããŠåªå
床ãäœããŠèª°ãæŽæ°ãããããªãããã¥ã¡ã³ããŒã·ã§ã³å°çšRepositoryãåºæ¥äžãããŸãã ãããŠèª°ãæŽæ°ããªãã®ã§Repositoryå
ã®ããã¥ã¡ã³ãã¯é³è
åããããã¥ã¡ã³ãã«ãã¹ãç¥èã¯å人ã®ãã¬ããžãšããŠå没ããŠãã¬ããžã®å
±æãæ©èœäžå
šã«é¥ãã æå¥ã«ã¯èª¿æ»å·¥æ°ãšããŠæ°èŠéçºè
ã«ãã®ãã±ãã®ããããããšã§ãããã å®éã«ã¯ãã»ã©æ·±å»ãªç¶æ
ã«ã¯ãªã£ãŠããŸããã§ãããããã¡ãããšããæç« ãæžãã®ãèŸããããšã«èµ·å ããŠãã¬ããžã®å
±æã倱æããããšã¯ç¡èŠã§ããªããªã¹ã¯ã§ãã 解決ç éçºè
ã¬ã€ãã©ã€ã³ãæ·ãããšã§ç޳士åå®çã®åã®äžã«ããã¥ã¡ã³ããŒã·ã§ã³ã匷å¶ããã®ã§ã¯ãªãã ãããŠãããã¥ã¡ã³ããšããŠæ©èœãããããªé©åºŠã«ãŸãšãŸã£ãææžãäœæå¯èœã§ãããªãããããã¥ã¡ã³ããŒã·ã§ã³ã®èŸããè§£æ¶ã§ããå¥ã®ä»çµã¿ãçšæã§ããªããïŒ ããããã GitHub Discussions ãå©çšãã Architcture Decision Records(ADR) ã§ãã docs.github.com GitHub Discussionsã§ã®ADR ADRãšã¯ïŒ 以äžã¯Thoughtworksã®Technology Radarããã®åŒçšã§ãã Much documentation can be replaced with highly readable code and tests. In a world of evolutionary architecture, however, it's important to record certain design decisions for the benefit of future team members as well as for external oversight. Lightweight Architecture Decision Records is a technique for capturing important architectural decisions along with their context and consequences. We recommend storing these details in source control, instead of a wiki or website, as then they can provide a record that remains in sync with the code itself. For most projects, we see no reason why you wouldn't want to use this technique. www.thoughtworks.com ããã¯ãšã³ãå·æ°ããŒã ã§ã¯ä»¥äžã®ããšã«çç®ããŠADRã®èãæ¹ãããã¥ã¡ã³ããŒã·ã§ã³ã«åãå
¥ããŸããã æ±ºå®äºé
ã®çµç·¯ãèæ¯ã第äžè
ãé²èЧå¯èœ 軜éãªããã¥ã¡ã³ããŒã·ã§ã³ 第äžè
ãç°¡åã«ã³ã¡ã³ããç·šéå¯èœ å
ã®å®çŸ©ã§ã¯ã¢ãŒããã¯ãã£ã«é¢ããæ±ºå®äºé
ããã®èæ¯ãèšé²ããããšã«çŠç¹ãåœãŠãŠããŸãããããã¯ãšã³ãå·æ°ããŒã ã§ã¯å®è£
ã«é¢ããäºæãå«ãã¢ãŒããã¯ãã£ä»¥å€ã®äºæã§ãèšé²ããŠããŸãã GitHub Discussionsãæ¡çšãã ãããžã§ã¯ãã¡ã³ããŒããã¹ããŒã¯ãã«ããŒããšã³ãžãã¢ãäžå¿ã§ãããããGitHubãæäŸããä»çµã¿ãå©çšããŠADRãå®çŸããããšã¯èªç¶ãªæµãã§ããã ãããŠãã¹ã¬ãã圢åŒã§ç°¡åã«ããã¥ã¡ã³ãã®äœæã第äžè
ã®ç·šé/ã³ã¡ã³ããå¯èœã§ãããããã¥ã¡ã³ããã«ããŽã©ã€ãºãã¿ã°ä»ãå¯èœãªGitHub Discussionsãæ¡çšããŸããã 以äžã¯DDD(ãã¡ã€ã³é§åéçº)ã«ãããDomain Serviceãå·¡ã£ãŠã®ADRã®å®äŸã§ãã ADRã®å®äŸ. ãšããããæ®ããŠããããããšãã¡ã¢ããŠããŸã ãªãæ¡çšåœåãGitHub Discussionsã¯Betaçã§ããã2021幎8æ17æ¥ã«Betaçããæ£åŒçã«ãªããŸããã github.blog GitHub Discussions à ADRãå®è·µããŠã¿ã广 æå³ããŠããããã¥ã¡ã³ããŒã·ã§ã³ã®è² è·åæžã«å ããã³ãã¥ãã±ãŒã·ã§ã³ã«ãããŠæå³ããŠããªãã£ã广ããããŸããã ãšããããæ®ããŠããããããšã®ããã¥ã¡ã³ããŒã·ã§ã³ã楜ã«ãªã£ã 倧äºãªããšã ãã©ããšããããæžãæ®Žãã®ã¡ã¢ã§æ®ããŠãããããåãããã¡ãªããã¹ããã£ããäžã§ã®ãããšããä¿åããŠããããã ãšãã£ãããšãæ°è»œã«æ®ããããã«ãªããŸããã ãã®çµæã倧äºãªæ
å ±ãå人ã®ãã¬ããžãšããŠå没ããŠããŸãæ©äŒãæžããŸããã äžèšã®ããã«ãæ§ã
ãªç²åºŠã»ãããã¯ã®å
å®¹ãæ°å
Œããªãæ®ããŠããŸãã GitHub Discussionsäžã«ããã¹ã¬ããäžèЧ ãã£ãŠãåœå課é¡ãšãªã£ãŠãããæç« ãæžãèŸããã¯GitHub Discussions à ADRã«ãã£ãŠçãéãã«å
æã§ããŸããã Repositoryã«ããããã¥ã¡ã³ãã®ç®¡çãæ¥œã«ãªã ADRãåãå
¥ããŠããªãã£ã以åãæ¥æ°ãçµã£ãŠããããã¥ã¡ã³ããŒã·ã§ã³ãããå Žåã¯äœãæžãã¹ããæãåºã/æžãã¹ãããšãé¢ä¿è
ã«ãã¢ãªã³ã°ããããšãå¿
èŠã§ããã Repositoryäžã«æ®ããŠãããããããªäœè£ã®æŽã£ãããã¥ã¡ã³ããäœæããã³ã¹ããé«ããªã£ãŠããŸããã ADRãšããŠããšãããããæ®ããŠãããæ
å ±ãããããšã§ããã®ãããªã³ã¹ããçºçããããšãäºé²ã§ããŸãã ãªããRepositoryã¯Discussionsãæ¡çšããåŸããæ±ºãŸããã£ããã®ããæ®ãå ŽãšããŠæŽ»çšãç¶ããŠããŸãã äºäŸããå€ããããŸããããDiscussionsã§èšèŒãããããšããããæ®ããããã®ãããæ±ºãŸããã£ããã®ããšããŠRepositoryã«æ®ããšããéçšã宿œããŠããŸãã ã¹ã¬ãããéå±€æ§é ã§ã¯ãªãã©ããªã³ã°ãã¿ã°ä»ãã§ç®¡çã§ãã ããã¥ã¡ã³ããèŠã€ããããããããã«ãããã¥ã¡ã³ãã«éå±€æ§é ãªã©ã®ã¡ã¿æ
å ±ãæãããããšã¯éèŠã§ãã 以åã®éçšã§ã¯ããã¥ã¡ã³ãããã£ã¬ã¯ããªã«æ ŒçŽãéå±€æ§é æãããŠããããããã管çã³ã¹ããããã£ãŠããŸããã(ããã¥ã¡ã³ãã®éå±€æ§é ã倿Žããããã«commitããå¿
èŠããã) GitHub Discussionsã§ç®¡çããå Žåãã«ã¹ã¿ã ã®ã©ãã«ãã¿ã°ã«ãã£ãŠåã¹ã¬ããã管çã»æ€çŽ¢ã§ãããããããã¥ã¡ã³ãã®ã¡ã¿æ
å ±ã®ç®¡çã³ã¹ããäœããªããŸããã ãã®ããã第äºã®èŸãã§ãããéå±€æ§é ãç¶æããèŸããã解決ããããšãã§ããŸããã äºå®å€ã®å¹æ: éšçœ²éã®ã³ãã¥ãã±ãŒã·ã§ã³ãã£ã³ãã«ãå¢ãã åœåã¯æå³ããŠããŸããã§ããããGitHub Discussionsãæ¡çšããããšã«ããæ©æµããããŸããã ãããžã§ã¯ãå
ã§ã®ADRãšããŠå©çšããŠããŸãããããããžã§ã¯ãå€ã®æ¹ã§ãåºãé²èЧå¯èœ&ã³ã¡ã³ãå¯èœã«ããŠãããŸãã ãã®ããããããžã§ã¯ãå€ã®æ¹ããã®ãã£ãŒãããã¯ãããã ãããããªæ©äŒãå¢ããããã¥ã¡ã³ãã®è³ªãåäžãããããšã«ç¹ãããŸããã ãŸãããã£ããããŒã«(Slackãªã©)ã§çºçããä»éšçœ²ããã®è³ªå察å¿ã®ãããšããGitHub Discussionã«è»¢èŒã»èç©ã»è»¢çšããããšã§ã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã®åæžã«ã圹ç«ã£ãŠããŸãã çŸåšã¯ããã¯ãšã³ãå·æ°ããŒã ãã¢ãã¬ãŒã¿ãŒãšãªãæ°ããã¯ãšã³ãåºç€(æ°BFF)ã®éçºã³ãã¥ããã£ãéå¶ããŠããŸããã ä»åŸã¯éçºè
ãå¢ãã瀟å
éçºè
ã³ãã¥ããã£ãšããŠéžæããããããšãæåŸ
ããŠããŸãã ã«ããŽãªäžèЧ. ãããžã§ã¯ãå€ã®æ¹ãèŠãããããã«ã«ããŽã©ã€ãº ããã㫠以äžãããã¯ãšã³ãå·æ°ããŒã ã§å®æœããŠããããã¥ã¡ã³ããŒã·ã§ã³ã§ãã å
æ¥Betaçããæ£åŒçãšãªã£ãã°ãããšããããšããããGitHub Discussionsã¯ç€Ÿå€/瀟å
ã©ã¡ãããã®èŠç¹ã§ããã®æ¡çšäºäŸã¯å€ãã¯ãªãã§ãã ããããã®å¹æã¯ç¢ºããªãã®ã§ãæ¬èšäºã§ç޹ä»ããããã¥ã¡ã³ããŒã·ã§ã³ãšããŠã®çšéã®ä»ã«ããèåãªOSSã³ãã¥ããã£ã§ãã³ãã¥ãã±ãŒã·ã§ã³ãã©ãŒã©ã ãšããŠå©çšãããŠããŸãã ããã¥ã¡ã³ããŒã·ã§ã³ã§æ©ãæ¹ããããã¯GitHub Discussionsã®å©ç¹ãããããªãããšãã£ãæ¹ã«æ¬èšäºãåèã«ãªãã°å¹žãã§ãã
ããã«ã¡ã¯ãLIFULL ã§ãã€ãã£ãã¢ããªã®ã¹ãã·ã£ãªã¹ããããŠããèå°ã§ãã ä»å㯠LIFULL HOME'S ã¢ããªã«ãããããã·ã¥éç¥ã®åœ¹å²ãã¢ãŒããã¯ãã£ã®å€é·ã«ã€ããŠã玹ä»ãããŠããã ããŸãã äžè¬çã«ã¹ããŒããã©ã³ã¢ããªã«ãšã£ãŠ ããã·ã¥éç¥ ãšããã®ã¯ãŠãŒã¶ãŒãšã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ããã«éèŠãªåœ¹å²ãæã£ãŠããŸãã SNS ãªã©ã§ã³ã¡ã³ããã¡ãã»ãŒãžãæ¥ãéã«ãªã¢ã«ã¿ã€ã ã«æ°ä»ãããã®éç¥ ã²ãŒã ããã³ã¬ã¢ããªãªã©ã§ãæéã«ãã£ãŠå埩ããã©ã€ããªã©ãå埩ããããšãç¥ãããéç¥ ãµãŒãã¹å
ã«ãããéèŠãªæ
å ±ã«æ°ä»ããŠãããããã®éç¥ EC ããªãŒã¯ã·ã§ã³ã¢ããªãªã©ã§æ°ã«ãªãååã®å€æ®µãäžãã£ãããé«å€ãã€ããå Žåã«ãç¥ããããéç¥ ãªã©æ§ã
ãªã·ãŒã³ãç®çã§äœ¿ãããŠããŸãã LIFULL HOME'S ã¢ããªã«ãããããã·ã¥éç¥ãšã¯ LIFULL HOME'S ã¢ããªã§ã¯ãã©ã®ãããªã·ãŒã³ãç®çã§äœ¿ã£ãŠããããšãããš äœãŸãæ¢ããããŠãããæ¡ä»¶ã¯ã»ãŒæ±ºãŸã£ãŠããç©ä»¶ãåºãŠããã®ãåŸ
ã£ãŠãããŠãŒã¶ãŒã«å¯ŸããŠãææ°ã®æ
å ±ãæäŸãã æ°ã«ãªã£ãŠããç©ä»¶ã«ã€ããŠæ²èŒãçµäºããŠããŸã£ãŠèŠããªããªããªãããã«æéããç¥ããããããšã§èŠéããªãããã«ãã ãµãŒãã¹ãããŠãŒã¶ãŒã«å¯ŸããŠéèŠãªå
容ãåç¥ãã ããè¡åãããéã«æ¬¡ã®ã¹ãããã«ã€ãªããŠãããããã®éç¥ äžå®æéã¢ããªãå©çšããŠããªããŠãŒã¶ãŒã«å¯ŸããŠãã¢ããªã«æ»ã£ãŠããŠãããããã®éç¥ ãªã©ããããŸãã ãã®äžã§ãä»å㯠1 ã®æ°çç©ä»¶éç¥ ãš 2 ã®æ²èŒæééç¥ ãšåŒã°ããããŠãŒã¶ãŒã«å¯ŸããŠæçãªæ
å ±ãæäŸãããããã®éç¥ãã玹ä»ããŸãã æ°çç©ä»¶éç¥ ç®ç ãŠãŒã¶ãŒãèªåã®æ¢ããŠããæ¡ä»¶ã§æ¯åã¢ããªãç«ã¡äžããŠæ¢ãæéãçã æ¢ããŠããæ¡ä»¶ã§æ°ããç©ä»¶ãåºãŠããã¿ã€ãã³ã°ã§ãŠãŒã¶ãŒã®ã¢ããªã®èµ·åãä¿ã Android ã¢ã㪠é
ä¿¡æé ïŒæãæŒãå€ã®ïŒã€ã®æéåž¯ã§æå®å¯èœ é
ä¿¡æ¡ä»¶ ïŒã¢ããªå
ã§ ä¿åããæ€çŽ¢æ¡ä»¶ ãããå Žåã¯ãã®äžããæ°çç©ä»¶ããä¿åããæ€çŽ¢æ¡ä»¶ããªããã° ååæ€çŽ¢æ¡ä»¶ ããæ°çç©ä»¶ãæ€çŽ¢ããŠéç¥ãã â» Android ã§ã¯ ä¿åããæ€çŽ¢æ¡ä»¶ ããã㯠ååæ€çŽ¢æ¡ä»¶ ã®ã©ã¡ããäžã€ã®æ¡ä»¶ã§éã仿§ iOS ã¢ã㪠é
ä¿¡æé ïŒå€ã®ã¿ é
ä¿¡æ¡ä»¶ ïŒ ä¿åããæ€çŽ¢æ¡ä»¶ ã§ãéç¥ãåãåããã«ãã§ãã¯ãå
¥ãããã®ã®æ°çç©ä»¶ãæ€çŽ¢ããŠéç¥ãã â» iOS ã§ã¯è€æ°ã® ä¿åããæ€çŽ¢æ¡ä»¶ ããŸãšããŠéã仿§ æ²èŒæééç¥ ç®ç ãŠãŒã¶ãŒããæ°ã«å
¥ãã«ç»é²ããŠããç©ä»¶ã®æ²èŒããã€ã®éã«ãåããŠããŸãååãã倱ã£ãŠããŸããšããæ©äŒæå€±ãæžãã ååãã®æ©äŒæå€±ãæžããã€ã€ããŠãŒã¶ãŒãã¢ããªãèµ·åãããã£ãããäœã é
ä¿¡æé ïŒå€æ¹ é
ä¿¡æ¡ä»¶ ïŒãæ°ã«å
¥ãã«ç»é²ããŠããç©ä»¶ã®æ²èŒæéã確èªããŠãæéåãæ°æ¥åã®ç©ä»¶ãããã°éç¥ãã â» Android ã®ã¿ ã¢ãŒããã¯ãã£ã®å€é· åæ éçºå·¥æ°ã®é¢ä¿ã§ãããã·ã¥éç¥ã§ã¯ãªãã¢ããªå
ã§å®è£
ãè¡ããããã¯ã°ã©ãŠã³ãã§å®æçã«åŠçãèµ°ãããŠããŒã«ã«éç¥ãè¡ãªã£ãŠããŸããã ãã ããæ¯åããã¯ã°ã©ãŠã³ãã§åŠçãã㊠API ãåŒã³åºããŠåãåã£ãçµæãéç¥ãããããå°å
¥ã³ã¹ãã¯äœãã£ãåé¢ãæ¹ä¿®ããéã®ã³ã¹ãã¯é«ããªã£ãŠãããŸããã å
·äœçã«ã¯ãA/B ãã¹ãã®å®æœã®ãã³ã«ãªãªãŒã¹ãå¿
èŠãšãªãããšããéç¥ãéãããã®æ¡ä»¶ãå
容ã倿Žãããã³ã«ãªãªãŒã¹ãå¿
èŠãšãªããšãã£ãããšãæããããŸãã ããã«ãAndroid ã®å Žå㯠OS ã®ã¢ããããŒãã«ãããããã¯ã°ã©ãŠã³ãåŠçã«å¯Ÿããå¶éãå³ãããªã£ãŠãããŸãããäœã察åŠãããªããš ããã¯ã°ã©ãŠã³ãã§ API ãåŒã³åºããŠããéã«ããã»ã¹ãçµäºããŠããŸãéç¥ãè¡ãããªã éç¥ã®å¯Ÿè±¡ãšãªããªãã£ãããéç¥ãããªãã£ãã®ãïŒéç¥ã®å¯Ÿè±¡ãšãªã£ãŠãããéç¥ãè¡ãããªãã£ãã®ãïŒã®å€å¥ãå°é£ æå®æå»ã«éç¥ãè¡ãããã®ã«ããŠãŒã¶ãŒãã¢ããªãç«ã¡äžããç¬éãªã©ã«çªç¶éç¥ãè¡ããã ãšããåé¡ãåºãŠããŸããã ãã®ãŸãŸã§ã¯ãŠãŒã¶ãŒäœéšãšããŠãããããªããããæ¹ä¿®ãéããŠè¡ããŸããããç¶ç¶çã«æ¹ä¿®ãããããšããã°ããã»ã©ãµãŒããŒãµã€ãã§ããžãã¯ãæã¡èªç±ã« A/B ãã¹ããã§ããç°å¢ãæ±ãã声ãããŒã å
ã§åŒ·ããªã£ãŠããŸããã ããã§ããã·ã¥éç¥ã«ç§»è¡ããããšãæ€èšããã®ã§ãããèŠä»¶ãšã㊠æ°çç©ä»¶éç¥ ïŒãŠãŒã¶ãŒæ¯ã®æ€çŽ¢æ¡ä»¶ã«åãããæ°çç©ä»¶ æ²èŒæééç¥ ïŒãŠãŒã¶ãŒæ¯ã®ãæ°ã«å
¥ãç©ä»¶ã®æ²èŒæé ãšãã£ããŠãŒã¶ãŒããšã«éãæ
å ±ãçšããŠéç¥ãè¡ãå¿
èŠããããŸããã æåã«æ€èšãã Firebase ã§ã¯ãŠãŒã¶ãŒã»ã°ã¡ã³ãåäœã§ã®éç¥ã¯ç°¡åã«å©çšããããšãã§ããŸããããŠãŒã¶ãŒæ¯ã«éãããŒã¿ãå
ã«éç¥ãéããšããããšãé£ããããããµãŒããŒåŽã§ãµãŒãããŒãã£ãŒã®ããã·ã¥éç¥ãéãå¿
èŠãåºãŠããŸããã ç§»è¡æ ããŒã«ã«éç¥ã«ããã課é¡ãªã©ã解決ããã«ããããããã·ã¥éç¥ãšããŠä»åŸã©ãããããšãå®çŸãããïŒãšããèŠä»¶å®çŸ©ããè¡ã£ãŠãæ°ãã«ä»æ§ãäœãããšã«ãªããŸããã æ§ã
ãªèŠä»¶ãå®çŸ©ããŠæœçãè¡ã£ãã®ã§ããããããããããã®ãšããŠã¯ãé
ä¿¡æéåž¯ïŒæã»æŒã»å€ïŒã®äžã§ããŠãŒã¶ãŒæ¯ã«éå°ããŠããããããã¿ã€ãã³ã°ã«åãããŠé
ä¿¡ããããšãããã®ããããŸãã æ°çç©ä»¶ åã³ æ²èŒæééç¥ ããããã§æã»æŒã»å€ïŒå€æ¹ïŒãšããé
ä¿¡æé垯ã®äžã§ãããŠãŒã¶ãŒã®ã©ã€ãã¹ã¿ã€ã«ã«åãããŠã¹ããŒããã©ã³ãã¿ãæéã«ã¯ã°ãã€ãããããããæã»æŒã»å€ïŒå€æ¹ïŒããšã«åºæºãšãªãé
ä¿¡æéãèšããŠããããããŠãŒã¶ãŒæ¯ã«æéããããããšã§éå°çã®åäžãçããšããããšãè¡ããŸããã ãããå®çŸããããã«ã¯ æé垯å¥ã®é
ä¿¡ãªã¹ããäœæãã é
ä¿¡æé垯æ¯ã«é
ä¿¡ãªã¹ããåŠçãã ãŠãŒã¶ãŒæ¯ã«ç°ãªãæ¡ä»¶ãå
ã«æ€çŽ¢ãè¡ããéç¥ãéã ãšããæé ãèžãå¿
èŠããããŸããã ãã®æã«åºæ¥ãéããµãŒããŒã¬ã¹ã§ããã€ä»åŸãç¶ç¶çã«æ¹ä¿®ãããããæ§æã§ãšèããCloud Functions ãããŒã¹ãšã㊠Cloud PubSub ãšçµã¿åãããæ§æã«ç§»è¡ããŸããã ã¢ãŒããã¯ã㣠æé垯å¥ã®é
ä¿¡ãªã¹ãã®äœæ æé垯å¥ã®é
ä¿¡åŠç ã¡ãªãã åŠçæ¯ã«ççµåãšãªã£ãŠããããããã¹ããæ¹ä¿®ãéåžžã«ãããã ä»åŸã®æ¹ä¿®ã§ã¢ãŒããã¯ãã£ãç§»è¡ããããšã«ãªã£ãŠãäžéšã®ã¿åãæ¿ããšããããšãå¯èœã«ãªããããã¡ã³ããã³ã¹æ§ãéåžžã«é«ã ãµãŒããŒã¬ã¹ã®ã¿ã§æ§æããŠãããããéç¥é
ä¿¡çšã®ãµãŒããŒãªã©ãçšæããå¿
èŠããªãéçšã®è² æ
ãäœã ãã¡ãªãã é
ä¿¡ãªã¹ãã®äœæãæé垯å¥ã®é
ä¿¡åŠçæ¯ã« Cloud Scheduler ãååšããŠããŸãããã管çã倧å€ã«ãªã ãŠãŒã¶ãŒæ°ãå¢å ããå ŽåãåŠçãè€éã«ãªã£ãå Žåã«ãCloud Functions ã®å®è¡æéã®å¶éã«åŒã£ãããæãããã Cloud Firestore ã® Read / Write ã®é »åºŠãé«ããåäœæéãããã®å¶éã«åŒã£ãããæãããã API server ã«å¯ŸããŠãCloud Functions ããã®ãªã¯ãšã¹ãå¶éããããã®ãé£ããããã倧éã®ãªã¯ãšã¹ããåæã«çºçããæãããã çŸåš ç§»è¡æã®ã¢ãŒããã¯ãã£ã§ãéçšã¯ã§ããŠããã®ã§ãããããã·ã¥éç¥ããã䜿ãããããšæ¹ä¿®ãç¹°ãè¿ããŠãããã¡ã«æ³å®ãããæ©ãæ®µéã§ãç§»è¡æã®ã¢ãŒããã¯ãã£ã®ãã¡ãªãããšããŠãããŠããããŠãŒã¶ãŒæ°ãå¢å ããå ŽåãåŠçãè€éã«ãªã£ãå Žåã«ãCloud Functions ã®å®è¡æéã®å¶éã«åŒã£ãããæããããããšããæžå¿µãçŸå®ã®åé¡ãšãªãå§ããŠããŸããã å
ã
ãCloud Functions ã®å®è¡æéã®å¶éãåé¿ããããã«ãCloud Functions -> Cloud Pub/Sub ã§é
信察象ãŠãŒã¶ãŒã®æœåºã段éçã«è¡ãªã£ãŠããŸããããäžåºŠã«åŠçã§ããéã®åé¡ãåŠçã®åæ°ãå¢ããŠããŠããŸãéäžã§å€±æãããšãã£ãããšãæžå¿µãšããŠãããŸããã ãŸãã該åœéšåã®ããžãã¯ã¯ç¹ã«ã¹ã±ãŒã«ããå¿
èŠããªã Cloud Functions ã§ãªããŠããããããããå®è¡æéã®å¶éãé·ã Cloud Run ã§ã®æœåºã«ç§»è¡ããããšã«ãªããŸããã ã¢ãŒããã¯ã㣠Cloud Run + Cloud Tasks + Cloud Functions åŠçã®æµããšããŠã¯ Cloud Scheduler-> Cloud Run ã§é
ä¿¡æé垯æ¯ã«ãŠãŒã¶ãŒæœåºãè¡ããé
ä¿¡æé垯ã®äžã§ããã«ãŠãŒã¶ãŒããšã«æéã調æŽã㊠Cloud Tasks ã«ã¿ã¹ã¯ã远å ãã Cloud Tasks ã§ã¯èšå®ãããæå»ã«ãªããšã¿ã¹ã¯ãå®è¡ãããCloud FunctionsãåŒã³åºã Cloud Functions 㯠Cloud Firestore ã«ã¢ã¯ã»ã¹ãè¡ããéç¥ã«å¿
èŠãšãªãããŒã¿ã®ååŸãå å·¥ãè¡ããFCM ã«éç¥ãéã ãšããæµãã«ãªããŸãã ã¡ãªãã Cloud Functions ãã Cloud Run ã«ããããšã§ãå®è¡æéã®å¶éãç·©åããã Cloud Scheduler ãã Cloud Tasks ã«ããããšã§ã管çã³ã¹ããæžå° ãšã©ãŒçºçæã®åéåŠçãªã©ãå
šãŠ Cloud Tasks ã«ä»»ããããããã«ãªã£ã API server ãžã®ã¢ã¯ã»ã¹ã®ã¹ããããªã³ã°ã Cloud Tasks ã§ç°¡åã«èª¿æŽã§ããããã«ãªã£ã ãã¡ãªãã Cloud Functions 㯠TypescriptãCloud Run㯠golangãšå¥ã®èšèªã§äœã£ãŠããŸã£ããããéçºã«åŠç¿ãå¿
èŠã«ãªã£ãïŒããŒã ã®ãšã³ãžãã¢ã«åŠç¿æ©äŒãæäŸãããšããç®çããã£ãã®ã§è² åµã§ã¯ãªãïŒ åŠçã®æµãããæ§æãç§»è¡æã®ãã®ãããã ãã¶ã¹ãããªãããã®ãšãªããŸããã ããã«æžå¿µãããŠããåŠçéã®å¢å ã«ã€ããŠãåé¡ãªãåŠçãã§ããããã©ãŒãã³ã¹ãåºããŠãããããåœåã¯ãã®æ§æã§ãŠãŒã¶ãŒæ¯ã«ããŒãœãã©ã€ãºãããéç¥ãé
ä¿¡ããŠããããšã«ãªããšæããŸãã æåŸã« ä»å㯠LIFULL HOME'S ã¢ããªãæ¯ããããã·ã¥éç¥ã«ã€ããŠãå®éã«è¡ã£ãŠããããã·ã¥éç¥ã®äŸãšã¢ãŒããã¯ãã£ã®å€é·ãã玹ä»ãããŠããã ããŸããã ã玹ä»ãããã®ã¯ããŒã«ã«éç¥ã§ãå®çŸå¯èœã§ã¯ãããŸãããããã·ã¥éç¥ã«ããããšã§ãããè¯ãäœéšãç¶ç¶çã«æäŸã§ããããã«ããããšãã§ããŸãããLIFULL HOME'S ã¢ããªã§ã¯ãµãŒãã¹ã®æé·ã«åãããŠæœçãå®è¡ã§ããããã«ããããã«ã¢ãŒããã¯ãã£ã®å·æ°ãç¶ç¶çã«è¡ã£ãŠããŸãã ãŸãã玹ä»ããéç¥ä»¥å€ã«ãã¢ããªã§ã¯æ§ã
ãªéç¥ãè¡ãªã£ãŠãããFirebase ãçšãããŠãŒã¶ãŒã»ã°ã¡ã³ãã«å¯Ÿããéç¥ãããŠãŒã¶ãŒã®è¡åãããªã¬ãŒãšãããªã¢ã«ã¿ã€ã ãªéç¥ãªã©ãè¡ãªã£ãŠãããŸãã ããã·ã¥éç¥ã¯äŸ¿å©ãªåé¢ãéãéããŠããŸããšãŠãŒã¶ãŒã«ãšã£ãŠæçãªãã®ã§ãªããªã£ãŠããŸãå Žåããããããä»åŸãã«ã¹ã¿ãã€ãºãç¶ããŠãããŠãŒã¶ãŒã«ãšã£ãŠæé©ãªã¿ã€ãã³ã°ã§æè¯ã®æ
å ±ãæäŸã§ããããã«ããŠãããããšæããŸãã LIFULLã§ã¯ã¡ã³ããŒãåéããŠãããŸãïŒ ã«ãžã¥ã¢ã«é¢è«ããããŸãã®ã§ãèå³ããæ¹ã¯æ¯éãåå ãã ããïŒ hrmos.co
ããã«ã¡ã¯ããããã¯ããšã³ãžãã¢ãªã³ã°éšã®å è€ã§ãã çããããªã¢ãŒãã§ã®ããŒã ãã«ãã£ã³ã°ã¯ã©ã®ããã«è¡ã£ãŠããŸããïŒ åŒç€Ÿã§ã¯æ¬æ Œçã«ãªã¢ãŒãã¯ãŒã¯ãå°å
¥ãäžå¹ŽãçµéãããšãããšãªããŸããããªã¢ãŒãç°å¢äžã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãçµç¹åœ¢æã®èª²é¡ã«å¯ŸãããŸããŸãªè§£æ±ºçãæš¡çŽ¢ãåãçµãã§ããŠããŸãã ãã®ãããªäžãä»åã¯ç«¶æããã°ã©ãã³ã°ãçšããããŒã ãã«ãã£ã³ã°ãè¡ã£ãã®ã§ç޹ä»ããããšæããŸãã ã©ã®ããã«è¡ã£ãã ä»åã®äž»ãªç®çã¯ããŒã ã®çµæåã®åŒ·åã§ãã éšçœ²ã®ã¡ã³ããŒãè€æ°ã®ããŒã ã«åããäžã€ã®åé¡ãããŒã ã¡ã³ããŒã§ååããŠè§£çãåæãç«¶ãããŒã å¯ŸææŠã®æ¹åŒã«ãŠå®æœããŸããã 顿ãšããŠãAtCoderãã®éå»åããã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠãZoomããå©çšããŸããã atcoder.jp åºæ¬ã«ãŒã« 3人1çµã®ããŒã å¯ŸææŠ 40åã®éã«ç²åŸããåŸç¹ã«ããåæãæ±ºå® åŸç¹ã¯åé¡ã®é£æåºŠã«ããèšå®ïŒäºåã«éå¶ãåé¡ãè€æ°ããã¯ã¢ããïŒ åé¡ã«æ£è§£ããããšã§èšå®ãããåŸç¹ãç²åŸ èšèªã®éžæã¯èªç± ããŒã ã®äžã§å®éã«ã³ãŒããæžãã®ã¯äžäººã ãïŒã¢ãããæ¹åŒïŒ ã³ãŒããæžã人ãç»é¢å
±æãè¡ã éäžã§åœ¹å²ã®å€æŽã¯OK ãã£ãŠã¿ãŠã©ãã ã£ãã ãã£ãŠã¿ãŠè¯ãã£ãç¹ãã€ãã€ãã ã£ãç¹ã»æ¹åç¹ã¯ä»¥äžã®éãã§ãã è¯ãã£ãç¹ æ¥åã§æ¥ããæ©äŒãå°ãªãã¡ã³ããŒãšãã³ãã¥ãã±ãŒã·ã§ã³ãåããããã£ã è€æ°äººã§ååããŠã³ãŒãã£ã³ã°ããæ©äŒã匷å¶çã«èšããããããšã§ã¢ããããžã®ããŒãã«ãäžãã£ãããã«æãããã æ¥åã§ãã¢ãããã»ãã¢ãããç©æ¥µçã«å°å
¥ããããšã§ç¥èå
±æã®å¹çåãå³ããã åçŽã«æ¥œããã£ãïŒ æ¥åãšã¯éã£ãé ã®äœ¿ãæ¹ãã§ããŠåºæ¿çã ã£ã ã€ãã€ãã ã£ãç¹ã»æ¹åç¹ 40åã§ã¯æéãçãã£ã ããŒã å
ã«äžäººå®åè
ããããšåãåã£ãŠããŸãååãé£ãã æšæºå
¥åã®ååŸæ¹æ³ãªã©AtCoderç¬èªã®å©ç𿹿³ã®ææ¡ã«æããã£ã æ¹åããŠåãã©ã€ïŒ 宿œåŸã®ã¢ã³ã±ãŒãçµæãããããŒã å
ã«ãŠçµéšå€ãç¥èéã«å·®ããããšååäœå¶ãç¯ãããšãé£ãããšåãããŸããã ããã§ãããŒã å
ã§ã®ç¥èã®åããæžããããªãã¹ãåã¡ã³ããŒã掻èºã§ããæ©äŒãèšããããã«æ°ãã«ä»¥äžã®ã«ãŒã«ã远å ãåãã©ã€ããŸããã åããŒã 3èšèªä»¥äžå©çšããããš åããŒã ã©ã³ãã ã«çžããé©çšïŒã¯ã³ã©ã€ããŒã«ãŠè§£çãifã»forçŠæ¢ãªã©ïŒ ããã«ããäŒè©±ãå¢ããŠè·é¢ãçž®ãŸã£ããšããæèŠããããããããŒã ãã«ãã£ã³ã°ãšããŠã®å¹æãé«ãŸã£ãããã«æããŸãã ãŸãšã ä»åã¯ããŒã ã®çµæåã匷ãããã宿œããããŒã ãã«ãã£ã³ã°ã«ã€ããŠç޹ä»ããããŠããã ããŸããã ãªã¢ãŒãã¯ãŒã¯ã®æ®åã«ããæ¥åå¹çåãªã©ã®ã¡ãªãããçãŸããäžæ¹ã§ãããŸã ã³ãã¥ãã±ãŒã·ã§ã³ãçµç¹åœ¢æã®èª²é¡ãæ±ããçµç¹ãå€ãããããšæããŸãã ä»å玹ä»ããåãçµã¿ã課é¡è§£æ±ºã®äžã€ã®ææ®µãšããŠåèã«ãªãã°å¹žãã§ãã
ããã«ã¡ã¯ãQAã°ã«ãŒãæå±ã®QAãšã³ãžãã¢æŸè°·ïŒãŸã€ãïŒã§ãã LIFULLã§ã¯æ°åãšã³ãžãã¢ã«27æ¥éã®ç ä¿®ãè¡ãªã£ãŠããŸãã ãã®ç ä¿®ã®äžã§ã äžžäžæ¥ã䜿ã£ããã¹ãã¯ãŒã¯ã·ã§ãã ãè¡ãããŠããŸãã ä»åã¯ãã®ãã¹ãã¯ãŒã¯ã·ã§ããã«ã€ããŠã玹ä»ããŸãã ããŒã¯ãŒãã¯ããã¹ããèããããã ã§ãã    LIFULLã®éçºäœå¶ãšQAã°ã«ãŒãã«ã€ã㊠ãŸãã¯èªèãåãããããã«LIFULLã®éçºäœå¶ãšQAã°ã«ãŒãã®æ¥åã«ã€ããŠèª¬æããŸãã LIFULLã§ã¯æã«200ä»¶ã»ã©ã®æœçããªãªãŒã¹ãããŠããŸãã ãããæœçã¯ãäž»ã«äŒç»è
ãéçºè
ããã¶ã€ããŒã®äžè·çš®ã®ã¡ã³ããŒã§æ§æãããŠããŸãã ããã§ãäŒããããããšã¯ã ãã¹ãå°éã®ã¡ã³ããŒã¯åºæ¬çã«ã¯ããªã ãšããããšã§ãã ãªãªãŒã¹ããæœçã«ã€ããŠã¯ã æœçã®ã¡ã³ããŒã責任ãæã£ãŠãã¹ãèšç»ãå®è¡ãŸã§ãè¡ã£ãŠããŸãã æ°å¹Žåã¯ç¬¬äžè
æ€èšŒãäž»æµã ã£ãããçãã圢ã§ããããæšä»ã®ã¹ã¯ã©ã ã®åœ¢ã§ã¯ãããã圢ããšèããŸãã ããã§ãã¹ã=QAãšæãããŠããæ¹ã¯ãQAã°ã«ãŒããäœãè¡ãªã£ãŠãããçåã«æããããããããŸããã QAã°ã«ãŒãã¯ç€Ÿå
暪æçµç¹ã§ãããåæã®å質ä¿èšŒæŽ»åã®ãµããŒããè¡ãªã£ãŠããŸãã äŸãã°ãæœçã®ãã¹ãèšç»ã®æäŒããå質ä¿èšŒã«ã€ããŠã®çžè«ãªã©ã§ãã 以äžã® QMãã¡ã³ãã«ãšããã¢ãã«ã®ãQAã³ãŒãããQAã³ã³ãµã«ã¿ã³ãã ã«ããããŸãã ïŒãã¹ã=QAã®èªèã®æ¹ã¯ããã®ã¢ãã«ã®ããã§ãŒãºã²ãŒãQAãéšåã®ã¿ã«ãã©ãŒã«ã¹ããŠãããã§ãïŒ ïŒåºå
ž : å質ãå éãããããã«ããã¹ã¿ãŒãå¢ããåããèããã¹ãQMãã¡ã³ãã«ã®è©±(3Dç) Yasuharu Nishi)  ãã¹ãã¯ãŒã¯ã·ã§ããã«ã€ã㊠ãã¹ãã®èãæ¹ãäŒããŠãã ãšã³ãžãã¢å¿æã®æ¹ã
ã¯ãåŠæ ¡ããã©ã€ããŒãã§éçºã«ã€ããŠã¯æ·±ãåŠãã§ããŠããŸãã ã§ããããã¹ãã«ã€ããŠäœç³»ç«ãŠãŠåŠãã§ããæ¹ã¯å€ããªãã®ãçŸç¶ã§ãã çµæã å®è£
ãããã®ãå®è£
ããéãåãããã§ãã¯ããããšã®ã¿ããã¹ãã®å
šãŠã§ãããšããèªèã®æ¹ãããŸãã Unit Testã®è²¬ä»»ç¯å²ã§ã¯ãã®ããã«èšãããããããŸããããäŒæ¥ãæäŸããã·ã¹ãã å
šäœã«å¯Ÿãããã¹ããšããŠã¯ããã§ã¯äžååã§ãã  ãã¹ãã¯ãŒã¯ã·ã§ããã§ã¯ å
šäœãéããŠã®ãã¹ããã©ã®ããã«èããŠããã°ããããšãããèãæ¹ããäžå¿ã«èª¬æ ããŠããŸãã  æããå
容ã¯JSTQBã«ïŒåºæ¬çã«ã¯ïŒæºæ æããå
容ã¯åºæ¬çã«ã¯ JSTQB (åœéçãªãã¹ãæè¡è
èªå®è³æ ŒISTQBã®æ¥æ¬ç)ã«æºæ ããŠããŸãã ããããããããããã«ãã®ãŸãŸã®å®çŸ©ãäŒããã®ã§ã¯ãªããäŸãªã©ãçšããŠããããããèšèã«åã¿ç ããŠèª¬æãè¡ããŸãã  ãŸãJSTQBã®å
šé
ç®ãæããŠããããã§ããããŸããã倧äºãªãšãããããã¯ã¢ããããŠäŒããŠããŸãã ïŒåèïŒ JSTQB Foundation Level version2018V3.1.J03 ) JSTQBã«æ²¿ã£ãŠãäŒãããŠããçç±ã¯ä»¥äžã§ãã æ£ãããã¹ãã®ç¥è äžçäžã®ã©ãã§ãéçšãããã¹ãã®èãæ¹ ãããã身ã«ã€ããŠããæ¥åã«å
¥ã£ãŠããã ããããšèããŠããŸãã ããã«ãããJSTQBã§ã¯ãã®ããã«èšãããŠããããšããLIFULLã§ã¯ããå®è·µãããŠããã®ãããšãããããããªãããã§ãã  ãã¹ãããã»ã¹ãäŒããŠãã ãã¹ããããŸãç¥ããªãæ¹ã®å Žåããã¹ãå®è¡ããããšã ãããã¹ãã ãšæã£ãŠããããšããããŸãã ãŸãæ°åç ä¿®ã®å Žåãæåã«ãã¹ãå®è¡ããã£ãŠãããã®ã ããå®è¡å·¥çšã®ããæ¹ã现ããæãããããšããäŒç€ŸããããŸãã LIFULLã®ãšã³ãžãã¢ãšããŠã¯ãäžããããããšãäžããããéããããã ãã§ã¯ãªãããã¹ããèãããããšã³ãžãã¢ã«ãªã£ãŠæ¬²ãã ã®ã§ãã ãã£ãŠãã¹ãå®è¡ã®ããæ¹ã ãã§ã¯ãªãããäœãã©ããã¹ãããã®ããèããããšããããšãäŒããããããã¹ãåæãããã¹ãå®è£
ã®æµããã€ãŸããã¹ãããã»ã¹ã䜿ã£ãŠãäŒãããŠããŸãã ãã¹ãããã»ã¹ãç¥ãããšã§ããã¹ãã«ã€ããŠäœãã©ãèããŠããã°ãããã®éçãããã ããã§ãã (ãã¹ãããã»ã¹ã«ã€ããŠã¯ JSTQB Foundation Level version2018V3.1.J03 P19ãåç
§) Â åé
ç®ããšã«ïŒã»ãŒïŒã¯ãŒã¯ããã æããŠããé
ç®ã¯å€å²ã«æž¡ããŸããã ããããã®é
ç®ã§ã¯ãŒã¯ããããŸãã ããã§å®éã«èããŠã¿ãŠæãåãããŠããããŸãã å人ã¯ãŒã¯ãè¡ã£ãŠããã£ãåŸã«ãå°äººæ°ã°ã«ãŒãã§ã®ãã£ã¹ã«ãã·ã§ã³ãè¡ã£ãŠããããŸãã ããã¯ã å人ã§ãã£ãããšèããåŸã«åšãã®ã¡ã³ããŒãšè©±ãåãããšã§ãä»è
ã®æèŠããæ°ããæ°ã¥ããåŸããçè§£ãæ·±ãããããªããã ã§ãã  ã¯ãŒã¯ã®äžäŸãèšèŒããŸãã 以äžã¯ããã€ã€ãŒãºã®äžè§åœ¢ããšåŒã°ããåé¡ã§ãã ïŒåºå
žïŒãœãããŠã§ã¢ã»ãã¹ãã®ææ³ç¬¬ïŒç Glenford J. MyersïŒ ãã¹ãã¯ãŒã¯ã·ã§ããã§ããã¹ãã®èãæ¹ãäŒããåã«è¡ã£ãŠããã¯ãŒã¯ã§ãã   ãã®ã¯ãŒã¯ã¯äžèŠãããšç°¡åããã§ãã ã§ãã ããã¹ãã¯ä»æ§éãåãããšã確èªããã°OKããšèããæ¹ãã²ã£ãããåé¡ ã§ãã ãŸãã°ã«ãŒããã£ã¹ã«ãã·ã§ã³ã§ã¯ãå
¥åå€ä»¥å€ã«ãåäœç°å¢ã®èгç¹ãæãããŸããã ãããã£ã話ãèžãŸãã ãã¹ãã§èããã¹ãããšã¯æå€ãšå€ãããšããäŒãããŠããŸãã  æçµã¯ãŒã¯ ãã¹ãã¯ãŒã¯ã·ã§ããã®æåŸã«ã¯ ããããïŒæéã»ã©ã®æ¬æ Œçãªãã¹ãã®å®ç¿ ããããŸãã QAã°ã«ãŒããäœã£ããã¹ãçšãããã¯ãã«å¯ŸããŠãå°äººæ°ã®ã°ã«ãŒãã§å®éã«ä»¥äžã®ããšãè¡ãªã£ãŠããããŸãã 仿§ææ¡ããã¹ãåæ ãã¹ãèšèš ãã¹ãå®è£
ãã¹ãå®è¡ / äžå
·å起祚 ã°ã«ãŒãçºè¡š ãããã¯åŠãã ããšãç·åå¡ããªããã°ãããŸããã ãšã¯ããããã ããã£ãŠãã ããããšãã£ãŠãçããäžæ
£ãã§ãã®ã§åããŸããã ããã§åããã»ã¹ãã©ãèããŠããã°ãããã®ãã³ãã¯åºããŠããŸãã ãã 倧ãŸããªãã³ããªã®ã§ã ã°ã«ãŒãå
ã§èãã話ãåããååããªããã§ãªããã°æ±ºããããæéã§ã®é²è¡ã¯é£ãã ããã«ãªã£ãŠããŸãã ã°ã«ãŒãçºè¡šã§ã¯ä»¥äžã®å
容ã§çºè¡šããŠããã£ãŠããŸãã äœãéèŠãšèããã ãªãéèŠãšèããã ã©ããã¹ããããã®ã çºèŠãããã° è¯ãã£ãç¹ æªãã£ãç¹ æåŸã«ãæçµã¯ãŒã¯ã®ç§ã®ææãèšèŒããŠçµãããŸãã ïŒæéãšããéãããæéã§ããããäœæããããã¹ãã±ãŒã¹ã§ã¯éèŠãªãã€ã³ãã®ç¢ºèªã¯æŒãããããŠããã仿§ããªãã£ããã¹ãã ãã§ã¯èŠã€ããããªãåé¡ãèŠã€ãããããã®ãšãªã£ãŠããŸããã ãŸããâ¯â¯ã確èªãããããããã®ããã«ç¢ºèªããããšãã£ããã¹ãã®æå³ã第äžè
ã«ãäŒãããã¹ãã±ãŒã¹ã§ãã ãããã£ããã¹ãã±ãŒã¹ãæžããŠããŸãã®ã§ãçºè¡šã§ãããããã£ãçç±ã§ãããéèŠãªã®ã§ããã®ããã«ãã¹ããèããŠãã£ãããšèªåãã¡ã®èããšå®æœãããã¹ãã«ã€ããŠèª¬æãã§ããŠããŸããã ãã¡ããå
šäœçã«ã¯èåããªãšãããå€ãã§ãããæåã®ãå®è£
ãããã®ãå®è£
ããéãåãã°ããã®ã§ã¯ãªãããã®ç¶æ
ããããã¹ããèããããããã«ãªã£ãŠããããšãæãåãããšãã§ããŸããã  ãŸãšã äœããã¹ãããã°ããã®ããããããã©ã®ããã«ãã¹ããããã®ãã ããããèããããªããã°ãæèãæŸæ£ã仿§ããªããã ãã®ãã¹ã宿œã«ãªããæãæŒããå€ãã£ããéå¹çãªãã¹ãã«ãªã£ãŠããŸãããšã§ãããã ããã«ããäŒæ¥ãšããŠä¿¡é Œã倱ã£ãŠããŸããããªå€§åé¡ãçºçãããŠããŸããããããŸããã ããã¹ãã¯ä»æ§éãåããã ãã確èªããã°ããããšããèããããäœãã©ããã¹ãããŠããã°ãããèããããããã«ãªãããã®ãã¹ãã¯ãŒã¯ã·ã§ããã®è©±ã§ããã LIFULLã§ã¯ãäœãã©ãããã°ãããèªãèãããããšã³ãžãã¢ãè²æããŠããããã®ã§ãã ãã®ããã°ã®è©±ã¯LIFULLäž»å¬ã®Ltech#19ã§ãã話ããããŠããã ããŸããã ãèå³ãããæ¹ã¯ã¹ã©ã€ããã芧ãã ããã  LIFULLã§ã¯æ°åãšã³ãžãã¢ã« äžžäžæ¥ã®ãã¹ãç ä¿®ãè¡ãªã£ãŠãã from LIFULL Co., Ltd. www.slideshare.net  æåŸã«æããŠããé
ç®ãåæããŸãããåèã«ãªããŸããã幞ãã§ãã ãªããã¹ããããã®ã ãã€ã€ãŒãºã®äžè§åœ¢åé¡ ãã¹ãããã»ã¹ ãã¹ãã¬ãã« / ãã¹ãã¿ã€ã ã¬ãã¥ãŒ ã³ãŒãã¬ãã¥ãŒ ãã¹ãææ³ ãã¯ã€ãããã¯ã¹ãã¹ã C0ã«ãã¬ããž C1ã«ãã¬ããž ãã©ãã¯ããã¯ã¹ãã¹ã åå€åå² å¢çå€åæ ãã·ãžã§ã³ããŒãã« ãªãŒã«ã㢠ãªã¹ã¯ ãã°ç®¡ç ãã¹ãã±ãŒã¹ã®æžãæ¹ ãã¹ãå®ç¿
ããã«ã¡ã¯ïŒLtechéå¶ããŒã ã®åŒæã§ããä»åã¯ã2021幎8æ19æ¥(æš)ã«éå¬ãããQA Talk Night~LIFULL HOME'Sãæ¯ããå質ä¿èšŒã®åãçµã¿~ãã«ã€ããŠã¬ããŒãããŸãã lifull.connpass.com Ltechãšã¯ Ltech(ãšã«ããã¯)ãšã¯ãLIFULLããéããããæè¡æ¬²ãFULLã«ããã€ãã³ãã§ããç¹å®ã®æè¡ã«åãããæ§ã
ãªæè¡ã®è©±ãå±éããŠããäºå®ã§ãã å質ä¿èšŒã®åãçµã¿ Ltech#19ã®ããŒãã¯ãLIFULLã§ã®å質ä¿èšŒã®åãçµã¿ã«ã€ããŠã§ããLIFULLå
ã§å質ä¿èšŒãæ
åœãããšã³ãžãã¢ã«ãSaPIDã®å°å
¥ã«ã€ããŠãæ°åãšã³ãžãã¢ã®ãã¹ãç ä¿®ã«ã€ããŠãèªã£ãŠããã ããŸããïŒ SaPID ãå°å
¥ãããŸã§ãšãããã æåã®çºè¡šã¯ãœãããŠã§ã¢ããã»ã¹æ¹åææ³ãSaPIDãã®å°å
¥ãŸã§ã®éæŽãšå°å
¥ããŠããã®å·¥å€«ã«ã€ããŠã®ã話ã§ãã SaPID ãå°å
¥ãããŸã§ãšãããã from LIFULL Co., Ltd. www.slideshare.net èªããŒã ãžSaPIDãå°å
¥ããã«ããã£ãŠã®èæ¯ã課é¡ã®æŽãåºãããå®éã®å°å
¥ãå°å
¥ããçµæããããŠãããªã課é¡ãŸã§æç³»åã«æ²¿ã£ãŠè©±ããŠé ããŸããã å°å
¥ããã¡ãªãããšããŠãåé¡åæã®çãã€ãããšãããŒã ã®èª²é¡ã«å¯Ÿããèªèå
±æããããããªã£ãçãæããããŠãããå人ã ãã§ã¯ãªãããŒã ãšããŠãæé·ã§ããè¯ãææ³ã ãšæããŸããã çºè¡šãèããŠç§èªèº«ãSaPIDã«ãšãŠãèå³ãåºãŠããã®ã§ãæ¬ã賌å
¥ããŠèªããŒã ãžæ®åããŠã¿ããããšæã£ãŠããŸãã LIFULLã§ã¯æ°åãšã³ãžãã¢ã«äžžäžæ¥ã®ãã¹ãç ä¿®ãè¡ãªã£ãŠãã ç¶ããŠã®çºè¡šã¯LIFULLã§ã¯æ°åãšã³ãžãã¢ã«ãã¹ãã®åºç€ãšãªãèãæ¹ãJSTQBãšãããã¹ãæè¡è
ã®è©Šéšã«æ²¿ã£ãå
容ã§åº§åŠãããã³QAã°ã«ãŒããéçºããã·ã¹ãã ãçšããŠã®å®ç¿ã«ããç ä¿®ãè¡ãªã£ãŠããããã®ç ä¿®ã«ã€ããŠã®ã話ã§ãã LIFULLã§ã¯æ°åãšã³ãžãã¢ã« äžžäžæ¥ã®ãã¹ãç ä¿®ãè¡ãªã£ãŠãã from LIFULL Co., Ltd. www.slideshare.net åŒç€Ÿã§ã¯ãã¹ãã®åºç€ãçè§£ããŠãããããã«ãæ°åãšã³ãžãã¢åãã®ç ä¿®ãšããŠãã¹ãã¯ãŒã¯ã·ã§ãããäžžäžæ¥äœ¿ã£ãŠè¡ã£ãŠããŸãã å
容ãšããŠã¯JSTQBïŒåœéçãªãã¹ãæè¡è
ã®èªå®è³æ ŒISTQBã®æ¥æ¬çïŒã«æºæ ãã座åŠã座åŠã§åŸãç¥èãããšã«ã¯ãŒã¯ãããã€ãè¡ããŸãã æçµã¯ãŒã¯ãšããŠã¯å®éã®ãã¹ãçšã®ãããã¯ãã«å¯ŸããŠãã¹ãåæããã¹ãèšèšããã¹ãå®è£
ããã¹ã宿œãŸã§ãè¡ããŸãã ããã¹ããå®è¡ããããšãã ãããã¹ãã§ã¯ãªãããäœãã©ããã¹ãããã®ãããŸã§èããããããã«ãªãããšãç®æããŠãããšã®ããšã§ãã ç ä¿®åŸã®ã¢ã³ã±ãŒãã§ããã®éšåããã¡ããšäŒãã£ãææ³ãåŸãããŠãããæ¥åã§ãåŸããããã¹ãæè¡ãååã«æŽ»ãããŠé ããããšæããŸããã ç§ãæ°åã®æã«åãããã£ããªãšæããŸããã ãŸãšã ä»åã¯LIFULLã®å質ä¿èšŒã®åãçµã¿ã«ã€ããŠãQAããŒã ã®ãäºäººã«è©±ããŠé ããŸããã çºè¡šããå
容以å€ã«ãQAããŒã ã¯LIFULLå
šäœã®å質åäžã®ããã®åãçµã¿ãæ¥ã
è¡ã£ãŠãããå
šç€Ÿçã«å質ã®èãæ¹ãæ ¹ä»ãããLIFULLãšãããã©ã³ãã§å質ãä¿èšŒãããŠãããšäžéã«èªç¥ãããããšãç®æããŠæ¥ã
æ¥åã«ããã£ãŠããŸãã æåŸã« Ltechã§ã¯ãLIFULLãšã³ãžãã¢ãäžå¿ãšãªã£ãŠçæ§ã®æè¡æ¬²ãæºããããå®äŸã亀ããå匷äŒãéå¬ããŠããŸããä»åŸã Ltech ãç©æ¥µçã«éå¬ããŠãããŸãã®ã§ããã²æ°ã«ãªã£ãæ¹ã¯ãconnpass ã§ LIFULL ã®ã¡ã³ããŒç»é²ããããããé¡ãããŸãïŒ lifull.connpass.com
ããã«ã¡ã¯ããããã¯ããšã³ãžãã¢ãªã³ã°éšã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒããã£ãŠããéæŸ€ã§ããçŸåšLIFULLã®ãããã¯ããšã³ãžãã¢ãªã³ã°éšã§ã¯å人ã®ã¹ãã«ãé«ããããšãç®æšã®äžã€ãšããŠåãçµãã§ããŸãã ãã®èšäºãèªãã§ããçããããæ¿ç¥ã®ãšããæ¥ã
æè¡ã¯é²æ©ããŠããã远ãã€ããŠããã®ã倧å€ã§ããåœããåã®ããšãããããŸããããå人ã®ãã£ãªã¢ã®ããã«ããäŒæ¥éã®æ¿ããç«¶äºã«è² ããªãããã«ãããŸãäŒæ¥ã®ç念ãå®çŸããããã«ããšã³ãžãã¢ã«ã¯é«ãæè¡åãèŠæ±ãããŸãã ãã¡ããèªåã§å匷ããŠãæ°ããä»äºã«ãææŠããŠãåæã«æé·ããŠãããšã³ãžãã¢ãããŸãããå
šå¡ãå
šå¡ããããããã§ã¯ãªããšæããŸãã åè·ã§ãããªããªãã¹ãã«ã¢ããã§ããªãã¡ã³ããŒãã©ããã£ãŠæé·ããããç§èªèº«æãæ©ãã çµéšããããŸããäŸãã°ãã¹ãã«ã¢ããç®æšãæ²ããŠãè¡åããªããå¿ãããŠæéãåããªããæ°ãåããªããäœãå¬ããã®ãåãããªãããã€ãŠã¯èªå·±ç éœããŠããããããªããªã£ãŠããŸã£ãããªã©ã ãããã£ãããšã¯çããã®åšãã§ãããããããšã§ã¯ãªãã§ããããã ç§ãæå±ãããããã¯ããšã³ãžãã¢ãªã³ã°éš5ãŠãããã§ããèªå·±ç éœã«ã€ããŠããããåãçµãã§ããŸããå€å°ããŸããã£ããšããããããããå°ãã玹ä»ã§ããã°ãšæããŸãã ãã£ãããšãšçµæã®ãµããªãŒ ãŸããã©ããªããšããã£ãã®ããšãã®çµæã©ããªã£ãã®ããç°¡åã«ã玹ä»ããŸãã ãã£ãããš ãªãã§èªå·±ç éœã倧äºãªã®ããã£ã¹ã«ãã·ã§ã³ èªåãè¡ã£ãInput/Outputã®ç°¡åãªãã°ãäœã slackã§æžç±ãå匷äŒã®æ
å ±å
±æãã£ã³ãã«ãäœã çºè¡šæ©äŒ(LT)ãå¢ãã â»åŸã»ã©è©³ãã説æããŸã çµæ 4æãã3ã¶æéãäžèšã®åãçµã¿ãããŠã¿ãŠã®ææ³ãã¢ã³ã±ãŒã圢åŒã§ã¡ã³ããŒã«èããŠã¿ãŸããã Input Inputã®éãå¢ãã(100%) 以åãããæžç±ãèªãããã«ãªã£ã(75%) Inputã«å¯ŸããŠã®ã¢ã³ããã®æåºŠãé«ããªã£ã(62%) 以åãããå€éšã®å匷äŒãã»ãããŒã«åå ããããã«ãªã£ã(50%) Inputãå¢ããŠæ¥œãããšæããããã«ãªã£ã(87.5%) ã¢ã³ã±ãŒãçµæ: ã€ã³ãããã«ã€ã㊠Output Outputã®éãå¢ãã(25%) 以åãããããã°ãå匷äŒãLTã§ã®çºè¡šå
容ãè¯ããªã£ã(50%) 以åãããä»äºã«ããã工倫ã®å¹
ãåºãã£ã(38%) ã¢ã³ã±ãŒãçµæ: ã¢ãŠããããã«ã€ã㊠Outputã«ã¯èª²é¡ã¯ãããã®ã®ãInputã«ã¯ã¯ã£ãããšããæ¹åã®å
åãèŠãããŸããã§ã¯åãçµãã ããšãã玹ä»ã§ããã°ãšæããŸãã ãã£ãããš 1. ãªãã§èªå·±ç éœã倧äºãªã®ããã£ã¹ã«ãã·ã§ã³ ãŸãããããããªãã§èªå·±ç éœãããã ã£ãïŒããšããããŒãã§ãã£ã¹ã«ãã·ã§ã³ããŠããããŸããã ããŒã ã®äžã«ã¯ãä»ãŸã§ããŸãèããããšããªãã£ãããšãã人ãããã°ããæ¹ããŠèãããšãªãã§ã ã£ãããšãã人ãããŸãããäžãããã¹ãã«ã¢ããããŠãã ããããšããã®ã¯ç°¡åã§ããããŸãã¯èªåã®é ã§ããªãã§ã¹ãã«ã¢ããããªãããããªãã®ãããèããŠãããå¿
èŠããããŸãããŸãããŒã ã§è©±ãåãããšã§ãã©ããã«ä»äººã®æèŠãèãããšãã§ããã®ã§ããããããèãæ¹ãããã®ãããšæèã®å¹
ãåºããããšãã§ããŸãã äŸãã°æè¡åãåäžãããšçµŠæãããããä»äºãéžã¹ãã転è·ã®ãã£ã³ã¹ãåºãããšãã£ãå人ã®ãã£ãªã¢ã«é¢ããããšãããã°ãäŸ¡å€æäŸã®ã¹ããŒããäžãããããç念ã®å®çŸã«è²¢ç®ã§ãããšãã£ãäŒç€Ÿç®ç·ã§ã®æèŠããããŸããããŸãççŽã«ãæè¡åãäžãããšããããªããšãã§ããããã«ãªã£ãŠåçŽã«æ¥œããããšãã£ãæèŠããããŸããã ãã£ã¹ã«ãã·ã§ã³ã®æ§å ãã®ããšãèªå·±ç éœãã§ããŠããçæ³ã®ç¶æ
ã«ã€ããŠãèããŠããããŸãããçæ³ã®ç¶æ
ãšã¯ããã£ããèªå·±ç éœãã§ããŠãã人ã¯ã©ãããè¡åãããŠããã®ããçµæãšããŠãã®äººã¯ã©ãããç¶æ
ã«ãªã£ãŠããã®ãã«ã€ããŠã§ãã ãããããŒã ã®ã¡ã³ããŒãšè©±ãåãããšã§ãããããªããæ¹ã»ããæ¹ã«æ°ã¥ãããšãã§ããŸãããçæ³ã®ããšãããšããããã€ã³ãã§ããçæ³çãªç¶æ³ãæ³åã§ããããã«ãªããšããªãããããããªãèªåã®å¯èœæ§ã«æ°ã¥ãããšãã§ããŸããäŸãã°OSSã®ã³ããã¿ãŒã«ãªã£ãŠãããšãã倧ããªã€ãã³ãã§ç»å£ããŠããã瀟å€ãããä¿¡é ŒãããŠããŠçžè«ããããªã©ã§ãã çæ³ã®ç¶æ
ãã®åŸãçæ³ã«å¯Ÿããèªåãã¡ã®çŸç¶ã«ã€ããŠãè°è«ãããŠããããŸãããçŸå®ã¯ãªããªãçæ³éãã«ã¯ãããŸãããä»äºã§ã¹ãã«ã¢ããããã®ãäžçªå¹æçã§ãããæ¯åã¹ãã«ã¢ããã«ã€ãªããä»äºããããšã¯éããªãããããšãã£ã声ããããŸããã ããã§çæ³ãšçŸå®ã®ã®ã£ãããèªèããŠããããŸãããã®ããšã«ãã£ãŠããããã©ããªããšãã§ããã®ãïŒã©ããã£ãŠå€ããŠããã®ãïŒãšããããšãããŒã ãèªç¶ã«èãå§ããŸãã ãã®äžã§ãŠããããšããŠæ¬¡ã®ãããªããšãåãçµãããšã«ããŸããã 2. èªåãè¡ã£ãInput/Outputã®ç°¡åãªãã°ãäœã èªåãã©ããªæ¬ãèªãã§ã©ããªããšãæãããäœãåŠãã ããšããã®ã¯ããµããªãŒãããã¯ã¬ãã¥ãŒãæžããªãéãå¿ããŠããŸãããšãå€ãã®ã§ã¯ãªãã§ãããããåå ããã»ãããŒã®ææ³ãªã©ãåæ§ã§ããããã§ãç°¡åãªè¡šåœ¢åŒã§ã€ã³ãããããããšããã°ãšããŠæ®ããããªåãçµã¿ãããŠã¿ãŸããã 瀟å
ããã°ã§å
¬éããŠããç§èªèº«ã®Input/Outputã®ãã° ãã°ã«ã€ã³ãããããããšãèç©ãããŠãããšèªèº«ã®æé·ãæããããéææããã£ãŠæ¥œãããªã£ãŠããããã§ããã¢ã³ã±ãŒãã§ããããã£ãåçãããæ¹ãå€ãã£ãã§ããæ¥œãããªããšç¶ç¶ã®ããŒãã«ãå°ãäžãããèªå·±åŠç¿ãç¿æ
£åãããŠãããŸãã ãŸããæã
ãã®ãã°ãæ¯ãè¿ã£ãŠã¿ããšãã©ããªããšãç¥ããããŠã©ããªãžã£ã³ã«ã®æ¬ãèªã¿ç¶ããŠããã®ãããã®ææã¯äœã«é¢å¿ããã£ãŠãã©ããªã»ãããŒã«åå ããŠããã®ããæãåºãããšãã§ããŸãããã®äžã§èªåãäœãã©ããŸã§çè§£ããããšãã§ããŠãäœã«é¢å¿ãããã®ãããããã¯äœã«ã€ããŠã¯ããããŠèå³ãæãŠãªãã£ãã®ããåããããã«ãªããŸããã€ãŸãèªåã®å¥œã¿ã匷ã¿ã®åŸåãåæã§ããããã«ãªããŸãããã®ããšã«ãã£ãŠãä»åŸã®æé·ã®æ¹åæ§ãèãããããããšãã§ããããã«ããªããŸãã ãŸãã1on1ã®ãšããªã©ã«äžç·ã«ãã®ãã°ãèŠãããšã§ãããã®æ¬èªãã ãã ããã©ãã ã£ãïŒãã¿ãããªäŒè©±ãçãŸããããããã®ã»ãããŒåå ããŠããã ããç§ã¯ââã«ã€ããŠã®è©±ãé¢çœããšæã£ããã©ãã©ãæã£ãïŒãã¿ãããªäŒè©±ãçãŸããçè§£ãåºãã£ãŠãããŸãããäºãããããã®æ¬ã玹ä»ããã£ããããããšããããŸãã ãŸãã¢ãŠããããããããšãåæ§ã«ãã°ãã€ããŠãããããã«ããŸããããã®åãçµã¿ãå§ããã®ãïŒæã§ãã®ã§ããŸã ãããªã«ã¢ãŠãããããæžããŠããªã人ãããŸããã€ã³ãããã¯ã§ããŠãã¢ãŠããããããããŸã§ã®äœè£ãç¡ããšããã©ããªãµãã«ã¢ãŠããããããããããåãããªããšèããã¡ã³ããŒãå€ãããã§ãããã®ãšããã¢ãŠããããã«ã¯ãŸã å°ã課é¡ãæ®ããŸãã ãã ç§èªèº«ã¯æ®æ®µã®æ¥åã§ãã€ã³ãããããç¥èã以å€ã«ã掻çšã§ããŠããããšã«æ°ã¥ãããããã£ãããªã®ã§æ¥åã§ã¢ãŠããããããæ©äŒãäœãããšããŠããããšã«ãæ°ã¥ããŸãããã¢ãŠããããããããšã«ãã£ãŠãåšãããFBãããã£ãŠæŽã«çè§£ãæ·±ãŸããšããäœéšãããŠããŸãã ãŸãã¢ãŠããããã®èç©ããããŠãããšãã€ã³ããããšã¢ãŠããããã®é¢ä¿ãèŠããŠããã(5æã«èªãã æ¬ã®ç¥èã6æã®æ¥åã§åœ¹ã«ãªã£ãŠãããªã©)ãã€ã³ããããšã¢ãŠããããã埪ç°ããŠãããåŠã³ãæ·±ããªããšãã£ãããšãèµ·ãããŸãããããªã£ãŠãããšãèªå·±ç éœãããæ¥œãããªãã®ã§ã¯ãšæããŸãã 3. slackã§æžç±ãå匷äŒã®æ
å ±å
±æãã£ã³ãã«ãäœã ç§ã®éšçœ²ã§ã¯slackã䜿ã£ãŠããã®ã§ããããšããã¡ã³ããŒãããããã®æžç±ãå匷äŒã®æ
å ±ãå
±æãããã£ã³ãã«ãäœã£ãŠãããŸãããããã«ãã£ãŠãé¢çœãããªæ°åã®æ
å ±ããã€ãã³ããã»ãããŒã®æ
å ±ãæŽ»çºã«äº€æãããããã«ãªããŸãããäžç·ã«åãã€ãã³ãã«åå ããŠææ³ã話ãåã£ãããšãããããªããšãèµ·ãã£ãŠããŸããAmazonã®Kindleæ¬ã»ãŒã«ãªã©ããåŸãªæ
å ±ãå
±æãããŠåœ¹ã«ç«ã¡ãŸãã äžäººã ãšãªããªãèªå·±ç éœããã®ãé£ãã人ã§ããä»ã®äººãšåŸãç¥èãå
±æããã£ãããã³ãã¥ãã±ãŒã·ã§ã³ãçãŸãããšæ¥œãããæããããšãã§ããŠæç¶çã«ã€ã³ãããããããšãã§ãããããããŸããã 4. çºè¡šæ©äŒ(LT)ãå¢ãã ãŸãæã«1åãã€ã³ããããããã®ãã¢ãŠããããããæ©äŒãšããŠLTã®æéãäœã£ãŠã¿ãŸããã çºè¡šæéã¯10åãšçãããããŸã§è³æã®å®æåºŠãæºåã®æéãæ±ããªãããšã«ããŠããªã©ãã¯ã¹ããŠçºè¡šã§ããããšãç®æããŠããŸããå®éã«ãã£ãŒãããã¯ãããããããšãã¢ãããŒã·ã§ã³ã«ãªã£ãããLTã§è©±ãå
容ãæèããªããã€ã³ãããããæ¹ãããããã§ãã ãã®ä»ã®åãçµã¿ 以åããè¡ã£ãŠããåãçµã¿ã§ããã瀟å
å匷äŒãã¡ã³ããŒãã¡ãèªäž»çã«éå¬ããŠããŸããæ°ã«ãªãæ¬ã®èŒªèªäŒããšããæè¡ã«ã€ããŠã®ãã³ãºãªã³ã®ãããªå匷äŒããèå³ã®ãã人å士ã§éé±ãããã§æŽ»åããŠããããã§ãã ãŸãæ¥çžŸè©äŸ¡ã«ã¯ããªããã®ã®ãã¢ãŠããããã®ç®æšãäŸãã°QiitaãäŒç€Ÿã®å
¬åŒæè¡ããã°(ä»ã芧ã«ãªã£ãŠããããã°ã§ã)ãžã®æçš¿æ°ã瀟å
ã§ã®LTã»çºè¡šã®åæ°ãèšå®ããŠåãçµãã ããããŠããŸãã ä»åŸã®å±æãšèª²é¡ ã¢ã³ã±ãŒããæ®æ®µã®ã¡ã³ããŒã®åããèŠãŠããéãããã®ãããªåãçµã¿ãè¡ã£ãããšã§ã¡ã³ããŒã®Input/Outputã«å¯Ÿããæèã¯ããªãå€ãã£ãããã«æããŸããç§ãšããŠã¯ä»¥äžã®2ã€ã®çç±ããã£ããšæã£ãŠããŸãã èªå·±ç éœãèŠããåããããšã§ãèªåãã©ãã ãé 匵ã£ããåããããã«ãªãéææãåŸãããããã«ãªã£ãããš èªå·±ç éœããã®äººã ãã®å€ç¬ãªåãçµã¿ã«ãããã¿ããªã§åãçµããããã«ããããš ãåèã«ãªãã°å¹žãã§ãã ä»åŸã¯Input/Outputã®ãã°ãå
šç€Ÿå
¬éãããäºãã«ã©ããªããšãå匷ããŠããã®ããç¥ããããã«ããããšã§ãããããã®æ¬ãã»ãããŒãè³æ Œãªã©ã®æ
å ±äº€æã掻çºã«ããããçè§£ãæ·±ãåããããªç¶æ³ãä¿é²ããŠãããããšèããŠããŸãã LIFULLã§ã¯å
±ã«æé·ã§ãããããªä»²éãåã£ãŠããŸãã ãããããã°ãã¡ãã®ããŒãžãã芧ãã ããã hrmos.co hrmos.co
ããã«ã¡ã¯ãããŒã¿ãã©ãããã©ãŒã ã°ã«ãŒãã®æšå£ã§ãããšã³ãžãã¢ãšããŠããŒã¿åºç€ã®æ§ç¯ã»éçšãçŽ4幎ã»ã©æ
åœããŠããŸãã ä»åã¯ç§éããããŒã¿ã®æ°äž»åããç®æããŠãããŸã§ã«åãçµãã§ããäºãæ¯ãè¿ããªããã玹ä»ããããšæããŸãã ã¯ããŸãïŒ2017幎10æãïŒ åœæç€Ÿå
ã§ã¯ä»¥äžã®ãããªããŒã¯ãŒãããã¬ã³ãã§ããã ããŒã¿ããªãã³çµå¶ ããŒã¿ã®æ°äž»å ããŒã¿ãŠã§ã¢ããŠã¹ ãããããŒã¿ãååã«æŽ»çšãããŠããã®ã¯äžéšã®éšçœ²ãæœçã«éãããŠããããããŒã¿ã®æ°äž»åããšåŒã¶ã«ã¯çšé ãç¶æ
ã§ããã ããŒã¿ã®ãµã€ãå ããŒã¿ã¯LIFULL HOME'Sãªã©ã®ãµãŒãã¹ã®ããã«æé©åãããŠãããã»ãã¥ãªãã£ãã·ã¹ãã ä¿è·ã®èгç¹ããããŒã¿ã«ã¢ã¯ã»ã¹ã§ãã人ã¯å¿
èŠæå°éã«æããããŠããŸãã ãŸãè€æ°ã®ããŒã¿ããŒã¹ãã¯ã©ãŠããµãŒãã¹ã«æ£åšããŠããŠããããããããŒã¿ããµã€ãåããŠãããç¶æ
ã§ããã ãã®ãããªäžã§ããŒã¿ã掻çšããããšæããšããŸãã¯ããŒã¿ã®æœåºããšã³ãžãã¢ã«äŸé Œããå¿
èŠããããŸãããããããŒã¿ã容æã«èŠãããç°å¢ã§ã¯ãªãã®ã§ãããŒã¿æœåºã®é©åãªèŠä»¶ãèããäºãããããé£ããã®ã§ããäŸé Œãåãããšã³ãžãã¢ãšããŠãç¹ã«é¢çœããªãäœæ¥ã«æéãåãããäºã«ãªãããããããŒã¿ãåºããŠã¿ããããªããéã£ãã»ã»ããããäžåºŠããŒã¿æœåºãé¡ãããŸããŒããªããŠäºããããããŸããã ã©ãèããŠãå¹çãæªãã§ãããããªç¶æ
ã§ã¯ããŒã¿æŽ»çšã¯é²ã¿ãŸããã ããŒã¿ããªãã³ãæšé²ããéšçœ²ã®çºè¶³ ãããªç¶æ³ãå€ããããã«ããŒã¿ããªãã³ã°ã«ãŒããšããéšçœ²ãæ°èšãããŸãããã°ã«ãŒãã®ããã·ã§ã³ã¯ã瀟å
ã®ããŒã¿æŽ»çšãæšé²ããäºã«ãã£ãŠãåçš®æ¥åã®å¹çåãå³ããçµå¶ãåŸæŒããããã§ããã¡ã³ããŒã¯äŒç»/ããŒã±ã¿ãŒÃ2åããšã³ãžãã¢Ã1åïŒç§ïŒã®3åäœå¶ã§ããã ãŒãããã®ææ¢ãã®ç¶æ
ã§ãããã3人ã§äžèšã®ãããªäºã«åãçµãã§ãããŸããã 瀟å
ã®ããŒã¿ã®èª¿æ» 瀟å
ã«ããåæã«äœ¿ããããªããŒã¿ããªã¹ãã¢ããããããŒã¿ãã©ãã«ããã®ãïŒã©ã®ãããªé£æºãå¯èœãïŒã調æ»ããŠãããŸãããLIFULL HOME'Sãªã©ã®ãµãŒãã¹ã®ããŒã¿ã¯ãã¡ãããå¶æ¥é¢é£ã®ããŒã¿ãäŒèšã·ã¹ãã ãæ¢åã®BIã®ããŒã«ã®äžèº«ãªã©ã調æ»ããŠãããŸããç¹ã«ããã¯ãªãã£ã¹ç³»ã§ã¯æ§ã
ãªSaaSã倿³šããŠããã·ã¹ãã ãååšããŠããŠãããŒã¿ã®ãšã¯ã¹ããŒãã«ã¯è¿œå ã®è²»çšãå¿
èŠããïŒããšããç©ããã£ããããŸããã ããŒã¿åæã®ãã©ã€ã¢ã« å¶æ¥éšéãšäžç·ã«ããŒã¿åæã«ããå¶æ¥æŠç¥ã®ç«æ¡ã«åãçµãã§ã¿ãŸããã 仮説ãç«ãŠã â é¢é£ããŒã¿ãéããŠããŠä»®èª¬ãæ€èšŒ â çããããããªãå¶æ¥æŠç¥ã«èœãšã蟌ãã§å®è¡ â çµæãæ€èšŒ ãšãããµã€ã¯ã«ãåããŠãããŸãã å
·äœçã«äœæ¥ãé²ããŠã¿ããšãããŒãšãªãæ
å ±ããªããŠããŒã¿ãçµåã§ããªãããããããããŒã¿ãç¡ãããªã©ã®åé¡ãæµ®ã圫ãã«ãªã£ãŠããã®ã§ãä»åŸã®DWHãããŒã¿ããŒãäœææã«èæ
®ãã¹ããã€ã³ããèŠããŠããŸããã DWHã®æ§ç¯ ãµã€ãåããŠããããŒã¿ãäžç®æã«éããŠåæè
ãå©çšããããç°å¢ãäœãããã«ãããŒã¿ãŠã§ã¢ããŠã¹ïŒDWHïŒãæ§ç¯ããŸããDWHã«ã¯GCPã®BigQueryãæ¡çšããŸãããLIFULLã§ã¯Google Workspaceãå°å
¥ããŠããã瀟å¡å
šå¡ãGoogleã¢ã«ãŠã³ããæã£ãŠããã®ã§BigQueryãžã®æš©éä»äžãéåžžã«æè»œã«å®çŸã§ããŸããã BigQueryèªäœã«ãç©æ¥µçã«æ©èœè¿œå ã»æ¹åãè¡ãããŠããå®å¿æããããŸãããå人çã«ã¯æ®ã©éã®æã¡æã®ãªããµãŒãã¹ã ãšæã£ãŠãŸãã 2æç®ïŒ2018幎10æãïŒ éãšã³ãžãã¢åãã®å匷äŒã宿œ ããŒã¿æŽ»çšãé²ããã«ã¯ããŒã¿ãæ±ãã人ãå¢ãããŠããå¿
èŠããããŸãããšã³ãžãã¢ãžäŸé Œããäºãªã誰ã§ãããŒã¿ãåãæ±ããç¶æ
ãç®æããŠããã®ã§ãéãšã³ãžãã¢ã®äººã察象ã«SQLã®å匷äŒãè¡ããŸãããã¯ãšãªã®åãå
ã¯åæçšã®BigQueryãªã®ã§ãSQLã«äžæ
£ããªäººãå€å°ç¡è¶ãªã¯ãšãªãå®è¡ããŠã倧ããªåé¡ã«ã¯ãªããŸãããå®éã«å®è¡ããªãã詊ããç°å¢ãããã®ã¯ãšãŠããããšæããŸãããã ãã¯ãšãªã®ã³ã¹ãã®é¢ã§ã¯äžå®ãæ®ãã®ã§ããŠãŒã¶ãŒäžäººãããã®ã¯ãšãªäžéïŒQuery usage per day per userïŒããªã©ã®ãã£ãããèšå®ããŠããŸãã Tableau BIããŒã«ãšããŠã¯Tableauãå°å
¥ããŠããŸãããã¡ããå©çšè
ãå¢ããããã®å匷äŒã宿œããããåéšçœ²ã§è¿œã£ãŠããææšãTableauã§å¯èŠåãããµããŒããè¡ããŸããã åœåã¯Tableau Desktop à Tableau Onlineã®çµã¿åããã§äœ¿ã£ãŠããŸããããå©çšã¢ã«ãŠã³ãã®å¢å ã«äŒŽããã®ææã«Tableau Serverãžã®åãæ¿ããè¡ã£ãŠããŸãã Tableauã¯çŽæçãªããŠã¹ã®æäœã§ç¶ºéºãªããŒã¿ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ãã§ããã®ã売ãã§ããããµããšããŒã¿ãèŠããæã®ãã¥ãŒã¯ãŒãšããŠãéå®ããŠããŸãã 3æç®ïŒ2019幎10æãïŒ ãããŸã§ã¯éãšã³ãžãã¢éšéãã¡ã€ã³ã®ã¿ãŒã²ããã«çœ®ããŠDWHãäžå¿ãšããã·ã¹ãã ãæ§ç¯ããŠããŸãããããšã³ãžãã¢éšéãããDWHã®ããŒã¿ã䜿ããããšãã声ãèãããŠããããã«ãªããŸããããŸãåéšçœ²ããšã«ããŒã¿ã®æºåã«ã³ã¹ããå²ãããŠãããšããåé¡ã衚é¢åããŠããŸãããããã§ããŒã¿ã®éç©ã¯ããŒã¿åºç€ã«çµ±åããŠããæ¹éãšããããŒã¿ãã©ãããã©ãŒã ã°ã«ãŒããšãããšã³ãžãã¢ãªã³ã°çµç¹ã§ç®¡çããŠããäœå¶ã«ãªããŸããã ããŒã¿ã¬ã€ã¯ãåããããŒã¿åºç€ã®æ§ç¯ LIFULLã§ã¯AWSäžã§çšŒåããŠãããµãŒãã¹ãå€ãããããããããŒã¿ãœãŒã¹ã®äžçªè¿ãã«äœçœ®ããããŒã¿ã¬ã€ã¯ã«ã¯AWSã®S3ãæ¡çšããããšã«ããŸããããããŸã§ãBigQueryã®å段ã«ãã£ãCloud Storageãåçã®åœ¹å²ãæãããŠããã®ã§ãããããããã¯æç€ºçã«ããŒã¿ã¬ã€ã¯ãæ§ç¯ããŠãããŸãã åæã«ETLã®å®è¡ç°å¢ãAWSã®ECSãStep Functionsãå©çšããæ§æã«ãªãã¬ã€ã¹ããŠãããŸããã ãããŸã§ã®æ§æ DWHãäžå¿ã«GCPã§æ§æ çŸåšã®æ§æ ããŒã¿ã¬ã€ã¯ã«S3ãæ¡çšãAWSåŽã«ãªãã¬ã€ã¹ çŸåšïŒ2020幎10æãïŒ çŸåšãããŒã¿åºç€ã§ã¯çŽ2,000ã®ãšã³ãã£ãã£ãçŽ4,000åã¬ã³ãŒãã管çããŠããŸããåãæ±ãããŒã¿éãçš®é¡ã®å¢å ã«äŒŽã£ãŠéçšã³ã¹ããå¢å åŸåãªã®ã§ãããå¹çåãå³ããªããèŠæš¡ãæ¡å€§ããŠããããšãç®äžã®èª²é¡ã§ãã ãŸãšã ä»åã¯ãããŒã¿ã®æ°äž»åãã«åããŠåãçµãã§ãããããŸã§ã®æµãã倧ãŸãã«ç޹ä»ãããŠããã ããŸãããã·ã¹ãã ã®è©³çްãéçšã®ä»çµã¿ãTableau Serverã倱æè«ãªã©ãåå¥ã®å
·äœçãªå
容ã«ã€ããŠã¯ãŸãå¥ã®èšäºã§ã玹ä»ã§ããã°ãšæããŸãã æåŸã«LIFULLã§ã¯äžç·ã«åã仲éãåéããŠããŸããïŒâ»ããŒã¿åºç€éçºã®ããžã·ã§ã³ããããŸãïŒïŒ ã«ãžã¥ã¢ã«é¢è«ãè¡ã£ãŠããŸãã®ã§èå³ã®ããæ¹ã¯ãã²ãå¿åãã ããïŒ hrmos.co hrmos.co
ããã«ã¡ã¯ãLIFULLã®ãšã³ãžãã¢ãããŒãžã£ãŒããã£ãŠãããŸããæ²³æŽ¥ã§ãã ç§ã¯ã2015幎ã®6æã2018幎ã®6æãŸã§ã®äžž3幎éãLIFULLã°ã«ãŒãã®äŒç€Ÿã§ããTrovitã«åžžé§ãã¹ãã€ã³ã§éãããŸããã åž°åœããŠããã«ãã¹ãã€ã³ã§ã®ãšã³ãžãã¢ã®åãæ¹ãæžããŠã¿ããããšãæã£ãŠããã®ã§ããæžããã«2幎ãçµã£ãŠããŸããŸããã ã§ããã2幎ã»ã©æ¥æ¬ã§ã®åãæ¹ãå床çµéšããããšã§ãæ¹ããŠåœæã®çµéšã§ä»åœ¹ã«ç«ã£ãŠãããªãšæããéšåããã£ãã®ã§ãçïŒããŒããŒãïŒãåããŸããã ãŸããã¹ãã€ã³ã«åºåã®çµç·¯ãã¹ãã€ã³åžžé§æã®èŠåŽè©±ãªã©ã¯ãã€ã玹ä»ã§ããããšæããŸãã â»Trovitã¯äŒæ¥çµ±åã«ããçŸåšã¯ LIFULL CONNECT ãšãªã£ãŠããŸãã â» äžçæå€§èŠæš¡ã®äžåç£ã»è»ã»ä»äºã®ã¢ã°ãªã²ãŒã·ã§ã³ãµãŒãã¹ ãæäŸããã¹ãã€ã³ã®äŒç€Ÿã§ãã çµç¹ãšåãæ¹ ããŒã ã®åœ¹å²ãæç¢ºïŒ ç§ãæå±ããŠããããã®ããŒã ã¯ãšã³ãžãã¢ã ãã§ãªãå€è·çš®ã§äžã€ããŒã ãç·šæããŠãããæ
åœåéããã¢ããªã±ãŒã·ã§ã³ãæ€çŽ¢ãšã³ãžã³ãã€ã³ãã©ãããŒãµãSEOãææé客ã«ããŒã ãåãããŠããŸããã ããããã®ããŒã ã§ã®ããã·ã§ã³ãæç¢ºã«ãªã£ãŠãããäŒç€Ÿã®æŠç¥ã«æç¢ºã«çŽä»ããŠããŸããã äŸãã°ãæ€çŽ¢ãšã³ãžã³ãšããŠSolrãå©çšããŠããã®ã§ãããã¯ãšãªæ§ç¯ã容æã«ãããã©ã°ã€ã³ãå®è£
ããããšã§æ€çŽ¢ãšã³ãžã³ã䜿ãå
šãŠã®ã¢ããªã±ãŒã·ã§ã³ã®éçºå¹çãæ¹åããããã°ã®çºççãäžããŠããŸãããã€ã³ãã©ããŒã ã§ã¯ãKubernetesãå©çšç®çãšããåºç€ã®ç§»è¡ïŒAWSããGCPãžïŒã3ã¶æçšåºŠã§å®éããå¯çšæ§ãé«ããã®ã«ããŠããŸããã â»äŸã¯ã»ãã®äžéšã§ã åŠã³ ããŒã ã«ãŸã§èœãšã蟌ãŸããããã·ã§ã³ãæç¢ºã§ããããšãçµç¹å
šäœã®çç£æ§åäžã«ç¹ããäŒç€Ÿã®æé·ã«ã€ãªããã æ¥æ¬ã§ã®åãçµã¿ æŠç¥ã«åããããŒã ç·šæãšãã®ããŒã æ¯ã«ã¡ã€ã³ããã·ã§ã³ãæç¢ºã«æ±ºããããããšãžã®ãã©ãŒã«ã¹ãã§ããããã«ããŸãããããŸãåã£ãŠãããšå®æã§ããã·ãŒã³ãããã°ããã©ãŒã«ã¹ãã¹ãå
å®¹ãšæ¥åã®å¹
ãšã®èª¿æŽãªã©æ¹åã®äœå°ã¯ãŸã ãããšæããŠããŸãã å
šç€Ÿã§é²èЧããããŒã¿ã®çµ±äžãšå¯èŠåã培åºçïŒ ããã·ã§ã³ãæç¢ºã§ããç¶æ³ãæ£ç¢ºã«ã¢ãã¿ãªã³ã°ããããæœçã«å¯Ÿããçµæãå®éçã«èŠãªããšæåŠã®å€å®ãæ£ããã§ããªããšããèããããããŒã¿ã®å¯èŠåã培åºçã«è¡ã£ãŠããŸããã äŸãã°ãSEOããŒã ã§ã¯æ¥ã
ã®ã»ãã·ã§ã³æ°ãšããŒã¯ãŒãæ°ãšã®çžé¢ã ã£ãããããŒãµããŒã ã¯ããŒã¿ã«ãµã€ãããããŒã¹ããããŒã¿ã®æ°ãšå質ãå¯èŠåããŠã瀟å
ã®èª°ã§ãèŠããç¶æ
ã«ããŠããŸããã ãã®ç€Ÿå
ã®èª°ããçµ±äžãããããŒã¿ãèŠããšããããšããšãŠãéèŠã§ãçµ±äžãããããŒã¿ãèŠãããšã§ç¶æ³ãå
±éããŠèªèããããšãã§ããããããã®è³ªçå¿çã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ã掻çºã«ããŠããŸããã ããæãCEOããå人åæã®è³æã§èªããªãåæè³æã¯å
±éããŠã¿ãããšãã§ãããã®ã«çµ±äžããããšããšèšã£ãŠããã®ã¯ãã®ããã ã£ããã ãªãšãæ¹ããŠæããŸããã ã©ã®ããŒã¿ãæ£ãšããã®ããšãã£ããç¡é§ãªæéãšåŽåãçãŸããªãã£ããšæããŸãã åŠã³ å
šç€Ÿã§çµ±äžããææšãèŠãããšããããå
šç€Ÿã«å
¬éãããŠããããšãç¡é§ãªæéãçºçããããæèçµ±äžã«ãã€ãªããã æ¥æ¬ã§ã®åãçµã¿ ãã§ã«LIFULLã§ããäŒç€Ÿå
šäœã§èŠãæ°å€ãçµ±äžãããåããåã£ãŠããŸããã ä»ãŸã§ã宿çã«åç
§ããKPIã®ããŒã¿åœ¢åŒãããã¥ã¡ã³ãããã©ãã©ã ã£ããã®ãäžå®çµ±äžããèŠããããªã£ãŠããŸãã ãŸãããšã³ãžãã¢ããŒã ã§ã¯ æè¡è² åµã®è§£æ¶ãç®çãšããCodeclimateãå©çšããã³ãŒãå質ã®å¯èŠå ãé²ããŠãã£ãŠããã ãªãã¡ã¯ã¿ãªã³ã°ãžã®æè ãé«ãŸã£ãŠããŸãã ãã¡ãã¯ããšã³ãžãã¢å
šäœã§ã®åãããã§ã«åãããŠãããç§ã®ææã«ãç¹ãããŸããã www.lifull.blog www.lifull.blog åžžã«ãããã€ãããç°å¢ïŒ ãã¹ããŸã§å®äºãããããã¯ãã¯éæãããã€ãããä»çµã¿ã«ãªã£ãŠããŸããã ãããã¯ã·ã§ã³åã®ç°å¢ã§ã¯åžžã«å質ãæ
ä¿ãããã¹ãã±ãŒã¹ãèµ°ãç¶ããŠããŠããªãªãŒã¹å¯èœãªç¶æ
ã«ãªã£ããã®ã¯é次ãããã€ãããŸãããããã€åŸã«ãã°ãçºçããããäžã€åã®ã¿ã°ã«æ»ãã ãã§ããŒã«ããã¯ãã§ããä»çµã¿ãšãªã£ãŠããããšã³ãžãã¢ã¯åžžã«éçºããäºã«éäžã§ããä»çµã¿ãçšæãããŠããŸãããåœæã®ç§ã«ã¯QAãæŽ»èºããŠããã®ã¯æ¬æ°ã§ããã åŠã³ åºè·å¯èœãªç¶æ
ã®ãããã¯ããããã«äžã«åºããä»çµã¿ã«ãªã£ãŠããäºãããªãªãŒã¹æ¥ãŸã§ã®ã»ãã®æ°æ¥ã§ã¯ãããåºè·ãåŸ
æ©ããããšããäºãšã®å°ããªå·®ãçã¿ããã®ç©ã¿éãã1幎ãéããšå€§ããªå·®ã«ãªãã æ¥æ¬ã§ã®åãçµã¿ 赎任ããåã¯é±ã«2åçšåºŠã®ãªãªãŒã¹æ¥ãçšæãããŠããã®ã§ãããä»ã§ã¯æ¯æ¥ãªãªãŒã¹ã§ããä»çµã¿ããã§ã«æ§ç¯ãããŠããŸãããã¡ããã赎任ããŠããéã«ä»çµã¿åãããŠããã®ã§ãLIFULLã§ããªãªãŒã¹é »åºŠã課é¡ãšæãçå®ã«æ¹åãé²ãã§ãããšå®æããŠããŸãã æ¡çšãšäººäº åŠãã§æ¥ãããšãšä»äºã®ã€ãªãããéèŠããïŒ ãšã³ãžãã¢ã®äžã«ãæ§ã
ãªè·çš®ããããšæããŸãããè·çš®ãšå€§åŠã§ã®å°æ»ãçŽä»ããŠãã人ã°ããã§ãããäžã«ã¯ãå¿
èŠãšãªãã¹ãã«ã倧åŠãå°éåŠæ ¡ã§æ¹ããŠåŠã³çŽã人ããå°éæ§ãããé«ããŠãã£ãçµæãåããªãã倧åŠã§è¬åž«ãããŠãã人ãããŸããã æ¡çšã®é¢ã§ãã倧åŠã§ã®å°æ»ãæ¥åã§ã®å®çžŸãç¡ãäººãæ¡çšãããããšã¯ã»ãŒãããŸããã äžè¬çã«æ¥æ¬äŒæ¥ã§ã¯å€§åŠã§ã®å°æ»ãšé¢ä¿ãªãããã³ã·ã£ã«æ¡çšãè¡ã£ãŠããŸãããããã³ã·ã£ã«æ¡çšãšããèšèèªäœããããŸããã§ããã æè¡ãããŒãžã£ãŒããç¹å®ã®ç工系倧åŠã®æ°åãåãããšãéåžžã«éèŠã§ã忥ãããŠã®äººæãã峿ŠåãšããŠæåŸ
ãã§ããïŒããšå匷ãèšã£ãŠããã®ãèŠããŠããŸãã ãŸããããã話ã§ãããç¥èãããçŽ æŽãããçµæãåºããŠããã®ã«è¬éãããšããããšããããŸããã§ãããããã®ã¯è¬éã§ã¯ãªããä»äºã®çµæã®åæãšå
±æãšãã£ãäžã€ã³ãã¥ãã±ãŒã·ã§ã³ã®ã¹ããããçç¥ãããŠããã€ã¡ãŒãžãåããŸãããããã¯ãšã³ãžãã¢ã«éã£ã話ã§ã¯ãªãæåçãªãã®ãããããŸããã åŠã³ å士ãšããŠåããŠããããšã³ãžãã¢ãéžèããæ¡çšã«åŠ¥åã¯èš±ãããªãã Betterã§ã¯ãªããBestãæ¡çšããããšã倧äºã§ããã æ¥æ¬ã§ã®åãçµã¿ LIFULLã®ããžã§ã³ã«å
±æããŠããã ããæ¹ãæ¡çšããããšã¯æéèŠã§ããã瀟å
ã§ã®æŽ»èºãæåŸ
ã§ããããäžæ¹ç€Ÿå
ã§ã掻èºã®å Žããã£ãããšæäŸã§ããããäžã€äžã€äžå¯§ã«ç¢ºãããªããæ¡çšæŽ»åãé²ããããŠããã ããŠãããŸãã hrmos.co éçšåœ¢æ
ãç°ãªãïŒ ã¹ãã€ã³ã§ã¯éçšå¥çŽäžãè§£éã¯æ®éã«è¡ããTrovitã§ãåªåããŠããããŠããªãåŠäœã«é¢ããããçµæãåºãŠããªããã°è§£éãããŸãããã¡ã®äŒç€Ÿã«ã¯ãã£ããããªãã£ãã®ã§ããã£ãšæŽ»èºã§ãããšãããžéãåºããŠãããããããäŒç€Ÿã«ãåœäººã«ã幞ããªçµæãããããããšããèãã®ããšè§£éãéžæããŸãã ããæ¥ãæŒé£ããåž°ã£ãŠãããšããšãããã¹ã¯ã®è·ç©ããŸãã£ãšãªããªã£ãŠããããšããããŸããã鱿«é£²ã¿ã«è¡ãçŽæãããŠããã®ã§ãäœèšã«ã³ã£ããããã®ã¯èŠããŠããŸãã 赎任åœåã¯æ¥æ¬ã®æèŠã匷ããè§£éãéè·ãšç€Ÿå¡ãèŸããŠããŸãäºã«ããªãææã«ãªã£ãŠããã®ã§ãããåŸã
ã«ãšãŒãããã®ãšã³ãžãã¢åžå Žã ã£ãã転è·äºæ
ãç¥ããé床ã«ãã¬ãã£ãã«æããæ¬¡ã®ã¹ããŒãžãå¿æŽãããã€ã³ãã«ãªããŸãããä»ã§ããã®æèŠã¯æã£ãŠããŸãã åŠã³ åžå Žã®ããŒãºãæããã¹ãã«ã磚ããŠããããšãèªåã®åžå ŽäŸ¡å€ãäžããŠããããšãšãªãã æ¥æ¬ã§ã®åãçµã¿ 仿ãããšã³ãžãã¢ã¯è·èœå¥ã®çµç¹ãšãªãã匷ãå人ãæé«ã®ããŒã ãšãªãããšã§ã䟡å€åµé ãå éããç¶ããããšããããžã§ã³ãæ²ãã 以åãããå匷äŒããã¬ããžå
±æäŒã®éå¬é »åºŠãäžããã ãå人ã§ã®ã¹ãã«ã¢ããã®çºè¡šã®å Žãèšããããšãããé«åºŠã«æ±ããããåžå ŽããŒãºã«å¿ãããããšã³ãžãã¢ã®è²æã«åãçµãã§ããŸãã www.lifull.blog 人çã§å€§äºãªãã®ã¯ãéãããæéïŒæéã倧äºã«ããæå ãªã³ãšãªãã®åãæ¿ããäžæãïŒ ãªã³ãšãªãã®åãæ¿ããåœããåã®ããã«ããŠããŠããããäžæããªãšæããŸããã å€åçµäºåŸã¯è¿ãã®ããŒãžè¡ãã®ãæäŸã§ããããä»äºã®äžå¹³äžæºã話ãã®ã§ã¯ãªããæ¬¡ã«ãã£ã¬ã³ãžããŠã¿ããæè¡ã ã£ãããä»ãã©ã€ããŒãã§æ°ã«ãªã£ãŠè§Šã£ãŠããæè¡ã«ã€ããŠç±ãèªã人ã°ããã§ããã Kubernetesãããã«ã€ã±ãŠããã®ãããã«ãŒããŒãºãçæã«èµ€ã¯ã€ã³ã飲ã¿ãªããèªã£ãŠããã€ã³ãã©ãšã³ãžãã¢ãä»ã§ãå¿ããããŸããã瀟å
ã®ã¡ã³ããŒã ãã§ãªãããšã³ãžãã¢ã®å人ãåŒãã§ãã£ã¹ã«ãã·ã§ã³ãå§ãŸãããšããããŸããã ä»äºã®è©±ããäžæŠé¢ãããæè¡ã®è©±ã¯æ¥œãããŠã€ããã£ãŠããŸããšãããæ ¹ã£ããã®ãšã³ãžãã¢ãå€ãã£ãããã«æããŸãã ãŸãããµãã«ãŒã®è©±ã«ãªããšå°å
ã®ããŒã ã®è©±ãæ¥æ¬ããç§»ç±ããŠããéžæã®è©±ã§çãäžãã£ãããšãä»äºãå¿ããŠæäºãã¿ã§çãäžããããšãå€ã
ãããŸããã çŸå°ã®äŒç€Ÿå¯Ÿæã®ãªãŒã¬ïŒããããµã«ã®å€§äŒã®ãããªãã®ïŒãäžå®æéã§éå¬ãããã®ã§ãããä»äºã®åŸã®ã¡ãã£ãšããéåã£ãŠã¬ãã«ã§ã¯ãªãæ¯åã¿ããªæ¬æ°ãªã®ã§ãåå ããŠã¯æ¯åæ»ã¬ããããªãããšæã£ãŠããŸããã åŠã³ ä»äºãšãã©ã€ããŒãã®åãæ¿ããæéã®äœ¿ãæ¹ã®äžæããã¹ãã¬ã¹è§£æ¶ã«ç¹ãããç¿æ¥ã®æ¥åãžã®ã¢ãããŒã·ã§ã³ãä¿ã€ç§èš£ã æ¥æ¬ã§ã®åãçµã¿ çŽè¿ã®ã³ããçŠã§ã¯ã³ãã¥ãã±ãŒã·ã§ã³ã®ãšãæ¹ã倧ããå€ãããŸãããç¹ã«ãªã³ã©ã€ã³ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯æ¥åã®å
容ã®ã¿ã«ãªã£ãŠããŸããã¡ã§ããããã§ç¹å®ã®æéã¯æ°è»œã«è©±ããéšå±ãéæŸããŠã¿ããããããŠéè«ããããªãæéãåããªã©ãåãæ¿ãã®æéãåãããã«ããŸããããããæå€ãšã¹ãã¬ã¹è§£æ¶ã«ã€ãªãã£ãããã¡ãªããªãã€ããäºã«ã€ãªãã£ãããšè¯ã圱é¿ãåãŒãããšå®æããŠããŸãããããã¯ãã¡ã³ããŒãèªãå®è·µããŠãããŸããã ããŒãã£ã³ã°ã®ã»ããã£ã³ã°ãåœããïŒ äººã®æéãç¡é§ã«æŸåããŠã¯ãªããªããšããæåããããŸããã ãªã«ãææ¡ããããšããç¹ã«ä»ãããã®ãåŠå®ããã«ã¯åŠå®ããã«è³ãäºå®ïŒããŒã¿ïŒããªããã°ããã ã®åäººã®æèŠã§ãããšããèãããããŸããã ããæ¥ãããã®MTGã¯æ¬åœã«ç¡é§ãªæéãããããïŒããšæ¿æããéšå±ããåºãŠããããããšããããŸãã ä»ã¯åçããããšãšãã«ãããŒãã£ã³ã°ã®æ¬åœã®ããæ¹ãåŠãã ããã«æããŸããèªåãäººã®æéãæŸåãããšããããšãçå£ã«èãããã£ããã«ããªããŸããã 仿ãã°ãããŒãã£ã³ã°ã§ã¯ã¿ããªãI thinkãã§ã¯ãªãããIt saysããšèšã£ãŠããã®ãæãåºããŸãã åŠã³ ããŒãã£ã³ã°ã®èŠäžèŠã¯å¿
ãæ€èšããè¡ãå Žåã§ãå¿
èŠæå°éã§è¡ãã å¿
ã客芳çã«å€æã§ããäºå®ãããŒã¿ãçšããŠèªããç¡é§ã«æéãæµªè²»ãããªãã æ¥æ¬ã§ã®åãçµã¿ 广çãªããŒãã£ã³ã°ãå®è·µããããã«è²ã
æ€èšãå®è¡ããŸããã ããŒãã£ã³ã°ã¯æ¥µååã 1æéã§ã¯ãªã30åã§ã§ãããã®ã¯30åã§çµãããã æ©ãçµããã°ãçµããæ¬¡ç¬¬è§£æ£ãã ãã£ããã«æžãã°çµããããšã¯æžããŠçµãããã æžãæ¹ãæéãããããªããããã£ãš5åçšåºŠã®äŒè©±ãã å¿
ãäžã€ã®ææšãã¿ããªã§èŠãŠåè°ãã ãªã©ã§ãã ãªã³ã©ã€ã³ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãå¿
é ãšãªã£ããªããããŒãã£ã³ã°ãå¿
èŠãªå Žé¢ã¯å¢ãããªããªãé£ãããšããã¯ãããŸããããä»åŸãç¶ç¶ããŠæ¹åããŠãããããšæããŸãã éæã®å€æ¹ãã¿ããªã§æ¥œããïŒ éæã®å€æ¹ã¯ãAll Handsããšãããåã°ã«ãŒããèªåãã¡ã®åãçµã¿ãå
±æããäŒãéå¬ãããŠããŸããã ãã ã®å
±æäŒãéå¬ãããã®ã§ã¯ãªããäŒå Žã§ã¯ããŒã«ãšãã€ãŸã¿ãçšæãããŠãããã¿ããªããã¢ã§è¶³ã䌞ã°ããŠåº§ããªãããªã©ãã¯ã¹ããŠèããŠããŸããããããªãã©ã³ã¯ãªäŒãªã®ã§ã質åãã©ãã©ãé£ã³äº€ããèãæ¹ãçºã«ãªããããã¬ãŒã³ããåŽããã³ã·ã§ã³ãäžãããšãã£ã楜ããäŒã ã£ãã®ãèŠããŠããŸãã ãŸãæã«ã¯ãèããŠããã¡ã³ããŒããã©ããŒã«å
¥ã£ããããŠãå
šç€Ÿã§ã®äžäœæããããéžæã§ããŠãããšæããŸãã ç§ãäžåºŠãLIFULLã§ã®åãçµã¿ã§ããã ã¯ãªãšã€ã¿ãŒã®æ¥ ããå
±æããŸããããå€ãã®è³ªåããããããããã¡ã§ããã£ãŠã¿ããããªãšèšã£ãŠãããã倧ããªéææãåŸãããã®ãèŠããŠããŸãã ãã ããã®ãAll Handsããžã®æºåã¯éå¶ããŒã ãšããªãç¶¿å¯ã«ãããŸãããäžèŠãã©ã³ã¯ã«é©åœã«éãŸã£ãŠååŸã®äžæã楜ããéããããïŒã£ãŠæããªãã§ãããå
šå¡ã§éãŸãæå³ããã£ããæããåå è
ã«ãšã£ãŠæçŸ©ã®ããæéã«ããããšãžã®ãã ããã¯ããªã匷çã§ããã åŠã³ ã¿ããªã§åãæéãéããããšã倧äºããã®æéãæå¹æŽ»çšããããšããããæŽç·Žãããçµç¹ã¥ããã«ãã€ãªããã æ¥æ¬ã§ã®åãçµã¿ LIFULLã§ã¯ä»¥åãããããŒã ãã«ãã£ã³ã°ã®äžè²«ã§äžã€ã®äºã«ã¿ããªã§åãçµããšããä»çµã¿ã¯ãããŸããããã®å€ãã¯ç©ççã«äººãšäººãæ¥ãåãããšã§å®çŸããŠããã®ã§ãããä»åãªã³ã©ã€ã³ã§å®çŸãããããšãå¿
èŠãšãªã£ãŠããŸããã ããã§ä»åã ãšã³ãžãã¢ã®ãŠãããç·äŒãç¹å®ã®ããŒã¯å
容ã«ã€ããŠäŒè©±ãããäŒã«ããŠã¿ã ãšãã£ãæ°ãã詊ã¿ãè¡ããŸãããç°ãªãã°ã«ãŒãã®ã¡ã³ããŒéããåãæéãéãããªããæèŠã亀ããããšã§ãããçžäºçè§£ãšç¹ããã匷ãããããšãã§ãããšæããŸãã www.lifull.blog ãŸãšã åž°ä»»ããŠ2幎çµã¡ãã¹ãã€ã³ã§ã®çµéšãšåŠã³ãããšã³ãžãã¢ãããŒãžã£ãŒãšããŠäœãèãã©ãåããã®ããæžãç¶Žã£ãŠã¿ãŸããã ç§ã®å Žåã¯æµ·å€ã®äŒç€Ÿã«è»¢è·ãããããªãã®ã ã£ãã®ã§ãèšèã®éãã«å§ãŸããæåã®ã®ã£ããããã€ã³ãã®éãã§èŠåŽã¯ããŸããããããããããä¹ãè¶ããããšã§æ°ããåŠã³ãåŸãããæ¥æ¬ã§ã®åãçµã¿ã«ç¹ãã£ããšæããŠããŸãã LIFULLã®ãšã³ãžãã¢ã«ã¯æµ·å€ã§ã®çµéšãç©ãã§ã¿ãŠã»ãããšæããŸããä»ã®ç¶æ³äžãçŸå°ã«è¡ãããšã¯é£ãããªã£ãŠããäžæ¹ããªã³ã©ã€ã³ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯æ Œæ®µã«åãããããªã£ãŠããŸããæµ·å€ã®ã«ã³ãã¡ã¬ã³ã¹ãªã©ãªã³ã©ã€ã³ã§éå¬ãããŠãããã®ã¯å€æ°ããã®ã§ãã¢ã³ãããåºããŠæ§ã
ãªäŸ¡å€èгãåãçµã¿ãåŠã³ãæ¥ã
ã®ä»äºã«æŽ»ãããŠããããããšæããŸãã æåŸã« åŠã³ããã®åãçµã¿ãå
±æãããŠããã ããŸããããå®éã«ãåãçµã¿ããããŠãããã®ã¯ãä»ã§ããªããšã³ãžãã¢ã®ã¿ããªã§ãã倧ããªå€åãžã®é©å¿ãã倧ããªäºãäžäººã§æãéããã®ã¯è³é£ã®æã§ããã¡ã³ããŒã²ãšãã²ãšãã®ååãªãããŠã¯æãåŸãŸããã ãããããããšã³ãžãã¢ãOne TeamãšããŠæŽ»èºã§ããå Žãåµããå
±ã«åç£ç¢ç£šããŠæé·ããŠãããçµç¹ãåµã£ãŠè¡ããããšæããŸãã
ããã«ã¡ã¯ïŒãšã³ãžãã¢ã®çŸéЬã§ãïŒVite 䜿ã£ãŠã¿ãŸããïŒ ã¯ããã« ãã£ãããš ãã£ãŠããªãããš éçºã®èª²é¡ åšèŸºç°å¢ã®èª²é¡ ã¬ã¬ã·ãŒ JS ãã®ãã®ã®èª²é¡ ESModules ããªã JS ã®äŸåã JS å
ã§å®çµããªã èŠæ
£ããªããããã¿ã€ããã§ãŒã³ Road to ESNext å°å
¥ããããŒã« Vite JSDoc ESLint Prettier TestCafe Vite ã§å¬ããã£ãããš çéãã«ã ç°¡çŽ ãª Config ã¬ã¬ã·ãŒãã©ãŠã¶å¯Ÿå¿ æžãæãã§èŠåŽããç¹ Vite Backend Integration module/nomodule ã«ããåé¡ jQuery ææ ãããã« PR ã¯ããã« æ°èŠ PJ ã§ã¯è¿·ããã¢ãã³ãªç°å¢ãéžæããŸãããããçŸå®ã«ã¯æ¢åã®ã³ãŒããæµçšã»ä¿®æ£ããŠãããªããŠã¯ãªããªãããšããããšæããŸãã æšæºã«è¿œåŸãã¢ãã³ãªåšèŸºããŒã«ã®æ©æµãåããããããã«ããã¹ã ãŒãºã«éçºãç¶ç¶ãããã¹ããããã³ããšã³ãã®æ¹åæœçãè¡ããŸããã ãã£ãããš ES5âESNext ã®æžãæããè¡ã£ã Vite ã® Backend Integration ã䜿çšãã åšèŸºããŒã«ãæŽãã Formatter - Prettier Linter - ESLint E2E Test - TestCafe Type Annotation - JSDoc ãã£ãŠããªãããš TypeScript ã®å°å
¥ 宣èšç UI ã®å°å
¥ ãã¶ã€ã³ã®å·æ° éçºã®èª²é¡ 察象ã®ãµãŒãã¹ã¯ããã€ã¯ããµãŒãã¹ãšããŠã¡ã€ã³ã®ã¢ããªã¹ããåãåºããã8 人ã®ããŒã ã§éçºããŠããŸãããåãåºããã¯è¯ããã®ã®ãæ°èŠã³ã³ãã³ãããŒãžã®äœæçãããããšãµãŒãã¹ã®éçºã¯é²ãã®ã«å¯Ÿããéçºç°å¢ã®ã¡ã³ããã³ã¹ã¯ç¹ã«ãããŠããªãç¶æ³ã§ããã åšèŸºç°å¢ã®èª²é¡ éçºããŒã«ãããã£ãŠãããã å¹çã®è¯ãéçºãè¡ãããšã¯èšããããç¶æ³ã§ããã ãã«ãããŒã«ããªã ãã©ã³ã¹ãã€ã©ã¯ãªããçã® ES5 ãæžãããŠããŸããã ãã³ãã«ããŒã«ã¯ YUI Compressor ã䜿çšãããŠãããbundle, minify ã¯ãããŠããŸããã JS ã®äŸå㯠HTML ãã³ãã¬ãŒãã«ãŠç®¡çãããŠãããããã«ããç¶æ
ã§ã ã©ã€ãã©ãªã¯ npm ã§ç®¡çãããŠãããçãã¡ã€ã«ãååšããç¶æ
ãã©ã€ãã©ãªã®ã¢ããããŒããé£ããç¶æ
ã§ããã èªåãã¹ããååã§ãªã äž»èŠãªæ©èœã確èªãã E2E ãã¹ãã¯ãã£ãã®ã§ãããJS ãšã©ãŒãç¶²çŸ
ã§ãããããªãã¹ãã¯ãªãã ã»ãã®éšåã§ã¯ã»ãŒæåã§ãã¹ããè¡ãããŠããŸããã äžååãªéçè§£æ äžå¿ Linter 㯠JSLint ãå°å
¥ãããŠããŸããããååãªéçè§£æã¯è¡ããŠããªãç¶æ³ã§ãããïŒåŸè¿°ïŒ ESModule ã§ã®èšè¿°ãéçã«è§£æãããã£ãããšããããESLint ã«ä¹ãæããå¿
èŠããããŸããã ïŒJSLint ããã®æœçäžã«å€§ããã¢ããããŒããæ¥ãŠããŸãããESLint ã«ä¹ãæããŸããããïŒ ã¬ã¬ã·ãŒ JS ãã®ãã®ã®èª²é¡ å€ããªã£ã JS ãæžãç¶ãããšããããšã¯ãJS ã®é²åã®æ©æµãæŸæ£ãç¶ãããšããããšã§ãã ES2015 以åã® JS ã§ã¯ â ã®ãããªåé¡ãæ±ããŠããŸããã ESModules ããªã JS ã®äŸåã JS å
ã§å®çµããªã < script src = "jquery.js" ></ script > < script src = "common.js" ></ script > < script src = "app.js" ></ script > äŸå㯠HTML ãã³ãã¬ãŒãã«çŽæ¥æžããŠç®¡çãããŸãã import, export ã®æ§æã¯äœ¿ãããã©ãã©ãã°ããŒãã«ã¯æ±æãããŠããã èªã¿èŸŒã¿é åºãèªã¿å¿ãã«ãã床ã
ãšã©ãŒãèµ·ããJS ãæžããåŸ HTML ãéããšã©ãŒã確èªããå¿
èŠããããŸãã èŠæ
£ããªããããã¿ã€ããã§ãŒã³ someClass.prototype.say = function () { console.log( "hello" ); } ; æ¬ãµãŒãã¹ã§ã¯ãããé¿ããããšããŠç¬èªã®ãã¡ã¯ããªé¢æ°ã®ãããªãã®ã«ãã£ãŠæ¬äŒŒ Class ãå®è£
ãããŠããŸããããã®çµæãååãªéçè§£æãã§ããªãç¶æ
ã«ãªã£ãŠããŸããã ãããã®åœ±é¿ã«ãããã¡ãã£ãš jQuery ãæšå¥šããŒãžã§ã³ãŸã§ã¢ããããŒããããã«ã圱é¿ç¯å²ã¯åããã¥ãããç¬èªã«å®è£
ãããå
容ãçŸåšã§ã¯äžèŠã§ããã¯ãã®åŠç¿ã³ã¹ããçãã§ããããšãªã©è¯ãç°å¢ãšã¯èšããªãç¶æ³ã§ããã Road to ESNext å¹çã®è¯ãéçºãè¡ããŠããªããšå€æãããJS æ¹å PJ ãç«ã¡äžãããESNext ãžã®æžãæããå§ãŸããŸãããããã¯æ¥ã«åãçµã¿å§ãããããã®ã§ã¯ãããŸããã§ããã ES5 ã§ãã®ãŸãŸéçšãããŠããèæ¯ãããåããããã«ã ãããŸã§ã¯äºæ¥ãšããŠã®éçºã«æ¯ãåãããŠããç¶æ
ã§ããã ãããæšå¹ŽããããåŸã
ã«éçºç°å¢æ¹åã®åãããããæ¹åã®æèãé«ããŠããå
ã®æ¬æœçã§ããã æ¬¡ã®ãããªæ®µéãèžãã äžã§æžãæãã«è³ããŸããã ããã³ããšã³ããã¹ãç°å¢æ¹åã®åããåºå§ãã ãŸãã¯ãã¹ãäžè¶³ããã¢ãããŒããããŸãããTestCafe ã§ã® E2E ãã¹ããæŽããããäž»èŠãªæ©èœããã¹ãã§ããããã«ãªããŸããã TestCafe ã CI ã§åãå§ãã æ¯æãšãããã€æã« E2E ãåãããã«ãªããŸãããCodeBuild ã§åããŠããŸãã E2Eテストをクラウド移行したお話 - LIFULL Creators Blog TestCafe ã§å
šããŒãžã® JS Error ãæŸãããã«ãªã å
šããŒãžã§ååããŒãæã® JS ãšã©ãŒãæŸãããã«ããŸããã ãªããžããªå
ã®äœ¿çšãããŠããªãã³ãŒããã²ããã grep ããŠåé€ ESNext åããåã«äžèŠãªã³ãŒãã¯åé€ããŠãããŸããã 幞ããªããžããªã«é
眮ãããŠãã jQuery ãã©ã°ã€ã³ãèªäœã©ã€ãã©ãªã®å€ãã¯äœ¿ãããŠããªããããã¯éå®çãªäœ¿ããæ¹ãããŠããã®ã§ããããåé€ã§ããŸããã ãã«ãããŒã«å°å
¥ãæ€èšããã ãã©ã³ã¹ãã€ã©ã®ã¿å°å
¥ããããšãæ°ç°å¢ãäœæããããšãçãæ€èšããäžã§ ããŒãã³ãã«ããŒã«ã§ãã Snowpack, Vite ã®ãã¡ Internet Explorer 察å¿ã容æãã€å¢ããæãããã Vite ã«æ³šç®ãæ¡çšããããšã決ããŸããã ESLint, Prettier ãèšå® æ¢åã® JS ã® ESNext åã®éãããŒã«ã§äžæ¬çœ®æãããã«ããŠããããã¹ãã¯ãªãã®ã§æå確èªãå¿
èŠã«ãªã£ãŠããŸããŸãã ãŸããVite ãæ¡çšããã«ããã£ãŠ ESModules ã«æžãæããå¿
èŠããããŸãã å
šéšæžãæããããšã«æ±ºããã®ã§ãæå€§éã«ããŒã«ã掻ãããŠæžãæããè¡ãã¹ãåšèŸºããŒã«ãæŽããŸããã ESNext å æžãæã察象㯠3 äžè¡ã»ã©ãããŸããããç€ç³ãªäœå¶ãæŽã㊠ã¬ãã¥ãŒ 1 人æžãæã 2 人ã®èš 3 人ã§ã®æäœæ¥ã§ JS ãæžãæãã€ã€ãã¹ããäœæãããã¯ãŒãã¬ãŒãå®è¡ããŸããã å°å
¥ããããŒã« Vite https://ja.vitejs.dev Rails ã Laravel ãšãçµã¿åãããããšãã§ããŸãã バックエンドとの統合 | Vite JSDoc ããšããš JSDoc ãæžãæåã¯ãã£ãã®ã§ãã®ãŸãŸæ¡çšããŸãããä»å TypeScript ã¯å°å
¥ããŠããŸãããåããã£ããå®ã£ãŠããŸããtsc ã® checkJs ã«ãã£ãŠåãã§ãã¯ãè¡ãããšãã§ããŸãã ESLint eslint-plugin-jsdoc JSDoc ã§äžæ£ãªèšè¿°ããã£ãå Žåã«æ€æããŸãã eslint-plugin-import ååšããªããã¹ãã¢ãžã¥ãŒã«ãæå®ããæã«æ³šæããŠããããããŸãã eslint-import-resolver-alias import ãšã€ãªã¢ã¹ãèšå®ããŠããã®ã§å¯Ÿå¿ããŸãã eslint-plugin-prettier Prettier ã®ãšã©ãŒã ESLint ã®ãšã©ãŒãšããŠè¡šç€ºããŸãã Prettier Why Prettier? · Prettier TestCafe E2E ãã¹ããè¡ããŸããã¯ãã¹ãã©ãŠã¶ã«åŒ·ããã»ããã¢ããã容æã§ãã Cross-Browser End-to-End Testing Framework | TestСafe Vite ã§å¬ããã£ãããš çéãã«ã åŸæ¥ã®ãã«ãããŒã«ãå°å
¥ãããšååäœã§åŸ
ã¡æéãçããŠããŸããŸãã ããã esbuild ã®ãããªé«éãã«ãããŒã«ããã® Vite ãªã©ã®ããŒãã³ãã«ããŒã«ã«ãããã®åŸ
ã¡æéã¯å€§å¹
ã«ççž®å¯èœã«ãªããŸããã Vite ã§ã¯éçºç°å¢åãã«ã¯ Native ESM ãæŽ»ãã JS ããã«ãããã®ã§åŸ
ã¡æéãã»ãŒãããŸããã 3 ç§ã§éçºéå§å¯èœã§ãã ç°¡çŽ ãª Config postCSS, esbuild, Rollup ãšå
å
ããŠããã®ã§ Vite ããé¢åãã¿ãŠããã°ãã«ãç°å¢ãæŽããããŸãã èšå®ãã¡ã€ã«ãç°¡çŽ ã§ãpackage.json ãã·ã³ãã«ã§ããããšãè¯ããšããã§ã¯ãªãããšæããŸãã vite.config.js import legacy from "@vitejs/plugin-legacy" ; import glob from "glob" ; export default defineConfig( { plugins: [ legacyPlugin( { targets: [ "ie >= 11" ] , } ), ] , resolve: { alias: { pc: "/assets/js/pc" , sp: "/assets/js/sp" , common: "/assets/js/common" , } , } , build: { manifest: true , rollupOptions: { input: glob.sync( "**/js/**/entry.js" ), } , outDir: "out" , assetsDir: "js" , } , server: { port: 3000, hmr: { protocol: "ws" , host: "localhost" , } , } , } ); package.json " dependencies ": { " @vitejs/plugin-legacy ": " ^1.5.0 ", " vite ": " ^2.4.4 " } ã¬ã¬ã·ãŒãã©ãŠã¶å¯Ÿå¿ SPA ã§ã¯ãªã MPA ã§ããã容æã«å°å
¥ããããšãã§ãã ã¬ã¬ã·ãŒãã©ãŠã¶å¯Ÿå¿ããã©ã°ã€ã³ãèšå®ããŠç°¡åã«è¡ããŸããã github.com ã©ã€ããªããŒããããããšãæ Œæ®µã«éçºäœéšãåäžãããŠãããŸãã ïŒHMR ãŸã§ããã JQuery ã䜿çšããŠããã®ã§ä»ã¯æŽ»ããããŠããªãïŒ æžãæãã§èŠåŽããç¹ Vite Backend Integration ã¬ã€ã ã«ããããã«ç°¡åã«ãšã³ããªãŒãã€ã³ãã®ã¿æå®ããããšã§åäœããŸãããNative ESM ã«ããèªã¿èŸŒã¿ãè¡ããããã RTT ãçããŸããåé¿ããã«ã¯ãVite ããåºåããã manifest.json ããäŸåãã¡ã€ã«ã蟿ããpreload directives ãã¿ã°ã SSR ããŠããå¿
èŠããããŸãã manifest.json { " assets/main.js ": { " file ": " main.5a48225c.js ", " src ": " assets/main.js ", " isEntry ": true , " imports ": [ " _moduleA.9fb6069d.js " ] } , " _moduleA.9fb6069d.js ": { " file ": " assets/moduleA.9fb6069d.js ", " imports ": [ " _moduleB.ead1d8b3.js " ] } , " _moduleB.ead1d8b3.js ": { " file ": " assets/moduleB.ead1d8b3.js " } } HTMLïŒSSRïŒ < script type = "module" src = "assets/moduleB.ead1d8b3.js" ></ script > < script type = "module" src = "assets/moduleA.9fb6069d.js" ></ script > < script type = "module" src = "assets/main.js" ></ script > module/nomodule ã«ããåé¡ type=module ã§ã¯åžžã« use strict ã¢ãŒããšãªãã®ã§æ³šæãå¿
èŠã§ãã ãŸãããããã¬ãã«ã® this 㯠global ã§ã¯ãªã undefined ãè¿ãããã«ãªããŸãã ECMAScript® 2022 Language Specification æ¢åã®ã©ã€ãã©ãªã§æäžäœã«ãŠ this ãåç
§ããŠãããã®ã window ã«å€ããå¿
èŠããããŸããã jQuery å
šæžãæãã®ã€ãã§ã« 1 ç³»ãã 3 ç³»ãžã®ã¢ããããŒããè¡ããŸããã VSCode ã§åãåç
§ãã€ã€éæšå¥šã®æ§æãåãé€ãããšãã§ã䟿å©ã§ããã VSCode ã«ãŠ unbind ãéæšå¥šã§ãããšææãããŠãã ææ 7.1 äžè¡ãã£ãJSããäžèŠãªJSãåé€ã㊠2.9 äžè¡ãESNextã«æžãæããŠæçµçã«ã¯ 1.2 äžè¡ã«ãŸã§æžããŸããã éçè§£æã匷åã«ãªã£ãã®ã§ã¬ãã¥ãŒã³ã¹ããåæžãããŸããã ããã±ãŒãžç®¡çãã§ããããã«ãªã£ãã®ã§å€éšã©ã€ãã©ãªãå°å
¥ãããããã¡ã³ããã³ã¹å¯èœã«ãªããŸããã ãããã« æšãŠãã§ãæ°ããäœããã€ããã§ããªããæšæºã«å¯ããè² åµãçž®å°ãããšããéžæããšããŸããã é²åãç¶ããæè¡ã«è¿œåŸãã€ã€ããŠãŒã¶ãŒã«ããšã³ãžãã¢ã«ãããããéçºãããŠãããããªãšæããŸãã PR ãã³ã·ã§ã³ã売ãæã LIFULL HOME'S ãžïŒ lifullhomes-satei.jp
ã¿ãªããããã«ã¡ã¯ãSET(Software Engineer in Test)ã® Ruey ã§ãã åŒSETããŒã ã®æŽ»åãšããŠãèªåãã¹ãã®å®æœäŸé ŒãåããŠããŸãã æè¿ã¯å€§èŠæš¡ãªç¯å²ã«ããŒãžå
ã®ç¹å®ãªèŠçŽ ã远å ããæœçã®èªåãã¹ãã察å¿ããŸããã ãã¹ãå
容ã¯URLãžã¢ã¯ã»ã¹ããŠç¹å®ã®ã¿ã°ããããã確èªããããšãªã®ã§ãããŒã¿é§ååãã¹ãã§å¯Ÿå¿ããŸããã éçºããŒã ã®å®è£
åŸããã¡ãããããŒã¿é§ååãã¹ãã宿œããçµæãå ±åãã圢ã«ãªããŸãã ãã¹ãçµæå ±ååŸã«éçºããŒã ã¯ãã°ä¿®æ£ãè¡ãããã¹ãŠã®ãã¹ãã±ãŒã¹ãPassãããŸã§ãåãã¹ãâ¡ïžåä¿®æ£ãã®ç¹°ãè¿ããè¡ããŸããã ãã¹ãŠã®ãã¹ããå®è¡ãããšå®è¡æéãããããã£ãŒãããã¯ãé
ãããããåå倱æãããã¹ãã±ãŒã¹ã®ã¿ãåå®è¡ãããã§ãã ãªã®ã§ããã®ãããªä»çµã¿ããã£ãæ¹ã察å¿ãããããšèããŸããã ä»åã®èšäºã§ã¯ãããŒã¿é§ååãã¹ãã«ãããŠå€±æãããã¹ãã±ãŒã¹ã®ã¿ãåå®è¡ã§ããä»çµã¿ã玹ä»ããããšæããŸãã ç®æ¬¡ ç®æ¬¡ ããŒã¿é§ååãã¹ãïŒData-driven testingïŒãšã¯ïŒ ããŒã¿é§ååãã¹ãã®äŸ ãã¹ãããŒã¿ sample-data.json ãµã³ãã«ã³ãŒã data-driven.js ã©ã®ãããªåå®è¡ã®ä»çµã¿ãå¿
èŠãïŒ å€±æãããã¹ãã±ãŒã¹ã®ã¿ãåå®è¡ã§ããä»çµã¿ äžé£ç¶ã®ãã¹ãåå®è¡ãå®çŸããä»çµã¿ã®äŸ ãã¹ãããŒã¿ sample-data.json ãµã³ãã«ã³ãŒã data-driven.js æåŸã« ããŒã¿é§ååãã¹ãïŒData-driven testingïŒãšã¯ïŒ ä»çµã¿ã説æããåã«ããŸãã¯ããŒã¿é§ååãã¹ãã«ã€ããŠå°ã玹ä»ããŸãã ISTQBã®çšèªéã®èª¬æ ã§ã¯ ã¹ã¯ãªããèšè¿°ææ³ã®ã²ãšã€ããã¹ãã¹ã¯ãªããã®å®è¡ã«å¿
èŠãªãã¹ãããŒã¿ããã³æåŸ
çµæãå«ãã ããŒã¿ãã¡ã€ã«ã䜿ãã ãšå®çŸ©ããŠããŸãã ä»åã®æœçã«ããããã¹ãã§ã¯ã2000åçšåºŠã®URLãžã¢ã¯ã»ã¹ããŠåããŒãžå
ã«åããããªæ€èšŒãè¡ããŸãã ãªã®ã§ããã¹ãå®è¡ã¹ã¯ãªãããäžã€çšæããŠãåŸã¯å€§éã®ãã¹ãããŒã¿ã«èšèŒããŠããURLãšæåŸ
å€ãå©çšãããURLãžé·ç§»â¡ïžæåŸ
倿€èšŒãã®ã«ãŒãã§å¯Ÿå¿ããŸãããŸãããããŒã¿é§ååãã¹ãã«ãªã£ãŠããŸãã ããŒã¿é§ååãã¹ãã®ãã€ã³ããšããŠãæ€èšŒã®éšåãå
±éåããããšã倧äºã§ãããã¹ãã±ãŒã¹æ°ã¯å€§éã«ãªãã®ã§ãå
šãŠåãæ€èšŒé¢æ°ã䜿ãããšãã§ããã°å®è£
ãæ¥œã«ãªããŸãã ããŒã¿é§ååãã¹ãã®äŸ ããã¯URLããšã«ããŒãžHTMLã®titleã¿ã°ã®å
容ã確èªããäŸã玹ä»ããŸãã ãã¹ãããŒã¿ JSONåŒã§URLãštitleã¿ã°ã®æåŸ
å€ãå
¥ã£ãŠããŸãã sample-data.json [ { " url ": " https://devexpress.github.io/testcafe/example ", " expectedTitle ": " TestCafe Example Page " } , { " url ": " https://testcafe.io ", " expectedTitle ": " Cross-Browser End-to-End Testing Framework | TestСafe " } , { " url ": " https://testcafe.io/documentation/402632/reference ", " expectedTitle ": " Reference | Docs " } ] ãµã³ãã«ã³ãŒã TestCafe ãšãããã¹ããã¬ãŒã ã¯ãŒã¯ã§æžããŠããŸããããŒã¿é§ååã«å¯Ÿå¿ããŠããŸãã®ã§ãç°¡åã«å®è£
ãã§ããŸãã data-driven.js import { Selector } from 'testcafe' ; const dataSet = require( './sample-data.json' ); fixture `Data-Driven Tests` dataSet.forEach(data => { test(`Testing for '${data.url}' `, async t => { await t .navigateTo(data.url) .expect(Selector( 'title' ).textContent).eql(data.expectedTitle); } ); } ); ã·ã³ãã«ãªã³ãŒãã§sample-data.jsonã«ãã3ã€ã®ããŒã¿ãã«ãŒãããŠç¢ºèªããããšãã§ããŸãã TestCafeå
¬åŒãµã€ãã®åURLãžã¢ã¯ã»ã¹ããããŒãžã¿ã€ãã«ã«ããããã¹ããšJSONããŒã¿ã«ããæåŸ
å€ãäžèŽããŠããããæ€èšŒããŸãã ã©ã®ãããªåå®è¡ã®ä»çµã¿ãå¿
èŠãïŒ äžèšã®äŸã§ã¯3ã±ãŒã¹ãããªãã§ãããä»åã®æœçã§å®æœãããã¹ãã¯2000ã±ãŒã¹ã»ã©ãããŸããã ãããŠãäžåç®ã®ãã¹ãã§ã¯200ã±ãŒã¹ã»ã©å€±æããŸããã ãã®çµæãéçºããŒã ã«å ±åããéçºããŒã ãåä¿®æ£ãè¡ã£ãåŸãåå倱æãã200ã±ãŒã¹ã®ã¿ãåå®è¡ããããšã«ãªããŸããã TestCafeã ãšããã¹ãã±ãŒã¹åãæå®ããŠå®è¡ããæ©èœããããŸããã200ã±ãŒã¹ãçŽæ¥æå®ããªããšãããªãã®ã§ããªã倧å€ãªäœæ¥ã«ãªããŸãã ãã®ãããªå Žåã«ã 倱æãããã¹ãã±ãŒã¹ã®ã¿ãåå®è¡ã§ããä»çµã¿ ããå¿
èŠã§ãã â» æ¬èšäºã§ã¯å€±æãããã¹ãã±ãŒã¹ã®ã¿ã®åå®è¡ã®èª¬æãªã®ã§ç¹ã«æžããŠããŸãããããã°ä¿®æ£åŸã«ã¯å
šãŠã®ãã¹ãã±ãŒã¹ãéããã確èªãã¹ãã§ãã 倱æãããã¹ãã±ãŒã¹ã®ã¿ãåå®è¡ã§ããä»çµã¿ ãã¹ããã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠã¯ã倱æãããã¹ãã±ãŒã¹ããããããèšå®ããæ¡ä»¶ã«æ²¿ã£ãŠãã®å Žã§åå®è¡ããæ©èœããããŸãã (Testcafeã ãš Quarantine mode ) ãã ããä»åã®æœçã®ããã«ãéçºããŒã ãä¿®æ£â¡ïžåãã¹ãããç¹°ãè¿ããããªãã¿ãŒã³ã§ã¯ããã®æ©èœã¯ããããªãã§ãã ãã®ãããªãã¿ãŒã³ã®ããšããããã§ã¯ äžé£ç¶ã®ãã¹ãåå®è¡ ãšåŒã¶ããšã«ããŸãã äžé£ç¶ã®ãã¹ãåå®è¡ãå®çŸããããã«ã¯ãååã®å®è¡çµæã®èšé²ãå¿
èŠã§ãã åå®è¡ã®éã«èšé²ã確èªããããšã§ãåå倱æããã±ãŒã¹ã®ã¿å®è¡ããããšãåºæ¥ãŸãã äžé£ç¶ã®ãã¹ãåå®è¡ãå®çŸããä»çµã¿ã®äŸ ä»åã¯JSONã®ããŒã¿ã«ååã®ãã¹ãçµæãèšé²ããéšåãå ããŠãäžé£ç¶ã®ãã¹ãåå®è¡ãå®çŸããäŸã玹ä»ããŸãã ãã¹ãããŒã¿ JSONããŒã¿ã¯ç¶æ
èšé²çšã®ãpassedãã远å ããŸããåæå€ã¯falseãèšå®ããŸãã sample-data.json [ { " url ": " https://devexpress.github.io/testcafe/example ", " expectedTitle ": " TestCafe Example Page ", " passed ": false } , { " url ": " https://testcafe.io ", " expectedTitle ": " Cross-Browser End-to-End Testing Framework | TestСafe ", " passed ": false } , { " url ": " https://testcafe.io/documentation/402632/reference ", " expectedTitle ": " Reference | Docs ", " passed ": false } ] ãµã³ãã«ã³ãŒã ãµã³ãã«ã³ãŒãã¯å®è¡ã®åã«ãã¹ãã±ãŒã¹ã®å®è¡ç¶æ
ã確èªããŠãifæã§å®è¡ãããã¯å®è¡ããªãã倿ããŸãã ãŸãæåŸã¯å®è¡æåæã«ç¶æ
ãJSONãã¡ã€ã«ã«ç¶æ
ãæŽæ°ããŸãã data-driven.js import { Selector } from 'testcafe' ; const dataSet = require( './sample-data.json' ); const fs = require( 'fs' ); fixture `Data-Driven Tests` .after( async t => { fs.writeFileSync( './sample-data.json' , JSON.stringify(dataSet, null , 2)); } ); dataSet.forEach(data => { if (!data.passed) { test(`Testing for '${data.url}' `, async t => { await t .navigateTo(data.url) .expect(Selector( 'title' ).textContent).eql(data.expectedTitle); data.passed= true ; } ); } ããã§ãã¹ããã¬ãŒã ã¯ãŒã¯ã«äžé£ç¶ã®ãã¹ãåå®è¡ã®æ©èœããªãã§ãã ãã¹ãããŒã¿ã«ååã®å®è¡çµæã远å ããããšã«ããã倱æããã±ãŒã¹ã ããåå®è¡ã§ããä»çµã¿ãç°¡åã«å®çŸã§ããŸãã æåŸã« ãã®åå®è¡ã§ããä»çµã¿ãå©çšããããšã§ãä¿®æ£åŸã®ããŒã¿é§ååãã¹ããç°¡åã«è¡ãããšãã§ããŸããã åå®è¡ããããã¹ãã±ãŒã¹ã®çŽæ¥æå®ã®å€§éãªäœæ¥ããè§£æŸã§ããŸããã ã±ãŒã¹æ°ãéåžžã«å€ãããŒã¿é§ååãã¹ãã§ã®äžé£ç¶ã®ãã¹ãåå®è¡ãå¿
èŠãªæã«ããã®ä»çµã¿ã¯ãšãŠã圹ã«ç«ã¡ãŸãã ããã¿ãªãããåããããªããŒã¿é§ååãã¹ãã宿œããæ©äŒãããã°ããã®ä»çµã¿ãåèã«ãªãã°å¹žãã§ãã ä»åã®ãµã³ãã«ã§ç޹ä»ããTestCafeã«ã¯äžé£ç¶ã®ãã¹ãåå®è¡ã®ä»çµã¿ããªãã§ãããä»ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã«ã¯ãããããããŸããã ãã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãçŽæ¥å©çšããŠããããšæããŸãã æåŸã¯å®£äŒã§ãããåŒç€Ÿè£œã® Buckyã«ãäžé£ç¶ã®ãã¹ãåå®è¡ ã®æ©èœããããŸãã®ã§ããã²ãæ€èšãã ããïŒ ä»¥äžãããããšãããããŸããïŒ
å°å
¥ ããã«ã¡ã¯ãQAãšã³ãžãã¢ã®æéã§ãã çªç¶ã§ãããæ¹åæŽ»åã¯ã奜ãã§ããããã èªåã®æå±ããQAã°ã«ãŒãå
ã§SaPIDãšããæ¹åææ³ã®å®æœãè¡ããŸããã ããã§ã¯ãSaPIDã®ç޹ä»ãšå°å
¥ãååã®å£ã倱æãšå·¥å€«ã«ã€ããŠããäŒãããããŸãã   SaPIDãšã¯ SaPIDãšããååã¯ã S ystems a nalysis / S ystems a pproach based P rocess I mprovement metho D ããåœåãããŠããŸãã å
¬åŒãªèª¬æã以äžã«åŒçšããŸãã  SaPIDã¯ãåœäºè
èªãã ã·ã¹ãã æè ãæŽ»çšããŠå¯Ÿè±¡ã®ã¡ã«ããºã ãã·ã¹ãã ãšããŠæ§é çã«æããæã广çã§çŸå®çãªç®æããããã¯æ°ãã䟡å€åµåºã«æå¹ãªæœçã»å¯Ÿçããã¡ãææããããŠããããã®ææ³ã§ãã ç¹å®ã®å人ãå®è·µããããšãå¯èœã§ãããããŒã ãé¢ä¿è
ãçµç¹ã®ã¡ã³ããŒãåç»ãã ãã¶ã€ã³æè ã䜵çšããŠäžç·ã«æé·ããããããŠæ°ãã䟡å€ãå
±åµããæ¹æ³ã䜵ãæã€ã®ãSaPIDã®ç¹åŸŽã§ãã åŒçš : https://www.softwarequasol.com/sapid/ Â Â Â åºæ¬çã«ã¯å
¬åŒã®æç€ºããŠãã説æããèªã¿ããã ãã°ãã©ããªã³ã³ã»ããã§ã©ããªç¹åŸŽãããã®ãææ¡ã§ããããšæããŸãã  ãšã¯ããåç
§ããæ¹ãå
šå¡ã§ã¯ãªããšæããŸãã®ã§ã ç§ã®æãSaPID ãã©ããããã®ããç®æ¡æžãã«ããŸãã SaPIDãšã¯ã åœäºè
èªããäž»äœçãšãªãã åã
ã®æããŠãã課é¡ãæžå¿µãäžå®ãäžæºãæããªããã ãããã®èæ¯ãçã®èª²é¡ãæããã«ããŠã 課é¡ãšèª²é¡ã®å æé¢ä¿ïŒåå ãšçµæïŒãå¯èŠåãã æ¹åããã課é¡ãšãæ¹åããããã®æŽ»åã®æ€èšãæ¹åã§ããŠãããã®è©äŸ¡æ¹æ³ãã çŽåŸæããã£ãŠæ€èšã»æ±ºå®ããããšãã§ããææ³ ã§ãããšããã®ãç§ã®çè§£ã§ãã  åŸè¿°ããŸãããæ¹åã«ããã£ãŠåé¡è§£æ±ºãæ¥ããããŠäœã解決ãã¹ããåå³ããã«å¯ŸçãèããŠããŸãããšãå€ããšæããŸãã SaPIDã¯åççãã€æ¹åã«åãçµãããŒã å
šå¡ãçŽåŸæããã£ãŠé²ããããããã«ãªã£ãŠããããããé
åã ãšæã£ãŠããŸãã   ã³ã³ã»ããã¯äžèšã®éãã§ãã å
·äœçãªäžèº«ãšããŠã¯ãåã
ãæãã課é¡ãäºå®ã®é¢ä¿æ§ããã¡ãã® å³ ã®ããã«æããã«ããŠããŸãã 課é¡ãäºå®ã®é¢ä¿æ§ãå¯èŠåã§ããããå
·äœçãªæ¹åã®ã¿ãŒã²ãããç¹å®ãé¢ä¿æ§ããã©ã£ãŠæ ¹æ¬ããåé¡ã解決ããŠããææ³ã§ãã   å°å
¥ã®å£ãšä¹ãè¶ãæ¹ SaPIDçµéšè
ãããªã ååããç¥ã£ãŠãããã®ã®ãããŒã å
ã«SaPIDã®çµéšè
ã¯ãããå
·äœçã«äœãããã®ããããã£ãŠããªãç¶æ³ã§ããã ããã§ãšããããé°å²æ°ã ãã§ãäœéšããããšæãã SaPIDã®ååŒ·äŒ ãæ¢ããŠåå ããŠããŸããã ïŒconnpassã§æ€çŽ¢ãããšæè¿ã§ãSaPIDã«é¢ããå匷äŒã¯éå¬ãããŠããŸããïŒ Â Â ã¡ããã©å匷äŒã®äžèº«ãããã軜éåãããSaPIDã®ã¯ãŒã¯ã ã£ãããã ããŒã å
ã§å®æéå¬ãããŠããå匷äŒã§äœéšããŠããã¯ãŒã¯ãããã«è»œéåããçæéã§SaPIDã®é°å²æ°ãšèªåãé
åãæããèŠçŽ ã«çµã£ãŠããŒã ã«åºããŸããã   åŠç¿ã³ã¹ã ã©ããªææ³ã«ãèšããŸãããSaPIDãç¥ãããã«åŠç¿ã³ã¹ããããããŸãã SaPIDãåŠã¶ããã«ã¯ãŸãã¯æžç±ã§å
šäœåã®ææ¡ãããããããŸãã 现ããªå
容ãå®è·µããªããšããããªããããªTipsãå€ããããããŸãæšãèŠãã«æ£®ãèŠãããã«èªã¿é²ããããšãæšå¥šããŸãã   ããã«SaPIDãå®éã«äœéšãããããã«ãå匷äŒãæ¢ãã幎ïŒåçšåºŠéå¬ãããŠããå
¬åŒã®SaPID Bootcampãžã®åå ãããšãªãããã§ãããïŒåå è
ã¯æžç±ãå²åŒã§è³Œå
¥ã§ããŸãïŒã åè : SaPID Bootcamp SaPIDã¯ä»ãã¢ããããŒããããŠããããæžç±ã®æ
å ±ã¯SaPID Bootcampãå匷äŒã®å
容ãããå°ãå€ããªã£ãŠããŸãããèãæ¹ãã³ã³ã»ããã¯å€ãããŸããã Â Â åºæ¬çã«ã¯æžç±ãèªãã§å
šäœåãçè§£ããSaPIDãå®è·µãããšãã¯æžç±ãéããªãã现ããé²ãæ¹ãTipsãåç
§ãããšè¯ããšæããŸãã åŸã
å¿
èŠã«ãªã£ããåç
§ããããšä»ç®ã貌ããªããèªã¿é²ãããšããããã®ãããªç¶æ
ã«ãªããŸããã ããèŠããšããã»ã©å€ããªããšæããŸãã æžç±èªäœãé£è§£ãªç®æã¯ãªãããããµã¯ããšèªã¿é²ããããã¯ãã§ãã   ãŸããçåç¹ãæãã现ããããšã¯twitterã§ã€ã¶ããã°æèè
ãå
¬åŒããå©èšãããããããšãå€ãã§ãã  倱æãšå·¥å€« æéãããã£ãŠããŸã ããŒã ã®åŠç¿ SaPIDã®å°å
¥ã«ããããã¡ã·ãªããŒããåããäººãæžç±ãå匷äŒã§åŠç¿ã³ã¹ããæã£ãŠããããšæããŸãã ããããããŒã ã§è¡ãå Žåãå
šå¡ãSaPIDã®ããšãããçšåºŠç¥ããªããã°ãªããŸããã å
šå¡ã«æžç±ãèªãã§ãããå匷äŒãSaPID Bootcampã«ç³ã蟌ãã§ãããããã«ããããŸããã   ãã¡ã·ãªããŒããåãã人ãããã¯ãªããè¡ã£ãããåSTEPã®ã¯ããã«èª¬æãè¡ããªã©æåããµããŒããããã»ããè¯ãã§ãããã SaPIDã§ã¯åå è
ã®ããšãå°éããããšã倧äºã§ãããš æèš ãããŠããŸãã ä»®ã«ããæ¹ã«èª€ãããã£ãŠã倧ããªåé¡ã§ã¯ãããŸããã®ã§ãæ£ãããããåå è
ã®æ¹åãžã®ããæ°ãç©æ¥µæ§ãæãªããªãããã«é²ããŠãã ããã SaPIDã¯äžåºŠã§çµããã§ã¯ãããŸããã®ã§ãå°ã£ãããšãããã°ãã®æ¬¡ã®å®æœæã«æ¹åããã ãã®ããšã§ãã Â å®æœã®é·æéå ã©ããªããšã«ãèšããŸãããåããŠã®å®æœã«ã¯æéãããããŸãã ã²ãšã€ãã€æé ã確èªãããã課é¡ãæèŠãæããã«ããäœãèãããããèããæéãã ãã£ãŠ ããŸãã§ãããã ä»ã«ãSaPIDã® STEP2ã«ãããæ
å ±ã®ç²Ÿæ»ããSTEP3ã®æ§é å ãè¡ãéã®åæåœ¢æãæ§é å³ã®æŽçãªã©ãã³ããæŽãã°æ©ããªãã®ã§ããèŠé ãåŸããŸã§ã¯ã©ãããŠãæéãããããŸãã   æžç±ã®äžã§æãã課é¡ã®æ°ã®ç®å®ã«ã€ããŠçµéšäž20åçšåºŠãšèšåãããŠããã®ã§ããããã宿œãããšæ¬åœã«ãã®ãããã®æ°ãã¡ããã©ããã§ãã ã¯ããã®STEPã§èª²é¡ãå€ãäžãããšåŸã®STEPãã¹ãŠã«åœ±é¿ãåºãŠãããããåªå
é äœã¥ããããŠæããæ°ãçµã£ãŠããããªã©ã®å·¥å€«ããããšè¯ãã§ãããã æžç±ã®äžã«ã¯ãããã£ãTipsãéæã«æžãããŠãããããããç¹å®ã®STEPã§å°ã£ãå Žåã¯æ¹ããŠãã®ç« ãèªã¿çŽããŠã¿ããšãã³ããåŸããããããããŸããã   åèïŒæãã課é¡ãå€ããªããããŠè€éåããŠããŸã£ãå顿§é å³ Â Â ãã¡ã·ãªããŒã¿ãŒå
Œåœäºè
èªåãå«ããå°å
¥ãæšå¥šããç«å Žã®äººã¯ããã¡ã·ãªããŒã¿ãŒå
Œåœäºè
ã«ãªã£ãŠããŸãåé¡ããããŸãã é²è¡äžã¯å€§ããªåé¡ã§ã¯ãªãããããä»ã®åå è
ã¯èŠæ§èŠç䌌ã§é²ããããããã¹ã ãŒãºã«ãªãã®ã§ããã ãã¡ã·ãªããŒã¿ãŒããã¡ã·ãªããŒãã§ã¯ãªããSaPIDå
šäœã®æµãããã¡ã·ãªããŒã¿ãŒã®èããæ¹åã«èªå°ããŠããŸããã¡ã«ãªããŸãã   ååã§ããã°SaPIDã«æ
£ããããã«ãã®ãããªé²ãæ¹ã§ãæªãã¯ãªãããšæããŸããã æ
£ããŠããããããŸã§åå è
ã®æèŠãåŒãåºãããã課é¡ã®æ·±å ããé ããå¥ã®èª²é¡ãæŽãåºãããšã«å°å¿µããããæèããå¿
èŠããããŸãã ç§èªèº«ããããããŸãåºæ¥ãŠããèªä¿¡ã¯ãªãã§ãããåå è
ãå·»ã蟌ãã äžäººèå°ã«ãªããªãããã«åžžã«æèããŠããŸãã  åé¡è§£æ±ºæ
£ã ãšã³ãžãã¢ã§ãããããã®åé¡ãšããŠãæ®æ®µããåé¡è§£æ±ºã«æ
£ããŠããããšãæããããŸãã æ¥ã
ãæ§ã
ãªåé¡ã解決ããŠããããããã課é¡ãæããSTEPã§ã解決çãèããŠããŸããã¡ã§ãã åé¡ãæŽãåºããã§ãŒãºã§ã¯ãããŸã§åé¡ãæŽãåºãã«ãšã©ããåé¡ã粟æ»ããéãæ·±å ãã¯è¡ããŸãã解決çãŸã§èããŠããŸããªãããã«çæããªããã°ãªããŸããã æã
ã¯ã€ããããããã°ããã®ã§ã¯ãªãããããããªææ³ããããããããããã°è§£æ±ºããããšèããŠããŸããã¡ã§ãã ãã¡ã·ãªããŒããè¡ã人ãæèããã®ã¯ãã¡ãããåå è
ã«ãéœåºŠäŒããŠãããã»ããããã§ãã  ãããã« ä»åã¯SaPIDã«ã€ããŠã玹ä»ããŸããã æ¥ã
ã®æ¥åã«èª²é¡ãäžæºãäžå®ãæããããšãããã°ãSaPIDã®å°å
¥ãèããŠã¿ãŠã¯ãããã§ããããã ããŒã å
šå¡ã§å€§ã
çã«å§ããããšãé£ãããã°ãè³åããŠããã人ã ãã§å°ããåããŠå°ããã€åšå²ãå·»ã蟌ãã§ãããšããã§ãããã Â