ããã«ã¡ã¯ãBASEæ ªåŒäŒç€ŸData StrategyããŒã ã®æã§ãã ã·ã§ããã³ã°ã¢ããªãBASEãã§ã¯ãæ€çŽ¢ã«Amazon Cloudsearchã䜿çšããŠããŸãããä»åãæ€çŽ¢åºç€ãAmazon Elasticsearch Service(以äžãES)ã«ç§»è¡ããData StrategyããŒã ã§ç®¡çãããæ¹éã«ããŸããã ãã®èšäºã§ã¯ååãæŽæ°ãããéãªã©ã«ã©ã®ããã«æ€ç¥ããããŒã¿ãESã«ãããããã«ããããªã©ãåºç€ã®éšåãã¡ã€ã³ã«ã玹ä»ãããŸãã 1. èæ¯ æ€çŽ¢ã¯æ°ããã·ã§ããã«åºäŒããã£ãããäœã£ãŠãããããæ¢ããŠããååããã¡æ©ãèŠã€ããããšãã§ããããšãã§ããŸãã ãã®ãããæ€çŽ¢æ©èœã¯ã©ã®ECãµã€ããªã©ã§ãèŠãããååšã§ãããæŽ»çšããŠãã人ãå€ãã®ã§ã¯ãªãã§ããããã äŸãã°ã·ã§ããã³ã°ã¢ããªãBASEãã®æ€çŽ¢ã¯ãã®ãããªç»é¢ã«ãªã£ãŠããŸãã ãã®ããã«ããŸããŸãªäŸ¿å©ãããã£ãŠããæ€çŽ¢æ©èœã§ãããã·ã§ããã³ã°ã¢ããªãBASEãã§ã¯ç¶ç¶çãªæ€çŽ¢æ§èœã®æ¹ä¿®ãæ¹åãã§ããŠããªããšããåé¡ããããŸããã ãããã®èª²é¡ã«å¯Ÿããä»åæ€çŽ¢åºç€ã®ç§»è¡ãè¡ãããšã§æ€çŽ¢æ§èœæ¹åãžã®ç¬¬äžæ©ãé²ããŸããã 2. æ°åºç€ã®ç§»è¡ã«ã€ã㊠ä»åã®ç§»è¡ã¯Amazon CloudsearchããESãžããŒã¿ãç§»è¡ããã ãã«èŠããŸãã ããããå
éšçã«ã¯ç®¡çãData StrategyããŒã ã«ç§»è¡ãããããååãæŽæ°ãããéã«æ€ç¥ãããŒã¿ã®ååŸãåæãªã©å
šäœçã«æ°ããäœãçŽãå¿
èŠããããŸããã ãŸããå®éã«ç§»è¡èšç»ãé²ããŠãããšãæ§ã
ãªåé¡ã®å£ã«åœãããŸããã äŸãã° Data StrategyããŒã ã®ç®¡çã«å€ããããã«åç
§ããããŒã¿ããŒã¹ãå€ããå¿
èŠããã ããŒã¿ãå
šãŠããŒããçŽãå¿
èŠããã ååæŽæ°æã«ã§ããéããªã¢ã«ã¿ã€ã ã«æŽæ°ãããããã©ãå®è£
ããã¹ãã ååæ
å ±ã«é¢ããããŒãã«ããããããã ãªã©ãæããããŸãã ãããã®èª²é¡ãååšãããããææ¢ãã§logstashã詊ãããembulkã§ããŒã¿åæã詊ã¿ãããããªãããçŸåšã®åºç€ãäœããŸããã 2-1. ã·ã¹ãã æ§æ ä»åã¯ååæ€çŽ¢ã®ã¿ã®ç§»è¡ãããŸããããæ€çŽ¢ãè¡ãäžã§ååæ
å ±ã«é¢ããããŒãã«ã¯å€ããããŸãã ãŸãããããã®ããŒãã«ãããããæŽæ°ãèµ·ããéã«ESã«ãããŒã¿ãåæãããå¿
èŠããããŸãã ããããèæ
®ããæçµçã«ä»¥äžã®ã·ã¹ãã æ§æã§å®è£
ãè¡ããŸããã ååæ
å ±ã®æŽæ° 宿çã«åããŠããbatchãS3ããååèµ·åæ
å ±ãååŸ ããŒã¿æŽæ°ã®æç¡ã®ç¢ºèª æŽæ°åã®ããŒã¿ãååŸ ESã®ããŒã¿ãæŽæ° S3ãžæŽæ°åŸã®æ
å ±ãèšé² ãšããæµãã§åããŠããŸãããããçãæéã§ç¹°ãè¿ãããšã§ãªã¢ã«ã¿ã€ã ã«è¿ãééã§ããŒã¿ãæŽæ°ããããšãå®çŸã§ããŸããããã®ãçãæéãã¯å®æå®è¡æéãäœåæ¯ãšèšå®ããŠããããã§ã¯ãªããå¯èœãªæçæéã§åãããŠããŸãã S3ã«å
¥ã£ãŠããååèµ·åæ
å ±ã¯ããŒã¿åæãããŠããããŒãã«ã®ããããã®å®è¡æ
å ±ãèšé²ããŠããŸãããã®ãããªèšé²ãããéœåºŠååŸãããããšã§æ¥ã«DBã®åæãäžæããããªããªã£ãå Žåã«ããèªåã§åŸ©æ§ãããããªä»çµã¿ã«ãªã£ãŠããŸãã ããã«ãbatchã¯ããŒã¿ã®ååŸããESã®ããŒã¿æ¿å
¥ãŸã§å
šãŠPythonã§äœããŸããããã®Pythonã§ã®å®è£
æã«ããã€ãã®çްããèšå®ãããŸããã ãã¡ãã¯insertæã®ã³ãŒãäŸã§ãã es = Elasticsearch( ..., timeout=timeout # (1) ) retry_count = 0 while retry_count < retry_max: # (2) try : ... es.bulk(body) time.sleep( 1 ) # (3) break except BaseException : ... time.sleep( 1 ) retry_count += 1 (1) timeoutãæç€ºçã«æžã timeoutãæžããªãå Žåãããã©ã«ãã®ç§æ°ãšãªããŸããããããå®éã«åãããŠã¿ããšçšã«timeoutã«ãªãããšããããŸããã bulkæã«ã¯ãµã€ãºã§åºåã£ãŠããã®ã§ãããååæ
å ±ã¯åå説ææãªã©ãé·ãããšããããæ³å®ãããµã€ãºã倧ãããªã£ãŠããŸãããšããããŸããããã®éã«timeoutãçºçããŠããŸã£ãŠããã®ã§ããã䌞ã°ãããšã§timeoutã§ã®ãšã©ãŒã¯ãªããªããŸããã (2) retryåŠçãããã ãã¡ããåæ§ã«bulkæã®åŠçã§çšã«å€±æããããšããããŸããã ãããåãããŒã¿ãããäžåºŠè©Šããšæåããããšãå€ãã£ããããretryåŠçããããããšã§å¯Ÿå¿ãããŸããã (3) sleepãããã ä»åãååæ
å ±ãæŽæ°ããããæŽæ°åãå
šãп޿°ãã仿§ã§ãããã¡ããé »ç¹ã«èµ·ããããšã§ã¯ãããŸããããããæéã«å€§éã®ååæ
å ±æŽæ°ããããããšããããŸãã ãã®éã«çæéã«äœåºŠãbulkãè¡ããšãå
éšãã¥ãŒãæºãŸããããŠããŸãããšããããŸãããäžéå€ãè¶
ããå Žåãç Žæ£ãããŠããŸããããããŒã¿ãæ¬ æããŠããŸãæãããããŸãã ESã®èšå®ã§äžéå€ã倿Žãããšããææ®µããããŸãããäžéå€ãå€ããŠãéãéãäžéå€ãè¶
ããªããšããä¿èšŒã¯ãªãã£ããããã¹ããŒããç·©åãããããšã§å¯Ÿå¿ãããŸããã ãã®ããã«ããšãŠã现ããéšåã®èšå®ã§ã¯ãããŸããããããã®åŠçããããããšã§ããŒã¿ã®æ¬ æããªãã¹ã ãŒãºã«ESã«ããŒã¿ããããããã®ã·ã¹ãã ãå®è£
ããããšãã§ããŸããã 2-2. åæããŒã éåžžã®ååã远å ãæŽæ°ãããéã®ããŒã¿æŽæ°ã¯ã·ã¹ãã æ§æã§æžãããããªå
容ã§è¡ãããŠããŸãã ããããä»åESã«ã¯ååæ
å ±ããŒãã®ç¶æ
ããå§ãããããä»ãŸã§ã®ããŒã¿ãå
¥ãçŽãå¿
èŠããããŸããã 察å¿çãšããŠã¯ãå¥ébatchãäœãåæããŒãå°çšã®äœæ¥ãè¡ããŸããã åæããŒãã®batchã¯ä»¥äžã®ãããªæµãã§ããŒã¿ããããããã«ããŸããã ã¡ã€ã³ã®ååããŒãã«ä»¥å€ã¯äžæ°ã«å
šéšååŸ user_idãããã¯item_idããšã«ããŒã¿ããŸãšãã ååããŒãã«ãIDåºåãã§ããŒã¿ãååŸãã2ã®ããŒã¿ãšjoin ãããIDãå€ããªããç¹°ãè¿ãããšã§ä»ãŸã§ã®ããŒã¿ãå
šéšå
¥ããŸããã éåžžæã®ESã®insertã¯updateãããã¯deleteã䜿çšããŠããŸãããåæããŒãã§ã¯indexã䜿ãå°ãã§ãéããªãããã«ããŸããã 2-3. äŸå€ããŒãã« ã·ã¹ãã æ§æã§ãæžããããã«ãä»åååã«é¢ããããŒãã«ã¯å€ããããŸãã ããŒãã«ã«äœãããã®å€æŽã«èµ·ããéã«æŽæ°ãããããšããæ¹æ³ã§ããŸããããªãããŒãã«ãååšããŸããã å
·äœçã«ã¯ batchã§èšç®ããçµæãæ ŒçŽããããåæå»ã«äœåäžãäœçŸäžã®ã¬ã³ãŒããinsertãããããŒãã« æŽæ°é »åºŠããšãŠãé«ããçŽ1åéã«çŽã¥ãã¬ã³ãŒããäœåäžãäœçŸäžååšããããŒãã« ããããŸãã ãããã®ããŒãã«ã«é¢ããŠã¯ãäžã®åŠçãšã¯å¥ã®åŠçãå ããŠããŒãã«å
容ã®åæãè¡ãªã£ãŠããŸãã 2-3-1. batchèšç®çµæãæ ŒçŽããŠããããŒãã« ãã¡ãã«é¢ããŠã¯ãåžžã«insertãèµ°ã£ãŠããããã§ã¯ãªããdailyãweeklyãšãã£ãé »åºŠã§ãã£ãããšãããinsertæã«å
šãŠã®ããŒã¿ãæŽæ°ããã®ã§ã¯ãªããå°ããã€æŽæ°ãããæ¹éã«ããŸããã batchã§ã®èšç®çµæã®è¿œå 宿çã«åããŠããbatchãS3ããååããŒã¿ãååŸ IDåºåãã§ããŒã¿ãç¢ºèª ããŒã¿ãååŸ ååããŒã¿ãšã®å·®åãç¢ºèª å·®åçºçããŒã¿ã®ã¿ESãæŽæ° S3ãžæŽæ°åŸã®æ
å ±ãèšé² 倧ãŸããªæµãã¯éåžžåããŠããã·ã¹ãã ãšåæ§ã§ãããS3ã«ååã®ããŒã¿ãä¿åããŠããç¹ãšæŽæ°åå
šãŠãååŸããã®ã§ã¯ãªããIDåºåãã§ä»ã®æŽæ°ã®åŠšãã«ãªããªãéã«æããŠããç¹ãç°ãªããã€ã³ããšãªããŸãã ãã®ãããªå·¥å€«ãããããšã§ãä»ã®ããŒãã«ã®æŽæ°ã«ã圱é¿ãã§ããã¹ã ãŒãºã«æŽæ°ãããããšãå¯èœã«ãªããŸããã 2-3-2. æŽæ°é »åºŠãé«ãããŒãã« æŽæ°é »åºŠãé«ãããŒãã«ã®åé¡ç¹ãšããŠã¯ãåæå»ã«æŽæ°ããªããŠã¯ãããªãã¬ã³ãŒããå€ããbest effortã§ã®æŽæ°ãè¡ãªã£ãŠãããšã©ãã©ãè©°ãŸã£ãŠãããå
šäœã®æŽæ°ãé
ããªããšããããšããããŸããã æŽæ°ã¬ã³ãŒããå€ããæŽæ°ãåžžã«èµ·ãã£ãŠããããbatchèšç®çµæããŒãã«ã®ããã«IDã§åºåã£ãŠå°ããã€ããããããªããšãã§ããŸããã§ããã æ€èšã®å¯Ÿè±¡ãšãªã£ãæŽæ°é »åºŠãé«ãããŒãã«ã§ã¯ãå€ãã®æ
å ±ãå
¥ã£ãŠãããå°ãã®æŽæ°ã§ãã¬ã³ãŒãå
šäœã«æŽæ°ãããã£ãŠããŸã£ãŠããŸããã ãã®ãããå¿
èŠãªæ
å ±ã®ã¿ãS3ãžä¿åããæŽæ°ãèµ·ããéã«S3ã®æ
å ±ãšæ¯èŒãããå¿
èŠãªæ
å ±ã«æŽæ°ãèµ·ããéã®ã¿ãESã®ããŒã¿ãæŽæ°ãããæ¹æ³ã«ããŸããã S3ã«ååæ
å ±ãä¿åããæ¯åååŸããããšã¯ããŒã¿æŽæ°ã®é床ã«åœ±é¿ããŠããŸãå¯èœæ§ããããŸãããã幞ãã«ãæ¬åœã«æŽæ°ãã¹ãããŒã¿ãããªãæžã£ããããé床ã¢ããã«ã€ãªãããŸããã ããã ä»åã¯ç§»è¡åŸã®åºç€ã«ã€ããŠãã¡ã€ã³ã«ã玹ä»ããŸããã ãã®ããã«å®è£
ãè¡ããçŸåšã®ã·ã§ããã³ã°ã¢ããªãBASEãã§ã¯ç§»è¡åŸã®ã·ã¹ãã ã§çšŒåãããŠããŸãã å®éã«ã¯åºç€å®æåŸã«APIã®response timeãé
ãåé¡ã®å¯Ÿå¿ããCTRã®æ¹åãªã©ãè¡ãªã£ãŠããŸãããã¡ãã®è©³çްã«ã€ããŠã¯æ¥é±ã玹ä»ãããŠããã ããŸãã ç§»è¡ãè¡ãããšã§ç¶ç¶çãªæ€çŽ¢æ§èœã®æ¹ä¿®ãæ¹åãããããç°å¢ãäœãããšãã§ããŸããããããããããªãæ¹åãè¡ãªã£ãŠãããããšæããŸãã
ã¯ããã« ããã«ã¡ã¯ãBASEã®CSEããŒã ã®ç§è°·ã§ãã CSEããŒã ã¯ç€Ÿå
æ¥åã®å¹çåãšè²¡åã®ä¿¡é Œæ§æ
ä¿ããããšãå°éãšããããŒã ãšããŠéçºã瀟å
ã®æŽåãè¡ãªã£ãŠããŸãããããªCSEã®åãçµã¿ã玹ä»ã§ããã°ãšæããŸãã CSEã«ã€ããŠè©³ããã¯ãã¡ããã芧ãã ãã devblog.thebase.in BASEã·ã§ããã®å£²äžéã®æ
ä¿ãšJ-SOXå¯Ÿå¿ BASEã§ã¯ã·ã§ããã®å£²äžãäžæçã«ãã©ãããã©ãŒã åŽãé ãã£ãŠãããç³è«ããã£ã段éã§å£²äžéãåŒãåºããããã«ãªã£ãŠããŸãã ãã®ãããECãã©ãããã©ãŒã ã¯ã·ã§ããã«å¯ŸããŠã以äžã®ããšãæ
ä¿ããããšã倧åæã§ãã ããŒã¿ãé©åã§ããããš çºæ³šã決æžããŒã¿ã®é©åãªèšé²ããããŠããããš äžèšããŒã¿ããäœæãããã売äžèšäžã®ããŒã¿ã®äœæãé©åã§ããããš éèšç¯å²ãæœåºããã ãããããªãããŠããããš BASEã¯2019幎12æã«äžå ŽããããšããããJ-SOXãžã®å¯Ÿå¿ãæ±ããããããã«ãªããŸãããããã«ããããã峿 Œã«ã·ã§ããã®å£²äžéã«å¯ŸããŠããŒã¿ã®éææ§ãæ
ä¿ãããŸãããã«å¯ŸããŠç£æ»ãåãã矩åãçºçããŸããã J-SOXãšã¯ 財åå ±åã«ä¿ãå
éšçµ±å¶å ±åå¶åºŠã®æŠèŠ J-SOXã«ãããŠã¯ãçµå¶è
ã¯è²¡åå ±åã«ä¿ãå
éšçµ±å¶ãæ§ç¯ãã責任ãæããŠããããã®æå¹æ§ãèªãè©äŸ¡ããå€éšã«å¯ŸããŠãã®çµæãå ±åããããšãæ±ããããŸãããŸãã財åå ±åã«ä¿ãå
éšçµ±å¶ã®æå¹æ§ã«é¢ããçµå¶è
ã®è©äŸ¡ãå€éšç£æ»äººãç£æ»ããããšã«ãã£ãŠããã®è©äŸ¡ã®é©æ£æ§ã確ä¿ããå¶åºŠãšãªã£ãŠããŸãã ç£æ»äººã«ããå
éšçµ±å¶å ±åæžã®ç£æ» J-SOXã§ã¯ã財åå ±åã«ä¿ãå
éšçµ±å¶ã®æå¹æ§ã«é¢ããçµå¶è
ã®è©äŸ¡ãç£æ»äººãç£æ»ããããšã«ãããã®é©æ£æ§ã確ä¿ããããšãšãããŠããŸãããŸããå
éšçµ±å¶ç£æ»ã¯ãååãšããŠè²¡åè«žè¡šç£æ»ãšåäžã®ç£æ»äººã宿œããããšãšãããå
éšçµ±å¶ç£æ»å ±åæžã¯è²¡åè«žè¡šç£æ»å ±åæžãšåãããŠäœæããããšãååãšãããŠããŸãã åç
§ïŒ https://www.pwc.com/jp/ja/knowledge/ipo-guideline/j-sox.html ã·ã§ããã®å£²äžéã®æ€èšŒãšçµçæ¥åã®è² æ
åºèé ããéã«ã€ã㊠BASEã§ã¯ã·ã§ããã®å£²äžéãåºèé ããéãšç§°ããŠããŸãããã®åºèé ããéã«å¯ŸããŠçµçããŒã ãããŒã¿ãæ€èšŒããåŠ¥åœæ§ãæ
ä¿ããŠããŸãã åœåã¯å£²äžããŒã¿ãååŸããã®ã«æéãããã£ãŠããŸã£ãããæ¥ã
åããŠãããã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããŠåžžã«SQLãå®è¡ããŠãããããã£ã³ã»ã«ãªã©ãçºçããå Žåã«åéèšãããšéå»ã®çµæãå€ãã£ãŠããŸã£ãããExcelã§ããŒã¿ã®ç¢ºèªäœæ¥ãè¡ãªã£ãŠããããExcelãéããªãéããªããªããªã©ã®ç©ççãªåé¡ããããŸããã ãŸãã売äžéãæ
ä¿ããããã«BASEã·ã¹ãã äžã®ããŒã¿ãšå決æžããŒã¿ãšã®çªåããªããã°ãªããŸããããããã«ãããªãã®æéãããã£ãŠããŸããã reportã·ã¹ãã ã®æ§ç¯ ããã§CSEã§ã¯äžèšã®åé¡ã解決ããããã«ãBASEã®ããŒã¿éèšãã¬ããŒãã£ã³ã°ã®ããã®ã·ã¹ãã ïŒä»¥äžreportã·ã¹ãã ïŒãäœæããŸããã å
è¿°ã®éããBASEã§ã¯åã·ã§ããã®å£²ãäžããäžæçã«é ãã£ãŠãããããç¹ã«ä»¥äžã®ç¹ã«ã€ããŠè©³ãããã§ãã¯ãããŠããŸãã åºèé ãéã®BASEã·ã¹ãã ã®ããŒã¿ãé©åã«äœæãããŠããã äŸïŒååã®ä»£éãéæãåçš®ææ°æãæ£ããèšç®ãããŠãã åºèé ããéã®æ§æèŠçŽ ã«å€æŽã¯ãªãã äŸïŒæ°èŠæ±ºæžææ®µã®è¿œå ïŒAmazonPayãªã©ïŒ 決æžããŒã¿ã®çªå äŸïŒBASEã·ã¹ãã äžã®ããŒã¿ãšã¯ã¬ãžããã«ãŒãã®æ±ºæžæ
å ±ãæ£ããã ãã®å£²äžããŒã¿ã®ååŸãããŒã¿ã®çªåãããããããããæ§æèŠçŽ ã®å€æŽãããããããããããã«ãæ¥æ¬¡ã§BASEã·ã¹ãã ã®æ¬çªDBããå¿
èŠãªããŒã¿ãAmazon Athenaã«ã€ã³ããŒãããŠããŸãã reportã·ã¹ãã ã®æ§æã«ã€ããŠæ¬¡ã«è©³ãã説æããŸãã æ§ç¯ reportã·ã¹ãã æŠèŠ reportã·ã¹ãã ã®æŠèŠã¯ãã£ãããããªãããã§ãã 1. BASEã·ã¹ãã ã®æ¬çªDB(Amazon Aurora)ãããå¿
èŠãªããŒã¿ãAmazon Athenaã«æ¥æ¬¡ã§åã蟌ã 2. Amazon Athenaã«å¯ŸããŠSQLãå®è¡ããŠãã¬ããŒããšãªãCSVãåºå reportã·ã¹ãã ã®æ§æ report-dataloaderïŒå³äžã®éæ ãéç¢å°ïŒ ã¬ããŒãã·ã¹ãã ã®ããŒã¿ãæºåãã Auroraã®ã¯ããŒã³äœææ©èœã§ãã³ãã©ãªDBãäœæ EmbulkãçšããŠããã³ãã©ãªDBããã¬ããŒãã«é¢ããããŒãã«ãåã®ããŒã¿ãAthenaã«ããŒã ( civitaspo/embulk-output-s3_parquet ã䜿çš) reportïŒå³äžã®èµ€æ ãèµ€ç¢å°ïŒ ã¬ããŒãã®ããŒã¿ãæœåºãã åºèé ãéã«é¢ããããŒã¿ãæœåºããã¯ãšãªãAthenaã«çºè¡ãã ã¯ãšãªã®çµæããCSVãäœæãã ã¬ããŒãã·ã¹ãã åæ±ºç®ããŒã¿ã®ååŸæ©èœ åæ±ºæžããŒã¿ãšBASEã·ã¹ãã äžã®ããŒã¿ãçªåããããã«ãåæ±ºæžã·ã¹ãã ããããŒã¿ãååŸããŠAthenaã«ã€ã³ããŒã report-datacollector åæ±ºæžã®å€éšã®ã·ã¹ãã ããããŒã¿ãããŠã³ããŒããããŠããŠS3ã«ä¿å 決æžã·ã¹ãã ã«ãã£ãŠååŸæ¹æ³ãç°ãªã åçš®APIã®å©çšãªã© report-dataloader S3ã«ä¿åããããŒã¿ããAthenaã®ããŒãã«ãäœæ report-dataloader reportã·ã¹ãã æ§ç¯ã«ãã广 reportã·ã¹ãã ã®æ§ç¯ã«ããAmazon Athenaãžã¯ãšãªãå®è¡ããããšã«ãã£ãŠãéããã¯ãšãªãå®è¡ããªããšãBASEã·ã¹ãã äžã§ååŸããŠããåºèé ããéãšåçã®ããŒã¿ãååŸå¯èœã«ãªããæ¥æ¬¡ã§ã®ããŒã¿ã®çªåããæããªããŸããã BASEã«ã¯ããŸããŸãªæ±ºæžæ¹æ³ãããããäžæŠã«ã¯èšããŸããããäžçªãã©ã³ã¶ã¯ã·ã§ã³æ°ã®å€ã決æžã§çŽïŒäººïŒæ¥åã®å·¥æ°ã®åæžåºæ¥ãŠããŸããã¯ãšãªã®å®è¡æéã¯æ±ºæžæ¹æ³ã«é¢ãããã»ãŒåäžãªã®ã§ããã©ã³ã¶ã¯ã·ã§ã³æ°ãå€ã決æžã»ã©å·¥æ°ãåæžãããŠããããšã«ãªããŸãã çµããã« äžèšã«æãã以å€ã«ããBASEã§ã¯reportã·ã¹ãã ã«ã¯çµçæ¥åãæ¹åããããã®çްããªæ©èœãéæè¿œå ããŠããŸãã ããã«æããäŸã¯CSEã®æŽ»åã®äžéšã§ããCSE㯠Corporate Solutions Engineering ã®ç¥ã§ããã瀟å
æ¥åã®ããè¯ãæ¹åã§ããã°ãšæã£ãŠããŸãã CSEããŒã ã§ã¯ããšã³ãžãã¢åã§ç€Ÿå
æ¥åã®å¹çåãJ-SOX察å¿ããªãŒãã§ããã³ãŒãã¬ãŒããšã³ãžãã¢ãåéããŠãããŸãã äžèšã®ãªã³ã¯ããæ°è»œã«ãé£çµ¡ãã ããã https://open.talentio.com/r/1/c/binc/homes/4380
ããã«ã¡ã¯ãBASE BANKæ ªåŒäŒç€Ÿ Dev Divisionã«ãŠã Software DeveloperãããŠããæ°žé ( @glassmonkey ) ã§ãã ä»åã¯åŒç€Ÿã§ããã³ãºã¹ãã³ãµãŒãšããŠåè³ããŸããã PHPãã¡ã€ã³èšèªãšããŠäœ¿çšããŠããBASE瀟ãšç°ãªããBASE BANK瀟ã§ã¯Goãã¡ã€ã³èšèªãšããŠäœ¿ã£ãŠããã®ã§ãä»åã¯åããŠBASE BANK瀟ãšããŠã¹ãã³ãµãŒããããŠããã ããŸãããè²ã
è³ãã¬ããšããããŸãããããã®å ŽãåããŠã瀌ãç³ãäžããŸãã ç»å£ã®å
容ã«é¢ããŠã§ãããæ¥åã§ã¯ãªãè¶£å³ã§è§Šã£ãŠãFlutterãã¿ã§ããå¢ãã§Proporsalã«åºãããéããŠããã ããã®ã§ãè¶£å³å
šéãªåœ¢ã«ãªããŸããã GoConference2021 Springã«ã€ã㊠gocon.jp https://gocon.jp/ Go Conferenceã¯å幎ã«1åè¡ãããããã°ã©ãã³ã°èšèªGoã«é¢ããã«ã³ãã¡ã¬ã³ã¹ã§ãã ä»åã¯åã®ãªã³ã©ã€ã³éå¬ãšããèšå¿µãã¹ãåã§ããããŸããã æ¬èšäºã®Gopherã¢ã€ã³ã³ã®ã©ã€ã»ã³ã¹ã¯ä»¥äžã®éãã§ãã github.com The Go gopher was designed by Renee French. ( http://reneefrench.blogspot.com ) The gopher stickers was made by Takuya Ueda ( https://twitter.com/tenntenn ). Licensed under the Creative Commons 3.0 Attributions license. ææ³ãšæ¯ãè¿ã çºè¡šå
容ã«ã€ã㊠ä»åã¯å人ã®è¶£å³ã§ããã£ãŠãFlutterãã¿ãçºè¡šãããŠããã ããŸããã ç§èªèº«ã¯GoæŽ1幎ãããã®ãŸã ãŸã åå¿è
ã§ã¯ãããŸãããæ©äŒãããã ããŠããã£ãã§ãã speakerdeck.com çºè¡šã®æ§åã¯ãã¡ãã§ãã youtu.be çºè¡šã«ã€ããŠã®æ¯ãè¿ã 話ã®ããŒã¹ãšããŠè§Šãã gomobile ãäœããšäžå®å®ãªã®ã§ããµã³ãã«ã¢ããªãäœãéã¯è²ã
ãšããããŸããããããç»å£ãã¿ã«ãªã£ãããªãšèãããšçŸå³ããæãã¯ã§ããæ°ãããŸãã ãã®åŸã®æèŠªäŒã§ããè²ã
Firebaseã®è©±ãã§ãããGoã®ã€ãã³ããªã®ã«ã¢ãã€ã«ã¢ããªã®éçºè«çŸ©ãã§ããŠå€§å€æ¥œããæéãéãããŸããã ãŸãããFlutterãšGoã®APIã®éä¿¡ãããã¢ããªãäºæ³ãããŠãæãããŠãæ¹ãå±
ãããã§ãããæå³ã§äºæ³ãã²ã£ããè¿ããã®ã¯è¯ãã£ãã§ããæ¹ããŠGoã®èªç±ãã玹ä»ã§ããç¹ã¯è¯ãã£ããšããã£ãŠãããŸãã æéé
åãå°ãééããŠåŸåé§ãè¶³ã«ãªã£ãŠããŸã£ãã®ã¯åçãšããŠä»åŸã®ç»å£ã«ã¯æŽ»ããããæåã§ãã ã¢ããªãæ°å³ã§ã¯ãã£ãã®ã§ãããçºè¡šæã«ãªãŒãã³ã¯ãšã¹ãã§ã³ãæããããšãã§ããã®ãæºè¶³ã§ããã æèŠªäŒ Remoã§å®æœãããŠãããååã¯ããŒãã«ããšã§éè«ãåŸåã¯ã¿ããªã§ããããã¯ã€ãºå€§äŒãªæµãã§ããã remo https://remo.co/remo-101 ç¹ã« @tenntenn ããã®åºé¡ãã go quiz ãã¡ããã¡ãé£ããã£ãæãã§ããäžçªå°è±¡ã«æ®ã£ãã®ã¯go 1.16ããå
¥ãembedã«é¢ããŠã®ã¯ã€ãºã§ãããå匷ã«ãªããŸããã ããã³ã³ãã€ã«éãã⊠embedãé©å¿ãããã±ãŒã¹ã倿°ã®äžèº«ã«ãã¡ã€ã«ã®å
å®¹ãæ ŒçŽãããã //go:embed hoge.json var message string ãã ã®ã³ã¡ã³ãã¢ãŠã(//ã®åŸã«ã¹ããŒã¹ãããã®ã§embedã§ã¯ãªãã³ã¡ã³ãæ±ãã«ãªãïŒ // go:embed hoge.json var message string ææ³ãšè¬èŸ çºè¡šæã®é²è¡ã«é¢ããŠã¯äºåã«ãªããŒãµã«ã説æã @micchiebear ãããå§ããšããéå¶ã®çæ§ã®åããã©ããŒããã£ãã®ã§åœæ¥ã¯ã¹ã ãŒãºã«è¡ãããšãã§ããã®ã§çºè¡šã«éäžã§ããŸãããéå¶ã®çæ§ããããšãããããŸããã ãŸããã¹ãã³ãµãŒãã®çªå£ãšããŠãé¢ããããŠããã ããã®ã§ãããéå¶ã®çæ§ã«æåããã©ããŒããŠããã ããŠããããšãããããŸããã https://gocon.jp/ ã«èªç€Ÿã®ããŽãèŒã£ãŠãããšããã£ãç¬éæç¡éã§ããã ç§èªèº«GoæŽã¯1幎ããããªã®ã§å
šç¶ããããªãããšã ããã§ã¯ãã£ãã®ã§ããã åå ãããæ¹ã
ã® Go Love ãäŒãã£ãŠããŠãã£ãšç§èªèº«é 匵ãããšããæ°æã¡ã«ãããŠããã ããŸããã ç¹ã«ç»å£è³æãæ¥åæéãå²ããŠäœã£ãŠãäžãã©ããŒããŠããååã«ãæè¬ã§ãã å®£äŒ ä»åã¯è¶£å³ãã¿ã§FlutterÃGoãè§ŠããããŠããã ããŸãããã ç§ãã¡ã®æ®æ®µã®æ¥åã¯Go, Python, PHPãäžå¿ã«ãããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã§éçºããŠããŸãã ãŸããéçºã ãã§ãªãã»æ©èœãã°ããŒã¹ã»ãµããŒããŸã§æ
åœããŸãã ãããªéçºã¹ã¿ã€ã«ã«èå³ãããã£ãŠæ¹ã¯æ°žé( @glassmonkey )ã«DMãéã£ãŠããã ããã äžèšã®ãªã³ã¯ããæ°è»œã«ãé£çµ¡ãã ããã open.talentio.com æåŸãŸã§ã芧ããã ãããããšãããããŸããã
ããã«ã¡ã¯ããã¶ã€ããŒã®æ²³è¶ã§ãã ãBASEãã§ã¯ä»å¹Žã®2æã«ã泚ææã«è³Œå
¥è
ã«éããã賌å
¥å®äºã¡ãŒã«ããªãã¥ãŒã¢ã«ããŸããïŒ baseu.jp ãããŸã§ãBASEããã賌å
¥è
ã«éãããã¡ãŒã«ã¯ã»ãšãã©ãããã¹ãã¡ãŒã«ã§ããã åã·ã§ããã工倫ããŠãããã·ã§ããäžã§ãã©ã³ãã®äžç芳ã衚çŸããŠããã«ãé¢ãããã賌å
¥è
ãåãåãã¡ãŒã«ãã·ã§ããã®äžç芳ãšãããããŠããã賌å
¥è
ã«éåæãäžããŠããŸããšãã課é¡ããããŸããã ããã§ä»åããBASEãããéãããŠããããããã¡ãŒã«ãHTMLã¡ãŒã«åãããã¡ãŒã«æ¹åãããžã§ã¯ãããå§ãŸããŸããã ãŸã第äžåŒŸãšããŠè³Œå
¥å®äºã¡ãŒã«ãHTMLã¡ãŒã«åãããŸããããã©ã®ãããªçµç·¯ã§ãªãã¥ãŒã¢ã«ã«è³ã£ãã®ãããã¶ã€ã³ã§å·¥å€«ããç¹ãªã©ãæ¯ãè¿ããããšæããŸãïŒ è³Œå
¥å®äºã¡ãŒã«ã®HTMLã¡ãŒã«åã®çµç·¯ ãã¡ãŒã«æ¹åãããžã§ã¯ããã¯ããã¶ã€ããŒäž»å°ã§å§ãŸããŸããã ãBASEãã®äœéšãããè¯ãã§ããããªç®æãããã°ããã¶ã€ããŒãäž»äœçã«èª²é¡ã解決ããŠãããç°å¢ãããã®ã¯BASEã®è¯ããšããã ãªãšæããŸãâºïž ãããžã§ã¯ãã®ããã¯ãªããçµãã£ããããŸãã¯ãBASEããã賌å
¥è
ãã·ã§ãããªãŒããŒã«éä¿¡ãããŠãããã¹ãŠã®ã¡ãŒã«ããªã¹ãã¢ããããŸããã 賌å
¥å®äºã¡ãŒã«ãçºéå®äºã¡ãŒã«ããåãåããå®äºã¡ãŒã«ãªã©ã賌å
¥è
ã«éä¿¡ãããŠãããã®ã ãã§32çš®é¡ãã®ã¡ãŒã«ãããããšãããããŸããã ã¡ãŒã«ãæŽãåºããããšã«ã¯ãã·ã§ãããªãŒããŒã賌å
¥è
ã®å£°ãäžçªè¿ãã§èãCS (Customer Support) ããŒã ã«ãã¡ãŒã«ã«é¢ããŠã©ã®ãããªåãåãããæ¥ããããã¢ãªã³ã°ããŸããã ãã®çµæã ãã©ã³ãã®ãåºã§æ³šæãããã®ã«"BASE"ããã¡ãŒã«ãããŠæ··ä¹±ãã ãã éè¡æ¯èŸŒæ±ºæžãéžæããŠæ³šæããããšãã©ãã«æ¯ã蟌ãã°è¯ãã®ããããã¥ããã£ã ããšæããŠãã賌å
¥è
ãããããšãããããŸããã CSããŒã ããã®ãã¢ãªã³ã°ãçµãŠ è³Œå
¥è
ã®è³Œå
¥äœéšãåäžãããããš ã·ã§ããã®ãã©ã³ããã©ã³ãã®äžç芳ãå£ããªãããš ã念é ã«ããŸãã¯è³Œå
¥å®äºã¡ãŒã«ããªãã¥ãŒã¢ã«ããããšã«æ±ºããŸããã 宿ãããã¶ã€ã³ ã·ã§ããããŽããèšå®ããŠããSNSã衚瀺 ã·ã§ãããããŽãèšå®ããŠããå Žåãã¡ãŒã«ã®ããããŒéšåã«ã·ã§ããããŽã衚瀺ãããããã«ãªããŸããã ããã«ããã"BASE"ã£ãŠãµãŒãã¹ããã¡ãŒã«æ¥ããã©ãªãïŒããšããæžæãããªããããšããã·ã§ããã®äžç芳ãšå€§å¹
ã«è§£é¢ããã¡ãŒã«ããªããããšã§ã泚ææããäžè²«ããã·ã§ããã§ã®è³Œå
¥äœéšã賌å
¥è
ã«æäŸããããšãæèããŸããã ãŸããããã¿ãŒããŒãã«èšå®ããŠããSNSãã·ã§ããã³ã°ã¢ããªãBASEããžã®å°ç·ãé
眮ããããšã§ãã·ã§ããã®æ®æ®µã®æŽ»åãååã«ã€ããŠè³Œå
¥è
ãç¥ãããããªããŸããã 賌å
¥ããååããã¡ãŒã¹ããã¥ãŒã«è¡šç€ºãããããšã§ã賌å
¥çŽåŸã®ããããæãéžæã§ãããè¯ããªãšæã£ãŠããŸãð ã¬ã³ã¡ã³ããšãªã¢ã远å ãã®ã·ã§ããã§è²©å£²ãããŠãããã®ä»ã®ååãç»åä»ãã§è¡šç€ºãããããšã§ããªããŒãçã®åäžãã·ã§ããã®å£²äžå¢å ãçãå°ç·ãæ°ãã«åãå
¥ããŸããã ãŸãšã 賌å
¥å®äºã¡ãŒã«ããªãã¥ãŒã¢ã«ããŠæ©2ã¶æã æåŸ
éãããã®ä»ã®ååãããã®è³Œå
¥ãå¢ããŠããŸãã ãŸããã¡ãŒã«ãèŠããããªã£ãããšã§ç€Ÿå
ããã奜è©ãããã ããŠããŸãïŒ ãããŸã§ä»¥äžã«ã«ã¹ã¿ããŒãµããŒããã«ã¹ã¿ããŒãµã¯ã»ã¹ã®å£°ãèããªãããã¶ã€ã³ãäœã£ãããšãã圱é¿ç¯å²ã®å€§ããå質åäžã«é¢ãããããšã§éææã倧ããããã®ãããžã§ã¯ãã«ã¢ãµã€ã³ãããŠããã£ããªãšæããŸãã ãŸãããBASEãããéãããŠããHTMLã¡ãŒã«ãã»ãšãã©ãªãã£ããããã³ã³ããŒãã³ãã1ããèããŠäœããæ¥œãããæãããŸããã 賌å
¥å®äºã¡ãŒã«ã¯ãBASEããå©çšããŠããwebã®ãããã·ã§ããããã®è³Œå
¥ã§ããã·ã§ããã³ã°ã¢ããªãBASEãããã®è³Œå
¥ã§ãèŠãããã®ã§ã賌å
¥ã®ããã«ãã§ãã¯ããŠããã ãããšå¬ããã§ãð ä»åã¯è³Œå
¥å®äºã¡ãŒã«ããªãã¥ãŒã¢ã«ããŸãããããBASEããã賌å
¥è
ã«éä¿¡ããŠãããã®ä»ã®ã¡ãŒã«ãã©ãã©ããªãã¥ãŒã¢ã«ããŠãããããšæããŸãã
éååçïŒåççãäžããã¡ãã£ãšäžã«ãŠãå·Šèžã«BASEããŽãããããŒã«ãŒãçãŠãã倧接 ããã«ã¡ã¯ãProduct Dev Divisionã«æå±ããŠãã 倧接 ã§ãã ä»åãPHPerKaigi 2021ã«ã³ã¢ã¹ã¿ãããšããŠåå ããŸãããç§ããªãã³ã¢ã¹ã¿ãããšããŠåå ããã®ããšããç¹ãå«ããã«ã³ãã¡ã¬ã³ã¹ã®è£åŽã«ã€ããŠã¬ããŒãããããšæããŸãïŒ PHPerKaigi 2021ãšã¯ PHPerKaigi 2021ãšã¯ã3æ26æ¥ïŒéïŒã3æ28æ¥ïŒæ¥ïŒã®æéã§éå¬ãããPHPç³»ã®æè¡ã«ã³ãã¡ã¬ã³ã¹ã§ããä»å¹Žã§4åç®ã®éå¬ãšãªããŸãã phperkaigi.jp ãªãã©ã€ã³ã«ã³ãã¡ã¬ã³ã¹ã ã£ãäŸå¹Žãšã¯éããä»å¹Žã¯ãã³ãã³çæŸéã䜿ã£ãŠé²è¡ãããªã³ã©ã€ã³ã«ã³ãã¡ã¬ã³ã¹åœ¢åŒã«ãªããŸããã ã°ãªãŒã³ããã¯ã«åã£ãŠãã人ãèŠãçæŸéçšãã£ã¹ãã¬ã€ ïŒã°ãªãŒã³ããã¯ã«åã£ãŠãã人ãèŠãçæŸéçšãã£ã¹ãã¬ã€ïŒ åŒç€ŸããŽãŒã«ããã³ãµãŒãšããŠåè³ããã¹ããŒã«ãŒãäžè¬èŽè¬è
ãšããŠæ°åãåå ããŸããã以äžã®èšäºã«åå ã¬ããŒããæžãããŠããŸãã®ã§ãã¡ããæ¯éã芧ãã ããïŒ devblog.thebase.in èå°è£ã§ã¯ã©ããªããšãããã®ïŒ PHPerKaigi 2021ã§ã¯ä»¥äžã®ãããªä»äºããããŸãããïŒç§ãæ
åœããã®ã¯ãã®äžã®äžéšã§ãïŒïŒ ããããŒã¶ã«ã®æ¡æ ãã¶ã€ã³ã®æ¡æïŒããŽãããã«ãã£ïŒããã¯ã¹ïŒãTã·ã£ãããã³ãã¬ãããå
¬åŒãµã€ããªã©ïŒ ããã«ãã£ïŒããã¯ã¹ïŒã®çºæ³šãçºé å
¬åŒãµã€ãã®ã³ãŒãã£ã³ã° æŸéæã«äœ¿ãåç»ãé²ç»ãããã»ãã·ã§ã³åç»ã®ç·šé åºå ±ãå®£äŒ çæŸéã®é²è¡ ã»ãã·ã§ã³åç»ãåçãããªã©ã®çæŸéæ©ææäœ åç»çµäºåŸã®ã¢ããŠã³ã¹ Ask The Speakerã®åžäŒ TLïŒTwitterïŒç£èŠããåãåããå¯Ÿå¿ ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã«åå ããŠè³ããã twitter ã discordããã³ãã³çæŸéã§ããããã³ã¡ã³ããã ããã«ãã£ããã¯ã¹ã®çºéãã»ãã·ã§ã³åç»ã®ç·šéãçæŸéã®é²è¡ã¯ãªã³ã©ã€ã³ã«ã³ãã¡ã¬ã³ã¹ãªãã§ã¯ã®ä»äºã ã£ããããããŸããã ä»å¹Žã®PHPerKaigiã¯ãªã³ã©ã€ã³ã ãã©ãããã«ãã£ããããŸãïŒ ã¹ããã«ãŒãTã·ã£ããã¹ãã³ãµãŒããŸãæäŸããã«ãã£ãå
¥ã£ãã¹ãããªããã¯ã¹ãã¿ãªããã®ãæå
ã«ïŒ ããã«ãã£ä»ããã±ããã¯2/28ãŸã§è²©å£²äžïŒ ïŒåçã¯ãã¶ã€ããŒããã«ãã詊äœåã§ãïŒ #phperkaigi https://t.co/bjcXHQuoD9 pic.twitter.com/33Qr5hzOea — PHPerKaigi 2021 @3/26-3/28 (@phperkaigi) 2021幎2æ25æ¥ çæŸéãšé²ç»çšã®æ©æ äžè¬èŽè¬è
ãã¹ããŒã«ãŒã®æ¹ã
ã¯çµå§å®å
šãªã³ã©ã€ã³ã§ãããã倧äœã®ã¹ã¿ããã¯ãªãã©ã€ã³ã§äœæ¥ããŠããŸããã ç©ççãªåä»ããªãåãåãåãããå¢ããããšãäºæããŠãTLïŒTwitterïŒç£èŠããåãåãã察å¿ã®äººæ°ãå¢ãããªã©ã®å¯Ÿå¿ããããŸããã çæŸéã®é²è¡ãããã¹ã¿ãããããããããèãããã»ãã·ã§ã³ãäŒæ©æéã«ããããAsk The Speakerã§ã¹ã¿ããã質åãæããããŠã¿ãããã¹ã¿ãããã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã«åå ãããªã©ãã¹ã¿ããèªèº«ã楜ãããšããããšãå¿ãããªããè¯ããªã³ã©ã€ã³ã«ã³ãã¡ã¬ã³ã¹äœéšãç®æããŠè£ã§åããŠããŸããïŒ ã¹ã¿ããã念ïŒïŒïŒãéã£ãŠããæã®æ§å ã³ã¢ã¹ã¿ãããšããŠåå ãç¶ããçç± å®ã¯PHPerKaigi 2020ã§ãã³ã¢ã¹ã¿ããã ã£ãã®ã§ãã³ã¢ã¹ã¿ããã¯2åç®ãšãªããŸãã ç§ãã³ã¢ã¹ã¿ãããšããŠåå ãç¶ããã¢ãããŒã·ã§ã³ã«ã€ããŠã話ãããŸãã ãã¡ãšã³ãžãã¢ãšããŠã¡ãªããããã ã³ã¢ã¹ã¿ãããšããŠåå ãããšãä»äºãéããŠæ§ã
ãªã¡ãªãããåŸãããšãã§ããŸãã äŸãã°ãããããŒã¶ã«ã®æ¡æã®éã«èªåãã³ã¢ã¹ã¿ããã§ããã°ãèªåãèãããã»ãã·ã§ã³ãæ¡æããããããããšãã§ããŸãããã¡ããããããŒã¶ã«æ¡æã®èгç¹ã¯è²ã
ãããããå¿
ãå¶ããšããããã§ã¯ãããŸãããã§ããã芳ç¹ã®1ã€ãšããŠãã¹ã¿ããããã¡åå è
ãšããŠãã®ã»ãã·ã§ã³ãèŽããŠã¿ããããããããããå¯èœæ§ã¯ååã«ãããŸãã ãŸãã€ãã³ããéå¶ããã«ããã£ãŠæ§ã
ãªä»äºãããªãããšã«ãªããããã€ãã³ãã®éå¶åãäžãããŸããã«ã³ãã¡ã¬ã³ã¹éå¶ã®ããŠããŠã¯ãèŠæš¡ãåããä»ã®ã€ãã³ãéå¶ã§ã掻ããããšã®ã§ããç¹ã¯å€ãã§ããèªåãã€ãã³ãã®éå¬ãããããšã«ãªã£ãæããšãŠã圹ã«ç«ã¡ãŸãã ä»ã«ããPHPã³ãã¥ããã£ã«æå±ããŠããã¹ã¿ãããšä»²è¯ããªãããã¹ã¿ããã¯ã«ã³ãã¡ã¬ã³ã¹ã«ç¡æã§åå ã§ãããšãããããªã¡ãªããããããŸãã ãäžè©±ã«ãªã£ãŠããã³ãã¥ããã£ã«è²¢ç®ããã BASEã§ã¯ãç§ãã¡ã䜿ã£ãŠããæè¡ã¹ã¿ãã¯ã®ã€ãã³ãã»ã«ã³ãã¡ã¬ã³ã¹ã»å匷äŒãžã®åå ãæšå¥šããŠããŸãã ãã®çç±ã®äžã€ãšããŠããèªåãã¡ã䜿ã£ãŠããOSSãæè¡æ
å ±ãçºä¿¡ããŠããæ¹ã
ãžè²¢ç®ã§ããããããšããããšãåŒç€Ÿã§ã¯æããŠããŸããã©ã®ãããªè¡åãè²¢ç®ã«ç¹ããã®ã§ããããïŒç§ãªãã«äŸãæããŠã¿ãŸããã èŽè¬è
ãšããŠåå ããåœæ¥ã®ã€ãã³ãã®æ§åãå£é ãããã°ãªã©ã§äŒããããš ã¹ããŒã«ãŒãšããŠç»å£ããèªåã®ç¥èŠãåºããããšã ã«ã³ãã¡ã¬ã³ã¹ã¹ã¿ãããšããŠã€ãã³ããçãäžããããšã äžèšã®ããããã³ãã¥ããã£ã®æŽ»æ§åãžãšç¹ããã®ã§ãå
šãŠç«æŽŸãªã³ãã¥ããã£ãžã®è²¢ç®æŽ»åã ãšç§ã¯èããŠããŸãããã®äžã§ãç§ã¯ãPHPerKaigiã®ã«ã³ãã¡ã¬ã³ã¹ã¹ã¿ãããšããŠã€ãã³ããçãäžãããšãã圢ã§è²¢ç®ããããšãéžã³ãŸããã PHPerKaigiã¯ãç§ãæè¡ã«ã³ãã¡ã¬ã³ã¹ã®äžã§ åããŠç»å£ãã ã€ãã³ãã§ãããã®ããšããã£ããã§ä»ã®ã«ã³ãã¡ã¬ã³ã¹ã§ãç»å£ããããšã«ãªããç»å£ãéããŠãšã³ãžãã¢ãšããŠæé·ããããšãã§ããŸããã åããŠç»å£ããã«ã³ãã¡ã¬ã³ã¹ãPHPerKaigiã§æå
¥ããããããšãšãåãããã«èª°ããžæé·ã®æ©äŒãäžããåŽã«ãªããããšããæ³ãã§ãã³ã¢ã¹ã¿ãããšããŠåå ããŠããŸããã æåŸã« æ¥å¹ŽãPHPerKaigiãéå¬ããããªãã°ãã³ã¢ã¹ã¿ããã§åå ããããšæã£ãŠããŸããåå ããçããã«ãšã£ãŠè¯ãã«ã³ãã¡ã¬ã³ã¹ã§ãã£ãã®ã§ããã°å¹žãã§ãïŒ ãŸããã«ã³ãã¡ã¬ã³ã¹ã¹ã¿ããã ãã§ãªãã¹ããŒã«ãŒãšããŠç»å£ããããšãèŽè¬è
ãšããŠåå ããã°ãæžããŠã€ãã³ãã®æ§åãåºããŠãããšãã圢ã§ãè²¢ç®ãç¶ããŠãããããšæããŸãïŒ
ãã®3ã¶æã§è¡ã£ãBDIã®å
容ã玹ä»ããŸã ããã«ã¡ã¯ããã¶ã€ããŒã®æž¡éã§ãã ä»åã¯BASEã®ãã¶ã€ã³ããŒã ãè¡ã£ãŠããå匷äŒãBDIãã®å
容ãã玹ä»ããããšæããŸãã BDIãšã¯ïŒ ãBDIãã¯ãBASE Design Inspirationãã®ç¥ã 2018幎ã®ç§é ããæŽ»åããŠããããã¶ã€ããŒãããããããšãæã¡å¯ã£ãŠã ãã¶ã€ã³ã«é¢ããå¹
åºãç¥èŠãã¿ããªã§æ¥œããåŠã¶ããšãç®çãšããä»»æåå ã®ç€Ÿå
å匷äŒã§ãã BASEã®ãã¶ã€ããŒã§ããã°ããã¶ã€ããŒã ãã§ãªã誰ã§ãåå ããããšãã§ããŸãã Inspirationã®åã®éãæ°ããªã²ãããã«ã€ãªããæ°ãããããã¯ãåãäžããããšãå€ããããŸãã éå»ã«ã¯BDIã®ããŽãå¶äœãããããŸããâ devblog.thebase.in BASEã®ãã¶ã€ããŒãã©ããªæŽ»åãããŠããã®ãæ°ã«ãªã£ãŠããæ¹ã«èªãã§ããã ãããã®ã¯ãã¡ããã 瀟å
å匷äŒãã¯ãŒã¯ã·ã§ããã®ãã¿ãšããŠããæŽ»çšãã ãããïŒ 1æ æ°å¹ŽïŒæžãåãã§äœåãåŠãŒã æ°å¹Žãšããããšã§ããæ£æããããªã³ã©ã€ã³æžãåãäŒãéå¬ããŸããã ãã¶ã€ããŒã ãã§ãªãããããªæ¹ã«åå ããŠããã ãããã£ãã®ã§ã äœåã®ã³ãã解説ããç°¡åãªLTãåé ã«å®æœ åå¿è
æè¿ã ãŒããæã¡åºãïŒ ææžãOKãåçãæ®ã£ãŠã¢ããããã ã ãªã©ãªã©ãåå ããŒãã«ãäžãã工倫ãããŸããã èŠãå°ã®äººã楜ãããããã«ããã¡ã·ãªããŒã¿ãŒã®æå
ã®iPadããã©ãŒãªã³ã°ããŠãªã¢ã«ã¿ã€ã ã«äœåãåºæ¥äžããéçšãèŠãŠããããŸããã ã§ããäœåã¯Jamboardã«è²Œãä»ããã¿ããªã§èгè³ã è€ãèšèã®åµã§ããªããããã£ãã«å€§äŒã®ããã«ãªããããªãçãäžãããŸããïŒ èº«è¿ãªãã¶ã€ã³4倧ååãåæããŠãã¹ã¿ãŒããã ãã¶ã€ã³ã®åºæ¬ãšãªãããã¶ã€ã³4ååããå®éã«äœ¿ãããŠããäºäŸããåæããã¯ãŒã¯ã·ã§ãããããŸããã ãã¶ã€ã³ã®åºæ¬ãšãªãããã¶ã€ã³4ååããå¿çåŠã«ãè§Šããªãã解説ããLT äºäŸãèŠãªãã4ååã®ã©ã®èŠçŽ ã䜿ãããŠããããåæ å®éã«ãããããªã¯ãŒã¯ã·ã§ããã§å®è·µ ãšãããžã¡ã§ãã£ããã¿ã¡ã«ãªãäŒã§ããïŒ äžå¯§ãªLTã¯åå¿è
ã«ãããããããããã¶ã€ããŒä»¥å€ã®æ¹ãããªã«ãè¯ããã¶ã€ã³ãªã®ããã倿ããããã®å€§ããªãã³ãã«ãªãå
容ã§ããã ã¹ã©ã€ã/LP/ãã³ãã¬ããã芳å¯ããªããïŒååãšç
§ããåãããããšã§ãã¬ã€ã¢ãŠããžã®çè§£ãããæ·±ãŸããŸããã ãŸãçµéšè±å¯ãªãã¶ã€ããŒãããªããšãªããã§åºæ¥ãŠããŸã£ãŠããæ
å ±ã®åŒ·åŒ±ããæ¹ããŠååãåŠã³çŽãããšã§æ ¹æ ãããã¶ã€ã³ãªãã ãªããšæ¯ãè¿ãããšãã§ããäŒã«ãªã£ããšæããŸãïŒ 2æ ããŒã³ãŒãç³»ããŒã«ãè§Šã£ãŠã¿ãã ã³ãŒãã£ã³ã°ãå¿
èŠãšããã«ã·ã¹ãã éçºãã¢ããªã±ãŒã·ã§ã³éçºãã§ããããŒã³ãŒãããŒã«ãçãäžãã£ãŠãããšããããšã§ãBDIã®æéã§ã¿ããªã§ããããäŒãéå¬ããŸããã ååã¯Webflow, Wix, STUDIOã®3ã€ã®ããŒã³ãŒãããŒã«ã«ã€ããŠç°¡åã«è§£èª¬ãå®è·µç·šã§ã¯STUDIOãå®éã«è§Šããªãããææ³ãæ°ä»ããå
±æããŸããã è€æ°äººã®åæç·šéãåºæ¥ãã®ã¯å人çã«è¡æã§ãã...ïŒäžæã䜿ãããªãã°çéã§LPãšãäœãã¡ãããã ãããªããšããããªå¯èœæ§ãæããŠããªãçãäžãããŸããã 1æéã§æ¶ç©ºãã©ã³ãã®ã³ã³ã»ãããäœã£ãŠã¿ãã BASEãå©çšããã·ã§ãããªãŒããŒã®ä»äºã远äœéšããããããã©ã³ãã£ã³ã°ã®ã¯ãŒã¯ã·ã§ããããã£ãŠã¿ãŸããã ç«¶å調æ»ããã¿ãŒã²ããæ±ºãããã©ã³ãåãäœããšãããŸã§1æéã®çãæéã§ããªãã®ã¯ããªã倧å€ã§ãããã äºåã«miroã«çšæãããã³ãã¬ãŒããåããããšã§ïŒéäžããªãæ¥ãããããã¡ãããŸãããïŒããåããŸãã...ïŒ ããã§å¶äœãããã©ã³ãã³ã³ã»ãããã¡ã¯åŸã®BDIã§ããŽå¶äœãã·ã§ããéèšã¯ãŒã¯ã·ã§ããã«æŽ»ãããŠãããŸãã 3æ 俺ã¿ããã«ãªããªïŒããããLTäŒ æäººæ°ãã¬ãçªçµã®ãã©ãŒããããæåãã 4åã®BASE瀟å¡ã«ãä»äºãç§ç掻ã§ã®ãããããšãããçµãŠåŸãæèšãLT圢åŒã§çºè¡šããŠããããŸããã ä»åã¯è©Šéšçã«èŠèŽè
ã®slackã³ã¡ã³ãããªã¢ã«ã¿ã€ã ã§ç»é¢äžã«æµããŠã¿ãã®ã§ãããçµæããªãçãäžãããŸããïŒ ããŒã«ã¯ ãã¡ã ã䜿çšãããŠããã ããŸããã ããã«åå¿ãè¿ã£ãŠããã®ã§ããªã¢ãŒãã§ãç»å£è
ãå¯ããæ°æã¡ã«ãªããã«æ¥œããçºè¡šã§ããŠãŸãããïŒããããã®å
容ã¯ç€Ÿå
éå®ãªã®ã§ãèŠãã§ããªãã®ã§ãããæ¶ãšç¬ããªãã«ã¯èŠãããªãçŽ æŽããããã®ã§ããïŒ 90ç§ãããŒã€ã³ã°ããã£ãŠã¿ãã çŸè¡ã»ãã¶ã€ã³ç³»åŠæ ¡ã§ããè¡ããããããŒã€ã³ã°ãã·ã«ãšãããæ§é ã芳å¯ããç®ã身ã«ä»ããšããããŠããŸããã瀟äŒäººã«ãªã£ãŠããããã£ãŠãããšãã人ã¯å°ãªã...ããšããããã§BDIã§ãã£ã¬ã³ãžããŠã¿ãŸããïŒ ãããŒã€ã³ã°ã®webãµã€ã ãå©çšãããã瀟å¡ã®åçã䜿ããªããéäžããŠãããŒã€ã³ã°ãåŸåã¯ã¿ããªã§è¬è©ãããŸããã人ã«ãã£ãŠæžã蟌ãç®æãéã£ãããç«äœæã®åºãæ¹ã«æ°ä»ããŠçæéã§ç»åãæé·ããŠãã人ãçŸããããšãªããªãããã«ãªãïŒæéã§ãããåçŽã«çµµãæžãããšã¯æ¥œããïŒãšæãåºããæ©äŒã«ããªããŸããã®ã§ãã¿ãªãããæ¯éææŠããŠã¿ãŠãã ããïŒ ãŸãšã æ2åããŒã¹ã§éå¬ããŠããBDIãæè¿ã¯ãããããããšã«åå è
ãå¢ããŠçãäžãã£ãŠããŸããã 玹ä»ããäŒç»ã¯å
šãŠãªã³ã©ã€ã³äžã§è¡ã£ãŠããŸãããªãã£ã¹ã«åºç€Ÿã§ããããŒã éã®ã³ãã¥ãã±ãŒã·ã§ã³ãå°ãªããªã£ãŠããŸããã¡ã§ããããããã£ãå匷äŒã¯ããã£ãšãã絡ã¿ãäœãã®ã«ããšãŠãè¯ãæ©äŒã ãšæããŠããŸãã ãããããããã«ãªã£ãŠæ¥œããäŒç»ãéå¶ã¡ã³ããŒãäžå¿ã«æ¥ã
èããŠãããŸãã4æä»¥éããæ¥œãã¿ã«ïŒ
BASEæ ªåŒäŒç€Ÿ ServiceDev Payment Group æå±ã®ç°ä»²ã§ãã çŸåšã¯ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãæ
åœããŠããŸããã以åã¯ãµãŒããŒãµã€ããšã³ãžãã¢ãšããŠéçºãããŠããŸããããã®é ã®çµéšã玹ä»ããããšæããŸãã BASEã®ãšã³ãžãã¢ã¯PMã»ãã£ã¬ã¯ã¿ãŒããèŠä»¶ãèããèšèšãè¡ããŸãã 仿§ãèšèšãå
ã«ãµãŒããŒãµã€ããšã³ãžãã¢ã¯ãµãŒããŒãµã€ãã®å®è£
ããããã³ããšã³ãã«é¢ããŠã¯ããã³ããšã³ããšã³ãžãã¢ãå®è£
ããŠããŸãã å°ãåã®ãããžã§ã¯ãã«ãªãã®ã§ããããéãç¶ããŒã¿ããŠã³ããŒãAppãã®éçºãããžã§ã¯ããæ
åœããéã«ãµãŒããŒãµã€ãã ãã§ã¯ãªãããã³ããšã³ãã®éçºã«ãæºããããšã«ãªããŸããã æ®æ®µããµãŒããŒãµã€ããšã³ãžãã¢ãšããŠéçºãè¡ã£ãŠãããšã³ãžãã¢ãããã³ããšã³ãã®éçºãè¡ãããšã§è¯ãçµéšã«ãªã£ããšãã話ã玹ä»ããããšæããŸãã éãç¶ããŒã¿ããŠã³ããŒãAppã«ã€ã㊠ååãçºéããéã«ãã³ããŒã«ãªã©ã®ç®±ã«éãç¶ã貌ããŸãããåºè·ä»¶æ°ãå€ãã·ã§ããã§ã¯1ä»¶ã¥ã€éãç¶ãå°å·ããŠè²Œãã®ã¯æéãæããéçããããŸããæéã解決ããããã«é
éäŒç€Ÿã®éè·ãå©çšããããšãå€éšå庫ãžã®å§èšãªã©ã®æ¹æ³ã¯ãããŸãããè²»çšãæããããã·ã§ããã®è² æ
ã«ãªããŸãã ãã®ãããªã·ã§ããã®èª²é¡ã解決ããããã«é
鿥è
å瀟ãæäŸããŠããéãç¶çºè¡ã·ã¹ãã ãå©çšããŠéãç¶ãäžæ¬å°å·ã§ããããã«ããããã«BASEã®ã·ã¹ãã ããCSVããŒã¿ãåºåã§ããããã«ããæ©èœã«ãªããŸãã æ®æ®µã®éçºããã»ã¹ BASEã®éçºãããžã§ã¯ãã¯ããµãŒããŒãµã€ããšã³ãžãã¢ãšããã³ããšã³ããšã³ãžãã¢ãããããã¢ãµã€ã³ããååããªããéçºãé²ããŠããŸãã ä»åã®éãç¶ããŒã¿ããŠã³ããŒãAppã®éçºãããžã§ã¯ãã§ã¯ããµãŒããŒãµã€ããšããã³ããšã³ãã®ã¿ã¹ã¯ã¯ãã£ããã§ããäžèšã®ããã«ãªããŸããã ãµãŒããŒãµã€ã åºå®å€ã®ç»é²ã»æŽæ°ïŒããŒã¿ã®CRUDïŒ åé
éäŒç€Ÿã·ã¹ãã ã«åãããCSVãã¡ã€ã«ã®åºååŠç ããã³ããšã³ã åºå®å€ã®ç»é²ã»æŽæ°ç»é¢ CSVåºååŠçã¢ãŒãã« å
¥åå€ã®ããªããŒã·ã§ã³/ãšã©ãŒè¡šç€º BASEã¯ããã³ããšã³ãã¯Vue.js ãµãŒããŒãµã€ãã¯CakePHPãæ¡çšããŠããŸãã ãµãŒããŒãµã€ãã®æ
åœã§ãããšAPIã®å®è£
ãã¡ã€ã³ã«ãªããããã³ããšã³ãã®æ
åœã§ãããšç»é¢UIã®äœæããµãŒããŒãµã€ãã®APIãå©çšããŠããŒã¿ã®ç»é²/æŽæ°åŠçãå®è£
ããããšãã¡ã€ã³ã«ãªããŸãã ããã³ããšã³ããæ
åœããæµã ä»åã®ãããžã§ã¯ãã«ã¢ãµã€ã³ãããéããšã³ãžãã¢ãããŒãžã£ãŒããææ¡ãåãããã³ããšã³ãéçºã®æ
åœãå
Œåãã圢ã§ã¢ãµã€ã³ãããããšã«ãªããŸããã çµç¹å³äžããšã³ãžãã¢ã¯ãµãŒããŒãµã€ããšããã³ããšã³ãã§åãããŠããŸããå¥è·çš®ã®éçºãæ
åœããŠã¯ãããªããšããããã§ã¯ãªããéçºããæ¡ä»¶èŠæš¡ãã¹ã±ãžã¥ãŒã«ãªã©ãé¢ä¿ããŠããŸããæãæããã°ååãã«æ€èšããŠããããŸãã ç§ã¯ãµãŒããŒãµã€ããšã³ãžãã¢ãšããŠBASEã«å
¥ç€ŸããŸãããåè·ã§Vue.jsã®éçºçµéšããããããã³ããšã³ãéçºã«ãèå³ããããŸããå人çã«æããšããã§ããããŠãŒã¶ãŒã«çŽæ¥ã«èŠããéšåã¯ããã³ããšã³ãã®å®è£
ã«ãªããŸãããå®è£
ããã³ãŒãããã©ãŠã¶äžã§ç®ã«èŠããŠè¡šçŸãããéšåã¯ã¢ãããŒã·ã§ã³ãç¶æãããã奜ãã§ãã ãŸããBASEã§ã¯ããã³ããšã³ãéçºãæ
åœããããšããªãã£ãã®ã§çµéšããŠã¿ããã£ããšããã®ããããŸãã èŠæŠãããšãã ããã³ããšã³ãã®ã¢ãŒããã¯ãã£ã®çè§£ å
·äœçã«ããã°ãåæ¹åã®ããŒã¿ãŒãããŒãæèããããšãBASEã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã§ããBBQã®äœ¿ãæ¹ã§ãã æ¢åã®ã³ãŒããèªãã®ã¯ãã¡ããã®ããšã§ãããçè§£ãé²ããã«èŸºãåèã«ãªã£ãã®ã¯ããã¥ã¡ã³ãã®ååšã§ããã BASEã§ã¯ããã¥ã¡ã³ãå
±æãäž»ã«kibelaãå©çšããŠè¡ã£ãŠããã®ã§ãããããã³ããšã³ãéçºã®æé æžãçšæãããŠããã³ãŒããšåãããŠããã¥ã¡ã³ããåèã«ããããšã§æ¯èŒçæ©ãçè§£ãé²ããããšãã§ããŸããã BASEã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã§ããBBQã«ã€ããŠã¯ãUIã³ã³ããŒãã³ãã®ã«ã¿ãã°ãšããŠStoryBookãçšæãããŠããåã³ã³ããŒãã³ãã®äœ¿ç𿹿³ãæžããŠããã®ã§ãéçºç°å¢ã§è©Šããªããçè§£ãé²ããããšãã§ããŸããã æ
åœããŠã¿ãŠè¯ãã£ããšãã ãã¶ã€ã³ã®éçºçµéš ãµãŒããŒãµã€ãã®æ
åœãšããŠã¢ãµã€ã³ãããŠããããžã§ã¯ãã®åæãã§ãŒãºã«ãããŠUIãã¶ã€ã³etcã«é¢ããŠè©±ãåããããã¿ã€ãã³ã°ã¯ããã®ã§ããã詳现ãªéšåã«ã€ããŠã¯å®è£
ãé²ããŠã¿ãªããšåãããªããšããããšããããŸããã ä»åã¯ããã³ããšã³ããæ
åœããããšã§å®è£
ãé²ããªããããã¶ã€ããŒã®æ¹ãšFigmaãAbstractãªã©ã®ããŒã«ã䜿çšããŠã³ãã¥ãã±ãŒã·ã§ã³ãåããªããéçºããŠãããã¶ã€ã³ã決å®ããŠãããŸãããBASEã§ã®ãã¶ã€ã³éçºã®é²ãæ¹ãããŒã«ã®äœ¿ãæ¹ãç¥ãããšãã§ããŠè¯ãçµéšã«ãªããŸããã ã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã®åæž ãµãŒããŒãµã€ããšããã³ããšã³ãã®äž¡æ¹ãæ
åœããŠããŠè¿œå ããã³ãŒãã«ã€ããŠã¯å€§äœã¯åãã£ãŠããã®ã§ãPMããã®ä»æ§çžè«ãåããéãªã©ãåçããããã£ãã§ãããŸãå®è£
åŸã«è¡ãQAã§ã®ãã£ãŒãããã¯å¯Ÿå¿ãåå ç®æã®ç¹å®ãããããæ®æ®µãããçŽ æ©ã察å¿ã§ãããšæããŸãã ããã³ããšã³ãã®ä»çµã¿ ããã³ããšã³ãåŽãã©ã®ããã«åäœããŠãããïŒãããã³ããšã³ããšã³ãžãã¢ã®æ¹ãããã¥ã¡ã³ããèªãã§ãªããšãªãçè§£ããŠããã®ã§ãããå®éã«æ
åœããŠå®è£
ããããšã§ããªããšãªãçè§£ããŠãããéšåãã³ãŒãã¬ãã«ã§æç¢ºã«ã§ããŠçè§£ããããšãã§ããŸããã æåŸã« å®éã«ã§ãããã£ãç»é¢ãäžèšã«ãªããŸãã â» CSVåºååŠçãæ
åœäºå®ã ã£ãã®ã§ãããäžèšã®èŠæŠããéšåã§æ³å®ä»¥äžã«å·¥æ°äœ¿ã£ãŠããŸãéäžã§å¥ãšã³ãžãã¢ã«ãã«ããåºããŸããâŠã æ
åœãå€ãã£ãéçºã§ããã£ãã®ã§ãªãªãŒã¹æã®éææã¯åŒ·ããSNSãªã©ã®ãŠãŒã¶ãŒããã®åå¿ããã€ãããå¬ãããã®ã§ããã ãµãŒããŒãµã€ããšããã³ããšã³ãã亀äºã«è¡ãæ¥ãããããªéçºã§é ã®äžã®ã¹ã€ããã³ã°ã³ã¹ãã¯ãããŸãããããšã³ãžãã¢å士ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã¯æžã£ãããããŠããã®ã§ãéçºããæ¡ä»¶ã®èŠæš¡ã«åœ±é¿ãããã®ã ãšæããŸããä»åã®ãããžã§ã¯ãã§ãããšåæ¥ããŠãããšããŠãæçµçã«æããå·¥æ°ãšããŠã¯å€§ããªå·®ã¯ç¡ãã£ãããªãšæããŸããã ãŸããã³ãŒãã¬ãã¥ãŒã«é¢ããŠã¯ããã³ããšã³ããšã³ãžãã¢ã®æ¹ãã¬ãã¥ãŒããŠãããã®ã§å¿åŒ·ãã£ãã§ãã BASEã¯ãµãŒããŒãµã€ããšã³ãžãã¢ãšããŠå
¥ç€ŸããŠãããã³ããšã³ãéçºã§ããªããšããããã§ã¯ãªããæãæããã°éçºããããšãã§ããŸãã æ®æ®µã¯æ
åœããªãé åãæ
åœããŠã¿ãããšã§äžæçãªéšåãæç¢ºã«ã§ããã®ã§ãä»åŸã®å·¥æ°èŠç©ããã®ç²ŸåºŠåäžãã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã®åæžã«ãã€ãªããããšãåºæ¥ããšæããŸãã æåŸã«ã¯ãªããŸãããBASEãäžç·ã«æ¯ããŠããããšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒããè¯ããããã¯ãã®éçºã®çºã«äžç·ã«åããŸãããïŒ open.talentio.com open.talentio.com
ãã®åºŠã¯ã3/26 (é) ã 3/28 (æ¥) ã«ãªã³ã©ã€ã³ã§éå¬ããã PHPerKaigi2021 ã«ãŽãŒã«ããã³ãµãŒãšããŠåè³ãããŸã 1 åã®ã¡ã³ããŒãç»å£ããŸããã ä»åã¯äžèšã¡ã³ããŒã®ä»ã«äžè¬èŽè¬è
ãšããŠåå ãã 2 åã®ã¡ã³ããŒããã®åå ã¬ããŒãããå±ãããŸãïŒ çºè¡šå
容ãšè£è¶³ïŒæ±å£ïŒ BASE BANK æ ªåŒäŒç€Ÿã®æ±å£ ( @hgsgtk )ã§ããPHPerKaigi 2021 ã§ã¯æ¬¡ã® 2 ã€ã®ããŒã¯ãããŠãããŸããã å®è·µATDD ãTDDããæŽã«æ©ã¿ãé²ãããœãããŠã§ã¢éçºãžã ïŒ40 åïŒ PHPUnit 9 æä»£ã®Test Doubleã®äœãæ¹ ïŒ5 åïŒ 1. å®è·µATDD ãTDDããæŽã«æ©ã¿ãé²ãããœãããŠã§ã¢éçºãžã çºè¡šã«çšããè³æã¯ãã¡ãã§ãã çºè¡šã®éã«ã¯ããã³ãã³çæŸéã»Discordã»Twitter ã§ã®å®æ³ãè¡ãããŠããŸãããTwitter ã§ã®ãªã¢ã¯ã·ã§ã³ã¯ä»¥äžã® Togetter ã«ãŸãšããŠããŸãã https://togetter.com/li/1688539 è³æå
¬éåŸåæ¥ã«ãé¢ãããããããåå¿ããã ãã2021 幎 3 æ 28 æ¥ïŒæ¥ïŒã®ãæŒããã«ã¯ 100以äžããã¯ããŒã¯ ããã ãããããšã³ããªãŒå
¥ãããåé¿ã§ã³ã£ããããŸããã ç¿é±ä»¥éãã ãã¹ãé§åéçº ãã翻蚳ãããŠããåç°å人ããã«çŽæ¥ææ³ãããŠããã ããããšãå€ãã®æ¹ã®ç®ã«è§Šããè³æãšãªããé 匵ã£ãŠããã£ããªããšææ
šæ·±ããªããŸããã Acceptance test-driven development(ATDD: åãå
¥ããã¹ãé§åéçº)ãåãå£ã«ãExample-driven development (ATDD, BDD, SBE ç) ã®æŽå²ãšå®è·µã®ç·ãŸãšãã«ãªã£ãŠãããå§åçãªæ
å ±éã®è³æ / âå®è·µATDD ãTDDããæŽã«æ©ã¿ãé²ãããœãããŠã§ã¢éçºãžã / ATDD by genbaâŠâ https://t.co/CAxmhf0L6z — Takuto Wada (@t_wada) March 31, 2021 以éãåé²ãããçºè¡šãèŠãªããè£è¶³æ
å ±ãšããŠå
¥ããŠãã話ã»Ask the speaker ã§ã質åã»æèŠäº€æãããŠããã ããå
容ãæç²ããŠãŸãšããŸãã ã€ãã¬ãŒã·ã§ã³åã®åãå
¥ããã¹ãããŸãšããã¢ã€ã㢠ãã¹ããå¢ããå Žåã®ãã¹ãé床ãšãã£ãŒãããã¯ã«ãŒãã«ã€ããŠã©ãããã¢ã€ãã¢ãããããªããšãã話ã Ask the Speaker ã§ããŠããŸããããã®äžã§åãäžããããŠããã ããã®ãããã€ãã¬ãŒã·ã§ã³åã®åãå
¥ããã¹ãããŸãšãããã¢ã€ãã¢ã§ãã ãã㯠ãSpecification by Exampleãã®Chapter 10. Validating frequently ã§ç޹ä»ãããŠããã¢ã€ãã¢ã§ãã A common special case of breaking long tests into smaller packs is creating the current iteration pack. This pack contains the executable specifications that are affected by the current development phase. ATDD ãå®è·µããããã«çšããããããŒã«ã«ã¯ãæŠããã£ã¬ã¯ããªåãã Tag çã§åãå
¥ããã¹ããåé¡ããæ©èœãåãã£ãŠããŸãããã¹ãéãå¢ããéã«ã¯ãåœè©²ã€ãã¬ãŒã·ã§ã³ã§é¢å¿ãæã€åãå
¥ããã¹ãã®ã¿ãçµããããã«ãããšãéçºäžã®ãã£ãŒãããã¯ã«ãŒãã®åšããç¶æã§ãããããããŸããã æåãã¹ãã®æ±ã æåãã¹ãã Specification ã«èšèŒãããšãã話ãçŸå Žã§ã®è©Šè¡é¯èª€ã® 1 ã€ã®ã¢ã€ãã¢ãšããŠç޹ä»ããŠããŸããã çºè¡šè³æããåŒçš ããã«ã€ã㊠Ask the speaker ã§ããããæèŠäº€æãããŠããã ããŸããã æåãã¹ãã® Specification ã«ã¯äœãæžããŠããïŒ æåã§ãã¹ãããããã¹ãé
ç®ã«ã€ããŠèšèŒããŠãããèªåãã¹ãã§ã¯å®è¡ãã¹ãããããããããªã€ã¡ãŒãž ã¹ããªã³ãã¬ãã¥ãŒã§ãã¢ãããããªåããæ¹ãæžããŠãããããã æåãã¹ãåãæ¯ã€ãã¬ãŒã·ã§ã³ãã¹ã¿ãŒåãã®ãã¥ãŒè¿œå ãããšãã§ãããšãããã æåãã¹ãã®å®è¡çµæã¯ã©ãããïŒ çŸç¶å®è¡çµæãèšé²ããä»çµã¿ãçšæããŠãããã§ã¯ãªãããã€ãã¬ãŒã·ã§ã³ããšã®å®è¡çµæãšããŠã¯èšé²ãããã¢ãããŒã·ã§ã³ã¯ãããã«ãæåãã¹ããã€ãã¬ãŒã·ã§ã³ããšã« Issue äœããªã©ããã¢ã€ãã¢ããããã ããããã®äžåãSpecification by Exampleã ATDD ã«ã€ããŠç¥ã£ãŠããæ¹ã§ããã° ãå®è·µãã¹ãé§åéçº (Object Oriented SELECTION)ã ïŒéç§° GOOS æ¬ïŒã®å€åŽã®ãã£ãŒãããã¯ã«ãŒããæ³èµ·ãããæ¹ãå€ãããšæããŸãã å人çãªãããããšããŠã¯ãGOOS æ¬ã¯æè¡çèŠçŽ ãžã®ãã©ãŒã«ã¹ãã¡ã€ã³ãªã®ã§ãATDD èªäœã®åæãšãªãã³ã©ãã¬ãŒã·ã§ã³ãéèŠããèãæ¹ãªã©ãç¥ãã«ã¯éãæžç±ã§è£å®ããã»ãããããããããŸãããéã«èšããšãããçšåºŠ INPUT ããäžã§å®è·µæžãšã㊠GOOS æ¬ãèªããšããšãŠã广ãé«ããšæããŸãã GOOS æ¬ã¯ åè ã 2009 幎åºçã§ãããATDD ã BDD ã®ãããªèãæ¹ã¯ããããããã£ãšåããå®è·µãããŠãããã®ã§ããå
·äœçã«ã¯ Ward Cunningham æ°ã FIT ãäœã£ã 2002 幎ã«ã¯ãããã®èãæ¹ã¯ç¢ºèªãããŠããŸãããã®åŸã«ãã2007 幎ã«ã Test Driven - Practical TDD and Acceptance TDD for Java Developers ããåºçãããŠãããããã§ã ATDD ã®èãæ¹ãšå®è·µæ¹æ³ã«ã€ããŠè§ŠããããŠããŸãã æ§ã
æžç±ãããäžã§å人çã«ãçŸå Žã§å®è·µããäžã§äžçªè¯ãã£ããªããšæã£ãã®ã¯ã ãSpecification by Exampleã ã§ãã www.manning.com èè
ã® Gojko Adzic æ°ã¯ãã以åã« ãBridging the Communication Gapã ã«ãŠãèªèº«ã®å®è·µæ¹æ³ã«ã€ããŠè§£èª¬ããŠããŸãããããã ãSpecification by Exampleã ã¯æ°åã®äŒæ¥ãžã®ã€ã³ã¿ãã¥ãŒãéããå®è·µäºäŸéãšãªã£ãŠãããã€ã³ã¿ãã¥ãŒãéã㊠Gojko Adzic æ°èªèº«ã®èãæ¹ãã¢ããããŒããããç¹ãªã©ã解説ã«å«ãã§ããé¢çœãã§ãã å®éã«çŸå Žã§å®è·µããã«ããã£ãŠå°ãããšã»æ°ã«ãªãããšã«ã€ããŠç¶²çŸ
çã«è§£èª¬ãããŠããŠã倧å€åèã«ãªããŸããã ãããããããäžåãAgile Testing Condensed Japanese Editionã ãSpecification by Exampleã ã¯ç¿»èš³çãçŸåšç¡ãã®ã§ããè±èªã«æµæã®ããæ¹ã§ããã°ãå
šäœåãšããŠã¢ãžã£ã€ã«ãã¹ãèªäœãæããŠããæ¬è
°ãäžããŠããã ãã®ãè¯ãã®ããªãšæããŸããåããŠã®äžåãšããŠã®ããããã¯ã Agile Testing Condensed Japanese Edition ãã§ãã leanpub.com Janet GregoryãšLisa Crispinã«ãã2019幎9æçºè¡ã®æžç±ãAgile Testing Condensedãã®æ¥æ¬èªç¿»èš³çã§ããã¢ãžã£ã€ã«ã«ãããŠã©ã®ãããªèãã§ãã¹ããè¡ãã¹ããªã®ãç°¡æœã«æžãããŠããŸãïŒ ãœãããŠã§ã¢ãã¹ããå®è·µããã«åœãããã¢ãžã£ã€ã«ãã¹ããšãã芳ç¹ããçŸå ŽãèŠçŽããŠã¿ããšã倧å±èгããã£ãŠæããã®ã§ããããã§ãã 2. PHPUnit 9 æä»£ã®Test Doubleã®äœãæ¹ çºè¡šã«çšããè³æã¯ãã¡ãã§ãã PHP çºè¡šè³æäžã«åŒçšããããã¹ãã³ãŒãä»è¿ã§è¥å¹²ä¿®æ£ç¹ããã£ãã®ã§ PR ãåºãããããŠãããŸããïŒåœæ¥çºè¡š 1 æéåïŒã github.com Lightning Talk ã§ Ask the Speaker ã®æéãããã®ã¯æ°é®®ãªäœéšã§ããããPHPUnit ã®ããŒãžã§ã³ã©ã®ãããé »ç¹ã«ãããŠãïŒãã¿ãããªéè«ã @goodoo ãããšãããŠããã ããŠããã"ã«ã³ãã¡ã¬ã³ã¹ã®å»äžæ"ããããŸããã ã¹ããŒã«ãŒãšããŠåå ããææ³ äºååé²ãèŠãªããè£è¶³ããäœéšãããã£ã äºååé²è¯ãã£ããåé²ãããã®ãèŠãªããæ§ã
èªåã§ããã¯ããããã®ãé¢é£ããŠãçãªè£è¶³ãå
¥ãããã®ãèªåãšããŠã¯è¯ãã£ãã®ãšãåå ããæ¹ã®ææ³ã§ãããããã£ãŠãæ¿å¯åºŠã®é«ãæéã«ãªã£ããšãã声ãããã ããŠãããŸããã äºååé²ã®ã»ãã·ã§ã³ãèããªãã Discord(ãªã©ã®ãã£ãã)ã§ç»å£è
ãæ¬äººãé©å®è£è¶³ãããŠãããçµæã ãã£ã£ã£ã£ã¡ãæ¿åãªã»ãã·ã§ã³ã«ãªã£ããªâŠ ãããã£ãâŠâš #phperkaigi #a — ããã㌠(@ueshiy) March 27, 2021 ãªã³ã©ã€ã³ + äºååé²ã®çµã¿åãããªãã§ã¯ã§ããã5 åããããªãã€ã¯ããŠãã®ã§èª°ãããªãéšå±ã§äžäººãã åãç¶ããæéã¯å€§å€ã ã£ãã®ã§ããããã®ååœæ¥ã«æ¿å¯åºŠãäžããç¹ããããªãšæ³ããŸããã Ask the speakerã«äººããããã ãªã³ã©ã€ã³ã«ãªã£ãŠãã Ask the speaker ã®æéã¯ãã¯ãŠã©ããããããããªããšå°ãæéãéããããšãå€ãã£ãã®ã§ãããPHPerKaigi 2021 ã§ã¯ Discord ã§ã®ãã€ã¹ãã£ããã§ãããã人ãããã£ããã£ãŠã㊠Ask the speaker ãéãããããã£ãã§ãã ãã®äžã§åŸãããæ°ããªã¢ã€ãã¢ãèšèªåã»åæã®çªç Žå£ã¿ãããªã®ãããããäŒè©±ã®äžããåºãŠæè¬ã§ãã ãã©ãã¯ããšã«ã¹ã¿ããã®æ¹ã
ããã¡ã·ãªããŒã¿ãŒãšããŠããã£ãããã®ãæéã®å®å¿æãšããŠãããããã£ãã§ããTrack A ã§ã¯ã¹ã¿ããã® @akki_megane ããã ueshiy ããããããŒã¯åã»ããŒã¯åŸã«äŒè©±ãåããŠãã ãããšãŠãæè¬ã§ããããŸããŸãã€ã¯ããªã³ã«ãªã£ãŠãæ°é
ãèŠãŠåçªã« @koyhoge ããã«ç¡è¶æ¯ããããŠããã ãããããªãã©ã€ã³ã§äŒæ©å®€ã§ããããéè«ããæãããã£ãŠããã£ãã§ããã 質åãã身ãšããŠããããšãããããã€ã¹ãã£ããå
¥ã£ãšãããããã®ããªã§ Ask the Speaker ã«å
¥ããã®ãããŒãã«ãã²ãããŠããã£ãæ°ãããŸãã éå¶ã®çæ§ããããšãããããŸãã çºè¡šè³æå
ã§ã¯é¡æã·ã¹ãã ãšã㊠fortee ãäŸã«åãããŠããã ããŸããããäŸã«åãããããã¡ããã¡ãäœã蟌ãŸããŠããŠãããŒã¯ã®èªååé²ã·ã¹ãã ãçšæãããŠããããšãå°äžŠæããææ³ã§ãããããããªïŒããšé©åããŠãããŸããã ããã«ãã£ã®ããã¯ã¹ããã³ãã¬ããã®ã¯ãªãªãã£ãé«ããèªå®
ããåå ããŠããŸãããããã«ã³ãã¡ã¬ã³ã¹ã«æ¥ãããšããæèŠã匷ãæéã§ããã ã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããå Žã®èšèšã»éå¶ãããŠããã ãã PHPerKaigi 2021 éå¶ã¹ã¿ããã®çæ§ããããšãããããŸããïŒ åå ã¬ããŒãïŒå°ç¬ åïŒ BASE ã« 2021 幎 2 æã«å
¥ç€Ÿããå°ç¬ åå¥ã
ïŒ @cureseven ïŒã§ãã忥ã»ãšãã©ãã£ãšèããŠããã®ã§å
šäœãéããŠã®ææ³ãå
ã«ã話ãããŸãã åŠçã®é ããã¡ãã£ãšãã€åæ¹é¢ã®ã«ã³ãã¡ã¬ã³ã¹ã«åå ããŠãããã§ãããåŠçã®é ã¯ããšã³ãžãã¢ã£ãŠã©ããªæãã®äººãã¡ã§ãã©ããªããšããŠããã ããïŒãã®èå³ã§è¡ã£ãŠããã®ã§å
容ããã£ã±ãããã£ãŠãªãã£ãã®ã§ããã瀟äŒäººã«ãªã£ãŠãæ¥åãããŠããäžã§å®äœéšãå
ã«è©±ãèŽããããã«ãªã£ãŠããããšã宿ããŸããã åé¢ãæ°ããèã話ãå€ãããŸã ãŸã ç¥ããªãããšãããããããªããšæããŸããã PHPã§åŠã¶ãã»ãã·ã§ã³ã®åºæ¬ãšå¿çš fortee.jp ããŸãäœç³»çã«åŠã¶æ©äŒã®ãªã Session ã®æŠèŠããã¡ããšæŽçããããåå¿è
ã«ãåªããå
容ã§ããã ãããã Session ãšããèšèã®äœ¿ãæ¹ãææ§ã§ãæ£ããã¯ãCookie ã䜿ã£ã Session 管çããå
ã
ã¹ããŒãã¬ã¹ïŒç¶æ
ãæããªãïŒãªãããã³ã« World Wide Web ããããžãã¹å©çšãã ããç¶æ
ãæã¡ãããªã£ãããçãŸããã®ã Cookie ãšããæè¡ã§ãã Cookie 㯠4KB ã®å¶éãããã®ã§ãSession ID ãšããããŒãåŒãåãããããå
ã«ã»ãã·ã§ã³ã¹ãã¢ã«ã¢ã¯ã»ã¹ãããŒã¿ãååŸããããšã«ãã£ãŠç¶æ
ã衚çŸããŸãã æäœéã®ç¥èãšã㊠Cookie ã«å±æ§ãèšå®ãããŠããã Session 管çãçã£ãæ»æããããWAF ã§ã¯ãããèæ
®ããŠããã®ã§å®å
šã« $_SESSION ãæ±ããã ä¿æãããæ
å ±ã«ãã£ãŠãã°ãèµ·ãããããã®ã§ãSession 管çã®èšèšã¯å€§äºãæ¬åœã« Session 管çãã¹ããªã®ãèšèšãèŠçŽãããšãå¿
èŠãããããªãã ã»ãã·ã§ã³ã¯ãã¡ã€ã«ãªã®ã§ããµãŒãã®å°æ°ãå¢ãããŠã¹ã±ãŒã«ã¢ãŠããããšåç
§ããã»ãã·ã§ã³ãå¥ããŠããŸãã®ã§å
±éã®ã»ãã·ã§ã³ã¹ãã¢ãèŠããªã©ãã ãšããããšã玹ä»ãããŠããŸããã Cookie ã䜿ã£ã Session ã®ç¥èã¯ããªãææ§ã§ããããã®çºè¡šãéããŠçšéãšæ³šæãã¹ãäºé
ãããã£ãã®ã§ãä»åŸã®éçºã«çããããšãã§ãããã§ãã PHP8ã«ãªã£ãä»ã®æä»£ã«ãPHPã®ããšã©ãŒããäŸå€ããããŠãErrorããããããããŠããã fortee.jp ãšã©ãŒãšäŸå€ãšã¯äœããæ¯èŒãããšä»¥äžã§ãã ãšã©ãŒ æ£åžžãªåŠçãã§ããªããé£ããããªç¶æ³ ããã°ã©ãã³ã°çã«ééã£ãŠãã PHP ãçºçããããã® äŸå€ äºåæ¡ä»¶ãäºåŸæ¡ä»¶ãæºããããªãç¶æ
ã«ãªãæåããã® å¥çŽããã°ã©ãã³ã°ã«ãããå¥çŽçã«ééã£ãŠãã ããã°ã©ã èªäœãçºçãããèªèº«ã§ã³ã³ãããŒã«ããããã® æ¹ããŠæ¥æ¬èªã«ããã®ã¯é£ããã§ãããæèŠçã«ãšã©ãŒãšäŸå€ã¯èªåã®äžã§ã¯åºåã§ããŠããããªãšæããŸãã ãã®ã»ãã·ã§ã³ã§ã¯ãããšã©ãŒãäŸå€ããŸãšããŠæãã \Throwable ãéé²ã«äœ¿ãã¹ãã§ã¯ãªããããäŸå€ãæããã«ããŠããææããŠãããã©ãæ±ããããæç¢ºãªãã®ãæããããšããããšã䞻匵ãããŠãããšæããŸãã ææ§ãª throw ãæ®ãããšã¯ãäœãèµ·ãããäžå®ãªç¶æ
ã®ãŸãŸã«ããŠããããšãšçè§£ããŸããã \Throwable 㯠\Error \LogicException \RuntimeException ããã£ããããŸãã \Error \LogicException ã¯æ¬çªã§ã¯èµ·ããããªãç¶æ³ãªã®ã§ throw ãããæ¬çªç°å¢ã«ä¹ããåã«ä¿®æ£ãã¹ãã§ãã察ããŠã \RuntimeException ã¯æ¬çªã§ã¯ã©ãããŠãèµ·ãããã®ãªã®ã§ãææããŠå埩ããäœå°ã®ããå Žåã¯å埩ããåŠçãæžããã©ããããããªãå Žåã¯è«Šããã®ãè¯ããšäž»åŒµãããŠããŸããã ä»ãŸã§æ£ããçè§£ããªããŸãŸ \Throwable ãæžããŠããã®ã§ãã¡ãã®ã»ãã·ã§ã³ãèããŠçè§£ãé²ã¿ãŸãããæ³å®ããããšã©ãŒãšäŸå€ãèããããã«ããŸãã èªåã® Exception ãå®çŸ©ããã©ãããã³ã³ããã¹ãã®ãšã©ãŒãããšã©ãŒåãèŠãããšã«ãã£ãŠææ¡ã§ããããšãã話ããããŸããã ä»ç§ãåå ããŠãããããžã§ã¯ãã§ã¯ã¡ããã©èªåã® Exception ãäœã£ãŠããã®ã§ããã£ãã§ãã ã¬ã€ã€ãŒã«åãããæœè±¡åºŠã® Error ã«ããŠæž¡ãã®ãè¯ãããšãã話ããã£ãã®ã§ãDDD ã®èãæ¹ã¯äŸå€ã«ãåœãŠã¯ããã¹ããšããããšãæ°ããªçºèŠã§ããæèããŠæžãããã«ããããšæããŸããã ãã®ã³ãŒãããã¬ãŒã ã¯ãŒã¯ã®å€ã§ãåããŸããïŒ fortee.jp tech.quartetcom.co.jp ãã®ã»ãã·ã§ã³ã§ã¯ããã¬ãŒã ã¯ãŒã¯ã«äŸåããªãæžãæ¹ãå®è·µãéããŠç޹ä»ãããŸããã40 åã®ã»ãã·ã§ã³ã®ãã¡ã« Laravel ãã Symfony ã«ãã¬ãŒã ã¯ãŒã¯ç§»è¡ãããã¢ã³ã¹ãã¬ãŒã·ã§ã³ãå
¥ã£ãŠããŠé©ãã§ããã ãã¬ãŒã ã¯ãŒã¯ããæ¥åãã¡ã€ã³ã®ã³ãŒããç¬ç«ãããŠããããšã§ãåŸæ¹äºææ§ãé«ããããšããªãã¬ã€ã¹ã»ãªãã¥ãŒã¢ã«ã®æã«ãŸãåãããªããŠæžã¿ãŸãã ä»ç§ãåå ããŠãããããžã§ã¯ãã§ã¯ä¿å®æ§ãé«ããããã« DDD ã§éçºããŠããã®ã§ãåèã«ãªããŸããã ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®äžã§ã»ãšãã©å€æŽç¹ããªããåå空éã view ã®è¡šè𿹿³ãã¡ãã£ãšä¿®æ£ãããããã®ãã®ãå¥ã®ãã¬ãŒã ã¯ãŒã¯ã«æã£ãŠããŠããããã¬ãŒã ã¯ãŒã¯ã«äŸåããæžãæ¹ãããªããã°ãããªã«ç°¡åã«ç§»è¡ã§ãããã ãšæ¹ã㊠DDD ã§éçºããããããããããããŸããã ç¬ç«ããã±ãŒãžã«ããã®ãè³¢ããšæããæ€èšãããã§ãã åå ã¬ããŒãïŒçç°ïŒ Service Dev Section ã«æå±ããŠããŸãçç°é«èŒïŒ @tac_tanden ïŒã§ããèªå㯠2021 幎 3 æ 27 æ¥ïŒåïŒã3 æ 28 æ¥ïŒæ¥)ã® 2 æ¥éåå ããŸããã PHPerKaigi ã¯å»å¹ŽåããŠåå ããŠä»å¹Žã§ 2 åç®ã®åå ã§ããä»å¹Žã¯æ°åã³ãããŠã€ã«ã¹ææçã®åœ±é¿ã§ãã³ãã³çæŸéã§ã®ãªã³ã©ã€ã³éå¬ã§ããããã©ã®ã»ãã·ã§ã³ãç±ãããŒã¯ã°ããã§ãªãã©ã€ã³ã«è² ããå£ãããšãŠã楜ããã«ã³ãã¡ã¬ã³ã¹ã§ããããã®å ŽããåãããŠéå¶ã¹ã¿ãã/ã¹ããŒã«ãŒã®æ¹ã
ã«ã瀌ç³ãäžããŸããããããšãããããŸããïŒ åã»ãã·ã§ã³ã§ã¯ãæ¥é éçºãããŠããã ãã§ã¯åºäŒãããšãäžã
é£ããæ§ã
ãªç¥èŠã«ãµããããšãã§ãããšãŠãå匷ã«ãªããŸãããèªåãèŽè¬ããã»ãã·ã§ã³ã®äžããç¹ã«æ°ã«ãªã£ãã»ãã·ã§ã³ 3 ã€ã®ã¬ããŒããããããšæããŸãã PHPã§CSVãå®å¿ããŠæ±ãããã« fortee.jp github.com CSV ãžã®èªèã 180 床å€ãã£ãã»ãã·ã§ã³ã§ãããæ¥ããããªãããã®ã»ãã·ã§ã³ãèããŸã§ã¯ãCSV ã¯æ£èŠåããããæè»œãªããŒã¿åœ¢åŒãšããèªèã§ããŸããã ãªããã®ãããªèªèãæã£ãŠããããšãããšãä»ãŸã§èªåãæºãã£ãéçºã ãšãµãŒãã¹ã®ç®¡çç»é¢ããããŒã¿å
¥çš¿ãããã®ã«äŸ¿å©ã ãã䜿ãçšåºŠã®äºããããŠããªãã£ãããã ãšæããŸãã ãã®ãããªå Žé¢ã§èªåãæ±ã£ãŠãã CSV ããŒã¿ã¯ãä¿¡é ŒããŠãã人ãäœæããä¿¡é Œæ§ã®é«ãããšããäœãæžããã€ãã CSV ããŒã¿ã ã£ããã ãªãšããããšãçæãããããŸããã CSV ããŒã¿ãåŠçãããšã³ããã€ã³ãããæªæããããŠãŒã¶ãå«ãæ§ã
ãªãŠãŒã¶ãå©çšããå Žåãå
¥åããã CSV ã¯æåã³ãŒããæ¹è¡ã³ãŒã 1 ã€ãšã£ãŠãæ§ã
ãªãã®ãæ³å®ãããŸãããŸããã¯ã©ããã³ã°ããããšãããããªæªæãããããŒã¿ãå«ãŸããå¯èœæ§ãããããããã«å¯ŸããŠå
šãŠèæ
®ããå®è£
ã«ããå¿
èŠããããŸãã ã»ãã·ã§ã³ã§ã¯ãPHP ã§ CSV ãæ±ãè€æ°ã®ææ®µãšãšãã«ããããã®é·æ/çæããã¹ããã©ã¯ãã£ã¹ãæ§ã
ãªæåã³ãŒããžã®å¯Ÿå¿ã解説ããªããã©ã PHP ã§ CSV ãæ±ãã®ãç¥ãããšãã§ããšããŠå匷ã«ãªããŸãããæ¬¡å CSV ã䜿ã£ãæ©èœãéçºãããšãã«ãã©ã€ãã©ãªã®å©çšããã®å
éšå®è£
ãåèã«ãããŠããã ããããªãšæããŸããã ã¢ãã¯ã®æ³¥æ²Œããè±åŽããããã«ããããŠDBã«ã€ãªãã§ãã¹ãããŠãã話 fortee.jp ããŒã¿ãœãŒã¹ããååŸããããŒã¿ãæŽåœ¢ãããäœããã®ããžãã¯ãé©çšããããšã«ããŒã¿ãä¿åãããšãã£ãåŠçã®ãã¹ããè¡ãå ŽåãããŒã¿ã«é¢é£ããéšå以å€ã®å®è£
ã现ããªã¡ãœããã«åãåºããŠãããŒã¿ã«äŸåããªãããã«ããŠãã¹ãããããšã§ãããŒã¿å
¥åºåãŸããã®ãã¹ãã®è€éãããããŠãŠããããã¹ããèšè¿°ã§ãããšæããŸãã ããããã®å Žåã现ããåãåºããè€æ°ã®ã¡ãœãããå調ãããŠäœ¿ããããªã¡ãœããã®ãã¹ããæåŸã«ã©ãããŠãæ®ã£ãŠããŸããŸãããããã®ã¡ãœããããã¹ãããå Žåãã©ãããŠãå®è£
ãè€éã«ãªã£ãŠããŸãããŸãããŒã¿ãžãäŸåããã®ã§ãã¹ãçšã®ããŒã¿ã®çæããã®ã«ãã³ã¹ããããããŸãã å Žåã«ãã£ãŠã¯ããã®ãããªã¡ãœãããçµã¿åãããã¡ãœããã®ãã¹ãã¯è¡ããªãæŠç¥ãåãå ŽåããããšæããŸãããèªåå人ãšããŠã¯ãã®ãã㪠Large ãµã€ãºã®ãã¹ããã§ããã ãå®è£
ããããšæã£ãŠããŸãã ãã®ã»ãã·ã§ã³ã§ã¯ãäžèšã®ãããªããŒã¿ã«ãäŸåãããã€åŠçãè€éãªãã¹ããããå Žåãã¢ãã¯ã䜿ã£ããã¹ãã§ã¯ãªã DB ã«ã€ãªãã§ãã¹ãããéžæãããå Žåã®ã¡ãªãã/ãã¡ãªããã«ã€ããŠè§£èª¬ãããŠããŸããã ãã¹ãæã«ã¢ãã¯ã¯ãããã«äŸ¿å©ã§ã¯ããã®ã§ãããã©ãããŠãèªäœèªæŒã®ãã¹ãã«ãªã£ãŠããŸããäœæããã¢ãã¯ãæ£ããããšãã©ãæ
ä¿ããã®ããããããé£ãããªã£ãŠããŸããšå®æããŠããŸãããªã®ã§ãçºè¡šã«ãã£ãããã«ãå®ããŒã¿ããå®éã«çšæããŠãç¹ã«ãŠãŒã¹ã±ãŒã¹ãã·ããªãªãšãã£ã圹å²ã®ã¯ã©ã¹ã®ã¡ãœããã«å¯ŸããŠã¯ãã¹ãããŠããããšãè¯ãã®ããªãšæ¹ããŠèããããããŸããã ã¡ãªã¿ã«ãBASE ã§ã¯å®è£
è
ããã¹ãã§ææã®ããŒã¿ãçæã§ãããããFabricate ãšããã©ã€ãã©ãªãå©çšããŠããŸãã Fabricateã®èšäº devblog.thebase.in devblog.thebase.in æ¹ããŠããã¹ãã®æå³ãšåœ¹å²ã«ã€ããŠèããããããã»ãã·ã§ã³ã§ããã äœã£ãŠçè§£ããDIã³ã³ãã fortee.jp tadsan.fanbox.cc PHPerKaigi æçµæ¥ã® trackA 㯠DIïŒDependency InjectionïŒç¥ãã§ããã ãã®äžã§ãèªåããããå匷ã«ãªã£ãã®ããã¡ãã®ã»ãã·ã§ã³ã§ãããäŸåãšã¯äœãã®åæ©ã®éšåããäŸåã«ã©ãç«ã¡åããã®ããæåŸã«ã¯ DI ã³ã³ãããå®è£
ãããšãããŸã§è©³çްã«è§£èª¬ãããŠããŸãããç¹ã«ãäŸåãšã¯ãªããªã®ãããªã DI ãšããèãæ¹ãåãå
¥ããã¹ããªã®ããä»äžåºŠèªåã®äžã§æŽçããããšãã§ããŸããã èªå㯠DI ããšããæŠå¿µãå©çšããŠå®è£
ã¯ããŠããŸããã§ãããDI ã³ã³ããã®ãããªã©ã€ãã©ãªã¯å©çšããŠããããçºè¡šäžã¯æ¥ããããªããçè§£ã远ãã€ããªãéšåããããŸããããã»ãã·ã§ã³ã®åŸã«è³æãèŠè¿ããŠãªããšãçè§£ããã€ããã§ãããŸãããã®çºè¡šãéããŠåã㊠PHP-DI ãç¥ãããšãã§ããŸããã æåŸã« ä»ååŒç€Ÿã¯ç»å£è
å«ããŠèš 3 åã®ã¡ã³ããŒã§åå ãããŠããã ããããããã®åå è
ã®æ¹ã
ãçºè¡šã«ãµããããšãã§ãããšãŠãå
å®ããæéãéããããŠããã ããŸããã ãããå®è¡å§å¡é·ã§ããé·è°·å·ãããã¯ãããå®è¡å§å¡äŒã®çæ§ã®ãããã§ããå¿ããæè¬ç³ãäžããŸãã ããã§ã¯ãæ¥å¹ŽããŸãçæ§ã«ãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸããæåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠãEngineering Manager ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã BASE ã§ã¯ @budougumi0617 ãããäž»å¬ãšãªã£ãŠ Go ã®ã³ãŒããªãŒãã£ã³ã°äŒãè¡ã£ãŠããŸããæšå¹Žã¯ã ç§ãGoã®ãœãŒã¹ã³ãŒããèªããšãã®Tips ãã«ãŠãã®æ§åãå°ã玹ä»ããã ããŠããŸããã ãã®åŸãéé±ã®æ¯æ 2 åããŒã¹ã§ã³ãŒããªãŒãã£ã³ã°äŒãç¶ç¶ããŠããŸãã2020 幎 12 æä»¥éã¯åè¿°ããããã°ããã£ããã«èå³ãæã£ãŠããã ãã @dice_zu ããã po3rin ããã«ãã²ã¹ãåå ããã ãããããããšç¶ç¶ããŠããŸãã åœãšã³ããªã§ã¯ãã®äžã§è©±é¡ã«äžãã£ã Go 1.16 ã®æ©èœã«ã€ããŠã玹ä»ããããŸãã TL;DR æ§é äœãã£ãŒã«ãã¿ã° json ãªããžã§ã¯ãåã®äžã§ã»ãã³ãã³ïŒ ; ïŒãèš±å¯ãããŸãã ããšãã° json:"hoge;hoge" ã®ããã« ; ã JSON ãªããžã§ã¯ãå ã«å«ãŸããå Žåã json.Marshal / json.Unmarshal å¯èœãšãªããŸãã JSONã®ä»æ§ãå®çŸ©ãã RFC7159 ã«ãããšã»ãã³ãã³ã¯æåçš®ãšã㊠valid ã§ãããã 瀟å
ã§éå¬äžã®ã³ãŒããªãŒãã£ã³ã°äŒã¯ã²ã¹ã倧æè¿ã§ããèå³ãããæ¹ã¯èº«è¿ãªç€Ÿå¡ã®æ¹ã @hgsgtk ã«ãçžè«ãã ãã Go 1.16 ã® Minor changes Go 1.16 ã® Release Notes ã«ãŠ 1.15 ããã®å€æŽç¹ã«ã€ããŠèŠãããšãåºæ¥ãŸãã golang.org ç§ã¯æ¯å Core library ã® Minor changes to the library ãçºããŠæ°ã«ãªã PR ã®ã³ãŒããèªãã§ã¿ãã®ã奜ãã§ãã ãã®äžã§ãã³ãŒããªãŒãã£ã³ã°äŒãŸã§ãã¿ã«ãããããŠããã ããã®ã encoding/json ããã±ãŒãžã®å€æŽç¹ã§ãã Go 1.16 ã«ããã Minor changes https://golang.org/doc/go1.16#encoding/json The json struct field tags understood by Marshal, Unmarshal, and related functionality now permit semicolon characters within a JSON object name for a Go struct field. ã©ããã£ãå
容ãªã®ããåœæ¥åå è
ã§ 15 åçšåºŠèªãã å
容ãçæ§ã«ãå
±æããããŸãã encoding/json ããã±ãŒãžã® Minor changes æ§é äœãã£ãŒã«ãã¿ã° json ãªããžã§ã¯ãåã®äžã§ã»ãã³ãã³ïŒ ; ïŒãèš±å¯ãããŸãããå
·äœçã«ã¯æ¬¡ã®ãããªãµã³ãã«ã³ãŒãã§ãã package main import ( "encoding/json" "fmt" ) func main() { encoded := [] byte ( `{";": "World!"}` ) // ã»ãã³ãã³ãKeyã®JSON Object type MyObject struct { Hello string `json:";"` } var decoded MyObject if err := json.Unmarshal(encoded, &decoded); err != nil { fmt.Println(err) return } fmt.Printf( "%+v" , decoded) // Output: {Hello:World!} } https://play.golang.org/p/3HUq4N66AK5 倿Žã®èæ¯ ãã»ãã³ãã³ã JSON ãªããžã§ã¯ã ã® Key ã«ã¯ãã£ãŠãããã®ãæ±ããŠãŒã¹ã±ãŒã¹ãããŸãæ³åã€ããªããããšãã話ãã³ãŒããªãŒãã£ã³ã°äŒã§ã¯ããŠããŸãããã©ããã£ãèæ¯ã§ãã®å€æŽãè¡ãããã®ã§ãããããèµ·ç¹ãšãªã£ã Issue ãèŠãŠã¿ãŸãããã issue: encoding/json: does not recognise semicolon as a valid field name https://github.com/golang/go/issues/39189 ãã®å€æŽã®èæ¯æ ¹æ ãšãªã£ãã®ã¯ JSON 仿§ãèŠå®ããŠãã RFC7159 ã®ããã§ãã So pretty much we check JSON spec (RFC-7159) for validity on our "bug" and it seems to us that the spec would treat a semicolon as a normal character. Goå
éšå®è£
ã«ããã倿Žç¹ ããã§è¡ãããå
éšå®è£
ã®å€æŽã¯æ¬¡ã® CL ãã確èªã§ããŸãã https://go-review.googlesource.com/c/go/+/234818 src/encoding/json/encode.go ã«å
¥ã£ãä¿®æ£ã isValidTag ãšããã¡ãœããã«ãŠ tag ã®æ£åœæ§ãæ€èšŒããã®ã§ããããã®å
éšã§ã®æåçš®ã«ãŒã«ã« ; ã远å ããŠããŸãã strings.ContainsRune( "!#$%&()*+-./:;<=>?@[]^_{|}~ " , c): äœè« Go 2structured tag ãšããææ¡ Go ã³ãŒããªãŒãã£ã³ã°äŒã®éè«ã®ãªãã§ Go2 ã®ããããŒã¶ã«ã§ structured tags ãšãããã®ãææ¡ãããŠããããšãç¥ããŸããã github.com çŸåšã®æ§é ã¿ã°ã®ãã©ãŒãããã¯æååãªãã©ã«ã§ããããã® Issue ã®ææ¡ããã³ãã£ã¹ã«ãã·ã§ã³ã®çµæãå
·äœäŸãšããŠæ¬¡ã®ãããªã³ãŒããèšè¿°ãããããªæ©èœææ¡ãšãªã£ãŠããŸãã package mypackage import json import sqlx type MyStruct struct { // [] å
ã«structå®çŸ©ãã Value string [json.Rules{Name: "value" }, sqlx.Name( "value" )] PrivateKey [] byte [json.Rules{Ignore: true }] } å人çã«ã¯ãæååãªãã©ã«ã§èšè¿°ããæ¹æ³ãšæ¯èŒããéã«ãèšè¿°ãã¹æã«æ°ãä»ããããç¹ãå¬ãããšæããŸãããå®è¡æãšã©ãŒãç¡èŠãããŠããŸãã®ã§ã¯ãªããŠãŒã¶ãŒãã¹ãã«ãã¹ããéã«ã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãã Issue å
ã§ã®äŒè©±ã¯ 2020 幎 1 æããã«èœã¡çããŠããŸããããããããã¢ã€ãã¢ããããã ãªããšé ã®çé
ã«å
¥ããŠãããšãããããããŸããã ãããã« ããããã«ã§ãããencoding/json ã® minor changes ã«ã€ããŠç޹ä»ããŸãããGo ã®å
éšã³ãŒããªãŒãã£ã³ã°ã®ã¯ããã®äžæ©ãšããŠèº«è¿ãªæšæºã©ã€ãã©ãªã®ã¡ãã£ãšãã倿Žã远ã£ãŠã¿ããšããã®åšèŸºã³ãŒããã¡ãã£ãšããããããŠããããã§ãã 瀟å
ã§éå¬äžã®ã³ãŒããªãŒãã£ã³ã°äŒã¯ã²ã¹ã倧æè¿ã§ããèå³ãããæ¹ã¯èº«è¿ãªç€Ÿå¡ã @hgsgtk ã«ãçžè«ãã ããã ãã¡ããäœè«ã§ãããBASE BANK æ ªåŒäŒç€Ÿã¯çµ¶è³æ¡çšåéäžã§ãïŒããããã¡ãã£ãšèå³ãããªãããšããã£ãããGo 1.16 ã®è©±ãšãçŸå Žã§ã® Go éçºã«ã€ããŠã¯ã€ã¯ã€ã¯ãªããŸãããïŒ open.talentio.com
ã¯ããã« CTOã®å·å£ ( id:dmnlk ) ã§ãã BASEã¯çŸåš140äžã·ã§ãããè¶
ãããµãŒãã¹ã®å®å®æ§ã»ä¿¡é Œæ§ãç¶æããããšã¯éåžžã«éèŠã«ãªã£ãŠããŸãã ãã®äžã§å»å¹ŽãNew Relicãæ¬æ Œçã«å°å
¥ããŸããã https://newrelic.com/jp/press-release/20201217 ãããNew Relicãå°å
¥ããã ãã§å®å®æ§ãç²åŸã§ããããã§ã¯ãããŸãããåŸãããã®ã¯å¯èŠ³æž¬æ§ã®ããã®æŠåšã§ããããã®äœ¿ãæ¹ãé©åã«åŠã°ãªããã°ç¡é§ã«ãªã£ãŠããŸããŸãã ä»åãNew Relic瀟ã®ãææ¡ããã瀟å
ã¡ã³ããŒåãã«ãªã³ããŒãã£ã³ã°äŒãéããŠããã ããããšã«ãªããŸããã ãªã³ããŒãã£ã³ã°ãè¡ãããšã§ãŸãNew Relic Oneã®ãªãã¶ãŒãããªãã£ãã©ãããã©ãŒã ã§äœãåºæ¥ãã®ããã©ã®ããã«äœ¿ãããšã§BASEã·ã¹ãã ã®å¯èŠ³æž¬æ§ãåŸãŠããããšãåºæ¥ãã®ããéçºããŒã ãäœç³»çã«åŠã¹ãããšãçãããšãšããŸããã ãªã³ããŒãã£ã³ã°ã«åå ã㊠SREããŒã ã®ngswã§ãã åœæ¥ã®åå è
ã¯æçµçã«ã¯50åè¿ããšãªããŸããããããã¯ãã«çŽæ¥é¢ããããã³ããšã³ãããµãŒããµã€ãéçºé£ã®ã»ãã«CSE( Corporate Solutions Engineering )ããŒã ãåå ãã圢ã§ã倧å€ã«ããããªäŒã«ãªããŸããã 14:00ã17:00ãšããé·äžå Žã®äžã§ãå人çã«ç¹ã«çãäžãã£ããªãšæãããšããã§ãã以äžãäžå¿ã«åœæ¥ã®é°å²æ°ããäŒãã§ããã°ãšæããŸãã ãNew Relicã«æåŸ
ããããšã¯ãªã«ãã New Relic ã§ã§ããããšã«ã€ã㊠NRQL / Query builder ã«ã€ã㊠ãNew Relicã«æåŸ
ããããšã¯ãªãã§ããïŒã æåŸ
ã«èžãèºãããé¢ã
ãªã³ããŒãã£ã³ã°éå§ã®çŽåãŸã§ãSlackäžã§ã¯New Relic瀟ã®Senior Solutions Consultant 1 ã®æž
æ°Žæ¯
æ§ãšèª¿æŽãè¡ã£ãŠãããŸããã æž
æ°Žããã«ã¯BASEã匷ããµããŒãããã ããŠããã ãã®äžã§ãææ¡ããã ããã®ããåéçºããŒã ã®ä»£è¡šè
ã1åãã€æ±ºããŠãããããã«ãNew Relicã«æåŸ
ããããšããããããæããŠããã ãããããšãããã®ã§ããã åœæ¥çºè¡šå
容ã¯ä»¥äžã«ãªããŸããã æå±ããŒã New RelicãŸãã¯ä»æ¥ã®ãªã³ããŒãã£ã³ã°ã§æåŸ
ããããš ãã€ã¡ã³ã New Relic BrowserãçµèŸŒäžã ãŠãŒã¶ãã©ã®ãããªåœ¢ã§ <BASE> ãå©çšããŠããããè§£æããŠãããããšèããŠããŠã ä»ã®æ©èœãããã£ãŠãããã CSE å
éšçµ±å¶ãå¹ççãã€æå¹ã«é²ããŠãããããªæ©èœãããã®ãªã³ããŒãã£ã³ã°ã®äžã§èŠã€ããŠãããã ã·ã§ãã1 (New Relicãçšããããšã§)éçºåŽã§ãç£èŠ/ã¢ãã¿ãªã³ã°ãç©æ¥µçã«è¡ããåå£ãã§ããããšãæåŸ
ããŠãã ããã³ããšã³ã1 ããã©ãŒãã³ã¹æ¹åã®è¶³ããããšããŠNew RelicãæŽ»çšããŠãããã å®å®éçšãèªããŒã ãå«ããå
šéçºé£ã§ãã£ãŠããããšã ã·ã§ãã2 ãªãªãŒã¹ããæ©èœ/APIãæåŸ
éãã®ããã©ãŒãã³ã¹ãã§ãŠããããããæç¹ããå£åããŠããªãããšããããšã远跡ããã ããã³ããšã³ã2 JavaScriptã®ãšã©ãŒãã©ããã³ã°ãã远ããããŠããªãããã©ãŒãã³ã¹ã®ããã«ããã¯ã®çºèŠãè¡ãããã®ããŒã«ãšããŠæåŸ
ããŠããããã®ãªã³ããŒãã£ã³ã°ã§åŠãã§ãããã åºç€ ä»ãã¢ããªããåŒã³åºãããAPIã®ããã©ãŒãã³ã¹æ¹åãè¡ã£ãŠãããšããã§ããã°è¿œè·¡ããã䟿å©ã«ããã€ç°¡äŸ¿ã«ãªãããšãæåŸ
ããŠãã SRE ã€ã³ãã©åŽ(ããšãã°SRE)ãšéçºé£ã§ã®å
±éã®è©±é¡ããããšãã°New Relicã®ããã·ã¥ããŒããäžå¿ã«ãªã£ãŠãããããªããšãæåŸ
ããŠãã ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ ã¢ãã€ã«ã¢ããªããåŒãã§ããAPIã®è² è·/ããã«ããã¯ãªã©ã®ãåé¡ã®çºèŠãšè¿œè·¡ãè¡ããã BASE BANK瀟éçºé£ ãã€ã¯ããµãŒãã¹åããŠããäžã§ã3ã4ãµãŒãã¹ãŸããã§ãã°ã確èªããªããã°ãããªããªã©ãéçšã«èŠããã§ãããšããããã SLOãªã©ã®èšå®ãèããŠããäžã§ãããããã®ã¡ããªã¯ã¹ãã©ããšãã(ãããŠæãå
¥ããã)ãªã©ã®ãã³ãããã®ãªã³ããŒãã£ã³ã°ã§åŠãã§ãããã DS New RelicãããŒã å
ã§ã©ã®æ§ã«æŽ»çšã§ããŠãããã®ãããã®äžå°ã«ãªãç¥èãä»å
¥ããŠãããã ããã£ããªãšæããã®ã¯ãCSEããŒã ã®ãå
éšçµ±å¶ã«æŽ»çšãããããšãããã®ã§ããã ãã®çºæ³ãèªèº«ã¯æã¡åŸãªãã£ãã®ã§ãå
±æããã ããã®ã¯å人çãªåç©«ã®ã²ãšã€ã§ãããŸããã ããã²ãšã€æããããšã¯ãéçºé£ã¯ããã©ãŒãã³ã¹ã«é¢å¿ããªãããã§ã¯ãªããŠãé¢å¿ã¯ããã®ã ããã©ã远跡ã«å¿
èŠãªæ
å ±ãžã¢ã¯ã»ã¹ãã¥ãããããã«ãçµæçã«åŸåãã«ãªã£ãŠããŸã£ãŠããçŸç¶ãããããããšãããã®ã§ããããã¯ããããSREããŒã ã®è³ã£ãŠããªãç¹ã§ãããªãšåçããæ¬¡ç¬¬ã§ãã ãã®ããšæž
æ°Žãããã New Relic ã®æŠèŠèª¬æããããšãã«ã¯è£è¶³ãå
¥ããªãããNew Relicã®ç®æããšããã¯ãªã«ããšããå
容ãžãšé²ãã§ãããŸããã çŽå¹
ã®éœåããããŸãããããæ£ç¢ºãªå
容ããèªèº«ã®ç®ãšè³ã§ã確èªããã ããããšèããŸãã®ã§ãèå³ãæãããæ¹ã«ã¯ä»¥äžã®ãŠã§ãããŒãžã®åå ãéå»åç»ã®é²èЧãããããããããŸãã ã»ãããŒã»ãŠã§ãã»ãã㌠| New RelicïŒãã¥ãŒã¬ãªãã¯ïŒ Q å
éšçµ±å¶ã§ã©ããã£ããšããã«ã€ãããã§ãããããããšãã°DBæäœã®ç£èŠã§ãããšãâŠâŠ A ãã°ããŒã¹ã®æ€ç¥ã§ãã£ããããã®ããŒã¯ãŒãç£èŠãã§ããŸããå ããŠãããšãªãªãŒã¹ããã»ã¹ãå
éšçµ±å¶ã®å¶çŽããããã®ã§ãã¢ãã¿ãªã³ã°ãQAãšé£æºãããããšãã²ãšã€ã®éèŠãªèгç¹ã«ãªããŸã Q ããã¯ãšã³ãã§çšŒåãããããåŠçã®æåå¯åŠãªã©ããã¡ããšæ€ç¥ããä»çµã¿ã¯ã§ããã§ãããã A Webãã¬ãŒã ã¯ãŒã¯ã®æ©èœãå©çšããŠãããã®ã§ããã°ãçµã¿èŸŒãããšã¯é£ãããªãã§ã è£è¶³ããããšãããåŠçãªã©ã¯å®è¡ãšçµäºã ãã§ãªããåŠçå
容ãšãã®åºåææç©ã®æŽåæ§ãªã©ããããåŠçã®äŸ¡å€ãã®ãã®ã远ã£ãŠããããšã倧äºãªããšãªã®ã§ãããã€ãã®èгç¹ã§è€åçã«èããå¿
èŠãã§ãŠãããããããŸãã New Relic å
¥é(æ©èœç޹ä») ãããžã¥ã¢ã«åã®éèŠæ§ãäœçŸçã«çè§£ããŠããããšè©±é¡ã«ãªãã¡ã³ããŒã®ãã©ã€ããŒãæ© ããããã¯éçºã¡ã³ããŒãã代衚ããæ°äººããäžäººãã€Zoomç»é¢å
±ææ©èœãçšããŠNew Relicã«è§ŠããŠãã圢ã«ãªããŸãããã¢ãããã°ã©ãã³ã°ãã§ãããã©ã€ããŒåœ¹ã®ãããªãã®ãæ³åããã ããã°ééãç¡ãããšæããŸãã代衚è
ãå«ãåå ããã»ãšãã©ã®ã¡ã³ããŒã¯New Relicã仿¥è§Šãã®ãåããŠãšèšã£ãŠããç¶æ
ã§ããããæž
æ°Žãããããã²ãŒã¿åœ¹ãšããŠäœçœ®ãã圢ã«ãªããŸãã çµ±åããã·ã¥ããŒããšããŠã®New Relic One Add More Data New Relicã«ããŒã¿ãæå
¥ããããã®èšèª/ããŒã«ããšã®ã»ããã¢ããæé ããã¥ãŒããªã¢ã«ã®ãããªåœ¢ã§ããã芪åèšèšã§ã ã¢ã«ãŠã³ã BASEã§ã¯ãµãã¢ã«ãŠã³ããç°å¢ããš(Prd/STG/Dev/âŠâŠ)ã«å¯Ÿå¿ãã圢ã«ããŸãã Services BASEã§ã¯AppNameããªããžããªåããåŒçšããŠå¯Ÿå¿ãããããã«ããŸãã ãªããžããªAãå®è¡ããŠããEC2ã¯è€æ°å°æ§æã§çšŒåããŠããŸããããªããžããª=AppNameãšããŠããããNew Relicã®ããŒã¿äžã§ã¯ãŸãšããŠè¡šç€ºãããããã«ãªã£ãŠããŸã APMå°å
¥åŸã«æŽ»çšã§ããåæ©èœ Summary ãµã³ãã«ã«ããAppNameã§ã¯ãMySQLã®ã¬ã¹ãã³ã¹æéãé«ããªã£ãŠããã°ã©ããç®ã«ä»ããŸãã Databases Summaryã§ã¿ã€ããMySQLã®ã¬ã¹ãã³ã¹æéãé«ããªã£ãŠããéšåã調æ»ããŠãããŸã QueryTimeãé·ãéšåãã°ã©ãã§èŠèŠçã«ç¢ºèªããããšãã§ããŸã Slowest query time ã§ sort ããããšã«ãã Slow queries ãåç
§ããããšãã§ããŸã MySQL ã® Queryãã®ãã®ãšãPHPã®Stack Traceãåæã«ç¢ºèªããããšãã§ããŸã ãEXPLAINã ããslowlog ã grep ã㊠explain ããŠâŠã¿ãããªããšãããã§ã·ã¥ããšã§ããããšãããããªã³ã¡ã³ããSlackäžã§èŠåããããŸãã Workloads ã¢ã«ãŠã³ã(BASEã§ã¯ãµãã¢ã«ãŠã³ã)ããšã®ãªãœãŒã¹çŸ€ã®å¥å
šæ§ç¶æ
ãäžèЧã§ããŸã èªåçã«çµã¿èŸŒãŸããŠããã®ã§æéãããã§äŸ¿å©ããã§ã NRQL / Query builder ããã£ãŠãã ãããæéå
ã«ã©ã®ã·ã§ãããã€ãã³ããè¡ã£ãŠãªã¯ãšã¹ããå¢å€§ããããã²ãšç®ã§ããããããšã«æå¿ããäžå å人çã«ãã£ãšããšããµã€ãã£ã³ã°ãªæéããã£ãŠããŸããã APMã§æå
¥ãããããŒã¿ã¯New Relicäžã§NRDBãšããŠæ ŒçŽãããNRQL(New Relic Query Language)ãå©çšããŠããŸããŸãªè§£æãå¯èœãšãªããŸãã ä»åã®ãªã³ããŒãã£ã³ã°ã§ã¯ä»¥äžã®NRQLãçšããå¯èŠåãæ«é²ãããŸããã FROM Transaction SELECT avaerage(duration) ããã§ã® duration ã¯å±æ§[å¿çæé]ã§ã ãã®NRQLã§æ¬çªç°å¢ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³å¹³åæéãåŸãããŸãã FROM Transaction SELECT avaerage(duration) TIMESERIES TIMESERIES ã®ãããã§æå®æéåäœããšã®éèšçµæãæç³»ååããã°ã©ãã衚瀺ãããŸãã FROM Transaction SELECT percentile(duration, 99) TIMESERIES percentile(duration, 99) 㯠duration ã®99ããŒã»ã³ã¿ã€ã«ãæå³ããŠããŸã TIMESERIES ã«ããåæ§ã«æç³»ååããã°ã©ããè¿ããŠãããŸãã FROM Transaction SELECT percentile(duration, 99) TIMESERIES FACET name name ã¯å±æ§ã§ã ããã§ã¯å®è¡ãããPHPã®ãã¡ã€ã«åã§ãã FACET ã¯ã°ã«ãŒãåãè¡ã£ãŠãããŸã å人çã«ã¯ FACET ããšãŠã奜ãã§ã FROM Transaction SELECT percentile(duration, 99) TIMESERIES FACET Base.shop_id LIMIT 30 SINCE 1 week ago Base.shop_id ã¯BASEãåã蟌ãã Custom Attribute ã«ãªããŸãã Custom Attribute ã«ã€ããŠè©³ããã¯ä»¥äžããåç
§ãã ãã ã¢ããªã±ãŒã·ã§ã³åºæã®å±æ§ã掻çšããæ§èœåæ | Observability Platform - New Relicå
¬åŒããã° æèš³ãããšãçŽè¿1é±éã§BASEã·ã§ããããšã®å¿çæé99ããŒã»ã³ã¿ã€ã«ã§(åŠçæéãããããã£ãŠãããã®ã®)äžäœ30ä»¶ã®æç³»åã°ã©ãããšãªãã§ãããã FROM Transaction SELECT average(duration) TIMESERIES FACET Base.shop_id LIMIT 30 SINCE 1 week ago ãã¡ãã¯å
ã®ãã®ãå¹³åæéã§çœ®ãæãããã®ã§ã FROM Transaction SELECT average(duration) * count(*) TIMESERIES FACET Base.shop_id LIMIT 30 SINCE 1 week ago å
ã®å¹³åæéã§ã¯ãåã·ã§ããã®ãªã¯ãšã¹ãæ°ã®å€å°ã¯èæ
®ãããŠããŸããã§ããã®ã§ã average(duration) * count(*) ãšããŠèæ
®ãã圢ã«å€ãããŸãã ãã®åœ¢ã«ãããããšã§ãããæŠç¥çãã€å¹æçãªãè²»çšå¯Ÿå¹æã®åäžã«çŽçµããããã©ãŒãã³ã¹æ¹åã®ããã«å¿
èŠãªãå®è·µçãªããŒã¿ãåŸãããããã«ãªããŸãã ããã§ã¯NRQLã®ãã¯ãã«ããèŠãã€ããããŸããã èå³ãæãããæ¹ã¯ä»¥äžãã芧ãã ããã Get started | New Relic Documentation NRQL Lessonsã¢ããªã±ãŒã·ã§ã³ã䜿ã£ãŠNRQLããã¹ã¿ãŒããã - New Relicå
¬åŒããã° çµã³ã« New Relicã®åºæ¬çãªæ©èœã«ã€ããŠåŠã¹ããªã³ããŒãã£ã³ã°ã§ããã ãŸã å°å
¥åœåã§ãã£ãŠå³å¹çãªãã®ãæåŸ
ããããã§ã¯ãªãã£ãã®ã§ããããã®èšäºãæžããŠãã2021幎03æ«ãããŸã§ã§ä»¥äžã®ãããªææããããŸããã ç¹å®ã·ã§ããã®ããŒãžè¡šç€ºãé
ããªã£ãåå ã®ç¹å® ãåãåããã®åå ãšãªã£ãäžå
·åãã©ã®ãªãªãŒã¹ãšé¢é£ãããã®ãã®ç¹å® ä»åŸã¯ãSREç芳ç¹ããããã·ã¥ããŒããå
å®ãããŠãããæ§ã
ãªæææ±ºå®ã«New Relicãå©çšããŠãããããšèããŠããŸãã ãµãŒãã¹ã®ä¿¡é Œæ§ãç²åŸããããšã¯SREããŒã ã ãã®ããã·ã§ã³ã§ã¯ãªãããã¯ãšã³ãã»ããã³ããšã³ããšã³ãžãã¢åããæåŸ
ããŠããŸãã New Relicãå§ããšããããŒã«ã®æ¯æŽãåããªãããç©æ¥µçã«æ¹åããŠãããšã³ãžãã¢ãåéããŠããŸãã open.talentio.com open.talentio.com SREããŒã ã¯å
æ¥æ±äººãèŠçŽããŸããã devblog.thebase.in æž
æ°Žããã®ããšãå¿ã®ãªãã§ã¯ ãNew Relic ã¢ããããšåŒãã§ããŸã ↩
ããã«ã¡ã¯ïŒïŒ BASEæ ªåŒäŒç€Ÿ SREããŒã ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ã®å¯å¡( @tomy103rider )ã§ãã 2021幎3æçŸåšãSREããŒã ã¯ç§å«ã3åã§ãæè¿ç§ã¯æé·ãããµãŒãã¹ãäžç·ã«æ¯ããŠãã£ãŠé ããSREã®ä»²éãæ±ããŠæ¡çšãªã©ãã¡ã€ã³ã«æ¥åãè¡ã£ãŠããŸãã ã¯ããã« çªç¶ã§ãããçããã®ããŒã ã®æ±äººç¥šã¯èª°ãäœã£ãŠããŸããïŒãããŠãããèªãã ããšã¯ãããŸããïŒ æãåºããŠã¿ããšå
ã
ã®SREããŒã ã®æ±äººç¥šã¯ç§ãšåã®ãããŒãžã£ãèããŠäœã£ããã®ã§ããã ãã®å
å®¹ãæ¹ããŠç¢ºèªãããšã èŠãŠããã ããŠããæ¹ã«çŸåšã®SREããŒã ã®æããäŒããå
容ã ãããïŒ ããŒã ã®ã¡ã³ããŒèªèº«ãè¿ããã仲éã®ã€ã¡ãŒãžãã§ããå
容ã ãããïŒ æ¡çšã«é¢ããCTOã«ããã®ã€ã¡ãŒãžã¯å
±æã§ããŠããã ãããïŒ ãªã©ãšæããéšåãåºãŠããããããã®ã¿ã€ãã³ã°ã§èŠçŽããŠã¢ããããŒãããããšã«ããŸããã ä»åã¯ãã®ãšãã®è©±ã玹ä»ããããšæããŸãã ã©ããã£ãŠèŠçŽãïŒ ãŸãã¯ä»ãŸã§ã®ããã«ãããŒãžã£ãèããŠäœãã®ã§ã¯ãªããSREããŒã ãšããŠä»ã©ããã仲éãæ±ããŠããã®ããèªèãåãããªããèªåãã¡ã§èããŠèŠçŽãããã®å
容ãæçµçã«CTOãšããåãããããšãä»åã®ãŽãŒã«ã«ããŸããã ãŸãã話ãåããå§ããã«ããã£ãŠã éå»ãä»ã®æ±äººç¥šãæ€èšãããšãã®çµç·¯ãèŠãããšè¯ããã éå»ã®æ±äººç¥šã®æŽå²ãèŠãããšè¯ããã ãããã瀟å
ã«ãªãŒãã³ã«èŠããç¶æ
ã«ãªã£ãŠããŠãè¯ããã ãšããæèŠãåºãŠãéå»ã®æŽå²ãæ®ããšãªããšããã¯GitHubäžã§ãã£ãŠã¿ãŠã¯ïŒãšããããšã«ãªãã詊ãã«èŠçŽãã®éçšãã¢ããããŒããGitHubäžã«æ®ããŠã¿ãããšã«ããŸããã èŠçŽãã®éçšãIssueã«æ®ãïŒ æ°ãã«äœæããRepositoryã®Issueã«ããã£ãŠãããïŒããšCTOããã·ããšã³ã¡ã³ããæ®ããŠã¹ã¿ãŒãã§ãã ã¹ã¿ãŒãçŽåŸã®æ§å æ°åã®èŠçŽãMTGããããªããããã®ãããªé°å²æ°ã§è°äºé²çãªã³ã¡ã³ããã«ãžã¥ã¢ã«ãªã³ã¡ã³ããå²ãšäœã§ããã®Issueã«æ®ããŠãããŸããã æ±äººç¥šã®ã¢ããããŒãã¯Pull RequestããŒã¹ã§ïŒ æçµçã«1ã€ã®æ±äººç¥šãäœãããã«ãèŠçŽãMTGã§è©±ãåã£ãçµæã®å€§æ ãåæ ããå
容ããŸãç§ãäœæãã Pull Requestã®æ§å1 ãããã¿ããªã§ã¬ãã¥ãŒããŠãããéäžCTOã®ã¢ããã€ã¹ãè²°ã£ããããŠããŸãã¯SREããŒã ã®äžã§èªèããã£ãç¶æ
ã«ããŸããã Pull Requestã®æ§å2 ãããŠæåŸã«CTOã«ã¬ãã¥ãŒããŠãããã»ã»ã» Pull Requestã®æ§å3 ç¡äº approvedãšãªã£ãããšã§ãä»åã®ãŽãŒã«ã§ããCTOãšã®èªèåãããã§ããŸããã ãã£ãŠã¿ãŠã©ãã ã£ãïŒ æè§ãªã®ã§æåŸã«ããŒã ã®ã¡ã³ããŒã«ä»åã®ææ³ãIssueã®ã³ã¡ã³ãã«æ®ããŠããããŸããã Næ°ã³ã¡ã³ã Aæ°ã³ã¡ã³ã æç²ãããš åã®å
å®¹ã«æ¯ã¹ãŠãã仿±ããŠããã€ã¡ãŒãžã衚çŸã§ããããïŒ æ¡çšã«ã€ããŠã®åœäºè
æèãæã€ããã«ã±ã«ãªã£ãïŒ å±¥æŽãæ®ããããšãå°æ¥ã®è²¡ç£ã«ãªããããªæåŸ
ãïŒ ãšãããããªè¯ãææ³ããã£ãŠãããããã§ãã ãŸãšã ããŒã ã®èŠæš¡æãç¶æ³ã«ãã£ãŠä»åã®ãããªããæ¹ãé©ããŠããããšããã®ã¯ããããšæããŸãããç§ãšããŠã¯èŠçŽãã®éçšã財ç£ãšããŠæ®ããããšãã¿ããªã§æ°ããªä»²éã®ã€ã¡ãŒãžãæãŠãããšããšãŠãææçŸ©ãªæéã«ã§ããã®ã§ã¯ãšæããŸããã ãããŠã»ã»ã» ä»åã®ã¢ããããŒãåŸã®æ±äººç¥šã open.talentio.com ãã¡ãã§ãïŒïŒïŒ ãããŸã§ã®å
容ãã¹ãŠãåããªã ã£ããã®ããã«ãªããŸããã»ã»ã» çŸåšSREããŒã ã§ã¯æé·ãããµãŒãã¹ãäžç·ã«æ¯ããŠãã£ãŠé ãã仲éãåéããŠããŸãã®ã§ãæ±äººç¥šãã芧ããã ããŠå°ãã§ãèå³ãæã£ãŠããã ããŸãããããŸãã¯ã«ãžã¥ã¢ã«ã«ã§ãã話ã§ããã°ãšæããŸãã®ã§æ¯éãé£çµ¡ãã ããïŒïŒïŒïŒïŒ
ããã«ã¡ã¯ãBASEã®ããã³ããšã³ãããŒã ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒããã£ãŠããæŸå( @simezi9 )ã§ãã ç§ã¯æè¿ã§ã¯ãããŒãžã£ãŒãšããŠã³ãŒããæžãããšãããããŒã ã®ç·šæãæ¡çšãªã©ãã¡ã€ã³ã«æ¥åãè¡ã£ãŠããã®ã§ããã ãããªäžã§ãã©ã£ãšæžããã³ãŒãã§èŠäºã«èœãšã穎ã«ããã£ãŠå€±æãããã®ã§ãã®å
±æèšäºã§ã ãŸããã BASEã®ããã³ããšã³ãããŒã ã¯çŸåš15åã»ã©ïŒãã¡æ¥åå§èš5åïŒã§éå¶ãããŠããŸãã ãã®äººæ°ã¯ä»åŸãã©ãã©ãå¢ããŠããäºå®ãªã®ã§ãããç®äžå
šç€Ÿçã«ãªã¢ãŒãã¯ãŒã¯ã«ãªã£ãŠããäºæ
ãæäŒã£ãŠã¡ã³ããŒå士ã®é¢ä¿æ§ãåžèã«ãªã£ãŠããŸãæžå¿µãæã£ãŠããŸããã BASEã®äžã§ã¯åžžã«è€æ°ã®ãããžã§ã¯ããèµ°ã£ãŠããã®ã§ãããããããã®ãããžã§ã¯ãã«ããã³ããšã³ããšã³ãžãã¢ã¯2ã3åãã€é
眮ãããŠããŸãã ãããªãªãã§ã¢ãµã€ã³ããã人å士ãããã³ããšã³ããšã³ãžãã¢å士ã§ããã«ãé¢ãããããäºãã®ããšãããããããªããšããç¶æ
ãä»åŸãããããšããã®ã¯çµç¹ãšããŠåé¡ããããšèãpeer 1on1ãšããå¶åºŠãéå§ããŸããã peer 1on1 peer 1on1ã¯çµç¹ã«ãã£ãŠã¯ã·ã£ããã«ã©ã³ããªã©ã®ååã§éå¬ãããŠãããããã§ãããèŠã¯ãã©ã³ãã ã«éžåºãããã¡ã³ããŒäºäººã§1on1ãããããšããæéã§ãã1on1ãšãã£ãããèšã£ãŠããŸãããã€ãŸããšãããäºããç¥ãéè«ã®å Žãäœããšãããã®ã§ãã çŸåšã¯é±1å30åã®æéãåã£ãŠè¡ã£ãŠããŸããBASEã§ã¯æè¿å
šç€Ÿçãªéè«ã®å Žæãšã㊠Discord ãçšæãããŸãããã Discordã®æ°è»œãªãã€ã¹ãã£ããæ©èœãšã®èŠªåæ§ãé«ãããããªãã«çãäžãã£ãŠéçšãããŠããŸãã (1察1ã§è©±ãã®ã¯å°ãç²ãããšãã話ãããã3人åäœã«å€ããããšãããããšéçšã¯è©Šè¡é¯èª€ããŠããŸã) ãããŠãã®peer 1on1ãå§ããã«ããã£ãŠãã¡ã³ããŒãã©ã³ãã ã«çµã¿åãããããã®ããŒã«ãGoogle Apps Scriptã§ããã£ãšæžããŸããã ãããªæãã§Aåã«ä»ããã¡ã³ããŒãå
¥åããŠãããã¡ã³ããŒçæãã¿ã³ãæŒããšæ¯åã®äºäººçµãäœãããŠãããŸã çºçããåé¡ ãã®ã·ãŒããäœã£ãåœåã¯ããïŒèŠãç®ã¯ããŠããïŒ ãŸããã£ã¡ãããŒã«ãäœã£ãŠããŸã£ããã»ã»ã» ïŒ å®ã³ãŒã10è¡çšåºŠ) ããªã©ãšæŠã«å
¥ã£ãŠããã®ã§ãããããéçšãå§ããŠã¿ãŠãã°ããåæ°ãéãããããªèŠæ
ãå¯ããããããã«ãªããŸã æåã¯ãŸããã©ã³ãã ã ããããªããšãããã§ããïŒãããã«èããŠããã®ã§ããã 察象ã¡ã³ããŒã10åãè¶
ãããããªç¶æ³ã§ãã®åãã¯æµç³ã«ãããããšããããšã§èª¿æ»ãå§ãããšããã«åå ãçªãæ¢ããããŸããã ãã°ãæ±ããã·ã£ããã«ã®å®è£
ãšä¿®æ£ ãã®ã·ãŒãã®å®è£
㯠ã¡ã³ããŒã®äžèЧãã·ãŒãããååŸ ãã®é
åãã·ã£ããã« çµæåã«ãã®ãŸãŸåºå ãšããã·ã³ãã«ãªãããŒã«ãªã£ãŠããŸãã ãã®æ žãšãªãã·ã£ããã«ã®ããžãã¯ã¯ä»¥äžã®ãããªã³ãŒãã«ãªã£ãŠããŸããã const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.sort(() => Math.random() - 0.5); ãã®å®è£
èªäœã¯çŽ æŽãªãã®ã§ãã»ãšãã©ã®äººã«çŽæçã«çè§£ã§ãããã®ã§ãã Math.random ã®åäœã¯ 0 ä»¥äž 1 æªæº (0 ã¯å«ããã 1 ã¯å«ãŸãªã) ã®ç¯å²ã§æµ®åå°æ°ç¹ã®æ¬äŒŒä¹±æ°ãè¿ããŸã ãšãããã®ãªã®ã§ãããã§åŸãããçµæãã 0.5ãåŒãã°ãæ£ã®æ°ãè² ã®æ°ãæ¬äŒŒä¹±æ°ããåçã«çæãããããšãæåŸ
ã§ããŸãã ããšã¯ãããArray.sortã«æž¡ãããšã§ç¡ç§©åºãªãœãŒãæäœãè¡ããã®ã§ãé
åãã·ã£ããã«ããããšãããã®ã§ãã å®éã«ããã®ã³ãŒãã¯æ°å詊ããŠã¿ããšèŠãç®äžã¯æ£ããåäœããŸã 詊ãã«æ€èšŒã³ãŒããchromeã®ã³ã³ãœãŒã«ã§å®è¡ããŠã¿ãã以äžã®ããã«ãªããŸãã const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let tmpArr; tmpArr = [...arr]; tmpArr.sort(() => Math.random() - 0.5); console.log(tmpArr); //  [1, 6, 4, 7, 5, 9, 2, 8, 3] tmpArr = [...arr]; tmpArr.sort(() => Math.random() - 0.5); console.log(tmpArr); // [8, 5, 1, 6, 9, 7, 2, 4, 3] tmpArr = [...arr]; tmpArr.sort(() => Math.random() - 0.5); console.log(tmpArr); //[8, 3, 1, 6, 4, 9, 2, 5, 7] ããã£ãœãåããŠãããããªæ°ãããŸãã ãã ãã®ã³ãŒãã¯çµã¿èŸŒã¿ã®sort颿°ã®æ¯èŒé¢æ°ã®çµæãã©ã³ãã ã«ããã°ã·ã£ããã«ããããšããåæã«ç«ã£ãŠå®è£
ãããŠããŸãããèããŠã¿ããšããã®æ³å®èªäœãéåãšããå æžã§ãã 倧äœã®ãœãŒãåŠçã¯ãäžå®ã®ã«ãŒã«ã«åºã¥ããŠ2ã€ã®èŠçŽ ãåãåºãããã®èŠçŽ åå£«ãæ¯èŒé¢æ°ã§æ¯èŒããçµæã«å¿ããŠäžŠã¹æ¿ãããšããæäœãç¹°ãè¿ãè¡ããŸãã ãã®ãœãŒãåŠçã®å
éšå®è£
ã¯åŠçç³»ã«äŸåããŠããŸãããäŸãã°Chromeã®JSãšã³ãžã³ã§ããV8ã®å®è£
ã§ã¯ Timsort ãå©çšããŠããŸããTimsortã¯ãã£ãããããšãããŒãžãœãŒããããŒã¹ã«ããŠãããã€ãã®ãœãŒãã¢ã«ãŽãªãºã ã®ã¢ã€ãã¢ãåãå
¥ããŠæ§èœãæ¹åããã¢ã«ãŽãªãºã ã§ãã ããã§åé¡ã«ãªãã®ããå
çšã®æ¯èŒé¢æ°ã«ä¹±æ°ãå©çšããèãæ¹ã§ã¯ããœãŒãã¢ã«ãŽãªãºã ã®è©³çްãç¡èŠããŠæ¯èŒé¢æ°ããã©ã³ãã ã«ããã°ãã¹ãŠã®èŠçŽ ãä¹±éã«é
眮ããããšããæ³å®ãããŠããããšã§ããå®éã«ã¯ãã®æ³å®ã¯ééã£ãŠããŠãæäœåŸã®é
åã®ååžã¯å€§ããåããŸãã Will it shuffle? ãšãããµã€ãã§ã¯ãã®åããèŠèŠåããŠèŠãããšãã§ããŸã 以äžã®ç»åã¯ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãããæ¯èŒé¢æ°ãRandomã«ããå Žåã®çµæã®åãã倧ããããšãããããŸã ç¹ã«å
é éšåãæ«å°ŸéšåãããŸãã·ã£ããã«ãããŠããªãçµæã«ãªã£ãŠããŸã ïŒãªããããªãã®ããšããåççãªéšå㯠wikipediaãªã©ã§ã解説 ããããŸã) ã§ã¯ã©ãããã°ããã®ããšãããšãããããã·ã³ãã«ãªã¢ã«ãŽãªãºã ã®ç ç©¶ã¯ãã£ããè¡ãããŠããã®ã§ã¡ãããšãã®ç¥èãæåããŸããããšããããšã§ãä»åã®ããŒã«ã§ã¯ ãã£ãã·ã£ãŒã€ã§ãŒãã®ã¢ã«ãŽãªãºã ãå©çšãããã®ã«å€æŽããŸããã ãã®ã¢ã«ãŽãªãºã ã¯ããšãŠãçŽ æŽãªãã®ã§ã©ã³ãã ãªé çªã®æ°åãçæããŠãã®ãšããã«èŠçŽ ã䞊ã¹ãã ãã®ãã®ã§ã¯ãããŸããã ãœãŒããããªã©ã®äœèšãªåŠçãæãŸãªãåãèšç®éçã«ããšãŠãã¹ããŒãã§æ£ããåããŸã ãã¡ãã®ã¢ã«ãŽãªãºã ã§ã®çµæãå
çšã®Will it shuffle?ã®ãµã€ãã«çšæãããŠãããé
眮ã®åããå°ãªãããšãèŠèŠçã«ããããŸãã ä»ã«ããã®ãã£ãã·ã£ãŒã€ã§ãŒãã®æ¹è¯ã¢ã«ãŽãªãºã ãªã©ããã€ãææ³ã¯éçºãããŠããããã§ããããä»åã®ãããªã¡ãã£ãšããããŒã«ã«ã¯ããã§ååããã§ããã çµæ å§åçæ¹å ããã¿ãŸãã ð ã³ãŒãã®èŠãç®ãã·ã³ãã«ã ãããšãã£ãŠãæ£ããåããŠãä¿èšŒã¯ç¡ãã ç¹ã«ã¢ã«ãŽãªãºã ãé©å¿ãããããªæäœã«ã€ããŠã¯ãã¡ããšåäœãèããå¿
èŠããããšæ¹ããŠåçãããæ©äŒã«ãªããŸããã ãã®ã·ã£ããã«ã®æäœã«ã€ããŠã¯ãæåã®ãã®ãŒãªå®è£
ã玹ä»ããŠãããµã€ããæ€çŽ¢çµæã«ã倿°åºãŠããããçµæ§ããã£ãŠããŸããããªã±ãŒã¹ãå€ããã ãªãšæããŸãã ç§èªèº«ãã·ã£ããã«ã®åããšãããããªå
容ã®èšäºã以åã«èŠãèšæ¶ã¯ãã£ãã®ã§ãããèªåã§å®è£
ããŠçœ ã«ããã£ãŠããããšã«æ°ã¥ããã®ã¯ææãããåŸã§ããã ããŸãããã³ããšã³ããšã¯é¢ä¿ã®ãªãå
容ã§ãããããã§ã¡ã³ããŒå士ã®äº€æµãåæ»ã«è¡ã£ãŠããããšãã§ãããã§ãã æ¡çšæ
å ± | BASE, Inc. æ¡çšæ
å ±-ããã³ããšã³ããšã³ãžã㢠æ¡çšæ
å ±-Webã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢
ããã«ã¡ã¯ïŒ BASEã®Information System(æ
ã·ã¹)ã«æå±ããŠããæšªå±±ã§ãã ãã£ããã§ãããBASEã§ã¯æ¯æå
šç€Ÿå®äŸãè¡ã£ãŠããŸããå»å¹Žããç¶ãã³ããçŠã®äžã以åãŸã§ã¯åœããåã®ããã«ãã£ãŠãããªãã©ã€ã³ã§ã®éäŒãé£ãããªã£ãŠããŸãããããŠWork From Homeã®ç¶ç¶ã«äŒŽããå
šç€Ÿå®äŸã¯ããéèŠãªã€ãã³ãã«ãªã£ãŠããŸãã ãä»åŸããã«åšå®
å€åããªããªãããšã¯ãªãã ãããã ãæã«äžåºŠã®å
šç€Ÿå®äŸããã倧äºãªã³ãã¥ãã±ãŒã·ã§ã³ã®å Žãšãªãã®ã§ãã¢ããããŒãããããã ãããªæ³ãã§å
šç€Ÿå®äŸãããè¯ãããããã«æ¬æ Œçãªé
ä¿¡ç°å¢ãæŽããŠéå¬ããŸããã ä»åã¯ãã®æ§åãæ¯ãè¿ããããšæããŸãã ä»ãŸã§ã®å
šç€Ÿå®äŸã§ã¯ ã³ããçŠã®ä»ã100人以äžã®ç€Ÿå¡ãåºç€ŸãéãŸãããšã¯é£ãããªã£ãŠããã¯ãZoomã®ãŠã§ãããŒæ©èœã䜿ã£ãŠãã£ãŠããŸããã Zoom ãŠã§ãããŒã䜿ã£ãå
šç€Ÿå®äŸ ãã¡ãç¹å¥ãªããšã¯äžåããŠããªãã®ã§Zoomã®ãŠã§ãããŒã©ã€ã»ã³ã¹ã®ã¿ããã°å¯èœã§ãã zoom.us ãŠã§ãããŒã䜿ã£ãå
šç€Ÿå®äŸã¯ç°¡åã«å§ããããšãã§ããã®ã§æè»œã§ã¯ãããŸããã ã¹ã©ã€ãã®å
容ã話ããŠã®ææ
ãäŒããããã«ç»å£è
ãåžäŒè
ã®é¡ã ãã§ãªãäœãæ ããã ç»å£è
ãåèªã®PCããã€ã¯ã䜿ã£ãŠããã®ã§äººã«ãã£ãŠç»è³ªãé³è³ªã«ã°ãã€ãããªãããã é·æéã«ãªããšåèª¿ãªæ åã ãšã€ããã®ã§ãã¹ã€ããã³ã°ãã¯ã€ãã®åãæ¿ããªã©ã®ä»æããããè¯ããã¶ã€ã³ã«ããŠãèŠãŠããŠæ¥œããæ åã«ããã ãããã£ã課é¡ãããã¢ããããŒããããããšã«ãªããŸããã 幎åäŒã«åã㊠å»å¹Žã®11æäžæ¬ã«å
šç€Ÿå®äŸã®ã¢ããããŒãã®è©±ããããã¿ãŒã²ããã1æã®å¹ŽåäŒã«åãããŠæºåãã¯ãããŸãããSlackã§ã¯ã#pj-broadcast_system ãç«ã¡äžãããé
ä¿¡ã«è©³ãã瀟å
ã¡ã³ããŒã«ã¢ããã€ã¹ãããããªããé²ããããšãšãªããŸããã 12æäžæ¬ãæ©æãå±ãã¯ãããã®ã§ã幎æ«å¹Žå§ã®äŒã¿ã«å
¥ããŸã§ã«äºæ¥ã»ã©æ
ã·ã¹å«ãé¢ä¿è
ã§éãŸããæ©æã®èšçœ®ãã©ãããæ§æã§é
ä¿¡ãããããšè©Šè¡é¯èª€ããŸããã 詊è¡é¯èª€ããŠããæ§å 1 詊è¡é¯èª€ããŠããæ§å 2 æçµçã«ã幎åäŒã¯ãããªã€ã¡ãŒãžã§ããããšã«ãªããŸããã èæ¯ã¹ã©ã€ãããã¬ãŒã³ã¹ã©ã€ããç»å£è
ãå·Šäžã«ã¯ã€ãã§æãããŠããŠãé²è¡ã®éã«åžäŒè
ãå³äžã«ç»å ŽããŸãã é
ä¿¡ã€ã¡ãŒãž ã¿ããªã§æ§æãèãã€ã€ãå¿
èŠãªæ©æãæŽãåºããŸããã æ©æ äž»ãªæ©æã¯ãã¡ãã«ãªããŸãã ã«ã¡ã© x 1 CANON XA40 (ã¬ã³ã¿ã«) ä»åŸå¿
èŠã«ãªããããããªãããã¥ã¢ã«èšå®ãã§ããå€ä»ããã€ã¯ãäŒå Žé³å£°ãå©çšã§ããããXLRå
¥åã«å¯Ÿå¿ãã¬ã³ãºç®¡çãªã©ã¯å€§å€ãªã®ã§ã¬ã³ãºäžäœåã®ãããªã«ã¡ã©ãæ¢ããŸãããæ¥åçšã§ããã€ã€ãã¿ã³ãæå°éã§ã¿ããæäœã¡ã€ã³ã®XA40ã«ããŸããã æåã¯ã賌å
¥ããäºå®ã§ããããè²·ãåã«äžåã¬ã³ã¿ã«ããŠäœ¿ã£ãŠã¿ãŠæ±ºããããšããããšã§ã¬ã³ã¿ã«ãããšãããå©çšããé »åºŠãå€ããªããããã®ãŸãŸã¬ã³ã¿ã«ã§è¯ããããšããçµè«ã«ãªããŸãããã¬ã³ã¿ã«ã ãšäžæ¥ 3,000å/å°ã§ãã äžè x 2 E-IMAGE EK630 ã«ã¡ã©ãæ¥åçšã§ããããšãæºåž¯æ§ ïŒ ãã³/ãã£ã«ãã®ã¹ã ãŒãºãå®å®æ§ãåªå
ããããã§ããŠå®äŸ¡ãªäžèã§ããå
ã
X40ãäºå°è³Œå
¥ããæ³å®ã ã£ãã®ã§äžèãäºå°è³Œå
¥ããŠããŸãã ã°ãªãŒã³ãã㯠x 1 Elgato Green Screen æãããã¿åŒã«ãªã£ãŠããã®ã§åçŽã±ãŒã¹ãéããŠãäžããåŒã£åŒµãã ãã§ããåçŽã±ãŒã¹ããã®ãŸãŸåå°ã«ãªãã®ã§ã»ãããçä»ããæ°ç§ã§çµãããŸãã ã¹ã€ããã£ãŒ x 1 Blackmagic Design ATEM Mini Pro ãã«ããã¥ãŒã¢ãã¿ãŒã欲ããã£ãã®ã§Proã賌å
¥ããŸããã ãã€ã¯ x 2 SHURE SM58SE ã¹ã€ããä»ãã¢ãã«ã«ããŠãŸããå±ããŸã§ã«ã¡ã©ã®ã¬ã³ã¿ã«ã§ã€ããŠãããã€ã¯ã§ãã¹ãããŠããŸããããSHUREã®ãã€ã¯ã«å€ããããã€ãºãã»ãšãã©ãªããªãã¯ãªã¢ã«èãããããã«ãªããŸããã ç
§æ x 2 LPL ã©ã€ããã³ã¯ LB-604 L18893 ãªããšç€Ÿå
ã®ã¡ã³ããŒã貞äžããŠãããŸããã äžèšã®ä»ã«ãã±ãŒãã«ã倿ã¢ããã¿ãã³ãŒããªãŒã«ãªã©çްã
ããåšèŸºæ©åšã賌å
¥ããŸããã æ§æ çµæããã®ãããªæ§æã«ãªããŸããã æèé¢ã«ã¯èæ¯çšã¹ã©ã€ããããããã®äžã«ãã¬ãŒã³çšã¹ã©ã€ããšå·Šäžã®ç»å£è
ã®ã¯ã€ãã被ããOBSåŽã§ã¯ããããŒåæããåžäŒè
ã被ããŠããŸãã ã¹ã©ã€ããšç»å£è
ã被ããšèŠã«ããã£ããã¹ã©ã€ãã«éäžã§ããªãã£ããããã®ã§ãããŠå·Šäžã«çœ®ããŠãŸãã åžäŒè
ã¯ç»å£è
ã話ããŠããæã¯ã°ãªãŒã³ããã¯ã®åããç§»åããŠæ ããªãããŸãã é
ä¿¡ã€ã¡ãŒãž(詳现) ãŸãšããæ§æå³ã«ãªããŸãã æ§æå³ ç»å£è
ã¯ã¹ã©ã€ãã®ã¹ããŒã«ãŒããŒãã衚瀺ãããŠããPCãèŠãªãã話ããé
ä¿¡ããŠããZoomã«åå ããPCã§é
ä¿¡ç»é¢ãšãã£ããã確èªããããšãã§ããŸãã åžäŒè
ã¯é²è¡ããæã®ã¿ã«ã¡ã©ã«å
¥ããç»å£è
ã話ããŠããæã¯ã«ã¡ã©ã«æ ããªãå Žæã§åŸ
æ©ããŸãã XA40ã®ã«ã¡ã©ãã³ã¯ç»å£è
ã®åãå
·åã確èªããªããã«ã¡ã©ã埮調æŽããŸããWebã«ã¡ã©ã¯åºå®ã§ãã ãŸããé²è¡ã«åãããŠèæ¯çšã¹ã©ã€ããæäœãã人ãããŸãã èšå® ATEM Mini Pro ãã¬ãŒã³çšã¹ã©ã€ããã¢ããã¹ããªãŒã ããŒã§èšå®ããŸãã ãã¬ãã > ã¢ããã¹ããªãŒã ããŒ1 > DVE ãã£ã«ãœãŒã¹ïŒCamera 2(ãã¬ãŒã³çšã¹ã©ã€ã) äœçœ®ïŒã¡ããã©ããäœçœ®ã« ãµã€ãºïŒã¡ããã©ãããµã€ãºã« ãã¬ãŒã³çšã¹ã©ã€ã(ã¢ããã¹ããªãŒã ããŒ) ç»å£è
ã®ã«ã¡ã©ã¯ããŠã³ã¹ããªãŒã ããŒã§èšå®ããŸãã ãã¬ãã > ããŠã³ã¹ããªãŒã ããŒ1 > DVE ãã£ã«ãœãŒã¹ïŒCamera 3(ç»å£è
ã«ã¡ã©) ãã¹ã¯ïŒæ ãå Žæã«åãããŠäžäžå·Šå³ã®æ°å€ãèª¿æŽ æ¬æ¥ããŠã³ã¹ããªãŒã ããŒã¯ãããããããŽãªã©åžžã«æ ã£ãŠããéšåã®ç·šéã«å©çšãããããªã®ã§ãããä»åã¯ããã«ã«ã¡ã©ãèšå®ããŠãŸãããã¹ã¯ããäžã«ã¡ãããšæ ãããã«ã«ã¡ã©ã調æŽããŸãã ç»å£è
ã«ã¡ã©(ããŠã³ã¹ããªãŒã ããŒ) OBS 次ã¯é
ä¿¡PCã§OBSãèµ·åããATEM Mini ProãšWebã«ã¡ã©ãPCã«æ¥ç¶ããŸãã OBSã§ATEM Mini Proã®æ åãšåžäŒè
ãåæããŸãã OBS > ãœãŒã¹ > + >æ åãã£ããã£ããã€ã¹ ããã€ã¹ïŒBlackmagic Design OBS > ãœãŒã¹ > + >æ åãã£ããã£ããã€ã¹ ããã€ã¹ïŒHD Web Camera OBS ãœãŒã¹ > Webã«ã¡ã© > ãã£ã«ã¿ > ãšãã§ã¯ããã£ã«ã¿ > + > ã¯ããã㌠现ããèšå®ã¯ããã©ã«ãããå€ããŠããŸããã ã¯ããã㌠ããšã¯äºã€ã®æ åãéããŠããµã€ãºãäœçœ®ã調æŽããŸãã Zoom ä»åã¯ãŠã§ãããŒã§ã¯ãªããéåžžã®ããŒãã£ã³ã°ã«é
ä¿¡PCã§åå ããŸãã æåã¯ããããªèšå® > OBS Virtual Camera ã«ããŠé
ä¿¡ããŠããŸãããã ç»é¢å
±æ > 詳现 > 第2ã«ã¡ã©ã®ã³ã³ãã³ã ã§ã«ã¡ã©ã®æ åãç»é¢å
±æããæ¹ãç»è³ªãè¯ããªããŸããã Zoom 第2ã«ã¡ã©ã®ã³ã³ãã³ã åœæ¥ 幎æ«å¹Žå§äŒæã«å
¥ãåã«æ©æã¯èšçœ®ããæ åãé³å£°ã®ç¢ºèªãããŸããã ããšã¯åœæ¥ãè¿ããã ãã§ãã æ¬çªå æ¬çª1æéãããåã«OBSãæäœããPCãåºãŸããWebã«ã¡ã©ã®æ åãåã蟌ããªããªããŸããã OBSãPCãåèµ·åããŠãæ¹åããã 調æ»ããŠãŠãéã«åããªãã®ã§ããã«å¥ã®PCã«OBSãå
¥ããŠèšå®ããŸããã æ¬çªå§ãŸã£ãŠããã¯ããçªãé²ããããªãã®ã§ãããé
ä¿¡ç»é¢ã§ããèŠããšæ¬æ¥ã®ã¹ã©ã€ããšã¯å°ãè²å³ãå€ãã£ãŠããããšã«æ°ä»ããŸãããèãã°ã¬ãŒã䜿ã£ãŠããç®æã¯ã»ãŒèŠããªããªã£ãŠããŸããŸããããããã§ãäœãšãé
ä¿¡èªäœã¯æ¢ããããšãªããèŽåœçãªäºæ
ããªãçµããããšãã§ããŸããã å
šç€Ÿå®äŸã®é
ä¿¡æ å èª²é¡ é¡ã ãã§ãªã身æ¯ãææ¯ããèŠãããããã¡ã§æ ãããšãã§ããæ åãšããŠãã€ã¡ãŒãžããŠãããã®ã«è¿ãã®ã§ãæŠãããããããšã¯ã§ããã®ã§ããæ°ããªèª²é¡ããããããããŸãã ãªããŒãµã«ã¯ã¡ãããšæ¬çªã®ã¹ã©ã€ãã§ç¢ºèªãã ãªããŒãµã«ã12æ21æ¥ã§æ¬çªã1æ5æ¥ã§å¹Žæ«å¹Žå§ãæãã®ã§ä»æ¹ãªãéšåãããã€ã€ããªããŒãµã«ãæ©ãããŠæ¬çªçšã¹ã©ã€ãã§ç¢ºèªã§ããªãã£ã ãã£ãšç»è³ªãè¯ãããã ã¹ã©ã€ãã®è²ã埮åŠã«å€ãã£ãŠããŸã èãã°ã¬ãŒã¯æ¶ãã/èŠã«ãããªã ã¯ããããŒåæãããšãã«è
ãŸããã«é»ããŒããŒããæ ã ã°ãªãŒã³ããã¯ã«æ ã£ãåœ±ïŒ ãªã©ãªã©ã次ã®é
ä¿¡ãŸã§ã«å°ããã€ã§ãæ¹åããŠããããã§ãã ããšèšçœ®ãçä»ãã«ãæéãããã£ãŠããŸãã®ã§ãããããã¯å°çšã®éšå±ãé
ä¿¡ã¹ããŒã¹ãçšæãããã§ããã ãŸãšã å人çã«ã¯ä»ç€Ÿããã§ã®é
ä¿¡äºäŸãèŠãŠããã®ã§ããã€ããã£ãŠã¿ãããšæã£ãŠããŸããã é«äŸ¡ãªæ©æã¯ãã©ã€ããŒãã§è§Šãããšãé£ããã§ããããšãŠã楜ãã¿ã§ããã å®éã«è²ã
詊è¡é¯èª€ããŠããæéã¯ãšãŠã楜ããã倢äžã«ãªã£ãŠãã£ãŠãããããªæ°ãããŸãã ç§ãå«ããŠã»ãŒçµéšããªãã¡ã³ããŒã§ææ¢ãã§ãããŸã§ãã£ãŠããŸããããããæ
ã«æ¹åããç¹ã¯ãŸã ãŸã ãããããããŸãã å°éæ§ãé«ãã®ã§ãããããã£ãšå匷ãããã£ãšè¯ãå
šç€Ÿå®äŸã«ããŠãããããšæããŸãã ããŸã ç·æ¥äºæ
宣èšã®çºä»€ãããã2æã®å
šç€Ÿå®äŸã¯åŸæ¥ã®ããã«Zoomã®ãŠã§ãããŒæ©èœã䜿ã£ãŠå®æœããŸããããã®éããã¡ãã®Slackã«æçš¿ããã¡ãã»ãŒãžããã³ãã³åç»é¢šã«æµããChromeæ¡åŒµæ©èœã䜿ã£ãŠã¿ãããšãŠãçãäžãããŸããã chrome.google.com
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã BASE æ ªåŒäŒç€Ÿã§ã¯ãNew Relic æ ªåŒäŒç€Ÿã®ãã¬ã¹ãªãªãŒã¹ã§çºè¡šãããŠããéããªãã¶ãŒãããªãã£ãã©ãããã©ãŒã ãNew Relic Oneããå°å
¥ããŠããŸãã newrelic.com ç§ãæå±ããŠãã BASE BANK æ ªåŒäŒç€Ÿã®ãããã¯ãããŒã ã§ã New Relic One ãæŽ»çšããŠããŸããåœããŒã ã§ã¯ AWS ã GCP ãªã©ã®ã€ã³ãã©æ§æç®¡çã« Terraform ãå©çšããŠãããŸããNew Relic One ã§ã®èšå®æ
å ±ã Terraform ã§ã®ã³ãŒã管çããããšæ¬¡ã®ãããªå©ç¹ãåŸãããŠäŸ¿å©ã§ãã èšå®å
容ãã³ãŒããšããŠå¯èŠåããã æå³ããªãèšå®å€æŽãåãæ»ãããå Žåã« Terraform ã®æ©èœã§æ»ãããã åœèšäºã§ç޹ä»ããå
容㯠New Relic One ç¹æãªãã®ããããŸããã3rd Party 補㮠Terraform Provider ãå©çšããéã«äžè¬çã«åœãŠã¯ãŸãå
容ãå«ã¿ãŸããå
·äœçã«ç޹ä»ããå
容ã¯äžèšãšãªããŸãã Terraformã®New Relic Providerã䜿ã åœèšäºã§åæããã¢ã«ãŠã³ãäœç³»ãšãã£ã¬ã¯ããªæ§æ main.tf ã§ã®åæèšå® 3rd party Providerãå©çšããmoduleãäœæããéã®æ³šæç¹ GitHub Actionsã«ããCI/CD Pipeline è€æ°ç°å¢ã¯jobs.<job_id>.strategy.matrixã§å¯Ÿå¿ Job outputsã§ã®jobéã®å€åãæž¡ã terraform init/validate/plançµæã®PRã³ã¡ã³ã Slackéç¥ ãããã« Terraformã®New Relic Providerã䜿ã New Relic ã Terraform 管çããããã® New Relic Provider ãçšæãããŠããŸãã https://registry.terraform.io/providers/newrelic/newrelic/latest/docs å
·äœçãªå§ãæ¹ã¯ Getting Started with the New Relic Provider ã«ãŠè§£èª¬ãããŠããŸããåœèšäºã§ã¯ CI/CD Pipeline ã®çšæç工倫ç¹ããã£ãç®æãããã¯ã¢ããããŠç޹ä»ããŸãã åœèšäºã§åæããã¢ã«ãŠã³ãäœç³»ãšãã£ã¬ã¯ããªæ§æ BASE BANK ããŒã ã§ã¯æ¬¡ã® 3 ã€ã®ã¢ã«ãŠã³ããçšæã㊠New Relic One ãæŽ»çšããŠããŸãã BASEBANK-production BASEBANK-staging BASEBANK-development ç°å¢ããšã« 3 ã€ã®ã¢ã«ãŠã³ããçšæããŠããŸããTerraform ã®ãã£ã¬ã¯ããªæ§æãšããŠã¯ç°å¢ããšã«ãµããã£ã¬ã¯ããªãåãæ§æãšããŠããŸãã . âââ dev // BANK-development âââ modules // å
šç°å¢å
±éã¢ãžã¥ãŒã« âââ prd // BANK-production âââ stg // BANK-staging ãã£ã¬ã¯ããªæ§æã®ç¹åŸŽãšããŠã¯ã ç°å¢ããšã«ãã£ã¬ã¯ããªãåã tfstate ãç°å¢ããšã«æã€ module ãå©çšãç°å¢å
±éã®æ§æå®çŸ©ã¯ module å
ã«å®çŸ©ãã ãšãã£ãç¹ããããããŸãã main.tf ã§ã®åæèšå® terraform init ã«ãã£ãŠåæåãæåã® main.tf ãçšæããŸãããããã§ã¯æ¬¡ã®å
容ãå«ãŸããŸãã required_provider ãšã㊠newrelic/newrelic ã®å®çŸ© tfstate ã®ä¿ç®¡ç®æã®å®çŸ© New Relic Provider ã®èšå®å®çŸ© terraform { required_version = " ~> 0.14.3 " # 1 . required_providerãšããŠ`newrelic /newrelic `ã®å®çŸ© required_providers { newrelic = { source = " newrelic/newrelic " version = " ~> 2.14.0 " } } # 2 . tfstateã®ä¿ç®¡ç®æã®å®çŸ© backend " s3 " { bucket = " sample-bucket " key = " terraform.tfstate " region = " ap-northeast-1 " } } # 3 . New Relic Providerã®èšå®å®çŸ© provider " newrelic " { account_id = var.account_id } variable " account_id " { type = string } tfstate 㯠AWS ã® S3 ã®ãã±ããã«ä¿ç®¡ããŠããŸããBASE BANK ããŒã ã§ã¯ development/staging/production ã® 3 ã€ã® AWS ã¢ã«ãŠã³ãã管çããŠããã®ã§ããããã®ã¢ã«ãŠã³ãã« tfstate ã®ãã±ãããçšæããŠããŸãã New Relic Provider ã®èšå®å®çŸ©ã§ã¯ New Relic ã® API Key ãå¿
èŠãšããŸãã https://registry.terraform.io/providers/newrelic/newrelic/latest/docs/guides/provider_configuration New Relic API Key ã¯ã Getting Started with the New Relic Provider ãã®ã¬ã€ãã³ã¹ã®ãšããã«äœæããŸãã Terraform å®è¡æã®åç
§æ¹æ³ã¯ variableã»ç°å¢å€æ°ã® 2 ã€ã®æ¹æ³ããããŸãããCI/CD ç°å¢ããæ³šå
¥ããããç¹ã§ç°å¢å€æ° NEW_RELIC_API_KEY ãå©çšããŠããŸãã ã¡ãªã¿ã« newrelic/terraform-provider-newrelic ã®å
éšå®è£
ã§ã¯äžèšã® Provider å®çŸ©ã§ãã®æåãå®çŸããŠããŸãã provider := &schema.Provider{ Schema: map [ string ]*schema.Schema{ // ïŒçç¥ïŒ "api_key" : { Type: schema.TypeString, Optional: true , DefaultFunc: schema.EnvDefaultFunc( "NEW_RELIC_API_KEY" , nil ), Sensitive: true , }, https://github.com/newrelic/terraform-provider-newrelic/blob/8933a37ccf09137a87643a7da33648012a33c360/newrelic/provider.go#L44-L49 3rd party Providerãå©çšããmoduleãäœæããéã®æ³šæç¹ Terraform ã®ä»æ§ã¯ required_providers ãçç¥ããå Žåã registry.terraform.io/hashicorp/ ãåç
§ããããšã仿§ãªããã hashicorp/newrelic ã䜿ãããšããŠããŸããŸãã Note: If you omit the source argument when requiring a provider, Terraform uses an implied source address of registry.terraform.io/hashicorp/. This is a backward compatibility feature to support the transition to Terraform 0.13; in modules that require 0.13 or later, we recommend using explicit source addresses for all providers. https://www.terraform.io/docs/configuration/provider-requirements.html#source-addresses ãããã宿
ãããã®ã¯ newrelic/newrelic ã§ãããããmodule ãæ°èŠäœæããéã¯ããããã® module ããšã«æç€ºçã«æå®ããå¿
èŠããããŸãã terraform { required_providers { newrelic = { source = " newrelic/newrelic " } } required_version = " >= 0.14 " } GitHub Actionsã«ããCI/CD Pipeline ããããã¯ãGitHub Action ã§ã® CI/CD ãã€ãã©ã€ã³ã玹ä»ããŸããç¹åŸŽãšããŠã¯ 2 ç¹ã«ãªããŸãã Pull request ãäœæãããšèªåã§ PR ã³ã¡ã³ãã« Plan çµæãèšé²ããã GitHub Pull Requestãžã®ã³ã¡ã³ã main ãã©ã³ããžããŒãžããã¿ã€ãã³ã°ã§èªåã§ Apply ããã GitHub Actionsã§ã®èªåApply å
šéã® GitHub Actions ã® yml ãã¡ã€ã«ãå
ã«æ²èŒããããŸãã name : tfapply on : push : paths-ignore : - 'docs/**' branches : - main pull_request : paths-ignore : - 'docs/**' jobs : terraform-plan-apply : name : terraform plan apply strategy : matrix : env : [ dev, stg, prd ] runs-on : ubuntu-latest defaults : run : shell : bash steps : - name : Checkout uses : actions/checkout@v2 - name : Terraform setup uses : hashicorp/setup-terraform@v1 with : terraform_version : 0.14.3 - name : Define Configuration id : config run : | if [[ $ {{ matrix.env }} = 'dev' ]] ; then echo ::set-output name=aws-access-key-id::${{ secrets.AWS_ACCESS_KEY_ID_DEV }} echo ::set-output name=aws-secret-access-key::${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} echo ::set-output name=new-relic-api-key::${{ secrets.NEW_RELIC_API_KEY_DEV }} elif [[ $ {{ matrix.env }} = 'stg' ]] ; then echo ::set-output name=aws-access-key-id::${{ secrets.AWS_ACCESS_KEY_ID_STG }} echo ::set-output name=aws-secret-access-key::${{ secrets.AWS_SECRET_ACCESS_KEY_STG }} echo ::set-output name=new-relic-api-key::${{ secrets.NEW_RELIC_API_KEY_STG }} elif [[ $ {{ matrix.env }} = 'prd' ]] ; then echo ::set-output name=aws-access-key-id::${{ secrets.AWS_ACCESS_KEY_ID_PRD }} echo ::set-output name=aws-secret-access-key::${{ secrets.AWS_SECRET_ACCESS_KEY_PRD }} echo ::set-output name=new-relic-api-key::${{ secrets.NEW_RELIC_API_KEY_PRD }} else echo 'unsupported matrix environment' exit 1 fi - name : Configure AWS Credentials uses : aws-actions/configure-aws-credentials@v1 with : aws-access-key-id : ${{ steps.config.outputs.aws-access-key-id }} aws-secret-access-key : ${{ steps.config.outputs.aws-secret-access-key }} aws-region : ap-northeast-1 - name : Terraform fmt id : fmt run : terraform fmt -recursive -check continue-on-error : false - name : Terraform init id : init run : terraform init working-directory : ./${{ matrix.env }} - name : Terraform validate id : validate run : terraform validate -no-color working-directory : ./${{ matrix.env }} - name : Terraform lint uses : reviewdog/action-tflint@master with : github_token : ${{ secrets.github_token }} reporter : github-pr-review fail_on_error : true working_directory : ./${{ matrix.env }} - name : Terraform plan run : terraform plan -no-color id : plan working-directory : ./${{ matrix.env }} env : NEW_RELIC_API_KEY : ${{ steps.config.outputs.new-relic-api-key }} # https://github.com/hashicorp/setup-terraform#usage - uses : actions/github-script@v3 if : github.event_name == 'pull_request' env : PLAN : "terraform \n ${{ steps.plan.outputs.stdout }}" with : github-token : ${{ secrets.GITHUB_TOKEN }} script : | const output = `#### Terraform Format and Style ð\`${{ steps.fmt.outcome }}\` #### Terraform Initialization âïž\`${{ steps.init.outcome }}\` #### Terraform Validation ð€${{ steps.validate.outputs.stdout }} #### Terraform Plan ð\`${{ steps.plan.outcome }}\` <details><summary>Show Plan</summary> \`\`\`${process.env.PLAN}\`\`\` </details> *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ matrix.env }}\`, Workflow: \`${{ github.workflow }}\`*`; github.issues.createComment({ issue_number : context.issue.number, owner : context.repo.owner, repo : context.repo.repo, body : output }) - name : Terraform apply if : github.event_name == 'push' run : terraform apply -auto-approve working-directory : ./${{ matrix.env }} env : NEW_RELIC_API_KEY : ${{ steps.config.outputs.new-relic-api-key }} - name : Slack notification (applying success) uses : rtCamp/action-slack-notify@v2 if : ${{ github.event_name == 'push' && success() }} env : SLACK_USERNAME : (${{ matrix.env }}) terraform-newrelic Automatic Applyer SLACK_ICON : # Iconã®URL SLACK_MESSAGE : Success to apply terraform-newrelic, check it! SLACK_COLOR : good SLACK_WEBHOOK : ${{ secrets.SLACK_WEBHOOK }} - name : Slack notification (applying failure) uses : rtCamp/action-slack-notify@v2 if : ${{ github.event_name == 'push' && failure() }} env : SLACK_USERNAME : (${{ matrix.env }}) terraform-newrelic Automatic Applyer SLACK_ICON : # Iconã®URL SLACK_MESSAGE : Failed to apply terraform-newrelic, check it! SLACK_COLOR : '#bd3232' SLACK_WEBHOOK : ${{ secrets.SLACK_WEBHOOK }} ãã® GitHub Actions ã® yml ãã¡ã€ã«ã®åæãšããŠå®çŸ©ããŠãã secrets ã¯ä»¥äžã§ãã KEY å
容 AWS_ACCESS_KEY_ID_DEV dev ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã㌠AWS_SECRET_ACCESS_KEY_DEV dev ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã·ãŒã¯ã¬ãã AWS_ACCESS_KEY_ID_STG stg ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã㌠AWS_SECRET_ACCESS_KEY_STG stg ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã·ãŒã¯ã¬ãã AWS_ACCESS_KEY_ID_PRD prd ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã㌠AWS_SECRET_ACCESS_KEY_PRD prd ç°å¢ã® AWS IAM User ã®ã¢ã¯ã»ã¹ã·ãŒã¯ã¬ãã NEW_RELIC_API_KEY_DEV dev ç°å¢ã® New Relic API Key NEW_RELIC_API_KEY_STG stg ç°å¢ã® New Relic API Key NEW_RELIC_API_KEY_PRD prd ç°å¢ã® New Relic API Key SLACK_WEBHOOK Slack ã® incoming webhook URL AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã¯ãtfstate ã S3 ã«ä¿ç®¡ããŠããããèšå®ããŠããŸããããããçºè¡ããŠãã IAM User ã¯åœè©² S3 ãžã®ã¢ã¯ã»ã¹æš©éã®ã¿ãä»äžãããã®ãšãªã£ãŠããŸãã resource " aws_iam_policy " " terraform-newrelic-ci-user-policy " { name = " terraform-newrelic-ci-user-policy " path = " / " description = " Allows users to manage terraform-newrelic state file. " policy = jsonencode ({ Version = " 2012-10-17 " Statement = [ { Sid = "" Effect = " Allow " Action = [ " s3:PutObject ", " s3:GetObject " ] Resource = [ aws_s3_bucket.terraform - state - newrelic.arn, " ${aws_s3_bucket.terraform-state-newrelic.arn}/* " ] } , ] }) } 以éãäžèšã® GitHub Actions ãã¡ã€ã«å
ã§ã®è©³çްã玹ä»ããŠãããŸãã è€æ°ç°å¢ã¯ jobs.<job_id>.strategy.matrix ã§å¯Ÿå¿ BASE BANK ããŒã ã§ã¯åè¿°ãããšãããdevelopment/staging/production ã® 3 ã¢ã«ãŠã³ããçšæããŠããŸããããããã®ç°å¢ã«å¯Ÿã㊠CI/CD ãã€ãã©ã€ã³ãçµãããã« GitHub Actions ã® syntax jobs.<job_id>.strategy.matrix ãå©çšããŠããŸãã docs.github.com # ïŒçç¥ïŒ strategy : matrix : env : [ dev, stg, prd ] # ïŒçç¥ïŒ - name : Terraform init id : init run : terraform init working-directory : ./${{ matrix.env }} # ïŒçç¥ïŒ directory æ§æã¯åè¿°ãããšãã dev/stg/prd ãšãµããã£ã¬ã¯ããªãåã£ãŠããæ§æãšããŠããåãã£ã¬ã¯ããªé
äžã« main.tf ããããŠããŸãã . âââ dev // BANK-development âââ modules // å
šç°å¢å
±éã¢ãžã¥ãŒã« âââ prd // BANK-production âââ stg // BANK-staging working-directory ã«ãŠ matrix ã§æå®ããç°å¢åãæå®ããããšã§ dev ã§ã®å®è¡ã®å Žå㯠dev ãã£ã¬ã¯ããªé
äžãšãªãããã«ããŠããŸãã jobs.<job_id>.strategy.matrix ã䜿çšããå Žå㯠dev/stg/prd ãžã®ãããŒã¯äžŠåã«å®è¡ãããŸããdev/stg ãå
ã«ç¢ºèªããŠãã prd ãå®è¡ãããããŒãºã匷ãå Žåã¯ãã¡ãªãããšãªããŸãããNew Relic ã®èšå®ç®¡çã§ã¯ãã®ãã¡ãªããã¯èš±å®¹ããããšèããã®æ§æãšããŠããŸãã Job outputsã§ã®jobéã®å€åãæž¡ã GitHub Actions ã§ã¯ Job outputs ãšãã syntax ãçšããããšã§ãjob éã®å€ã®åãæž¡ããã§ããŸããå
·äœçã«ã¯ jobs.<job_id>.outputs ãšãã syntax ã§ãã docs.github.com ãã®æ©èœãçšã㊠matrix ããšã«äœ¿çšããèšå®æ
å ±ã®ãã³ããªã³ã°ãè¡ã£ãŠããŸãã ç°å¢ããšã« set-output ã§ outputs ãå®çŸ© id=config ã§å®çŸ©ãã outputs ãå¥ã¹ãããã§åç
§ # Step1. ç°å¢ããšã«set-outputã§outputsãå®çŸ© - name : Define Configuration id : config run : | if [[ $ {{ matrix.env }} = 'dev' ]] ; then echo ::set-output name=aws-access-key-id::${{ secrets.AWS_ACCESS_KEY_ID_DEV }} echo ::set-output name=aws-secret-access-key::${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} // ... ïŒçç¥ïŒ else echo 'unsupported matrix environment' exit 1 fi # Step2. id=configã§å®çŸ©ããoutputsãå¥ã¹ãããã§åç
§ - name : Configure AWS Credentials uses : aws-actions/configure-aws-credentials@v1 with : aws-access-key-id : ${{ steps.config.outputs.aws-access-key-id }} aws-secret-access-key : ${{ steps.config.outputs.aws-secret-access-key }} aws-region : ap-northeast-1 echo ::set-output name=key::value ãšããããšã§ Job outputs ã«å€ãèšå®ã§ããŸããåœè©² job ã« id ãèšå®ããããšã§ä»¥éã®ã¹ãããã§åç
§ã§ããŸãã aws-access-key-id : ${{ steps.config.outputs.aws-access-key-id }} terraform init/validate/plançµæã®PRã³ã¡ã³ã æ¯å PR äœæããšã«æå
ã§ plan ããçµæãã³ã¡ã³ãã«è²Œãã®ã¯å€§å€ãªã®ã§ãèªåã§ PR ã³ã¡ã³ãã«èšèŒããŠãããããã«ããŠããŸããåœèšäºå
ã§ã¯ hashicorp/setup-terraform å
ã® usage ã«ãããµã³ãã«ã掻çšããŠããŸãã github.com ããã§ã¯ãterraform init/validate/plan ã®çµæãå
ã»ã©ç޹ä»ãã Job outputs ããååŸã§ããæšæºåºåãæŽ»çšããŠãPR ã³ã¡ã³ãå
容ãäœæããŠããŸãã - uses : actions/github-script@v3 if : github.event_name == 'pull_request' env : PLAN : "terraform \n ${{ steps.plan.outputs.stdout }}" with : github-token : ${{ secrets.GITHUB_TOKEN }} script : | const output = `#### Terraform Format and Style ð\`${{ steps.fmt.outcome }}\` #### Terraform Initialization âïž\`${{ steps.init.outcome }}\` #### Terraform Validation ð€${{ steps.validate.outputs.stdout }} #### Terraform Plan ð\`${{ steps.plan.outcome }}\` <details><summary>Show Plan</summary> \`\`\`${process.env.PLAN}\`\`\` </details> *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ matrix.env }}\`, Workflow: \`${{ github.workflow }}\`*`; github.issues.createComment({ issue_number : context.issue.number, owner : context.repo.owner, repo : context.repo.repo, body : output }) 泚æç¹ãšããŠã¯ -no-color ãªãã·ã§ã³ãä»ããŠãããªããšéç¥å
容ãæååãããŠããŸããŸãã - name : Terraform plan run : terraform plan -no-color # ïŒçç¥ïŒ Slackéç¥ rtCamp/action-slack-notify ãçšããŠæåæã»å€±ææã« Slack éç¥ãè¡ã£ãŠããŸãã github.com æåæã® Slack éç¥ã¯ãã®ããã«ãªã£ãŠããŸãã - name : Slack notification (applying success) uses : rtCamp/action-slack-notify@v2 if : ${{ github.event_name == 'push' && success() }} env : SLACK_USERNAME : (${{ matrix.env }}) terraform-newrelic Automatic Applyer SLACK_ICON : # Iconã®URL SLACK_MESSAGE : Success to apply terraform-newrelic, check it! SLACK_COLOR : good # https://base.slack.com/services/1633237925184?updated=1 SLACK_WEBHOOK : ${{ secrets.SLACK_WEBHOOK }} ãã®èšå®ã§ä»¥äžã®ããã« Slack éç¥ã§ããŸãã slackéç¥çµæ ãããã« New Relic One ãæŽ»çšããéã« Terraform ã®åæèšå®ã玹ä»ããããŸããã3rd Party Provider ãå©çšããéã®åæèšå®ã GitHub Actions ãçšãã CI/CD Pipeline ã®äœæäºäŸãšããŠåèã«ãªãã°å¹žãã§ãã New Relic çãæŽ»çšãããªãã¶ãŒãããªãã£ã®å®è·µã«ãããµãŒãã¹å質ã®åäžã«èå³ã®ããæ¹ã¯ããã²ã«ãžã¥ã¢ã«ã«ã話ããŸãããã @hgsgtk ã« DM é ããŠãæ§ããŸããã open.talentio.com ã§ã¯ããŸãæ¥æããã¡ãã®ããã°ã§ãäŒãããŸãããã
瀟é·å®€ã®ç±³ç°ã§ãã æ¬æ¥20:00ãããã#BASEãšnote æ¥æé·ãµãŒãã¹ãªãã§ã¯ã®æè¡èª²é¡ãšçµç¹èª²é¡ãèªãããšé¡ããnote CTOã®ä»ãããBASE CTOã®å·å£ã®å¯Ÿè«ã€ãã³ããéå¬ããããŸãã Zooméå¬ã§ãã®ã§ãéäžåå /éåºçãæ°å
Œããªããåå ããã ããŸãã ãç³èŸŒã¿æ ã«ãŸã äœè£ããããŸãã®ã§ããèå³ã®ããæ¹ã¯äžèšURLãããç³ã蟌ã¿ãã ããã base.connpass.com
ããã«ã¡ã¯ãUIãã¶ã€ããŒã®éæã§ãã åå ã«ç¶ãããã¶ã€ã³ãªãµãŒãã®åãçµã¿ã«ã€ããŠè¿°ã¹ãããšæããŸãã ïŒãã¶ã€ã³ãªãµãŒãã£ãŠäœïŒãšçåã«æã£ãæ¹ã¯ãååã®èšäºã®ããã¶ã€ã³ãªãµãŒããšã¯ãã®é
ãåç
§ããã ãããšå¹žãã§ããïŒ äž»ã«ã瀟å
ã§äŒç»ã»å®æœãããã¶ã€ã³ãªãµãŒãã¯ãŒã¯ã·ã§ããã«ã€ããŠæžãããŠããã ããŸãã å眮ãã»ãããããããžã§ã¯ãã®åå ïŒç€Ÿå€ïŒ 瀟å
ã§ã®æŽ»åãæžãåã«ããã®æŽ»åã®äžæ·ããšãªã£ããããããããžã§ã¯ãã§ã®çµéšã«è»œãè§ŠããããšæããŸãã ïŒãããããšã¯ã倧ãŸãã«ãããšããã©ã³ãã£ã¢ã®ç€ŸäŒè²¢ç®ãã®ãããªãã®ã§ãã詳ããæå³ã¯ Wikipediaèšäº ãªã©ããåç
§ãã ãããïŒ 2020幎æ¥ããã«ã瀟å€ã§å®æœããããã¶ã€ã³ãªãµãŒããããžã§ã¯ãã«åå ããŸããã ãããžã§ã¯ãæŠèŠã»ææïŒ https://preview.studio.site/live/xNWYkmXqlB äžè¬ã®æ¹ã察象ã«ããã¶ã€ã³ãªãµãŒãã®ææ³ã«åã£ãŠã€ã³ã¿ãã¥ãŒãåæãè¡ãããšãããããžã§ã¯ãã§ãã ããŒãã¯ããªã¢ãŒãã¯ãŒã¯ãè¡ã人ã®ãä»äºãçæŽ»ã®å®æ
ãæ¢ãããšãã§ãããç¹å®ã®ãããã¯ããæ©èœã«ã€ããŠèª¿æ»ãããããªãã®ã§ã¯ãããŸããã ãã®ãããããããžã§ã¯ãã§ã¯ããªã¢ãŒãã¯ãŒã¯å®æ
ããããŒããšããŠããããã§ããããããããããã·ã§ããéå¶å®æ
ãã«çœ®ãæ¿ããŠãäŒŒãæµãã§ãªãµãŒããè¡ã£ãããBASEãµãŒãã¹ã®éçºã«ãšã£ãŠæå¹ãªç¥èŠïŒãŠãŒã¶ãžã®ããæ·±ãå
±æïŒãåŸããããã ãšèããŸããã ç¶ç¶çãªãã¶ã€ã³ãªãµãŒããæ€èš äžèšãããããããžã§ã¯ãã§åŸãç¥èŠãšãååãªãã·ã§ã³Appãããžã§ã¯ãã§ã®ãªãµãŒã詊è¡çµéšïŒ ååèšäº åç
§ïŒãèžãŸãã æ©èœéçºãããžã§ã¯ããšã¯å¥ã®æ¬ãã§å®åžžçãªãªãµãŒããããžã§ã¯ããè¡ã圢 ãæå¹ãªã®ã§ã¯ïŒãšèããŠããããå®è·µããæ¹æ³ãæ€èšãããŸããã å®åžžãªãµãŒããããžã§ã¯ãæ¡ å€§ãŸãã«ã以äžã®ãããªåœ¢ãæ³å®ããŸããã éæãååæããšãããã®é »åºŠã§ãæå¿ãåã£ãŠæ°åã§ã€ã³ã¿ãã¥ãŒåœ¢åŒã®ãªãµãŒããè¡ããã€ã³ã¿ãã¥ãŒå¯Ÿè±¡è
æ°ã¯5åçšåºŠããå€ããŠã10åããããç®å®ãéåžžæ¥åã«æ¯éãåºãªãé »åºŠã»åŽåãæèããã 倧ããŒããããããã·ã§ããéå¶ã®å®æ
ãå°ãããšãæ¢ãããšããŠãBASEã®å©çšç¶æ³ã«éãã倿§ãªè§åºŠããã®æ
å ±ãéããã å°ããŒãã¯éœåºŠããã®æã
ã§çšŒåããŠãããããžã§ã¯ãã«åãããŠã¢ã¬ã³ãžãããïŒäŸãã°ããInstagram販売Appã®æ¹åãããžã§ã¯ããåããŠãããªããInstagramã®æŽ»çšå®æ
ã«ã€ããŠç¹ã«ãã©ãŒã«ã¹ããããšããããã«ãïŒ ãã®ãããªãã€ã³ã¿ãã¥ãŒäž»äœã®ãªãµãŒããããžã§ã¯ãã®å®æœãã²ãšãŸãã®ç®æšãšããŸããã ãã¶ã€ã³ãªãµãŒãã¯ãŒã¯ã·ã§ãã æžç±ãã»ãããŒçããããçšåºŠã¯ãªãµãŒãã€ã³ã¿ãã¥ãŒã®ããŠããŠãåŸãããŸããããããªãå®ãŠãŒã¶ãžã®ã€ã³ã¿ãã¥ãŒãå§ããã®ã§ãªãããªããããã¬ãŒãã³ã°ãããŠãããããšããã§ãã ãŸããç§ã1人ã§ãªãµãŒãã宿œããŠç¥èŠãèããŠããããŒã ãšããŠã®ãã¶ã€ã³ã¯ãŒã¯åäžã«ã¯ç¹ããã«ããããã«æãããŸãã åšããããäœãããããããªãããšããã£ãŠãããšæãããªããç¶ããŠããã®ãå¿ççã«èŸãã®ã§ããããããåšå²ããã®ãæçŸ©ããããšãããŠããããšããå
±æãåŸããããæãŸããã§ããã ãããªæ³ãããããŸãã¯ç€Ÿå
ã§ã¯ãŒã¯ã·ã§ãããè¡ãããšãšããŸããã å€éšã®å°éå®¶ãè¬åž«ã«åŒãã§ããã¬ãŒãã³ã°ãããŠãããã ãã¶ã€ã³ããŒã ã¡ã³ããŒã«åå ããŠãããããäœãããŠããã®ãããã©ããªæçŸ©ãããã®ããã«ã€ããŠç¥ã£ãŠãããã ãšããäºç¹ãé©ããã¹ããäŒç»ãé²ããŸãã 幞ããªããšã«ã æžç±ããã¶ã€ã³ãªãµãŒãã®æç§æžã ã®èè
ã§ãã ã¢ã³ã«ãŒãã¶ã€ã³ç€Ÿ ã®æšæµŠãããšå人çãªç¹ããããããŸããã®ã§ãã¯ãŒã¯ã·ã§ããè¬åž«ããé¡ãããåŒãåããŠããã ããŸããã åå 人æ°ã¯14åã§ã4ããŒã ã«åãããŠä»¥äžã®ãããªæµãã§ãŠãŒã¶ã€ã³ã¿ãã¥ãŒå®æœããŠããŸãã ïŒãªã³ã©ã€ã³ã§å®çµããããèšç»ããŠããŸããïŒ DAY1ïŒ3æéïŒïŒã€ã³ã¿ãã¥ãŒèšèš å®¿é¡æéïŒ2é±éïŒïŒã€ã³ã¿ãã¥ãŒååè
æé
ãšã€ã³ã¿ãã¥ãŒå®æœ DAY2ïŒ3æéïŒïŒåæã»èå¯ ãDAY1 èšèšã ã宿é¡ã»ã€ã³ã¿ãã¥ãŒæé
ïŒå®æœã ãDAY2 åæã»èå¯ã ã¯ãŒã¯ã·ã§ããã®ææç©ãšããŠã¯ããã¶ã€ã³ãã£ã¬ã³ãžïŒèª²é¡çºèŠïŒã10åãšã課é¡è§£æ±ºæ¡ã20åçšåºŠäœæãããŸãããïŒä»¥äžããã®äžäŸã§ããïŒ ãã¶ã€ã³ãã£ã¬ã³ãžã®äŸ 課é¡è§£æ±ºæ¡ã®äŸ ã€ã³ã¿ãã¥ãŒãè¡ãããã®ãŠãŒã¶æé
ããªããªãã«å€§å€ã ã£ãã®ã§ããã倧å€ã ã£ãæ
ã«æçŸ©ã倧ããã£ãããã«æããŸããããæå³ãã¯ãŒã¯ã·ã§ããã®äžã§æãæçŸ©ããéšåã ã£ãããç¥ããŸããã éåžžæ¥åã®äžã§ãŠãŒã¶ãšã®çŽæ¥çãªå¯Ÿè©±ãè¡ãããšããŠããã¹ã±ãžã¥ãŒã«çèŠå ãè²»çšå¯Ÿå¹æé¢çããããªããªãå®è¡ã¯ãã¥ãããã®ã§ããæ
£ããªãããšãè¡ãããšãžã®å¿ççããŒãã«ããããŸãã ä»åãã¯ãŒã¯ã·ã§ããã®å®¿é¡ããšãã圢ã§ãã¶ã€ããŒãšãŠãŒã¶ã®çŽæ¥çãªäº€æµã®å Žãäœããããšã¯äžã€ã®å€§ããªææã§ããã ã¯ãŒã¯ã·ã§ãã宿œåŸã«åå ã¡ã³ããŒããææ³ãåã£ãã®ã§ããããæ¥œããã£ãããå匷ã«ãªã£ãããšããã³ã¡ã³ãã倿°ããã ããŠããããã¶ã€ã³ãªãµãŒãã«å¯ŸããŠããžãã£ããªå°è±¡ãæã¡ã€ã€ç¥èŠãåŸãŠããããããã§ãã ãã·ã§ãããªãŒããŒã«ãªããããªã£ãããã·ã§ãããéããããªã£ãããšãã£ã声ãåºãŠããããŠãŒã¶ã«å¯Ÿããæ·±ãå
±æãåŸãããããšã窺ãç¥ããŸãã ã¯ãŒã¯ã·ã§ããã®ææãšä»åŸã®ç¶ç¶ ã¯ãŒã¯ã·ã§ããã®å®æœã«ãŠã以äžã®2ã€ã®ç®çãéããŸããã - ãªãµãŒãã®èšç»ããåæãŸã§ã®äžé£ã®æµããçµéšãã - 瀟å
ã¡ã³ããŒã«ãã¶ã€ã³ãªãµãŒã掻åã®å
å®¹ãšæçŸ©ãäŒãã æ¬¡ã®æ®µéãšããŠã¯ãåçºã®ã¯ãŒã¯ã·ã§ããã§ã¯ãªãç¶ç¶çãªãªãµãŒããããžã§ã¯ããšããŠã®æµããäœãã¹ããèšç»ã»æ€èšãé²ããŠããŸãã ãŸãšã 瀟å
ã§ã®ã¯ãŒã¯ã·ã§ããïŒããã³ããã®äžæ·ããšãªã£ããããããããžã§ã¯ãäœéšïŒããããã¶ã€ã³ãªãµãŒãã®å®æœã»é²è¡ã«ã€ããŠããããç¥èŠã身ã«ã€ããŠããŸããããŸã ãŸã 詊è¡é¯èª€ã®å¿
èŠãæããŸãããèŠæš¡ãå€ãããæ°ããªææ³ãåãå
¥ããããã€ã€ããªãµãŒã掻åãç¶ç¶ããŠãããããšèããŠããŸãã ãŸãããããŸã§ã®çµéšããããã¶ã€ã³ãªãµãŒã掻åã¯éçºãããžã§ã¯ãã®äžã«çµã¿èŸŒãããããç¬ç«ãããããžã§ã¯ããšããŠè¡ã圢ãåŒç€Ÿã«ã¯åããŠããã ããšããæè§ŠãåŸãŸããã ãããã®ç¥èŠã»çµéšã掻ããããããä»åŸã®ãã©ã³ãç·Žã£ãŠãããšããã§ãã 宿§ãªãµãŒãæåãæ ¹ä»ãããã¹ããããããæ¥œãã詊ããŠãããããšæããŸãã
ããã«ã¡ã¯ãUIãã¶ã€ããŒã®éæïŒ @nomjic ïŒã§ãã äžå¹Žãšå°ãåïŒ2019幎çµç€ããïŒãããã¶ã€ã³ãªãµãŒããæ¥åã«çµã¿å
¥ããããšè©Šè¡é¯èª€ãããŠããŸãã æ¬èšäºã§ã¯ãæšå¹Žã®å€é ã«ãªãªãŒã¹ããååãªãã·ã§ã³ Appã§ã®ãéçºéçšã«ããã詊è¡ãšææã«ã€ããŠãæžãããŸãã ååãªãã·ã§ã³ Appãããžã§ã¯ãã«ã€ã㊠ååãªãã·ã§ã³ Appãšã¯ã2019幎第4ååæãã2020幎第3ååæã«ãããŠéçºããBASEã®ååç®¡çæ©èœã§ãã ãã®Appã®æ©èœãã®ãã®ããéçºã®éçšå
šäœã«ã€ããŠè©³ããç¥ãããæ¹ã¯ ãã¡ãã®BASE Uèšäº ãã ãã¡ãã®BASEBookèšäº ãåç
§ããã ãããšå¹žãã§ãã æ¬èšäºã§ã¯ããã®ãããžã§ã¯ãå
ã§å®æœããæš¡æ¬çãªãŠãŒã¶ãªãµãŒãããããã¿ã€ãæ€èšŒãç°¡æãŠãŒã¶ããªãã£ãã¹ããšãã£ããªãµãŒã掻åïŒã®è©Šè¡ïŒã«ã€ããŠã話ãããããšæããŸãã ãã¶ã€ã³ãªãµãŒããšã¯ ãã¶ã€ã³ãšããè¡çºã¯ã倧ãŸãã«èšããšãå
±æ - å¶äœ - æ€èšŒãã®ç¹°ãè¿ãã§æ§æãããã®ã§ãããäžè¬çãªãã¶ã€ã³æ¥åã«ãããŠã¯ãå¶äœãéšåã«éç¹ã眮ãããã¡ã§ãã ãã®ãããå
±æããæ€èšŒããžã®æ³šç®ïŒããã³æ³šåïŒãèããªãåŸåã«ãããŸãã äœãããšã«æ³šåããããŠãå¶äœã®äžæ¯ããšãªãã芳å¯ã»å
±æããææã«å¯Ÿãããæž¬å®ã»æ€èšŒããèãã«ããŠããŸã£ãŠã¯ããããã¯ãéçºã«ããããã¶ã€ã³ã®æå¹æ§ãåæžããŠããŸããŸãã æå³çã«ããã€èšç»çã«ãå
±æããæ€èšŒãéšåãžãã©ãŒã«ã¹ããŠãããããšä»¥åããæã£ãŠãããŸããŠã ãã¶ã€ã³ãªãµãŒã ãšåŒã°ããæŽ»åãç§ã®ç®æããšããã«è¿ããããªã®ã§ããã®èšèãæ²ããŠè©Šè¡ããŠåããŸããã ãªãããªãµãŒããšããèšèã¯ã調æ»ãã®æå³ã§äœ¿ãããããšãå€ãã§ããããã¶ã€ã³ãªãµãŒãã«ããããªãµãŒãã¯èª¿æ»ããã ç ç©¶ ã æ¢æ± ãšãã£ãæå³åãã匷ãããã«æãããŸãã å°ã
æ¡å€§è§£éãããããŸãããã ã¢ã€ãã¢åµåºããããã¿ã€ãã³ã°ãããã¶ã€ã³ãªãµãŒãã®äžç°ã§ãã ãšæããŠããŸãã ã¡ãªã¿ã«æžç±ã ãã¶ã€ã³ãªãµãŒãã®æç§æž ããåç
§ãããšããã¶ã€ã³ãªãµãŒããšããèšèã¯ä»¥äžã®ããã«èª¬æãããŠããŸãã ãããã¯ãããã¶ã€ã³ããããã®ãªãµãŒããã€ãŸã人ã
ã瀟äŒãªã©ãããã¯ãã眮ãããç¶æ³ãçè§£ããããã®ãªãµãŒããããã¶ã€ã³ãªãµãŒãããšåŒã¶ããšãå€ãããã®å Žåããã¶ã€ã³ãªãµãŒãã¯ãããã¯ãã®ãã¶ã€ã³ããã»ã¹ã®äžéšã§ãããšæããããšãã§ããã ãã¶ã€ã³ãªãµãŒãã®æç§æž ã2.1.1 æ¬æžã«ããããã¶ã€ã³ãªãµãŒãããã ãã©ã€â 仿§çå®ã®ããã®æš¡æ¬çãªãŠãŒã¶ãªãµãŒã ååãªãã·ã§ã³ Appã®æ©èœã¯ã倧ãŸãã«èšããšã賌å
¥æã«ååã®è²ããµã€ãºãå€ãããä»å±åã€ããããšãã«ã¹ã¿ãã€ãºãè¡ãããªã®ã§ããã賌å
¥äœéšã«ãã€ã¬ã¯ãã«åœ±é¿ããæ©èœã§ãããåæã«ã·ã§ãããªãŒããŒããã®çްããããŒãºã«æè»ã«å¯Ÿå¿ãåŸãæ©èœã§ãããããæ
éã«ä»æ§ãçå®ããå¿
èŠããããŸããã ããã§ãå®éã«ã·ã§ãããéå¶ããŠãããªãŒããŒããã®æèŠãèããŠãæ°å€ããèŠæ±ã®ã©ãã«ãã©ãŒã«ã¹ããŠããããæ€èšããã... ãšæã£ãã®ã§ããã瀟å€ããåºãæèŠãéããŠåæããã®ã¯æéããããããããããæ¥é ãããªãŒããŒããããçŽæ¥ããããã®æèŠãéããŠããCXã¡ã³ããŒãããã³ãããã·ã§ããéå¶çµéšã®ãã瀟å¡ã«å¯ŸããŠãã¢ãªã³ã°ãè¡ããŸããã ãªãµãŒãå
容 ãã¢ãªã³ã°ã®æµãã¯ä»¥äžã®éãã§ãã - ãŸããã¶ã€ããŒããæ«å®ä»æ§ãã倧ãŸããªUIã¯ã€ã€ãã¬ãŒã ãæžãèµ·ãããŸããïŒä»¥äžã®ç»åã¯ãã®ã¯ã€ã€ãã¬ãŒã ã®äžéšïŒ ã ã¯ã€ã€ãã¬ãŒã ãã¬ãã¥ãŒããŠããã圢ã§ãã·ã§ãããªãŒããŒã®ããŒãºã仿§ã®æ¹åç¹ãæ¢ãããã¯ã€ãããŒãäžã«æžãåºããŸãã ã¡ã€ã³ã®è³ªå圹ã¯ä»æ§çå®è
ã§ããPMãè¡ãããã¶ã€ããŒïŒç§ïŒã¯ã¡ã¢åã圹å
Œãµã質å圹ãè¡ããŸããã èãåºããå
容ãã·ãŒãã«æŽçããŠãããžã§ã¯ãã¡ã³ããŒã«ã·ã§ã¢ããŸããïŒä»¥äžã®ç»åã¯ãæŽçããã·ãŒãïŒ ãã¢ãªã³ã°ã®å¹æ çã®çŸå Žã«è¿ã声ãèãããšã§ã ã©ã®ããŒãºã«ãã©ãŒã«ã¹ããããã©ã®æ©èœãåãæšãŠãã... ãšãã£ãå€æã®æ ¹æ ãæç¢ºã«ãªããŸããã ãªãµãŒãçµæã®åœ±é¿ã§ä»æ§ã倧ããå€ãããããªããšã¯ãããŸããã§ããããæ ¹æ ãæç¢ºã«ãªãããšã§ä»¥éã®UIãã¶ã€ã³ãé²ãããããªã£ãããšã¯ééããªãã§ãã ãã©ã€â¡ ãã¶ã€ã³éçšã§ã®ãããã¿ã€ãæ€èšŒ 仿§çå®åŸãUIãã¶ã€ã³ã®è©³çްãè©°ããŠããããã§ããããšããã©ããã§ãå®è£
ããŠæäœããªããšè¯ãæªãã倿ã§ããªãããšããå±é¢ã蚪ããŸãã ãã®ãããªå Žåã倧æµã¯Figmaçã®ãããã¿ã€ãã³ã°ããŒã«ã䜿ã£ãŠç»é¢é·ç§»ã¢ãã¯ã¢ãããäœããæäœæã詊ãã€ã€ãã¶ã€ã³ãé²è¡ããŠããã®ã§ãããããã§ã¯ããŸããããªãå ŽåããããŸãã æåå
¥åããã©ãã°ïŒããããæäœãªã©ã®ãããçšåºŠè€éãªã€ã³ã¿ã©ã¯ã·ã§ã³ã«ãªããšåçŽãªç»é¢é·ç§»ã¢ãã¯ã¢ããã§ã¯æ€èšŒã§ããŸããã ããšãã£ãŠååãªæ€èšŒãããã«å®è£
ã«å
¥ã£ãŠããŸããšãå®è£
éçšã§å€§ããªææ»ããçãããªã¹ã¯ããããŸãã ä»åã¯ããã¶ã€ããŒåŽã§ã³ãŒãïŒHTML/CSS/JSïŒãã¬ãªã¬ãªãšæžããŠå
¥åUI蟌ã¿ã®ã¢ãã¯ã¢ãããäœããä»ã®ãã¶ã€ããŒã«æäœããŠããã£ãŠåå¿ãèŠãããšããããšãè¡ããŸãããïŒéçºå¯Ÿè±¡ã®UIå
šãŠã§ã¯ãªããæäœæã«æžå¿µã®ããç»é¢ã®ã¿ã¢ãã¯ã¢ãããäœæããŠããŸããïŒ ã¢ãã¯äœãã«ã¯ã ãã¶æéåããŸããããæäœæã«æžå¿µãæ®ããå
ãžé²ãããšãåºæ¥ãŸããã ãã¶ã€ããŒãããçšåºŠã¯ã³ãŒãã£ã³ã°ãã§ããå Žåã¯ãã¡ãã£ãšããæäœæã®æ€èšŒçšåºŠã§ããã°ç©æ¥µçã«ã³ãŒããæžããŠãããã³ããšã³ãæè¡ãžã®çè§£ãæ·±ãã€ã€ã¢ãã¯äœããããŠãããã奜ãŸãããšèããŠããŸãã ãã©ã€â¢ å®è£
éçšã§ã®ç°¡æãŠãŒã¶ããªãã£ãã¹ã UIãã¶ã€ã³FIXåŸããšã³ãžãã¢ã«ããããã³ããšã³ãå®è£
ã50%çšåºŠã«éãããããã§ãäžåºŠç°¡æçãªãŠãŒã¶ããªãã£ãã¹ããè¡ããŸãããïŒå®éã®BASEãŠãŒã¶ã«æäœããŠãããã®ã§ã¯ãªãããã¶ã€ããŒèªèº«ããã³ãã®ååãæäœããŠãã¹ããããšãããéåžžã«ç°¡æçãªãã¹ãã§ããïŒ ãªãªãŒã¹çŽåããªãªãŒã¹åŸã®æ¥ãªä¿®æ£èŠä»¶çºçãé¿ããã¹ãããªãã¹ãæ©ã段éã§ã®ãã¹ããè¡ããŸããã åœç¶ãå®è£
éäžã§ããããã«ãã¹ã察象ã§ããç»é¢ã¯ãŸã UIãå®è£
ãããŠãªãã£ããããŸãã¯UIã ãããã£ãŠããŒã¿ãšçŽã¥ããŠããªãã£ããããŠããŸãã ãã®ãããªããšããã©ããæªå®æã®ç¶æ
ã§ãã¹ãã宿œããŠããŸãã å®è£
æžã¿ã®ç®æã¯å®åããŒã¿ã䜿çšãããã以å€ã®ç®æã¯ããŒããŒãããã¿ã€ãããã¶ã€ã³éçšã§è©Šäœããã¢ãã¯ã¢ããHTMLã䜿çšãããªã©ããã®ãã®ããŠäžé£ã®UIãçµã¿ã€ã€ãã¹ããããŸããã ãŸãã¯èªåã§æäœããŠéåæãããšãããæ¢ããæ¬¡ã«é£åžã®ç€Ÿå¡ã«åæ§ã«æäœããŠããã£ãŠèгå¯ããŠããŸãã ç»é¢ã ãã®æäœã«éããããååãæ®åœ±ããŠç»é²ããããæ³šæã確èªããŠååãæ¢±å
ããããšãã£ãäœæ¥ã蟌ã¿ã§æµã確èªããããã«ããããŒã®ååãæ¢±å
çšã®å°çãªã©ãçšæããŠäžé£ã®æµãã詊ããŠããŸãã ãçšæãããããŒååïŒã¿ãã»ã«ãä»ããããããŒã ãã¬ãŒãïŒã ã ⢠èªãäžé£ã®æäœã»äœæ¥ãäœæããã ⢠ä»è
ã®æäœã客芳çã«èгå¯ããã ãã®äºã€ãè¡ãããšã§ã UIã®ãããŒããã³äœæ¥ã®æµãã§å€§ããèºãç®æã¯ãªããïŒ ãšããç¹ãšã ç»é¢éã§ã®æèšãã¬ã€ã¢ãŠãã®ã€ãªããæ¹ã«éåæã¯ãªããïŒ ã®ç¢ºèªãã§ããŸããã åŸæ¥ã§ãã£ãããªãªãŒã¹çŽåãŸã§æŽãåºããªãã£ããããªèŠä¿®æ£ç¹ããã®æ®µéã§ããã€ãæŽãåºãããšãã§ãããªãªãŒã¹çŽåã®ãã¿ãã¿ã軜æžããäžå©ãšãªããŸããã æ¯ãè¿ã 仿§ç宿®µéã§ã®æš¡æ¬ã€ã³ã¿ãã¥ãŒããã¶ã€ã³å¶äœæ®µéã§ã®ãããã¿ã€ãæ€èšŒãå®è£
段éã§ã®ç°¡æãŠãŒã¶ããªãã£ãã¹ãããšãã3ã€ã®ãã©ã€ãåãã§ãŒãºã§è¡ããŸããã ããããã以äžã®ãããªæçŸ©ããã£ãããšã確èªããŠããŸãã â æš¡æ¬ã€ã³ã¿ãã¥ãŒïŒ ããªããããéçºããã®ãããäœãç®æãã®ãããæäœéå¿
èŠãªã®ã¯äœãããšãã£ãæéãæç¢ºã«ãªããæ°ã¶æã«ããã¶éçºæéã®äžã§ä»æ§ããã¶ã€ã³æ¹éã®ãã¬ãé²ãããšãã§ããã â ãããã¿ã€ãæ€èšŒïŒ ãã¶ã€ã³ã¬ãã¥ãŒã«ãŠãã¶ã€ã³æ¡ã®åæãã¹ã ãŒãºã«åŸãããšãåã³ãã®åŸã®ææ»ãã®æžå¿µãæžããããšã«åœ¹ç«ã£ãã â ç°¡æãŠãŒã¶ããªãã£ãã¹ãïŒ ããã³ããšã³ãå®è£
äžã®èŠä¿®æ£ç¹ãæ©ãã«èŠã€ãåºããå®è£
å·¥çšã®åæ»åã«ã€ãªãã£ãã ïŒããã§ãŠãŒã¶ããªãã£ãã¹ãã®èšç»ããã³å®æœãè¡ã£ãç¥èŠã¯ããã®åŸã®å¥ãããžã§ã¯ãã«ãŠè¿ãå
容ã®ãã¹ããè¡ãéã«ãæµçšã§ããŸãããå¥ä»¶ã®ãŠãŒã¶ããªãã£ãã¹ã宿œã«ã€ããŠã¯ã å¥ã®ããã°èšäº ããåç
§ãã ãããïŒ ãã®ããã«ããããæçŸ©ãããããšãäœæã§ããããã§ãããäžæ¹ã§ããããã®ãªãµãŒããããŸãã¡æå¹ã§ãªãå Žåãããããã ããšããããšãèŠããŠããŸããã ååãªãã·ã§ã³ Appãããžã§ã¯ãã¯10ã¶æã«åã¶é·æãããžã§ã¯ãã§ãããé·æã§ãããæ
ã«ãããã®è©Šè¡ãéäžã§è¡ããããã£ãã®ã§ãããéåžžã®ïŒé·ããšãå幎ãçããã°1ã¶æã§çµãããããªïŒã¹ãã³ã®ãããžã§ã¯ãã§ã¯ãã¹ã±ãžã¥ãŒã«ãšãããããªãå Žåããè¡ãæçŸ©ãèãå Žåãããããã§ãã éçºãããžã§ã¯ãã«éããŠãéœåºŠãä»åã®éçºå¯Ÿè±¡ã§ã¯äœãè¡ãã¹ããã»è¡ããªãã¹ããããèŠæ¥µããããã®ç¥èŠãšããããè¡ãã¹ãããšå€æãããã¹ã ãŒãºã«å®æœã§ãããããªå®è·µçµéšãå¿
èŠã ãšæããŠããŸãã ãããã®ç¹ãèžãŸããéçºãããžã§ã¯ããšã¯å¥ã®æ¬ãã§ã®ãã¶ã€ã³ãªãµãŒãã®è©Šè¡ã2020幎åŸåã«è¡ã£ãŠããã®ã§ããããã¡ãã«ã€ããŠã¯ãŸãå¥èšäºã«ãŠè¿°ã¹ãããšæããŸãã
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã TL;DR July Tech Festa 2021 winter ã«ãTDD ãã ATDD ãžæ©ã¿ãããããããšããã¿ã€ãã«ã§ç»å£ããŸãã ã¢ãžã£ã€ã«ãã¹ããšãã®äžã§æå¹ãªãã©ã¯ãã£ã¹ãšããã ATDD (Acceptance test-driven developmentïŒ ATDD ãå®è·µããããã® E2E ãã¹ãåºç€ã gauge ãš CircleCI ãçšããŠæ§ç¯ãã July Tech Festa 2021 winter July Tech Festa ã¯ã€ã³ãã©ãšã³ãžãã¢ã®ããã®ç¥å
žãšé¡ããã€ãã³ãã§ããæšå¹Žãããªã³ã©ã€ã³ã§ã®éå¬ãšãªã£ãŠãã 500 åè¶
ãã®åå è
ãéãŸã£ãå€§èŠæš¡ã€ãã³ãã«ãªã£ãŠããŸãã jtf2021w.peatix.com ããã·ã¥ã¿ã°ã¯ #jtf2021w ã§ããŠãããããåœæ¥ã®çãäžãããèŠãããšãã§ããŸãããŸããç»å£è
ã®çºè¡šè³æäžèŠ§ã¯ conpass ã® ã€ãã³ãè³æäžèЧ ã«ãŸãšããããŠããŸãã ç§ã¯ãããã« CI/CD ã DevOps ãšãã£ãããŒããå€ã C ãã©ãã¯ã«ãŠ 25 åæéãããã ãçºè¡šããŸããã çºè¡šè³æ ãã¡ããåœæ¥ã®çºè¡šè³æã«ãªããŸãããTDD ãã ATDD ãžæ©ã¿ãããããããšããã¿ã€ãã«ã§ããã¢ãžã£ã€ã«ãã¹ãã®å®è·µããã·ããªãªãã¹ãã»E2E ãã¹ãã®æŽåã«èå³ãããæ¹ã«ãåèã«ãªããšæããŸãã ãã®è³æã¯ãå®éã« BASE BANK ã®éçºçµç¹å
ã§ãã€ãã¬ãŒã·ã§ã³ããšã®ïŒå€éšïŒå質ãé«ããéçºã®æ¹æ³ã¯äœãããšããããŒãã«ã€ããŠèããŠåãçµã¿å§ããå
容ããŸãšããŸããã å
·äœçã«ã¯æ¬¡ã®ãããªå
容ããŸãšããŠããŸãã ã¢ãžã£ã€ã«ãã¹ãã®èãæ¹ ATDD (Acceptance testâdriven development) ãšã¯ãªã«ã ATDD ãå®è·µããéçºæåãšããã»ã¹ åå
¥ãã¹ãèªååãã¬ãŒã ã¯ãŒã¯ gauge ãçšãããã¹ãäœæç°å¢ ãšã³ãããŒãšã³ããã¹ãã®èªåå®è¡åºç€ CircleCI ãçšãã CI/CD ãã€ãã©ã€ã³ãžã®çµã¿èŸŒã¿ TDD ãã ATDD ãžæ©ã¿ãããããçŸå Žã®å®äŸ åœã€ãã³ãã¯ãã€ã³ãã©ãšã³ãžãã¢ã®ããã®ç¥å
žãã§ãã®ã§ããšãã«åå è
å±€ã«ããããŠãªãã¹ãèªåãã¹ããå®è¡ãã CI/CD åºç€ã«ã€ããŠå
·äœçã«èªã£ãŠããŸãã 以äžãçºè¡šè³æãçšããŠè©±ããå
容ãå°ãçç¥ãã€ã€ã玹ä»ããŸãã ã¢ãžã£ã€ã«ãã¹ã ã¢ãžã£ã€ã«ãã¹ããšããèšèã¯ãã®åéã«ãããŠèå㪠Lisa Crispin æ°ãš Janet Gregory æ°ããã®ããã«å®çŸ©ããŠããŸãã agiletester.ca å§ãŸãããããªããªãŒãŸã§ããããŠãã以éã ç¶ç¶çã«å®æœãããå調çãªãã¹ã ã®å®è·µ ã«ãããã客æ§ãžã® 䟡å€ã®é »ç¹ãªæäŸ ããµããŒãããŸãããã¹ã掻åã¯ã é«éãªãã£ãŒãããã¯ã«ãŒã ãçšããŠçè§£ãæ€èšŒããªããããããã¯ãã®å質ãç¯ãããšã«éç¹ã眮ããŠããŸãããã®ãã©ã¯ãã£ã¹ã¯ã å質ã«å¯ŸããããŒã å
šäœã®è²¬ä»» ãšããèãæ¹ã匷åãããµããŒãããŸãã ãã®ã¢ãžã£ã€ã«ãã©ã¯ãã£ã¹ã®äžã§åœ¹ã«ç«ã€ãã©ã¯ãã£ã¹ãšãããã®ã玹ä»ããŠããããã®äžã®ã²ãšã€ã ATDD ã§ãã ã¢ãžã£ã€ã«ãã¹ãã§åœ¹ç«ã€ãšããããã©ã¯ãã£ã¹ãã¡ èµ€æ ã§ç€ºãããšããããŠãŒã¶ãŒã¹ããŒãªãŒïŒéã«ãŸãšãããšã顧客èŠç¹ã®æ©èœäŸ¡å€ãå®çŸ©ãããã®ãïŒã®å®ææ¡ä»¶ããå
·äœçãªäŸãçšããŠçè§£ããããšããå§ããèãæ¹ã§ãã ATDD ATDD ã®éçºã¹ããããç°¡æçã«ãŸãšãããšãã®ããã«ãªããŸãã ATDDéçºã¹ããã ãã®ã¹ãããã®äžã§å®è£
äœæ¥ãšããŠã¯ãŸãã¯å€±æããåãå
¥ããã¹ãããå§ããŸãã å
¥ãåã®ãã£ãŒãããã¯ã«ãŒããäœã 倱æããã¹ããŒãªãŒåãå
¥ããã¹ããæåã«æžã ã¹ããŒãªãŒåãå
¥ããã¹ããéãéçšã§ãŠãããã¬ãã«ã®ãµã€ã¯ã«ãåã n åã®ãã§ãã¯ã€ã³åŸãã¹ããŒãªãŒåãå
¥ããã¹ããéã ããã° TDD Cycle ããããäžã€å€§ããªãã£ãŒãããã¯ã«ãŒããã¹ããŒãªãŒåãå
¥ããã¹ãã«ãã£ãŠåãå
¥ãåæ§é ãäœãããšã«ãªããŸãã CircleCIãšgaugeãçšãããã¹ãå®è¡åºç€ ãã®åçµãå®è·µããã«ã¯ãåãå
¥ããã¹ããèªååãããšãããã¹ãå®è¡åºç€ãã»ããã«ãªã£ãŠã€ããŠããŸãã åœè³æå
ã§ã¯ CircleCI ãš gauge ãçšããèªååãå
¥ããã¹ãåºç€ã玹ä»ããŠããŸãã CircleCIã§ã®CI/CDãã€ãã©ã€ã³ã«çµã¿èŸŒã gauge ãšã¯ ThoughtWorks 瀟ãã¡ã³ãããŠãã Go 補ã®åãå
¥ããã¹ãèªååãã¬ãŒã ã¯ãŒã¯ã§ãã gauge.org ç§ãæ€èšããéã«æããããšãšããŠã次ã®ãããªç¹åŸŽãæã£ãŠããŸã Markdown ããŒã¹ã®ã·ã³ãã«ãªä»æ§èšè¿° Syntax ã¹ãããå®è£
ã®ããã®èšèªã¯ Java/JS/TS/Python/Ruby/C# ããµããŒãããŠãã Visual Studio Code ãšã®çµ±åãããã§ããŠãã ã¡ã³ããã³ã¹ã掻çºïŒIssue ãããããæ°ååŸã«è¿äºãæ¥ãïŒ å®éã« gauge ã§äœæãããã¹ãã CircleCI ã§å®è¡ãããµã³ãã«ãäœæããã®ã§å®éã«è©ŠããŠã¿ããæ¹ã¯åèã«ããŠã¿ãŠãã ããïŒäŸã§ã¯ Python ãçšããŠããŸãïŒã github.com gauge ãçšãã ATDD éçºã¹ããã åŒããŒã ã§å®è·µãå§ãã gauge ãçšãã ATDD éçºã¹ãããã¯æ¬¡ã®ããã«ãªããŸãã ã¹ããªã³ããã©ã³ãã³ã°çã§ããŠãŒã¶ãŒã¹ããŒãªãŒã®åå
¥æ¡ä»¶ãããŒã ã§äŒè©±ãç¹å®ãã ãã¹ããŒãªãŒåå
¥æ¡ä»¶ããšããŠãŠãŒã¶ãŒã¹ããŒãªãŒã«èšè¿° èªååå¯èœãªãã¹ãã§ããã°ã倱æããåãå
¥ããã¹ãã³ãŒããèšè¿°ïŒã仿äžãããŒãã³ã°ïŒ æ©èœå®çŸã«åããŠå®è£
ããïŒnåã®CycleïŒ æ©èœå®æåŸãã仿äžããå€ããŠãã¹ããéãããšãç¢ºèª ã仿äžããšã宿ããåºå¥ãããšããã¢ã€ãã¢ã¯ãããããåãå
¥ããã¹ãã®ãã§ãŒãºã 2 ã€ã«åºåããããã宿œããŠããŸãã ä»æäž ããŸãæåã«å€±æããåãå
¥ããã¹ããæžãã é²æãæž¬ããã¹ãã§ãã倱æããããšãããã£ãŠããããã«ããããŒã«ã¯å«ããªã 宿 ãªã°ã¬ãã·ã§ã³ãæ€åºãããã¹ã 宿ããã¹ããŒãªãŒã®ãã¹ãã¯åžžã«æåããããšãæåŸ
ãããããã«ãã«å«ãã å
·äœçã« gauge ã§ããããåºå¥ããããã®æŽ»çšã¢ã€ãã¢ã¯ãçºè¡šè³æå
ã«ããŒã«ä»æ§ãšãšãã«è§£èª¬ããŠããã®ã§ãå®éã« gauge ã䜿ã£ãŠã¿ãããšæã£ãæ¹ã¯ãã²ã芧ãã ããã è¬èŸ 2020 幎ã«ç¶ã 2 幎é£ç¶ã¹ããŒã«ãŒãšããŠãéªéãããŠããã ããŸããã devblog.thebase.in çºè¡šæé以å€ããšãŠã楜ããåå ãããŠããã ããŸãããåºæ¬çã«ãã£ãš C ãã©ãã¯ã«ããã®ã§ãããçŽåã§çºè¡šããã ãã Masahiko Funaki ãããã çžã®äžãã©ãæ¯ããããCI/CDã®äŒãæ¹ ãã«ãŠ CircleCI ãçšãã話ããããŠããŠãèªåã®çºè¡šå
ãšãšãŠãé¢é£ããŠããã®ã§å£é ã§åç
§ãããŠããã ãããããŠããŸããã 14:20ïœ14:45 / C4 -ãTDDããATDDãžæ©ã¿ãé²ããããæ±å£åæ ãã CircleCIããæŽ»çšããã ããããããšãããããŸãïŒ #CircleCIJp #JTF2021w #JTF2021w_C — èæšå°åœŠ/Masahiko FUNAKI (@mfunaki) January 24, 2021 ããããã®ãã©ãã¯ãåæäžŠè¡ã§èµ°ãäžãéå¶ããã ããã¹ã¿ããã®çæ§ããããšãããããŸããïŒç¹ã«ãC ãã©ãã¯ããæ
åœããã ããå°æŸæ§ãçºè¡šäžã«èŽè¬è
ãšããŠããªããçãªãã©ã€ã³ã®ã«ã³ãã¡ã¬ã³ã¹ã§ã¯èŠãããŠããèŽè¬è
ã®åå¿ã zoom äžã§ããŠããã ãããããã§ããä»ã¡ãããšã€ã³ã¿ãŒããããšã€ãªãã£ãŠãããšå®å¿ããªããç»å£ã§ããŸããããã®å ŽãåããŠæ¹ããŠåŸ¡ç€Œç³ãäžããŸãã ãããã« ã å®è·µãã¹ãé§åéçº (Object Oriented SELECTION) ãã®ã第 1 ç« ãã¹ãé§åéçºã®ãã€ã³ããšã¯ïŒãã§ã¯åŠç¿ããã»ã¹ãšããŠã®ãœãããŠã§ã¢éçºãšããæãæ¹ãæç€ºããŠããŸãã éçºè
ã¯èªåãã¡ã䜿ãæè¡ã¯ãããžã§ã¯ã宿ã®éçšã§åŠã¶ äœãå®çŸããããšããŠããããçè§£ãããŠãã å®å°ããã®ãã£ãŒãããã¯ã掻çšãã·ã¹ãã ã«æŽ»çšããŠããããš ä»åã®çºè¡šã§ç޹ä»ãã ATDD ã«ã€ããŠããã£ãŒãããã¯ã«ãŒããããã«åããŠããããšããã¢ã€ãã¢ã«ãªããŸããåœè³æãã¢ãžã£ã€ã«ãã¹ãã®ãã€ã³ããããŒã¹ãšããéçºæŠç¥ãšããããå¿
èŠãããåºç€æ§ç¯ã詊è¡é¯èª€ããéã®å©ãã«ãªãã°å¹žãã§ãã åŸèš @CircleCIJapan ããã«åãäžããŠããã ããŸãããCircleCIãããã€ãããããšãããããŸãã 仿¥ã®ã玹ä»ã¯ @hgsgtk ããã® #ATDD å®è·µãšCircleCIã» #gauge ã§ã®E2Eèªåãã¹ãåºç€ ã§ããæšæ¥ç޹ä»ãããŠããã ãã #JTF2021w ã«ãŠäžã®äººã®åŸã®ç»å£ãšããããšãããèãããŠããã ãã話ã§ããããããªã¢ã«ãŠãŒã¹ã±ãŒã¹ãšããæ·±ãå
容ã§ãïŒå€è¬ïŒ #CircleCIJp https://t.co/0KbPFDnf4D — CircleCI Japan (@CircleCIJapan) January 26, 2021
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠ Manager ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã æšå¹Ž 2020 å¹Žã¯æ¬ããã°ã«ãŠå人ã®è¶³ãç®ã§ã¯ãªãæãç®ã§ææãåºãããããªããŒã ãç®æããã¢ãžã£ã€ã«éçºã®åãçµã¿ãç¶ç¶ããŠç޹ä»ããŠããŸããã ããŒã éçºã®æœåšç課é¡ãèŠã€ããæ¯ãè¿ãã¯ãŒã¯ãMad Glad Sad(åãæãå)ã å°äººæ°ã§ã®ã¢ãžã£ã€ã«éçºãžã®åãçµã¿å®äŸ ïŒäžæ©ç®ã®èžã¿ã ãæ¹ïŒ | 詳説 | July Tech Festa 2020 ç»å£ã¬ããŒã ã¢ãžã£ã€ã«éçºã«ããããŠãŒã¶ãŒã¹ããŒãªãŒåå²å®è·µ ãç»é¢ãªãã¥ãŒã¢ã«ã®è£åŽã ãããã®èãæ¹ããã©ã¯ãã£ã¹ã¯å
šäœã®äžéšã§ãéçºããŒã ãšããŠã®çµç¹ããŒã«ã«ãªãã©ã¯ãã£ã¹ããBANK DEV çœæžããšããŠæŽçããŠããŸãããBANK DEV çœæžãã§ã¯æ¬¡ã®ãããªå
å®¹ãæŽçããŠããŸãã äžè¬çãªã¢ãžã£ã€ã«æèã®ãã©ã¯ãã£ã¹ã§åºãŠããæŠå¿µã®å®çšã®ä»æ¹ ex.ãã¹ããŒãªãŒãã€ã³ãããçšããã·ãŒã³ã»ãã€ã³ãã®ä»ãæ¹ ãªãªãžãã«ãªéçºãã©ã¯ãã£ã¹ ex.ãäºæžç«¯äŒè°ãã»ãTODO ã³ã¡ã³ãã®ãã±ããåã ãããã¯äž»ã«æ¯ãè¿ãïŒã¬ããã¹ãã¯ãã£ãïŒã«ãŠçºèŠãããã®çµæããŸãšããããšã§ç©ã¿äžããŠããŸãããæ¬èšäºã§ã¯ãã®ãã©ã¯ãã£ã¹ãããã°ãšããŠå
¬éããŸãã ç¥èŠã®ç©ã¿äžããBANK DEVçœæžã ãã®åçµãå§ãŸã£ãã®ã¯ãããªãã§ãã®åçµã»ãã©ã¯ãã£ã¹ããã£ãŠããã®ãããšããèªèã人ã«ãã£ãŠãã¬ãããšãé²ãããšããããšããã£ããã§ãã ããšãã°ãããã¢ããã°ã©ãã³ã°ããšãã 1 ã€ã®ãã©ã¯ãã£ã¹ãæã«ãšã£ãŠãããããå人ãæããèªèã»æž©åºŠæã¯éããŸãããããããç§ãã¡ã¯èšèšçè¿·ã£ãéã®ã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠã®æçŸ©ã«éãã眮ãããšããããšãèšèªåãããŠããã°ããã¢ããã°ã©ãã³ã°ããšããèªåœãäŒè©±ã®äžã§äœ¿ãããããªããŸã 1 ã æå㯠GitHub å
ã«ããã¥ã¡ã³ããäœæã鿿޿°ãç¶ããéçšãšããŠããŸãããããããããã¥ã¡ã³ãã§ã®éçšã¯æç« ãæžãå¿ççããŒãã«ãé«ããããåºæ¬çã«çºèµ·äººã® @hgsgtk ãæžèšãšãªã£ãп޿°ãç¶ããŠããŸããã ãã®åŸãç¶ç¶ããŠãããã¡ã«ããŒã ã®æåå®çãããŸãããã ã¢ãžã£ã€ã«ã®ãã©ã€ããŠã£ã³ã°ããšãã¬ãããŠã£ã³ã°ã ãã§ãããšããã® ååã§ãŽãŒã«ã«åãããããŒã ç°å¢ã ã§ããã¬ãããŠã£ã³ã°ããã£ããçããŠãããšãã宿ãã§ãŠããŸãããå
·äœçã«ã¯ãã¬ããã¹ãã¯ãã£ããªã©å¯Ÿè©±ã®å Žã®ãã¡ã·ãªããŒã¿ãæã¡åãã§ããããã«ãªããŸãããæèã®é«ãå人ãåŒã£åŒµãæ§å³ããããŒã èªèº«ãèªèº«ãæé·ãžåŒã£åŒµã£ãŠããæ§å³ãžãšå€ãã£ãŠããŸããã ãã®ãããçŸåšã¯å
±åç·šéãããä¿é²ã§ãããããããæŽæ°ã®è² è·ãäœãåãã©ã¯ãã£ã¹éã®é¢ä¿æ§ãæç€ºãããã Miro ã«ç§»è¡ããŸããã Miroã§äœæããBANKDEVçœæž ãã³ã»ãžã§ããªãŒãºæ°ã XP ãæããå³ã§ããã Circle of Life ãã®ããã«ãããžãã¹ã»ããŒã ã»æè¡ãšãã 3 ã€ã®ãªã³ã°ã«åé¡ãããšãã£ãã«ããŽãªã©ã€ãºã®å¿
èŠæ§ã¯æ€èšããŸããããçŸå Žã§ã¯ããžãã¹ããæè¡ãŸã§ããªã坿¥ãšãªã£ãŠããããŸã ãŸã æŽç·Žãããã£ãŠããªãããããããŠã«ããŽã©ã€ãºããŠããªãéžæãããŸããã äžæ¹ã§ Martin Fowler æ°ãææãããããªãæè¡ãã©ã¯ãã£ã¹ã骚æãã«ãããã FlaccidScrumïŒããããã¹ã¯ã©ã ïŒ ããšãªãããšãé¿ããå¿
èŠãããããããªãã¡ã¯ã¿ãªã³ã°ãªã©ãšãã£ãæè¡ãã©ã¯ãã£ã¹ãå
å
ãããããåªããŠããŸãã åæ: BANKããŒã ãç®æãããæ¹ã»æŠç¥ äžã®ãBANK DEV çœæžããšç޹ä»ãã Miro ã®ç»åã«ã¯äžå¿ãå®çŸ©ãããŠããŸããããã®äžå¿ãåæãšãªãç®æãããæ¹ãšæŠç¥ã§ãã ã å°ããªããŒã ãå§ããã¢ãžã£ã€ã«éçº ããšããè³æã«ãŠãã¢ãžã£ã€ã«éçºãäœæ
å§ãããã«ã€ããŠãŸãšããŠããŸãã BANK ããŒã ã§ã®æèããã»ã¹ã¯ã ã¿ããªã§ã¢ãžã£ã€ã«ââå€åã«å¯Ÿå¿ã§ãã顧客äžå¿çµç¹ã®ã€ãããã ããšããæžç±ã®èãæ¹ã«æã圱é¿ãåããŠããŸãããããããã®èªåãã¡ã®èª²é¡åæããå§ãŸã£ãŠããŸãããããããã¢ãžã£ã€ã«ããã£ãŠã¿ããããšããå
¥ãå£ã§èããŠãããã課é¡å®çŸ©ãšæªæ¥ã®çæ³åã®å®çŸ©ããéç®ããçµæãã¢ãžã£ã€ã«ã ã£ãããšããæèãããŠããŸãããããææåããã®ãäžã®ãããã§ãã 忥µæã®ææå ãã㯠BANK ããŒã åºæã®äŸ¡å€èгå®çŸ©ãªã®ã§ã軜ããµããªãŒããã®ã«ãšã©ããŸããã çãçããšããéçºãšã¯ãªãã ããã 2 ããšãã£ãåãã«ã€ããŠè°è«ãã åã
人ã®éææïŒå人ïŒãšé¢ä¿åæãšã®çŽæãå®ãäºïŒå
šäœïŒãäž¡æ¹æºãããã©ã³ã¹ ã®åããéçºã®ä»æ¹ãå¿
èŠã ãããšãªããŸãã 3 ã ãŸããBANK ããŒã ã§ã¯ãæè¡æŠç¥ããšåŒç§°ããçæçèšç»ã«äŸåããªããšã³ãžãã¢ãªã³ã°çµç¹ãšããŠã®æŠç¥ãå®çŸ©ããŠããŸãã æè¡æŠç¥ ããã§ã¯ã æè» ããšããæŒ¢å 2 æåãçŸåšå®çŸ©ããŠããŸããçŸå𿬡ã®ãããªæå³ãèšå®ããŠããŸãã ã·ã¹ãã ã®å€æŽå¯èœæ§ãç¶æã»åäžããããš éçšã»ç£èŠã®å¹çæ§ãäžããããšã§ã°ããŒã¹ãæ°èŠãµãŒãã¹ã«å²ãæéãå¢ããããš æ°èŠãµãŒãã¹éçºã®éã®äœæ¥éãæžããéçºå¹çåäžã«åããããš ããŒã å
ã§ã®äººã®åãæ¹ãæè»ã«å¯Ÿå¿ã§ããããã«ããããš ãã®ãæè¡æŠç¥ãã¯ååæèšç»ããã®å Žã§ã®çŸå Žã®æææ±ºå®ã«çšããçšéã§èšå®ãããŠããŸãã ååæèšç»ã«ãããéçšæ¹æ³ã¯ä»¥äžã§ãã ãŸã PdM ããããã¯ããšããŠããããããšã»éçºã¡ã³ããããããã¯ãã«å¯ŸããŠéæ¥çã ãæè¡çãªèª²é¡ããçšæ ãããã INPUT ã«åã
人ããã£ãŠããããããšããéæããšããŠæ±ºãã ãéæãã§ã¯ååæã¬ãã«ã«åãŸããªããã®ãå«ããŠåäººç®æšãèšå®ããŸã ã é§ãåºããããžã£ãŒã®æé·è«ãïŒã€ã®ææŠèª²é¡ããç§åŠããã ãã§ã¯ãã¡ã³ããŒãåãè¹ã«ä¹ã£ãŠçŽåŸæãæã€ããã«ã¯ èšç»ã«èªåã®æææ±ºå®ãé©åºŠã«åæ ãããã察話空éããçšæãã ããšã®éèŠæ§ã«ã€ããŠèªã£ãŠããŸããæè¡æŠç¥ã¯å¯Ÿè©±ç©ºéãèšèšããããã®ç®ç·åããã®ããã®ããŒã«ãšãªããŸãã ããŠãå°ãå眮ããé·ããªã£ãŠããŸããŸãããããããã®åæãèžãŸããŠããäžåºŠãã©ã¯ãã£ã¹å³ã®æŠèŠã説æããŸãã Miroã§äœæããBANKDEVçœæž ãŸãäžå¿ã«æ·»ããããŠããã®ããã忥µæããšãæè¡æŠç¥ããšãªããŸãã äžå¿ã«æ·»ãã忥µæãšæè¡æŠç¥ ããããäžå¿ã«æŽŸçããŠããã®ããã©ã¯ãã£ã¹å³ãšãªããŸãã ãã©ã¯ãã£ã¹ã®çŽ¹ä» ããŠãããã§ã¯å
·äœçãªåãã©ã¯ãã£ã¹ã«ã€ããŠç¹ã«ç©ã¿äžããå€ããã©ã¯ãã£ã¹ã«ã€ããŠç޹ä»ããŠãããŸãã ã¹ããŒãªãŒãã€ã³ã ãã¹ããŒãªãŒãã€ã³ããã¯ã¢ãžã£ã€ã«éçºã«ãããŠäžè¬çã«ç¥ããããã©ã¯ãã£ã¹ã§ããã¹ããŒãªãŒãã€ã³ãèªäœã軜ã説æããŸããšã çžå¯ŸèŠç©ã ã®èãæ¹ã«åºã¥ãããã®ã§ããå¿
èŠãªäœæ¥ã»è€éãã»ãªã¹ã¯çãéã¿ãŠãã€ã³ãèšå®ããŸããã¹ããŒãªãŒãã€ã³ãã®èãæ¹ã«ã€ããŠäœç³»çã«ç¥ãããæ¹ã¯ãã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã ïœäŸ¡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ïœ ããããããã§ãã ã¹ããŒãªãŒãã€ã³ãã«é¢ãããã©ã¯ãã£ã¹ BANK ããŒã ã§ã¯ã¹ããŒãªãŒãã€ã³ãã®éçšãç¶ããŠæ¬¡ã®å
容ã«ã€ããŠæŽã«èšèªåããŸããã 倧ããã®æ§æèŠçŽ Our 1ptïŒç§éã® 1ptïŒ Issue äœææã®ãã€ã³ãä»äžæç¡å€æåºæº ãã€ã³ããä»ããããªãæ ã¿ã¹ã¯ãã¹ããŒãªãŒãã€ã³ãã§ã®èŠç©ãããè¡ã ãèŠç©ããããœãããŠã§ã¢éçºã«ãããŠé£ããããŒãã§ãããããã«ãBANKããŒã ã§ãã¬ããã¹ãã¯ãã£ããéããç©ã¿äžããäžçªå€ããªã£ãŠããŸãã 倧ããã®æ§æèŠçŽ å€§ããã®æ§æèŠçŽ ãšããŠã è€éæ§ ãã»ã éçèŠçŽ ãã»ã æ€èšŒã«ãŒãã®åãããã ããšãã 3 ç¹ããããšããŸããã è€éæ§ ïŒäŸïŒè€æ°ã¯ã©ã¹ã«ãŸããã§è§Šã ïŒäŸïŒãªããžããªã®æ°ãããŸããŸåæ£ããŠãã éçèŠçŽ : äœæ¥éã®å€ã å質ãªãã®ããããã䞊ã¹ã ïŒäŸïŒãã¹ãã³ãŒããããããæžã ïŒäŸïŒè³æ»ããŠã³ãããããããªãéã æ€èšŒã«ãŒãã®åãããã éåžžã®äœæ¥ãããé床ãèœã¡ã ããã£ããšãã®ãªã¹ã¯ããã ïŒäŸïŒTerraform ã ãšæ€èšŒã«ãŒããåãã«ãã Our 1pt ã¹ããŒãªãŒãã€ã³ãã¯çžå¯ŸèŠç©ã®æŠå¿µã§ãããšåè¿°ããŸããããçžå¯Ÿã®æ¯èŒåºæºãšãªãã¹ããŒãªãŒãçšæããŸããRobert C. Martin æ°ã®ã Clean Agileãåºæ¬ã«ç«ã¡æ»ã ãã§ã¯ãããã ãŽãŒã«ãã³ã¹ããŒãªãŒ ãšããèªåœã§ç޹ä»ããŠããŸãã BANK ããŒã ã§ã¯çŸåš 1pt ãæ¯èŒåºæºãšããŠãããã ããã忥çšåºŠã§çµããçšåºŠã®ãŠãŒã¶ãŒã¹ããŒãªãŒããããã¯ã¢ããããŠããŸããåæãšããŠãŠãŒã¶ãŒã¹ããŒãªãŒã¯æéãšçŽæ¥ãããã³ã°ãããæŠå¿µã§ã¯ãªãã®ã§å³å¯ã«åæ¥ã§ããããšã«éç¹ã眮ããŠããããã§ã¯ãããŸãã 4 ãæŠãã®ããŒã å
ã®åºæºã®èªèåããã®ããã«ã忥çšåºŠããšãããã¥ã¢ã³ã¹ãå©çšããŠããŸãã ãã®åºæºã«åºã¥ããŠäœ¿ããã€ã³ãã¯ãã£ããããæ°åå
ã® 1ptã»2ptã»3ptã»5ptã»8ptã»?pt ãšããŠããŸãã Issueäœææã®ãã€ã³ãä»äžæç¡å€æåºæº Issue äœææã«ãã€ã³ããä»ããããIssue ãåãåã£ã人ããã€ã³ããä»ãããã®å€æåºæºãæŽçããŸããã Issueäœææã®å€æåºæº 課é¡ã«å¯ŸããŠè§£æ±ºç(HOW)ãããã£ãŠããå Žå㯠Issue äœæè
ããã€ã³ããä»ããŠããŸãããšã«ããŠããŸããäžæ¹ã§è§£æ±ºç(HOW)ãããã£ãŠããªãå Žå㯠Issue ãåãåã£ã人ãåŸè¿°ãããã¹ãã€ã¯ããå©çšãããããŠããã€ã³ããã€ããããšã«ããŸããã ã¿ã¹ã¯ãã¹ããŒãªãŒãã€ã³ãã§ã®èŠç©ãããè¡ã BANK ããŒã ã§ã¯ Issue ã« 3 ã€ã®ããªãšãŒã·ã§ã³ãçŸåšèšå®ããŠããŸãã ISSUEã®ããªãšãŒã·ã§ã³ Epic / ãŠãŒã¶ãŒã¹ããŒãªãŒ / ã¿ã¹ã¯ã® 3 ã€ã§ããããã«ã€ããŠãç¹ã«ã¿ã¹ã¯ã¬ãã«ã®èŠç©ã«ã€ããŠçµç¹ã«ãã£ãŠéçšãç°ãªãããšæããŸããããšãã°ãå Žåã«ãã£ãŠã¯ã¿ã¹ã¯ã¬ãã«ã§ã¯çæ³æ¥ïŒçµ¶å¯Ÿå€åºæºã§ããæéã»æ¥ã«ã¡ãçšããèŠç©ææ³ïŒã䜿çšãããã¿ãŒã³ãèããããŸããçŸæç¹ã§ã¯ãããŠãããåããçç±ãšå¿
èŠæ§ãåºãŠããªããããã¿ã¹ã¯ã«å¯ŸããŠãã¹ããŒãªãŒãã€ã³ããã€ããŠéçšããŠããŸãã ããã§ãããããã¿ã¹ã¯ã«ã€ããŠèŠç©ãããè¡ãããšã®æçŸ©ãšã㊠BANK ããŒã ã§ã¯ 3 ã€ã®çç±ãèšèªåããŸããã æç©ºãã®ãã«ãæã®ç¶æ³ææ¡ ãã©ãã¯ããã¯ã¹åã®åé¿ ãŽãŒã«èšå®ã®æè èŠç©ãããè¡ãæçŸ© å®éãã®éçšã«ãã£ãŠãå人ã®äœæ¥ã®ãã©ãã¯ããã¯ã¹åã»ãŽãŒã«ã®ææ§åãé²ãããååã§ã®éçºãã¹ã ãŒãºã«ãªã£ãŠãããšæããŸãã ã¹ãã€ã¯ ãã€ã³ããä»ããããªããšãã«æŽ»çšãããã¹ãã€ã¯ã ãŠãŒã¶ãŒã¹ããŒãªãŒãã¿ã¹ã¯ã«å¯ŸããŠãæè¡çãªæžå¿µãäžæç¹ã«ãã£ãŠãã€ã³ããã€ãããªãå ŽåããããŸããããã«å¯ŸããŠãã¹ãã€ã¯ããšããææ³ãå©çšããŸããã Ryuzee.com: ã¹ã¯ã©ã ã«ãããæè¡çã¹ãã€ã¯ã®é²ãæ¹ ãã§ã¯ã次ã®ããã«èª¬æããŠããæŠå¿µã§ãã ãªãªãŒã¹å¯èœãªãããã¯ããäœãã®ã§ã¯ãªãã質åã«çãããæ
å ±ãåéãããããããšãç®çãšããäœæ¥ã éçºããŒã ãæè¡çãªè³ªåãèšèšäžã®åé¡ã解決ããããã®å®éã®äœæ¥ãè¡ããŸã§ãèŠç©ããã§ããªããããªãããã¯ãããã¯ãã°é
ç®ãåºãŠããããšããããŸãã 解決çã¯ããã¹ãã€ã¯ããè¡ãããšã§ãã ç®çã¯ã質åã«å¯Ÿããåçããœãªã¥ãŒã·ã§ã³ãèŠã€ããããšã§ãã ããã°ã ã¹ããŒãªãŒãèŠç©ããããã®ã¹ããŒãªãŒ ãšèšããŸããå
·äœçã«ã¯æ¬¡ã®ãããªãã©ãŒãããã§ Issue ãäœæããããšã«ããŠãISSUE_TEMPLATE ã«ãç»é²ããŠéçšããŠããŸãã ãXxx ã®ã¹ããŒãªãŒã®èŠç©ããããããããXxx ãïŒæ€èšŒã»èª¿æ»ã»ææ¡ïŒããã ISSUE_TEMPLATEã®äžèЧ ãã®ã¹ãã€ã¯ã®äœ¿ãæãšããŠãBANK ããŒã ã§ã¯ æŽå²ççµç·¯ãããæ°ããããããã«ã¹ãã€ã¯ãæã€ ãšããäœ¿ãæ¹ãããŠããŸãïŒãã¹ãã€ã¯ãæã€ããšããã®ã¯ã¹ãã€ã¯æŽ»çšã®éã®èšãåãã§ãïŒã é·å¹ŽçšŒåããŠãããœãããŠã§ã¢ã«æ©èœè¿œå ããå Žåã¯æŽå²ççµç·¯ã¯ã©ãããŠãããããã®æŽå²ççµç·¯ã®çºèŠã«ãã£ãŠå€§å¹
ãªææ»ããçºçãèŠç©ã倧å¹
ã«äžæ¯ãããªã¹ã¯ããããŸããå®éã«ãããžã§ã¯ãéå¶ã®äžã§æŽå²ççµç·¯ã«ããã£ãŠããŸã£ãäºäŸãããããŒã ã®ãã©ã¯ãã£ã¹æŽ»çšè¡ãšããŠå®çŸ©ããŸããã äºæžç«¯äŒè° ããã¯ãªãªãžãã«ã®ããŒã ãã©ã¯ãã£ã¹ã§ããæ¬¡ã®ãããªã·ãŒã³ã§æŽ»çšããŸãã äœããã®åé¡ãçºçããŠãããæ¬¡ã®æ¹åæ§ã»ããããšã¯æ±ºãŸã£ãŠããªãå Žåãã 䜿çšå¯èœãªéå
·ãç®ã®åã«ããããã®æŽ»çšå¯èœæ§ã»æŽ»èºã®ããæ¹ã«ã€ããŠã¢ã€ãã¢ãåŸãããŠããªãéã«ã ãã®èª²é¡ã«å¯ŸããŠã倧ãŸããªèŠè§£ãåŸãããã®å¯Ÿè©±(Dialogue)ãè¡ãã äºæžç«¯äŒè° äºæžç«¯äŒè°ã§è¡ãããã³ãã¥ãã±ãŒã·ã§ã³ã¯ã察話ïŒdialogueïŒãã§ãããšå®çŸ©ããŠããŸããã åãã®ãã¶ã€ã³: åµé ç察話ã®ãã¡ã·ãªããŒã·ã§ã³ ãã§ã¯ã察話ããèªç±ãªé°å²æ°ã®ãªãã§è¡ãããæ°ããªæå³ä»ããã€ãã話ãåããã§ãããšå®çŸ©ããŠããŸãããã®å®çŸ©ã®éããã£ãã°ããã«ãããã¯ã«ã€ããŠè©±ããæ¹éãããªããšãªããæ±ºããããšãç®æããŸãã ãããŸã§æ¬¡ã®ãããã¯ã§éå¬ãããŸããã OneLogin ã®æŽ»çš OneLogin ãæŽ»çšããŠã§ããããšã¯ãªãã ããïŒ Go ãããã»ãµãŒããŒãµã€ãã¢ãŒããã¯ã㣠Go ãæŽ»çšããéã®ããŒã ã®èªèåãã OOP ãåæãšããæŠç¥ã»æŠè¡ãšã®ãã©ã³ã¹ãã©ãåãã ãµãŒããŒãµã€ãã¢ãŒããã¯ã㣠Logging New Relic ã®æŽ»çšãå§ããäžã§ã©ã®ããã«ãã®ã³ã°ãèããã 5 次ã®å
·äœçãªã¢ã¯ã·ã§ã³ã¯ã©ãããã Go ã«é¢ããäºæžç«¯äŒè°ã® Miro ã®æ§åãäžéšãã©èŠããããšãã®ãããªè©±é¡ããã£ãã°ããã«åãäžããŸããã Goãããäºæžç«¯äŒè°ã®æ§å Go äºæžç«¯äŒè°ã®äžã§ã¯ãèªåãã¡ã®ã³ãŒãããŒã¹ã§ã¯ã©ã®ããã«ãå€ãªããžã§ã¯ãããå®çŸ©ãããããšãã£ãå
·äœçãªå®è£
æéãæ±ºãŸããšãããŸã§è³ããŸããã ããŒã ã¡ã³ããŒã®ææ³ã¯æ¬¡ã®ãããªãã®ã§ããã éãªæ
å ±äº€æãåºæ¥ã äºåæºåããããªãã£ãã®ãããã£ããããªããããã®ãèªèãåºå®åããªããŠãã ãŽãŒã«ã»ããããããšãèŠã€ãã£ãïŒ ãªã¢ãŒãã§æ¬ èœããã¡ãªã³ãã¥ãã±ãŒã·ã§ã³ãè£ãã å®éäºæžç«¯äŒè°ã§è¡ãããå
容ã¯ãç©ççã«åãå Žæã«ããã°èªç¶ãšè¡ãããŠããäŒè©±ã§ããããŸããããããWFH ã®ãªãã§ãäºããªã¢ãŒãå士ãšãªããšãããã£ãã³ãã¥ãã±ãŒã·ã§ã³ãæ¬ èœããã¡ãªç¹ããäºæžç«¯äŒè°ã¯ããŸãè£ã£ãŠãããŠããŸãã ãªãã¡ã¯ã¿ãªã³ã° ãªãã¡ã¯ã¿ãªã³ã°ã¯æè¡ãã©ã¯ãã£ã¹ãšããŠéèŠãªæŽ»åã§ããããšã¯èšåãããŸã§ããããŸãããMartin Fowler æ°ã¯ã FlaccidScrumïŒããããã¹ã¯ã©ã ïŒ ãã«ãŠããªãã¡ã¯ã¿ãªã³ã°ãªã©ã®æè¡ãã©ã¯ãã£ã¹ãæ¬ ããããšã§ãéçºé床ãäœäžããŠããçŸè±¡ã瀺ããŸããã ãªãã¡ã¯ã¿ãªã³ã°ãšTODOã³ã¡ã³ãã®ãã±ããå BANK ããŒã ãšããŠã®ãªãã¡ã¯ã¿ãªã³ã°ã«ãããå
·äœçãªãã©ã¯ãã£ã¹ãšããŠã TODO ã³ã¡ã³ãã®ãã±ããå ããšãããã®ããããŸãããã㯠BANK ããŒã ã® @applepine1125 ããã瀟å
ããã¥ã¡ã³ãã«æçš¿ãããšãã»ã€ããå§ãŸã£ããã©ã¯ãã£ã¹ã§ãã 瀟å
ããã¥ã¡ã³ãã«æçš¿ãããšãã»ã€ 代çããŠãµããªãŒãããš äººã¯æéããªãã»ã¿ã¹ã¯åå²ã®äžæçã¡ã¢ãšã㊠TODO/FIXME ã³ã¡ã³ããæžã TODO/FIXME ã¯ååããä»çµã¿ãã§ããªããšãŸãã ãã±ããåããããšã§ãã©ã³ãã³ã°çæ£åžãã§ç®¡çãããããªãããªãã¡ã¯ã¿ãªã³ã°ãçµã¿èŸŒããããã«ãªã ããã«ãããTODO/FIXME ã®ååå¯èœæ§ãé«ãŸã TODO ã³ã¡ã³ãã®ãã±ããåã¯ãããã°æèçã«ãªãã¡ã¯ã¿ãªã³ã°ãéçºã«çµã¿èŸŒãããã®åºç€ãšãªããã®ã§ãããã®åŸèªç¶ãšãã±ãããäœããç¡æèã«ãªãã¡ã¯ã¿ãªã³ã°ãçµã¿èŸŒãŸããæªæ¥ãæ¥ãããšãèŠæ®ããç¹ã«ã€ããŠãèªã£ãŠããŸãã éçºã®ã¹ã±ãžã¥ãŒã«ã®äžã§æèçã«ãªãã¡ã¯ã¿ãªã³ã°ãçµã¿èŸŒãããšããããæ¹ãç©ã¿éããŠããããšã§ãæçµçã«ãã±ãããªããŠäœããªããŠãæ¥ã
ã®ãã£ãŒãããã¯ãããšã«èªç¶ãšæ£ããããã¹ãç®æã«æãå
¥ãããã«ãªããšå¬ãããã by @applepine1125 ã ãšãã»ã³ã·ã£ã« ã¹ã¯ã©ã ãã®ç¬¬ 8 ç« ãæè¡çè² åµãã¯æè¡çè² åµã«ã€ããŠéåžžã«æåã§ç€ºåã«å¯ãå
容ãèªã£ãŠããŸããããã®äžã§ã¯æè¡çè² åµã®çºçã®ç®¡çãå¯èŠåãè¿æžã®éèŠæ§ãšé©ç𿹿³ã«ã€ããŠèªã£ãŠããŸããåœãã©ã¯ãã£ã¹ã¯ãã®äžã®ãå¯èŠåãã«äžåœ¹è²·ããã®ãšèšããŸãã å®éã«ãå®è·µãããšæ¬¡ã®ãããªå¹æãåŸãããŸããã ç¹ã«ä»ã®äººãšååããæã«æŽ»çšããã»ããè¯ããšããã£ã PR ã®ãšãã«æ°ãã€ããããã«ãªã£ã TODO ã®å¯¿åœãçãããããã«æèããããã« ãã¢ãªãã»ãã¢ããã»ã©ã€ãã³ãŒãã£ã³ã° éçºäžãã¢ã§äœæ¥ããããšã«ã€ããŠããããŸã§ã®ã¬ããã¹ãã¯ãã£ãã§ãããã£ãããšããæ¯ãè¿ãããã£ãã®ããã¢ãªãã»ãã¢ããã»ã©ã€ãã³ãŒãã£ã³ã°ã§ããã ãã¢ãªãã»ãã¢ããã»ã©ã€ãã³ãŒãã£ã³ã° ãããã¯éœåºŠéœåºŠã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠæŽ»çšããæ¹éãšããŠããŸããçµç¹ã«ãã£ãŠã¯åžžæãã¢ãªãã»ã¢ããããããšãã£ããšããããããŸãããBANK ããŒã ã§ã¯å¿
èŠã«å¿ããŠã®æŽ»çšã«ãšã©ããŠããŸã 6 ã ã¬ããã¹ãã¯ãã£ã 玹ä»ãããã©ã¯ãã£ã¹ã®æåŸã¯ãã¬ããã¹ãã¯ãã£ãïŒæ¯ãè¿ãïŒãã§ãã ã¬ããã¹ãã¯ãã£ã ã¬ããã¹ãã¯ãã£ãã§ã¯ 3 ã€ã®ã¯ãŒã¯ãè¡ã£ãŠããŸãããïŒã€ç®ã¯ãMad Glad Sadãã§ããããã¡ãã¯ã ããŒã éçºã®æœåšç課é¡ãèŠã€ããæ¯ãè¿ãã¯ãŒã¯ãMad Glad Sad(åãæãå)ã ãã«ãŠè©³èª¬ããŠããŸãã ïŒã€ç®ã¯ã èŠç©ãæ¯ãè¿ãäŒ ãã§ãããã®åçµã¯ãèªåãã¡ã®èŠç©ããã«å¯ŸããŠãã£ãŒãããã¯ã«ãŒããåããŠããã ãããããšããèª²é¡æããå§ãŸã£ãã¯ãŒã¯ã§ããèŠç©ãã«èª²é¡æãæãã Issue ãåãäžããŠæ¬¡ã®ãããªåããéããåå ãšåããã ActionItem ãããŒã ã§èŠã€ãåºããŠãããŸãã ãªãèŠç©ã粟床ã埮åŠã ã£ãã äœãåå ã§æ³å®ããã倧å¹
ã«åŽåãå¿
èŠã ã£ãã ã©ããã屿§ã®ãããã®ã ã£ãã ã¿ã€ã ãã·ãŒã³ã«ä¹ã£ãŠæã«æ»ããªãäœããã³å
¥ãããã ä»åŸã©ãããã°ãããšãããã åœããã°ã§è¿°ã¹ãŠããèŠç©ããã«é¢ãããã©ã¯ãã£ã¹ã¯ãã®ãèŠç©ããæ¯ãè¿ããã®çµæãåŸããããã®ããšãŠãå€ãã§ããããšãã°ãã¹ããŒãªãŒãã€ã³ãã®å€§ããã®æ§æèŠçŽ ã¯ããã®ã¯ãŒã¯ããçºèŠããããã®ã§ãã ïŒã€ç®ã¯ãKPTãã§ãæ¯ãè¿ãã¯ãŒã¯ã®äžã§æãäžè¬çãªãã®ãšèšããã§ãããã ããããã®ã¯ãŒã¯å
ã§ ãé£ããããã§çµããããªããã¡ã·ãªããŒã ãå¿ãããããšããŠããŸããEVP of Development ã® @fshin ããã® ãéšäžã«å¯ŸããŠãé£ããããã§çµããããªããããžã¡ã³ã ãã§æç€ºãããããžã¡ã³ãã®æ³šæäºé
ãåèã«ãããã®ã§ãã ä»äºã«é£ããããšãããã®ã¯åœããå åœããåã®èšèãèšããªã ç°¡åã ã£ãããããããããªãã«çžè«ããªã ã¬ããã¹ãã¯ãã£ãã«ããã話ã®é²ãæ¹ã«ã€ããŠãåæ§ã«ããé£ããã話é¡ã¯ããããŸãããé£ããã§çµãã£ãŠããŸããšããã§ãã£ãŒãããã¯ã«ãŒãã¯æ¢ãŸã£ãŠããŸããŸãã ãã©ã¯ãã£ã¹ã®ç©ã¿äžãæ¹ çµç¹ã«éãããæé·ãããããã«å¿
èŠäžå¯æ¬ ãªã®ã¯ãã å®è·µããã ãã§ã¯è¶³ããªããšæã£ãŠããŸããããšãã°ãã ãšã³ãžãã¢ã®ç¥ççç£è¡ ãã§ã¯å
·äœâæœè±¡âå¿çšãšããåŠã³ã®ãµã€ã¯ã«ãæç€ºããŠããŸãã ããšã³ãžãã¢ã®ç¥ççç£è¡ãã«ãããåŠã³ã®ãµã€ã¯ã«ã ã¬ããã¹ãã¯ãã£ãã¯äžå³ã®ãæœè±¡ãã®ãã§ãŒãºã§ããã¹ããªã³ãå
ã§çµéšãããå
·äœããåæããŠæ¬¡ã®ãå¿çšããçºèŠããããšã«æçŸ©ããããšèããŸããBANK ããŒã ã§ã¯ã¬ããã¹ãã¯ãã£ãã§ãActionItemãããŸãšããŸããããã® ActionItem ããã©ã¯ãã£ã¹ã«ãªããšããæŠå¿µæŽçã«ãã£ãŠãã©ã¯ãã£ã¹ã®ç©ã¿äžãã詊ã¿ãŠããŸãã ã¬ããã¹ãã¯ãã£ããããã©ã¯ãã£ã¹ãžã®æè¯ã«ãŒã ã€ãŸããã¬ããã¹ãã¯ãã£ãã®äžã§åŸãããã¢ã€ãã¢ã ActionItem ãšããŠå®è·µãããã©ã¯ãã£ã¹ãšããŠæè¯ããŠãããšããããæ¹ãããŠããŸãã ãã®æèæ¹æ³ãéçºããŒã ãæŽç·Žãããããšã«ã€ãªãããã¯ã2021 幎çµããã«éçºãã©ã¯ãã£ã¹ã®éãŸããã©ã®ããã«é²åãããŠãã£ããã«ãã£ãŠè©äŸ¡ãããããšã§ãããã ãããã« BASE BANK ã®éçºããŒã ã§ã¯æ¥ã
ãã©ãããã°ããè¯ããããã¯ããäœãããããšãã£ãããšãèãããã£ãŒãããã¯ã«ãŒããèªåãã¡èªèº«ã«åãé²åããŠãããããæ¥åã«éé²ããŠããŸãã open.talentio.com çŸå Žã®é°å²æ°ã«èå³ãæã£ãŠããã ããæ¹ã¯ãæ°è»œã«ã«ãžã¥ã¢ã«ãªã話ãããŸãããã @hgsgtk å®ã« DM é ããŠãæ§ããŸããã èªåœãè²ãŠãŠãããšããèãæ¹ã¯ãã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒæ°ã®æå±ããããã¿ã³ã»ã©ã³ã²ãŒãžãããããžã§ã¯ãã§è¡ãªãéãåå¥ãããžã§ã¯ãã§èª¿æŽããããããžã§ã¯ãã»ã©ã³ã²ãŒãžããäœæãããšããäžåæ°ã®è§£èª¬ã«ã€ã³ã¹ãã€ã¢ãããããã®ã§ãã詳ããã¯ã ãã¿ãŒã³ã»ã©ã³ã²ãŒãž: åµé çãªæªæ¥ãã€ããããã®èšèª ãã®ã第1ç« å»ºç¯ã«ããããã¿ãŒã³ã»ã©ã³ã²ãŒãžã®èªçããã芧ãã ããã ↩ ãçãçããšããããšããåãã¯ãã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒæ°ã®å»ºç¯çè«ã«ãããããŒãã§ãããçãçããšããå Žæãããããããšããšããç®çæã«åœ±é¿ãåããŠèšå®ããŸããã https://speakerdeck.com/hgsgtk/design-pattern-usage-inspired-by-pattern-language?slide=11 ↩ ã ãšã¯ã¹ããªãŒã ã»ããã°ã©ãã³ã° ãïŒä¿ã«èšããXP çœæ¬ãïŒã§ã¯ããããã°ã©ããŒã®ç掻ãè¯ããåµé çã«ãããããšåãããã« XP ãäœç³»åããããšèªã£ãŠããŸãã圌ãã®èãæ¹ã«ã匷ã圱é¿ãåããŠçŸåšã®è©Šã¿ãé²ããŠããŸãã https://speakerdeck.com/hgsgtk/xp-is-social-change-in-timeless-programming-way?slide=21 ↩ ã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã ïœäŸ¡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ïœ ãã§ã¯ãã¹ããŒãªãŒãã€ã³ãã®åªããç¹ã¯ äœæ¥éã®èŠç©ãããšæéã®èŠç©ãããåããããš ã ãšããŠããŸããæéã®èŠç©ããã¯èŠæš¡ïŒãã€ã³ãå
šåèšïŒ/ ããã·ãã£ïŒ1 åã®ã€ãã¬ãŒã·ã§ã³ã§å®äºãããã¹ããŒãªãã€ã³ãã®åèšïŒãªã©ã®èšç®åŒã責åããã£ãŠããŸãã ↩ BASE 瀟ã§ã¯ New Relic ãã©ãããã©ãŒã ãçšããåãçµã¿ãéå§ããŠããŸããå
·äœçã«ã¯ CTO @dmnlk ããã®ãã¡ãã®è³æãã芧ãã ããã https://speakerdeck.com/dmnlk/phpcon2020jp-observability ↩ å®éãã Clean Agile åºæ¬ã«ç«ã¡æ»ã ãã«ãŠ Robert C. Martin æ°ã¯ããã¢ããã°ã©ãã³ã°ã«ã€ããŠããã¢ã«ãªãããšã¯ä»»æã§ãã匷å¶ããããã®ã§ã¯ãªãããåžžã«ãã¢ã«ãªãããã§ã¯ãªãç¹ã説æããŠããŸããäžäººã§ã³ãŒããæžãããããšãããã®ã§ãå人ã»ããŒã ãã©ã®ãããã®å²åã§è¡ãªããæ±ºããã°ãããšã ↩
æããŸããŠããã§ãšãããããŸãã BASEæ ªåŒäŒç€Ÿã§UIãã¶ã€ããŒãããŠããéæ( @nomjic )ã§ãã å€åºèªç²ã ãŒãã«æè»ããããæšä»ã鱿«ãé£äŒã§ããªãã¹ãå€ã«åºãã®ãæ§ããããšããã§ããã å®¶ã«ç± ãã£ãŠèªæžããŠéãããããšãã人ãå€ãã®ã§ã¯ãªãã§ããããã ãããªããã§äžã€ãèªæžãã¿ãæžããŠã¿ãããšæããŸãã ãšèšã£ãŠããé£äŒã«èªããªã¹ã¹ã¡æ¬10éžãã¿ãããªè©±ã§ã¯ãªããèªæžãžã®ã¢ãããŒã·ã§ã³ã®é«ãæ¹ãšããç¿æ
£åãšãã«ç¹ãããããªè©±ããããŠããããããšã 話ãå
容ããã£ããèšããšã ãã¶ã€ã³ããŒã ã§èªæžäŒãå§ããŠãããã3ã¶æçµã£ãã®ã§ãã®å ±å ãã§ãã ã¡ãªã¿ã« éçºããŒã ã§ã®èªæžäŒã«ã€ããŠã®èšäº ãšããèšäºãå
æã¢ãããããŠããŸããããã¡ãã«æ¯ã¹ãŠãã¡ãã®å
容ã¯ã ãã¶ãããã§ãã ç¥èãæè¡ã身ã«ä»ããããšããããäŒã®åå ã¡ã³ããŒãèªæžãç¿æ
£åããããšãæ¯æŽãããšããããŒã ã¡ã³ããŒéã®ã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããããšãã£ãæ¯éã匷ãã§ãã å·£ç¯ããã¿ã€ã ãæŽ»çšããŠèªæžããããã©ã¢ãããŒã·ã§ã³ãäžãããªãããŸãã¯èªæžãå§ãããã®ã®ç¿æ
£åã§ããèªä¿¡ããªãããšãã£ã人ã®åèã«ãªãã°å¹žãã§ãã çµç·¯ æšå¹ŽãããåŒç€Ÿã§ã¯æ°åã³ãããŠã£ã«ã¹ã®åœ±é¿ãåãåšå®
å€åãæšå¥šãããŠãããå®éå€ãã®ã¡ã³ããŒãèªå®
ã«ãŠæ¥åãéè¡ããŠããŸãããããªäžã§ãããææãã以äžã®ãããªå£°ããã©ãã©ãšèãããŠããŸããã ããªã¢ãŒãã¯ãŒã¯ã ãšãã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªãæããããã ãä»ãŸã§é倿éãèªæžã¿ã€ã ã ã£ãã®ã ãã©ããã®ç¿æ
£ããã£ããæ¶ããŠããŸã£ãã ãªã¢ãŒãã¯ãŒã¯ããããã§ããã ããšããªã¢ãŒãã¯ãŒã¯ãšã¯é¢ä¿ãªãã«ããè³ã«ãã話ã§ã ãã¶ã€ããŒã¯æŽ»åãèŠæ åé¡ããã£ããããŸãã ç§ã¯ãã°ããåãã瀟å€ã§ã®èªæžäŒã«åå ããŠãŸããŠãèªãã æ¬ã«ã€ããŠè©±ãã€ã€æã«ã¯è±ç·ããŠäžããªã話ã§çãäžãããªããæ¥œããäŒè©±ããããšããç¶æ³ãçµéšããŠããã®ã§ãã ããããã¶ã€ã³ããŒã ã§èªæžäŒãã£ãŠã¿ãã㪠ããšæã£ãŠããŒã ã¡ã³ããŒã«è©±æ¯ã£ãŠã¿ããçµæ§é£ãã€ãè¯ãã£ãã®ã§äŒç»ããŠã¿ãããšããã®ããã¶ã€ããŒèªæžäŒã«è³ãçµç·¯ã§ãã äŒç» ã³ãã¥ãã±ãŒã·ã§ã³æŽ»æ§åãšããèªæžã®ã¢ãããŒã·ã§ã³åäžã»ç¿æ
£åãšãã«éãã眮ããŠããã®ã§ãããŸãåŽåãå²ããã« èªæžãèŠæãªäººã§ããããæ¥œããç¶ãããã圢 ãç®æããŠèããŠã¿ãŸããã zoomã䜿ã£ããªã³ã©ã€ã³éå¬ é »åºŠã¯é±äžåã30åã1æéçšåºŠã äžåãããã®ããªã¥ãŒã ã¯æ¬ã®äžç« åããããããŒãžæ°ã§èšããš40ã60ããŒãžãããïŒ åã
èªãã§ããŠãèªæžäŒã®å Žã§ã¯ãæã£ãããšããããããªãããšãçãèªç±ã«èªãå Žãšããã ã©ã®ããããã£ããèªã¿èŸŒãã§ãããã¯èªç±ãæãèªã¿ã§ãããããéšåçã«ããèªãã§ãªããŠããããäœã ã£ããç®æ¬¡ããèŠãŠãªããã£ãŠããã ãã®æžç±ã®æ²ããããŒãããã¿ã«ããŠã³ãã¥ãã±ãŒã·ã§ã³ãçºçããã°ããã§ãã ã ãã®ãããã®ãããæãã§äŒç»ãããŸããã 2ã€ã®ã¡ãœãã èªæžããã³èªæžäŒã®å質åäžã®ããã«ã2ã€å·¥å€«ãããŠã¿ãŸããã â Kindleã®ããŒã«ãŒïŒã¡ã¢æ©èœãæŽ»çš ç§ã¯æžç±ã¯åºæ¬é»åçã§èªãã§ããã®ã§ãããæ¬ãèªã¿ã€ã€ãããèªæžäŒã§è©±ããããšæã£ãç®æã«ããŒã«ãŒãåŒããŠã³ã¡ã³ããæžãæ®ããŠã¿ãŸãããïŒé³å£°å
¥å䜿ããšæ¥œã§ããïŒ èªãããã£ãããšãèšããã³ããªãããã«å§ãã工倫ã ã£ãã®ã§ããããã£ãŠã¿ããšã ååãã¡ãšèªããããªããããªé¢çœãç®æãæ¢ã ããšããçãã€ããŠãèªæžã®ã¢ãããŒã·ã§ã³ãäžæ®µéäžãã£ãããã«æããŠããŸãã â¡Figmaã䜿ã£ãŠäŒè©±ã®ã¡ã¢åã ããäžã€å·¥å€«ããç¹ãšããŠã¯ããèªæžäŒã®èšé²ãã©ãæ®ãããã§ãã æ¥œããèªãåããã°èªæžäŒãšããŠã®ç®çã¯éæãªã®ã§ãããããšããæ¯ãè¿ããããããGOODã§ãããšã¯èšããããããè°äºé²ãã®ãããªãã®ãåããšãæéã倧ãããå Žã®é°å²æ°ã硬ããªã£ãŠããŸãããã§ãã ãšããããšã§ãåå è
ã®1人ãïŒãšããããä»åã圹ã§ããç§ãïŒèªæžäŒäžã«Figmaäžã«ã¡ã¢ãåããŸããã æžç±å
ã®å°è±¡æ·±ãç®æãšããé¢çœãçºèšãæžã蟌ãã ãããŸãã äžã€ã®ç»é¢äžã«Kindleç»é¢ã§æ¬ã®ããŒãžãéãã€ã€ãFigmaã§ã¡ã¢ãåãã€ã€ãZoomã§çããã®é¡ãèŠã€ã€... ãšããã¹ã¿ã€ã«ããã£ãŠã¿ãŸããã ã·ãŒã ã¬ã¹ã« æ¬ã®ããŒãžã»ã¡ã¢ã»ã¡ã³ããŒã®é¡ ãèŠããŠè¯ãå
·åã§ããã 詳ããèšé²ãæ®ãããšã¯æå³ããŠããªããŠããã©ã®ãžãã«èå³ãæãããŠããããã©ããªè©±é¡ãåºãããããã£ããæ®ã£ãŠããã°è¯ãããããã«èããŸããã 詳ããæ¯ãè¿ããããªãæžç±ãã®ãã®ãåèªããã°ãããããªãããšããã¹ã¿ã³ã¹ã§ããã 1åç® ããªããžã§ã¯ãæåUIãã¶ã€ã³ã ãããªããã§ãïŒåç®ã®é¡æãéžå®ããŠèªæžäŒãå§ããŸããã èªãã®ã¯2020幎ã®UIãã¶ã€ã³çãã¹ãã»ã©ãŒã§ãã ãªããžã§ã¯ãæåUIãã¶ã€ã³ ãéç§°OOUIæ¬ã§ãã æ¥æã¯ææ11:00ã11:30ã«èšå®ããŸããã ææã®ååãšããããããŸãã¡ä»äºã®ãšã³ãžã³ããããªãæé垯ãã«ãããèªæžäŒãå·®ã蟌ãããšã§ãè¯ãå
·åã«ãŠã©ãŒãã³ã°ã¢ããã«ãªãã®ã§ã¯ãªããããšããããšãæå³ããŠããŸãã 9æåŸåãã11æåæ¬ãŸã§ã®æéããããŠãã¶ã€ã³ããŒã æ°åã§èªã¿ãããŸããã èªæžäŒäžã«åã£ãã¡ã¢ïŒã®äžéšïŒã¯ä»¥äžã®ãããªæãã§ãã 1åèªã¿çµãã£ãŠãã³å
¥ã 1åèªã¿çµãã£ãæç¹ã§ãé²ãæ¹ãšãæé垯ãšãããããããã®èªæžäŒç¶ããã¹ããïŒãšããç¹ã忀èšããããã«KPTäŒïŒæ¯ãè¿ãäŒïŒãããŸããã æŠãåºãŠããã®ã¯ä»¥äžã®ãããªæèŠã èšæ¶ã®å®çã«è¯ããç¿æ
£ã«ããªããç¶ããã¹ãã èªãã§çè§£ã§ããªãã£ãç¹ãã¡ãããšè°è«ããŠçè§£ã§ããã äžå30åã¯çããããçãäžãã£ãŠãããããã§çµããã é²è¡åœ¹ã¯æã¡åãã«ããæ¹ãè¯ããããïŒãããŸã§æ¯åç§ããã£ãŠãŸããïŒ é²è¡åœ¹ãã¡ã¢åãåæã«ããã®ã€ããã ãšãã£ãæèŠãèžãŸããé²ãæ¹ã«ãã³å
¥ãããŸããã ãååã¯èŠæã ãããæŒãããããããªãããšãã人ãããã®ã§ãæé垯ãå€å°èª¿æŽããŠããŸãã ãã³å
¥ã1 ïŒã¢ãã¬ãŒã¿ïŒé²è¡åœ¹ïŒãšã¡ã¢åãã®æ
åœãæ¯åå€ããã ãã³å
¥ã2 ïŒæéã12:15 - 13:00ã®45åéãšããã æ¬¡äœèªãããäŒ 2åãã«å
¥ãåã«ãèªæžäŒã®æéãäžå䜿ã£ãŠã次äœèªã¿ããïŒããèªãäŒãããŸããã åã
èå³ããæ¬ãææ¡ãåã£ãŠãæåŸã«ã¿ããªã§æç¥šããŠæ±ºããŠããŸãã æžç±ã ãã§ãªãããã°èšäºãªã©ãåè£ã«æãããŸããã 2åã ããã¶ã€ã³ã®äŒãæ¹ã åå è
ã®èå³ãäžçªéãã ãã¶ã€ã³ã®äŒãæ¹ ã11æäžæ¬ããèªã¿é²ããŠããŸãã12ææ«æç¹ã§ååã»ã©èªã¿çµãããšããã§ãã æéãååããæŒã«ããããã®ã奜ãŸããã£ãããã§ãåå è
ãããããå¢ããŸããã以åã®æé垯ã§ã¯4人ååŸã®æãå€ãã£ãã®ã§ãããä»ã¯ã³ã³ã¹ã¿ã³ãã«6ã7人åå ããŠããŸãã ãŸããä»åã圹ãšã¡ã¢åã圹ãåããããšã§ãã¡ã¢ã®ç²ŸåºŠãåäžããããã«æãããŸãã 以äžãã¡ã¢ã®äžéšãæç²ã ãŸãšãïŒãšãããææïŒ ãã®èªæžäŒãå²ãšè©±é¡ãè±ç·ããŸãã ã âç« ã®ãããèªãã§ãŠãâ¡â¡ã®æ¥åã®æã®ããšæãåºãã ãã®ãããªçºèšããå§ãŸãããã®æ¥åã§äœããã£ãããäœã«å°ã£ãããäœãé¢çœãã£ããããšãã話ã«ãªããæ°ã¥ãã°å
šç¶æžç±ã®å
容ãšé¢ä¿ãªã話é¡ã«åãã§ãããããŸãã æ¬ã®å
容ã«ã€ããŠã®ç¥èã»çè§£ãæ·±ãããšããæå³ã§ã¯å¥œãŸãããªããããããŸããããããããã®ãã®èªæžäŒã®æå³ã®äžã€ãšããŠã ã³ãã¥ãã±ãŒã·ã§ã³ã®æŽ»æ§å ãããããŸãã®ã§ãæã
ã®èªæžäŒã«ãããŠã¯ãã®ãããªè±ç·ããŠã§ã«ã«ã ãšããŠããŸãã ããããæ¬ã®å
容ãåŒã³æ°Žã«ãªã£ãŠåã
ã®æ¥åã¹ã¿ã€ã«ããã¶ã€ã³ã«å¯Ÿãã䟡å€èŠ³ã»æãå
¥ããšãã£ãã æ®éã®éè«ã§ã¯ãªããªãè³ããªãæ·±ããšãã ãŸã§è©±é¡ãåãã§ããã®ã§ãçµæ§è¯ãå
·åã«æåããŠãããªããšäŒç»è
ã§ããç§ãšããŠã¯æã£ãŠãããŸãã ãããªãããªã§ã2021幎ãèªæžäŒããããç¶ããŠãããããšæããŸãã