ServiceDevæå±ããµãŒããµã€ããšã³ãžãã¢ã®æ ç°ã§ãã çŸåšç§ã¯ãServiceDevã®ããŒã ã«æå±ãããããã·ã§ããäœæãµãŒãã¹ãBASEãåã³ã·ã§ããã³ã°ã¢ããªãBASEãã®æ©èœéçºãæ
åœããŠããŸãã BASEã§ã¯äž»ã«Qæ¯ã«ãããžã§ã¯ãããŒã ãç·šæããããŒã ã§äž»äœãšãªã£ãŠæ©èœéçºãè¡ã£ãŠãããŸãã ããŒã ã¡ã³ããŒæ§æã¯ãããžã§ã¯ãã®ç¹æ§ãèŠæš¡ã«ããæ§ã
ã§ãããå€ãã®å Žåãåãã°ã«ãŒããã1ã2åããããžã§ã¯ãã«ã¢ãµã€ã³ãããŸãã ä»åã¯ãšããé·æéãããžã§ã¯ãã§æããäºãã»å®éã«ãã®ããã«é²ããããšãããšããããµãŒããµã€ããšã³ãžãã¢ã®èŠç¹ãã玹ä»ããããšæããŸãã ã©ããªãããžã§ã¯ãã ã£ãã ä»å玹ä»ãããããžã§ã¯ãã¯ãBASEãã®æ¡åŒµæ©èœã§ãããBASE Appsãã®1ã€ã§ãããååãªãã·ã§ã³ Appããéçºãããããžã§ã¯ãã§ããã ãååãªãã·ã§ã³ Appãã¯ååã«ã®ããã©ããã³ã°ããªãŒããŒã¡ã€ãã§äœ¿ãããªãã·ã§ã³ãèšå®ã§ããæ¡åŒµæ©èœã§ãã詳现ã¯äžèšããã芧ããã ããã°ãšæããŸãã baseu.jp ãããžã§ã¯ãã¡ã³ããŒæ§æ ãããžã§ã¯ããããŒãžã£(PM) & ãã£ã¬ã¯ã¿ãŒ 1人 ããã³ããšã³ããšã³ãžã㢠1人 ãµãŒããµã€ããšã³ãžã㢠3人 (éå§ 1人, æçµçã«3人) ãã€ãã£ãã¢ããªãšã³ãžã㢠2人 ãã¶ã€ã㌠1人 ããã¯ãªããããªãªãŒã¹ãŸã§ã®æé 10ã¶æãããã»ã© ç§ã®ç«ã¡äœçœ® ãµãŒããµã€ããšã³ãžãã¢ã®ãŸãšã圹çãªç«ã¡äœçœ®ã§ããã åãã¯ãµãŒããµã€ããšã³ãžãã¢ã¯1人ã§ããããæçµçã«3人ã«å¢å¡ã ç§ã¯éçºãã£ã¬ã¯ã·ã§ã³ãããã€ã€ãä»ã®ã¡ã³ããŒãšå
±ã«éçºãããŠãããŸããã ãšã³ãžãã¢ãªã³ã°ãããŒãžã£(EM)ããç§ãžæåŸ
ãããŠããäºã¯ ããšã«ããäžç¢ºå®æ§ãäžããŠããããžã§ã¯ããã³ã³ãããŒã«ã§ããç¶æ
ã«ããŠæ¬²ãããã§ããã å
·äœçã«ã¯ æ¥ã
ã®éçºã®é²æãææ¡ããŠããããžã§ã¯ãã¡ã³ããŒãEMã«å
±æããããš äžç¢ºå®ãªé åãã©ãã©ãè§Šã£ãŠããæ³å®å€ãªããšãå°ãªãããŠããããš äžå®èŠçŽ ãåãé€ããããéšåçãªæ¬çªåãããŠããããŸãåãã§ãŒãºã®ãªãªãŒã¹ã®èšç»ã建ãŠãããš ãªãªãŒã¹ã«åããçŸå®çãªé²æãææ¡ããŠãEMãšäººå¡èšç»ã®çžè«ãããããš ãªã©ãè¡ããªãããããžã§ã¯ããé²ããŠãããŸããã ã©ããªç¹è²ã®ãããããžã§ã¯ãã ã£ãã ååãªãã·ã§ã³ã¯ãç¡æã»ææã®ååãªãã·ã§ã³ãååã«è€æ°åçŽä»ãããããšãã仿§ã§ãä»ãŸã§ãBASEãã§ã¯æ³šæã®äŸ¡æ Œã®æŒç®ã®æŠå¿µãå¢ãããšããäºäŸã¯ã»ãŒãªããæ³šæã®äŸ¡æ Œã¯ããããç®æã«åœ±é¿ããã®ã§ããµãŒããµã€ããšã³ãžãã¢ã®ç§ãããããšãã·ã¹ãã ã®å
šäœã«é¢ããããªãã®å·¥æ°ããããããã ãªïŒã©ããããããªïŒããšããã®ããããžã§ã¯ããå§ãŸã£ãåœåã«æã£ãŠããäºã§ããã å®éã«åœ±é¿ããã£ãã¢ããªã±ãŒã·ã§ã³ã¯ç€Ÿå
çšã®ç®¡çç»é¢ããããåŠçãªã©ãå«ããŠ9ã€ã»ã©ãããŸããã ãªãªãŒã¹ã«ã€ããŠã¯è€æ°ã®ãã§ãŒãºãããäºãåœåããããã£ãŠãã ãã¶ã€ã³ããŒãåã(ãããã·ã§ããäœæãµãŒãã¹ãBASEãã®ãã¶ã€ã³ããŒããäœæããŠããã ããŠãããã£ãããããŒåã) ã·ã§ããã³ã°ã¢ããªãBASEãåã ãããã·ã§ããäœæãµãŒãã¹ãBASEãåã ã®3ã€ã®ãã§ãŒãºãããäºãèŠããŠãããŸããã ããããã«ã¯ãªãã£ã«ã«ãã¹ãååšããã®ã§ãã¿ã¹ã¯ã®ããã«ããã¯ãçºçããªãããã«ãããžã§ã¯ããé²ããå¿
èŠããããŸããã3ã€ã®ãã§ãŒãºã®é²è¡ã«ã€ããŠã¯ ãããžã§ã¯ãå
ã§é±æ¬¡ã§å®äŸMTGãè¡ããPMãäžå¿ã«ãªã£ãŠé²æç¢ºèªãããŸãã«è¡ãé²ããŠãããŸããã èŠç©ããã»èšèšãã§ãŒãºã«ã€ã㊠以åãããã®æ©èœããªãªãŒã¹ããããšããæ³ãã¯ç€Ÿå
ã«ãããèŠä»¶ã¯ããçšåºŠåºãŸã£ãŠããŸããã ã®ã§èŠä»¶å®çŸ©ãã§ãŒãºã¯ããŸããªããèŠç©ããã»èšèšãå§ãŸããŸããã 仿ãã°ãç§ã¯ãããžã§ã¯ãéå§åœåãå
¥ç€ŸããŠ1幎ãçµã£ãŠããªãã£ãã®ã§ ãµãŒããŒãµã€ãã®ã·ã¹ãã ã®å
šäœåã¯æ£çŽããããªãæããããŸãããããšãããããã£ãŠã¿ãäºã«ããŸããã èŠç©ããã®å©ããäœæããã®ã§ãããèŠæš¡ã倧ãããæªããç®æãå€ãã®ã§èªå1人ã§é²ããã®ã¯å±éºã ãšå€æããŠãEMã«çžè«ããŠ1人ã®ã·ãã¢ãšã³ãžãã¢ã«èŠç©ããã»èšèšã®ãµããŒã圹ãšããŠã¢ãµã€ã³ããŠãããããšã«ãªããŸããã ãããŠãèŠç©ããã»èšèšãããçšåºŠé²ãã æã§ããŒã ã¬ãã¥ãŒã»CTOã¬ãã¥ãŒãžã®æµãã«ãªããŸããã èšèšã¬ãã¥ãŒã«ã€ããŠã¯ãåãããŒã ã®å®®æãèšèŒããèšäºããããŸãã®ã§ããã¡ããã芧ããã ããã°ãšæ³ããŸãã devblog.thebase.in äœè«ã§ããã·ãã¢ãšã³ãžãã¢ã¯äºå®ããŠããè²äŒã®ã¿ã€ãã³ã°ãšè¢«ã£ãŠããŸããå®è£
ã«ã¯äžåé¢ãããªãããšãšãªããŸããããã³ãïŒïœ éçºåæãã§ãŒãºã«ã€ã㊠åæã¯1人ã§é²ããŠããŸããããå°ãªãèŠç©ãã£ãŠã6ã¶æä»¥äžããããããšèŠããŠããã1人ã§ããã®ã¯é£ãããšEMãšå
±æèªèããã£ãã®ã§ãEMã«2人ç®ã®ãšã³ãžãã¢ãã¢ãµã€ã³ããŠãããããã«åããŠããããŸããã (BASEã§ã¯ã以åã¯ãããžã§ã¯ãã«ãµãŒããµã€ããšã³ãžãã¢ã1人ã§ã¢ãµã€ã³ãããäºããã£ãã®ã§ãããæè¿ã¯ãµãŒãã¹ã®æé·ããããã·ã¹ãã ãè€éåããŠãã£ãŠãã®ã§ã2人以äžã®ã¢ãµã€ã³ã«ãªãããšãå€ãã§ã) 2人ç®ã®ãšã³ãžãã¢ã®ã¢ãµã€ã³ã確ä¿ã§ããæã¯ãããçšåºŠãããžã§ã¯ããé²ãã§ããã®ã§ããªãªãŒã¹ã¿ãŒã²ããæã決ããå¿
èŠããããŸãããç¹ã«ã©ã®Qã«åããã®ãã©ããã¯ãBASEã®éçºçµç¹ãšããŠå€§ããªé¢å¿äºã§ããã èŠç©ããã¯çµãã£ãŠããã®ã§ãã¿ã¹ã¯äžèŠ§è¡šã¯ã§ããŠããŸãããæ£çŽã粟床ãæãæŒãããããã©ããäžå®ã ã£ãã®ã§ãæ°ããã¢ãµã€ã³ããããšã³ãžãã¢ãš2äººã§æéããããŠå
šé確èªããäºã«ããŸããã é·æãªãããžã§ã¯ãã ã£ãã®ã§ãããã§2人ã®ç®ç·ãåãããäºãåŸã
ã«é¿ããŠãã£ãŠãšãŠã倧åã ã£ããšæããŸããã éçºãã§ãŒãºã«æããäºãã»å®éã«ãã®ããã«é²ããããš ä»ã®ããŒã ãåããããããã«ãããŒã¿ã®çæã®æµãã«æ²¿ã£ãŠéçºãé²ããäºãå¹ççã ã£ãã äžé£ã®æµãã§éçºã§ããæ¹ãéçºã®é²æã宿ã§ãããããã³ããšã³ãã»ãã€ãã£ãã¢ããªã®éçºããããããªããŸãã å
šéšãªãã¡ã¯ã¿ããèš³ã«ã¯ãããªãã®ã§ãéšåçã«æ¹ä¿®ããŠå
ã«æ¹ä¿®ãšãã¹ãã ããããã€ããã å¬ããæ²é³Žã§ä»ã®ãããžã§ã¯ãããªãã¡ã¯ã¿ãšConflictããäºããã£ããéã«æŽã«çºçããªãããã«ç©æ¥µçã«æ¬çªåããã ãµãŒããµã€ããšã³ãžãã¢ããŒã ã§æ¥æã§çžè«äŒãMTGãããŠçžè«ããããç°å¢ãäœã£ãã ãããžã§ã¯ãéäžã§ã³ããæéãžå
¥ã£ãã®ã§ããé »åºŠã®é«ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã«ããã å¿
èŠã«å¿ããŠãªã¢ãŒãã§ã¯ãªãäŒç€Ÿã«éãŸã£ãã ãªãªãŒã¹ã¿ãŒã²ããã«éçºãåããäºãé£ãããšããã£ãã®ã§ãã©ã¹ã3ã¶æã¯EMãšé£æºããŠ3人ç®ã®ãµãŒããµã€ããšã³ãžãã¢ãã¢ãµã€ã³ããŠããã£ãã â» åæïŒBASEã§ã¯äžŠè¡ããŠè²ã
ãªãããžã§ã¯ããèµ°ã£ãŠããŠããããè² åµãæ®ã£ãŠããã³ãŒããååšããŸãã QAãã¹ãã»ãªãªãŒã¹ãã§ãŒãºã«æããäºãã»å®éã«ãã®ããã«é²ããããš å質ãä¿ãŠããã®ãããæ¢åã®äžå
·åãã§ãªãããã«ã¬ã³ã¬ã³ãããã€ããŠãã£ã å
šéšã§9ã€ã¢ããªã±ãŒã·ã§ã³ãã£ããã³ã¢ãšãªãã«ãŒããæ±ºæžã®åŠçãé€ããŠãã»ãŒå
åºãã§ãªãªãŒã¹åã«æ¬çªåããäºã«æåãã ãªãªãŒã¹ã«ãã£ãŠããŒã¿ãç Žå£çã«ãªããªãããã«ããŠããã€ã§ããªããŒãã§ãããããªèšç»ããã QAãã¹ã3ã€ã®ãã§ãŒãºããã£ãã®ã§ãããããã§å¿
èŠãªæå°éãäœæããŠQAãã¹ããé²ããŠãã£ã QAãã¹ãã§å¿
èŠãªããŒã¿äžåŒãPMãçšæããŠãããçºãéçºã§ãã¿ãã¿ããŠããããå¹çã«é²ããäºãã§ãã 3ã€ã®ãã§ãŒãºã«åãããŠããã®ã§ã段éçã«å質ãäžãã£ãŠãããäžå
·åããã£ãå Žåã§ãæ©æé®ç«ãããäºãã§ãã CTOãšã®æ¬çªåã«ã€ããŠã®äº€æžããã BASEã§ã¯æ§ã
ãªäºæ
ããããã¹ããŒãžã³ã°ç°å¢ã§è€æ°æ¥æ€èšŒããäºãèš±å¯ããŠãããŸãã ä»åã¯ãªãªãŒã¹ã®èŠæš¡ãšå€©ç§€ã«ãããŠç¹äŸãããã ããè€æ°æ¥æ€èšŒãããäºã«ãã£ãŠå®å
šãªãªãªãŒã¹ãå¯èœã«ãã ãªã¹ã¯ã忣ãããçºã«åãã§ãŒãºã®æ©èœã®æ¬çªãããã€ã®æ¥ãšãŠãŒã¶ãŒå
¬éæ¥ãåãã ãŸãšã ä»å10ã¶æãšé·ãã¹ãã³ã§ããããäžèšã§ãäŒããããããªäºãèããªããããŒã éçºãããŠãããŸããã BASEã«ãããé·æãããžã§ã¯ãã®ããŒã éçºã®é°å²æ°ã¯äŒãããŸããã§ããããïŒ æåŸã«é·æéãããžã§ã¯ããšãªãèŸãæããããŸããã ãã®æ©èœããªãªãŒã¹ããŠãå€ãã®ã·ã§ãããªãŒããŒãããã声ãããã ããç¡äºã«æ©èœãå±ããäºãã§ããŠæ¬åœã«è¯ãã£ããšæããŸããã
ã¯ãããŸããŠã BASEæ ªåŒäŒç€Ÿ SRE Groupã«æå±ããŠããå¯å¡( @tomy103rider )ã§ãã å
æ¥ãåŒç€ŸCTOã ããããã°ãåããªããã¢ã¯ã»ã¹ãæ¿å¢ããECãã©ãããã©ãŒã ã«ãããè² è·å¯Ÿç https://devblog.thebase.in/entry/bsucon ãšããèšäºãå
¬éããŸããã 瀟å
ã§ã¯ãã®ã¢ã¯ã»ã¹æ¿å¢ããã£ããã«ããµãŒãã¹ã®ç£èŠãã©ãããŠããããããµãŒãã¹/ã·ã¹ãã ã®ã¢ã©ãŒãã«å¯ŸããŠã®ã¢ã¯ã·ã§ã³ã¯ã©ãããã¹ããããšãã£ããããªç£èŠã«é¢ãã話é¡ãæ¹ããŠçãäžãã£ãŠããŸãã ãããªäžã§ãµãš1幎ãããåã«BASE BANK æ ªåŒäŒç€Ÿã®æ±å£ ( @hgsgtk )ã瀟å
ã§äž»å¬ãããå
¥é ç£èŠã茪èªäŒã«åå ããããšãæãåºãããã®èŒªèªäŒãã©ãããäŒã ã£ãããªã©ãæ¹ããŠèŒªèªäŒãæ¯ãè¿ã£ãŠã¿ãããšæããŸãã ãå
¥é ç£èŠã茪èªäŒã®ç®çã¯äœã ã£ãïŒ ãã®èŒªèªäŒãéå¬ããã«ããã£ãŠäž»å¬è
ããã£ãããšæ®ããŠãã瀟å
ããã¥ã¡ã³ãããããããã«ã¯ä»¥äžã®3ã€ã®ç®çãæžãããŠããŸããã - ãªãŒããŒãºã«å®å®çãªãµãŒãã¹ãæäŸããã - ã€ã³ãã©ç£èŠãçè§£ããçŽ å°ã圢æããŠé¢å¿ã匷ãã - ã¢ããªã±ãŒã·ã§ã³ç£èŠã®çŽ å°ã圢æããŠé¢å¿ã匷ãã ããªãŒããŒãºã®ã¿ãªããã«å®å®çãªãµãŒãã¹ãæäŸãããããšãã匷ãæããæã¡ãSRE Groupãäž»ã«å¯Ÿå¿ããã¡ãªç£èŠãšããåéã«ãããããããã¯ãšã³ããšã³ãžãã¢ãé¢å¿ãæã€æ©äŒã«ãããã£ããšããããšãæããããŠããŸããã ã©ããã圢åŒã®èŒªèªäŒã ã£ãïŒ é±ã«1åã1æéãåå ã¯èªç±ïŒæ¥ååªå
ïŒãåå è
ã¯éçºã¡ã³ããŒãSREã¡ã³ããŒããããŒãžã£ãŒããµãã£ãšåå ããããšããããããšããé°å²æ°ã®äŒã§ããã æ¥æ æ¯é±æšææ¥ 15:00ã16:00 é²ãæ¹ å
š12ç« (ä»é²å«ã)ãååã§2ç« ããããããããèªã ã¿ã€ã ã¹ã±ãžã¥ãŒã« 30åïŒåœæ¥ã®å¯Ÿè±¡ç« ãèªã¿ãæ°ã¥ãã»çåãå
±æããã¥ã¡ã³ãã«æžãçãã 25åïŒ æžãçããæ°ã¥ãã»çåãå
±æã»è°è« 5åïŒãŸãšãã»æ¬¡å察象ã®ç« ãæ±ºããŠè§£æ£ æžç± ãO'Reilly å
¥é ç£èŠ ââã¢ãã³ãªã¢ãã¿ãªã³ã°ã®ããã®ãã¶ã€ã³ãã¿ãŒã³ã( https://www.oreilly.co.jp/books/9784873118642/ ) www.oreilly.co.jp â»åœæã®å®éã®æ§å(ãããªããšããããããšæ®ã£ãŠãããåç) ããããèªãã§ããæéã¯äž»å¬è
ãå¿å°ãã鳿¥œãæµããŠãããŠããŸãããããããé°å²æ°ãç°å¢äœããå
宿ã«ç¹ãã倧äºãªãã€ã³ããªã®ã ãªãšæããã®ãèŠããŠããŸãã 茪èªäŒãã1幎以äžãçµéããŠã»ã»ã» ããŠããããŸã§ã¯èŒªèªäŒã®æ§åããäŒãããŸããããã茪èªäŒã«åå ããŠãã人ãã¡ããã®åŸäœãç£èŠã«å¯Ÿããæ°æã¡ãè¡åã«å€åããã£ããããšããç¹ãäžçªç¥ããããªãã Q. 1幎åã«å®æœããå
¥éç£èŠæ¬ã®èŒªèªäŒã«åå ããŠããã®åŸãç£èŠã«å¯ŸããŠæèãè¡åã«å€åã¯ãããŸãããïŒ ãšãã質åãåå ããŠãã人ãã¡ã«æããããããããã®åçããŸãšãããšä»¥äžã®ããã«ãªããŸããã è¡åã«å€åããã£ã é¢ä¿ãããããªã¢ã©ãŒãã«å¯ŸããŠäœãããã¢ã¯ã·ã§ã³ãããããã«å¿æããããã«ãªããŸããã ã¢ããªã±ãŒã·ã§ã³ç£èŠã®ãã¿ãŒã³ãšã㊠Health ãšã³ããã€ã³ããã¿ãŒã³ãç¥ã掻çšããŸããã https://devblog.thebase.in/entry/2019/03/06/110000 Mackerelã§ã®ããžãã¹ç£èŠ(ãšããæ°å€ã®å€åããã§ãã¯)ãå®éã«å
¥ããŠã¿ãŸããã æèã«å€åããã£ã Zabbixã§ç£èŠã·ã¹ãã ãæ§ç¯ããŠããçµéšãããã®ã§ãããåæ§ã®ãã®ãæ§ç¯ããŠããŸãããã«ãªãããæãããŠãããäŒæ¥ã«ãšã£ãŠæ¬åœã«ããããšãªã®ãã©ãããã匷ãèããããã«ãªããŸããã æ§é åãã°ã«ããéèŠæ§ã¯ãElasticsearch/Kibanaã§å¯èŠåããããšãããããŸã§ããããããã¯ãšã³ãã®ãšã³ãžãã¢ãèªåã§ãããšå¿
èŠæ§ã身ã«ãã¿ãŠãããªãšæè¿æããŸãã ããã»ã©å€ãã£ãŠãªãã§ãããã¢ããªã±ãŒã·ã§ã³ãšã©ãŒèŠçŽããèããŠããäžã§ãšã©ãŒè¿œè·¡ãç£èŠã«å
¥ãããªãšæã£ãŠããã®ã§åèã«ãªã£ããšããã¯ãããããããªãã§ãã å€åã¯ãªãã£ã ãã®åŸãç£èŠã«å¯ŸããŠç¹ã«åŒ·ãã¢ã¯ã·ã§ã³ããšããŠããªããšæããŸãã å®åã§ãã®æ¬ãæèããããšã¯ä»ãŸã§ãªãã£ããšæããŸãã 茪èªäŒãéäžé¢è±ããŠããŸãä»ãç©ãèªç¶æ
ã§ãïŒ ãã®åŸãäœãããã¢ã¯ã·ã§ã³ãŸã§èµ·ãããŠãã人ã3å²ãæèã«å€åããã£ã人ã4å²ãç¹ã«å€åã¯ãªãã£ããšæã£ãŠãã人ã3å²ããããšããçµæã§ããã ãŸãšã ãã®çµæãèŠããšã茪èªäŒã®åœåã®ç®çã§ãããé¢å¿ã匷ããããšããç¹ã§ã¯åæ°ä»¥äžã®åå è
ãäœãããã®å€åããã£ããš(ååãã«)æãããšææçŸ©ãªäŒã ã£ãã®ã§ã¯ãªãã§ããããã ãŸããç§å人ãšããŠã¯ãéå»ã«ä»ç€Ÿã§éçšããŠããæ¥ã
ã®ã€ã³ãã©éçšçµéšããç£èŠã«ã€ããŠè²ã
ç¥ã£ãã€ããã«ãªã£ãŠããŸããããæ¹ããŠåå¿ã«ããã£ãŠæžç±ãä»ã®ã¡ã³ããŒããåŠãã ããšãå€ãã£ãããç¹ã«ããŠãŒã¶èŠç¹ã§ã®ç£èŠãã®å€§åãã®æèã匷ããªã£ãã®ã¯åç©«ã§ããã ãšã¯ãããä»åŸããè¯ããµãŒãã¹ãæäŸããŠããããã«ã¯ãç£èŠãéçšã«ã€ããŠããŸã ãŸã æ¹åããå¿
èŠããããšããã®ãçŸå®ã®çµç¹èª²é¡ãšããŠãããŸããBASEã®ãšã³ãžãã¢çµç¹ã§ã¯ç£èŠãéçšã®é¢ã«ã€ããŠãæŽã«æ¹å/匷åããŠããèšç»ãããããã®ãããã®è©±é¡ã¯ä»åŸèšç»ãé²ãã§ãã£ãéã«èšäºãäžããããšæããŸãã®ã§ã楜ãã¿ã«ïŒ
ããã«ã¡ã¯ãBASE BANKæ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ°žéïŒ @glassmonekey ïŒã§ãã åŒç€Ÿã§ã¯AWS LambdaãæŽ»çšããæ©äŒãå¢ããŸããŠã æè¿ã¡ãžã£ãŒã¢ããããŒãã®ãã£ããAWS SAM CLIãã䜿ã£ãŠãªãªãŒã¹ãããŒã®æ¹åã«ãã£ã¬ã³ãžããŠã¿ãŸããã ããã§ãsamã³ãã³ãã§äœæãããµã³ãã«ãããžã§ã¯ããããŒã«ã«ã§å®è¡ããããã€ããæ¹æ³ã玹ä»ããŸããããã«å ããŠãçŸç¶BASE BANKããŒã ã§è¡ã£ãŠãã代衚çãªéçšèšå®ãã玹ä»ããŸãã ä»åèšäºäœæã«éããŠã ãµã³ãã«ããã°ã©ã ãçšæããŠããã®ã§ãããããã°æå
ã§ã確èªãã ããã ãªããä»åLambdaã«ã¯Goãæ¡çšããŸãããæ€èšŒã«äœ¿çšããç°å¢ã¯ä»¥äžã®éãã§ãã macOS: 10.15.x (Catalina) SAM CLI: version 1.2.0 AWS CLI: aws-cli/2.0.50 Python/3.7.4 Darwin/19.6.0 exe/x86_64 Go: go1.15.2 darwin/amd64 SAM CLIãšã¯ SAMãšã¯ Serverless Application Model ã®ç¥ç§°ã§ã AWS Lambda ã®ãããã€ç®¡çã«äœ¿ãããããŒã«ã§ã ããŒã«ã«äžã®ãããã° ã ãã«ã ã ããã〠ããµããŒãããŸãã å
¬åŒã®ã¢ããŠã³ã¹ ã«ãããš7æã« ããŒãžã§ã³1 ããªãªãŒã¹ãããŸããã ç»å㯠AWS SAM LocalïŒããŒã¿çïŒ â ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã«æ§ç¯ããŠãã¹ããã ããåŒçšããŸããã ãŸããã®æããããªã¹ã®ãã£ã©ã¯ã¿ãŒã¯ å
¬åŒã®èª¬æ ã«ãããš "SAM the Squirrel (ãªã¹ã® SAM)" ã«ã€ã㊠SAM the Squirrel ã¯ããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããªãœãŒã¹ãå®çŸ©ããã¢ãã«ã§ãAWS Serverless Application Model (AWS SAM) ããåä»ããããŸãããSAM ã¯ãAWS ãŠãŒã¶ãŒããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã广çãã€ç°¡åã«æ§ç¯ã§ãããããããªãŒ (æš) ã®äžã§å±
å¿å°ã®ããçæŽ»ãåŸã«ããŸããã ãšã®ããšã§ããªãã ãæçãæ¹§ããŠããŸããã ç°å¢æ§ç¯ samã³ãã³ããå®è¡ããããã«å¿
èŠãªèšå®ãããŠãããŸãã 1. AWS SAM CLIã®ã€ã³ã¹ããŒã« æåã« AWS SAM ãåããããã®CLIãã€ã³ã¹ããŒã«ããŸãã macOSã®å Žå㯠å
¬åŒ ã«ç޹ä»ãããŠããéãã Homebrew ã䜿ã£ãŠç°¡åã«ã€ã³ã¹ããŒã«ããããšãã§ããŸãã $ brew tap aws/tap $ brew install aws-sam-cli ãŸãã¯ã å
¬åŒã§æäŸãããŠããpipããã±ãŒãž ãå©çšããæ¹æ³ããããŸãã CIç°å¢ãªã©ã§brewãå
¥ããããªãå Žåã¯ãã¡ããããããã§ãã $ pip install aws-sam-cli sam --version ã§ããŒãžã§ã³ãè¿ã£ãŠãããã€ã³ã¹ããŒã«æåã§ãã $ sam --version SAM CLI, version 1.2.0 2. AWS CLIã®ã€ã³ã¹ããŒã« çŽæ¥SAMã®å®è¡ã«ã¯é¢ä¿ãããŸããããåäœç¢ºèªãªã©ã§å¿
èŠã«ãªã£ãŠããã®ã§ãã¡ãã å
¬åŒ ã®æ¹æ³ã«åŸã£ãŠå
¥ããŠãããŸãã $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" $ sudo installer -pkg AWSCLIV2.pkg -target / ãã¡ãã aws --version ã§çµæãè¿ã£ãŠãããã€ã³ã¹ããŒã«å®äºã§ãã $ aws --version aws-cli/2.0.50 Python/3.7.4 Darwin/19.6.0 exe/x86_64 3. samå®è¡ãŠãŒã¶ãŒã®äœæ AWSã³ã³ãœãŒã«ãªã©ããsamã³ãã³ããå®è¡ãããŠãŒã¶ãŒã远å ããŠãããŸãã å¿
èŠãªããªã·ãŒãªã©ã¯åŸã»ã©è§£èª¬ããã®ã§ããã®æ®µéã§ã¯ AdministratorAccess ãèšå®ããŠãããŸãã ãŸããcliãããè§Šããããã«èšå®ããŠãããŸãã aws configure 4. dockerãã€ã³ã¹ããŒã«ããŠãã ããŒã«ã«å®è¡ãè¡ãå Žåã®ã¿ãdocker daemonãåããŠãªããšãããªãã®ã§ã€ã³ã¹ããŒã«ãããŠãããŠãã ããã docker for mac 㯠ãã¡ã ããã€ã³ã¹ããŒã«ã§ããŸãã SAMã䜿ã£ãéçºå
¥é ãŸãæåã«å
¬åŒãæäŸããŠãããHello, Worldãªapiãsamã䜿ã£ãŠãããã€ããããšãããããŠã¿ãŸãã 1. ãããžã§ã¯ããäœæãã sam init ãè¡ããšsamçšã®ãããžã§ã¯ãã®åæåãè¡ãããšãã§ããŸããä»åã¯ãµã³ãã«ããã°ã©ã ãæµçšããã®ã§å¯Ÿè©±åã®èšå®ãè¡ããŸãããæ¢ã«ãã£ã¬ã¯ããªæ§æãªã©ã宿ããŠããå Žåã¯äžèŠãªãããŒã§ãã sam init ä»åã¯å
¥éçšã®APIãã±ã±ã£ãšäœãã®ã§1ãéžã³ãŸãã Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Goã䜿ãã®ã§4ãéžã³ãŸãã PHPãéžæè¢ã«æ¥ãªãããªãŒ Which runtime would you like to use? 1 - nodejs12.x 2 - python3.8 3 - ruby2.7 4 - go1.x 5 - java11 6 - dotnetcore3.1 7 - nodejs10.x 8 - python3.7 9 - python3.6 10 - python2.7 11 - ruby2.5 12 - java8.al2 13 - java8 ãããžã§ã¯ãåã¯ããã©ã«ãã® sam-app ã®ãŸãŸã§è¡ããŸãã Project name [sam-app]: ä»åã¯åçŽãªapiãäœæããã®ã§1ãéžã³ãŸãã AWS quick start application templates: 1 - Hello World Example 2 - Step Functions Sample App (Stock Trader) ãããš ãããžã§ã¯ããã³ãã¬ãŒããããã©ã«ãã® https://github.com/aws/aws-sam-cli-app-templates ã䜿çšãã圢ã§ãããžã§ã¯ããåæåãããŠããŸãã âââ Makefile <-- Make to automate build âââ README.md <-- This instructions file âââ hello-world <-- Source code for a lambda function â âââ main.go <-- Lambda function code â âââ main_test.go <-- Unit tests âââ template.yaml AWS SAM ãšããŠLambdaã®æ§æç®¡çããŠããã®ã¯ template.yml ã«ãªããŸãã ããã¯Cloud Formationã®ã©ãããŒãšãªã£ãŠãããåºæ¬çãªææ³ã¯ Cloud Formation ã«æºæ ããŸãã ãŸããå
容ã«é¢ããŠã®è©³çŽ°ã¯ SAMã®ããã¥ã¡ã³ã ã Cloud Formationã®ãã³ãã¬ãŒããªãã¡ã¬ã³ã¹ ãäžèªããããšãããããããŸãã 2. ããŒã«ã«ã§å®è¡ããŠã¿ãã 2.1 ãã«ãå®è¡ å®è¡ã®åã«ãã«ããããŠã¿ãŸãã $ sam build å®è¡åŸã«äžèšã®ããã«bundleå«ããŠãããã€çšã®ãã¡ã€ã«çŸ€ãäœæãããã âââ .aws-sam â  âââ build â  âââ HelloWorldFunction â  â  âââ hello-world(ãã€ããªïŒ â  âââ template.yaml çæå
容ã®èšå®ã«é¢ããŠã¯template.ymlã«èšè¿°ãããŠãã CodeUri: hello-world/ Handler: hello-world ãšå¯Ÿå¿ããŠããã®ã§ãçæãããhandleråããœãŒã¹ãã£ã¬ã¯ããªã倿Žãããå Žåã¯ããã倿ŽããŸãã 2.2 ããŒã«ã«å®è¡ 次ã«ããŒã«ã«ã§å®è¡ãè¡ã sam local invoke ãå®è¡ããŸãã ãããšAWSãªãœãŒã¹ãä»ããã«ããŒã«ã«ã§å®çµããŠçµæãè¿ã£ãŠããã¯ãã§ãã $ sam local invoke {"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, $å®è¡ç°å¢IPã¢ãã¬ã¹\n"} ãŸã -eãªãã·ã§ã³ãã€ããããšã§ã€ãã³ãæ
å ±ã®jsonãæž¡ãããšãå¯èœã§ãã ç¹ã«APIã³ãŒã«ä»¥å€ïŒSQSçµç±ãªã©)ã§åŒã³åºãããLambdaã®å Žåã ãšãããã°çšã®ã€ãã³ããéœåºŠäœæããã®ãæéã ã£ããããã®ã§ãã€ãã³ãæ
å ±ãæ¥µåGit管çããŠããããšãããããããŸãã 坿¬¡ç广ãšããŠãããŒã å
ã«ã©ã®ãããªã€ãã³ãã®ãããšããçºçãããã®å
±æã«ãã€ãªãããŸãã $ sam local invoke -e path/to/event.json` ãªããé圢㯠sam local generate-event $ãªãœãŒã¹å $APIå ã§äœæããããšãã§ããŸãã äŸãã°ã SQSã®receiveMessage ã®ã€ãã³ãã®Jsonã¯äžèšã®ãããªåœ¢åŒãšãªããŸãã $ sam local generate-event sqs receive-message { "Records": [ { "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78", "receiptHandle": "MessageReceiptHandle", "body": "Hello from SQS!", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1523232000000", "SenderId": "123456789012", "ApproximateFirstReceiveTimestamp": "1523232000001" }, "messageAttributes": {}, "md5OfBody": "7b270e59b47ff90a553787216d55d91d", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:MyQueue", "awsRegion": "us-east-1" } ] } 3. ãããã€ããŠã¿ãã 3.1 ãããã€ãã¡ã€ã«ã®äœæ ååãããã€ã®å Žå㯠--guided ãªãã·ã§ã³ã䜿çšããŠå¯Ÿè©±åœ¢åŒã§ãããã€èšå®ãã¡ã€ã« samconfig.toml ãäœããŸãã $ sam deploy --guided Stack Name [sam-app]: AWS Region [us-east-1]: ap-northeast-1 #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [y/N]: n #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: Y HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y Save arguments to samconfig.toml [Y/n]: y åé
ç®ã«é¢ããŠã§ãã Stack Name ⊠å
éšçã«äœ¿çšããcloud formationã®stackåãsamãå®è¡ãããŠãŒã¶ãŒã¯ãã®stackåã«é¢ããŠã®æš©éãäžè¶³ããŠãããšãããã€ã«å€±æããã®ã§ãå¿
èŠãªã®ã§æ³šæãå¿
èŠã§ããæäœé以äžã®æš©éãå¿
èŠãªããšã¯ç¢ºèªããŠããŸãã "cloudformation:DescribeStackEvents", "cloudformation:CreateChangeSet", "cloudformation:DescribeChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:GetTemplateSummary", "cloudformation:DescribeStacks", Confirm changes before deploy: deployåã«ç¢ºèªãå¿
èŠãšããããCIäžã§åããæ³å®ãªã n ã«ããŠãããšè¯ãã§ãã Allow SAM CLI IAM role creation: ãããã€ããlambdaã«ä»äžããããŒã«ãèªåäœæããããèªåäœæããå Žåã¯äœèšãªæš©éãã€ãããšãããã®ã§èŠæ³šæã§ãã Save arguments to samconfig.toml: y ãªããã®å¯Ÿè©±åæäœã®èšå®å
容ãä¿åããŸãã ãããšä»¥äžã®ãããªãã¡ã€ã«ãçæãããŸããæ¬¡å以éã® sam deploy å®è¡æã¯ãã®èšå®ãã¡ã€ã«ãèŠãŠãããã®ã§ãå¿
èŠã«å¿ããŠèšå®ãæžãæãããšè¯ãã§ãããã version = 0.1 [default] [default.deploy] [default.deploy.parameters] stack_name = "sam-app" s3_bucket = "aws-sam-cli-managed-default-samclisourcebucket-6qa86tkchc0g" s3_prefix = "sam-app" region = "ap-northeast-1" capabilities = "CAPABILITY_IAM" ãªãã capabilities ã§æå®ã§ããå€ã¯ä»¥äžã®ãããããèšå®ããããšãã§ããŸãã CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_RESOURCE_POLICY CAPABILITY_AUTO_EXPAND 詳现㯠AWS Serverless Application Repositoryéçºè
ã¬ã€ã ã«èšèŒãããŠããŸããã template.yml 管çäžã®ãªãœãŒã¹ã®è€éãã§èšå®ã®åãæ¿ããå¿
èŠãªããã§ããIamããŒã«ãtemplate.ymlã§ç®¡çããå Žåãªã©ã®ã±ãŒã¹ã§ã¯èŠæ³šæã§ãã ä»åã¯ã·ã³ãã«ã«lambdaã®ã¿ã®ãªãœãŒã¹ç®¡çåãªã®ã§ããã©ã«ãã® CAPABILITY_IAM ã§è¯ãããã§ãã 3.2ãããã€ã®å®è¡ samconfig.toml ãååšããŠããã° sam deploy ã§ãããã€ãããã¯ãã§ãã ãããã€çµæã®ã¹ã¯ã·ã§ ç¡äºã«ãããã€ãããŸãã  ð lambdaã®ã³ã³ãœãŒã«ãèŠã«è¡ããšAPI Gatewayã®é
ç®ãããšã³ããã€ã³ãã確èªã§ããã¯ãã§ãã ã³ã³ãœãŒã«ç»é¢ãç¢ºèª ç¢ºèªã§ãããšã³ããã€ã³ãã仮㫠https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ ãšãããšçµæãè¿ã£ãŠããã°æåã§ãã $ curl https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ {"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, $å®è¡ç°å¢IPã¢ãã¬ã¹\n"} ãšã³ããã€ã³ãã«curlãæããŠã¿ããšããŒã«ã«å®è¡ãšåããããªã¬ã¹ãã³ã¹ãè¿ã£ãŠããã¯ãã§ãã ããããããŒã«ã«å®è¡æãšã¯å
éšçã«ã¯ãããã¯ãŒã¯æ§æãç°ãªã£ãŠããã®ã§è¿ã£ãŠããIPã¯éããŸãã ãã®ä»èšå®é
ç®ã«ã€ã㊠次ã«çŸç¶BASE BANKããŒã ã§è¡ã£ãŠããéçšèšå®ã®äžéšãã玹ä»ããŸãã ç°å¢ããšã®èšå®ã®åãæ¿ã ãªãœãŒã¹ã®arnã®åãæ¿ããªã©ãç°å¢ããšã«åãæ¿ãããèšå®ãå€éšããæ³šå
¥ã§ããããã«ããŸãã ä»åã¯ã·ã³ãã«ã« APP_NAME ãš ENV ãç°å¢å€æ°çµç±ã§åãåã衚瀺ããããã«æžãæããŠã¿ãŸãã name := os.Getenv("APP_NAME") env := os.Getenv("ENV") return events.APIGatewayProxyResponse{ Body: fmt.Sprintf("%s@%s", name, env), StatusCode: 200, }, nil ãã®ç°å¢å€æ°ãåãåãããã«ã以äžã®ããã«ãããã¬ãã«ã« Parameters ã远å ããFunctionãªãœãŒã¹é
äžã« Environment.Variables ã远å ããŸãã ããã®æå³ãšããŠã¯templateããã©ã¡ãŒã¿ãšããŠåãåã£ãå€ã¯ç°å¢å€æ°ãšããŠFunctionãªãœãŒã¹ã«åãæž¡ããšãã圢ã«ãªããŸãã !Ref 㯠Cloud Forrmationã®é¢æ° ã§ãã»ã¯ã·ã§ã³éã®åç
§ã衚ããŸãã Parameters: ENV: Type: String AppName: Type: String Resources: HelloWorldFunction: ~~~ çç¥ ~~~~ Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object Variables: ENV: !Ref ENV APP_NAME: !Ref AppName ãã®ããã«ããŠãããšå®è¡æã« Key=Value ã®åœ¢åŒã§ãã©ã¡ãŒã¿ãæž¡ãããšãã§ããŸãã $ sam local invoke \ --parameter-overrides 'ENV=local AppName=Hello' $ sam deploy \ --parameter-overrides 'ENV=dev AppName=Hello' å€ãæž¡ãæ¹æ³ã¯ä»ã«ããã£ããã¯ããŸãããããŒã«ã«å®è¡ãšdeployæã®å¯Ÿç
§ãåããŠããã®ãšããããããããªãã€ã³ãã§ãã è¥å¹²ããã£ããã€ã³ããšããŠãã©ã¡ãŒã¿ããŒã«ã¯ _ ãªã©ã®èšå·ãå«ããã©ã¡ãŒã¿ã¯èªã¿èŸŒãã§ãããªãããã§ APP_NAME ã§ã¯ãªã AppName ãšããŠããŸãã ç°å¢ããšã®ãããã€èšå® ç¹ã«CIäžã®ã§å®è¡ãå å³ããå Žåãç°å¢å€æ°ã®æ³šå
¥çšã® parameter-overrides ã®ä»ã«ãèšå®ããŠãããããã©ã¡ãŒã¿ããããŸãã $ sam deploy \ --s3-bucket dev-sam-stacks \ --parameter-overrides 'ENV=dev AppName=Hello' \ --force-upload \ --no-fail-on-empty-changeset s3-bucket : cloud formationã®ã¢ããããŒãå
ã®ãã±ãããåºæ¬çã«ç°å¢ããšã§ãåãæ¿ããããšã«ãªãæãã®ã§ samconfig.toml ããèšè¿°ãæ¶ãããã©ã¡ãŒã¿ã§åãåããããã«ããŠãããŸãã force-upload: ãœãŒã¹ã³ãŒãã®å€æŽã䌎ããªãLambdaã®èšå®å€ã®ã¿ã®å€æŽã®éã«ãæ£ãããããã€ãããªãã±ãŒã¹ããã£ãã®ã§ãã©ã°ã远å ããŠãããŸãã no-fail-on-empty-changeset: å
容ã®å€æŽããªããŠããšã©ãŒã«ãªããªããã©ã°ã§ããCIã§åããå Žåãèãããšã倿Žããªããšããæ£åžžç³»ãšèããŠè¯ãã¯ããªã®ã§ãã®ãã©ã°ãç«ãŠãŠãããŸãã Makefileã®çšæ 以äžãèžãŸããŠç°å¢ããšã®èšå®ã«åãæ¿ãã¯ãããããMakefileå
ã«èšè¿°ããŠãããŸãã Makefileã®çšæãçšæããŠãããšãããŒã å
ã«ã³ãã³ãã®å
±æãã§ããã®ãšãCI äžã§äœããã£ããšãã«æå
ã§ã®æ€èšŒããããããªãã®ã§äŸ¿å©ã§ãã .PHONY: build test local-run local-up dev-deploy build: sam build # ãã¹ãã®å®è¡ test: @cd ./hello-world/ && \ go test -v ./... # ããŒã«ã«ã§lambdaãå®è¡ãã local-run: build sam local invoke \ --parameter-overrides 'ENV=local AppName=Hello' # apiãšããŠèµ·åããå Žå local-up: build sam local start-api \ --parameter-overrides 'ENV=local AppName=Hello' # ãããã€ãã dev-deploy: build sam deploy \ --s3-bucket sam-app-stack \ --parameter-overrides 'ENV=dev AppName=Hello' \ --force-upload \ --no-fail-on-empty-changeset ãŸãšã AWS SAM ã䜿ã£ãå
¥éãšéçšèšå®ã®äžéšã玹ä»ããŸããã ãããããã AWS SAM ã䜿çšãããæ¹ã
ã®å©ãã«ãªããã°å¹žãã§ãã åŸæ¥ã®éœåºŠdeployããŠç¢ºãããæ¹æ³ã ãšã©ãããŠã1åã®æ€èšŒã«æéãããã£ãŠããŸããLambdaã«æãåºãã¥ããç¶æ³äžã ã£ãã®ã§ãä»åŸã®éç£äœå¶ã«ç¡äºã«ç¹ãããããã§ãã ããŒãžã§ã³1 ã«ãªã£ãããšã«ãã倧忱ãããããªã£ãå°è±¡ããããŸããã ãŸããä»åã¯æéã®é¢ä¿ã§å°å
¥ãŸã§ã¯ã§ããŠãªãã®ã§ãã local stack ã䜿ãã°AWSãªãœãŒã¹äŸåã®ãã¹ããã§ããããªã®ã§ãæ©äŒãããã°ãã¡ããææŠããŠã¿ãããšæããŸãã
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã XPç¥ã2020 XPç¥ã2020 ã¯ãXPJUGïŒæ¥æ¬ XP ãŠãŒã¶ãŒã°ã«ãŒãïŒäž»å¬ã®ãã³ãã§ãã2002 幎ããæ¯å¹Žè¡ãããŠããŠãä»å¹Ž 2020 幎ã¯ã9 æ 19 æ¥ã«ãªã³ã©ã€ã³éå¬ãããŸããã xpjug.com ä»åèªåã¯ååå ã§ãããLT åå ã§ç³ã蟌ãã§ããã®ã§ãèŽè¬è
&& LT çºè¡šã®äž¡æ¹ã®èŠç¹ã§ãåå ã¬ããŒããæžãé£ããŠãããŸãã TL;DR XP ç¥ã 2020 ã«åå ããŸãã èŽè¬ã¬ããŒãïŒãè¿ä»£å²ãšã¢ãžã£ã€ã«ããé¢çœãã£ã ãæãè¶
ããããã°ã©ãã³ã°ã®é "XP ã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ãã"ããšããçºè¡šãããŸãã èŽè¬ã¬ããŒãïŒãè¿ä»£å²ãšã¢ãžã£ã€ã«ããé¢çœãã£ã èŽè¬ãããŠããã ããå
容ãå
šãŠé¢çœãã£ãã®ã§ãããå人çã«å¥œãã ã£ãç§ã®å人çãã¹ãã»ãã·ã§ã³ããFumihiko Kinoshita ããã®ãè¿ä»£å²ãšã¢ãžã£ã€ã«ããšããããŒã¯ã§ããã çµç€ã®ãŸãšãã¹ã©ã€ããåŒçšããŠãããŸããã2001 幎ã®ã¢ãžã£ã€ã«ããã¥ãã§ã¹ã以åãã«ããã ã倧ããªå¹Žè¡šãåºãŠãã話ãèããããšãããŸããã§ããã ãè¿ä»£å²ãšã¢ãžã£ã€ã«ãã®ã¹ã©ã€ãããåŒçš å人çãªèå³ã§ãæè¿ãœãããŠã§ã¢èªäœã§ã¯ãªããŠãå²åŠã»ç€ŸäŒå¿çåŠç³»ã£ãŠããããããªããšæµ
ãèŠåã£ãŠããŠãèŠåã£ãŠã¿ããšããœãããŠã§ã¢èšèšãªã©ã®åœ±ã«ã«ã³ãå²åŠããã«ã«ãå²åŠãåºãŠããŸãã ããããæŽå²å¹Žè¡šãšãªã£ãŠãã¢ãžã£ã€ã«ããã¥ãã§ã¹ãã«ãããäžæã®ã¹ã©ã€ãã«åããããå
æ¯ã«æåããŸããïŒãããŠãã®æåã®æ«ãããšããšçšæããŠãã LT ã¹ã©ã€ãããŽãç®±ã«å
¥ããŠäœãçŽãå§ããŸããïŒã LTçºè¡š: æãè¶
ããããã°ã©ãã³ã°ã®é "XPã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ãã" åœæ¥ã® Lightning Talk çºè¡šè
ã¯ã 10 人㧠9 çªç®ã§ããã å®ã¯ãåœæ¥ãã®ããŒãã«ãããããšæ±ºããäºåã«äœã£ãŠããè³æã¯æšãŠäœãçŽããŸããããã£ããã¯ãèŽè¬ã¬ããŒãã«ãããã»ãã·ã§ã³ãèããŠãæŒäŒã¿ã«ãæ¹ããŠãKent Beck, Cynthia Andres. ãšã¯ã¹ããªãŒã ããã°ã©ãã³ã°ãïŒä»¥éãXP çœæ¬ãšåŒç§°ããŸãïŒãèªã¿è¿ããããšã§ããã www.amazon.co.jp XP ãŸã€ãã®ç±ã垯ã³ãç¶æ
ã§èªã¿è¿ããšãããããXP ã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ããããšãããã¬ãŒãºã¯ãããªæ³ãã蟌ããããŠããã®ã...!!!ããšãåæã«æåãã誰ãã«è©±ãããæ°æã¡ã溢ããçµæããã¡ãã®è³æã§ããã "XP ã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ãã" ãšããèšè㯠2 ã€ã®ææãåçž®ãããŠãããšæããŸããïŒããã ãã§ã¯ãªããšãæã£ãŠããŸãïŒã äœãããã§ã³ãžããã®ã = ãã€ã©ãŒäž»çŸ©ççµç¹æ§é ããã®è±åŽ ã©ããç®æãã®ã = çãçããšåãããš ã²ãšã€ã¯ããœãããŠã§ã¢éçºã«ããããã€ã©ãŒäž»çŸ©çç€ŸäŒæ§é ããã®è±åŽãšããææãXP çœæ¬ã«ã¯ãã第 18 ç« ãã€ã©ãŒäž»çŸ©ãšãœãããŠã§ã¢ããšããç« ããããŸããããã§ã¯ããã€ã©ãŒäž»çŸ©ãããããç€ŸäŒæ§é ã«ã€ããŠæ¬¡ã®ããã«æèšããŠããŸãã ãœãããŠã§ã¢éçºã§åé¡ãšãªãã®ã¯ããã€ã©ãŒäž»çŸ©ã«äŒŽãä»äºã®ç€ŸäŒæ§é ã ããã€ã©ãŒãæå±ãããæéã»åäœç ç©¶ãã®ååŒãéå
·ãããªããªã£ãŠããããæã
ã¯ç¡æèã«ãã®ç€ŸäŒæ§é ãç¶æ¿ããŠããã®ã§ããã ãã®ç€ŸäŒæ§é ã¯ããœãããŠã§ã¢éçºã«ãŸã£ããé©ããŠããªãã ãããŠãã©ããç®æããã®ãããšããç¹ã«ã€ããŠã§ãããXP çœæ¬ã«ã¯ãã第 23 ç« æãè¶
ããããã°ã©ãã³ã°ã®éããšèšãç« ããããŸãããæãè¶
ããããšãããšããœãããŠã§ã¢ãšã³ãžãã¢ã®é ã«ãããã®ã¯ãã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒæ°ã®èæžãæãè¶
ãã建èšã®éãã§ãïŒäž»èªã倧ããèªèŠã¯ã¡ãããšãããŸãïŒã www.amazon.co.jp ãããèªãã Kent Beck æ°ã Ward Cunniungham æ°ãã¡ã¯ãã¯ãªã¹ããã¡ãŒã»ã¢ã¬ã°ã¶ã³ããŒæ°ã®ãã¿ã³ã»ã©ã³ã²ãŒãžãªã©ã®èãæ¹ããœãããŠã§ã¢ãé©çšããããšã詊ã¿å§ããçŸåšã®ãœãããŠã§ã¢éçºã®ã³ãã¥ããã£ã«éŠŽæã¿æ·±ããã¶ã€ã³ã»ãã¿ãŒã³ã XP ãªã©ã«ã€ãªãã£ãŠãããŸãã ãã®éçšã§äœãç®æããã®ãã¯ããã®ã第 23 ç« æãè¶
ããããã°ã©ãã³ã°ã®éããšã第 25 ç« çµè«ããèªãã§ãããšãXP ã®ç®çã»ç®æããããã®ãå
æã«æžãããŠããŸãã XPçœæ¬ 第25ç« çµè« ããæç² "XP ã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ãã" ãšããäœãããšããã©ããã®é£ãããã¬ãŒãºããXP ããœãããŠã§ã¢å²äžã®ãç¹ãã§ã¯ãªããç·ãã§æãããšããã®èŒªéãæµ®ã圫ãã«ãªã£ãŠãããããªæ°ãããŸãã ã¡ãªã¿ã«ããã§ã«çºè¡šããããšããŠæšãŠãå
容ã¯ã以åã®éçºããŒã ããã°ã«å
¬éããŠãããã®ã§ããããæœè±¡çãªè©±ããå
·äœçãªãä»ã©ããããããã®ããç¥ãããã®ãããæŽŸã®ããªãã«ããããã§ãã devblog.thebase.in ãŸããæå㯠XP çœæ¬ã®æžè©ããã°ãšããŠæžããŠããŸãããçºè¡šè³æã®å
容 + è±ç·ïŒå€ãïŒã«ãªã£ãŠããŸãã note.com çºè¡šå
容ãããã ããã«è©±ãããïŒããšèšãè¡åã«é§ããããã®ã ã£ãã®ã§ãã©ãã ããã®å人çãªæåãäŒããã ãããããšæã£ãã®ã§ãããã³ãã¥ããã£ãæããæè¬æè¬...ã ãã¡ã¢ãXPç¥ã2020 @hgsgtk ããã®LTãæãè¶
ããããã°ã©ãã³ã°ã®é âXPã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ããâ ãèªã¿çŽãã ãšã£ãŠãè¯ãã£ãã§ãïŒ https://t.co/vjyuaVFPRs #xpjug #ChistopherAlexander #Taylor pic.twitter.com/uND3V0A4Ti — Akapon (@Akapon2010) September 19, 2020 ãã¢ãã¶ã€ã³ãå§ããéçšã§ãXPã¯ãœãŒã·ã£ã«ãã§ã³ãžã§ããããšããèšèãç¥ã£ãŠããŒãã£ãšããåãã£ãŠããªãã£ãããã©ãæ¥ã«ãã£ããããæããã https://t.co/XBHjZHegf6 — Takahiro Hayashi / ãŽãŒã (@taka_piya) September 19, 2020 ãã®çºè¡šãšã¢ããåºå³¶ã®æ²³å·æ¯èгã¯(åçã¹ã©ã ãé€ãã°)ããŸãã«åžæ°ãšã®å¯Ÿè©±ã«ãã£ãŠåœ¢äœãããŠãã£ãããšãæãåºããèšç»ããã»ã¹ã®æ°äž»åã«ãã£ãŠçã¿åºãããèçãåºããè·å²žã¯æ£æ©ããŠãŠãšãŠãæ°æã¡è¯ãå Žæã«ãªã£ãããœãããŠã§ã¢éçºãããããããããªãšæãã https://t.co/5IUwmvpNFq pic.twitter.com/P5XmzRdjap — hodagi (@hodahgi) September 19, 2020 建ç¯ã®ä»äºããã®ã¢ãããžãŒããœãããŠã§ã¢éçºã«æŽ»ããŠããã®é¢çœãð€ https://t.co/5oTZP3oRz4 — Morito Ikeda (@_moricho_) September 19, 2020 XPãŸã€ã 2020 ã¹ã¿ããã®æ¹ã
ãžè¬èŸ XP ãŸã€ã 2020 éå¬ããããšãããããŸãããæšä»ã®ã³ããçŠã§ãDiscord ãš Zoom ãé§äœ¿ãããªã³ã©ã€ã³ãšãªããŸããããDiscord ã®çãäžããããã£ãŠãXP ç¥ãã®ç±ã«ãã£ãã 1 æ¥å·»ã蟌ãŸããŠæ¥œããæéã«ãªããŸããã ãã®å ŽãåããŠåŸ¡ç€Œç³ãäžããŸãã ãããã« ããããã°ãæè¿ @seike460 ãããé
ä¿¡ãããŠãã podcast #46fm ã«ãŠãé¢é£è©±ïŒãã¶ã€ã³ã»ãã¿ãŒã³èµ·ç¹ã§ããïŒãããŠããŸããã #46fm Podcastãå
¬éããŸããïŒ 3åç®ã¯ @hgsgtk ããããæãããŸããïŒ 46fm ep.3 ãISUCON10äºéžããã¿ã³ã»ã©ã³ã²ãŒãžãGo ã³ãŒãã£ã³ã°ãªãŒãã£ã³ã°äŒã瀟å
ã®å°ããªã«ã€ãŒã³ @hgsgtk ã https://t.co/XOUNKssLfq — ããããã㌠(@seike460) September 19, 2020 ãã¡ããããèå³ããããŸãããïŒåããŠã©ãžãªåœ¢åŒã§çºé³ããŠããã®ã§æ¥æ¬èªãã«ã¿ã³ãã§ãããäºæ¿ã...ïŒã
åæžã ããã«ã¡ã¯ãBASEã®ããã³ããšã³ãããŒã ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒããã£ãŠããæŸå( @simezi9 )ã§ã BASEã§ã¯ããã³ããšã³ããšã³ãžãã¢ã®ç©æ¥µæ¡çšãè¡ã£ãŠããŸãã ãã®éçšã§ã颿¥ãåãã«æ¥ãããæ¹ã«ãããBASEã¯VueãšTSãæ¡çšããŠãããšã®ããšã§ãããçžæ§ãããŸãã¡ãããªãã§ããïŒãªãã§VueïŒTSã«ããŠããã§ããïŒã ãšããæãã®è³ªåãããã ãããšããããŸãã ãã®èšäºã¯ããããªBASEã®ããã³ããšã³ãã«ããããæè¡ã»ã»ã»ãšãããããVue.jsã«å¯Ÿããã¹ã¿ã³ã¹ã«ã€ããŠååœããªãçããŠã¿ããããšããèšäºã«ãªããŸã ãªãVueãæ¡çšããã®ãããã®åŸ éå»ã«ãã æ¬¡äžä»£ã®ç®¡çç»é¢ãäœãããã³ããšã³ãã®åãçµã¿ ããšãããšã³ããªã§Vueãæ¡çšããçµç·¯ã«ã¯è»œãã玹ä»ãããŠããã ããŸããã ããã¯ç«¯çã«èšãã°ãHTML/CSSãæžããŠãããã¶ã€ããŒé£ã«ãèŠãç®ããšã£ã€ãããããSFCãã²ããŠã¯Vueã®åªããã€ã³ã¿ãŒãã§ã€ã¹ã«ãããã®ã§ããã åæã«éçæ€æ»ã«ããå®å®ããéçºäœéšãåŸãããTypeScriptãå°å
¥ãããã®åããã«ã«æŽ»ããããã«Vuexã®æ¡çšã¯ããã èªåã§storeãçšæããããšããéžæè¢ãåããŸããã ãã®è·¯ç·ã¯ä»ã«è³ããŸã§æå¹ã«æ©èœããŠããŠãäžèšã®èšäºã§åãäžãããæ¬¡äžä»£ç®¡çç»é¢ããžã®ãªãã¬ãŒã¹ã¯äž»èŠãªæ©èœã§ã¯ããããå®äºãã æ®æ®µã®éçºæ¥åã§ãVueãããã¯TSã®ã³ãŒããæžãæéã倧åãå ããããã«ãªã£ãŠããŸãã éžæã®è©äŸ¡ åœæVue.jsãæ¡çšããããšã¯ä»ã§ãæ£è§£ã§ãã£ããšæã£ãŠããŸããBASEã§ã¯äºå¹Žå(2018幎)æç¹ã§ã¯æç¢ºãªããã³ããšã³ããå°ä»»ãšããçµç¹ã¯ãªãã ããã³ããšã³ããšã³ãžãã¢ãšããè©æžããæã£ãŠãã®é åãå°éçã«æ
åœããã¡ã³ããŒãã»ãŒäžåšã§ããã æè¡ããªãã¬ãŒã¹ããéã®å¿ççãªæµææãæå°éã«ããŠéçºãåã«é²ããããšããç®çã¯æºãããŸããããæ©èœçãªäžæºç¹ãçŸæç¹ã§ã¯ç¹ã«ãããŸããã ãããŠããªãã¬ãŒã¹ãé²ãäžã§ç¬ç«ããããã³ããšã³ãããŒã ãã§ãã 2018幎床æ«ã«ã¯3åããããªãã£ãã¡ã³ããŒãä»ã9人ãå
¥ç€Ÿäºå®è
ãå«ããã°10人ãšããããŒã ã«è²ã£ãŠããŸããã å®ã¯ãä»ã®ã¡ã³ããŒã§ããäžåºŠãªãã¬ãŒã¹ãç«ã¡äžãããšãããããããããVue.jsã¯éžã°ãªããããããŸããã ããã¯äœæ
ããšãããŸããšããVueãç©æ¥µçã«éžã¶çç±ãçŸæç¹ã§ã¯ãªããªã£ãŠããŸã£ãããããšããäžç¹ã«ãããã®ã§ãã æåã«Vue.jsãéžå®ããéã«ã¯ãã¶ã€ããŒãåãçµã¿ãããããšã倧ããªéžå®çç±ã«ãªããŸãããã BASEã®ããã³ããšã³ãããŒã ã倧ããæé·ãããã£ã¡ããšããèšèš(DDDãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã®ãšãã»ã³ã¹ã»æŠå¿µã®å°å
¥ã»ã»ã»etc)ãã³ãŒãããŒã¹ãç©ã¿äžãã£ãŠããã«ã€ããŠãããã³ããšã³ãã®ãœãŒã¹ã³ãŒãã¯ãã¶ã€ããŒã®æãé¢ãããã³ããšã³ããšã³ãžãã¢ã®æã¡ç©ã«ç§»è¡ããŠãããŸããã ããèªäœã¯ããããšã§ãæªãããšã§ããªãããããŸã§BASEã®åæ¥äœå¶ããããªã£ããšãã話ã§ãïŒãã¶ã€ããŒãã³ãŒãæžããŠãããæ¹ãããããšãã話ãå¿è«ãããŸãïŒã ãã ããããªã£ãå Žåã«å
è¿°ã®SFCã®èŠªãã¿ãããã¯ãã¯ãããã»ã©ã¡ãªããã§ã¯ãããŸããã ããããšã³ãžãã¢ãããã³ããšã³ãã®ã³ãŒããæžããšãã«ãããã¿ãŒãªéžæè¢ã¯äœãïŒãšããç¹ããã€ã³ãã«ãªããŸãã ãããªã£ããšãã«TSãåå
¬åŒçã«ãµããŒãããŠããReactã¯éåžžã«æåãªéžæè¢ãšãªããŸãã Vueã®TSåã³åãžã®ãµããŒãã¯åŸã
ã«é²åããŠãããæ¥ããVue3ãžã®ã¡ãžã£ãŒããŒãžã§ã³ã¢ããã§ãæå€§ã®èª²é¡ã§ãã£ãã³ã³ããŒãã³ãã®propsã«åã«ããå¶çŽãä»ãã¥ããåé¡ãããªãè§£æ¶ããããã§ã¯ãããŸããã ããã§ãReactãšTSã®èŠªåæ§ã10ãšããã°VueãšTSã®çŸç¶ã®èŠªåæ§ã¯7ã8ïŒãããŸã§å人çãªå°è±¡å€ïŒçšåºŠã§ã¯ãªãããªãšæããŸãã Vueã§JSXãæ¡çšããããšã§ããèŠªåæ§ãé«ããããšãå¯èœã§ãããJSXã§ããªããªVueã®ã³ãŒããæããªãæåããReactãéžãã§ããã°ããããšãã話ã§ããããŸãã ãŸãVue3ãžã®ã¢ããããŒãã®éçšã§ãã¡ãžã£ãŒã¢ããããŒãã®ã¢ããŠã³ã¹ãæãããŠããããªããªããªãªãŒã¹ãé²å±ããããšãªãã çµæçã«å€ãã®ç Žå£ç倿Žã䌎ãããšãäºæž¬ãããããã°ãã³ãªãªãŒã¹ã«ãªãããã§ããããšããç¹ã§ä»åŸã®Vueã®éçºãµã€ã¯ã«ã«å¯ŸããŠè¥å¹²ã®äžå®ãããé¢ããããŸãã ãã ããVueã®ããç·ŽãããAPIãéçºäœéšãNuxtãVue CLIãªã©ã®ãšã³ã·ã¹ãã ã¯çŸæç¹ã§ãååã«é
åçã§ãããçŸæç¹ã§ãã§ã«æ¬æ Œçãªæ¡çšã«ååèãããããã®ã§ãããšãæã£ãŠããŸãã å°ãªããšãããšæ°å¹Žã¯ãVueã§æžãããŠããéšåãããããå¥ã®ãã¬ãŒã ã¯ãŒã¯ã§æžãçŽãããšãããããªè©±ã«ã¯ãªããªããšæã£ãŠããŸããã ã¢ããããŒãã«å¯Ÿãã远åŸã¯ç©æ¥µçã«è¡ã£ãŠããäºå®ã§ãã æåŸã« æè¡éžå®ã«ãããŠå€æè»žã¯ããããããããšæããŸãããBASEã®ããã³ããšã³ãã«ãããŠã¯ç¹ã«Vueã«åŒ·ããããããŠããããšããããã§ã¯ãªãã ãã®æãã®æã§ç€Ÿå
ç°å¢ããã¬ã³ããªã©ãç·åçã«å€æããŠéžå®ãè¡ãããšã«ãªããšæããŸãã å®éã«ç€Ÿå
ã§ã¯ã³ã¢æ©èœã®ãªãã¬ãŒã¹ã«Web ComponentsãæŽ»çšãããNext.js(React)ãå©çšããé åãçãŸããããšããŠããŸãã ä»åŸãæ°èŠãããã¯ãã«é¢ããŠã¯Reactæ¡çšã®æ©éã¯ã©ãã©ããšé«ãŸã£ãŠããããšæããŸãã å人çãªå°è±¡ã§ã¯VueãReactãç®ã«èŠããUIãåè§£ããŠãã³ã³ããŒãã³ããšããŠæ§ç¯ãçŽãæèŠãã®ãã®ã¯éåžžã«è¿ããã®ããããšæã£ãŠããŠã äž¡è
ã®ãšãã»ã³ã¹ã®éããçè§£ããŠã©ã¡ããæžãããšããããšããä»åŸã®ããã³ããšã³ããšã³ãžãã¢ã«ã¯åœããåã®ããã«æ±ããããŠããã®ã§ã¯ãªãããšæã£ãŠããŸããã BASEã®ããã³ããšã³ããšã³ãžãã¢ã«ãããŠããã©ã£ã¡ãæžããŠåœããåããšããç¶æ
ãã¡ãããšäœã£ãŠãããããšæã£ãŠããŸãã éå»ã®BASEã®ããã³ããšã³ãã®èšäºãç»å£ã§ã¯åºæ¬çã«Vueã®è©±ãããŠããŸããã®ã§ã æ¡çšã®å Žã§ããReact/Angularããçµéšãªãã®ã§ããšãããããªã話ãããã ãäºãå€ã
ãããŸããã å®ã®ãšããæ¡çšã®å Žã§ã¯ã©ã®ãã¬ãŒã ã¯ãŒã¯ãåŸæããçµéšè±å¯ããšããã®ã¯ããã»ã©éèŠããŠããªãç¹ã§ããããŸãã 颿¥ã§ãã©ã¡ãããšãããšWebã¢ããªã±ãŒã·ã§ã³å
šäœã«å¯Ÿããç¥èïŒã»ãã¥ãªãã£ããããã¯ãŒã¯ãªã©ãå«ãïŒããããã°ã©ãã³ã°ã®åºç€åã»èšèšåãªã©ããèãããŠããããšãå€ãã§ãã ã«ãžã¥ã¢ã«é¢æ¥ãšããåœ¢ã§æ°è»œã«äŒç€ŸãçŸå Žã®ç޹ä»ããããŠããã ãå ŽããçšæããŠããŸãã®ã§ãèå³ã®ããæ¹ã¯ãã²å£°ããããŠããã ããã°ãšæããŸã æ¡çšæ
å ±ã¯ãã¡ããã
åºç€ããŒã æå±ã®æ²äž( @okinaka )ã§ãã ããªãã¡ã¯ã¿ãªã³ã°ããšããèšèããšã³ãžãã¢ã®ã¿ãªãããªããåç¥ã§ãããã ã·ã¹ãã ã®æ¯ãèããå€ããã«å
éšãæ¹åããããšãæãèšèã§ãã äžè¬çã«ãã³ãŒãã®ä¿®æ£ãæãããšãã»ãšãã©ã§ãããä»åã¯ããŒã¿ããŒã¹èšèšã®ãªãã¡ã¯ã¿ãªã³ã°ã«ã€ããŠã話ãããããšæããŸãã çµ¶çã«ãªã£ãŠããŸããŸãããã ããŒã¿ããŒã¹ã»ãªãã¡ã¯ã¿ãªã³ã° ãšããæžç±ã«æ§ã
ãªææ³ã玹ä»ãããŠããŠåèã«ãªããŸããè±èªã§è¯ããã° åæž ã¯ãŸã å
¥æå¯èœã§ããã ããŒã¿ããŒã¹ã»ãªãã¡ã¯ã¿ãªã³ã° äœè
: ã¹ã³ãã W ã¢ã³ãã©ãŒ , ãã©ã¢ãã»ãµãã©ãŒãž çºå£²æ¥: 2008/03/26 ã¡ãã£ã¢: åè¡æ¬ Refactoring Databases: Evolutionary Database Design (Addison-Wesley Signature Series (Fowler)) (English Edition) äœè
: Ambler, Scott W. , Sadalage, Pramod J. çºå£²æ¥: 2006/03/03 ã¡ãã£ã¢: Kindleç ååäžŠã³æ¿ãã®åé¡ åŒç€Ÿãéå¶ããã BASE ããšãããµãŒãã¹ã¯ãç¡æã§ããããã«ãããã·ã§ãããéèšã§ãããµãŒãã¹ã§ããWebãµãŒãã¹ã®ä»ã«ã賌å
¥è
åãã·ã§ããã³ã°ã¢ããªã BASE ããã·ã§ãããªãŒããŒåãã®ã·ã§ããéå¶ç®¡çã¢ããªãBASE Creatorããå€éšã·ã¹ãã ãšã®é£æºã®ããã® BASE API ãªã©ãæäŸããŠããŸãã ã·ã§ããã«ååãé³åããéã®äžŠã³é ã¯éèŠãªæ
å ±ã§ãã䞊ã³é ã®æ
å ±ã¯ã ã·ã¹ãã ã®ããããšããã§åç
§ãããŠããŸãã ååã®äžŠã³é ã管çããŠããååããŒãã«ã¯ãåšåº«ç®¡çãªã©ã«ãçšããããããé »ç¹ã«æŽæ°ããããããŒãã«ã§ããã ååã®äžŠã³é ã¯ãã·ã§ããããšã«å
é ããïŒããšããŠéé ã«çªå·ããµãããŠããŸããäŸãã°ãæ°èŠç»é²ããååãäžçªå
é ã«æã£ãŠããããå Žåãä»ã®ååã®äžŠã³é ãå
šãп޿°ããŠãããå¿
èŠããããŸãã å€ãã®ååãããããã·ã§ããã管çç»é¢ãªã©ã§ååã远å ãããšã倧éã®ååã®äžŠã³é ãæŽæ°ããæäœãè¡ããããããïŒã€ã®ããŒãã«ã«æžã蟌ã¿ãéäžããŠããŸããè² è·ãåé¡ã«ãªã£ãŠããŸããã ãªãã¡ã¯ã¿ãªã³ã°ã®æ¹é ããŒã¿ããŒã¹ã»ãªãã¡ã¯ã¿ãªã³ã°æ¬ã§èšããšããã®ãããŒãã«ã®åå²ããè¡ããŸããã 䞊ã³é ã®ããŒã¿ãå¥ããŒãã«ã§ç®¡çããããšã§ãæžã蟌ã¿ã忣ããããšãã§ããŸãã代ããã«ããŒãã«ã JOIN ããããã«ãœãŒã¹ã³ãŒãã®ä¿®æ£ãå¿
èŠã«ãªããŸãã æ¹åå æ¹ååŸ ååããŒãã« ååid ååå : 䞊ã³é ååããŒãã« ååid ååå : åå䞊ã³é ããŒãã« ååid 䞊ã³é ãªãã¡ã¯ã¿ãªã³ã°ã®æµã 以äžã®é ã§å®æœããŸããã åæºå ååã®äžŠã³é ã管çããæ°ããããŒãã«ã远å ååããŒãã«ãšäžŠã³é ã®ããŒãã«ã®å€ãåæ æ¢åã®äžŠã³é ãæ°ããããŒãã«ã«ã€ã³ããŒã ä¿®æ£ãããœãŒã¹ã³ãŒãã®ãªãªãŒã¹(è€æ°å) 䞊ã³é ãåç
§ããã³ãŒããä¿®æ£ äžŠã³é ãæŽæ°ããã³ãŒããä¿®æ£ åŸåŠç ååããŒãã«ãšäžŠã³é ããŒãã«ã®åæã忢 ç§»è¡æéäžã¯ããªã¬ãŒã§åæ ãœãŒã¹ã³ãŒãã®ä¿®æ£ã¯äžäººã§äœæ¥ããã«ã¯åºç¯å²ã§ãå
šãŠãææ¡ã§ããŠããããã§ã¯ãããŸããã§ããã ãã®ãŸãŸäžæ°ã«å·®ãæ¿ãã¯ãªã¹ã¯ããããšå€æãããµãŒãã¹çšŒåäžã«ç¡åæ¢ã§æ®µéçã«ãªãªãŒã¹ããããã«ç§»è¡æéãèšããŸããã ç§»è¡æéäžã¯ãååããŒãã«ãšäžŠã³é ã®ããŒãã«ã®å€ãåæããå¿
èŠãããã ä»åã¯ãããŒã¿ããŒã¹ã®ããªã¬ãŒãå©çšããããšã«ããŸããã ããªã¬ãŒãšã¯ãããŒãã«ã«å¯Ÿã㊠INSERT / UPDATE / DELETE ãªã©ã奿©ã«åŠçãå®è¡ã§ããããŒã¿ããŒã¹ã®æ©èœã§ããç°å¢ãèšå®ã«ãã£ãŠã¯å©çšã§ããªãããšãããã®ã§ããã幞ã BASE ã®ããŒã¿ããŒã¹ã§ãã Aurora 㯠MySQL äºæã§ãã®ã§ãå©çšããããšãå¯èœã§ããã 以äžã«ããªã¬ãŒã®äŸã瀺ããŸãã ååããŒãã« (items) ã INSERT ãããéã«ã䞊ã³é ããŒãã« (item_list_orders) ã«å
容ãåæ ãããŠããŸãã DELIMITER | CREATE TRIGGER item_list_orders_insert AFTER INSERT ON items FOR EACH ROW BEGIN IF NEW.list_order IS NOT NULL THEN INSERT INTO item_list_orders (item_id, list_order) VALUES (NEW.id, NEW.list_order); END IF ; END ; | DELIMITER ; å®éã«ãã£ãŠã¿ãŠ ããŒã¿ããŒã¹ã®ãšãã¹ããŒãã®æ¹ã«ãååããã ãå¿
èŠã¯ãã£ãã®ã§ãããã³ãŒãã®ä¿®æ£äœæ¥ã¯äžäººã§ã§ããŸããã ç§»è¡æéãèšããããšã§ãïŒã€ã®ãªãªãŒã¹ã圱é¿ç¯å²ã極éãŸã§çµã蟌ãã ããšã§åäœç¢ºèªãããããªããŸããã ä¿®æ£ãäžæ°ã«ãªãªãŒã¹ãããèªæã«æãã€ã€ãå°éã«äœæ¥ãããããŠãããŸããã ãŸãããªãã¡ã¯ã¿ãªã³ã°ã«æ¬ ãããªãèªåãã¹ãã§åäœã«åé¡ããªãããšãåžžã«ç¢ºèªã§ããŸããã ãããããŸã§ã倧ããªãã©ãã«ããªããªãªãŒã¹ã§ããŸãã ð ïŒæžæ¡ã ã£ãæŽæ°ã®ã¹ã«ãŒãããã倧å¹
ã«æ¹åããããšã®ããš) ãããã« ããŒã¿ããŒã¹ã®ãªãã¡ã¯ã¿ãªã³ã°ã¯ãæ£ããæé ã«æ²¿ã£ãŠè¡ãã°ãæéã¯ããããŸããæè¡çã«ã¯é£ããããšã¯ãããŸããã§ããã ãã¹ããéã®åœ±é¿ç¯å²ã®å€§ããããæ¬é ãããã¡ã§ãããç©æ¥µçã«ãã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸããã
BASEæ ªåŒäŒç€Ÿåç· åœ¹ EVP of Development / PAYæ ªåŒäŒç€Ÿåç· åœ¹ / BASE BANKæ ªåŒäŒç€ŸãããŒãžã£ã®ããµããã§ãã æ°åã³ããã«ããéåžžäºæ
宣èšäžã§èµ·ããããšã«ã€ããŠã¯ã倧å€å匷ããããŠããã ããŸããã éåžžäºæ
宣èšäžã®å·£ãããæ¶è²»ããªã¢ã«åºèçã§ã掻èºãããŠããäºæ¥è
æ§ã®ECå©çšãæ¥å¢ããäžã§ãBASEã«ãããŠãäŸå€ã§ã¯ãªãããµãŒãã¹ã«èšªãããã©ãã£ãã¯æ¥å¢ã4æãã5æã®é ã«ãããŠã¯ããµãŒãã¹ã®å®å®æ§ã«ã圱é¿ãåºãŠããŸããšããç¶æ³ãçºçããŠããŸããã ãã®äžã§èµ·ããŠããäžã€ã®äºè±¡ã解決ããä»¶ã以äžã®CTOã«ããèšäºã§ãã devblog.thebase.in ãã®èšäºã¯CTOãSREããŒã ãWebã¢ããªã±ãŒã·ã§ã³ã®ãšã³ãžãã¢ã®æŽ»èºã§ãè² è·æ¥å¢ã®åé¡è§£æ±ºãããäžã€ã®äºäŸãšãªããŸãã ãã®å¯ŸçãéããŠãæ¹ããŠèªèããããšããããŸãã ããã¯ã BASEã«èšªãããã¹ãŠã®ãã©ãã£ãã¯ãé©åã«åãæ¢ããŠãé©åã«æ±ºæžãå®äºããããšãã䜿åœããã®ãµãŒãã¹ã«ã¯ãã ãšããããšã§ãããããããã¹ãŠã®ã·ã§ããããã¹ãŠã®è³Œå
¥è
ããã®æåŸ
ã§ããããã®æåŸ
ã«å¿ãç¶ããããšããµãŒãã¹ãæé·ãããšããæå³ã§ãã ãããªã®WebãµãŒãã¹ãªãã ããåœããåã ãïŒãšæããããããŸãããããããéåžžäºæ
宣èšäžã§ã®ã¢ã¯ã»ã¹æ¥å¢ã¯ãããæ°åã³ããããªãã£ãå Žåã«é èª¿ã«æé·ããæ°å¹ŽåŸã®æªæ¥ãçªåŠãã£ãŠãããšãããã®ã§ãããããã ãæ¥éãªDXãé²ãã ãšããçè§£ãããŠããŸãã ãã®äžã§ãããããæ°å¹ŽåŸã®æªæ¥ãè¿ããããã«ãä»åŸãå°æ¥ã«æž¡ã£ãŠãµãŒãã¹ãæ¹åãç¶ããããšã®éèŠæ§ãæ¹ããŠæããããšãšãªããŸãããããã«ã¯åçŽã«AWSã®ã€ã³ã¹ã¿ã³ã¹æ°ãã¹ã±ãŒã«ã¢ãŠãããAuroraã®ã€ã³ã¹ã¿ã³ã¹ã¹ããã¯ãäžããã ãã§ã¯æžãŸãªãæªæ¥ãèŠããŠããŸã£ãããã§ãã PHPã䜿ãç¶ããŠããæå³ æã
ãæäŸããŠããBASEã¯ã2012幎ã«éçºãããPHP + CakePHP2.xç³»ã§åããŠããã³ãŒããäžå°ã«æ©èœè¿œå ãšæ©èœæ¹åããç¶ããŠããŸãã åãCTOã ã£ãæããããŠãçŸCTOã®å·å£ã«æè¡éžå®ãå§ããŠããçŸç¶ã«ãããŠãããµãŒãã¹ã®æ¹åã«ãããŠPHPããéçºèšèªãå€ãããšããéžæã¯ä»ã®ãšããèããŠããŸããã PHPã䜿ãçç±ãšããŠã¯ã BASEã®çŸç¶ãããé«ãæé·ãå®çŸããŠããä»ç€Ÿå®çžŸãåæ¡ããã«ããŸã ãŸã æé·ã«å¯Ÿããããã³ã·ã£ã«ãå
ŒãåããŠããèšèªåŠçç³»ã§ããã PHPãšããéçºèšèªèªèº«ããä»ã®èšèªã®è¯ããšãããåãå
¥ããŠé²åãç¶ããŠãã å°ãªããšãçŸç¶ã®Webã®ãµãŒããµã€ãèšèªã«ãããŠãéçºçç£æ§ãå«ããŠãä»ã®èšèªã«ãŸãã£ãšåãæ¿ããŠã§ãå®çŸãããä»£æ¿æè¡ãèŠã€ãã£ãŠããªããšããã®ãæå€§ã®çç±ã§ãã ãã¡ããä»åŸã®ã¹ã±ãŒã©ããªãã£ã®å®çŸã«éããŠPHPã§ã¯ç¡çãšããããšã«ãªã£ããå
šç¶éãèšèªã«å€ãããããããŸããããŸãããã€ã¯ããµãŒãã¹ãšããŠæ°æ©èœãæ°èŠäºæ¥ã«ãããŠé©æé©æã§æ§ã
ãªæè¡ãè¿œå æ¡çšããŠãããçžå¯Ÿçã«PHPã®æŽ»çšåºŠãäžããããšã¯ããããŸãã BASE BANKããŒã ã¯Goèšèªã§ãµãŒãã¹ãéçºããŠããŸãããããŒã¿ãµã€ãšã³ãã£ã¹ãã§æ§æãããData StrategyããŒã ã¯æ©æ¢°åŠç¿ã§åé¡è§£æ±ºããããã«ãPythonãAWSãGCPãçãããŠããŸãã BASEã®æ±ºæžãã©ã³ã¶ã¯ã·ã§ã³ãåŠçãããã€ã¯ããµãŒãã¹ã®é¢ä¿æ§ã«ãªã£ãŠããPAY.JPãéå¶ããããŒã ã¯ãPythonã§æžãããWebãµãŒãã¹ã§ãããŸããBASEããŒã ã«ãããŠããªãªãŒã¹ã¯ããŠããªããã®ã®Goèšèªã§æžããããããã¯ããååšããŠããŸããBASEã®ããã³ããšã³ãã¯ãVue.jsãReactãæŽ»çšããã¢ãŒããã¯ãã£ãžã®å€åãé²ãã§ããŸãã äŒç€Ÿå
šäœãšããŠã¯ç¹å®ã®éçºèšèªã«ãã ãããªãäžæ¹ã§ãé©æé©æã®æè¡éžæã«ã¯ãã ãã£ãŠãããšè¡šçŸããã®ãæ£ããã§ããããã ãŸããAWSãGCPãå€éšã¯ã©ãŠããµãŒãã¹ãšã®API飿ºã«ãã£ãŠãçžå¯Ÿçã«ããããŸã§PHPãæ
ã£ãŠããæ©èœã圹å²ã¯å°ããã€åãåãããŠããŸãã ããã¯æä»£ã®å€åã«ãããã驿驿åã§ããããµãŒããµã€ãèšèªã¯ã°ã«ãŒïŒç³ïŒãšããŠã®åœ¹å²ã匷ããªããŸããããã³ããšã³ããããã¯ãšã³ãã«æºãããšã³ãžãã¢ã¯ãèªåçã«å¹
åºãæè¡é åã§ã®ã·ã¹ãã æ§ç¯åãæ±ããããŠãããšèããŠããŸãã æè¿ã¯ããã¯ãšã³ãã®ãšã³ãžãã¢ã«ããåœç¶ã®ããã«ããã³ããšã³ãã®ã³ãŒããæžããŠãããããã®æéæè³ãããŠããŸããããã³ããšã³ãããŒã ããããã«æŽåããããã³ããšã³ãåºç€ãã¢ããªã±ãŒã·ã§ã³ãšããŠæŽ»ããã³ãŒããæžããšããã¯ãåœç€Ÿã®ããã¯ãšã³ããšã³ãžãã¢ã®åœããåã®ã¹ãã«ã ãšèããŠããŸããéã«ããã³ããšã³ããšã³ãžãã¢ã«ãšã£ãŠã®ãµãŒããµã€ããããããã§ããéãåã
ã®ãšã³ãžãã¢ã®å¿ã®ãªãã«ããèåã¯ç¡ãããŠããããã§ãã éã«èšãã°ãWebãšã³ãžãã¢ã§ããã°ããã³ããšã³ãããã€ã³ãã©ãŸã§å
šéšèŠããããã«ãªã£ãŠãšããæ³ãããããŸããããã¯å人ã§WebãµãŒãã¹ãäœããªãåœããåã®ããšã§ãããå€§èŠæš¡éçºã«ãããŠWebç°å¢ãåãå·»ãå°éæ§ãšå€æ§æ§ã®äžã§ãäœãè¯ããã¯è°è«ã¯åããããã€ã³ãã§ãããã ãCTOãããªã³ã·ãã«ããã¯ãªãŒãã¯åŸæåéã®æ¯ãå¹
ã¯ããã©ããã®èŸºãæ°ã«ããå¿
èŠã«å¿ããŠèŠãŠãããŠããã®ã§ãåã¯Webã®ãšã³ãžãã¢ã®çæ³åãªã®ã ãšæããŸããããããå
ã¯å°éå®¶ã«å§ãããšããåŒãéããŸãæè¡ã®å€æåãšããããšã§ããããããŒã ã§è§£æ±ºããã°ããã®ã§ããããã«ããããã®äžã®åœç€Ÿã®æè¡ã¹ã¿ãã¯ã®äžã€ã«PHPãååšããŠãããšããããšã§ãã PHPããPHPãžã®ç§»æ€ æã
ã®å·®ãè¿«ã£ãåé¡ãšããŠãCakePHP2.xã®ã©ã€ããµã€ã¯ã«çµäºãç®åã«ã次ã®ã¢ãŒããã¯ãã£ãžã®ç§»è¡ãå¿
èŠã§ããèšããªãã°ãé«éœ¢åãé²ãã§ããã¢ãŒããã¯ãã£ãè¥è¿ãããå¿
èŠããããšããããšã§ãã æ¢ã«ãä»å¹Žã®ãããžã§ã¯ããšããŠéèŠæ©èœã®ã¢ãŒããã¯ãã£å€æŽã«æãä»ããŠããŸãããæŽã«ãæ¥å¹Žããã¯æ¬æ Œçã«å
šäœã®ã¢ãŒããã¯ãã£å€æŽãã¹ã±ãžã¥ãŒãªã³ã°ããæ°å¹ŽããããŠãœãããŠãšã¢æ§é ã®è¥è¿ããå®çŸããŠè¡ãããšèããŠããŸãã ãŸãããã£ãšæ¥åžžã®åé¡ãšããŠãPHPèªèº«ã䜿ãç¶ããé
åãšããŠãPHPèªèº«ãéçºèšèªã®ãã¬ã³ããåãå
¥ããŠé²åããŠãããšæžããŸãããããã®èãæ¹ã«ã€ããŠããé£ãããååšããŠããŸãã BASEãšãããããã¯ãããªãªãŒã¹ãããªãã ããã ãš7幎以äžãçµã£ãŠããŸããæ°èã®ã¹ã¿ãŒãã¢ããäŒæ¥ã ãšæã£ãŠããŸããããåœç€Ÿã®ãœãŒã¹ã³ãŒãããããªãã«é·ãæéãç«¶äºåãç¶æããŠããç¶æ
ã§ãã ãŸã ãŸã æã®ãœãŒã¹ã³ãŒããæŽ»èºããŠããäžãæèçã«æ°ããPHPã«å¯Ÿå¿ãããœãŒã¹ã³ãŒãã«æžãæããŠè¡ããªãéãã¯ãPHPã®é²åãšããã¡ãªããã享åã§ããŸããã 以åã¯ãRuby on Railsã®ããã«æå
端ãžã®é©å¿å§ã®é«ããã¬ãŒã ã¯ãŒã¯ã¯ãŸããŸããªã¹ã¯ã ãšèããŠããŸããããåœç€Ÿã®ããã«æé·ãç¶ç¶ã«æéãšã³ã¹ãããããããWebãµãŒãã¹ã§ããã°ããããã«ããææ°ã®ç¶æ
ã«å€åãããŠãããªããšãããªãã®ã§ãå¿
èŠçµè²»ãšããŠå€çç°å¢ããå€åã匷å¶ãããæ¹ããŸã æ°æã¡ã¯æ¥œãªã®ãããããŸããã ã·ã¹ãã éçºã«ã¯ãæ¯ããã³ãŒãã¯ããããªããšããå®èª¬ãæããååšããŠããŸãã æ¢ã«ãªãªãŒã¹ãããŠããã³ãŒãã¯ååå®å®ããŠããããäœèšãªä¿®æ£ã¯ããŠã¯ãããªããšããèãæ¹ã§ãããã®èãæ¹ã®å
ã§æè²ãããŠãããšã³ãžãã¢ã®äººãå€ã
ããããšã§ãããã åŸæ¹äºææ§ãç¶æãããŠããPHPã«ãããŠã¯ããã®èãæ¹ã«ä¹ãããããšããã¡ãªããããããŸããé²åã®æ©ã¿ãæ¢ããWebãµãŒãã¹ãé·ãéå¶ããŠããããšã«ã€ããŠã¯ãPHPã®å©çšã¯åããŠãããšèããããšãå¯èœã§ãã ããããããã¯ãWebã·ã¹ãã ã®ã³ãŒãã¯ãªãªãŒã¹ããç¬éããå£åããŠããéåœã«ãããäœãããªãã®ã¯éåãããããããšããæŠå¿µãšççŸããŸãã 誀解ãæããã«èšããšãçŸç¶ç¶æã蚱容ããèãæ¹ãèš±ãããã®ãPHPã®åŒ·ã¿ã§ãããé¥ããããçœ ãšãèšããŸãã èªå·±è²¬ä»»ã§PHPã®ææ°ããŒãžã§ã³ãžã®å¯Ÿå¿ãæèããŠãããžã¡ã³ãããŠãããªããšãã©ãã©ãææ°ç°å¢ãžã®é©å¿åãäžãã£ãŠããŸããåã人ã®ã¹ãã«ãå«ããŠå€åã®ã³ã¹ããé«ããªã£ãŠãã£ãŠããŸããŸãã ãããæç ŽããŠããå¿
èŠãæã
ã«ã¯ãããŸãã ãšã³ãžãã¢ãªã³ã°ãããžã¡ã³ãã®è²¬å ãã®ãããªãšã³ãžãã¢ãªã³ã°ããã»ã¹ã®å®çŸãæèã®åäžã¯ããããžã¡ã³ããµã€ãã®ä»äºãšããŠæèçã«è¡ãå¿
èŠããããŸãã ã©ãããããŸã§æ¢åæè¡ãè¯ãããŠããã®ã¯ãæèãç¬çºåãé«ãããã¯ãªãŒãçŽã®äººãããä»äºã ãšèããŠãããšããããããŸããããã®ããã«æ¥åžžã®ãµãŒãã¹éçºãããŠããããŒã ãšã¯å¥ã«ãåºç€ããŒã ãšããããžãã¹äž»äœã®éçºãããžã§ã¯ãããåãé¢ããæè¡ããŒã ãäœãããã®äººéãäžå¿ã«åºããŠãããã°ãšæã£ãŠããŸããããããã ãã§ã¯æãç¶æ³ã«ã¯ãªããŸããã§ããã ããã§ã¯ãªããåœç€Ÿã§åããã¹ãŠã®ãšã³ãžãã¢ããæ¯æ¥ã®ä»äºã®äžã§ããœãŒã¹ã³ãŒããããããŠããããªãã¡ã¯ã¿ãªã³ã°ãå€åããããããŠããæèãæã€å¿
èŠããããšããããšã«ãã©ãçããŸããã èšãæãããšãããžãã¹ã®æé·ãå®çŸããæ°æ©èœã®ãããžã§ã¯ãéçºãé²ããã ãã§ã¯ãäºæ¥ç¶ç¶æ§ããµãŒãã¹çºå±æ§ã®å®çŸã«ã¯è¶³ããªããšããããšã§ãã ããæ
ã«ããšã³ãžãã¢ãªã³ã°ãããžã¡ã³ããšããŠã¯ãããŒã å
šå¡ãå€åãåãå
¥ããããšãåœããåãšããããã«ã以äžã®ããšãæèçã«ãã£ãŠãããŸãã ãããžã§ã¯ããããªãäºä»¥å€ã«ãæ¥åžžçã«æ¢åã³ãŒããããããŠããããã®äœæ¥æéã確ä¿ãã ãµãŒãã¹ã䌞ã°ãããšãšããœãŒã¹ã³ãŒããã·ã¹ãã å
šäœãããããŠããããšã®äž¡ç«ãã§ããé«ãçç£æ§ãå®çŸãããšã³ãžãã¢ãè©äŸ¡ããå ±é
¬ã«åæ ããã ããã§ãªãŒããŒã·ãããçºæ®ã§ãã人ããªãŒãè·ããšã³ãžãã¢ãªã³ã°ãããŒãžã£ã«ææ¢ããå
šäœã®ã¬ãã«ã¢ãããå³ã ãã®ããšã«äžç·ã«åãçµãã§ããããšã³ãžãã¢ã®æ¡çšã匷åãã ãªã©ã ãã®ããšãããŒã å
šå¡ã§åãçµãã§ããå¿
èŠããããŸããæ¯ããã³ãŒãã®å®å®æ§ã«ãµãŒãã¹ç¶ç¶æ§ãäŸåãããã€ãŸã§çµã£ãŠãPHPã®åŸæ¹äºææ§ã«é Œã£ãŠãããšããç¶æ
ã§ã¯æªæ¥ããããŸããã äºæ¥ç¶ç¶æ§ãå®çŸããã·ã¹ãã ãºãšã³ãžãã¢ãªã³ã° ãã®ãããªäºæ¥ç¶ç¶ãå®çŸããããã®å€åã¯ããã®æ¥çã«ãããŠã¯åŒå¹Žé·å®®ãšåŒã°ããäºãå€ãã§ããããããWebã®å Žåã¯ããµãŒãã¹èŠä»¶ãã»ãã¥ãªãã£èŠä»¶ãã¹ã±ãŒã©ããªãã£èŠä»¶ãå»äžå»å€ãã£ãŠãããããå人çãªã€ã¡ãŒãžãšããŠã¯ãæè¡ã®äŒæ¿ãçŸç¶ç¶æãç®çãšããåŒå¹Žé·å®®ãäŸãã«ãããã®ã¯ããµãŒãã¹ã®æé·ãåæãšããæŠå¿µãšããŠã¯å°ãç©è¶³ããªããšããæèŠãæã£ãŠããŸãã å人çãªå¥œã¿ãšããŠã¯ãã¡ãã®äŸãã§ã2013幎3æ15æ¥ã«è¡ãããæ±æ¥æ±æšªç·ã®æžè°·é§
ããŒã ã®å°äžåã«äŒŽã£ãŠè¡ããã代å®å±±é§
ã®å
¥ãæ¿ãå·¥äºãããã§ãã æžè°·ãšããç¶ç¶çã«çºå±ããéœåžãäžæ¯ããããšã³ãžãã¢ãªã³ã°ã®åºåããã®æ åãã䌺ãããšãã§ããŸãã ãã®å·¥äºã¯ãäžæ©ã®ãã¡ã«è¡ãããŸãããç¶¿å¯ãªèšç»ãç·Žã£ãŠãç·å¢ã1200人ã§äœæ¥ãããšãããã®ã§ããããŒã å
šäœããã®åœ¹å²ãæ
ãããšã§ããµãŒãã¹å©çšè
ã«ãªããäžäŸ¿ããããã«ãµãŒãã¹ã®ã¢ããããŒããå®çŸãããã®æ åããšãŠããªã¹ãã¯ãããŠããŸãã ä»åŸã®çºå±ã®ããã« ãã®ãããªåæã®äžã§ãBASEãšãããµãŒãã¹ã®çŸç¶ã¯çºå±éäžã«ä»ãªããŸããããããŸã§é·ã
ãšæžããŠããŸããŸããããçŽè¿ã«ããã倧ããªtodoããŸãšãããšãéåžžã®äºæ¥æé·ã®ããã®ãããžã§ã¯ãéçºä»¥å€ã«ã æ¥å¹ŽããCakePHP2.x ããããããã®èšç»ãç«ãŠãŠéçºèšç»ãå®è¡ããŠãã PHPã®ææ°ããŒãžã§ã³ã«é©å¿ããããã®ã³ãŒããæžãããšãžã®æéæè³ã¯åžžã«æèãã ãã®ä»ãæããã£ãæ°èŠã¢ãŒããã¯ãã£ã®å°å
¥ãªã©ïŒå®ã¯ãããã£ãŠããïŒïŒ ããããå®çŸããæè¡åãåºäžãããŠããããã®æ¡çšãšçµç¹æ§é ãæ¹è¯ããŠããã®ããããžã¡ã³ãã®ä»äºã«ãªããŸãã BASE瀟ã§åããšã³ãžãã¢ã¯ãä»åŸããµãŒãã¹ãæé·ããç¶ããŠæµéç·é¡ã䌞ã°ãç¶ããå€ãã®ã·ã§ãããªãŒããŒæ§ã®æé·ãæ¯ããŠããããã«ããçŸç¶ã®ãŸãŸã§è¯ããšããèãæ¹ã¯1mmãæããªãã§æ¬²ããã§ããç¹ã«æ°åã³ããã®éåžžäºæ
宣èšäžã§ã¯ãå€åããªããšå
ããªããšèšãæªæ¥ãæããã«èŠããŸããã åœç€Ÿã®ãšã³ãžãã¢ã¯ç¹å®ã®èšèªãæžãããïŒã¿ãããªäŸ¡å€èгã ãã§ã¯ãªãïŒããã¯ããã§åŠå®ããªãïŒãæé·ããWebãµãŒãã¹ãæ ¹å¹¹ããæ¯ããããæè¡è
ãšããŠæé·ããŠã»ããã§ãããããããæ©äŒãç®ã®åã«è»¢ãã£ãŠããã®ã§CTOãããã¯ãªãŒãã ãã«ããããã«ãèªããã£ã³ã¹ãæŸã£ãŠãã£ãŠæ¬²ããã§ãã ãããŠããã®ãµãŒãã¹ã«æºãã人éã®æè¡åãäžå°ã«ãåæ°ããå€é©ãå®çŸããŠãããããšæã£ãŠããŸãã ãããŠäžç·ã«æäŒã£ãŠããã ãããšã³ãžãã¢ã®æ¹ã
ãåéããŠãããŸããããããšã¯å±±çšããã®ã§å©ããŠãã ããïŒ A-1.BASE_Webアプリケーションエンジニア/ショップオーナー向け開発 / BASE株式会社 ãŸãæ¡çšãäžç·ã«æäŒã£ãŠããã ããVPoEåè£ãåéããŠãããŸãïŒãšããããã§çµæ§ã§ãã®ã§ãçããã®ãã£ãªã¢ã®éžæè¢ã®äžã€ãšããŠZoomã§ã話ããŸãããïŒ open.talentio.com
ããã«ã¡ã¯ãBASEã§ã³ãã¥ãã±ãŒã·ã§ã³ãã¶ã€ããŒãããŠããszã§ãã ãã®åºŠãªãã¡ã€ã³ããBASEã®ãµãŒãã¹ããŽã®å¶äœéçšãå°ãã話ãã§ããã°ãšæãçããšãããŠé ããŸããã ç®æããã®ã¯ãªãã©ã³ãã£ã³ã°ã§ã¯ãªããªãã¡ã€ã³ 嵿¥ããäžž7幎ã»ã©ããããã·ã§ããäœæãµãŒãã¹ãBASEããšã·ã§ããã³ã°ã¢ããªãBASEãã®é¡ãšãªã£ãŠãããµãŒãã¹ããŽãä»ãŸã§ã®ããŽã¯ã«ã©ãã«ã§æããããŠãŒã¶ãŒã¯ãã¡ãã瀟å
ã®ã¡ã³ããŒããããšãŠãæãããŠããŸãããããŽããŒã¯ã®éšåã§ããäžè§ã¯ã¢ã¡ãªã«å
äœæ°æã®ãã³ãããã£ããã§è¡šããŠããŠãâã€ã³ã¿ãŒãããäžã«å°ããªçµæžæ ç¹ãã€ããâãšãããããã¯ãã®æ³ãã蟌ããŠããŸãã ãããªããŽã§ãããå
šã課é¡ããªãããã§ã¯ãããŸããã§ããã ãã£ãã®å€©èŸºéšåã®æã®åŠçãçãå°ãèŠèªæ§ã匱ãã£ããããã£ãå
šäœã®äœçœãè§åºŠãæã£ãŠããªãã£ãããšçްããèŠãŠãããšãå°ãèããã£ãããããŽã¿ã€ãã®éšåãã«ã©ãã«ãªæ
ã«èŠèªæ§ã匱ããåçã®äžã«èŒããããããšæåã®äžéšã溶ããããçœçžã§åŠçããŠäœ¿ãå¿
èŠããã£ãããšã¯ãªã¢ããªããã°ãªããªã課é¡ããããŸããã ãããBASEãšãããµãŒãã¹ã®ã³ã¢ããªã¥ãŒã¯åµæ¥æããä»ãå€ããããã¢ã€ãã³ãã£ãã£ã®éšåã倧ããå€ããã®ã¯ãŸã çžå¿ããã¿ã€ãã³ã°ã§ã¯ãªããšããããšããããŸããã ããã§ç®æããã®ãããµãŒãã¹ã€ã¡ãŒãžãäžæ°ããã®ã§ã¯ãªããªãã¡ã€ã³(æŽç·Ž)ãããããšã§ããã ããŽå¶äœè
ãžã®ãªã¹ãã¯ãã蟌ããã€ã³ã¿ãã¥ãŒ ä»ãŸã§ãBASEãšãããµãŒãã¹ãæ¯ããŠãããŠãããµãŒãã¹ããŽã 嵿¥åœæã«ããŽãæ
åœãããã¶ã€ããŒãã©ããªæãã®ããšäœã£ãã®ãããã¢ãªã³ã°ãããšãããããããžã§ã¯ãã¯ã¹ã¿ãŒãããŸãããæ¹ããŠããŽã®ã³ã³ã»ãããåœæã®å¶äœã®æž©åºŠæãããŽã¿ã€ãã®éžå®ããã»ã¹ããã¢ãªã³ã°ããŸãããããŽã«çŽã¥ãã°ã©ãã£ãã¯å±éãã¿ãŠãæ¹ããŠããããŽã ãªããšæããŸããã ãã¶ã€ã³ã¯å¿
ã人ãäœã£ãŠãããã®ã§ããäœã£ã人ãç¥ããšããããšã§ã次ã®ãã¶ã€ã³ã«åããããšãã§ããŸãã ããŽäœææã®ã©ããšã°ã©ãã£ãã¯å±éãªã©ã§ãã ãã£ãã®å°è±¡ãã©ãããã ãªãã¡ã€ã³ãšèšãã©ãã©ãäœãäžãããæ§ã
ãªéžæè¢ããããŸãã ãã£ããããæ¹æ¬¡ç¬¬ã§ã¯ä»ãšå
šãéã£ãå°è±¡ãæãããããšãã§ããŸãã ããã§å®æœããã®ããçŸBASEã¡ã³ããŒã®éãã¶ã€ããŒã®æ¹ã
ã«ãäœãèŠãèšæ¶ããããã«5ç§ã§ããŽã®ãã£ããæããŠããããããããã³ã¢ã¢ã€ãã³ãã£ãã£ãŒãäœããæ¢ããšããšãããŸããã ã©ã®ããã«ãã£ããå°è±¡ä»ããŠããã®ãã確èªããããšãã§ãããªãã¡ã€ã³ã®å€æåºæºãåºæ¥äžãã£ãŠããŸããã ããŽã¿ã€ãã®éžå® ã»ãªãäœããµã³ã»ãªãäœããŸããŸãªfontããã£ããã¢ã³ãããŒã§BASEãšããæåãæ€èšŒããfontã®ããã¯ã°ã©ãŠã³ããšBASEãšã®çžæ§ã確èªããŠãããŸããã ããçšåºŠçµããŠããããtipãšçµã¿åãããŠæ€èšŒããããªããŸããã ããã§ãã€ã³ããšãªã£ãŠããã®ããæã®ããŽã¿ã€ãéšåã«äœ¿ãããŠããfontãã³ã³ãã³ã¹ããªfontã§ãã£ããšããããšã§ãã調ã¹ãŠã¿ããš20äžçŽåé ããäžæã®æ°èã®èŠåºãããçæ³ãåŸããã®ãšããããšãããããŸãããã³ã³ãã³ã¹ãã¯ãã®ç¹æ§äžãæ
å ±éã®å€ãæç« ãšã®çžæ§ãããæåæ°ã®å°ãªãããŽãšã¯å°ãçžæ§ãæªããšããããããŸãããããå
šãå°è±¡ãå€ããfontãå°ãäžå®ãšããã¡ã³ããŒã®å£°ããããã³ã³ãã³ã¹ãã®fontãåè£ã«æ®ãã€ã€ããã£ããšããŒãžããŠèª¿æŽã«é²ã¿ãŸããã ã«ã©ãŒããã£ãã®ãã£ããŒã«ãšããŽã¿ã€ãã®ãã©ã³ã¹ãèãã ãŸãã¯ãã£ãã倧éæã«çµããããŽã®ãã©ã³ã¹ã調æŽããŠãã©ã³ã¹ãã¿ãŠãããŸãã ããçšåºŠãã£ããšããŽã¿ã€ããæ±ºãŸã£ãŠãããã¢ãã¯ã«ã¯ããŠå®æããæã®ã€ã³ãã¯ããèŠæ¥µããŠãããŸããã 2æ¡ã«çµã鶎岡ãã(åŒç€Ÿä»£è¡šåç· åœ¹CEO)ãšè©±ããæ¹åæ§ã®ç¢ºèªãããŠæçµèª¿æŽãžã 现ããä¿®æ£ãç¹°ãè¿ã宿ããã®ããã¡ã! ã«ã©ãã«ãªå°è±¡ã ã£ãããŽãå°ã倧人ã³ãå°è±¡ã«çãŸãå€ãããŸããã èŠæ
£ããããŽãå€ããããã®æºå ããŽã®ãªãã¡ã€ã³ãšèšãã©ãå€ããããšã«ãã¬ãã£ããªæèŠããªãã£ãèš³ã§ã¯ãããŸãããä»ãŸã§ã®ããŽã«å¯ŸããæçãããŠãŒã¶ãŒã«ãã¡ã³ããŒã«ããããŸãããå¶äœãéå§ããé ã«ããªãå€ããã®ïŒã質åãåããããšããããŸããã ãã®éã«ã¯ãèŠèªæ§ãå«ãã課é¡ãäŒããæ§ã
ãªæèŠãèãã€ã€ãããžã§ã¯ããé²ããŸããã ãããžã§ã¯ãã¡ã³ããŒéã§ãããããã¯ãããµãŒãã¹ãšåãããã«ãµãŒãã¹ã®é¡ã§ããããŽãé²åãç¶ããã¹ãã ãšèªèãåãããŠããªãã¡ã€ã³ãé²ããŸããã ãªã¢ãŒããšç©çåºç€ŸãããŸã䜿ã瀟å
ã¡ã³ããŒã«ãã©èŠãããªããé²ãã æ°åã³ãããŠã€ã«ã¹ææçã®åœ±é¿ã§çŸåšãªã¢ãŒãæšå¥šäžã®BASE瀟ããããå¿
èŠã«å¿ããŠã¡ã³ããŒããªãã£ã¹ã«æ¥ãŠããããããŸãã ããŽãªãã¡ã€ã³æ
åœã®ã¡ã³ããŒãå¿
èŠã«å¿ããŠãªãã£ã¹ã«åºç€Ÿããã«ã©ãŒã®ç¢ºèªãªã©ãããŠããŸããã ããã§ãå¶äœéäžã®ããŽãäŒè°å®€ã®å£ã«åŒµãåºãããŸãŸã«ããŠããããŠã¡ã³ããŒã«ãèŠããããã«ããŠããŸãããããã«ãããããžã§ã¯ãã¡ã³ããŒä»¥å€ã®äººã«ãããŽãå€ããã®ããªããšãããããå€ããããšãžã®å
ç«ãã€ããŠããã£ãŠããŸããããŸãä»®ã«ãã¬ãã£ããªæèŠãããããã§ããã°ãã¯ããã®ãã¡ã«èããŠãããããšããçãããããŸãããå¶äœéäžããããžã§ã¯ãã¡ã³ããŒä»¥å€ã®æèŠãèããã©ãæããŠããããåžžã«æèããŠé²ããŸããã ãããããBASEã®ãã¶ã€ã³ã¯é²åãç¶ãã BASEã®ãã¶ã€ã³ã¯ãŸã é²åã®éäžã§ããããã¯ããŽãäŸå€ã§ã¯ãããŸããããŠãŒã¶ãŒã®ããã«Move Fastã«æ°ããæ§ã
ãªæ©èœæäŸããŠããããã«æä»£ã«åãããŠããžã¥ã¢ã«ã¢ã€ãã³ãã£ãã£ãŒãå€ããŠè¡ãå¿
èŠããããŸããããããã®BASEã®ãã¶ã€ã³ã«æ¯éãæåŸ
ãã ãã!
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã TL;DR GitHub Project ã§ã«ã³ãã³éçšããéã«ãIssue äœæãå°ãé¢åã§ã察å¿ãã GitHub Project ãæåã§æå®ããªããšãããªã GitHub Actions ã® alex-page/github-project-automation-plus ãçšããŠãIssueäœææã«èªåã§ GitHub Project ã«ç»é²ãããããã«ãã ISSUE_TEMPLATE ã®äœæã»æŽæ°ãªã©ãããããªã«ã€ãŒã³ãç©æ¥µçã«ãã èæ¯ BASE BANK Dev Division ã§ã®éçºãããžã§ã¯ãã§ã¯ãGitHub Project ã§ã«ã³ãã³éçšããŠããŸãã ã å°äººæ°ã§ã®ã¢ãžã£ã€ã«éçºãžã®åãçµã¿å®äŸ ïŒäžæ©ç®ã®èžã¿ã ãæ¹ïŒ | 詳説 | July Tech Festa 2020 ç»å£ã¬ããŒã ãã«ãŠããã®ã«ã³ãã³ãã¡ãã£ãšã ããã©èŠãããŠãããŸããã ãã®ã«ã³ãã³ã«ã¯ãIssueãäœæããŠç»é²ããŠããã®ã§ãããIssue ãäœæããéã® ISSUE_TEMPLATE ã«ã¯ã GitHub Project ã¯æå®ã§ããŸããããã®ãããIssue äœææã«å¯Ÿå¿ãããããžã§ã¯ããæå®ããŠããŸããã ããã¯ãç©ããç©ãããšçµæ§é¢åãªäœæ¥ã§ãæµãã§ãã³ãã³Issueãäœã£ãŠããéã®ãªãºã ãéåããŠããŸããŸãã ããããªã«ã€ãŒã³ã®éèŠæ§ æè¿ãã éŠå·ç·šéé· ããšã¿çç£æ¹åŒ åæãã« (çç£éãã100åãã«ããããšã¿çç£æ¹åŒã®ç§å¯) | ããšã¿ã€ã 㺠ããšãã YouTube ã®åç»ãèŠãŸãããèèå矜ã¡ãŒã«ãŒãè¹æ©ãã®å»ççšé²è·ã¬ãŠã³ã®çç£ãããšã¿ç€Ÿå¡ãã«ã€ãŒã³ããŠçç£æ§ã100åã«ãããšãã話ã§ãã www.youtube.com ããã§è¡ãããŠããã®ã¯ããææ°æ©åšãå°å
¥ããŸããããã¿ãããªè©±ã§ã¯ãªãããããã«ããµãããããŠãããã1ç§æ©ããªãããšãã£ãæçŽãªã¢ã€ãã¢ã§ããã ãŸããã¯ã¬ãã£ã»ãŸã³åžžååç· åœ¹CTOã®å°éåä¿ããã®èæžã ãã®ä»äºãå
šéšãããŠã¿ããââïŒïŒ
ã®æ¬è³ªãã€ãããã·ã³ãã«ãªèãæ¹ã ãã§ããæ¯æ¥ã®ãç¹°ãè¿ããããããã°ã©ããŒççºæ³æ³ã§å¹çåããããšã®éèŠæ§ã説ããŠããŸãã ã¡ãã£ãšããããšã§ãæ¥åžžã§è¡ããããç¹°ãè¿ãåŠçããã«ã€ãŒã³ããŠããããšã¯ãããŒã ã®çç£æ§ã»ã¹ã«ãŒããããäžããããã«éèŠã§ããããšåŠã³ãŸããã GitHub Actions ã§èªåã§ç»é²ãã GitHub Actions ã§ issueäœæãããã¯ã«ãæå®ãã GitHub Project ãžè¿œå ããããšãããã®ãã Marketplace ã§å
¬éãããŠããŸãããããã alex-page/github-project-automation-plus ã§ãã github.com èšå®æ¹æ³ã¯ããããã§ã次ã®ãã㪠yaml ãã¡ã€ã«ã .github/workflows/ é
äžã«å
¥ããã ãã§ãã name: 'Automatically add issue to basebankdev project' on: issues: types: [opened] jobs: automate-project-columns: runs-on: ubuntu-latest steps: - name: Move issues into pj column uses: alex-page/github-project-automation-plus@v0.2.4 with: project: githubprojet column: Backlog repo-token: ${{ secrets.AUTOMATION_TOKEN }} ã©ã®ã€ãã³ããããªã¬ãŒã«ãããã¯ãããžã§ã¯ãã«ãããŸãããæ¬ãããžã§ã¯ãã§ã¯ã issues ã® opened ã®ã¿ãã€ãã³ãããªã¬ãŒã«æå®ããããšã§ãäœææã® issue ã GitHub Project ã«ç»é²ããããã«ããŠããŸãã docs.github.com 泚æç¹ãšããŠã¯ãã¬ããžããªã§ã¯ãªããOrganization å
ãããžã§ã¯ãããŒãã«ããŠããå Žåã¯ã secrets.GITHUB_TOKEN ã§ã¯ãã®ãããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããæš©éãæã£ãŠããŸããã docs.github.com ãã®ãããå°çšã« admin:org ã scope ã«å«ãã Personal Access Token ãèšå®ããå¿
èŠããããŸãã ããã«ãããIssueäœææã® GitHub Project ã®æåæå®ãšãäœæããIssueãå®éã«ãããžã§ã¯ãã®ã«ã©ã ïŒcolumnïŒã«è¿œå ããäœæ¥ãäžèŠã«ãªããŸããGitHub Project ã§ Issue ããã©ããã³ã°ããéçšã«ãããäœæ¥ã®ãªãºã ãæ¹åãããŸããã ISSUE_TEMPLATEã®äœ¿ãåã ãã®ä»ã«ããã¹ããªã³ãèšç»ãã¬ããã¹ãã¯ãã£ãã®èšé²ã»ã¢ãžã§ã³ããã GitHub Issue ã§è¡ãªã£ãŠãããããè€æ°ã® ISSUE_TEMPLATE ãçšæããŠããŸãã $ tree -L 1 .github/ISSUE_TEMPLATE .github/ISSUE_TEMPLATE âââ backlog_template.md âââ config.yml âââ retrospective_template.md âââ sprint_planning_template.md ISSUEäœææã¯ãäžå³ã®ããã«è€æ°ã®ãã³ãã¬ãŒãããéžæããããã«ãªããŸãã 坿¬¡çãªå¹æãšããŠããã³ãã¬ãŒãåãããããšã§ãããããã®ã€ãã³ãã®åžäŒãããŒããŒã·ã§ã³ã§ããããã«ãªã£ãŠããŸãã以åãã æäŒã®åžäŒã¯ããŒããŒã·ã§ã³ããªã¹ã¹ã¡ ããšããããã°ãšã³ããªãŒããããŸããã www.agile-studio.jp ãã®ç¿æ
£ã€ãã³ãã®ç¶ç¶æ§ãåœäºè
æèã®é«ãŸããªã©ãæåŸ
ããããšèšã話ã§ãã å®éã«æè¿ããŒã ã§ãã¬ããã¹ãã¯ãã£ãã®åžäŒã»ãã¡ã·ãªããŒã¿ãŒãããŒããŒã·ã§ã³ããŠããŸãããããããã®èŠç¹ã§æ§ã
ãªã«ã€ãŒã³ç¹ãèŠã€ãããããŒã éå¶ãå¹çåããã广ãæããŠããŸãã ïŒäŸïŒ Miro ã®æ¯ãè¿ããã³ãã¬ãŒããèªäœããŠçšæãã ISSUE_TEMPLATE ã«æ¯å話ãã«äžããç¹ã远å ãã ãããã« ã¡ãã£ãšãã GitHub Project éçšã®ã«ã€ãŒã³è©±ã§ãããããã«ã§ãåãçµããå
容ãªã®ã§ã䌌ããããªéçšããããŠããããåèã«ããã ããã°å¹žãã§ãã
ã¯ããã« CTOã®å·å£ ( id:dmnlk ) ã§ãã 5æã« ãªã³ã©ã€ã³meetup ããããŠé ããã®äžã§ãå
·äœçãªè² è·å¯Ÿçã«é¢ããŠã¯éçºããã°ã§ïŒããšèšã£ãŠããä»¶ã§ããæ°ã¥ããããã9æã«ãªããããŠããŸããã ã³ããçŠã«ãããŠãããã·ã§ããäœæãµãŒãã¹ãBASEãã®å©çšè
æ§ãæ¥å¢ããŸããã www.nikkei.com 5 æã«ã¯ 100 äžã·ã§ãããè¶
ããã·ã§ãããªãŒããŒæ§ã«ãå©çšããŠããã ããŠãããŸãã ä»ãŸã§ EC äºæ¥ãè¡ã£ãŠããªãã£ã飲é£åºæ§ãæ§ã
ãªæ¥çš®ã®æ¹ãå©çšãã¯ãããŠããã ããã·ã§ãããªãŒããŒæ§ã賌å
¥è
æ§å
±ã«çæã®èŠéãã§ã¯æ³å®ãããŠããªãã¢ã¯ã»ã¹ãçºçããŸããã ãã®éäžã§ã·ã¹ãã ãšããŠå¯Ÿå¿ããããªãé¢ããããã¢ã¯ã»ã¹è² è·ã«ãããµãŒãã¹ã®äžå®å®ãæãçæ§ã«ã¯ãäžäŸ¿ã販売æéã倿ŽããŠããã ããé¡ããªã©ãããŠããŸã倧å€ç³ãèš³ãããŸããã§ããã çŸåšã§ã¯å®å®ããŠãããŸããããã®äžã§äžäœ BASE ã«ã¯ã©ã®ãããªåé¡ãçºçããŠããã®ãããããããã«ããŠè§£æ±ºããã®ããå
¬éãããŠããã ãããšæããŸãã BASEã®ã·ã¹ãã æ§æã«ã€ã㊠BASE ã¯æ§æãšããŠã·ã³ãã«ãª Web ã¢ããªã±ãŒã·ã§ã³ã«ãªã£ãŠããããªãŒããŒæ§åã管çç»é¢åã³ PC ãã¹ããŒããã©ã³ã§ã¢ã¯ã»ã¹ãããã·ã§ããç»é¢ãæäŸããã¢ããªã±ãŒã·ã§ã³ãã·ã§ããã³ã°ã¢ããªãBASEãåã API ã¢ããªã±ãŒã·ã§ã³ããµãŒãããŒãã£åã API ã¢ããªã±ãŒã·ã§ã³ãªã©ããããããŒã¿ããŒã¹ã¯åäžã®ãã®ããããããåç
§åã³æžã蟌ã¿ãè¡ã£ãŠããŸãããã°ç³»ããŒã¿ã®ã¿ããŒã¿ããŒã¹ãå¥ã«ããŠãããŸãã ã¢ã¯ã»ã¹ãå¢ãããšãã®ããŒã¿ããŒã¹ã®è² è·ãé«ããªããŸããWebAP ãµãŒããŒã«é¢ããŠã¯ããçšåºŠã¹ã±ãŒã«ã¢ãŠããã¹ã±ãŒã«ã¢ãããæè»ã«è¡ããããã«ãªã£ãŠãããŸãããããŒã¿ããŒã¹ã«é¢ããŠã¯ããã¯ãããŸããã ããŒã¿ããŒã¹ã¯ Amazon Aurora MySQL ãå©çšããŠããŸãã èªã¿èŸŒã¿ã«é¢ããŠã¯ reader ã€ã³ã¹ã¿ã³ã¹ãå¢ããããšã§ã¹ã±ãŒã«ã¢ãŠããå¯èœã§ããæžã蟌ã¿ã«é¢ããŠã¯å®¹æã«ã¯å®çŸã§ããŸããã DBãžã®æ°èŠæ¥ç¶ã¿ã€ã ã¢ãŠãåé¡ ã³ããçŠã«ãããŠå©çšè
ãå¢ããŠããæäžã1 æ¥ã®äžã§ãã¢ã¯ã»ã¹ãå€ãå€é垯ã§ã¢ããªã±ãŒã·ã§ã³ã§ãšã©ãŒãå€ãçºçããç¶æ
ã芳枬ããå§ããŸããã ãã®ãšã©ãŒã¯ DB ãžã®æ¥ç¶æã« SQLSTATE[HY000] [2002] Connection timed out ãšãããã®ã§ããã ãã®ãšããAurora ã®ã¡ããªã¯ã¹ãšããŠé害ã«ãªããããããªãã®ã¯èŠåœãããŸããã§ããã Connection æ°ã Max Connection ã®äžéã«éããŠããŸã£ãŠãããªãã°ã Too many connections ã®ãšã©ãŒãåºãŠããã¯ãã§ããçºçããŠããŸããã CPU ã memory ã«é¢ããŠãäœè£ããããŸããã ãã®ãšã©ãŒãçºçããŠãããšãããã©ãŠã¶äžã§ã®ã¢ã¯ã»ã¹ãéåžžã«åŸ
ããããç¶æ
ã§ãã ããã«ã瀟å
管çç»é¢ã®ãããªã¢ã¯ã»ã¹ãéåžžã«å°ãªãã¢ããªã±ãŒã·ã§ã³ã§ãåæ§ã®ãšã©ãŒãçºçããŠããã®ã§ Apache ãªã©ã® WebAP ãåå ã§ãªããšæšå¯ããŠããŸããã åå ãåãããªãç¶æ
ã§ã¯ãããŸãããããã®ãŸãŸæŸçœ®ããããšãåºæ¥ãå©çšè
ããŸã ãŸã å¢ããŠããæäžã§ããã®ã§äœãããã®å¯Ÿçãæã€å¿
èŠããããŸããã New Relic ãªã©ã®ãããã¡ã€ãªã³ã°ããŒã«ãçšããŠç¶æ
ãèŠãŠãããšãããMySQL ãžã®æ¥ç¶ã«éåžžã«æéãããã£ãŠããããšã¯ããããŸããã ããã¯ã¯ãšãªã®éãã«äŸãããéåžžã«ã·ã³ãã«ãª SELECT ã§ãèµ·ããŠããŸããã èšå®ã§ã¿ã€ã ã¢ãŠã㯠30 ç§ã«èšå®ããŠããã®ã§ MySQL ãžã®æ¥ç¶ããèªäœã« 30 ç§ããã£ãŠããŸãã¢ããªã±ãŒã·ã§ã³ãšããŠãšã©ãŒã«ãªã£ãŠãããšããããšã§ãã äœãèµ·ããŠãããã¯åããããäœæ
èµ·ããŠãããåãããªãç¶æ
ã§æãŠãæã¯å€ããããŸããã ã¢ããªã±ãŒã·ã§ã³ã§æéã®ããã£ãŠããåŠçãªã©ãå°ãã§ãæ¹ä¿®ãããšããããšã¯è¡ã£ãŠããŸãããç®ã«èŠãã广ã¯å€§ãããããŸããã§ããã ã€ã³ã¹ã¿ã³ã¹ã®ã¹ã±ãŒã«ã¢ãã ããŸãè€ãããããã®ã§ã¯ãããŸãããããšãããã primary ã€ã³ã¹ã¿ã³ã¹ã®ã¹ã±ãŒã«ã¢ãããè¡ãããšã«ããŸããã æ·±å€ã«ç·æ¥ã¡ã³ããã³ã¹ãè¡ããprimary ã€ã³ã¹ã¿ã³ã¹ã®ã¹ã±ãŒã«ã¢ãããè¡ããŸããã 1段éäžäœã®ã€ã³ã¹ã¿ã³ã¹ãžã®ã¹ã±ãŒã«ã¢ãããè¡ã£ãããšãç¶æ
ã¯æ¹åããŸããã äžèšã®ãšã©ãŒã¯å€é垯ã§ãçºçããªããªããçç±ã¯ããããªããäœãããã®å¯Ÿçã«ã¯ãªã£ããšèžãæ«ã§äžãããŸããã ãããããã 2 é±éã»ã©çµã£ãããšåæ§ã®ãšã©ãŒãåçºããããã«ãªã£ãŠããŸããŸããã ã¢ã¯ã»ã¹ã¯æŽã«å¢ããŠããã®ã§ããŸãäœãããã®æ§èœéçã«éããŠããŸã£ãã®ã ãšããããšãããããŸããã ã€ã³ã¹ã¿ã³ã¹ã®ã¹ã±ãŒã«ã¢ããã¯ãŸã å¯èœã§ã¯ãããŸããããå»¶ã
ãšäžãç¶ããããã«ããããŸããã ã³ã¹ãããã©ãŒãã³ã¹ã®é¢ã§ãç¡é§ã倧ããããŸãããåå ãåãããªã以äžåæ§ã®åé¡ã«ã¶ã€ããããšã¯èªæã§ãã äºå®ããšã©ãŒãçºçããŠããç¶æ³ã§ã Aurora ã® CPU 䜿çšç㯠10%çšåºŠããäžãã£ãŠããŸããã åŒç€Ÿã§ã¯ AWS ã®ãšã³ã¿ãŒãã©ã€ãºãµããŒãã«å å
¥ããŠããŸãã®ã§ãAWS ã®æ¹ã«ã調æ»ãäŸé ŒããŸããã åçš®ã¡ããªã¯ã¹ã®æç€ºãããšã©ãŒçºçæã®ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãªã©ã AWS åŽã«æåºããŸããã back_logãã©ã¡ãŒã¿ã®å€æŽ æ°æ¥åŸ AWS ã®æ¹ãããback_log ãã©ã¡ãŒã¿ã®å€æŽãæ€èšããŠã¯ã©ããããšããåçãåŸãŸããã AWS ã®èŠ³æž¬ã«ãããšåœè©²æé垯ãDB ãžã®æ°èŠæ¥ç¶ãæ°äžãè¶
ããŠãã SYN ã®åéãèµ·ããŠãããšããããšãããããŸããã ãã㯠Aurora åŽã§æ°èŠæ¥ç¶ãåãä»ããããŠããªãç¶æ
ã§ãã æ°èŠæ¥ç¶ãå€ããªããããŠãAurora ã® back_log ãæº¢ã SYN/ACK ãè¿åŽã§ããªããã SYN ã®åéãè¡ãããŠããŸã£ãŠããŸãã back_log ãã¥ãŒã¯ããµãŒãã¢ããªã±ãŒã·ã§ã³ã listen ããŠãããœã±ããããaccept ããŠããªãç¢ºç«æž TCP ã³ãã¯ã·ã§ã³ãä¿æãããã¥ãŒãã§ããããããæº¢ããŠããŸããš Aurora(ãµãŒããŒ)ããã±ããã drop ããŠããŸããã SYN ã®åéãçºçããŠããŸããšããããšã«ãªããŸãã https://blog.cloudflare.com/syn-packet-handling-in-the-wild/ http://u-kipedia.hateblo.jp/entry/2015/01/01/001135 Aurora ã«ã back_log ãèšå®ãããŠããããã®ããã©ã«ãå€ã¯ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã«ãã£ãŠèªåçã«åŒãäžããããŸãã ã¹ã±ãŒã«ã¢ããã«ãã£ãŠäžæçã«æ¹åãããã®ã¯ããã® back_log ãã©ã¡ãŒã¿ãåŒãäžããããããšã«ãã£ãŠäžæçã«åãå
¥ããããæ°èŠæ¥ç¶ãå¢ããããšã«ãããã®ã§ããã 床éãªãã¢ã¯ã»ã¹å¢ã«ãã£ãŠæŽã«æ°èŠæ¥ç¶ãå¢ãããããåŒãäžããããäžéãè¶
ããããå床 back_log ããæº¢ããŠããŸãæ¥ç¶ã drop ããŠããŸã£ãããã§ãã ãã®ãã©ã¡ãŒã¿ã®å€æŽã¯ããŒã¿ããŒã¹ã® restart ã䌎ãããããªã³ã©ã€ã³ã§è¡ãããšã¯ã§ããŸãããfailover ãè¡ããããšã¯ãããµãŒãã¹ã®åæ¢ãå¿
èŠã§ãã çŽè¿ã«æ·±å€ã¡ã³ããã³ã¹ãè¡ã£ãã°ããã§å¿èŠãããšããã§ã¯ãããŸããããã·ã¹ãã ã®å®å®åã®ããã«å¿
èŠãªæªçœ®ãšããŠå床深å€ã¡ã³ããã³ã¹ãè¡ã back_log ãã©ã¡ãŒã¿ãåŒãäžããããšã«ããŸããã ããã¯ãã©ã¡ãŒã¿ã°ã«ãŒãã§ãã back_log ãšãããã©ã¡ãŒã¿ã«ãªãã®ã§ãããã max_connections ãšåå€ã«å€æŽããŸããã ããã«ããã·ã¹ãã ã®å®å®åºŠã¯å€§ããåäžããŸããã ãã®ä»ã®ããŒã¿ã¹ãã¢ãžã®å¯Ÿå¿ BASE ã§ã¯ MySQL ã ãã§ãªã Memcached ã Redis ãå©çšããŠããŸãã ããããèªç€Ÿã§éçšããŠããã®ã§ã¯ãªããããŒãžããµãŒãã¹ã® Amazon ElastiCache ãå©çšããŠããŸãã ããŒã¿ããŒã¹æ¥ç¶ã«é¢ããŠåé¡ããªããªã£ãããšã§äžèšã®ããŒã¿ã¹ãã¢ãžã®ã¢ã¯ã»ã¹ã«åæ§ã®ãšã©ãŒãçºçããŠããããªããšãåãã£ãŠããŸããã Amazon ElastiCache ã§ã¯ Aurora ã®ããã« back_log ãã©ã¡ãŒã¿ã®å€æŽãåºæ¥ãŸããã ããã§ã¢ããªã±ãŒã·ã§ã³åŽã§å¯Ÿå¿ããããšã«ããŸããã PHPã§ã®æ€çŽ¢çµæPersistent Connectionã«ã€ã㊠æ°èŠæ¥ç¶ãéœåºŠè¡ãã®ã§ã¯ãªãã³ãã¯ã·ã§ã³ããŒãªã³ã°ã®ããã«åå©çšããããšã§æ°èŠæ¥ç¶ãæžããããšãã§ããŸãã MemcachedãRedis ã®ã³ãã¯ã·ã§ã³ãªããžã§ã¯ãäœææã«ããããã«ãªãã·ã§ã³ãæå®ããããšã§å¯èœã§ãã PHP ã§ã¯ããã Persistent Connectionãæç¶çæ¥ç¶ãšåŒã³ãŸãã äžèšã®ããã¥ã¡ã³ããåç
§ãæç¶çæ¥ç¶ãè¡ãããšã§ç¢ºç«ããæ¥ç¶ãç¶æãããŸãŸãæ°ããªæ¥ç¶ãåãä»ããããã«ããŸããã https://www.php.net/manual/ja/memcached.construct.php https://github.com/phpredis/phpredis#pconnect-popen BASE ã®ã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã§ã¯ Blue-Green deployment ãå©çšããŠããããããããã€æ¯ã«æ°èŠã€ã³ã¹ã¿ã³ã¹çŸ€ãå¢ããŸãã åŸ
æ©ç³»ã«ãªã£ãã€ã³ã¹ã¿ã³ã¹çŸ€ãããããã€åŸã§ãæ¥ç¶ãä¿æããŠããŸãã®ã§ httpd ã® restart ãè¡ãå¿
èŠããããŸããã ãªããMySQL ãžã®æ¥ç¶ã«ã Persistent Connection ãè¡ãããšã¯å¯èœã§ãã PDO::ATTR_PERSISTENT ã«ãã£ãŠç®¡çãããŸãã æå¹ã«ããããšã¯ãã©ã°ããªã³ã«ããã ããªã®ã§å®è£
ã³ã¹ããã»ãŒæãããŸããã https://www.php.net/manual/ja/features.persistent-connections.php ã§ãã倧ããªãã¡ãªããããããŸãã ããã¥ã¡ã³ããåç
§ãããš èŠå æç¶çæ¥ç¶ã䜿çšããéã«ã¯ãŸã ããã€ãå¿ã«çããŠããå¿
èŠãããæ³šæ ç¹ããããŸããäžã€ã¯æç¶çæ¥ç¶ã§ããŒãã«ãããã¯ããå Žåã«ã¹ã¯ãªãã ãäœããã®çç±ã§ããã¯ãå€ãæãããšããã以éã«å®è¡ãããã¹ã¯ãªãã ããã®æ¥ç¶ã䜿çšãããšæ°žä¹
ã«ãããã¯ãã€ã¥ããŠããŸãããŠã§ããµãŒããŒã ããŒã¿ããŒã¹ãµãŒããŒãåèµ·åããªããã°ãªããªããªããšããããšã§ãããã äžã€ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠããå Žåã«ããã©ã³ã¶ã¯ã·ã§ã³ããã㯠ãçµäºããåã«ã¹ã¯ãªãããçµäºããŠããŸããšããã®ãããã¯ã¯æ¬¡ã«åãæ¥ç¶ã䜿çšããŠå®è¡ãããã¹ã¯ãªããã«åŒãç¶ãããããšããããšã§ãã ã©ã¡ãã®å Žåã§ã register_shutdown_function()ã䜿çšããŠããŒãã«ã® ããã¯ãè§£é€ããããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããç°¡åãªã¯ãªãŒã³ ã¢ãã颿°ãç»é²ããããšãã§ããŸããããããããããè¯ãæ¹æ³ã¯ãããŒãã«ããã¯ããã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã¹ã¯ãªããã§ã¯æç¶çæ¥ç¶ãäœ¿çš ãããåé¡ãå®å
šã«é¿ããŠéãããšã§ã(ä»ã®ç®æã§äœ¿çšããåã«ã¯åé¡ã ããŸãã)ã ãšãããŸãã ããã¯æ¥ç¶ãç¶æ
ãæã£ãŠããŸããããããã®ã±ã¢ãã¢ããªã±ãŒã·ã§ã³å®è£
ããªããã°ãããªããšããããšã§ãã ãã©ã³ã¶ã¯ã·ã§ã³åŠçã®ããã«ããã¯ã確ä¿ããŠããæ¥ç¶ããšã©ãŒã«ãªã£ãŠããŸã£ãå Žåãªã©ã«ãã®æ¥ç¶ã¯ããã¯ã確ä¿ãããŸãŸã«ãªã£ãŠããŸããŸãã å¥ã®ãªã¯ãšã¹ãããã®æ¥ç¶ãå©çšãšãããšã±ã¢ãããŠããªãå Žåãããã¯ããŠããŸãã®ã¯æŽãªãé害ãçãã§ããŸããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãåæ§ã§ãã register_shutdown_function ã«ããã¯ããã©ã³ã¶ã¯ã·ã§ã³ãè§£é€ãããããªä»çµã¿ãäœããªããã°ãªããŸããã ãã®åŠçãæ£ããåãããšãæ€èšŒããããšã¯çžåœéã®æ€èšŒãå¿
èŠã«ãªãã§ãããã ãã®ãããBASE ã§ã¯ DB æ¥ç¶ãžã¯ Persistent Connection ãå©çšããããšãæ¡çšããŸããã§ããã æ°èŠæ¥ç¶ã®éç back_log ã®èª¿æŽãä»ããŒã¿ã¹ãã¢ã® Persistent Connection ã«ãã£ãŠãã°ããã¯å®å®çšŒåãããããšãã§ããŸããã ãããããã®æã® BASE ã®ã¢ã¯ã»ã¹éã®äŒžã³ã¯åãŸãããã®æ§æã§ãæ¥ç¶ãšã©ãŒãçºçããããã«ãªã£ãŠããŸããŸããã ããŒã¯æã«ç§é 2 äžãã®æ°èŠæ¥ç¶ã primary ã€ã³ã¹ã¿ã³ã¹ãžè¡ãããŠãããšãã£ãç¶æ
ã§ãã æ®ãããææ®µã¯ primary ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠã®æ¥ç¶æ°ãåŠäœã«ããŠæžãããããšããããšã®ã¿ã§ãã åè¿°ã®ããã« PHP ã® Persistent Connection ã䜿ãããšã¯æ°ããªãªã¹ã¯ãå¢ããããšã«ãªããŸãã äžè¬çã« PHP+MySQL ãšããæ§æã ãš ConnectionPool ãçšããããšã¯çšã§ãããªã®ã§å©çšã§ããããã«ãŠã§ã¢ããããŸã§å€ãã¯ãããŸããã ProxySQL ã MaxScale ãšããããã«ãŠã§ã¢ããããŸããããããã®æ€èšŒãè¡ãæéçäœè£ããããŸãããããããå©çšããå Žåãããèªäœã®å¯çšæ§ãªã©ãæ€èšŒãéçšããå¿
èŠããããŸãã AWS ãããããŒãžãã®ã³ãã¯ã·ã§ã³ããŒãªã³ã°ãšãåŒã¹ã RDS Proxy ããããŸãããã®æç¹ã§ã¯ãŸã GA ã«ãªã£ãŠããããããã¯ã·ã§ã³ç°å¢ã«æå
¥ã§ããŸããã ããã§åºæ¥ãããšã¢ããªã±ãŒã·ã§ã³åŽã®æ¥ç¶ãããã« reader ã€ã³ã¹ã¿ã³ã¹ã«è¡ããããšããããšã§ãã ããã¯ã¯ãšãªã reader ã«åãããšããããããè² è·å¯Ÿçã§ã¯ãªããæ°èŠæ¥ç¶èªäœã reader ã«æåããåãããšããããšãæ±ããããŸãã åŒç€Ÿã§ã¯ããŒã¿ããŒã¹ãžã®ã¯ãšãªå®è¡ã primary ã reader ãžæ¯ãåããã®ã«åŒç€Ÿã¡ã³ããŒãäœã£ãã©ã€ãã©ãªãå©çšããŠããŸãã ã©ã®ãããªã©ã€ãã©ãªãªã®ãããšããã®ã¯äžèšã¹ã©ã€ããåç
§ããŠãã ããã ãã®ã©ã€ãã©ãªã®èšå®å€ã®äžã§ default_read ãšãããã©ã¡ãŒã¿ã true ã«ããããšã§æ°èŠæ¥ç¶ã®æç¹ã§ reader ã€ã³ã¹ã¿ã³ã¹ãžæ¥ç¶ãåããããšãå¯èœã§ãã Aurora ã¯ãã®ã¢ãŒããã¯ãã£äžãäžè¬çã«èšããã primary ãš reader ã€ã³ã¹ã¿ã³ã¹éã®ããŒã¿åæ ã©ã°ããšãŠãå°ãããªãããã«ãªã£ãŠããŸããæå€§ã§ã 100ms ãè¶
ããããšã¯ãããŸããã ã§ãããå
šãã®ãŒãã§ãªãã®ã§ãã®ã©ã°ãèŽåœçãªäžå
·åã«ãªãããšããããŸããã·ã§ãããªãŒããŒã倿ŽããäŸ¡æ Œãåæ ãããã«æ±ºæžãããŠããŸããååã®åšåº«ãè¶
éããŠæ±ºæžãè¡ããããšãã£ãäžå
·åã ãã¯çµ¶å¯Ÿã«é¿ããã°ãªããŸããã ãªã®ã§ default_read ãã©ã¡ãŒã¿ãæå¹ã«ããéçšããŠããŸããã æ¹ããŠãBASE ãšããã¢ããªã±ãŒã·ã§ã³ãèŠçŽããšäž»ã« 3 ã€ã®ç»é¢ã«åå²ãããŸãã ã·ã§ãããªãŒããŒç®¡çç»é¢ ã·ã§ããæ
å ±ãååæ
å ±ã衚瀺ãã賌å
¥è
ãé²èЧããã·ã§ããç»é¢ 決æžåŠçãè¡ãã«ãŒãç»é¢ ãããã¯ãµããã¡ã€ã³ã§åãåããããŠããŸãããã³ãŒãåã³çšŒåãµãŒããŒã¯åäžã§ãã ãã®äžã§ 1 ãš 3 ã«é¢ããŠã¯æŽæ°åŠçãå€ãè¡ãããŠããããã®æŽæ°åŠçã«äžæŽåãèµ·ãããšèŽåœçãªäžå
·åãšãªããŸãã ã§ããã2 ã®ã·ã§ããç»é¢ã«é¢ããŠã¯æŽæ°åŠçã¯ã»ãšãã©ãããŸããããã£ãŠãã·ã§ãããžã®ãåãåãããããç»é¢ããã£ããçšã®åŠçãããããäž»ãšãªããŸãã ããã ãã«çµããªãã°ãdefault_read ã true ã«ãããšããéžæè¢ã¯åããã®ã§ã¯ãªãããšèããŸããã æããªã¯ãšã¹ããå€ãã®ããã®ç»é¢ã«ãªãã®ã§å¹æã¯å€§ãããªãããšãæ³å®ã§ããŸãã åœå㯠1 ãš 3 ã®ã€ã³ã¹ã¿ã³ã¹çŸ€ãš 2 ã®ã€ã³ã¹ã¿ã³ã¹çŸ€ãå¥ã®ãµãŒããŒãšããŠæ¯ãåãããã®å Žåã®ã¿èšå®å€ã倿Žããããšãæ€èšããŸããããæ°èŠæ¥ç¶ãããåã«ãªã¯ãšã¹ãæã®ãµããã¡ã€ã³ã«ãã£ãŠãã®èšå®å€ãå¯å€ã«ã§ããããšã倿ããã®ã§ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å€æŽãè¡ããŸããã çµæãšããŠå¹æã¯èŠ¿é¢ã§ããã äžèšã¹ã©ã€ãã«ãäžããããŠããŸãããäžèšã®ããã« primary ã€ã³ã¹ã¿ã³ã¹ãžã®æ¥ç¶ã¯å€§å¹
ã«æžå°ã reader ãžã®æ¥ç¶ãå¢ããããšãã§ããŸããã connection count äžèšã®å€æŽã«ããå§åçã« BASE ã®å®å®åºŠã¯åäžããããŒã¯åž¯ã«ãããŠãããŒãžãéãã£ããæ±ºæžãã§ããªãããªã©ãšãã£ãããšããè§£æŸãããŸããã äœè«ãšã¯ãªããŸãã CakePHP2 ã¯ããŒã¿ãœãŒã¹æ¯ã«æ°èŠæ¥ç¶ãäœããŸãã ããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ãå¥ã§ããã°ãã¡ããã®ããšãè«çããŒã¿ããŒã¹ãåå²ãããŠããã°ãã®åããŒã¿ãœãŒã¹ãåããããã®ã§æ¥ç¶ãå¢ããããšã«ãªããŸããã€ã³ã¹ã¿ã³ã¹ã¯åäžã§ããã¢ã«ãŠã³ãæ
å ±ãšæ³šææ
å ±ãªã©ãè«çããŒã¿ããŒã¹ã§åãããšãã£ãããšã¯ããããæ§æã§ããããããå
šãŠå¥åã®æ°èŠæ¥ç¶ãçãã§ããŸããŸãã 1 ç»é¢ã衚瀺ãã 1 ãªã¯ãšã¹ãã«ãé¢ãããè€æ°ã®æ°èŠæ¥ç¶ãçãã§ããŸãã®ã§ãããããŸã 1 ã€ã®æ¥ç¶ãåãåãããããªä»çµã¿ãéçºããããšãæ°èŠæ¥ç¶ãæžããããã«æå¹ãšãªããŸãã ãŸãšã ä»å BASE ã«ãããŠæ³å®å€ã§ããæªæŸæã®è² è·ã§ãã£ãããšã¯èšããŸã§ããããŸããã ã¹ã±ãŒã«ã¢ããã ãã§ã¯å¯Ÿå¿ã§ããªããã¢ããªã±ãŒã·ã§ã³ã®åçŽãªãã¥ãŒãã³ã°ã ãã§ã¯ã©ãã«ããªããªããšããäºè±¡ã«åããŠééããŸããã ãã®äžã§ãäŸãã¯ã©ãŠãã€ã³ãã©ãå©çšããŠããŠãåºç€çãªããã«ãŠã§ã¢ã Linux ã®ç¥èãªã©ãéåžžã«éèŠã§ããããšãã¢ããªã±ãŒã·ã§ã³ã®æ§æãæ£ããçè§£ãã©ã®ã¬ã€ã€ã§ããã°æãåã£ã察çãæãŠãããšãã£ãããšãç¥ã£ãŠããããšã®éèŠæ§ãåèªèããŸããã åãããŠãåçŽãª DB ã® cpu/memory 䜿çšçã ãã§ãªãæ°èŠæ¥ç¶ã®æ°ãªã©æ§ã
ãªã¡ããªã¯ã¹ãç£èŠããããšãéèŠã«ãªããŸãã ãªããAurora 1.19 ã«ããŒãžã§ã³ãäžãããš ConnectionAttempts ãšããã¡ããªã¯ã¹ãååŸå¯èœã«ãªããããæ°èŠæ¥ç¶æ°ãã¢ãã¿ãªã³ã°ããããšãå¯èœã§ã(åé¡çºçåœæã¯ããããäœãããŒãžã§ã³ã§ãã)ã AWS ã«ãããŸããšãAuroraã®v2ç³»ã«ããããšã§æŽãªãããã©ãŒãã³ã¹ã®åäžãèŠèŸŒãããšããããšã§ããã®ã§ã¢ããããŒãèšç»ãé²ããŠããŸãã ä»å㯠AWS ã®æ¹ã®ãµããŒããæåãã£ãããšã倧å€å©ãã«ãªããŸããã ãµããŒãã±ãŒã¹ã®è©³çްãèšãããšã¯ã§ããŸããããåŒç€ŸåŽã§ã©ã®ãããªã¡ããªã¯ã¹ãååŸããã°èª¿æ»ã«åœ¹ç«ã€ããå
·äœçãªæ€èšŒçšã®ãœãŒã¹ã³ãŒãã®æäŸãªã©ãããŠããã ãã©ããããã®æ°èŠæ¥ç¶ãè¡ããš Aurora åŽã®éçå€ã«éããããšãã£ã詳现æ
å ±ãŸã§é ããŸããã ãã®ãããã§ BASE ãšããŠã©ããããã³ãã¯ã·ã§ã³ãæžããããšãå¿
èŠãªã®ãã®ç®ç®ãã§ããããã«ãªããŸããã ãã¡ããããã§ã©ããªæã§ãåé¡ãªããšããããã§ã¯ãªããæ°èŠæ¥ç¶ããããããæžããããè² è·ã®ãããåŠçã®åæ£ãå€éšæ±ºæžãµãŒãã¹ãžã®ãªã¯ãšã¹ãã®éåæåãªã©ãŸã ãŸã ãã£ãŠãããªããã°ãªããŸããã ãBASEããšãããã©ãããã©ãŒã ããå©çšããŠããã ãã·ã§ãããªãŒããŒæ§ã賌å
¥è
æ§ã®çæ§ãã©ãã ãå¢ããŠãå¿«é©ã«ãå©çšããã ãããããããããæ¹åãç¶ããŠãããŸãã åŒç€Ÿã§ã¯ãã®ãããªå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ãã©éçšãã¢ããªã±ãŒã·ã§ã³æ¹åãªã©ãå
±ã«é²ããŠãã£ãŠãããã¡ã³ããŒãåéããŠããŸãã äžèšãããå¿åãã ããã binc.jp ãããªãå¿åã§ã¯ãªããã¡ãã£ãšè©±ãèããŠã¿ãããšãã£ãæ¹ã§ããæ°è»œã«ã©ããã Twitterãžã®DMãéæŸããŠããŸãã®ã§æ¯éã twitter.com
ããã«ã¡ã¯ãNative Application Groupã®å€§æšã§ãã2020/08/21ã«éå¬ããã TECH STAND #1 React Native ã«ãŠããæè¿ã®Native Moduleséçºã«ã€ããŠããšããããŒãã§çºè¡šããŸããã æè¿ã®Native Moduleséçºã«ã€ã㊠React Nativeã§ãã€ãã£ãã¢ããªãéçºããŠããŠãå
šããã€ãã£ãã³ãŒãã«è§ŠããªããŠãããããšèšãã°ãå®ã¯ããã§ã¯ãããŸããã ãŸããèªåãã¡ã®ãŠãŒã¹ã±ãŒã¹ã«åãiOS/Androidã®ãã©ãããã©ãŒã æ©èœã«ã¢ã¯ã»ã¹ã§ããReact Nativeã®ã©ã€ãã©ãªãååšããªãå Žåãèªåãã¡ã§Native Modulesãéçºããå¿
èŠããããŸãã ãã®Native Modulesãã©ã®ããã«éçºããReact Nativeã§äœ¿ããããã«ããŠãããã«ã€ããŠã話ããããŠããã ããŸããã Native Moduleséçºã§æããã¹ããã€ã³ãã¯ããã€ãããã®ã§ããããã®çºè¡šã§ã¯ä»¥äžã®ãã€ã³ãã«çµã£ãŠã説æããããŠããã ããŸããã Bob ãšããããŒã«ã䜿ããšNative Moduleséçºã®ããã®ã»ããã¢ãããç°¡åã«ãªã ç¥ã£ãŠããã¹ãã¢ãŒããã¯ãã£ãŒã«ã€ã㊠Swiftãªã©Nativeã¢ãã³ãªèšèªã§éçºããæ¹æ³ react-native-commnity/Expo SDKã¯å®è£
ã®åèã«ãªã ä»åŸãLean Coreã§ã®ã³ã¢æ©èœã®ã¹ãªã åãRe-architectureãªã©ã®åãçµã¿ã§React Nativeã倧ããæ¹åããŠããäžã§ãReact Nativeãžã®çè§£ãããæ·±ããããã®å©ãã«ãªãã°å¹žãã§ãã ãŸãšã ä»åç»å£ããæ©äŒãäžããŠäžãã£ãã€ãã³ãéå¶ã¹ã¿ããã®çæ§ã«æè¬ããããŸãããŸããReact NativeäžçŽè
ãäžçŽè
åãã®å®è·µçãªå
容ãšããããšã§ãä»ã®æ¹ã®çºè¡šãããšãŠãæçšãªç¥èŠãåŸãããšãåºæ¥ãŸããã
ã¯ããã« ããã«ã¡ã¯ããã€ãã£ãã¢ããªããŒã ã®ç§ã§ãã èªåã¯ã¢ãã€ã«ã¢ããªã®éçºã¯ä»ãŸã§ Android ã§ããçµéšããªãã£ãã®ã§ãããæè¿ã¯ iOS ã¢ããªéçºã«ã³ã³ããŒãããŸããã ã¯ãã㯠Storyboard ã®æ±ãã«æ
£ããªãã£ãããAutoLayout ã®èšå®ã«è²ã
ãšèŠæŠããŠããã®ã§ããå°ããã€æ
£ããŠãããŸããã ä»å UITableView ãçšããæ°æ©èœã®éçºãçµéšããiOS ãšã³ãžãã¢ã®å
茩ã«ã¬ãã¥ãŒã§èª²é¡ç¹ããã¶ãåºããŠãããå匷ã«ãªã£ãã®ã§ãããã€ããã€ã³ããããã¯ã¢ããããŠç޹ä»ããŸãã éçºã®ãé¡ ãŸãã¯ç°¡åã«ä»åã®ãé¡ãšãªã£ãæ©èœãå®çŸããã«ããã£ãŠãæ±ããããæåãããã€ã玹ä»ããŸãã 䞻㫠2 çš®é¡ã® UITableViewCell ãå®è£
ããŸã 1 ã€ã¯æåãå
¥åã§ãã UITableViewCellã UITableViewCell ã®äžã« UITextView ãåã蟌ãŸããŠããã UITextView ã«å
¥åããããã¹ããå¢ãããããããã¹ãã«å¿ã㊠UITextView ãªãã³ã« UITextView ã®èŠªãšãªã UITableViewCell ã®é«ãã倿Žããã ããŒã¿ã«ãã£ãŠ UITableViewCell ã®é«ãã¯ç°ãªãã ãã 1 ã€ã¯éžæåœ¢åŒã® UITableViewCellã å Section ã®äžããå¿
ã 1 ã€ã® Cell ãéžæç¶æ
ã«ãªã£ãŠããããšã éžæããã Cell ã¯ãã§ãã¯ããŒã¯ã衚瀺ãããã UITableViewCellã®é«ãã®èšç®ã«ã€ã㊠UITableViewCellã®é«ãã®èŠç©ããããšã UITableView(UICollectionView)ã§ã¯ estimatedRowHeight ã«ãã UITableViewCell ã®é«ãã®èŠç©ãã ãæå®ããããšã§ãå®éã®é«ãã®èšç®åŠçã®ããã©ãŒãã³ã¹ã®åäžãçããŸãããã é©åœãªé«ããæå®ããã°ããããã§ãªããã§ããã ãå®éã®é«ããšã®ãºã¬ãå°ããæžãããã«æå®ããªããšãããŸããããºã¬ã倧ãããšçµå±ã¹ã¯ããŒã«ãã«ã¯ã€ãããããåå ã«ãªãããšããããŸãã ãã¹ãŠã® Cell ã«ãããŠé«ããçããã®ã§ããã° estimatedRowHeight ãæå®ããã°ããã®ã§ãããä»å㯠Cell ã«ãã£ãŠé«ããç°ãªããŸããããã§ tableView(_:estimatedHeightForRowAt:) ãçšããŠå Cell ããšã«èŠç©ããã®é«ããæå®ããŸããã func tableView (_ tableView : UITableView , estimatedHeightForRowAt indexPath : IndexPath ) -> CGFloat { if isHigh(at : indexPath ) { return 300 } return tableView.estimatedRowHeight } func isHigh ( for at : IndexPath ) -> Bool { // é«ãheightãæå®ããã¹ããå€å®ãã // ... } (å®éã®ã³ãŒãã§ã¯ãããŸããã é«ãã®ãã£ãã·ã¥ãèšå®ããŠåå©çšãã Estimating the Height of a Table's Scrolling Area The table view asks for estimates for every item in your table, so do not perform long-running operations in your delegate methods. Instead, generate estimates that are close enough to be useful for scrolling. å
¬åŒããã¥ã¡ã³ãã«ããæžããŠããããã« UITableView ã¯éäžèŠç©ããã®é«ããèŠæ±ããã®ã§ãã§ããã ãçãšãã§å Cell ã®èŠç©ããã®é«ããæ±ããŠè¿ãå¿
èŠããããŸããããã§ tableView(_:willDisplay:forRowAt:) ã§å®éã® Cell ã®é«ããååŸããŠãã£ãã·ã¥ãçæããŸãã ããšã¯ tableView(_:estimatedHeightForRowAt:)ã«ãŠãã£ãã·ã¥ããã height ãããã°ãããèŠç©ããã®é«ããšããŠè¿ããããªåŠçã远å ããŸãã private var cacheCellHeights : [IndexPath: CGFloat] = [ : ] func tableView (_ tableView : UITableView , willDisplay cell : UITableViewCell , forRowAt indexPath : IndexPath ) { cacheCellHeights[indexPath] = ceil(cell.bounds.height) } func tableView (_ tableView : UITableView , estimatedHeightForRowAt indexPath : IndexPath ) -> CGFloat { if let height = cacheCellHeights[indexPath] { return height } if isHigh(at : indexPath ) { return 300 } return tableView.estimatedRowHeight } AutoLayoutã®å¶çŽã¯ã§ããã ãã·ã³ãã«ã« ã¯ãã㯠UILabel ã® height ã®å¶çŽãæå®ããUILabel ã® width ãšè¡šç€ºããããã¹ãã«å¿ããŠå¿
èŠãªé«ããèšç®ããå¶çŽã®å€ãäžæžããããããªããæ¹ã§åçã«é«ãã倿Žã§ãã UILable ãå®è£
ããŠããŸããã以äžã®ã³ãŒãã®ãããªæãã§ãã @IBOutlet weak var label : UILabel ! @IBOutlet weak var labelHeight : NSLayoutConstraint ! // Viewã®åæåããã func apply (text : String ) { // heightã®å¶çŽã®å€ãäžæžã labelHeight.constant = text.height(withConstrainedWidth : label.frame.width , font : UIFont.systemFont (ofSize : 12 )) } extension String { public func height (withConstrainedWidth width : CGFloat , font : UIFont ) -> CGFloat { let constraintRect = CGSize(width : width , height : .greatestFiniteMagnitude) let boundingBox = self .boundingRect(with : constraintRect , options : .usesLineFragmentOrigin, attributes : [.font: font] , context : nil ) return ceil(boundingBox.height) } } ãããä»åã¯ä»¥äžã®ãããªèŠçŽ ã絡ãããšã§ãå¶çŽã®ã³ã³ããªã¯ããèµ·ãããããèšå®ãšãªã£ãŠããŸã£ãŠããŸããã - 端æ«ã®ç»é¢ãµã€ãºã«ãã£ãŠã諞ã
ã® View ã®ãµã€ãºã¯ç°ãªãã - UILabel ã®èŠª View ãšãªã UITableViewCell ã®é«ããäžå€ã§ã¯ãªãã ãªã®ã§é«ãã®å¶çŽã¯åé€ãã芪 View ãšã®äžäžå·Šå³ã®å¶çŽã«çããããšã§ãå¶çŽã®äžæŽåãèµ·ããã«ãããªãããã«ä¿®æ£ããŸããã ç¹ã«ç«¯æ«ã®ç»é¢ãµã€ãºãç°ãªãããšã¯ã¢ãã€ã«ã¢ããªéçºã«ãããŠã¯åžžããããšãªã®ã§ãã§ããã ã AutoLayout ã®å¶çŽãã·ã³ãã«ã«ä¿ããã°ãšæ¹ããŠèªåãæããŸããã UITableViewCellã®ããŒã¿æŽæ°ã«ã€ã㊠reloadRows(at:with:)ã¯æ¥µå䜿çšããªãããš reloadRows(at:with:) ã¯æå®ããã Cell ããªããŒãããã¡ãœããã§ãããªããŒãããéã®ã¢ãã¡ãŒã·ã§ã³ãæå®ã§ããã®ã§ããŠãŒã¶ãŒã«ãããããããªããŒãããŠãã Cell ã瀺ãã®ã«ã¯æå¹ã§ããããããã㯠Cell ã®é«ãã®åèšç®ãªã©ã®åæååŠçãä¿ãã®ã§ããã©ãŒãã³ã¹èгç¹ã§å€çšããããšã¯å¥œãŸãããããŸãããããããŸãã¹ã¯ããŒã«ãªã©ãã«ã¯ã€ãåå ã«ãªãããŸãã èªåãä»åãããããã®ã¯ããŠãŒã¶ãŒã Cell ãéžæãããã³ã« Cell ã®è¡šç€ºãæŽæ°ããããã« reloadRows(at:with:)ãå®è¡ããŠããŸãããããã§ã¯éžæãããã³ã« reloadRows(at:with:)ãèµ°ãã®ã§ãéžææã« TableView ã®è¡šç€ºã厩ãããããããŸããã func tableView (_ tableView : UITableView , didSelectRowAt indexPath : IndexPath ) { // indexPathã«å¿ããããŒã¿ãæŽæ° ... // æŽæ°ããããŒã¿ãUITableViewCellã«åæ ããããã«ã該åœããCellã®ãªããŒããä¿ã tableView.reloadRows(at : [indexPath] , with : .none) } reloadRows(at:with:)ã䜿ããã«ã©ã解決ãããã¯æ¬¡ã®ç« ã§ç޹ä»ããŸãã UITableViewã®åCellã®éžæã®å¶åŸ¡ã«ã€ã㊠åã®ç« ã§è¿°ã¹ããšãããã¯ããã¯éžæããããã³ã«ããŒã¿ã®æŽæ°åã³ reloadRows(at:with:)ã«ãã Cell ã®æŽæ°ãããå®è£
ã«ããŠããŸããã ãããããã§ã¯ä»¥äžã®èª²é¡ããããŸãã éžæãããã³ã« reloadRows(at:with:)ããããšã§ãCell ã®é«ãèšç®ãªã©ã®åæåãèµ°ãããã©ãŒãã³ã¹ããããªãã ä»ã©ã® Cell ãéžæç¶æ
ãªã®ã Model ã®ããŒã¿ãåç
§ããªããšããããªããUITableView ã®ã©ã® Cell ãéžæãããŠããã«ã€ããŠã®éžæç¶æ
ã®ç®¡çã Model åŽã«äŸµå
¥ããããžãã¯ã®å¢çãææ§ã«ãªã£ãŠããã ãããã¯å
茩ã®ã¬ãã¥ãŒã«ãã£ãŠä»¥äžã®ããã«æ¹ä¿®ãããŸããã æ¹éãšããŠã¯ãå Section ããšã«ã©ã® Cell ãéžæãããŠãããã«ã€ããŠéžæç¶æ
ãèªåã§ç®¡çããŠãããšããããUITableView ã§ç®¡çããããã«ãããšããæãã§ãã override func viewDidLoad () { super .viewDidLoad() // è€æ°ã®rowãéžæç¶æ
ãšããŠæ±ãããšãèš±å¯ãã tableView.allowsMultipleSelection = true } override func viewWillAppear (_ animated : Bool ) { super .viewWillAppear(animated) // ç»é¢åæåæã¯ãåsectionã®ã¯ããã®rowãéžæç¶æ
ã«ãã if presenter.numberOfSections() > 0 { for i in stride(from : 0 , to : presenter.numberOfSections (), by : 1 ) { let index = IndexPath(row : 0 , section : i ) tableView.selectRow(at : index , animated : false , scrollPosition : .none) } } } func tableView (_ tableView : UITableView , willSelectRowAt indexPath : IndexPath ) -> IndexPath ? { if let selectedRows = tableView.indexPathsForSelectedRows { let selectedInSection = selectedRows.filter { $0 .section == indexPath.section } for deselectingIndexPath in selectedInSection { tableView.deselectRow(at : deselectingIndexPath , animated : false ) } } return indexPath } func tableView (_ tableView : UITableView , didSelectRowAt indexPath : IndexPath ) { // éžæã«åå¿ããŠãªã«ãå®è¡ãããããžãã¯ãããã°ããã«æžã } @IBDesignable class CustomCell : UITableViewCell { @IBOutlet weak var selectIcon : UIImageView ! override func setSelected (_ selected : Bool , animated : Bool ) { super .setSelected(selected, animated : animated ) selectIcon.isHidden = ! selected } } ãŸã tableView.allowsMultipleSelection = true ãå®è¡ããŠãäžåºŠã«è€æ°ã® Row ãéžæç¶æ
ãšããŠæ±ããããã«ããŸããç¹ã«ä»åã¯ãå Section ã®äžã§ãå¿
ã 1 ã€ã ããéžæãããŠããç¶æ
ã«ããããšãã仿§ããã£ããããéžæç¶æ
ã UITableView ã§ç®¡çããäžã§å¿
é ã®èšå®ãšãªããŸãã ãããŠããã倿Žã®ãã€ã³ããªã®ã§ãããéžæããããã³ã« willSelectRowAt å
ã§ tableView.indexPathsForSelectedRows ããéžæç¶æ
ã«ãªã£ãŠã indexpath ãå²ãåºããããã«ãã®äžãã Select ã®å¯Ÿè±¡ã«ãªã£ãŠã IndexPath ãš section ãäžèŽãã IndexPath ãç¹å®ãããã® IndexPath ã deselect ããŸãã willSelectRowAt åŸã¯ didSelectRowAt ãèµ°ãã®ã§ãdidSelectRowAt å
ã§éžæåŸã«å®è¡ãããåŠçãããã°å®è¡ããŸãããã®ãšã didSelectRowAt å
ã§å¯Ÿè±¡ã«ãªã£ã Row ã deselect ãããããªããšã¯ããŸãããéžæç¶æ
ã¯ä¿æãããŸãŸã«ããŸã ããããããšã«ãã£ãŠãéžæäžã® Cell ã¯ããŒã¿ãåç
§ãããšã indexPathsForSelectedRows ã«ãã£ãŠå€å¥å¯èœãšãªããŸããã ãããŠ éžæç¶æ
ã®ç®¡ç㯠willSelectRowAt ãéžæã«ãã£ãŠå®è¡ãããåŠç㯠didSelectRowAt ãšåŠçã®åé¢ãã§ããŠèŠéããè¯ããªããŸããã ãŸã UITableViewCell åŽã®è¡šç€ºã®å€æŽã¯ãUITableViewCell ã® setSelected(_:animated:) å
ã«æžãããšã§ãUITableViewCell å
ã§å®çµã§ããŸããéžæç¶æ
ã® Cell ã®ã¹ã¿ã€ã«ã«ã€ããŠã¯ã selectionStyle ãçšããŠä»¥äžã®ããã«èšå®ããŠããã°åé¡ãããŸããã cell.selectionStyle = .none ãããã« ä»ã«ãã¬ãã¥ãŒã§ããã£ãã¢ããã€ã¹ã¯è²ã
ããã®ã§ãããä»å㯠UITableView ã«çŠç¹ãåœãŠãŠç޹ä»ããŸãããä»åã®å
容ã¯ãã¡ããåããã³ã¬ã¯ã·ã§ã³ç³»ã® View ãå®è£
ãã UICollectionView ã§ãæå¹ã§ãã ä»å玹ä»ãããããªããã©ãŒãã³ã¹èгç¹ã§ã®å®è£
ã®å·¥å€«ã¯ãiOS ã¢ããªéçºã«å
¥éããæ¹ã«ãšã£ãŠã¯ã¯ããã¯ä»æ§ãå®çŸããã®ã§æäžæ¯ã§ããªããªãæèãããã®ã¯é£ããã®ã§ã¯ãªãã§ãããããã§ããã¹ã¯ããŒã«ã®ã«ã¯ã€ãã View ã®è¡šç€ºãªã©ã®ããã©ãŒãã³ã¹ãæªããšããŠãŒã¶ãŒäœéšã«ã¢ãã«é¿ãã®ã§ãå®éã®ãããã¯ãéçºã«ãããŠã¯å¿
é ã®ãã¯ããã¯ã ãšæããŸãã
ããã«ã¡ã¯ãBASE BANK æ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã TL;DR ããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒãå¯èœãªéãä¿ã€ãŠãŒã¶ãŒã¹ããŒãªãŒã®åå²ã¯ã©ãããã°ããã ãŠãŒã¶ãŒã¹ããŒãªãŒã 1 åã®ã€ãã¬ãŒã·ã§ã³ã§åãŸããªããããªå Žåã«åå²ãã ïŒã€ã®åå²è»žãããŒã¿å¢çã«æ²¿ã£ãŠåå²ãããã»ãããã©ãŒãã³ã¹å¶çŽãã¹ããŒãªãŒã«ãããã»ãã¢ã¯ã¿ãŒã®ã¢ãããŒã·ã§ã³ã§åå²ãããããã£ãŠããŠãŒã¶ãŒã¹ããŒãªãŒãåå²ãã ããžãã¹äŸ¡å€ã®å
èš³èŠçŽ ã«åºã¥ããŠåªå
é äœãèãã åœèšäºã®èæ¯ BASE BANK Dev Division ã§ã®éçºãããžã§ã¯ãã§ã¯ãã¢ãžã£ã€ã«éçºã®èãæ¹ã»åãçµã¿ãåãå
¥ããŠããŸãããã®å°å
¥ã«ã€ããŠã¯ãã å°äººæ°ã§ã®ã¢ãžã£ã€ã«éçºãžã®åãçµã¿å®äŸ ïŒäžæ©ç®ã®èžã¿ã ãæ¹ïŒ | 詳説 | July Tech Festa 2020 ç»å£ã¬ããŒã ãã«ãŠç޹ä»ããŠããŸãã devblog.thebase.in ã¢ãžã£ã€ã«éçºã«ãããŠããŠãŒã¶ãŒã¹ããŒãªãŒãã€ãã¬ãŒã·ã§ã³ããšã«åãŸããããªåœ¢ã§åå²ããããšã¯ããããã¯ãã«å¯Ÿããæ€æ»ãšé©å¿ã®ãªãºã ãåŸãããã«éèŠãªåãçµã¿ã§ãããŠãŒã¶ãŒã¹ããŒãªãŒã倧ãããããã®ããã®ãŸãŸåãçµãããšãããšã倧ããããã«èŠç©èªäœã®ç²ŸåºŠãããèœã¡ãŠããŸã£ããããã®å®çŸã«æéãèŠããããšãã顧客ããã®ãã£ãŒãããã¯ãåŸã¥ãããªããŸãã ä»åã¯ãå®éã«ãããã·ã§ããäœæãµãŒãã¹ãBASEãã®ãããã¯ãéçºã§è¡ããããããé管çç»é¢ã®ãªãã¥ãŒã¢ã«ãã顿ã«ããŸãããããžã§ã¯ããéçºçŸå Žããšã«ãã¿ãŒãªåœ¢ããããŸãã®ã§ãå®å
šãªæ£è§£ãæç€ºãããã®ã§ã¯ãããŸãããããããããã«ãŠãŒã¶ãŒã¹ããŒãªãŒãåå²ããããä»åã®ãããžã§ã¯ããåèäºäŸã«ããŠããã ããã°å¹žãã§ãã åæãšãªãããŒãã£ã«ã«ã¹ã©ã€ã¹ã®èãæ¹ ããŠãŒã¶ãŒã¹ããŒãªãŒåå²ãè¡ããããšããè¡çºã®åæãšããŠãããŒãã£ã«ã«ã¹ã©ã€ã¹ã®èãæ¹ã玹ä»ãããŠããã ããŸãã ããã¯ãã More Effective Agile âãœãããŠã§ã¢ãªãŒããŒâã«ãªãããã®28ã®éæš ããšããæžç±ã§ã¯ããã广çã«ã¢ãžã£ã€ã«ã®äŸ¡å€ãåŒãåºãããã® 1 ã€ã®åºæ¬ååãšããŠç޹ä»ãããŠããŸãã çãã¹ããªã³ããããŸãããã«ã¯ãåãæ©èœãå°ããã€é »ç¹ã«ããªããªãŒããèœåãããŒã ãé€ããªããã°ãªããªããããããæŽ»åããµããŒãããããã«çšããããèšèšã¢ãããŒãã¯ããŒãã£ã«ã«ã¹ã©ã€ã¹ãšåŒã°ãããããŒãã£ã«ã«ã¹ã©ã€ã¹ã¯ãå¢åçã«æ©èœãŸãã¯äŸ¡å€ãããªããªãŒããããã«åã¢ãŒããã¯ãã£å±€ã§å€æŽãè¡ãããšãããã®ã§ããã 9.4 åºæ¬ååïŒããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒ ã€ãŸãããXxxAPI ãå®è£
ããŸããã»ãããŒãã«ã®èšèšãããŸãããšãã£ãã¬ã€ã€ããšã® äœæ¥ã§ã¯ãªã ãŠãããŠãŒã¶ãŒãšããŠèªèº«ã®ã¡ãŒã«ã¢ãã¬ã¹ã倿Žã§ããããšãã£ãããã«ã 1 ã€ã®ãã«ã¹ã¿ãã¯ã®æ©èœ ãæããŸãã ãã®èãæ¹ã¯ãã é人ããã°ã©ã㌠è·äººããåå ãžã®é ãã§ã¯ãã æ³å
匟(Tracer Bullets) ããšããèšèã§è¡šçŸãããŠããŸãããšã³ãããŒãšã³ãã§ããã£ãŒãã£ã«å¿
èŠãªã·ã¹ãã ã®è«çå±€ãã¹ãŠããŸããã§å®è£
ããããšããæããŸãã ãŠãŒã¶ãŒã¹ããŒãªãŒãšã¯ ãŠãŒã¶ãŒã¹ããŒãªãŒãšããèšèãåœããåã®ãã³ã·ã§ã³ã§äœ¿ã£ãŠããŸããããäžå¿ã®æ±ãæ¹ãå«ããŠãæ¹ããŠå®çŸ©ããŠãããŸãã ãŠãŒã¶ãŒã¹ããŒãªãŒãšã¯ããŠãŒã¶ãŒã»é¡§å®¢èŠç¹ã§ã®ããã£ãŒãã£ãèšè¿°ãæããã®ãšãããŠããŸãããããŠããã£ãŒãã£ãšã¯ãœãããŠã§ã¢ã䜿ãåŽã®èŠç¹ã§èšè¿°ããããxxx ç»é¢çã®æ©èœã§ã¯ãªããæ¬²ããååãæ³šæã§ããããšããšãã£ã䜿ãæã«ãšã£ãŠã®äŸ¡å€ã®ããšã§ãã ãããŠããŠãŒã¶ãŒã¹ããŒãªãŒãå®çŸãããšããããšã¯ã䜿ãæã«ãšã£ãŠäŸ¡å€ã®ããåãæ©èœãæ±ãããããããçµæçã«ããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒãå¿
èŠã«ãªããŸãã ç¹ã«æ±ºãŸã£ãèšè¿°åœ¢åŒã¯ç¡ãã§ãããåœãããžã§ã¯ãã§ã¯ã次ã®åœ¢åŒãšããŠããŸããã ïŒãŠãŒã¶ãŒïŒããïŒæ©èœã»æ§èœïŒã«ããããªããªãïŒããžãã¹äŸ¡å€ïŒã®ããã ã éçºããŒã å
ã§ãã®ãŠãŒã¶ãŒã¹ããŒãªãŒã®äŸ¡å€ãæãããªå Žåã¯ã ãªããªãïŒããžãã¹äŸ¡å€ïŒã®ããã ã ãçç¥å¯èœãšããŸããã ãã€åå²ããã©ãåå²ããã ã¹ããŒãªãŒã倧ããã㊠1 åã®ã€ãã¬ãŒã·ã§ã³ã«ã¯åãŸããªãå Žåããããæ£ç¢ºãªèŠç©ãå¿
èŠãªå Žåã«ããŠãŒã¶ãŒã¹ããŒãªãŒãåå²ããããšã¯æçšã§ãããã ã€ãã¬ãŒã·ã§ã³ã§åãŸãç¯å²ã«ã¹ããŒãªãŒãåå²ããããšã§ãã€ãã¬ãŒã·ã§ã³ã§çãŸããææç©ã«å¯ŸããŠã®ãã£ãŒãããã¯ãåŸãããšãåºæ¥ãŸãã ã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã 䟡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ ãã§ã¯ãäžäŸãšããŠæ¬¡ã®ãããªèãæ¹ããããŠããŸãã ããŒã¿å¢çã«æ²¿ã£ãŠåå²ãã æäœã®å¢çã§åå²ãã ããã©ãŒãã³ã¹å¶çŽãã¹ããŒãªãŒã«ãã åªå
åºŠã«æ²¿ã£ãŠåå²ãã ä»åã¯ãã ããŒã¿å¢çã«æ²¿ã£ãŠåå²ãã ããšã ããã©ãŒãã³ã¹å¶çŽãã¹ããŒãªãŒã«ãã ããšãã 2 ã€ã®èãæ¹ããå®éã®ãããžã§ã¯ãã§ã©ã®ããã«é©çšãããã«ã€ããŠè§£èª¬ããŸãã ãŸãããããžã§ã¯ããé²ããŠããäžã§ ãã¢ã¯ã¿ãŒã®ã¢ãããŒã·ã§ã³ã§åå²ããã ãšããèãæ¹ã§åå²ãããã®ãããã®ã§ããã¡ããã玹ä»ããããŸãã ãªããã©ããããããžã§ã¯ãéå¶ãããã«ãã£ãŠãåå²åŸã®åäœããŠãŒã¶ãŒã¹ããŒãªãŒã«ããã¹ããã¯ç°ãªãã§ããããããšãã°ãã ç· ãåããå³ãããããžã§ã¯ãã§ããããžã§ã¯ãåæã«ãŸããã£ãŠããããããš ãã§ã¯ã åè§£åäœã¯ãŠãŒã¶ãŒã¹ããŒãªãŒåäœã«ãã ããããã¿ã¹ã¯åäœã«ãªã£ãŠãè¯ã ããšããããæ¹ã§ãããã¯ãããã¯ãã°ãã¹ããªã³ãã§çµããåäœã«åè§£ããèãæ¹ã玹ä»ãããŠããŸãã åœãããžã§ã¯ãã§ã¯ããããã¯ãã«å¯Ÿãããã£ãŒãããã¯ãæ©æã«ãããããšãéèŠèŠããããšãããããŠãŒã¶ãŒã¹ããŒãªãŒãåå²åäœãšããŠé²ããŸããã ç»é¢ãªãã¥ãŒã¢ã«ãããžã§ã¯ã åœèšäºã«ãŠå®äŸãšããŠåãäžããããããã·ã§ããäœæãµãŒãã¹ãBASEãã®ãé管çç»é¢ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã軜ã玹ä»ãããŠããã ããŸãã2020 幎 7 æ 30 æ¥ïŒæšïŒãã·ã§ãããªãŒããŒã泚æã®å£²äžã確èªãããããã®åŸã®æ¯èŸŒç³è«ãªã© BASE äžã®ãéãåŒãåºãããããå°ç·ã®èµ·ç¹ã§ããããé管çç»é¢ãããªãã¥ãŒã¢ã«ãããŸããã âãªãã¥ãŒã¢ã«å ãªãã¥ãŒã¢ã«åã®ãé管çç»é¢ âãªãã¥ãŒã¢ã«åŸ ãªãã¥ãŒã¢ã«åŸã®ãé管çç»é¢ åœãããžã§ã¯ãã§ã¯ãUI ãã¶ã€ã³ã»äœéšãæ¹åããããšã¯ãã¡ãããªã®ã§ããããã®è£åŽã§ã¯æ§ã
ãªã¬ã€ã€ãŒã§ããŒããæã£ããããžã§ã¯ãã§ããã ããã³ããšã³ãã«çŠç¹ãåœãŠããšãVue.js + TypeScript ãå©çšãã MPA(multi page application)åãžã®å¯Ÿå¿ãè¡ãããŸããããã®èæ¯ã«ã€ããŠã¯ãã ãBASEãã®ç®¡çç»é¢ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã®ãããŸã§ãšãããã ããã æ¬¡äžä»£ã®ç®¡çç»é¢ãäœãããã³ããšã³ãã®åãçµã¿ ãã«ãŠå
¬éããŠãããŸãã ãŸããããã¯ãšã³ãåŽã§ã¯ããããŸã§ã®ç¶ãæ¥ããç¶ããŠè€éåããŠããã³ãŒãã®ãã¡ã€ã³åæããã£ãŠã®åæŽçãèŠæš¡ã®å€§ããã·ã§ãããéå¶ããŠããã·ã§ãããªãŒããŒã§ãå¿«é©ã«æ±ããããããã©ãŒãã³ã¹ãæ¹åããããšãã£ããšãããäž»ããé¢å¿ãšããŠé«ããã®ã§ããã ãããžã§ã¯ãç¹æ§ãåæãã ãããžã§ã¯ãããšã«æå¹ãªæœçãç°ãªããããèªèº«ãæºãããããžã§ã¯ããåæããããšããŸã第äžã¹ããããšããŠå¿
èŠã§ãã ãé管çç»é¢ãšã¯ãã·ã§ãããªãŒããŒããE ã³ããŒã¹ãã©ãããã©ãŒã ãBASEãã§ã®æŽ»åã§çºçããå
¥åºéãå
¥åºéå±¥æŽãšããŠåæ ãããããéè¡å£åº§ãžã®æ¯èŸŒç³è«ããè³é調éãµãŒãã¹ãYELL BANKïŒãšãŒã«ãã³ã¯ïŒãã§ã®è³é調éãæ¯æç¶æ³ã®ç¢ºèªããããšãã£ãã売äžã»ãéã«ãŸã€ããå°ç·ã®å
¥ãå£ã«ãªããŸãã ããã«ãE ã³ããŒã¹ãã©ãããã©ãŒã ãBASEãã¯ã·ã§ããéèšæ°ã 110 äžã·ã§ãããè¶
ããæ¥æ
ããèŠæš¡ãŸã§å€çš®å€æ§ã§ããã·ã§ãããªãŒããŒã®ããžãã¹ç¶æ³ã«ãã£ãŠã¯ãããããã®å£²äžããŒã¿ãæ±ãå¿
èŠãçãŸããããã©ãŒãã³ã¹ç¹æ§ã®åé¡ãåãæ±ããŸãã 以äžã®ç¹æ§ãããæ¬¡ã®ããã«ãŠãŒã¶ãŒã¹ããŒãªãŒã®åå²ã®èãæ¹ãå®è·µããŸããã ããŒã¿å¢çã«æ²¿ã£ãŠåå²ãã ããšãã°ã次ã®ãããªãŠãŒã¶ãŒã¹ããŒãªãŒããããŸããã ã·ã§ãããªãŒããŒããå
¥åºéå±¥æŽãäžèŠ§ç¢ºèªã§ããããã«ãã ãã®äžæã ãèŠããšãïŒã€ãã¬ãŒã·ã§ã³ã§åãŸããããªé°å²æ°ã®ãããã®ã§ãããå®éã¯ãšãŠã倧ããªãŠãŒã¶ãŒã¹ããŒãªãŒã§ãã E ã³ããŒã¹ãã©ãããã©ãŒã ãBASEãã§çºçããå
¥åºéã¯ã泚æå£²äžã»æ¯èŸŒç³è«ã»ã·ã§ããã³ã€ã³ã«ãã売äžã»è³é調éãªã©ãšãããªãšãŒã·ã§ã³ãå€çš®å€æ§ã§ãã ããŒã¿å¢çã«æ²¿ã£ãŠåå²ãããšããèãæ¹ã¯ãããšãã°ã倿§ãªæ
å ±ãæã€æ€çŽ¢ç»é¢ããã£ãå Žåã«ãããŸãåµåæ
å ±ãèŠããããšãã£ã圢ã§ããçšåºŠã®ããŒã¿å¢çãèšããŠåå²ããããšãã£ãããæ¹ã§ãã ãã®åå²ã§ã¯ããšã³ãããŒãšã³ãã®ããŒãã£ã«ã«ã¹ã©ã€ã¹ã¯ä¿ãããŠããã®ã§ãç¹å®ã®ããŒã¿å¢çã®ææç©ãæã£ãŠã¹ããªã³ãã¬ãã¥ãŒã§é¡§å®¢ã«èŠããããšãåºæ¥ãŸãã 1 ã€ã®ãŠãŒã¶ãŒã¹ããŒãªãŒãå®çŸããããã«èæ
®ããããŒã¿ããªãšãŒã·ã§ã³ãå€ãå Žåãæå¹ãªèãæ¹ã«ãªããŸãã ãã®åå²ã®èãæ¹ã«åºã¥ããŠããŠãŒã¶ãŒã¹ããŒãªãŒã¯æ¬¡ã®ããã«åå²ããŸããã Before: ã·ã§ãããªãŒããŒããå
¥åºéå±¥æŽãäžèŠ§ç¢ºèªã§ããããã«ãã â After: - ã·ã§ãããªãŒããŒãã売äžã確èªãããããå
¥åºéå±¥æŽã§å£²äžãèŠããããã«ãã - æ¯èŸŒç³è«ãããã·ã§ãããªãŒããŒããå
¥åºéå±¥æŽã§æ¯èŸŒç³è«ãèŠããããã«ãã å
¥åºéå±¥æŽã®ããŒã¿å¢çïŒå£²äžã»æ¯èŸŒç³è«...etcïŒããšã«ããŠãŒã¶ãŒã¹ããŒãªãŒãåå²ããŠããŸãã ããã©ãŒãã³ã¹å¶çŽãã¹ããŒãªãŒã«ãã ããšãã°ã次ã®ãããªãŠãŒã¶ãŒã¹ããŒãªãŒããããŸããã ã·ã§ãããªãŒããŒããæéã§å
¥åºéå±¥æŽãæ€çŽ¢åºæ¥ãããã«ãã ããã¯ãç¹å®æéå
ã«çºçããå
¥åºéå±¥æŽãæ€çŽ¢ãããšããæ©èœã§ãããå
¥åºéå±¥æŽãæ°åä»¶ã®ã·ã§ãããšãæ°åäžä»¶ããã·ã§ããã§ã¯ãæ±ããããããã©ãŒãã³ã¹èŠä»¶ãç°ãªããŸãã ã The Elements of Programming Style, 2nd Edition ãã«ãŠã Brian W. Kernighan æ°ã»P. J. Plauger æ°ã¯ã" Make it right before you make it faster. "ïŒåãããã«ãªã£ãŠãããæ©ãåããããšãèããïŒãšèšã£ãŠããŸããã ãŸããã Martin Fowler @ OOP2014 "Workflows of Refactoring" ãã«ãŠã Martin Fowler æ°ã¯ãAdding FunctionïŒæ©èœè¿œå ïŒãš RefactoringïŒãªãã¡ã¯ã¿ãªã³ã°ïŒã®åžœåã®ãã¶ãçŽããšãã Kent Beck æ°ã® TDD ã®ã¡ã¿ãã¡ãŒã玹ä»ããŠããŸããããã®èª¬æã®äžã§ã ãããã«æ©ããããããšãã芳ç¹ã«ããã Performance ã®åžœå ããã¢ã€ãã¢ãã¹ã±ããããŠãããã㪠Exploring ã®åžœåãããããšãå£é ã§è£è¶³ããŠããŸããã ããã©ãŒãã³ã¹å¶çŽèªäœããŠãŒã¶ãŒã¹ããŒãªãŒã«ããŠåå²ããããšã§ããã®ã¹ããŒãªãŒã§ã¯ã Performance ã®åžœåããã¶ãããšã«éäžã§ããã®ã§ãäœæ¥å¹çäžãå©ç¹ããããšãããã§ãããã ãã®åå²ã®èãæ¹ã«åºã¥ããŠããŠãŒã¶ãŒã¹ããŒãªãŒã¯æ¬¡ã®ããã«åå²ããŸããã Before: ã·ã§ãããªãŒããŒããæéã§å
¥åºéå±¥æŽãæ€çŽ¢åºæ¥ãããã«ãã â After: - 売äž50件以äžã100ä»¶æªæºã®é 調売åºã·ã§ãããªãŒããŒããæéã§å
¥åºéå±¥æŽãæ€çŽ¢åºæ¥ãããã«ãã - å€§èŠæš¡å£²åºã·ã§ãããªãŒããŒããæéã§å
¥åºéå±¥æŽãæ€çŽ¢åºæ¥ãããã«ãã ããã©ãŒãã³ã¹èŠä»¶ãçºçãããããªå€§èŠæš¡ã·ã§ãããªãŒããŒã®èæ
®ã¯ãå¥ã®ãŠãŒã¶ãŒã¹ããŒãªãŒã«åå²ããŠããŸãã ã¢ã¯ã¿ãŒã®ã¢ãããŒã·ã§ã³ã§åå²ãã ããšãã°ã次ã®ãããªãŠãŒã¶ãŒã¹ããŒãªãŒããããŸããã ã·ã§ãããªãŒããŒãããé管çç»é¢ãèŠããããã«ãã ãã®ç»é¢ã¯ãæ§ã
ãªã¢ãããŒã·ã§ã³ãæã£ãã·ã§ãããªãŒããŒãã«å¯ŸããŠãŠãŒã¹ã±ãŒã¹ãæ³å®ãããŠããŸãã äžäŸãäžãããšã ã·ã§ããéèšçŽåŸã®ã·ã§ãããªãŒããŒããBASE ã®æ©èœãææ¡ããããã«éã æ¯èŸŒç³è«äžã®ã·ã§ãããªãŒããŒããæ¯èŸŒç³è«ã®é²æã確èªãã«æ¥ã è³é調éäžã®ã·ã§ãããªãŒããŒããæ¯æç¶æ³ã確èªã§ããããã«ãã ã·ã§ãããªãŒããŒãããé管çç»é¢ãèŠããããã«ããã ãšèšã£ãŠãããã®ã·ã§ãããªãŒããŒãããããããšã»ã§ããããšã¯æ§ã
ã§ããããããæ¯èŸŒç³è«ãã§ããã·ã§ãããªãŒããŒã¯ã売äžããããŠããããšãåæã«ãªããŸãããŸãããŸã 売äžãäžããŠããªãã¢ã«ãŠã³ãç»é²ããã°ããã®ã·ã§ãããªãŒããŒãããŸããããããç¶æ³ãç°ãªããéãã¢ãããŒã·ã§ã³ãæã€ã·ã§ãããªãŒããŒãšããã¢ã¯ã¿ãŒãäžæŠã«æ±ããšã¹ã³ãŒããåºãã£ãŠããŸããŸãã ãã®ããã«ããããã®ã¢ã¯ã¿ãŒã®ã¢ãããŒã·ã§ã³ã亀ããåã£ãŠãããããªãŠãŒã¶ãŒã¹ããŒãªãŒã¯ãããªãšãŒã·ã§ã³ãåžåããããã«å€§ãããªã£ãŠããŸããŸããããã«å¯ŸããŠãã¢ã¯ã¿ãŒã®ã¢ãããŒã·ã§ã³ã§åå²ããããšã詊ã¿ãŸããã ããšãã°ãã·ã§ããã®ç¶æ
ã«ãã£ãŠç°ãªãå°ç·ãçšæããããããªå Žåã¯ã1 ã€ã®ãŠãŒã¹ã±ãŒã¹ã«ãŸãšããæ¬¡ã®ããã«åããããšãã§ããŸãã Before: ã·ã§ãããªãŒããŒãããé管çç»é¢ãèŠããããã«ãã â After: - ã·ã§ããéèšçŽåŸã®ã·ã§ãããªãŒããŒããããé管çç»é¢ã§åºæ¥ãããšãã確èªã§ããããã«ãã - æ¯èŸŒç³è«äžã®ã·ã§ãããªãŒããŒããæ¯èŸŒç³è«ã®é²æã確èªã§ããããã«ãã - YELL BANK ã§è³é調éäžã®ã·ã§ãããªãŒããŒããæ¯æç¶æ³ã確èªã§ããããã«ãã åœè©²ç»é¢ã§ãã¢ã¯ã¿ãŒãäœããããã®ãããšããã¢ãããŒã·ã§ã³ããŒã¹ã§ããŠãŒã¶ãŒã¹ããŒãªãŒãåå²ããŠããŸãã å Žåã«ãã£ãŠã¯ãæåãããŠãŒã¶ãŒã¹ããŒãªãŒãåããŠããããã®èгç¹ã§åå²ãããŸã§ããªãã±ãŒã¹ãããã§ãããããããããŸã ãŠãŒã¶ãŒã¹ããŒãªãŒã®æ±ãã«äžæ
£ããªããŒã ã§ããã°ãç°ãªãã¢ãããŒã·ã§ã³ã 1 ã€ã®ãŠãŒã¶ãŒã¹ããŒãªãŒã«æ··åšããŠãããšãã«ãã倧ããªãŠãŒã¶ãŒã¹ããŒãªãŒã«ãªã£ãŠããªãããèŠçŽãæ©äŒã«ãªããŸãã ïŒè¿œèšïŒãããŒã«ã¢ããªã³ã°ãã®äžçš®é¡ã該åœããããšããTwitterã§ã®åé¿ã®äžã§æããŠããã ããŸãããç®çã»æ¹æ³ã»ç¶æ³ã»ç緎床ã«ãã£ãŠããŒã«ãåããããšã§è©³ãããã«ãœããæ³å®ãããšãã£ãçºæ³ã§ããä»åã®åå²ã®èãæ¹ã¯ãç®çãã§ããŒã«ãåããŠããŸããã詳ããã¯ãè§åŸå
žããã2010幎ã«å®æœãããã ãŠãŒã¶ãŒã¹ããŒãªãŒ ãã®ã³ãºãã€ãã®è³æ ããã芧ãã ããã åªå
é äœã®èãæ¹ ããããŠãŒã¶ãŒã¹ããŒãªãŒãããããã¹ããªã³ãã«åãŸã倧ããã«åè§£ã§ãããšããã®ååŸã§åªå
é äœãã©ãèããããé¡ãåºãã§ãããã åªå
é äœã®é«ããã®ããçæããŠããããšãèšç»ããéã«ãããžãã¹äŸ¡å€ã®é«ããæèããããšã«ãªããŸããããããžãã¹äŸ¡å€ãã£ãŠãªãã ããã£ãŠãªããŸããããæåããã®ããžãã¹äŸ¡å€ãšããèšèã«å¯ŸããŠãããèšèã§èª¬æã§ããªãèªåããããªãšæããŸãããããã«ã€ããŠããã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã 䟡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ ãã§ã¯ããã®ããžãã¹äŸ¡å€ã®èŠçŽ ã«æ¬¡ã®ãããªé
ç®ãäžããŠããŸãã 1. ãã£ãŒãã£ã®ééäŸ¡å€ 2. éçºïŒãµããŒãïŒã«ãããã³ã¹ã 3. éçºãéããŠåŠã¹ãç¥èã®éãšãã®æçŸ© 4. éçºã«ãã£ãŠäœæžã§ãããªã¹ã¯ ãããã®ã©ã®èŠçŽ ãéèŠèŠãããã«ã€ããŠã¯ãåãããžã§ã¯ãã§ç°ãªãã§ãããããåœãããžã§ã¯ãã«ãããŠã¯ã 3. éçºãéããŠåŠã¹ãç¥èã®éãšãã®æçŸ© ãéèŠèŠããŸããã ããã¯ã以äžã®ãããžã§ã¯ãäºæ
ãå å³ããçµæã§ãã å®éã«ãšã³ããŠãŒã¶ãŒã«å±ãããªãªãŒã¹ã¯ããŠãŒã¶ãŒã¹ããŒãªãŒããšã«åå²ã§ãããã®ãå°ãªãããã®ãããå¯Ÿè±¡ã®æ©èœãªãªãŒã¹ã«ããã1. ãã£ãŒãã£ã®éé䟡å€ãã¯ãåªå
é äœã«ãããŸã§åœ±é¿ããªãã Sketch 段éã®ãã¶ã€ã³æ€èšã«ãããŠå¿
èŠãªã¹ã³ãŒãã®èŠéããç«ãŠãŠããããããŠãŒã¶ãŒã¹ããŒãªãŒããããã¯ãç»é¢ãªãã¥ãŒã¢ã«ãªãªãŒã¹æã«ã¯ã ãããå¿
èŠãªéçºã«ãªãïŒMUSTã§ã¯ãªãæ©èœãããã€ãã¹ã³ãŒãå
ã«ãã£ããããããçšåºŠå¯å€ã§ã¯ãããŸããïŒããã®ãããã2. éçºïŒãµããŒãïŒã«ãããã³ã¹ããã«ã€ããŠãåªå
é äœã«å¯ŸããŠã®åœ±é¿åºŠã¯å°ãªãã ã3. éçºãéããŠåŠã¹ãç¥èã®éãšãã®æçŸ©ãã¯ãåªå
é äœã®å€æã«åœ±é¿ã®ãã芳ç¹ããããïŒãã®çç±ã¯åŸè¿°ããŸãïŒãã4. éçºã«ãã£ãŠäœæžã§ãããªã¹ã¯ãã®èгç¹ã¯ã3 ãèæ
®ããŠããäžã§çµæçã«èããããšã«ãªãã ãªãªãŒã¹èšç»ãèå¯ããéããã¹ã±ãžã¥ãŒã«ãã»ãã¹ã³ãŒããã»ããªãœãŒã¹ãã®ã©ããéèŠèŠããããšããèŠç¹ããããŸããåœãããžã§ã¯ãã¯ããã¹ã³ãŒãããéèŠèŠããã¹ã±ãžã¥ãŒã«ã»ãªãœãŒã¹ã®å¯å€æ§ãé«ãæããŠãããŸããã éçºãéããŠåŠã¹ãç¥èã®éãšãã®æçŸ© ãããžã§ã¯ããèããã«ãããããäœãäžç¢ºå®ãªç®æã§ãªã¹ã¯ãšãªãããããã¯éèŠãªãã€ã³ãã§ãããªã¹ã¯ã®ã¢ã³ããã匵ãã«åœãããAlexander Laufer ã®äžç¢ºå®æ§çè«ããåèã«ãªããŸãã Alexander Laufer ã®äžç¢ºå®æ§çè«ã¯ããã£ããæ¬¡ã®ãããªäžç¢ºå®æ§ã®æŽçã§ãã ç®æšã®äžç¢ºå®æ§ (end uncertainty) ïŒéçº PJ ã«å¯Ÿå¿ããããšãïŒäœãéçºããã®ããã¹ã³ãŒãã»ãããã¯ãã®æ§è³ª æ¹æ³ã®äžç¢ºå®æ§ (means uncertainty) ïŒéçº PJ ã«å¯Ÿå¿ããããšãïŒã©ããã£ãŠéçºããã®ããæè¡ã»ã¹ãã«ã»é£æºæ¹æ³ ãããã®äžç¢ºå®æ§ãäœæžãããããã«ãããžã§ã¯ããéããŠãéçºå¯Ÿè±¡ã®ãããã¯ãã«ã€ããŠç¥ãããã®äœãæ¹ã«ã€ããŠç¥èãæ·±ããŠãããã°ãªããŸããã åç· åœ¹ EVP of Development ã®è€å·ïŒããµããïŒããã ãŠã£ãºã³ããæä»£ã«BASEãæé·ãããŠãã2ã€ã®æè¡èª²é¡ ãã«ãŠãã³ã³ããŒãã³ãåãã¢ãŒããã¯ãã£å·æ°ã«å¯ŸããåŠç¿ã³ã¹ããžã®é©å¿ããæè¡ç課é¡ãšããŠãããŠããŸããã å®éãããã¯ãAlexander Laufer ã®äžç¢ºå®æ§çè«ã§ãããšããã® æ¹æ³ã®äžç¢ºå®æ§ (means uncertainty) ãååšããç¶æ³ã§ãã å®éã«åœãããžã§ã¯ãã§ã¯ãfrontend ã³ãŒãã®å®çŸæ¹æ³ãèŠããã£ãŠããªãç®æã®æ©æçæãbackend ã³ãŒãã«ããããã¡ã€ã³ã¢ããªã³ã°ã®ã³ãŒãåããæ©æã«æ¥ããããªåœ¢ã§ããŠãŒã¶ãŒã¹ããŒãªãŒã«åªå
é äœãã€ããŠãããŸããã åå²ãããŠãŒã¶ãŒã¹ããŒãªãŒãçšãããªãªãŒã¹èšç»ãšã¹ããªã³ãèšç» ãã®ãããžã§ã¯ãã§ã¯ããªãªãŒã¹èšç»ã®äžã§ããããã¯ãããã¯ãã°ã«ãŠãŒã¶ãŒã¹ããŒãªãŒãå
¥ããçŽè¿ 2 ã¹ããªã³ããããã«äœããããããåªå
ä»ãããããã㯠Miro ãçšããŠå¯èŠåããŠããŸããã ããããã®ãŠãŒã¶ãŒã¹ããŒãªãŒã«å¯ŸããŠãéçºã¡ã³ããŒã§ããã©ã³ãã³ã°ããŒã«ãŒãè¡ãã¹ããŒãªãŒãã€ã³ããã€ããŠããŸãã 以äžã® Miro ã¯å®éã«äœ¿çšããããŒãã®äžéšã§ãããã§ã«å®äºãããããžã§ã¯ããªã®ã§ããã¹ãŠã®ãŠãŒã¶ãŒã¹ããŒãªãŒã¯ã©ããã®ã€ãã¬ãŒã·ã§ã³å
ã«å²ãåœãŠãããŠããŸãããèšç»çå®åœåã¯ä»®å²åœã§çœ®ããŠãããŠãçŽè¿ã®ã¹ããªã³ãã ãå®éã«æ¶åãããŠãŒã¶ãŒã¹ããŒãªãŒãšããŠå²ãåœãŠãŠããŸããã å®éã«å©çšããŠããMiroã®ããŒã å®éã«ãã¹ããªã³ããå§ãŸããšãã¹ããªã³ãèšç»ã§å®éã®äœæ¥ã¿ã¹ã¯ã«èœãšã蟌ãã§ããããšã«ãªãã®ã§ãäœæ¥æã«äœ¿çšããããŒã«ãšã·ãŒã ã¬ã¹ã«ãªãããã«ãå¥éã¿ã¹ã¯ç®¡çãšã㊠GitHub Project ãçšããŸããã ãããã« ãããã®åå²ã宿œããããšã«ãããããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒãå®çŸã§ããæ¬¡ã®ãããªå©ç¹ããããŸããã ãããžã§ã¯ãã®çµç€ã®æçµ QA ã§ä»æ§ã®éœéœ¬ãããããèŠã€ãã£ãŠããŸãããšãã£ãäºè±¡ãé¿ããããšãåºæ¥ã æ¯ã¹ããªã³ãåããã®ãèŠãç¶ããããšã§ã鲿ãæç¢ºã ã£ã ãããžã§ã¯ãéå§åœåãŸã è©°ããããŠããªãèŠä»¶ã»ä»æ§ã«ã€ããŠã¹ããªã³ãã¬ãã¥ãŒã§åããããã¯ããèŠãªãã確èªã§ãã ã¹ããŒãªãŒãã€ã³ããçšããèŠç©ããæ¹æ³ãã顧客ãããã£ãŒãããã¯ãè²°ããªãããç®æšã®äžç¢ºå®æ§ãæ¹æ³ã®äžç¢ºå®æ§ã«å¯Ÿå¿ããŠãããããžã§ã¯ãéå¶ã«ãããŠãã€ãã¬ãŒã·ã§ã³ã®ææç©ãããã«äœæ¥ã§ã¯ãªãããŠãŒã¶ãŒã«ãšã£ãŠäŸ¡å€ã®ãããã®ã«ããããã¯åºç€çã§ããéèŠãªãã€ã³ãã§ãããã 倧ããªãŠãŒã¶ãŒã¹ããŒãªãŒãç®ã®åã«ããããã®è²Žæ¹ã«ãã®èšäºãåèã«ãªãã°å¹žãã§ãã
ïŒã¢ã€ãã£ããç»åã¯ã¡ã³ããŒã®èš±å¯ãåŸãŠæ²èŒããŠããŸãïŒ æšæ¶ ã¯ãããŸããŠããã¶ã€ããŒã®æ²³è¶ã§ã 2020幎åã®æ°ç€ŸäŒäººãšããŠã4æããBASEã®Design Sectionã§åããŠããŸãã ãªãã ããã ã§ãã瀟äŒäºº5ã¶æç®ããã®èšäºã§ã¯ãæªçµéšãããã¶ã€ããŒãšããŠå
¥ç€ŸãããŸã§ã«ããããšãšãå
¥ç€ŸããŠãã4ã¶æã§åãçµãã æ¥åãèããããšãæ¯ãè¿ã£ãŠãããŸãã ãåœããåã®ããšããèšã£ãŠããïŒããšæã£ãŠããåªããèŠå®ã£ãŠããã ãããšå¬ããã§ãðââïž ãã¶ã€ããŒãšããŠå
¥ç€ŸãããŸã§ã«ããããšãš ãŸãç°¡åã«ç§ãBASEã«ãã¶ã€ããŒãšããŠå
¥ç€ŸãããŸã§ã®ããšã説æããŸãã ç§ã¯2018幎6æã«BASE BANKæ ªåŒäŒç€Ÿã®ã€ã³ã¿ãŒã³ãšããŠBASEã°ã«ãŒãã«å
¥ç€ŸããŸããã 鶎岡ããã®ãã€ãŒãããã£ããã ã£ããšæããŸãïŒ ãããïŒïŒïŒ - éè¡ãããããã«ãæ°äŒç€ŸBASE BANKç«ã¡äžãã¡ã³ããŒåéïŒïŒ by BASEæ ªåŒäŒç€Ÿ ( @BASEec ) #wantedly https://t.co/nicGHulNbI — 鶎岡 è£å€ª / BASE, Inc. CEO (@0Q7) May 2, 2018 ããããçŽ2幎é(éäžçåŠããäŒã¿ãªã©ããã ããªãã)ãBASE BANKã§ãéã«ãŸã€ãããããã¯ãã®ãªãªãŒã¹ãã°ããŒã¹ã«æºãããŸããã BASE BANKã§åãéçšã§ãã YELL BANK ãã BASE BANKã®ã㎠ãäœæããå岡ããã®æŽ»èºãèŠãããšããã°ããŒã¹ã«ããã现ããUIæ¹åãè¡ããããŠãèªåã«UI倿Žãæ±ããªããã©ãããããããç§ããã¶ã€ããŒãšããŠãããã¯ãäœãã«é¢ããããããšæãããã«ãªããŸãã ãã¶ã€ããŒã«ãªãããæšã瀟å
ã®ãã¶ã€ããŒã®å
茩æ¹ã«çžè«ãããšããããªããšç§å°çšã®ç ä¿®ããã°ã©ã ãäœã£ãŠããã ããããšã«ãããïŒ (仿ãã°ãæ¬åœã«ããããã£ãããã®æç¹ã§ãã£ãšUIãã¶ã€ã³ã«ã€ããŠå匷ããŠããã¹ãã ã£ãããæªçµéšããã¹ã¿ãŒããšããç¡è¶ãªãé¡ããåãå
¥ããŠãã ãã£ããã¶ã€ã³ããŒã ã®å
茩æ¹ã«ããæž©ããéãåºããŠãã ãã£ãBASE BANKããŒã ã«ãæè¬ãæ¢ãŸããŸããð) 2019幎10æãããæªçµéšã®ç§ããã¶ã€ããŒãšããŠè²æããããã®ããã¶ã€ã³ç ä¿®ãéå¬ããŠããã ããŸããã ãã¶ã€ã³ç ä¿® ãã¶ã€ã³ç ä¿®ã§ãã£ãããš ãã¶ã€ã³ç ä¿®ã§ã¯æããšã« cocoda! ã«ãé¡ãšããŠæ²èŒãããŠããã ã®ãããµãŒãã¹TANPã®iOSã¢ããªãã¶ã€ã³ ã»ãŒã«ãéæç¡æãã£ã³ããŒã³ãªã©ãæ³å®ãããããŒäœæ ãBASEãã§éå»ã«è¡ã£ããã£ã³ããŒã³ã®LPäœæ progate ã䜿ã£ãŠã³ãŒãã£ã³ã°èªç¿ æçµèª²é¡ïŒãBASEãã®ãã¶ã€ã³ããŒã±ããã®æ¹åæ¡ ãªã©ã®èª²é¡ãåºãããããã«å¯Ÿããã¢ãŠãããããäœããæ¯é±äžåºŠBASEã®ãã¶ã€ããŒã«1on1ã®ã¬ãã¥ãŒãããŠããã ãæ©äŒãããã ããŠããŸããã æçµèª²é¡ã«åãçµãã 1ã¶æã¯é±ã«2床ã¬ãã¥ãŒäŒããããProduct Managementã®ã¡ã³ããŒã瀟å
ã®ä»ã®ã¡ã³ããŒã«ããã£ãŒãããã¯ãããããªãããã¶ã€ã³æ¡ãäœããŸããã3æã«æçµçãªã¢ãŠãããããç¥å®®åžããïŒå·è¡åœ¹å¡VP of ProductïŒãDesign Sectionã®ãããŒãžã£ãŒãªã©ã«ãã¬ãŒã³ãã4æããBASEã®ãã¶ã€ããŒãšããŠåãå
å®ãããã ããŸããã ãã¶ã€ã³ã¬ãã¥ãŒã¯æããªã ãã¶ã€ã³ç ä¿®ã§ã¯é±ã«1æéãã¬ãã¥ãŒã®æéãããã ããŠããã®ã§ãããæåã®3~4ã¶æã¯ãšã«ããã¬ãã¥ãŒãæããŠãéãåºãããã£ãã®ãèŠããŠããŸãã ã¬ãã¥ãŒæéããæéããããŠäœã£ãã¢ãŠããããã«ãã¡åºãããããæéããšæããŠããŸããããããªã«é 匵ã£ãã®ã«ãŸãæ¯ãåºãã«æ»ã£ãŠããŸã£ã...èŸã...ããã¬ãã¥ãŒã§ã¯ç§ãèããããŠãªãã£ããã€ã³ãã°ããææãããŠããã®é³ãåºãããã¶ã€ããŒã¯èŠéãåºã人ããã§ããªãè·æ¥ã§èªåã«ã¯åããŠããªãããããªãã...èŸã...ããšãã¬ãã¥ãŒã®ãã³ã«ãã¬ãã£ãã«ãªã£ãŠããŸããã ããã¬ãã¥ãŒäŒã®ããšãèœã¡èŸŒãã§ããç§ãèŠãŠå
茩ãã¶ã€ããŒã ã ã¬ãã¥ãŒã¯ã¢ãŠããããã«å¯ŸããŠã®ãã£ãŒãããã¯ã§ãã£ãŠã誰ãäººæ ŒãåŠå®ããŠããããããªããããŠãŒã¶ãŒã®ããã«ãªããããã¯ããäœãããã«ãèªåã«ã¯ãªãèŠç¹ããæèŠãåãããæ©äŒã ãïŒ ã ãšå£°ããããŠãããŸããã èªåã«ãªãèŠç¹ãæã£ãŠãã人ãã¢ããã€ã¹ããããæ©äŒãªããŠè¶
貎éã§ãã é ã§ã¯ããã£ãŠãã¯ããªã®ã«ãçŽ çŽã«åãå
¥ããããªããªã£ãŠããŸã£ãŠããç§ã«ã¯ãã®èšèããããé¿ããŸããã ããããã¯ãèªåãžã®ã¢ããã€ã¹ãšãã¶ã€ã³ã«å¯Ÿãããã£ãŒãããã¯ãåãåããŠèãããšãã§ããããã«ãªããã¬ãã¥ãŒã¯ããæããããŸãããéã«ãã¬ãã¥ãŒãããã«ãããã¯ããäžã«åºãæ¹ãæãã§ãã ããããããã¬ãã¥ãŒã¯ãBe Hopefulããªæ°æã¡ãæã£ãŠåå ããããšæããŸãã ç«¶åãããã¯ãã®ãã¶ã€ã³ããã¯ã£ãŠãæå³ããªã ãããã¯ããäœãæãå€ãã®äººãç«¶åãããã¯ãã調æ»ãããšæããŸãã ç§ã¯ãã¶ã€ã³ç ä¿®ã®æçµèª²é¡ãBASEã®ãã¶ã€ã³ããŒã±ããã®æ¹åæ¡ãã®æåã®ã¬ãã¥ãŒæã«ãç«¶åãµãŒãã¹ãå®å
šã«æš¡å£ããã¢ãŠãããããæåºããŸããã仿ããšãç«¶å調æ»ãããŸããïŒãšããã¢ããŒã«ããããã£ãã®ãããããŸããïŒç¬ïŒ ãã¶ã€ããŒãããã¯ã©ãããæå³ã§ãããããã¶ã€ã³ã«ããã®ïŒã ç§ãOO(ç«¶åãµãŒãã¹)ããããªã£ãŠãããã§ãïŒOOã¯ãããã䜿ãããŠãããããµãŒãã¹ãªã®ã§ãç䌌ããããããšããããŸããïŒ(ã¢ã)ã ãšãããããšãããããŸãããå
茩ã¯çžåœé ãæ±ããŠãããšæããŸãã ããããæ¬åœã«ã¿ãŒã²ããã¯åã屿§ãªã®ã ç«¶åãµãŒãã¹ã¯ã©ããã£ãæå³ã§UIãäœã£ãã®ã å©çšè
æ°ã®å€ãç«¶åãµãŒãã¹ã«ã¯æ¬åœã«äœ¿ãã¥ãããšããããªãã®ã ãèããçè§£ããªããšããBASEãã®ãŠãŒã¶ãŒã«ãšã£ãŠåªãããµãŒãã¹ã¯äœããŸããã ãŠãŒã¶ãŒã®å±æ§ãéãã°æ©ã¿ã欲ãããã®ãéãããããã«åãããUIãèšèšããªããšããŠãŒã¶ãŒã«ã¹ãã¬ã¹ãæããããŠããŸãããã§ãã ä»ã¯ãç«¶åãµãŒãã¹ããã䜿ãã¢ããªãWebãµãŒãã¹ãèŠããšãã«ã¯ããã®ãã¶ã€ã³ã«ãªã£ãæå³ãèããããã«ããŠããŸããä»ãŸã§æ°ã¥ããªãã£ããã¶ã€ããŒã®æ°é£ãã«æ°ä»ããããã«ãªããã€ã³ã¿ãŒããããµãŒãã¹ã䜿ãã®ã100忥œãããªããŸããïŒ ãŸããã¢ããªã®èªåã¢ããããŒããOFFã«ããã¢ããããŒãååŸã§ã©ãUIãå€ãã£ãã®ãããªããã®å€æŽãè¡ãããã®ãããã§ãã¯ããããã«ãããŠããŸãã careerhack.en-japan.com å
¥ç€ŸããŠ4ã¶æã§ãã£ãããš 4æããã¯ç€Ÿå¡ãšããŠBASEã§åããŠããŠãããããžã§ã¯ãåãããªããããªç²åºŠã®çްããæ¹åãè¡ããããžã§ã¯ãããšããå¥åŠãªååã®ãããžã§ã¯ãã«ã¢ãµã€ã³ãããŠããŸãã ãããžã§ã¯ãåãããªããããªç²åºŠã®çްããæ¹åãè¡ããããžã§ã¯ã(ä»¥äžæ¹åPJ)ã¯ãããŠãŒã¶ãŒããã®æ¹åèŠæã¯å±ããŠãããã©ãç²åºŠã现ãããŠãããžã§ã¯ãåããã»ã©ã§ããªãæ¹åãåŸåãã«ããŠããç®æãæ¹åãããããã®ãããžã§ã¯ãã§ãã ãããã¯ãã¯ããŒã ã§äœã ãããžã§ã¯ãå
ã§ã¯ãã¡ã³ã¿ãŒã®å
茩ããã¶ã€ã³ã®å£æã¡ãããŠããããããã¶ã€ã³ããŒã å
ã§ã¬ãã¥ãŒãããã£ãããPMãšããã¯ãšã³ããããã³ããšã³ããšã³ãžãã¢ãšQAãããããšããšã«ããããããã®äººãšé¢ãããæã¡ãŸãã ããŒã ã®ã¡ã³ããŒãšé¢ããæ©äŒãå¢ããã°å¢ããã»ã©ãèªåäžäººã§ã¯ãªããããŒã ã§ãããã¯ãã®æ¹åãè¡ã£ãŠãããã ïŒãšããå®æãæ¹§ããŠãåæ°ãåºããããããã¯ãã«ã€ããŠããæ·±ãèããããã«ãªããŸããã ç§ã¯1Qã®éã«3ã€ã®ãã¶ã€ã³æ¹åãæ
åœãããã®äžã®2ã€ããªãªãŒã¹ãããŠããŸãã èªåããã¶ã€ã³ãããã®ãäžã«åºãäœéšãåããŠã§ããªãªãŒã¹ã®ç¬éã¯ãããããšããæ©ã䜿ãããŠæ¬²ããïŒããšããæåŸ
ãšãå°ãäžå®ããããè€éãªæ°æã¡ããããŸããããããããŠãŒã¶ãŒããã¢ã³ããããŒãªãã£ãŒãããã¯ãããããæ¥ãŠããã¿ããªã§èããã°è§£æ±ºãããããšããæ°æã¡ã®äœè£ãä»ã¯æãŠãŠããŸãã 倧ããªãããžã§ã¯ãã ãããããã¯ããæ¯ããŠããããã§ã¯ãªã ãã¶ã€ããŒãå¿ããåœåã¯ããYELL BANKãã®LPããµãŒãã¹UIãäœãå
茩ãèŠãŠãã¯ããæ°ãããããã¯ããæ
åœã§ããããã«ãªãããïŒããšææ°èŸŒãã§ããŸããã ããããæ¹åPJãçµéšããæ¹åãåãã§ãã ãããŠãŒã¶ãŒã®å£°ãèãããšã§ã倧ããªãããžã§ã¯ãã«ãªããªãã¢ããããŒãã§ãããŠãŒã¶ãŒã®ã¹ãã¬ã¹ãè§£æ¶ããå°ããªæ¹åãMove Fastã«è¡ãããšã§ãBASEãã®ãã©ã³ãäœãã«è²¢ç®ã§ãããšãããããã«ãªããŸããã ããã«æ°ã¥ããŠããã¯ãæ¹åPJã§ãæ±ãããªãããã«ç²åºŠã®çްãããã®ïŒäŸãã°1æåã®èª€åãªã©ïŒããç©æ¥µçã«æ¹åããããã«ããŠããŸãã äœæ¥ã¯æ¥ãã§ãã æ¹åPJã«ã¢ãµã€ã³ãããŠãäžçªæãã£ãã®ããç§ã®ãã¶ã€ã³ã®é
å»¶ã«ãã£ãŠãªãªãŒã¹ãé
ããããå¥ã®æ¹ã®äœæ¥çæãé
ãããŠããŸãããšã§ãã ãããé²ãããã«ãèªåãã©ã®ãããã®æéã§ã©ã®åéã®äœæ¥ãçµãããããããããªãã¹ãæ£ç¢ºã«èŠç©ã£ãŠPMã«äŒããããšãæèããŠããŸãã å
·äœçã«ã¯ãå®äœæ¥ã®æéãç®æšæéã«å¯ŸããŠã©ã®ããã誀差ãããã®ãã調ã¹ãã©ã®ãããã®æéã§å
šäœã®äœæ¥ãçµããããããäŒããŠããŸããã èªåã®äœæ¥èœåããããããã«ãªã£ãŠããã®ã§ãéã«åãããªïŒãããã®åªåç®æšãèªåã®äžã§èšå®ããããšã§ãäœæ¥ã«éäžããªããšããããªãç°å¢ãäœãããã«ãããŠããŸãã æåããæåŸãŸã§ãªãã¹ãå
šéåã§äœæ¥ããããšã§ãäœæ¥å¹çãäžãã£ãŠããæ°ãããŸãã æåŸã« é·ããªããŸãããããã¶ã€ããŒãšããŠåãå§ããŠæããããšãæ¯ãè¿ã£ãŠã¿ãŸããã æªçµéšãã¶ã€ããŒã»æ°åãšããããšãããããšãŠãæåããµããŒãããŠããã ããŠããæé«ã®ç°å¢ã§ãã ç§ã¯ã€ã³ã¿ãŒã³ã忥ããŠç€Ÿå¡ã«ãªã£ãŠããããã£ãšBASEã倧奜ãã«ãªããŸããã ãŸã ãŸã å
茩ãã¶ã€ããŒã®èäžã¯èŠããªãããçããŠã°ããã®æ¥ã
ã§ãããäžå»ãæ©ãæ©è¿ãã§ããããã«æ¥ã
åªåããŠããããã§ãããããããé 匵ããŸãïŒ
Service Devæå±ããµãŒããµã€ããšã³ãžãã¢ã®å®®æã§ãã çŸåšç§ã¯ãService Devã®ããŒã ã«æå±ãããããã·ã§ããäœæãµãŒãã¹ãBASEãåã³ã·ã§ããã³ã°ã¢ããªãBASEãã®æ©èœéçºãæ
åœããŠããŸãã BASEã§ã¯æè¿ãæ©èœéçºã®éã«èšèšã¬ãã¥ãŒãè¡ãããã«ããŠããŸãããã®åãçµã¿ã«ã€ããŠç޹ä»ããããšæããŸãã éçºããŒã ã«ã€ã㊠BASEã®éçºããŒã ã¯ãã¡ã³ããŒãå¢ããã«åŸã£ãŠå°éåãã圢ã§ããŒã ãåå²ããŠããŸããã çŸåšããµãŒãã¹ã®æ©èœéçºãäž»ã«æ
åœããŠããService Dev Sectionã¯ãããã¯ãšã³ããæ
åœé åãåæ
ããŠ2Groupãããã³ããšã³ãããã€ãã£ãã¢ããªãæ
åœãããããã1Groupã®èš4ã€ã®GroupããæããService Devã®ãšã³ãžãã¢ã¯ããããã®ããŒã ã«æå±ãã圢ãšãªã£ãŠããŸãã ïŒçµç¹å³ã«ã€ããŠèå³ãæãããæ¹ã¯ããã¡ãã® äŒç€Ÿèª¬æè³æ ãã確èªããã ããã°ãšæããŸããïŒ æ©èœéçºã®éã¯ãããã®è·èœå¥ã®Groupãæšªæãã圢ã§ãããžã§ã¯ãããŒã ãç·šæãããããžã§ã¯ãããŒã ãäž»äœãšãªã£ãŠæ©èœéçºãè¡ã£ãŠãããŸããããŒã ã®ã¡ã³ããŒæ§æã¯ãããžã§ã¯ãã®ç¹æ§ãèŠæš¡ã«ããæ§ã
ã§ãããå€ãã®å Žåãåãã°ã«ãŒããã1ã2åããããžã§ã¯ãã«ã¢ãµã€ã³ãããããšãšãªããŸãã èšèšã¬ãã¥ãŒãå§ãããã æ©èœã®å¢å ãéçºã¡ã³ããŒã®å¢å ã䞊è¡ãããããžã§ã¯ãã®å¢å ã«ãããæ°ãã課é¡ãèŠããŠããŸããããšã³ãžãã¢ã«å¯ŸããŠå€ãã®ãããžã§ã¯ããç«ã¡äžãã£ãããšã§é¡èã«çŸãããã®ããããŸããã ãµãŒããµã€ãã®é åãå°éã«ãããšã³ãžãã¢ãèªå以å€ã«ãããžã§ã¯ãå
ã«ã¯ããªãã»å°ãªãç¶æ
ã«ãªããããæ©èœã®å質ãå人ã«äŸåããã¡ãªç¶æ³ã«ãªã£ãŠããŸã£ãŠãããæ©ãæ®µéã§å€ãã®ç®ã§èŠãããšã§ãæ©èœã®å質ãæ
ä¿ãããã ããŒã ã®ã³ãŒãã¬ãã¥ãŒã®ããã»ã¹ã¯åãå
¥ããŠããããã³ãŒãã¬ãã¥ãŒã®æ®µéã§ææãåãããšææ»ãã倧ããã®ã§ãæ©ã段éã§æ¢åã®ã·ã¹ãã ã«è©³ããããŒã ã¡ã³ããŒã«ããã¬ãã¥ãŒãåãå
¥ããææ»ããå°ãªããããã ã³ãŒãã¬ãã¥ãŒæã«åããŠã³ãŒããæž¡ãããŠã仿§ææ¡ãé£ããã®ã§ãããŒã ã¡ã³ããŒåŽãäºåã«æ°æ©èœãææ¡ããŠããããã 以åããã³ãŒãã¬ãã¥ãŒã¯å¿
é ãšããŠãããããŒã ã§å質ãæ
ä¿ããããšãéèŠããŠããŠããŸããããèšè𿮵éã§ã¬ãã¥ãŒãè¡ãããšã§æ¹åã§ããããšãããã®ã§ã¯ãªãããšæããèšèšã¬ãã¥ãŒãå§ããŠã¿ãããšã«ããŸããã èšèšã¬ãã¥ãŒã®å®è·µ ãã€ããã®ã èšèšã¬ãã¥ãŒã®ã¿ã€ãã³ã°ã¯ããããžã§ã¯ãã«ãšã³ãžãã¢ãåå ããããŒãã«èšèšãç»é¢èšèšãããçšåºŠã§ããé ãå®è£
ã«å
¥ãåãç®å®ãšããŸããããããŸã§ã®å®çžŸã§ã¯ãéçºããŒã ã®ããã¯ãªãããæ°æ¥ãæ°é±éã®éã«è¡ãããŠããŸãã ã©ãããã®ã ãããžã§ã¯ãã®æ
åœãšã³ãžãã¢ããã¬ãã¥ãŒçšã®ããã¥ã¡ã³ããäœæããŸãããããããšã«ãããŒã ã¡ã³ããŒã«èª¬æããã£ãŒãããã¯ãåãã圢ã§ã¬ãã¥ãŒäŒãéå¬ããŸãã察é¢ãããã¯ãªã³ã©ã€ã³ããŒãã£ã³ã°ã§ãåæçã«è¡ãããšãšããŠãããæèŠæéã¯æ©èœã«ãããŸããã30åãã2æéçšåºŠãšããŠããŸããé·ããªãå Žåã¯ãè€æ°åã«åããŠå®æœããããšããããŸãã ããã¥ã¡ã³ããšããŠå¿
ãçšæããããã«ããŠããã®ã¯ã以äžã®å
容ã§ãã ããŒã¿ããŒã¹èšèš äžåºŠåãåºããšå€æŽã®ã³ã¹ãã倧ããã®ã§ãERå³ãå¿
ãçšæããŠç¢ºèªããããã«ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªã㣠ã¯ãªãã£ã«ã«ãªåŠçãžã®åœ±é¿ 決æžãªã©ãéã«é¢ããç®æãäžå¿ã«ãäžå
·åãçºçãããšåœ±é¿ã倧ããéšåã¯ç¹ã«æ³šèŠããŸãã ãã®ä»ãç»é¢èšèšãã·ãŒã±ã³ã¹å³ãªã©ãæ©èœãçè§£ããããã®è³æãå¿
èŠã«å¿ããŠçšæããŸãã èšèšã¬ãã¥ãŒãéçšããŠã¿ãŠ æåã«ãã£ãŠã¿ãŠããŸããããªãã£ãããš ä»æ§çè§£ã®ããã«ç»é¢ã€ã¡ãŒãžãã説æãé²ããŠãããšãããæ©èœã®ä»æ§ãUIãžã®ãã£ãŒãããã¯ãçãäžãã£ãŠããŸããæéãããããããŠããŸããŸããããµãŒãã¹ã«å¯Ÿããæããåã
ã«ããããšã¯ãšãŠãè¯ããšæããŸãããå¹çã®é¢ããã¯ãã©ã³ã¹ãåãå¿
èŠããããŸãã ãããã®éšåã¯ããããžã§ã¯ãããŒã ã§ãã£ã¬ã¯ã¿ãŒããã¶ã€ããŒãå«ããŠæ€èšããããã®ã§ãããäžçªãã®æ©èœãèããŠããã®ã¯ãããžã§ã¯ãããŒã ã®ã¡ã³ããŒãšããããšã¯ééããªãã§ãããããããã®ç¹ã«ã€ããŠã¯ãããžã§ã¯ãããŒã ã§ã®æ±ºå®ãå°éããèšèšã¬ãã¥ãŒã§ã¯å®çŸæ¹æ³ã«ãã©ãŒã«ã¹ããŠã¬ãã¥ãŒããããã«ããŸããã æ©èœã®ä»æ§ãUIã«ã€ããŠã¯æããã«åé¡ããããšèããããå Žåã®ã¿ãã£ãŒãããã¯ããããšã«ããŠãå床ä»åãçŽãããšã«ããŸããã è¯ãç¹ é²ãæ¹ã¯æªã æ¹åãç¹°ãè¿ããŠããŸãããç·åãããšããžãã£ããªé¢ãå€ããšæããŠããŸããããã€ããç®æ¡æžãã§æããŠã¿ãŸãã ããã¥ã¡ã³ããèµ·ãããŠä»ã®äººã®ã¬ãã¥ãŒãåãããšããããã»ã¹èªäœã§ãèšèšãæŽçããã广ããã æ
åœãšã³ãžãã¢ã責任ãæã£ãŠèšèšããã®ã§å€§çã§ã¯åé¡ãªãããšãå€ããããã¯ãããã€ãã®æå¹ãªææããã ã¬ãã¥ã¢ãçŸåšæ
åœããŠãããªãªãŒã¹åã®æ©èœãšã®æŽåãªã©ãæ€èšã§ãããšãã£ãã¡ãªããããã ã¬ãã¥ãŒãåããåŽã®ã¡ãªãããšããŠããŸã å®è£
ãå§ããåãªã®ã§ææãåãå
¥ããŠä¿®æ£ãããã ã³ãŒãã¬ãã¥ãŒã®æç¹ã§ã¯ãåœç¶ã§ããã³ãŒãã¯ããçšåºŠæžãçµãã£ãŠããã®ã§ããã®æç¹ã§ãã®å€æŽã¯âŠãšããèºèºãçãŸããŸãããããããªãã®ã¯å人çã«ãšãŠã倧ãããšæããŠããŸãã ãã¡ããããã®ã¬ãã¥ãŒã¯éçºãå§ããåã®ãããžã§ã¯ãããŒã ãå«ããŠæ°æ©èœã«å¯Ÿããçè§£ãæ·±ãã¯ãªãã¿ã€ãã³ã°ã§è¡ãããã®ã§ããã¹ãŠãããã§ã¬ãã¥ãŒãåãããšããã«ã¯é²ã¿ãŸãããããã¹ãŠã®åé¡ãè»éä¿®æ£ã§ããããã§ããããŸããããã ãã¬ãã¥ãŒãè¡ã£ãã»ãããéçºèµ·å ã§ã®ææ»ãã課é¡ãæ©ãæç¹ã§çºçããããã«ãªã£ããšãããããªæ°ã¯ããŸãã 課é¡ã泚æç¹ æºå段éã«é¢ããŠã¯ãã¬ãã¥ãŒã®ãã©ãŒããããå人ã«ä»»ããã®ã§ã¯ãªãçµ±äžããã»ããã¬ãã¥ãŒããåŽããããããã®ã§ã¯ãªãããšããããšã§æ€èšããŠããŸãããã ããããžã§ã¯ãã®ç¹æ§ãªã©ãããã®ã§åãæ±ºããŠå®ããšããã®ãæåã§ã¯ãªãæ°ãããŠããã詊è¡é¯èª€ããŠãããšããã§ãã ãŸããã¬ãã¥ãŒãŸã§ã«ã©ã®ãããè©°ãããããšããç¹ãåäººã®æèŠã«é Œããšãããå€ããããããŸãããã¬ãã¥ãŒãåããŠã倧ããªå€æŽã¯å¿
èŠãªãã ãããšããçšåºŠã«ã¯è©°ããå¿
èŠããããŸãããè©°ãåãã®ã«æéããããããŠãæ©èœã®æäŸã«æéãããã£ãŠããŸããŸãã ããããããšã¯ Move Fast ã«ãããã¯ããæ¹åããããšãªã®ã§ãããã念é ã«çœ®ããŠããããã»ã¹ã®æ¹ãè¯ãåœ¢ã«æ¹åããŠãããããšæããŸãã èšèšã¬ãã¥ãŒåŸã®ããã»ã¹ èšèšãæ¿èªããããšããããããšã«èŠç©ãããè¡ããåããŒã ã®éçºã«é²ãã§ãããŸãããã®æç¹ã§ãããžã§ã¯ãã®ã¹ã±ãžã¥ãŒã«ã人å¡èšç»ã®èŠçŽããè¡ãããã«ããŠããŸãããšããããå§ããŠã¿ãŠãé
ãããã«ãªã£ããšãã調æŽãè¡ãã®ã§ã¯ãªãããã®æ®µéã§çžè«ã§ããããã«ãªã£ãããšãããããžã§ã¯ã管çã®èгç¹ããã¯ããžãã£ããªé¢ãšèšãããããããŸãããïŒãã¡ãããéçºéå§åŸã§ããå¿
èŠãããã°æè»ã«å¯Ÿå¿ããŠãããŸããïŒ ãŸãšã ã¡ã³ããŒã®å¢å ããããžã§ã¯ãã®å¢å ãšããç¶æ³ã®äžããµãŒãã¹å質ãšéçºã¹ããŒããç¶æããããã«ãèšèšã¬ãã¥ãŒãåãå
¥ããŸããã æåã¯æå±Groupå
ã§è©Šéšçã«è¡ã£ãŠããŸããããæè¿ã§ã¯å¥ããŒã ãå«ããã»ãŒãã¹ãŠã®PJã察象ã«ã¬ãã¥ãŒãè¡ã£ãŠããŸãããŸããããŒã å
ã§ã®ã¬ãã¥ãŒåŸã«ãããŒãžã£ãCTOãšãã£ãæææ±ºå®è
ã亀ããã¬ãã¥ãŒã宿œããããã«ããªããå°ããã€åœ¹å²ãåºããŠéçšãããŠããŸãã ããè¯ãéçºãè¡ãããããç§ãã¡ãæ¥ã
詊è¡é¯èª€ããªãããã£ãŠããã®ã§ãããåããããªèª²é¡ãæ±ããæ¹ã®åãçµã¿ã®ç¬¬äžæ©ãšããŠãå°ãã§ãåèã«ãªãã°å¹žãã§ãã
BASEæ ªåŒäŒç€Ÿ Product Dev Division åºç€ã°ã«ãŒã Engineerã®ç°äž ( @tenkoma )ã§ãã ããåºæ¥äºããã£ããã§2èŠçŽ èªèšŒã«YubiKeyã賌å
¥ããŠäœ¿ã£ãŠã¿ãã®ã§ç޹ä»ããŸãã ãã£ãã·ã³ã°ã«åŒã£ããããªãèªä¿¡ãç¡ããã話 1ã¶æååã®åæå€æ¹ã«ãå€åºå
ã§ä»¥äžã®ãã€ãŒããèŠãŸããã GitHub Japanãããããã£ãã·ã³ã°ãããã¡ãŒã«ãæ¥ãŠãã®ã§ã¿ãªããããæ°ãä»ããã ãã pic.twitter.com/CsmkObwUS9 — Eiji Kitamura / ããŒã (@agektmr) June 13, 2020 ã¡ããã©æ°æéåã«åãã¡ãŒã«æé¢ãèŠããããªæ°ãããã®ãšãåããæ°æéåã«PCã§GitHub.comã«ãã°ã€ã³ããŠããã®ã§ã ãããã¯ããºããããããªããåŒã£ããã£ããïŒããšçŠããŸããã ãã®å Žã§ã¯ãã¹ã¯ãŒã倿Žã ãããŸãããæ¥ãã§åž°å®
ããŠãç¶æ³ã調ã¹ãŸããããã®çµæâ GitHub ãŸãã¯GitHub Japanãéšãã¡ãŒã«ã¯èŠåœãããªãã£ã ãã©ãŠã¶ã®å±¥æŽã«åœãµã€ãã«ã¢ã¯ã»ã¹ããå±¥æŽã¯ç¡ãã£ã GitHub.com ã®Security logã«èªåã®éšå±ãšã¢ãã€ã«åç·ä»¥å€ã®IPãããã°ã€ã³ããããæäœããããã°ã¯ç¡ãã£ã ã®ã§ããã£ãã·ã³ã°ã«ã²ã£ããã£ããšããã®ãã»ãŒæãéãã§ããããšãããããŸããã(äžå®å¿) ããããããšãäžèšãã€ãŒã以å€ã®æ³šæãã€ãŒããèŠãããšããã¡ãŒã«ã§åä¿¡ãããšæã蟌ãã ã®ãããããŸããã ãã®çµéšãããããšã§ããäžèšã®ãããªã¡ãŒã«ãåä¿¡ããããå·éã«ãã£ãã·ã³ã°ãããšçãããšç¡ããåœãµã€ãã«ã¯ã³ã¿ã€ã ãã¹ã¯ãŒãããšæž¡ããŠããŸããããããªããå
¥åæ
å ±ãäžç¶ããããããã°ã€ã³ãããŠããŸããããããªãããšæããŸããã YubiKeyã賌å
¥ããŠãæ®æ®µã®2段éèªèšŒã«ã¯ããã䜿ã ããŸãŸã§ãGitHubãã°ã€ã³ãããšãã¯ãID/ãã¹ã¯ãŒãå
¥åã«ã¯1Passwordãã 2段éèªèšŒ(2FA)ã§ã¯ãAuthyã䜿ã£ãæéåæåŒã®ã¯ã³ã¿ã€ã ãã¹ã¯ãŒã(TOTP)ãå
¥åããŠããŸããã ãããäž¡æ¹ãšã人éãå
¥åããæ
å ±ãªã®ã§ããã£ãã·ã³ã°ã§åœãµã€ãã«ã¢ã¯ã»ã¹ããå Žåã«ãäž¡æ¹ãå
¥åããŠããŸãããšãã§ããŸãã (1Password ãªãURLãä¿åããŠããã°ããã©ãŠã¶æ¡åŒµã®è£å®åè£ã§çµã蟌ãŸããã®ã§ãåœãµã€ãã«ã¢ã¯ã»ã¹ãããšãããåè£ã«è¡šç€ºãããªããããšã§æ°ã¥ããå¯èœæ§ã¯ãããŸã) YubiKeyãªã©ã®ããŒããã€ã¹ã䜿ããšã2FAã§ã¯ãµãŒããŒåŽã®ãã¹ãåãªã©ãå«ãèªèšŒã«å¿
èŠãªããŒã¿ãçæããŸãã ãã£ãŠæ¬ç©ã®GitHubãã°ã€ã³ã«ã€ããèªèšŒããŒã¿ãã人éã®ãã¹ã§æž¡ããŠããŸãããšã¯ãããŸããã åã賌å
¥ããã®ã¯ãYubiKey 5Ciã§ãã Amazon | Yubico - YubiKey 5Ci - USB-C / Lightning èªèšŒã»ãã¥ãªãã£ã㌠| Yubico | USBã¡ã¢ãªã»ãã©ãã·ã¥ãã©ã€ã é販 ã¯ã³ã¿ã€ã ãã¹ã¯ãŒãããŒã¯ã³YubiKey |ïŒæ ªïŒãœããæç MacBook Pro, iPhone X, Pixel 4ã§äœ¿ãããã£ãã®ã§ãUSB Type-C, Lightning端åãä»ããŠãã5Ciã«ããŸããã GitHub.com ã®2FAã«YubiKeyãèšå®ãããšããã°ã€ã³ã¯ã©ããªãïŒ äœ¿ãå§ããåã¯ããTOTPããé¢åããããªãã®ã§ã¯ãç«¯æ«æ¯ã«èšå®ãå¿
èŠãšãã ãšã€ãããªããšæã£ãŠããŸãããããããç°¡åã«ãªããŸããã èšå®ã¯ãããŒãžã«ã¢ã¯ã»ã¹åŸãYubiKeyããããŠéå±éšåãè§Šãã ããªã®ã§çç¥ããŸãã (æ¥ä»ãã¿ããšãGitHubãã£ãã·ã³ã°ã話é¡ã«ãªã£ãŠããYubiKeyãè²·ã£ãŠèšå®ããããšãåãããŸã) GitHub.com ã«èšå®ããããã€ã¹ããŒäžèЧ ãã°ã€ã³ã§ãID/ãã¹ã¯ãŒããå
¥åããŠéä¿¡ãããšã次ã®ããã«è¡šç€ºãããŸãã ID/ãã¹ã¯ãŒãéä¿¡åŸã¯ããŸãã»ãã¥ãªãã£ããŒã䜿ã£ã2èŠçŽ èªèšŒãããªãããã ããŒããã€ã¹ãèšå®ãããšåªå
ããŠããã§èªèšŒããããã«ä¿ããããã§ããã ãUse security keyããã¯ãªãã¯ããŠãYubiKeyãå·®ã蟌ã¿éå±éšåãè§Šããšãã¯ã³ã¿ã€ã ãã¹ã¯ãŒããéä¿¡ããããã°ã€ã³ãå®äºããŸãã åã®å ŽåãAuthyã䜿ã£ããšãããç°¡åã«ãªããŸããã Authyã®å Žåã Authyãèµ·åã GitHubã®ãšã³ããªãæ€çŽ¢ããŠè¡šç€ºã(èšå®ã15åããããã) ã¯ãªããããŒãã«ã³ããŒããã6æ¡ã®æ°åãèŠã 貌ãä»ãããå
¥åããŠéä¿¡ ãšããæããªã®ã§ãæ€çŽ¢ããªããŠããã®ã§æ¥œã§ãã ãŸããMacã®Chromeã§æå¹ã«ãããšãä»ã®ããã€ã¹ã§ã®èšå®ã¯äžèŠã§ãã FirefoxãSafariã§ã䜿ããŸãããPixel 4(Chrome)ãiPhone X(Mobile Safari)ã§ãYubiKeyã§ã®2FAãåºæ¥ãŸããã ä»ã«ã©ããªãµãŒãã¹ã§äœ¿ããïŒ YubiKeyã䜿ããã詊ãããšããã以äžã®ãµãŒãã¹ã§ã¯äœ¿ããããšãåãããŸãã G Suite GitLab Twitter Facebook Sentry AWSãããžã¡ã³ãã³ã³ãœãŒã«(rootã¢ã«ãŠã³ããIAMãšãã«) AWS 以å€ã§ã¯TOTPãšããŒããã€ã¹ã®äž¡æ¹ãåæã«èšå®ã§ããã®ã§ãYubiKeyãçŽå€±ãããšãã®ãªã«ããªãŒãšããŠTOTPãæå¹ã«ããŠããŸãã å人ã§AWSã®rootã¢ã«ãŠã³ããæã£ãŠããã®ã§ãã(å
šç¶äœ¿ããŠããŸãããâŠ)ãçŸæç¹ã§ã¯TOTPãããŒããã€ã¹ã®çæ¹ããèšå®åºæ¥ããYubiKeyãçŽå€±ãããšãã®ãªã«ããªãã§ããªããããrootã¢ã«ãŠã³ãã«ã¯èšå®ããŠããŸããã ãŸã è²·ã£ãŠãªããã©ãTOTPã®ãããã«äœ¿ããæ¹æ³ã£ãŠããïŒ YubiKeyã䜿ãå§ããŠããç¥ã£ãã®ã§ãããæè¿ã®Macã§ã¯Touch IDã䜿ããŸãã 2段éèªèšŒããTouch IDãæã§æŒãããã ãã«ãªãã®ã§ããªã¹ã¹ã¡ã§ãã ãŸãPixel 4ã®é¡èªèšŒãããŒããã€ã¹ãšããŠäœ¿ããŸããã iPhone Xã®Face IDã¯äœ¿ããŸããã§ããã ãŸãšã YubiKeyã䜿ã£ã2段éèªèšŒã¯ããéã¯ããããã©ããã£ãã·ã³ã°ã§ã®äžæ£ãã°ã€ã³å¯Ÿçã«ãªããŸã ãã°ã€ã³æäœããæéåæåŒã®ã¯ã³ã¿ã€ã ãã¹ã¯ãŒã(TOTP)ããç°¡åã«ãªããŸãã YubiKeyçŽå€±æã®ãªã«ããªãããªãé¢åãªã®ã§ãAWSãããžã¡ã³ãã³ã³ãœãŒã«ã®rootã¢ã«ãŠã³ãã¯è€æ°ã®2FAãèšå®åºæ¥ãããã«ãªã£ãŠæ¬²ãã YubiKeyæã£ãŠãªãå Žåã§ããMacã®Touch IDãAndroidã®é¡èªèšŒã䜿ããå¯èœæ§ã¯ãããŸã YubiKeyãå°ããã®ã§ã財åžãšãã«å
¥ãããšããã«ç¡ãããŠããŸãããã§ãã ããŸã®ãšãããIDã«ãŒããã«ããŒã«ä»ããŠããã®ã§ããããªã¢ãŒãã¯ãŒã¯ã ãšåžžæä»ããŠãªãã®ã§ãå¥ã®ããã¯ã¬ã¹ã®ãããªãã®ãããªã¹ããã³ãã«ä»ãããããšãããããããªãããšæã£ãŠããŸããããæ¡ãããã° @tenkoma ãŸã§æããŠãã ããã
ããã«ã¡ã¯ãBASE BANKæ ªåŒäŒç€Ÿ Dev Division ã«ãŠã Software Developer ãããŠããæ±å£ïŒ @hgsgtk ïŒã§ãã å
æ¥éå¬ããã July Tech Festa 2020 ã«ãŠãã å°äººæ°ã§ã®ã¢ãžã£ã€ã«éçºãžã®åãçµã¿å®äŸ ïŒäžæ©ç®ã®èžã¿ã ãæ¹ïŒ ããšãã衚é¡ã§ãçºè¡šãããŠããã ããŸããã https://speakerdeck.com/hgsgtk/a-first-step-to-agile-movement ä»åã¯ãã®çºè¡šå
容ã«ã€ããŠããã®æèéçšã§åºäŒã£ãæžç±ãªã©ã詳説ãšããŠå ãã€ã€ãããã°ãšããŠæžãäžããŠãããŸãã çºè¡šè³æ ä»åã®çºè¡šè³æã¯ãSpeakerdeck ã«å
¬éããŠããŸãã çºè¡šå
容ãéããŠè§£æ±ºãããããšã¯ã ççŽã«æžããšã æ°ã¶æåã®èªåãæããŠã»ããã£ãããš ã§ããæ°ã¶æåã®èªåã¯æ¬¡ã®ãããªç¶æ³ã§ããã æŒ ç¶ãšããŒã éçºã«èª²é¡ãæã£ãŠããŠãã ãã®èª²é¡ã«å¯ŸããŠãã¢ãžã£ã€ã«é¢é£ã®æœçããæå¹ãªæ°ãããŠããããäžæ©èžã¿åºããŠããªã ãã®è³æã¯ããããªç¶æ³ãç®åãšããŠããæ¹ã
ã®ãªã«ãã®åœ¹ã«ç«ãŠã°ããšæããŸãšãããã®ã§ãã ãŸããã¢ãžã£ã€ã«ãšäžå£ã«èšã£ãŠãæ§ã
ãªèŠçŽ ã絡ãã§ããŸãããåœè©²è³æã¯ããããŒã ç°å¢ãã«çŠç¹ãåœãŠããã®ã§ããã An Agile Way: ã¢ãžã£ã€ã«ã®ãã©ã€ããŠã£ã³ã°ããšãã¬ãããŠã£ã³ã°ã ãã®æŽçã§ã¯ã ã¢ãžã£ã€ã«ã®ã¬ãããŠã£ã³ã° ïŒååã§ãŽãŒã«ã«åãããããŒã ç°å¢ãïŒã®ç¯å²ãã¹ã³ãŒããšããŠããŸãã ãŸãã¯çŸç¶ãèŠã ãã®ç¶æ³ã«ãããŠãç§ãåºäŒã£ãŠè§£æ±ºã®ç³žå£ãšãªã£ãã®ã¯ãã ã¿ããªã§ã¢ãžã£ã€ã« ââ å€åã«å¯Ÿå¿ã§ãã顧客äžå¿çµç¹ã®ã€ãããã ããšããæžç±ã§ãã www.oreilly.co.jp ãã®äžã§ã次ã®ãããªãã¬ãŒãºããããŸããã æåããã¢ãžã£ã€ã«ã®é©çšã¯ãåžžã«å³ããæ£çŽã«çŸç¶ãèŠãããšããå§ãŸãã äœãããŸããã£ãŠããŠãäœãããŸããã£ãŠããªãã®ããã¢ãžã£ã€ã«ãä»ã®ä»äº ã®ããæ¹ãã¡ãã£ãšå€ããã ãã®ããšãšæã£ãŠãããªããã¢ãžã£ã€ã«ããåŸãã ãã¡ãªãããã¡ãã£ãšã ãã«ãªãã ãããä»ã®ããæ¹ãéžãã å
ã«ãªã£ãŠããçŸ 2ç« èªåãã¡ã®å極æãèŠã€ãã ãããŠãç« ã®ååã2ç« èªåãã¡ã®å極æãèŠã€ãããã«ããéããèªåãã¡ã倧äºã«ãããã»ç®æãããç®æšããèšèªåããããšããå§ããŠããŸãã ããããã¢ãžã£ã€ã«ãšã®èŠªåæ§ãèãã èªåãã¡ã®çŸç¶ã®èª²é¡ã»ç®æãæ¹åæ§ãèšèªååºæ¥ããšãã¢ãžã£ã€ã«éçºã®èãæ¹ã»åãçµã¿æ¹æ³ãšã®å¯Ÿå¿ãèããããšãã§ããŸãã Manifesto for Agile Software Development ã«ç€ºãããŠããã¢ãžã£ã€ã«éçºå®£èšããã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã 䟡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ ãã«ãŠèª¬æã®ãããããªåºæ¬çãªä»äºã®é²ãæ¹ãããããã®å®è·µã®æç¡ãèå¯ããŸããã ã¢ãžã£ã€ã«ãã©ã¯ãã£ã¹ã挞é²çã«å°å
¥ãã ãã¹ãŠã®ãã©ã¯ãã£ã¹ãäžæ°ã«å°å
¥ããããšã¯ãæäžæ¯ã«ãªããŸãããäžæ°ã«çãŸããæ°ããææ®µã»HOWãçè§£ããããšããããšã«ãé¢å¿ãæã£ãŠããããéåãçãŸããã§ãããããã®ãããåªå
床ã«ãã£ãŠãå°ããã€ãã©ã¯ãã£ã¹ãæ¡å€§ããŠãããããªå€é·ããçµæçã«ãã©ã£ãŠããŸãã å
·äœçã«ã¯ã 1. ããŒã èªèº«ã®æ€æ»ãšé©å¿ â 2. ãããã¯ãã«å¯Ÿããæ€æ»ãšé©å¿ ãšãããã§ãŒãºããã©ããŸããã ããã§åãçµã¿å§ããã®ã¯ããŸãããŒã èªèº«ã®æ€æ»ãšé©å¿ã®ãªãºã ãäœãããšã§ãã 1é±éã® ã¹ããªã³ãïŒã€ãã¬ãŒã·ã§ã³ïŒ ãèšå®ãæåã«èšç»ïŒ ã¹ããªã³ãèšç» ïŒããã¹ããªã³ãçµäºåŸã«ãèªåãã¡ããŒã ã®åãçµã¿ã«ã€ããŠæ¯ãè¿ã ã¬ããã¹ãã¯ãã£ã ãè¡ã èŠç©ããã«ãçžå¯Ÿçãªå€§ããã«ãã£ãŠå³ã ã¹ããŒãªãŒãã€ã³ã ãå©çš çŸåšã®ç¶æ³ãå¯èŠåããããã« ã«ã³ãã³ç®¡ç ãè¡ã ã«ã³ãã³ç®¡çã¯ããã€ãŠãã Asana ã䜿ã£ãŠããã®ã§ãããããŸã管çã§ããŠããŸããã§ãããä»åã®åãçµã¿ã§ã¯ã ã¢ãžã£ã€ã«ã®å¢çãéçºããŒã å
ãšãã ã®ã§ãéçºäœæ¥ãšã®èŠªåæ§ãèãã GitHub Project ãå©çšããŸããã ãã以å€ã«ã¯ãæ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã®æ©äŒã§ãããã€ãªãŒã¹ã¿ã³ãã£ã³ã°ã¯ã以åããè¡ã£ãŠãŸããã ãããŠããã®åŸãããŒã ãäœãåºãææã»ãããã¯ãã®äœãæ¹ã«å¯ŸããŠãã©ã¯ãã£ã¹ãé©çšããŠãããŸããã ãããã¯ããžã®ãã£ãŒãããã¯ã«ãŒããããé »ç¹ã«åãããã«ãã¹ããªã³ãããšã®ææç©ã«å¯Ÿããæ¯ãè¿ãïŒ ã¹ããªã³ãã¬ãã¥ãŒ ïŒãè¡ã ãã£ãŒãããã¯ããããããã«ããªãªãŒã¹èšç»ãè¡ãéã®åæã®èãæ¹ãå€ããïŒ ããŒãã£ã«ã«ã¹ã©ã€ã¹ ã§ã®ããªããªãŒãžïŒ äžç¢ºå®æ§ã段éçã«äœæžãããŠããæå³ ãã®å€é·ã«ãªã£ãèæ¯ã«ã¯ãäž»ã«ïŒã€ã®çç±ãèããŠããŸããã 1ã€ç®ã¯ããŸãã¯å
·äœçãªãã©ã¯ãã£ã¹ã§ã¯ãªããç®æšã«ç®ãåãããã®æ¹æ³ã® WHY ã«çç®ããèªèº«ã®åãçµã¿ã»æ¯ãèãã«å¯Ÿããæ€æ»ãšé©å¿ã®ãªãºã ãäœãåºãã®ãåªå
ãããšããæå³ã 2ã€ç®ã¯ãã ã¢ãžã£ã€ã«ãªèŠç©ããšèšç»ã¥ãã 䟡å€ãããœãããŠã§ã¢ãè²ãŠãæŠå¿µãšææ³ ãã«ãŠç޹ä»ãããŠãããéçºãããžã§ã¯ãã®äžç¢ºå®æ§ã®èãæ¹ã Alexander Lauferã®äžç¢ºå®æ§çè« ãã§ãããã®æŠå¿µã§ã¯ããããã¯ãã«ãããäžç¢ºå®æ§ã次ã®ïŒã€ã«æŽçããŠããŸãã ç®æšã®äžç¢ºå®æ§ (end uncertainty) ïŒéçºPJã«å¯Ÿå¿ããããšãïŒäœãéçºããã®ããã¹ã³ãŒãã»ãããã¯ãã®æ§è³ª æ¹æ³ã®äžç¢ºå®æ§ (means uncertainty) ïŒéçºPJã«å¯Ÿå¿ããããšãïŒã©ããã£ãŠéçºããã®ããæè¡ã»ã¹ãã«ã»é£æºæ¹æ³ ãã¹ãŠã®ããšãäžæ°ã«çä»ããããšãããšæ··ä¹±ãçãŸããã¡ã§ãããã®ããããŸãã¯ãããŒã ã®é£æºæ¹æ³ãåãæ¹ãã«ã€ããŠã®æ¹æ³ã®äžç¢ºå®æ§ãäœæžããããã®åŸãã©ããããããã¯ããäœãã®ãããšããç®æšã®äžç¢ºå®æ§ãäœæžããããããªåãçµã¿ãç¶ããããã§ãŒãºåããšãªããŸããã ããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒãåæãšãã ããããã¯ãã«å¯Ÿããæ€æ»ãšé©å¿ããèãããšããã®å
·äœçãªæœçã¯ããããã¯ãææç©ã«å¯Ÿããã¬ãã¥ãŒãè¡ãã¹ããªã³ãã¬ãã¥ãŒããäžã€èããããŸããããã¯ããããããã€ãã¬ãŒã·ã§ã³ã§çãŸããææç©ïŒã¹ã¯ã©ã ã®èšèã§ã¯ãã€ã³ã¯ãªã¡ã³ããã§ããããïŒã«å¯ŸããŠããã£ãŒãããã¯ãåŸããããããªèšç»ãããŠããããšãåæã«ãããŸãããã®åæã«ãããŠéèŠãªããšãã ããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒ ã§ãããã ããã¯ãã More Effective Agile âãœãããŠã§ã¢ãªãŒããŒâã«ãªãããã®28ã®éæš ããšããæžç±ã§ã¯ããã广çã«ã¢ãžã£ã€ã«ã®äŸ¡å€ãåŒãåºãããã®äžã€ã®åºæ¬ååãšããŠã玹ä»ãããŠããŸãã çãã¹ããªã³ããããŸãããã«ã¯ãåãæ©èœãå°ããã€é »ç¹ã«ããªããªãŒããèœåãããŒã ãé€ããªããã°ãªããªããããããæŽ»åããµããŒãããããã«çšããããèšèšã¢ãããŒãã¯ããŒãã£ã«ã«ã¹ã©ã€ã¹ãšåŒã°ãããããŒãã£ã«ã«ã¹ã©ã€ã¹ã¯ãå¢åçã«æ©èœãŸãã¯äŸ¡å€ãããªããªãŒããããã«åã¢ãŒããã¯ãã£å±€ã§å€æŽãè¡ãããšãããã®ã§ããã 9.4 åºæ¬ååïŒããŒãã£ã«ã«ã¹ã©ã€ã¹ã§ã®ããªããªãŒ ã€ãŸãããXxxAPIãå®è£
ããŸããã»ãããŒãã«ã®èšèšãããŸãããšãã£ãã¬ã€ã€ããšã® äœæ¥ã§ã¯ãªã ãŠãããŠãŒã¶ãŒãšããŠèªèº«ã®ã¡ãŒã«ã¢ãã¬ã¹ã倿Žã§ããããšãã£ãããã«ã äžã€ã®ãã«ã¹ã¿ãã¯ã®æ©èœ ãæããŸãã å®éã«ããããã¯ãã«å¯Ÿããæ€æ»ãšé©å¿ã®ã«ãŒããåãããšãããšããã®èãæ¹ãå¿
èŠã«ãªã£ãŠããããããªãªãŒã¹èšç»èªäœããã®èãæ¹ãåæã«ãªãã©ã³ãã³ã°ãããŸããã åãçµã¿ãå§ããŠãã å®éã«ãã®ãããªåãçµã¿ã«èžã¿åã£ãã®ã¯ãCOVID-19ã®æµè¡ãã¯ããŸã£ãä»å¹Žã®æ¥ããã®è©±ã§ãããããã1weekã®ã¹ããªã³ããéããŠãããŒã éçºã«ã€ããŠã®ãã£ãŒãããã¯ã«ãŒããã以åãããæ©ãåã£ãŠããããšãæããŸãã å
·äœçã«ç®ã«èŠãããããªå·®ã§èšããšãJTF2020ãã2æåŒ±åã®2020幎6æ4æ¥ã«ãã³ããããã«ã·ã§ãšããã€ãã³ãã§ã å°ããªããŒã ãå§ããã¢ãžã£ã€ã«éçº ããšããçºè¡šãããŸãããç®æãæ¹åæ§ã¯å€ãã£ãŠããŸãããããã®äžã®ããŒã ã®åãçµã¿ã»å®è£
æ¹æ³ã¯æ¹åãããå€å®¹ãéããŠããŸãã ããŒã ããã®åšããåãå·»ãç¶æ³ã¯æ¥ã
å€ãã£ãŠãããŸããããã®äžç¢ºå®æ§ã®é«ãå€éšèŠå ã«å¯ŸããŠããã¹ããªã³ãåäœã§ã®é©å¿ã®è°è«ãã§ããŠããããã«æããŠããŸãã ãããã«ïŒJuly Tech Festa 2020 ãžã®è¬èŸ July Tech Festa 2020 ãšã¯ã2020幎7æ25æ¥ïŒåïŒã«éå¬ããããã«ã³ãã¡ã¬ã³ã¹ã§ããä»åã600å匷ïŒã®åå ç³èŸŒã¿ããã£ããšã®ããšããã techfesta.connpass.com ITã«é¢ããå
šãŠã®äººã®ç¥ç奜å¥å¿ãæºãããç¥ããäœãããã ãã®æãããJuly Tech Festaã¯çãŸããŸããã èå³ã®ããæè¡ã«è§Šããæ®æ®µäŒããªã人ã®è©±ãèãã åå ãããšã³ãžãã¢ãã¹ãã«ããã£ãªã¢ã«ã€ããŠèãããã£ããã«ãªãã°ã ãããªå Žãäœãããšä»å¹Žã July Tech Festa 2020 ãéå¬ããŸãã å人çãªè©±ã§æçž®ã§ãããèªåã瀟äŒäººãšã³ãžãã¢ã«ãªã£ãŠããåããŠã«ã³ãã¡ã¬ã³ã¹åå ããã®ããJuly Tech Festa ã§ãããããã July Tech Festa 2016 ã ã£ããšæããŸãããã®éããå€ã®äžçã¯æ³å以äžã«å
ãžé²ãã§ãã...!ããšè¡æãåããä»åã®ã«ã³ãã¡ã¬ã³ã¹ããŒãã§ããããã«ã Extend Your Engineering Life! ãããããšãã匷ãèšæ¶ãšããŠæã£ãŠããŸããä»åããããªJuly Tech Festaã®ã¹ããŒã«ãŒãšããŠããããŒã¶ã«ãæ¡æããã ããã®ã¯ãææ
šæ·±ãæ³ãã§ããã ä»åãåã®ãªã³ã©ã€ã³ã§ã®ã«ã³ãã¡ã¬ã³ã¹ã®ãªããéå¶ã¹ã¿ããã®æ¹ã
ã«ã¯ããã®å ŽãåããŠæè¬ç³ãäžããŸããããããšãããããŸããã
CTOã®å·å£ã§ãã ä»åã¯ã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒãã©ããã³ã°ããŒã«ã«ã€ããŠã§ãã ãããŸã§ã®çµç·¯ BASEã§ã¯äž»ã«PHPã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒãã©ããã³ã°ã«Raygunãå©çšããŠããŸããã https://raygun.com/ ãããæ¡çšããã®ã¯3幎以äžåã§ãåœæBASEã§ã¯PHP5.3ãå©çšããŠããããã«å©çšã§ããããŒã«ã¯éãããŠããRaygunã¯PHP5.3ã§ãåããããæ¡çšãããããã§ãã ä»ã§ã¯7.3ãå©çšããŠããã®ã§ãã®æ¡ä»¶ã¯æ°ã«ããå¿
èŠã¯ãããŸããããç©æ¥µçã«å€æŽããçç±ããªã䜿ã£ãŠããŸããã åœåã¯PHPã®ãšã©ãŒãã©ããã³ã°ã«ã®ã¿å©çšããŠããŸãããæè¿ã¯frontendã®ãšã©ãŒãã©ããã³ã°ã«ãå©çšããŠããŸãã ãããèŸããRaygun ãŸãæéãçµæ§é«ãã§ãã APMãRealUserMonitoringãªã©ã®å©çšã¯ããŠããããšã©ãŒãã©ããã³ã°ã®ã¿äœ¿ã£ãŠããŸãã https://raygun.com/platform/crash-reporting APMã¯PHPã«å¯Ÿå¿ããŠããŸãããå
ã
Newrelicãå©çšããŠããŸãã small business ãã©ã³ãå©çšããŠããã$249/month ã§ãã https://raygun.com/platform/crash-reporting#pricing ããã¯éåžžã«é«é¡ãšããã»ã©ã§ããããŸããã ã§ãããæŽã«ãã®äžã®ãã©ã³ã«ãªããš$899ãšäžæ°ã«å€æ®µãããããŸããããã¯äžæ°ã«é«é¡ã«ãªããŸãã ããã®ãããå€ããšã©ãŒã€ãã³ãã®ä»¶æ°ã«ãªã£ãŠãããæéã®ä»¶æ°ãè¶
ããŠããŸããšãã©ã³ã倿Žããå¿
èŠããããŸãã 25äžãšã©ãŒãè¶
ããŠ100äžãšã©ãŒãŸã§åãä»ããŠãããã®ã¯ãããããã§ãããçµæçã«ã¯30äžã€ãã³ãçšåºŠã§æžãã§ãããäºãæ³å®ããã³ã¹ãããã©ãŒãã³ã¹ãæªããªããŸãã ããã«Raygunã¯ããŸãPHPã®ãµããŒãã«ç©æ¥µçã§ãªããUTF-8以å€ãå«ããšåé¡ãåºããããŸãã https://github.com/MindscapeHQ/raygun4php/pull/69 https://github.com/MindscapeHQ/raygun4php/pull/69#issuecomment-514351759 https://github.com/MindscapeHQ/raygun4php/issues/94 PRã«å¯Ÿããåå¿ãéãããåŒç€Ÿã§ã¯forkããŠããããåœãŠãŠéçšããŠããŸããã WEB UIãããŸãè¯ããã®ã§ãªãå
šäœçã«é
ããæ¥ä»ç¯å²ã§ã®ãµããªãªã©ããèŸããšæããŠããŸããã GitHubãžã®issue飿ºãå€ãAPIãªã©ãå©çšããŠããããã§ãRaygunãžæž¡ãæš©éãããŸãã«åŒ·ããã®ããããåé¡ã§ãã å¥ã®ãšã©ãŒãã©ããã³ã°ããŒã«ã«å€æŽã話é¡ã«ã¯ç»ã£ãŠããŸãããããããããšå
å»¶ã°ããŠããŸããã ãšã©ãŒéå¢å ã«äŸããã©ããã³ã°ã®åæ¢ çŸåšã®ãã©ã³ã§ã¯250,000 error events/monthãåŠçããããšãåºæ¥ãŸãã åºæ¬çã«ãã®æ°ãè¶
ããããšã¯ãªãã®ã§ãããããã«ãŠã§ã¢ã®å€æŽãªã©ã§æ³å®å€ã®ãšã©ãŒãåºãããããšã¢ã¯ã»ã¹éãå€ããµãŒãã¹ã®å Žåãšã©ãŒã€ãã³ããäžæçã«å€§éã«çºçããŸãã ããæããããè€æ°åèµ·ããŠããŸãlimitãè¶
ããŠããŸããŸããã å®å
šã«ãã©ããã³ã°ãæ¢ãŸã£ãããã§ã¯ãããŸãããããšã©ãŒãã©ããã³ã°ããŒã«ãšããŠåžžçšåºæ¥ãŸããã åœç¶ãã©ã³ãäžããã°åäœãããããªã®ã§ããã3.5åè¿ã倿®µãæã£ãŠãŸã§ïŒãšããæ°æã¡ããããã®ã¿ã€ãã³ã°ã§ä¹æãæ€èšããŸããã Raygunã®ãããªãµãŒãã¹ã§ã¯éå»ã®ããŒã¿ã¯ãããŸã§éèŠåºŠã¯é«ããããŸããã ãŸã ä¿®æ£åºæ¥ãŠããªããšã©ãŒãæãå Žåå¥ã®ãã©ããã³ã°ããŒã«ã«ä¹ãæãããšããã§çºçããããšã¯ããã£ãŠããã®ã§æ¹ããŠåéããã°ããã®ã§åé¡ã«ã¯ãªããŸããã æéãå®ããæ©èœçã«åªããŠãããã®ã«ä¹ãæããæ¹ãã¡ãªããã«ãªããšèããŸããããã¡ããå®ããããšèšã£ãŠæ©èœãååã§ãªããã°raygunã§ãããã§ããå¥ã®é«é¡ãªããŒã«ã§ãåé¡ã¯ãããŸããã ä¹ãæãå
åæ§ã®ãšã©ãŒãã©ããã³ã°ããŒã«ã¯ããã€ããã Bugsnag Rollbar newrelic Airbrake ãªã©ããããŸãã ä»åã¯åŒç€Ÿã§å©çšããããšãããã¡ã³ããŒãããã®ã§ãSentryã«ããããšã«ããŸããã 倿®µãRaygunããå®äŸ¡ã§ãããæ©èœãè±å¯ããã«èŠããŸãã ä»®ã«ç¹å®ã®æã«ãšã©ãŒã倧éã«çºçããŠãããã®éã«å¿ããŠè¿œå 課éã«ãªãã®ã§ä»åã®ãããªäºæ
ã«ãªã£ãŠãæ¯æã®ãã©ã³ãŸã§å€ããå¿
èŠããªããŠå®å¿æããããŸãã https://sentry.io/pricing/ https://docs.sentry.io/accounts/pricing/#faq 14æ¥ã¯ãã©ã€ã¢ã«ãã§ããã®ã§äžæçãªä¹ãæãã«äœ¿ã£ãŠäžæºãããã°Raygunã«æ»ãäºãã§ããŸãã SDKãçšæãããŠããŸããåŒç€Ÿã§äœ¿ã£ãŠããCakePHPãå®å
šã«ãµããŒããããŠããããã§ã¯ãªãã§ããRaygunãå©çšããŠããã³ãŒãã«å°ãä¿®æ£ãå ããã ãã§åãããããšããããšã§ç§»è¡ãã¯ãããŸããã https://sentry.io/for/php/ ç§»è¡ã®å®è£
ã¯æ°æéã§å®äºããŸããã ãããããããSentry Sentryã®ãšã©ãŒãã©ããã³ã°èªäœã¯raygunãšå¥ã«å€ããã¯ãããŸããããå§åçã«å€æ©èœã§ããäºãããããŸããã WEB UIãèŠãŠã¿ããšãåäœãéãæ
å ±éãéåžžã«å€ããããŸãã Raygunã®å Žåãç°å¢æ¯ã«ã¢ããªã±ãŒã·ã§ã³ãç»é²ãapi keyãå·®ãæ¿ããå¿
èŠããããŸããSentryã®å Žåã¯environmentãæå®ããããšã§äžã€ã®ã¢ããªã±ãŒã·ã§ã³ãšããŠç»é²ããããšãåºæ¥ãŸãã ç¹ã«äŸ¿å©ã ãšæããã®ã¯ãšã©ãŒæã®ã¹ã³ãŒãã«ãã倿°ãSentryäžã§ç¢ºèªã§ããã®ã§ãã©ã®ãããªå€æ°ã«ãã£ãŠãšã©ãŒãèµ·ããã®ãã®èª¿æ»ãæããŸãã äžèšã®ãããªäºè±¡ã¯ãUndefined index: idããšãããšã©ãŒãçºçããå Žåã®è¡šç€ºã§ãã $favorites ã«ç¹å®indexã®ã¿ãªãã®ããããã空ãåç
§ããŠãããããšããã®ã倿å¯èœã§ãããããã«item_idã空é
åãšããããšããããã®ã§ãªããã®ãããªãšã©ãŒãçºçãããã®èª¿æ»ã«ãšãŠãæçšã§ãã error PHPã®ã³ãŒããäžéšè¡šç€ºãããã®ã§åºå
ã§ã¡ãã£ãšãã調æ»ããããªãã§ãããã§ãã ãšã¯ããåæã«Sentryã«ã³ãŒããã¢ããããŒããããŠããã®ã§ã¯ïŒãšããããšã§ã»ãã¥ãªãã£çã«ã¡ãã£ãšå¿é
ã«ãªãã®ãäºå®ã§ãã Spike Protectionãšããæ©èœãããã©ã«ãã§ãªã³ã«ãªã£ãŠãããäžæçã«å€§éã«ã€ãã³ããçºçããå Žåãªã©ã«ã€ãã³ããç Žæ£ããŠãããããã§ãã DBé害ãªã©ããããšå
šãŠã®ã¢ã¯ã»ã¹ã§ãšã©ãŒã€ãã³ããçºçãæ
å ±ã®ç²ŸåºŠã¯äžããã€ã€ã€ãã³ãåæ°ãæ¶è²»ããŠããŸã課éé¡ãäžãã£ãŠããŸããã¡ã§ããããã¯ãããåé¿ããŠããããã§ãã https://docs.sentry.io/accounts/quotas/?_ga=2.25032318.591036687.1594604704-646375577.1594038001#spike-protection docs.sentry.io ãããã€ãããSentry ãã©ã€ã¢ã«ããŠããç¶æ
ãªã®ã§æç¢ºãªäžæºãããããã§ã¯ãŸã ãããŸããã éç¥ã现ããèšå®ã§ããã®ã§ãããããã¯ã¡ãã£ãšæ
£ããŠããªããšå€§å€ã ãªãšããå°è±¡ã§ãã Raygunã¯ãšããããSlackéç¥ãããã ã£ããwebhookã®urlãæž¡ãã°ããã£ãã®ã§ãããã©ãããæ¡ä»¶ã§éç¥ããããšããã®ãç»é²ããªããšãããªãã®ã§æ
£ãããŸã§ã¯æžæãããããŸããã ä»ã«ã¯ãAllow Shared Issuesããšããæ©èœãããã«ãžã¥ã¢ã«ã«ãšã©ãŒã®URLãå
¬éåºæ¥ãŠããŸãã®ã¯å±éºãªã®ã§ãªãã«ããŸããã 倿©èœã§ãããããã«ãã©ããèŠãã°ãããè¿·ã£ãŠããŸããªãšã¯æããŠããŸããããŸãã«ã·ã³ãã«ã ã£ãRaygunããã®ç§»è¡ãªããäœèšã«ããæã£ãŠããŸãã®ãããããŸããã ãããã« ãŸã ãã©ã€ã¢ã«æ®µéãªã®ã§äœ¿ãããªããŠãããšããã»ã©ã§ã¯ãªãã§ãããSentryã¯RaygunãããåªããŠããããŒã«ã ãšæããŸããã ãã¡ãããšã©ãŒã¯éç¥ããã§ããã°ãããšãããã®ã§ã¯ãªãè§£æ¶ããŠããçŒå°å¹Žã«ãªããªãããã«ã¢ããªã±ãŒã·ã§ã³ãæ¹åããŠããããšãéèŠã§ãããã©ã®ãããªå Žåã«ãšã©ãŒãåºãŠããã®ãã®èª¿æ»ãããããããæ¹åãããããã§ãã ã©ã®ãããã€ã«ãã£ãŠã©ã®ãããªãšã©ãŒãåŒãèµ·ãããããããªã©ã芳枬ããŠããã¢ããªã±ãŒã·ã§ã³ã®æ¹åã«åœ¹ç«ãŠãŠãããããšæããŸãã
ããã³ããšã³ãããŒã ã®å³äº¬ã§ãã Vue.js 3 ã å
«æäžæ¬ã«ãªãªãŒã¹äºå® ãšããããšã§ãBASE ã§ãããŒãžã§ã³ã¢ããã«åããŠå°ãã¥ã€ã¢ã¯ã·ã§ã³ãå§ããŠããŸãã Vue.js 3 ã§ã¯å€ãã®æ©èœã远å ããéçºã®å¹
ãåºãããŸãããäžæ¹ã§åé€ãéæšå¥šãšãªãæ©èœãå€ãé ãæ©ãŸãããŠããæ¹ãããã®ã§ã¯ãªãã§ãããããBASE ãããã§ãã ãã®èšäºã§ã¯ ESLint ãšãã® Vue.js åããã©ã°ã€ã³ã® eslint-plugin-vue ãå©çšãããdeprecated ãšãªãæ©èœãžã®ã¢ãããŒãã玹ä»ããŸãã ãªã eslint-plugin-vue ã ESLint ã«ã¯ Vue.js ã® SFC ã®ããã®ãã©ã°ã€ã³ãšã㊠eslint-plugin-vue ãéçºãããŠããŠãBASE ã§ããããå©çšããŠããŸãã ãã®ãã©ã°ã€ã³ã«ã¯ vue/no-deprecated- ã§å§ãŸãã«ãŒã«ãããã€ããããŸããããã¯éæšå¥šã«ãªã£ãæ©èœã䜿çšããŠãããã©ãããæ€åºããããã®ã«ãŒã«ã§ãã ãããŸã§ã¯ Vue.js 2.6 ã§éæšå¥šã«ãªã£ã slot ãš scope ã«é¢ãã以äžã®ã«ãŒã«ã®ã¿ã§ããã vue/no-deprecated-slot-attribute vue/no-deprecated-scope-attribute vue/no-deprecated-slot-scope-attribute ããããæè¿ãªãªãŒã¹ããéçºã®å§ããããŠãã v7.0.0-alpha.x ã§å€æ°ã®ã«ãŒã«ã®è¿œå ãè¡ãããŠããŸãã äŸãã° BASE ã®å ŽåãVue.js 3 ã®ç§»è¡ã§ç¹ã«èª²é¡ã ã£ãã®ã filter ã®å»æ¢ã§ãã éé¡ã®å€æã«å€ãã® filter ã䜿çšããŠãããããç¯å²ãåºã眮ãæãæ¹æ³ã暡玢ããŠãããšããã§ããã eslint-plugin-vue ã§ã¯ãããã vue/no-deprecated-filter ã«ãŒã«ãé©çšããããšã§æ€åºããããšã§ããŸãã ãã®ã»ãã«ã倿°ã®ã«ãŒã«ãçŸåšé²è¡åœ¢ã§è¿œå ãããŠããŸãã ã«ãŒã«ã®äžèŠ§ã¯ 7.0.0-alpha.x ã¿ã°ã® docs ãã@ota-meshi ããã«ããæ¥æ¬èªã§ã®è§£èª¬ããåç
§ã§ããŸãã https://github.com/vuejs/eslint-plugin-vue/tree/v7.0.0-alpha.9/docs/rules https://qiita.com/ota-meshi/items/ff0d70ef326657249727 BASE ã§ã¯å€æ°ããã«ãŒã«ã®äžã§ããç¹ã«å¹æã®å€§ããã㪠<template> ã«é¢ããã«ãŒã«ãäžå¿ã«è¿œå ããŠããããšã«ããŸããã <script> éšåã«ã¯ vue-class-component ã䜿çšããŠããããšããããäžæŠåªå
ããã¹ããšããã§ã¯ãªããšå€æããŠããŸãã Monorepo ãš GitHub Actions ãå©çšããå¥ã©ã€ã³ã§ã®ç¶ç¶çãªæ¹ä¿® çŸè¡ã® Vue.js 2.x ã§ã®éçºããã¡ããè¡ãããŠãããããçªç¶ ESLint ã®ã«ãŒã«ã倿Žããã®ã¯ããŒãã«ãé«ãæãããã°ããã®éã¯æ¢åã®ã«ãŒã«ãå
±åãããããšã«ããŸããã ãããå®çŸããããã yarn workspace ã§ Monorepo ãšã㊠7.0.0-alpha.x ãã€ã³ã¹ããŒã«ããæ®æ®µäœ¿çšããŠãããã®ãšã¯å¥ã®ã«ãŒã«ãé©çšã§ããããã«ããŠããŸãã . âââ packages â âââ eslint-for-vue3 â âââ node_modules â â âââ eslint-plugin-vue // 7.0.0.alpha-x â âââ .eslintrc.js // Vue 3 ã«åããèšå® â âââ package.json âââ node_modules | ... â âââ eslint â âââ eslint-plugin-vue // æ®æ®µäœ¿ã£ãŠããããŒãžã§ã³ âââ src // lint ãã察象 âââ .eslintrc.js // æ®æ®µäœ¿ã£ãŠããèšå® âââ package.json âââ yarn.lock eslint-for-vue3 ã® package.json ã§ 7.0.0-alpha.x ã dependencies ã«è¿œå ããŸãããããŠããã® Monorepo ã®ã³ã³ããã¹ãã§ ESLint ãå®è¡ãã scripts ãèšå®ããŠããŸãã { " name ": " @base/eslint-for-vue3 ", " private ": true , " dependencies ": { " eslint-plugin-vue ": " 7.0.0-alpha.9 " } , " scripts ": { " lint ": " eslint -c ./.eslintrc.js --ext .vue ../../src " } } .eslintrc.js ã«ã¯æ®æ®µäœ¿çšããŠããã«ãŒã«ã«å ããŠã vue/no-deprecated-* ã®ã«ãŒã«ã远å ããŠããŸãã module.exports = { extends : "@baseinc/eslint-config-base" , rules: { 'vue/no-deprecated-slot-attribute' : 2, 'vue/no-deprecated-scope-attribute' : 2, 'vue/no-deprecated-slot-scope-attribute' : 2, 'vue/no-deprecated-filter' : 2, 'vue/no-deprecated-v-bind-sync' : 2, 'vue/no-deprecated-v-on-number-modifiers' : 2, 'vue/no-deprecated-events-api' : 2, 'vue/no-deprecated-functional-template' : 2, 'vue/no-deprecated-html-element-is' : 2, 'vue/no-deprecated-vue-config-keycodes' : 2, 'vue/no-deprecated-dollar-listeners-api' : 2, 'vue/no-deprecated-v-on-native-modifier' : 2, 'vue/no-deprecated-dollar-scopedslots-api' : 2, } } ãã®ç¶æ
ã§ä»¥äžã®ã³ãã³ãã§ãæ®æ®µäœ¿ã£ãŠãããã®ãšã¯å¥ã®ã«ãŒã«ãé©çšãã ESLint ãå®è¡ã§ããŸãã $ yarn workspace @base/eslint-for-vue3 run lint 察å¿ãçµäºããããã® .eslintrc.js ãæ®æ®µäœ¿ããã®ã«ææ ŒãããMonorepo ãåé€ããŠããŸãã°ããšã®çä»ããç°¡åã§ãã GitHub Actions ã§ãã€ãªãŒãã«ããæ§ç¯ããã¢ãããŒã·ã§ã³ãé«ãã ããã³ããšã³ãããŒã ã§ã¯æ¯æ¥ååæããããã¹ã¿ã³ãã¢ããããŒãã£ã³ã°ãè¡ã£ãŠãããããã«åã㊠ESLint ãå®è¡ãããã㪠GitHub Action ãèšå®ããŠããŸããæ¥ã
鲿ã確èªããæ©äŒãèšããããšã§ãVue.js 3 ãžã®ã¢ãããŒã·ã§ã³ãé«ããããã«ããŠããŸãã name: lint for Vue.js 3 on: schedule: - cron: 0 5 * * * jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '12.x' - uses: actions/cache@v1 with: path: node_modules key: ${{ runner.os }}-lintvue3-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-lintvue3- - run: yarn install --pure-lockfile --ignore-optional --network-concurrency 1 - run: yarn workspace @web/eslint-for-vue3 run lint - if: failure() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} run: | curl \ -X POST\ --data-urlencode "payload=\ {\ \"text\": \":bomb: Vue.js 3 ããã¢ã: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} \",\ }"\ ${SLACK_WEBHOOK} 以äžã§ãã ãŸãšã ESLint ãå©çšããæ¯èŒçæ°è»œã«å°å
¥ã§ãã Vue.js 3 ãžã®å¯Ÿå¿æ¹æ³ã玹ä»ããŸããã ãã¡ãããã®ãšã©ãŒããªããªã£ããããšãã£ãŠ Vue.js 3 ãžã®å¯Ÿå¿ãçµäºããããã§ã¯ãããŸãããã察å¿ã®ãšã£ããããªã©ã«ãªãã°å¹žãã§ãã ã¡ãªã¿ã«ã§ãããç¹ã« Vue.js ã®æ¯çã®é«ããªããžããªã«ãããå®è¡ããçµæã¯ä»¥äžã§ããã â 500 problems (500 errors)
ããã«ã¡ã¯ïŒãã¶ã€ããŒã®æž¡éã§ãã ä»å¹Žã®5æã«å
¥ç€ŸããUIãã¶ã€ã³æ¥åãªã©ãæ
åœããŠããŸãããªã¢ãŒãäžã§ããŒã ã¡ã³ããŒãšãªããªãçŽæ¥äŒããªãç¶æ³ã§ãããæ¯æ¥æ¥œãããä»äºãããŠããã ããŠãããŸãïŒ ãããªãªã¢ãŒãäžã§ããæŽ»çºã«æ°ããªç¥èŠãåŸããæ
å ±äº€æãããŠããããšãBASEã§ã¯ãBDI NIGHTããšããå匷äŒãè¡ã£ãŠããŸãã ä»åã¯ãBDI NIGHTãããŽã®å¶äœéçšã«ã€ããŠã話ããŸãïŒ ãããããBDI NIGHTããšã¯ïŒ 2018幎ã®ç§é ããæŽ»åããŠãããBASEã®ãã¶ã€ããŒãããããããšãæã¡å¯ã£ãŠããã¶ã€ã³ã«é¢ããå¹
åºãç¥èŠãã¿ããªã§æ¥œããåŠã¶ããšãç®çãšããä»»æåå ã®ç€Ÿå
å匷äŒã§ãã ãã¶ã€ããŒã ãã§ãªã誰ã§ãåå ããããšãã§ããæã
PMããšã³ãžãã¢ãèŠãã«ããŠãããããšãïŒ ãBDIãã¯ãBASE Design Inspirationãã®ç¥ãInspirationã®åã®éãæ°ããªã²ãããã«ã€ãªããæ°ãããããã¯ãåãäžããããšãå€ããããŸãã ãNIGHTããã€ãçç±ã¯äž»ã«å€ã«éå¬ãããããšããŸãä»äºããã¡ãã£ãšãªã©ãã¯ã¹ã¢ãŒãã§ããé
ããèåãªã©ãçæã«æ°è»œã«åå ããŠã»ãããªãšããæ³ãããã€ããããã§ãã ä»ãŸã§ã«è¡ã£ãBDIã®äŸã ãš Figmaè¬åº§ ãã©ã³ãããã webã¬ã€ã¢ãŠããã¬ãŒã¹ ã¢ããªãã¬ãŒã¹ å
補UIã³ã³ããŒãã³ãã©ã€ãã©ãªãbbqãã®ããŽãäœã Instagramã®ãã¶ã€ããŒããã¥ã¡ã³ã¿ãªãŒãèŠã éçºããã°ã®åŸ®åŠãªãšãæŽãåºã ã«ã¹ã¿ããŒãžã£ãŒããŒã¯ãŒã¯ã·ã§ãã ãªã©ãªã©....å匷ã ãã§ãªãã³ãã¥ãã±ãŒã·ã§ã³ã®å ŽãšããŠã掻çšããŠããŸãã ãBDI NIGHTãã®ããŽãã€ãããïŒ BDI NIGHTã®ãé¡ãšããŠãã®å匷äŒã®ããŽãäœãããšã«ãããŽæ±ºå®ãŸã§ã®å
šïŒåãæ¯ãè¿ã£ãŠãããŸãïŒ 1.BDIãç¥ãã»åæãã DAY1ã§ã¯æ°å
¥ç€Ÿå¡ã®ç§ãåå ãããšããããšã§ãæ¹ããŠBDIã«ã€ããŠã®æŠèŠãæããŠããã ããŸããã ãã®åŸãBDIãã©ãæã£ãŠããããã©ããªå Žã«ãããããæç¢ºã«ããããã«miroã䜿ã£ãŠãã¬ã¹ããè¡ããŸããã ãã£ãããšã§ãããèªç±åºŠã®é«ããããããããæããæ·å±
ã®äœãããªã©ã«é¢ããããŒã¯ãŒããå€ãã®å°è±¡ã§ããã ããªãã»ã©ãå
èŠãããé床ãªã¢ã«ãããã¯æãåºããšæž©åºŠæããºã¬ãŠããŸããã...ïŒããªã©ã®èŠåœãã€ããBDIååå ã®ç§ã«ãšã£ãŠå€§ãã«åèã«ãªããããããæéã§ããã 2.ãã¶ã€ã³å¶äœ 第1åã®åŸåã第2åã¯ã¿ããªã§äœæ¥ã¿ã€ã ã zoomãç¹ããéè«ããªããè³ææ¢ããã©ãäœæ¥ãªã©ãé²ããŠãããŸããã å人çã«ã§ãã人ãšè©±ãªããäœæ¥ããããšããªãæãé²ã¿ãŸãïŒç¹ã«ã©ããªã©ã®ç²Ÿå¯ããããéãå¢ããå¿
èŠãªäœæ¥ã¯ç¹ã«...ããªãã£ã¹ãªãäœæ°ãªãé£ã®äººãšã話ãããã§ããŸããããªã¢ãŒãäžã ãšãããã£ãã³ãã¥ãã±ãŒã·ã§ã³ãå°ãªããªã£ãŠããã®ã§ãä¹
ãã¶ãã®æèŠã§ãšã£ãŠã楜ããã£ãã§ãã ç§ã®ãã¶ã€ã³ã®é²ãæ¹ ãã¶ã€ã³ã®é²ãæ¹ã¯äººããããã§ãããäžäŸãšããŠç§ã®é²ãæ¹ã玹ä»ããŸãïŒ ãšããããè³æãpinterestã§éã ããªããããæããªã®äœããã...ããããã®ãããæèŠã§ããŽãçºã芳å¯ããŸã ãBDIããšçãã¢ã«ãã¡ããããªã®ã§ãæåãã®ãã®ã«ãŠãŒã¢ã¢ãªå³æ¡ãå ãã£ãŠããã®orã°ã©ãã£ãã¯äž»äœã®ããŽãããªããšæããªããã ãª....ãªã©èããªããèŠåœãã€ããŠãã³ããŠãããŸã BDIã®ããããæŒåºããã¢ãããŒããè€æ°èããªããã©ããæžã ã©ããåºãéã¯äŒŒããããªæ¡ã䞊ã°ãªãããããã£ã€ãèŠãç®ãå€ããããšãæèããŸããã¢ãããŒãããå
šç¶éãèãæ¹ã«ãããšã¢ãŠãããããã°ãããŠè¯ãæãã«ïŒ ã€ã³ãã¯ããã象城çãªã°ã©ãã£ãã¯ãã¡ã€ã³ã«ãããâã²ãããã®è±¡åŸŽã®é»çã䜿ããããããã ãã ãšæ
å ±éãããªãã®ã§ãæãå
¥ãããèæ¯ã«æç©ºãããã... å匷äŒã§ããããšãã¢ã€ã³ã³åãããâç¥èŠãåŸã....ã€ã³ã¹ããŒã«ã¢ã€ã³ã³ãšããèœãšã蟌ãïŒå
鲿ã»ã·ã³ãã«ã»ã©ãã£ãœã å匷äŒãªãã ãã©ããæ·å±
ãäœãããããšããæå¿ãæ±²ã¿ããâBARãšããé
ã¿ãããªå€ã®æ¥œãããã©ã€ããŒããªé°å²æ° ã©ããæžããªãããpinterestã«æ»ã£ãŠãã©ããã£ããæ³åããŠã峿¡ãããŸãããšåãŸãã®ããåèè³æãéããããç¹°ãè¿ããŸãã ã©ãã¯ipadã§æžããŠãŸãã æ°ã«å
¥ã£ãæ¡ããã©ãã·ã¥ã¢ããããªããããªãªãžããªãã£ãæ
ä¿ãã è³æããã£ã±ãèŠãªããæžããŠãããšãè³æã«ãã¶ã€ã³ã䌌ãŠããããšãããªããããŸããä»ã®ãã¶ã€ã³ãšå·®å¥åã§ãããªãªãžããªãã£ãå ãã圱é¿ãåããŠãããšæãããè³æããã¯ãªã¹ãã¯ã粟ç¥ãæã£ãŠæèçã«é¢ããŠãããŸãã ãã¬ã¹ãã¬ã€ã¢ãŠãã®äžèŽãªã©ã®ãã©ãã«ãèµ·ãããªããããããŒãã¯01ã§ææžãã§æžãèµ·ããããããŸãã ã€ã©ã¹ãã¬ãŒã¿ãŒã§æŽããä»äžãå å·¥ãªã©ãã Aiã䜿ã£ãŠã¬ãããªè©°ããŠãããŸããåºæ¬çã«ã¯ã¢ãã¯ãã§å¶äœâã³ã³ãã©ã¹ãããã£ãŠã¡ãããšèŠèªã§ããããã§ãã¯âç圩ã®é ã«é²ããŠããŸãã æã¡æåããã®ãŸãŸäœ¿ãããšã¯ãããåºæ¬çã«ã¯ã¢ãŠãã©ã€ã³åããŠãã©ã³ã¹ãèŠãªãã調æŽããŸãã 3. ãæ«é²ç®&æç¥šã¿ã€ã æçµåã§ã¡ã³ããŒã®æ¡ããæ«é²ç®ïŒåæ¡ã«ã³ã³ã»ãããæ·»ããŠãèªèº«ã®äœåã玹ä»ããŠãããŸããã1ã€ã®ãé¡ã§ã補äœè
ã«ãã£ãŠå
šç¶è§£éãéããåæ§çãªããŽãéãŸããŸããã åèªã³ã³ã»ãããçºè¡šããåŸãïŒäººïŒç¥šã§å¥œããªããŽã«æç¥šããåœ¢ã§æ±ºå®ããŸããã æçµçã«æç¥šã§ç§ã®æ¡ãéžã°ããŸãã...ïŒããããšãããããŸã...ïŒ æ¡çšãããããŽ çµæããã¡ãã®æ¡ãæ¡çšãããŸããïŒBASEã®è±¡åŸŽãã£ãããã²ããããå€ã«åããŠçºä¿¡ããã€ã¡ãŒãžã®å³æ¡ã§ããã°ã©ã³ãžã®å å·¥ãæœãããã£ãÃå€=ãã€ããã£ã³ããªé°å²æ°ã«ä»äžããŸããã ã°ã©ã³ãžå å·¥ã¯webã«ãããŠã¯ããŸãçžæ§ãè¯ããªãããµã€ãºã«ãã£ãŠã¯æœ°ããŠããŸãããšããããŸãã ã°ã©ã³ãžã¯ç§ã®å¥œã¿ã§ä»ããç¹ã§ãããã®ã§ãã©ããªç°å¢ã§ãå¿«é©ã«äœ¿ã£ãŠããããããã«ã°ã©ã³ãžç¡ãverãšæšªçµverãçšæããŸããã ãŸããslackã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ããã«å°ãããŠãèŠèªæ§ãããçšåºŠä¿ã£ãçµµæåverãçšæããŸãããå²ãšå¥œè©ã§ããããã£ãã§ãïŒ ãŸãšã æ®æ®µUIãã¶ã€ã³ã®ä»äºãã¡ã€ã³ã®äžãä»ã®ã¡ã³ããŒã®ã°ã©ãã£ãã¯ãã¶ã€ã³ãèŠããäºãæ°é®®ã§ãšã£ãŠã楜ããã£ãã§ããçºæ³ãïŒäººïŒäººå
šç¶éããèªåã§ã¯èãã€ããªããããªçŽ æµãªæ¡ã沢山åºãŠããŸããã UI/UXãšéã£ãŠããžã«ã«ã«ã¯è§£æ±ºãã¥ããã°ã©ãã£ãã¯ãã¶ã€ã³é åã§ããããããã£ãè§£éã®åºãããèŠããšæç¢ºãªçãããªãããããã®é¢çœããæ¹ããŠå®æããŸãã æè»ãªçºæ³åãæã£ãŠããããããè²ã
ãªãã¶ã€ã³ã«ãã£ã¬ã³ãžããŠãããããšæããŸãïŒæ¬¡ã®BDI NIGHTãåŸ
ã¡é ãã...ïŒ