åãã« BASEã¢ããã³ãã«ã¬ã³ããŒã® 13æ¥ç®ã§ãã ãã¡ãã®èšäºã§ã¯ãBASEã®éçºçµç¹ã®ç°å¢ãããããæé·ããŠããè¥æãšã³ãžãã¢ã«ãšã£ãŠãšãŠãããç°å¢ã§ããããšã身ããã£ãŠäœæãããããã¬ããããŠããã ããŸãïŒ èªå·±çŽ¹ä» ããã«ã¡ã¯ãOwners Marketingæå±ã®è¥èãšç³ããŸãã æ®æ®µã¯ãæ°èŠã·ã§ãããªãŒããŒã®æ¹ã«ããããBASEã䜿ã£ãŠããããããã®æ©èœæ¹åãã ãã£ãšããããã®äººã«BASEã䜿ã£ãŠããããããã«ããããã®æ©èœæäŸã«åãçµãã§ããŸãã 察象ã®èªè
ãšäŒãããããš ãã¡ãã®èšäºã¯ã以äžã«åœãŠã¯ãŸã人ã«ç¹ã«ã芧ããã ãããèšäºã«ãªã£ãŠããŸãã ãšã³ãžãã¢ãšããŠã®ãã£ãªã¢ãããããã©ã䌞ã°ããŠããããè¿·ã£ãŠãã人 ãŸãããã®èšäºã«ãããŠãäŒããããããšã¯ä»¥äžã§ãã BASEãè¥æãšã³ãžãã¢ã«ãšã£ãŠéåžžã«è¯ãæé·ç°å¢ã§ãããšæããŠãã ãã®çç±ã»èæ¯ãªã©ãå®éã®åºæ¥äºããŒã¹ã«ãçŽ¹ä» å
¥ç€ŸããŠ1幎ãçµéããç§ãããã®1幎ã§å®éã«ãšã³ãžãã¢ãšããŠBASEã§åããªããæããç¹ãã ä»äºé¢ ãš äŒç€ŸçæŽ»é¢ ã«åããŠããäŒããããŠããã ããããšæããŸãã ä»äºé¢ ðð»ãããžã§ã¯ãã®éçºè²¬ä»»è
ãšããŠãæ¥çåã®æ©èœããªãªãŒã¹ãã BASE ã§äœ¿çšã§ããé
éæ¹æ³ã®äžã€ã§ããã ããããçºéApp ã«ãŠãå¿åé
éæ©èœãæäŸãããšãããããžã§ã¯ãã®éçºäž»æ
åœãæ
ããŸããã ïŒè©³çŽ°ã¯ ãã¡ã ïŒ BASEã¯å人ã®å©çšã§ããã°ã äœæã»é»è©±çªå·ãéå
¬é ã«ããŠãããã·ã§ããããªãŒãã³ããããšãã§ãããããå¿åé
éæ©èœãå®çŸãããã°æ¥çåã® å¿åã§ãããã·ã§ãããéãã売ãããšãã§ãã ããšãšãªãã瀟å
å€åããã€ã³ãã¯ãã®åŒ·ããããžã§ã¯ãã§ããã èªèº«ã®æé·ã«ã€ãªãã£ãç¹ ãã®ãããžã§ã¯ããçµãŠãç¹ã«ä»¥äžã®2ã€ã®ããšãæé·ã«ç¹ãã£ããšæããŠããŸãã éçºã®ãã¡ã¡ã³ããŒãšããŠã ãã§åç»ããŠãããåŸãããªãã£ããããªçµéšãç©ãããšãã§ãã倧å€ãããããæã£ãŠããŸãã 1ïžâ£ 1ã€ç®ïŒã確å®ãªãããžã§ã¯ãã®é²ãæ¹ã»äžç¢ºå®æ§ãããã«æžãããããšãã芳ç¹ã身ã«ã€ãã æ¬ãããžã§ã¯ããé²ããã«ããããçµéšè±å¯ãªãããŒãžã£ãŒã«é²ãæ¹ãçžè«ããŸããã ããã§ä»¥äžã®ãããªã¢ããã€ã¹ãããã ããããããå®è·µã«ç§»ãããšã§å®å¿ããªãããããžã§ã¯ãé²è¡ãè¡ãããšãã§ããŸããã ãã¿ã€ã ã©ã€ã³ã管çããã¬ã³ããã£ãŒããçšããŠãããžã§ã¯ãã管çããããšã ããªã¹ã¯ç®¡çãå
æå
æã§é²ããããšã äžã§ã ãªã¹ã¯ç®¡ç ã¯ç§ããããŸã§ä»äºãé²ããäžã§ããŸãæèã§ããŠããªãã£ãç¹ã§ããã ãããžã§ã¯ãã®åææ®µéã§ãä»åŸãªãªãŒã¹ãŸã§ã«çºçãããæ§ã
ãªãªã¹ã¯ããã¬ã¹ã圢åŒã§æŽãåºãããããã·ãŒãã«ããŠæ¯é±ã®å®äŸãªã©ã§å®æçã«ãŠã©ããããŠãããŸãã 詳现ã¯ã以äžã®èšäºãã芧ãã ããã äžç¢ºå®æ§ã«ç«ã¡åããäžã€ã®Tipsããªã¹ã¯ç®¡çã«åãçµãã è©±ã æ±ºããŠæå
ã®éçºã ãè¡ã£ãŠããã°ããããã§ã¯ãªããèªåã®éçºã¿ã¹ã¯ãããªããªããããããžã§ã¯ãå
šäœã®ãªã¹ã¯åé¿ãå®å
šé²è¡ãæèããŠããã 以éãç§ã®æ¥ã
ã®æ¥åã«ãããŠã圱é¿ã倧ããäžãç¶ããŠããæèæ¹é©ã ã£ããšå®æããŠããŸãã 2ïžâ£ 2ã€ç®ïŒæ©èœä»æ§ã®é
ã
ãŸã§ææ¡ããææç©ãã¹ãŠã«è²¬ä»»ãæã€æèã身ã«ã€ãã ä»åãæ°ãã«å¿åé
éãå®è£
ãããããããçºéAppsãã¯ã 2018幎ããæäŸãéå§ããŠãã æ©èœã§ãã åœæéçºãæ
åœããŠããã¡ã³ããŒã¯ãã§ã«é瀟ããŠããŸã£ãããšãBASEå
ã§ãæ©èœä»æ§ã«ç²ŸéããŠãã人ãå°ãªãç¶æ³ã§ããã ãã®ããã èªãããã®æ©èœã® 瀟å
ã§äžçªã®ä»æ§çè§£è
ã«ãªã å¢ãã§ãœãŒã¹ã³ãŒãã瀟å
ããã¥ã¡ã³ããªã©äœ¿ãããã®å
šãŠã䜿ã£ãŠèª¿ã¹äžããŠãããæ¢å仿§ãšè¿œå 仿§ã®ææ¡ããªãŒãããŸããã æ¬æ©èœãªãªãŒã¹åŸããå¥ãããžã§ã¯ãã«åŸäºããåããããããçºéAppsã«ããã瀟å
ã®èª¿æ»ãç©æ¥µçã«åŒãåãããªã©ããŠãç¥èŠã瀟å
ã«éå
ã§ããããã«ããŠããŸãã äŒç€ŸçæŽ»é¢ ðð»ãã£ã¬ã³ãžå€§æè¿ã§ãæé·ãäžç·ã«èããŠãããçµç¹ äŒç€Ÿãéçºçµç¹å
šäœã§ã ãã£ã¬ã³ãžãæè¿ãã ãé°å²æ°ããããšæããŠããŸãã BASEã®è¡åæéã«ãæ²ããããŠããã Be Hopeful ããæäŒã圢ã§ããã£ã¬ã³ãžæè¿ãªæåéžæã«äœçšããŠãããšæã£ãŠããŸãã Be Hopeful 楜芳çã§ããããšã æåŸ
ããæªæ¥ã¯å®çŸãããšä¿¡ããŠãåæ°ããéžæããããã BASEã®Slackã¯ãŒã¯ã¹ããŒã¹ãèŠãŠãããšã瀟å
ã®è³ãæã§äžèšã®Be Hopefulãæããå Žé¢ãå€ããéçºçµç¹ã«éããå
šç€Ÿçã«ææŠãæè¿ãããé°å²æ°ãæããŸãã ãã®äžã§ããç§ãBASEã§åãäžã§ç¹ã«æããã æé·ã§ããç°å¢ ã«ã€ããŠè§ŠããããŠããã ããŸãã ð ç®æšãæç¢ºã«èšå®ãã䌎走ããŠããã BASE瀟å
ã§ã¯ãååæããšã«OKRãã¬ãŒã ã¯ãŒã¯ãçšããŠç®æšèšå®ãè¡ããŸãã ãã®éãã¹ãã¬ããã®å¹ãããã£ã¬ã³ãžã³ã°ãªç®æšèšå®ãè¡ãããšãå¯èœã§ãã£ãããæ
åœãããŒãžã£ãŒãç®æšèšå®ã®å£æã¡ããããŠããããã宿çãª1on1ã§é²æã®çžè«çžæã«ãªã£ãŠãããŸãã ãããæé·ããŠããäžã§ãã³ã³ãã©ãŒããŸãŒã³ã»ã©ãŒãã³ã°ãŸãŒã³ã»ãããã¯ãŸãŒã³ã3ã€ã®ãŸãŒã³ãéèŠãšèšãããŸãããBASEã§åããŠããäžã§åžžã« æãæé·ãããããšèšããããã©ãŒãã³ã°ãŸãŒã³ã ã«ããããŠãããšæã£ãŠããŸãã ãšã³ãžãã¢ãšããŠãã£ãªã¢åœ¢æãèããªãæ¥ã¯ãããŸããã ç§ã¯ä»äºã§èªåã®ã§ããç¯å²ã®ããšããè¡ããªãã³ã³ãã©ãŒããŸãŒã³ã§åæ»ããŠããããšã«æãæ©ã¿ãBASEãžè»¢è·ããèæ¯ãããããæ¥ã
ã®æ¥åãããªããªãã ã©ãŒãã³ã°ãŸãŒã³ã«å±
ãããããš ãå人çã«ãšãŠãããããããšæã£ãŠããŸãã ð"è¶å¢"ãæšå¥šãããã£ã¬ã³ãžãæè¿ããŠããã æ¥ã
æ¥åã«æºãã£ãŠãããšãæ¥åãã¡ã€ã³ãæè¡ãã¡ã€ã³ã§æ
åœé åãªã©ãã§ããŠãããšæããŸãããããããèžãŸããŠBASEã®éçºçµç¹ã§ã¯ãèªåã®æ
åœé åã®æ ãè¶ããŠæŽ»èºãã人ãããã£ã¬ã³ãžãã人ããå€ãããã«æããŸãã 以åç§ããæ¥é ã¯ãµãŒããŒãµã€ããšã³ãžãã¢ã§ãããªããããã³ããšã³ãã®éçºã»ãªãªãŒã¹ã«æºãããèšäºãå·çãããŠããã ããŸããã ãµãŒããŒãµã€ããšã³ãžãã¢ãããã³ããšã³ãã«ææŠããŠæé«ã®çµéšã«ãªã£ã話 ç§èªèº«ãäžèšã®çµéšãçµãŠããã«æ¥é ã®æ¥åå
ã§ã®ãã£ã¬ã³ãžã³ã°ãªããšãžã®æ·å±
ãäžãã£ãããšãããã ãã£ã¬ã³ãžãè¡ãããšã§æ¬¡ã®ãã£ã¬ã³ãžããããããªãå¥œåŸªç° ãæç¢ºã«å®æããŸããã BASEã«å
¥ç€Ÿããåã®æ®µéã§ã¯ãäžèšã®ãããªããã¯ããã°ãä»åã®ãããªã¢ããã³ãã«ã¬ã³ããŒã®å·çãæ°ãåŒããŠããŸããèªåã¯æçš¿ããªãïŒã§ããªãïŒã ãããª...ããšæã£ãŠããŸã£ãŠããã®ã§ããã¡ã㯠æç¢ºãªãã€ã³ãã®åäžãã§ãã ãšæã£ãŠããŸãã âïž ãŸãšã ç§ãBASEã«å
¥ç€ŸããŠæé·ããããç°å¢ãšæããçç±ããäŒããããŠããã ããŸããã æ¥ã
ã®æ¥åãããªãããšã倧äºã§ããããããšåãããã èªèº«ã®æé·ã宿ã§ããããš ã倧äºã ãšæã£ãŠããŸãã äœãããæé·ã宿ããªããæ¯æ¥ã®ä»äºãããªããããšãã·ã³ãã«ã«ä»äºã®æ¥œããã»å
å®åºŠã«ãçŽçµããŠããŸãã ãšã³ãžãã¢ãšããŠåããŠæ°å¹Žãçµã¡ãŸããããã®äžå¹Žãééããªã ä»ãŸã§ã®ãšã³ãžãã¢äººçã§äžçªå
å®ããŠãã ãšèªä¿¡ãæã£ãŠèšããŸãã èªè
ã®æ¹ã®äžã«ããšã³ãžãã¢ãã£ãªã¢ã®ãããããäžå®ãªæ¹ãè¿·ã£ãŠããæ¹ããã£ã¬ã³ãžããŠããããæ¹ãªã©ããããããã«ãžã¥ã¢ã«é¢è«ãªã©ã宿œããŠããŸãã®ã§ãã²äžåºŠãé£çµ¡ãã ããïŒ ææ¥ã¯matzzãããšyuniããã®èšäºã§ãïŒã楜ãã¿ã«ïŒ
ã¯ããã« æ¬èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®11æ¥ç®ã®èšäºã§ãã ã¯ãããŸããŠãCSEã°ã«ãŒãã®ãšã³ãžãã¢ã®æ³åãšç³ããŸãã BASEã®CSEã°ã«ãŒãã§ã¯ç€Ÿå
æ¥åæ¹åãå
éšçµ±å¶ã®æŽåãªã©å¹
åºãæ¥åã察å¿ããŠããŸãã CSEã°ã«ãŒãã«ã€ããŠã¯ãã¡ããã芧ãã ããã devblog.thebase.in ä»åã¯ãBASEã«ãããæååŠçã®æŠèŠãšreportã·ã¹ãã ã®èªååãæ¥åãããŒã®èŠçŽããªã©ã®æ¥åæ¹åã«ã€ããŠã玹ä»ããŸãã BASEã«ãããæååŠçã»reportã·ã¹ãã ãšã¯ æååŠç BASEã§ã¯J-SOX察å¿ã®äžç°ãšããŠã BASEã·ã§ããã®å£²äžéãšæ±ºæžãµãŒãã¹åŽã®å
¥éããŒã¿ BASEã·ã§ããã®å£²äžéãšBASEåŽã®æ±ºæžããŒã¿ BASEåŽã®æ±ºæžããŒã¿ãšæ±ºæžãµãŒãã¹åŽã®å
¥éããŒã¿ 決æžãµãŒãã¹åŽã®å
¥éããŒã¿ãšå®éã®å
¥éé¡ ããã4ç¹ã®æŽåæ§ãåããŠããããšã確èªããããšã§è²¡åå ±åäžã®ä¿¡é Œæ§ãæ
ä¿ããŠããŸãã æååŠçã¯ææ¬¡ã§ãããã®æŽåæ§ãåããŠããããšã®ç¢ºèªãè¡ãããšãæããŠããŸãã reportã·ã¹ãã CSEã°ã«ãŒãã§ã¯äžèšã®æååŠçãè¡ãã«ãããreportã·ã¹ãã ãšåŒã°ããã¬ããŒãã£ã³ã°ã·ã¹ãã ãæ§ç¯ããŠãããæ±ºæžãµãŒãã¹åŽã®å
¥éããŒã¿ã®ååŸãBASEäžã®æ±ºæžããŒã¿ãšã®çªå(å·®ç°èª¿æ»)ãè¡ãªã£ãŠããŸãã reportã·ã¹ãã ã®è©³çްã«ã€ããŠã¯ãã¡ããã芧ãã ããã devblog.thebase.in ãããŸã§ã®æååŠçã®èª²é¡ ã·ã¹ãã ã®å®è¡æé ãè€é reportã·ã¹ãã ã§ã¯BASEã®ããŒã¿éèšãã¬ããŒãã£ã³ã°ãè¡ããçµçåŽãžå£²äžããŒã¿ã飿ºããŠããŸãã ãã ããæçµçã«çµçåŽãžå¿
èŠãªããŒã¿ãåãæž¡ããããŸã§ã«ã以äžã®ãããªå·¥çšã§æåã§ã³ãã³ãå®è¡ãããããŒã¿ãåã蟌ãã ãããå¿
èŠããããäœæ¥è
ã®æ
£ããå¿
èŠãšãªã£ãŠããŸããã ãŸããæ±ºæžã«ãã£ãŠã¯reportã·ã¹ãã ã®DBã«æ±ºæžããŒã¿ãåã蟌ãŸãããŸã§ã«ã¿ã€ã ã©ã°ãããããã売äžã¬ããŒããããŒã¿ã®çªåã®éã«äœæ¥è
ãæåã§æ¥ä»ã®ãªãã·ã§ã³ãæå®ããŠPythonã³ãã³ããå®è¡ããå¿
èŠããããŸããã ãããã£ãæåã§ã®ã³ãã³ãå®è¡ã®éã«äººçãã¹ãçºçããå¯èœæ§ãåŠããŸããã§ããã å·®ç°èª¿æ»ãè€éã«ãªãããšããã å·®ç°èª¿æ»ãšã¯ ææ¬¡åŠçã§ã¯æ±ºæžã·ã¹ãã åŽã®æ±ºæžããŒã¿ãšBASEã®æ±ºæžããŒã¿ã®æŽåæ§ã確èªããããã«ãããããã®æ±ºæžããŒã¿ãçªåããŠå·®ç°ããªããã確èªããŠããŸãããããå·®ç°èª¿æ»ãšåŒãã§ããŸãã ã©ã®ãããªæã«å·®ç°ãçºçããã å·®ç°ã¯ä»¥äžã®ãããªæ¡ä»¶ã§çºçããããšããããŸãã BASEãæ±ºæžã·ã¹ãã åŽã®äžå
·åãç¹æ®ãªåŠçã«ããå·®ç° äžå
·åã®è§£æ¶ãªã©ã«äŒŽãè¿éåŠçã§çºçããå·®ç° æ±ºæžã·ã¹ãã ã«ãã©ã³ã¶ã¯ã·ã§ã³ãæž¡ããŸã§ã®ã¿ã€ã ã©ã°ã«ããå·®ç° ãããã®å·®ç°ã¯æ¯æçºçããå¯èœæ§ããããCSEå
ã§äºåã«ææ¡ã§ããŠããªãå·®ç°ããã£ãå Žåãå·®ç°ã®åå ã®èª¿æ»ã«æéããããããšããããŸããã ã©ã®ãããªæ¹åãè¡ã£ãã ã·ã¹ãã ã®å®è¡èªåå åæ±ºæžã·ã¹ãã ããæ±ºæžããŒã¿ãååŸããç®æã«é¢ããŠã¯ãpuppeteerã䜿ã£ããã©ãŠã¶æäœã§èªååãããŠããŸããããäžéšã®æ±ºæžã«é¢ããŠã¯ç®¡çç»é¢ã«ãã°ã€ã³ããŠããŒã¿ãããŠã³ããŒããDBã«ããŒã¿ãåãèŸŒãæ¹åŒããšã£ãŠããããããŸãã¯ãã¡ããèªååã§ãããã察å¿ãé²ããŸããã ãŸãã売äžã¬ããŒãã®ååŸã決æžå·®ç°ã®æœåºãå
±æãã©ã«ããžã®é
眮ãªã©æåã§å®è¡ããŠããäžé£ã®åŠçã1ã€ã®StepFunctionsã«ãŸãšããããšã§ãæåã§ã®äœæ¥ããªããã¯ã³ã¯ãªãã¯ã§åŠçã§ããããã«ããŸããã å·®ç°èª¿æ»ã®æ¹å 調æ»ãããŒã®æŽå 決æžã®å·®ç°ãçºçãããã¿ãŒã³ã«ã¯ããçšåºŠæ±ºãŸã£ããã¿ãŒã³ããã£ããããå·®ç°ã®èª¿æ»æ¹æ³ããããŒã«èµ·ãããCSEå
ã§èª°ã§ã調æ»ãé²ããããããã«å¯Ÿå¿ããŸããã ãŸããçºçããå·®ç°ã®å
ãæãè·šãã§å¯Ÿå¿ãå¿
èŠãªãã®ã«é¢ããŠã¯ãå¥éã·ãŒããäœæããŠå¯Ÿå¿ç¶æ³ã远ããç¶æ
ã«ããããšã§å·®ç°ãèŠå€±ããªãäœå¶ãäœã£ãŠããŸãã æåã®ç¢ºèªäŒ æ¯æå·®ç°ã®ç¢ºèªçšã®slackãã£ã³ãã«ãäœæããå·®ç°ãšããŠæœåºãããããªæ±ºæžãäºåã«CSEå
ã§å
±æããŠããããšã«ããŸãããææ«ã«ã¯ç¢ºèªäŒãèšããŠCSEå
ã§å床確èªããããšã§ãå·®ç°èª¿æ»ã®ãã³ããåŸããèª¿æ»æéã®ççž®ã«ç¹ãããŸããã çµæ ãããŸã§æååŠçã®éã«ã¯å£²äžã¬ããŒãã®åãæž¡ããšå·®ç°èª¿æ»ãå«ããŠ2å¶æ¥æ¥çšåºŠèŠããŠããŸããããŸããå·®ç°èª¿æ»ãè€éã«ãªããCSEç·åºã§æéããããŠèª¿æ»ããããšããã°ãã°ãããŸããã æ¹ååŸã¯å£²äžã¬ããŒãã®åãæž¡ãã¯1æéçšåºŠãå·®ç°èª¿æ»ãå«ããŠã忥çšåºŠã§å®çµããŠãããçµçåŽãžã®é£æºã«ãããæéã倧å¹
ã«ççž®ãããŸããããŸããããŒã¿ãæ©ã飿ºã§ããããã«ãªã£ãããšã§ãçµçåŽã®æåäœæ¥ã1å¶æ¥æ¥çšåºŠççž®ããæ±ºç®ã¹ã±ãžã¥ãŒã«äžäœè£ããã£ãŠåãçµãããšãã§ããããã«ãªã£ãŠããŸãã æåŸã« ä»åã®æååŠçã®æ¹åã«é¢ããŠã¯CSEã°ã«ãŒãå
ã®æ¥åæ¹åã§ããããå®éã«æ¥åãéããŠèª²é¡ãèŠããŠããããšãæ¹ããŠå®æããŸãããä»ã®æ¥åæ¹åã®éã«ããŸãã¯äžåºŠæ¥åãäœéšããŠçè§£ããããšããå§ããŠã¿ãããšæããŸãã ææ¥ã¯@naoki.munechikaãããš@yuniããã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ããã
ãã®èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã® 10 æ¥ç®ã®èšäºã§ãã ã¯ããã« åããŸããŠãBASE ã®ããã¯ãšã³ããšã³ãžãã¢ã® shiiyan ãšç³ããŸãããã®èšäºã§ã¯ããã¡ãããªæ³šææ€çŽ¢ã¢ãã«ããªãã¡ã¯ã¿ããããšã®çµç·¯ãšææ³ã«ã€ããŠç޹ä»ããŸãã æ³šææ€çŽ¢ã¢ãã«ããªãã¡ã¯ã¿ããçç± å€å
žç㪠MVC ã¢ãã«ã§ã¯ãã¹ãããŒã³ã³ãããŒã©ãŒã»ãã¡ããã¢ãã«ïŒ Skinny Controller, Fat Model ïŒã®èãæ¹ãããããã«ããããã¯ãã®æé·ãšå
±ã«ãã¢ãã«ãè¥å€§åããŠããããšã¯å€ã
ãããŸãã BASE ã«ãããŠã泚æã¢ãã«ãšæ³šææ€çŽ¢ã¢ãã«ã¯ãã®æµãããéããããŸããã§ããã2022 幎åãã®æç¹ã§ã¯ãæ³šææ€çŽ¢ãæ
åœããã¢ãã«ã¯ã©ã¹ã¯ 1 ãã¡ã€ã« 3000 è¡åŒ±ã®èŠæš¡ã«è¥å€§åããŠããŸãããããã£ãã¢ãã«ã¯ã©ã¹ã§ã¯ãã³ãŒãèªäœãèªã¿ã¥ããã ãã§ãªããæ©èœæ¹ä¿®æã«åœ±é¿ç¯å²ãèªã¿ã«ãããã¡ã³ãã³ã¹ããé«ããšãã課é¡ããããŸããã 2021 幎 12 æãã 2022 幎 3 æãŸã§ãç§ã¯æ³šæç®¡çæ¹åãããžã§ã¯ãã«åå ããŠããŸããããã®ãããžã§ã¯ãã§ã¯ããã«ããã¯ãç¹å®ããæ³šææ€çŽ¢ã®ããã©ãŒãã³ã¹æ¹åãç®çãšããŠããŸãããããã«ããã¯ãç¹å®ããããã«ããŸãåŠçã®æµããçè§£ããå¿
èŠãããããããŠãå·¥æ°ã®èŠç©ããåºãããã«ãæ³šææ€çŽ¢åŠçãä¿®æ£ããå Žåã®åœ±é¿ç¯å²ã調æ»ããå¿
èŠããããŸããããããã£ãèæ¯ã§ãæ¹ä¿®ããåã«ããŸãæ¢åã³ãŒããåããã¥ãããšãã課é¡ãè§£æ¶ããããšã«åçæ§ãæãããããžã§ã¯ãå
ã§ãªãã¡ã¯ã¿ãªã³ã°ã®æææ±ºå®ãè¡ããŸããã ãªãã¡ã¯ã¿ãªã³ã°ã®æææ±ºå® ä»å¹Ž 3 æããã«ãæ³šææ€çŽ¢åšãã®åŠçããªãã¡ã¯ã¿ããããšã«ã€ããŠãæ
åœ PM ãšåæãã§ããŸããããªãã¡ã¯ã¿ãé²ããããã«ã以äžã®åæããããŸãã é²è¡äžãããžã§ã¯ãã®é²æã«åœ±é¿ããªãããš åªå
床ãé«ããããžã§ã¯ããã§ããå Žåã«ããã€ã§ããªãã¡ã¯ã¿ãªã³ã°ããåãæ¿ããããããš ãããã®åæãæºããããã«ã以äžã®ãããªãªãã¡ã¯ã¿ã®é²ãæ¹ãèšç»ããŸããã ããã ã¢ããæ¹åŒ ãã¹ããã¡ãŒã¹ã æ¯æ 1 æéã®ãã¢ãã ããã ã¢ããæ¹åŒãšããã®ã¯ãæ³šææ€çŽ¢ã®æ¢ååŠçã俯ç°ããŠãªãã¡ã¯ã¿ãªã³ã°æ¹éãæ±ºãããã®åŸã«é åºçã«é²ãããšã§ã¯ãªãããŸãã¯å€æ°åã颿°åãªã©äºçްãªãšãããããªãã¡ã¯ã¿ãªã³ã°ãããå°ããã€ç¯å²ãæ¡å€§ããŠããæ¹åŒã§ãããã®æ¹åŒããšãçç±ã¯ãæ¡ä»¶ãè€éãªæ³šææ€çŽ¢åŠçã®å
šäœã俯ç°ãçãæéã®äžã§ãªãã¡ã¯ã¿ãªã³ã°æ¹éãæ±ºããããšãé£ãããšå€æããããã§ãã ãã¹ããã¡ãŒã¹ããšããã®ã¯ããªãã¡ã¯ã¿å¯Ÿè±¡ã®ã¯ã©ã¹ããã®ã¯ã©ã¹ã®äžäœã¯ã©ã¹ã«å¯ŸããŠãŸããã¹ãã远å ãããªãã¡ã¯ã¿ãããŠãæ¢ååŠçããã°ã¬ãŠããªãããšãæ
ä¿ããããšã§ããããã¯ããããã°æã®çç£æ§ãé«ããããšãšãªãªãŒã¹æã®ãªã°ã¬ãã·ã§ã³ãã¹ãã®ã³ã¹ãåæžãå³ãããšããŠããŸãã æ¯æ 1 æéã®ãã¢ããããšãçç±ã¯ãæ¥äžã®ãããžã§ã¯ãã®é²æã«åœ±é¿ãåºããããªãããŸãããã¢ããããããšã«ããããªãã¡ã¯ã¿ãç®æãè¯ãã³ãŒãã®åºæºãåããããã£ãããã§ãã æ³šææ€çŽ¢ã¢ãã«ã®èª²é¡ç¹ ãªãã¡ã¯ã¿ããåã®æ³šææ€çŽ¢ã¢ãã«ã«ã¯ä»¥äžã®èª²é¡ç¹ããããŸããã ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã決ãŸã£ãåã«å®è£
ããããã倿°åãšé¢æ°åã«ã¹ããŒã¯ã±ãŒã¹ãšãã£ã¡ã«ã±ãŒã¹ãæ··åšããŠãã åã倿°åã§å代å
¥ãéãã倿°ã®å€ã远ãããšãé£ããã£ã 200 è¡ãè¶
ãã颿°ãè€æ°ååšãã颿°åãèªæã§ã¯ãªãã£ã æ³šææ€çŽ¢çšã®ã¢ãã«ã ããã¯ã©ã¹åã¯æ³šæã¢ãã«ãšåºå¥ãã§ããªãã£ã è€éãªæ€çŽ¢æ¡ä»¶ã®åå²ãå
šãŠ 1 ç®æã§å¯Ÿå¿ãããããæ€çŽ¢ã¯ãšãªãæ§ç¯ããåŠçãè€éåããŠãã ãªãã¡ã¯ã¿ãªã³ã°ã®ããæ¹ ãªãã¡ã¯ã¿ãªã³ã°ã®ææ³ãåºæºã¯ããã« Martin Fowler ããã®ã ãªãã¡ã¯ã¿ãªã³ã° æ¢åã®ã³ãŒããå®å
šã«æ¹åããïŒç¬¬ 2 çïŒ ããåèã«ããŸããããããã®ææ³ã PhpStorm ãšãã IDE ã®æ©èœããã©ã°ã€ã³ãšäžç·ã«äœ¿ããšå¹çãããªãã¡ã¯ã¿ãªã³ã°ãé²ããããŸããä»åã®æ³šææ€çŽ¢ã¢ãã«ã®ãªãã¡ã¯ã¿ãªã³ã°ã§é »ç¹ã«å©çšãããªãã¡ã¯ã¿ææ³ãããã€ã玹ä»ããŸãã 倿°åã颿°åããã£ã¡ã«ã±ãŒã¹ã«ãã BASE ã®ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãåºæºã«ã倿°åãšé¢æ°åããã£ã¡ã«ã±ãŒã¹ã«çµ±äžããŸããPhpStorm ããã©ã«ãæ©èœã§ Toggle case ãšãããã®ããããŸããã倿Žãããã±ãŒã¹ã«äžçºã§å€ããããããã«ãããããã String Manipulation ãšãããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŠããŸããçŽåã«å€æŽããã±ãŒã¹ãèšæ¶ããŠããã®ã§ãè€æ°ç®æé£ç¶ã§ã¹ããŒã¯ã±ãŒã¹ãããã£ã¡ã«ã±ãŒã¹ã«å€æããæã«éå®ããŠããŸãã 倿°ã®æœåºãšå€æ°ã®ã€ã³ã©ã€ã³å åã倿°åã§å代å
¥ãéãã倿°ã®å€ã远ãããšãé£ããã£ãã®èª²é¡ãè§£æ¶ããããã«ã倿°ã®æœåºãšå€æ°ã®ã€ã³ã©ã€ã³åãé©çšããŸãããã®æã«ãå©çšãããã®ã PhpStorm ã®ãªãã¡ã¯ã¿æ©èœã§ãããªãã¡ã¯ã¿å¯Ÿè±¡ãéžæããŠãå³ã¯ãªãã¯ã®ã¡ãã¥ãŒã§ Refactor | Introduce Variable ãéžã¶ãšå€æ°ã®æœåºãã§ããŸãã Refactor | Inline ãéžã¶ãšã€ã³ã©ã€ã³åãã§ããŸãã PhpStorm ã®ãªãã¡ã¯ã¿æ©èœã§ã¯ä»¥äžã® 4 ãã¿ãŒã³ã®å€æ°æœåºã«å¯Ÿå¿ããŠãããŸãã ããŒã«ã«å€æ° ã³ã³ã¹ã¿ã³ã ãã£ãŒã«ã倿° ãã©ã¡ãŒã¿ãŒå€æ° 颿°ã®æœåºãšé¢æ°ã®ã€ã³ã©ã€ã³å 200 è¡ãè¶
ãã颿°ãè€æ°ååšãã颿°åãèªæã§ã¯ãªãã£ã課é¡ãè§£æ¶ããããã«ãåŠçã®æå³ãäŒãããŸã§ã«é¢æ°ã®æœåºãšã€ã³ã©ã€ã³åãç¹°ãè¿ããŸããã颿°ã®æœåºã¯ã Refactor | Extract Method å©çšããã€ã³ã©ã€ã³å㯠Refactor | Inline ãå©çšããŸããExtract Method ã¯é¢æ°ã®æœåºåŸãããæãã®é¢æ°åãæç€ºããŠãããã ãã§ãªããè€æ°ç®æã§åãåŠçãæžãããŠããå Žåã«ãå
šãŠå¯Ÿå¿ããŠãããã®ã§ãšãŠã䟿å©ã§ãã ã¯ã©ã¹åã颿°åã倿°åã®å€æŽ æ³šææ€çŽ¢çšã®ã¢ãã«ã ããã¯ã©ã¹åã¯æ³šæã¢ãã«ãšåºå¥ãã§ããªãã£ã課é¡ãè§£æ¶ããããã«ãã¯ã©ã¹åã OrderSearcher ã«å€æŽããŸããã Refactor | Rename ãå©çšããŸããã¯ã©ã¹åã倿Žããæã« 1 ã€æ³šæç¹ããããŸããã¯ã©ã¹ã倿Žããæã«ããã®ãã¹ãã¯ã©ã¹ã®ååã¯å€æŽãããªãããšã§ããäŸãã°ã OrderSearcher ã NewOrderSearcher ã«ååãå€ããŠãã OrderSearcherTest ã®ååã¯ãã®ãŸãŸã§ãã远å ã§ãã¹ãã¯ã©ã¹ã«å¯ŸããŠã Refactor | Rename ã䜿ãååã倿Žããããã«ããŠããŸãã äžèŠãª use ã®åé€ æ³šææ€çŽ¢ã¢ãã«ã« CakePHP 2 äŸåã® App::uses ããããããã£ããããããã PHP ã® use ããŒã¯ãŒãã§åå空éãå©çšããããã«ããŸããããããããšãPhpStorm ã® Code | Optimize Imports æ©èœãå©çšããŠãäžèŠãª use ã®åé€ãã§ããŸããããã«ãOptimize Imports ã Before Commit ãã㯠ã«å
¥ãããšãPhpStorm çµç±ã§ã³ãããããåã«ãèªåã§ import ããã§ãã¯ããä¿®æ£ããŠãããããã«ãªããŸãã ããªã¢ãŒãã£ãºã ã§æ³šææ€çŽ¢ã®æ¡ä»¶åå²ãã·ã³ãã«ã«ãã è€éãªæ€çŽ¢æ¡ä»¶ã®åå²ãå
šãŠ 1 ç®æã§å¯Ÿå¿ãããããæ€çŽ¢ã¯ãšãªãæ§ç¯ããåŠçãè€éåããŠãã課é¡ãè§£æ¶ããããã«ããªã¢ãŒãã£ãºã ãå°å
¥ããŸãããæ¡ä»¶åå²ã®äžã§æãè€éãªã®ã¯ãæ€çŽ¢å¯Ÿè±¡ã®äžã«ã³ã€ã³æ³šæïŒã·ã§ããã³ã€ã³ãšãã BASE å
ãã€ãŠæµéããŠããä»®æ³é貚ã䜿ã£ãŠè³Œå
¥ããæ³šæïŒãå«ãŸããŠãããã©ããã®åå²ã§ããã³ã€ã³æ³šæãããªãã® 2 ãã¿ãŒã³ã§æ€çŽ¢ã¯ãšãªæ§ç¯ãDB ãžåãåãããè¿ãå€ã®æŽåœ¢ãšããäžé£ã®æµãã 1 ã€ã®ã¯ã©ã¹å
ã§å®è£
ããŠãããããæ¡ä»¶ã®åå²ãæ£ãã°ããåŠçã®éè€ãçºçããããã«ãªããŸããã æ³šææ€çŽ¢ã¢ãã«ã®ã³ã€ã³æ³šæãããªãã®åå²ã«å¯ŸããŠã以äžã®ãªãã¡ã¯ã¿ãªã³ã°ãè¡ããŸããã åãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããã¯ãšãªçæã¯ã©ã¹ãå¥ã
ã«äœæãããã¯ãšãªçæã®å
±éåŠç㯠trait ã«åãåºããã ã³ã€ã³æ³šæãããªãã®æ¡ä»¶ã«å¿ããŠæ£ããã¯ãšãªäœæã¯ã©ã¹ãçæãããã¡ã¯ããªãŒãäœæããã æ³šææ€çŽ¢ã¢ãã«ã§ã¯ 2 ã®ãã¡ã¯ããªãŒãå©çšããŠã¯ãšãªæ§ç¯ã®æ¡ä»¶åå²ãé èœããã ä»åã®ãªãã¡ã¯ã¿ããåŠãã ããš ããã£ãããš ãŸãã¯ãªãã¡ã¯ã¿ããããšèªäœãããã£ãã§ããæ¢åã³ãŒãã«æãå ããããšã«ãããå®è£
è
ã®æå³ãäŒãããããã¥ã¡ã³ãã«æžãããŠããªã仿§ã®çްããéšåãžã®çè§£ãæ·±ãŸããŸããããªãã¡ã¯ã¿ãªã³ã°ã®çµæããœãŒã¹ã³ãŒãã®å¯èªæ§ãšã¡ã³ããã³ã¹æ§ãåäžããæ³šææ€çŽ¢æ¹åãªã©åŸç¶ãããžã§ã¯ãã軜ã身ã§ã¹ã¿ãŒãã§ããããã«ãªããŸãããä»ã¯ããªãã¡ã¯ã¿ããŠæã¯ãªããšèããŠããŸãã ãã¹ããã¡ãŒã¹ããšãªãã¡ã¯ã¿ãªã³ã°ã®çžæ§ãããã£ãã§ãããã¹ããäºãå®çŸ©ããããšã§ããã®ãªãã¡ã¯ã¿ã§ãã°ã¬ã£ãŠããã®ãã®ãã£ãŒãããã¯ãæçã§ããããããããã°ãçºçããŠãæ©ãã«æ°ã¥ããŠä¿®æ£ããããšãã§ãããªãã¡ã¯ã¿ã®çç£æ§åäžã«è²¢ç®ã倧ããã£ãã§ããä»åã®ãªãã¡ã¯ã¿ã§ 10 å匱ã®ãªãªãŒã¹ã®å
ãæ³šææ€çŽ¢ã®å
šãã¿ãŒã³ãç¶²çŸ
çã«æåãã¹ãããã®ã¯æåŸã® 1 åã§ãããªãã§ãããªãªãŒã¹ããŠå幎ãçµã£ãŠãããã°ãåºãŠããŸããã§ããã ããã ã¢ããæ¹åŒã§ãªãã¡ã¯ã¿ã®æææ±ºå®ã®åæãåããããã£ãã§ãããªãã¡ã¯ã¿ãªã³ã°ã®åæãããŸããããªãã»ãšãã©ã®å Žåã¯ãé²è¡äžã®éçºã¿ã¹ã¯ãåªå
ããããšæããŸããããã ã¢ããæ¹åŒãªããªãã¡ã¯ã¿ã®ããã®åæèšèšãšèšç»ãäžèŠãšãªãããã€ã§ããªãã¡ã¯ã¿ãªã³ã°ãéå§ã忢ã«ã§ãããã€ã§ãéçºã¿ã¹ã¯ã«æ»ããç¶æ
ãäœããããã§ãã ãããªãã£ãããš ããã ã¢ããæ¹åŒã«éçããããŸããã倿°åã®å€æŽãã颿°ã®æœåºãªã©å±æçãªãªãã¡ã¯ã¿ã§ã¯èšèšããã«ã¹ã ãŒãºã«é²ããŸããããããªã¢ãŒãã£ãºã ãªã©ã¯ã©ã¹å
šäœãããã¯ãã¯ã©ã¹ãè·šã圱é¿ãåºããªãã¡ã¯ã¿ã§ã¯äºæ³ããŠããªãã£ãçç±ã§ãªãã¡ã¯ã¿ãé²ããªããªããšææ»ãã³ã¹ããé«ãã§ããæ³šææ€çŽ¢ã¢ãã«ã®äŸã§ã¯ãå
ã
ã¯ã¯ãšãªæ§ç¯ãDB ãžåãåãããè¿ãå€ã®æŽåœ¢ãšããäžé£ã®åŠçã«å¯ŸããŠãããªã¢ãŒãã£ãºã ãé©å¿ãã¯ã©ã¹ãåããããšããŸããããDB ãžåãåãã㯠Model ãç¶æ¿ããã¯ã©ã¹ã§ãªããã°ãããªããšãããã¬ãŒã ã¯ãŒã¯ã®å¶éã«åŒã£ãããã2 åã»ã©ããçŽããçºçããŸãããææ»ãã³ã¹ããé«ããªãã¡ã¯ã¿ãªã³ã°ãè¡ãåã«ãäžå®çšåºŠã§ãããããŠã³æ¹åŒã§èšèšããŠãããã»ããè¯ããšæããŸããã ãããã« æ¬èšäºã§ã¯ããã¡ãããªæ³šææ€çŽ¢ã¢ãã«ããªãã¡ã¯ã¿ããå®è·µã«ã€ããŠèšèŒããããŸãããèªãã§ããã ããæ¹ã®å©ãã«å°ãã§ããªãã°å¬ããã§ãã ææ¥ã¯ @izuhara ããã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ããïŒ
ãã®èšäºã¯ã BASE Advent Calendar 2022 ã®9æ¥ç®ã®èšäºã§ãã 忥å
¬éã® @gatchan0807 ãã ã®ã ãããã¯ãã®å°ããªè² ãè§£æ¶ããæå¿æŽ»åã®æ¯ãè¿ã ãããã²ã芧ãã ããïŒ ããã«ã¡ã¯ïŒBASEã§PdMã®ãã¬ã€ã³ã°ãããŒãžã£ãŒãããŠããæ¬å±±ãšç³ããŸãã ããŒã ãã«ãã£ã³ã°ã«ã€ããŠèããããšãå€ãã®ã§ããããªã³ã©ã€ã³ã ãšæ Œæ®µã«ããŒãã«ãäžãããªããšæããŠããŸãã ãã®èšäºã§ã¯ãä»ãŸã§ã®ãã©ã€ãéããŠèŠããŠããããªã³ã©ã€ã³ã§ã®ããŒã ãã«ãã£ã³ã°ã§æèãããŠããããšãããŸãšããããšæããŸãã 䌌ããããªãæ©ã¿ããæã¡ã®æ¹ã«ãšã£ãŠãå°ãã§ããã³ãã«ãªãã°å¬ããã§ãã ç®æããŠããæºè¶³åºŠ ããŒã ãã«ãã£ã³ã°ã®äŒç»ãããéãç§ã¯æºè¶³åºŠ75%ããããç®æããŠããŸãã ããŒã ãã«ãã£ã³ã°ã¯ãããŒã ã®ç¶æ³ã«ããããŠç¶ç¶çã«åãçµãããšã倧åã ãšèããŠããããã§ãã æºè¶³åºŠ100%ãç®æãããšãããšãäŒç»ãæºåã®ããŒãã«ãäžããã©ã€ãã«ãã©ã€ããã«ãããªã£ãŠããŸããŸãã éã«æºè¶³åºŠãäœããã°ãããŒã ã®ã¿ãªããã«ååãããŠããã ããªããªã£ãŠããŸããŸãã ãæ¬¡ãåå ããŠã¿ããããšå°ãã§ãæã£ãŠããã ããç¶æ
ãšãèªåãããèªãããããããã©ã³ã¹ã®ç®å®ãšããŠæºè¶³åºŠ75%ããããç®æšã«ããŠããŸãã æèããŠãããã€ã³ã ããŒã ãã«ãã£ã³ã°ãèããéã«ãæèãããŠãããã€ã³ãã¯å€§ãã3ã€ãããŸãã â» æ¯åå
šãŠãæºããããšããŠããããã§ã¯ãããŸãã äŒè©±ãçºçããã å€åãã€ãã ããžãã£ããªå°è±¡ã§çµãããããã«ãã 1. äŒè©±ãçºçããã ç¹ã«ãªã³ã©ã€ã³MTGã§ã¯ãçºèšã»äŒè©±ããããè¿·ã£ãŠããŸãå Žé¢ããããšæããŸãã åå è
ã®æ¹ãè¿·ããçºèšãããããããªç¶æ
äœããæèããŠããŸãã åãå
¥ãæ¹ çºèšé çªã¯ãæåå¶ã«ãã æåæ¹æ³ã¯ã仿¥ã®å ãé äœãã®ããã«å€åããããã®ã ãšãåºå®ã®é çªã«ã¯ãªããªãã®ã§çžæ§ãè¯ãã§ã ã¢ã€ã¹ãã¬ã€ã¯ã»éè«ã¯ããŒããæå®ãã äºåã«ããŒããåéããŠãããã¹ããã¯ãããŠãããšäŸ¿å©ã§ã ããžã¥ã¢ã«ã€ã¡ãŒãžã§è¡šçŸãããŠããã ä»é±ã®çµµæå / æ°æã¡ã倩æ°ãã¹ã¿ã³ãã§è¡šçŸ + ãã®çç±ã話ããŠããã ã 2. å€åãã€ãã ç¹ã«ãªã³ã©ã€ã³ã®MTGã§ã¯ãèããŠããã ããªã©ç¹å®ã®ç¶æ
ãé·æéç¶ç¶ããå Žåãéäžåã®ç¶æãé£ãããšèããŠããŸãã åå è
ã®æ¹ã®èå³ãç¶ããããç¶æ
ãã€ãããããæ°æã¡ãç¶æ
ã®å€åãæèçã«åãå
¥ããããã«ããŠããŸãã åãå
¥ãæ¹ ã¿ã€ããŒããããŠåºåãããããããããã å°ãçãã§ããããšãã¿ã€ããŒã鳎ãããšã§éå»¶ã³ããªãã®ã§ããããã§ã ã°ã«ãŒãåããã·ã£ããã«ãã zoomã®ãã¬ã€ã¯ã¢ãŠãã«ãŒã ãšã®äœµçšã䟿å©ã§ã ããžãã£ãã»ãã¬ãã£ãäž¡æ¹ã®ææ
ã®çºæ£ãããŠããã ã ããããã»ä»åŸãã£ãŠã¿ããã»äžå® ãªã©ããäºããç¥ãäžã§ããããã®åãå£ã§ã 3. ããžãã£ããªå°è±¡ã§çµãããããã«ãã ãçµãããããã°ãã¹ãŠããããšããèšèããããŸãããæåŸã¯ãªãã¹ãããžãã£ããªå°è±¡ã§ããããæ§æã«ãªã£ãŠãããæ³šæãããŠããŸãã åãå
¥ãæ¹ ææ³ãã·ã§ã¢ããŠããã ã ãã£ããð ð ãªã©ã®ææ
ã¢ã³ã±ãŒãã ãšèŠèŠçã«ããããããããããã§ã èªåãããããæ¥œããã£ãã»å¬ããã£ããªã©ããžãã£ããªææ
ãäŒãã æµããšããŠãããžãã£ããªããŒããæåŸã«ããããã«ãã ãªã³ã©ã€ã³ã§ã§ããããŒã ãã«ãã£ã³ã°ã®ã¢ã€ãã£ã¢ 1ã3ã®ãã€ã³ããæèããŠãªãªãžãã«ã®äŒç»ãããããšããããŸãããä»ã®æ¹ãã€ããããåãçµã¿ã䜿ãããŠããã ãããšãå€ããããŸãã æŽ»çšãããããšããããã®ããä»åŸãã©ã€ããŠã¿ããåãçµã¿ã®ããŒã¯ãŒãã貌ã£ãŠãããŸãã â» èªåã§å
šãŠèŠã€ããããã§ã¯ãªãããŸããã®æ¹ã«æããŠããã ããããŒã¯ãŒããå«ããããŠããã ããŠããŸã ããŒã¯ãŒã ããªã¥ãŒãºã«ãŒã ã¢ãããŒã·ã§ã³ããŒã«ãŒ ãœãŒã·ã£ã«ã¹ã¿ã€ã«èšºæ 16 Personalities Belbin Model ã¹ãã»ãã©ã€ã»åŸæã»èŠæãã£ãŒã ãŸãšã æ¹ããŠãããŒã ãã«ãã£ã³ã°ã«ã¯æ£è§£ããªããããããé£ããã§ããé¢çœããšãæã£ãŠããŸãã ä»åŸãããŒã ã®ã¿ãªãããšäžç·ã«ãè²ã
ãªãã©ã€ãããŠãããããšæã£ãŠããŸãã ææ¥ã¯ã shiiyan ããã®èšäºãå
¬éäºå®ã§ãããæ¥œãã¿ã«ã»ã»ã»ïŒ
ãã®èšäºã¯ BASE Advent Calendar 2022 ã®9æ¥ç®ã®èšäºã§ã 忥å
¬éã®ïŒãã®æŽ»åã«ãåå ããŠãã ãã£ãŠããïŒ @yuripiiiii ããã® ããªã³ã©ã€ã³ã§ã®ããŒã ãã«ãã£ã³ã°ã§æèãããŠããããšã ããã²ã芧ãã ããïŒ ãããã〠ã¯ãããŸããŠã®äººã¯ã¯ãããŸããŠãããã«ã¡ã¯ïŒããã³ããšã³ããšã³ãžãã¢ã®ãã£ã¡ããïŒ @gatchan0807 ïŒã§ã ä»åã®èšäºã§ã¯1幎è¿ãç¶ç¶ããŠå®æœããŠããã ãããã¯ãã®çްããªäžå
·åã䜿ãã¥ããéšåãæå¿ããŒã ã§æ¹åããŠããã#iikanji-pkb-kaizenããšããæŽ»å ã«ã€ããŠã玹ä»ããŸãïŒ ãªããªãå©çã«ç¹ãã£ãŠããããèšæž¬ãã¥ãããçµç¹ã®éã«ããŒã«ãèœã¡ãŠããŸããã¡ãªçްããäžå
·å察å¿ãæ¹åãããŒã ãšããŠå¯Ÿå¿ããããã«ãã©ã®ãããªããšãèããŠããã©ã®ããã«é²ããŠæ¥ãã®ãããå
±æããããšã§ãèªãã§ããã ããçããŸã®çµç¹ã§ãå®è·µãããã³ãã«ãªãã°å¬ãããªãšæã£ãŠããŸãïŒ åšèŸºã®ç°å¢ ãŸãåãã«ããã®æŽ»åãè¡ã£ãŠããããŒã ãšãããåãå·»ãçµç¹ã«ã€ããŠçµç¹ã«ã€ããŠç޹ä»ããŸãã #iikanji-pkb-kaizen ã®ãpkbããšã¯ BASEãšãããããã¯ãã«å¯ŸããŠãæ§ã
ãªçµè·¯ã§åãåã£ãæ¹åèŠæããŸãšããŠããå Žæã®ãProduct Kaizen BacklogïŒãããã¯ãæ¹åããã¯ãã°ïŒãã®ç¥ç§°ã§ãã çŸåšã¯Asanaã䜿ã£ãŠããŠãããã«äºãçšæãããã³ãã¬ãŒãã®å
容ãåããŠãæ¹åèŠæãç»é²ããŠããã圢ãåã£ãŠããŸãã PKBããªãã£ãé ã¯ãCSãžã®ãåãåããã§å±ãããã£ãŒãããã¯ãBASEãšããŠã·ã§ããéå¶ãæäººãµããŒãããŠããã·ã§ããããã®ãã£ãŒãããã¯ã瀟å
ã§æ°ã¥ããã¡ãã£ãšæ°ã«ãªãç¹ãªã©ã®æ§ã
ãªæ¹åã¢ã€ãã¢ã»æ¹åèŠæãæ§ã
ãªããŒã«äžã«æ£ãã°ã£ãŠããŸã£ãŠããŸããã ãããããŸãšããŠç¢ºèªåºæ¥ãããã«ããå Žæãäœãããšãšãæ£åŒãªãåãåãããšã¯å¥ã«ãã·ã§ãããªãŒããŒåãã®ç®¡çç»é¢äžéšããçŽæ¥èŠæããã£ãŒãããã¯ãéãã以äžã®ãããªãã©ãŒã ãäœæãããããžã§ã¯ããéè¡ããŠçŸåšã®åœ¢ã«ãªã£ãŠããŸãã ãŸã ãŸã éçšæ¹æ³ã暡玢äžã§ã¯ãããŸãããäžæŠããã«èããããšããå Žæãã§ããã®ã¯æ€çŽ¢æ§ã»äžèЧæ§ã®èгç¹ãããšãŠãéçšãããããªããŸããã çµç¹æ§é ã®å€å ãã®æŽ»åã¯ããšããšã Owners ExperienceïŒä»¥éãOXããŒã ïŒãšãããã·ã§ãããªãŒããŒããã®ã·ã§ããéå¶ã®äœéšåäžãã«ãã©ãŒã«ã¹ããçµç¹ã®ã¡ã³ããŒãæå¿ã§éãŸã£ãŠã æææãšéæå€æ¹ãšãããéäžåãé«ãŸãã«ããæ¥åæéã®ãŠã©ãŒãã³ã°ã¢ãã&ã¯ãŒã«ããŠã³ãšããŠããã ãã ã®ãå§ãŸãã§ãã ããããžã§ã¯ãã®ããã«æ°ã¶æåäœã§ããã¬ãã«ãããªããã©ãBASEãžã®ãåãåãããªã©ã§ã¡ããã¡ããå±ããBASEã®äœ¿ãã«ããéšåãã¬ã³ã¬ã³æ¹åããŠãããïŒããšããã¢ãããŒã·ã§ã³ã§å§ãããããä»ã®çµç¹ã®äººãéãŸã£ãŠãããã°è¯ããããšå®æœããŠããŸããã ããããæ°ã¶æãçµã¡ãããžãã¹åªå
床ãšçµç¹ã®å
šäœæé©åã®ããã«ãç®çå¥çµç¹ããžã®ç§»è¡ãé²ãã§ãOXããŒã ããšããçµç¹ã¯ãªããªããããå
·äœçãªãCRMããBack Officeããªã©ã®é åã«çŽã¥ãç®çå¥çµç¹ã«ãªããŸããã çµæãšããŠãçŸåšã§ã¯ #iikanji-pkb-kaizen ã®åå ã¡ã³ããŒã¯æ§ã
ãªéšçœ²ããæå¿ã§PdMããã¶ã€ããŒãããã¯ãšã³ããšã³ãžãã¢ãããã³ããšã³ããšã³ãžãã¢ãéãŸã圢ã§åèš6åã§å®æœããŠããŸãã æŽ»ååã®ãiikanjiããšã¯ BASEã®Slackã³ãã¥ãã±ãŒã·ã§ã³ã«ãããæåãšããŠãSlackãã£ã³ãã«ããµã¯ããšäœã£ãŠç¹å®ã®ãããã¯ãããã§ã¬ããšã³ãã¥ãã±ãŒã·ã§ã³ãåãããšããæåããããŸããã ãiikanjiããšããã®ã¯ããã®Slackãã£ã³ãã«ãäœãæã«ããããžã§ã¯ãã§ããªãããããšãã£ãŠäœããæ±ºãŸã£ãŠãããã§ããªããã¢ã€ããšããèª²é¡æã "ã€ã€æã" ã«è§£æ±ºããŠããããããšããæèŠå€ã衚ããã¯ãŒãã§ããã€ããããããSlackãã£ã³ãã«åã«ãã¬ãã£ãã¯ã¹ãšããŠã€ããããšã瀟å
ã§æ
£ç¿ã«ãªã£ãŠããŸããïŒãã¬ãã£ãã¯ã¹ãã€ããããšã§ããããã£ã瀟å
ã®æå¿æŽ»åãèŠã€ãããããããšããæå³ããããŸãïŒ "#iikanji-pkb-kaizen" ãšãããã£ã³ãã«ã¯äžè¿°ã®éããOXããŒã ãããªããªã£ãã¿ã€ãã³ã°ã§ãä»ãŸã§ãã£ãŠãã现ããæ¹åã®æå¿æŽ»åãåŒãç¶ããã£ãŠãããããšããæãã§äœã£ã圢ã«ãªããŸãã ã¡ãªã¿ã«ãéå»ã®ããã¯ããã°ã«ã¯ä»ã«ã #iikanji-agile ã #iikanji-conference-toudan ãšããæŽ»åã«ã€ããŠç޹ä»ãããèšäºãããã®ã§ããããèå³ãããã°ãã²èªãã§ã¿ãŠãã ããïŒð éå¶ããŠã¿ãŠããã£ãããšããã£ãããš ãããŸã§ã§ã#iikanji-pkb-kaizenããšããåãçµã¿ãã©ããããã®ãªã®ãã玹ä»ã§ããã®ã§ãããããã¯å®éã«ãã®æŽ»åãéå¶ããŠããŠèããããšãããŒã ã§å®æœããããšã玹ä»ããŠãããŸãïŒ 9æã®ã¿ã€ãã³ã°ã§è¡ã£ãæ¯ãè¿ã OXããŒã æä»£ããç¶ããŠããæŽ»åã #iikanji-pkb-kaizen ãšããååã«å€ãããçŽå幎ããã£ãä»å¹Ž9ææ«ã«ãã®æŽ»åã®æ¯ãè¿ãã宿œããŸããã ãŸãã¯ãã®æ¯ãè¿ããããŠããäžã§æ¹ããŠèŠãããèšèªåãåºæ¥ãŠããªãã£ããã©ãŒããããšæããŠããèª²é¡æã«ã€ããŠå
±æããŸãã 1. 掻åæéã ãã§é²æãåºããŠããæããããªã ããã¯é±ã«2æ¥1æéãã€ããããé±ã®é ãšçµããã®æ¥ã«è¡ã£ãŠããã®ã§ããŠã©ãŒãã³ã°ã¢ãããšã¯ãŒã«ããŠã³ãšããç®çã«ã¯ãã£ãŠãããã®ã®ã掻åã®æéã§ã¿ã¹ã¯ãé²ãããšããç®ç·ã ãšã æãåºãæéã®æ¹ãå€ããŠäœæ¥ãé²ãŸãªã⊠ãšãã声ã§ããã ãŸãããã®äŒã«ã¯PdMããã¶ã€ããŒã®æ¹ãåãããã«åå ããŠããã£ãŠããŠããšã³ãžãã¢ã«éãã圌ããããåæ§ã®å£°ãäžãã£ãŠããŸããã ã§ããããããã£ãå£°ãæ¯ãè¿ãäŒã®äžã§æ·±ãŒã£ãŠã¿ããšãããããå°ãç°ãªãåå ãããããšãããã£ãã®ã§ã2ã€ã®å¯Ÿå¿æ¹éïŒåŸè¿°ïŒã決ãéçšããŠã¿ãããšã«ããŸããã 2. æã
ããã£ãŠãããšã¯æ°å
¥ç€Ÿå¡åããªã³ããŒãã£ã³ã°ã¿ã¹ã¯ãšãªã«ãéãïŒ / ã«ããã£ãŠãªãïŒ å°ã話ã¯å€ãããŸãããBASEã§ã¯ãããããããšã«2021幎ãã2022幎ã«ãããŠãææ°åã®ãšã³ãžãã¢ãæ°å
¥ç€Ÿå¡ãšããŠå
¥ç€ŸããŠãã ããææãç¶ããŠããŸããã ãããªäžã§1ã€åé¡ã«ãªãã®ãã ããªã³ããŒãã£ã³ã°æã«ãããã¯ã·ã§ã³ã³ãŒããè§Šããã£ããã«ãªãã¡ããã©è¯ãç²åºŠã®ã¿ã¹ã¯ãèŠã€ãããªãåé¡ã ã§ãã ããªã³ããŒãã£ã³ã°ã¿ã¹ã¯ãæ¢ãããšèªäœã倧å€ã ãã©ããããããã®æŽ»åã§ãããã£ãã¡ããã©ããã¿ã¹ã¯ãæ¶åããŠããŸã£ãŠãããã©ããããâŠããšããæããé ã®ã©ããã«ããããã®æ¯ãè¿ãã§è°é¡ã«äžãããŸããã ããã«é¢ããŠã¯ã話ããŠããäžã§äžèš 1. ã®èª²é¡ãšåæã«è§£æ±ºããæ¹æ³ïŒåŸè¿°ïŒãèŠã€ãã£ãã®ã§ãããã詊ããŠã¿ãããšã«ããŸããã 3. ã¿ã¹ã¯ã®ç®¡çæ¹æ³ãããã«ãã ããã¯ãæŽå²ççµç·¯ãšå
·äœçãªããŒã«ã®è©±ãã«ãªãã®ã§ãããŸãèªè
ã®çããã®åèã«ãªããªããããããŸããã ããšããš #iikanji-pkb-kaizen ã§ã¯ FigJam ãšãããã¯ã€ãããŒãããŒã«ã«çŸåšå¯Ÿå¿äžã®ã¿ã¹ã¯ãä»ç®ã«ããŠè²Œããäœæ¥ãé²ãã ãç§»åãããããšãã圢ãåã£ãŠããŸããã ããã¯ãããŒã ããããžã§ã¯ãã«ãã£ãŠã¯AsanaãæŽ»çšããŠããããŒã ããã£ããã®ã®ã瀟å
çã«ã¯ãŸã æ®åããã£ãŠããªã + ã¿ã¹ã¯ç®¡çãããŒãã§ã«ãžã¥ã¢ã«ã«è¡ãããã£ãïŒ+ å人çãªå¥œã¿ïŒããšããã FigJam ã䜿ã£ãéçšãéžæãã圢ã§ãã ãããå幎ãçµã£ãŠã瀟å
ã®èŠæš©ãæ¡ã£ãŠããã¿ã¹ã¯ç®¡çããŒã«ãããŒã«ã«å¯ŸããŠã®åå ã¡ã³ããŒã®èªèãå€ãã£ãŠããããšãã FigJam ã䜿ã£ãéçšã¯ããã«ããïŒãšãªã£ãã®ã§ãã ãã®ããããã®å Žã§ FigJam ã®ã¿ã¹ã¯ããŒãã¯ã¢ãŒã«ã€ããšããŠãã¡ã€ã«ã ãæ®ããäžã§ãAsanaäžã§ç®¡çããããã«åãæ¿ããŸããã æ¯ãè¿ã£ãŠããã£ã課é¡ãšãã®è§£æ±ºç 掻åæéã ãã§é²æãåºããŠããæããããªã ãã®èª²é¡æã«é¢ããæ ¹æ¬åå ãæ·±ãŒã£ãŠã¿ããšããããã£ãã®ã¯ã ããªãããã®æ©èœå
šäœã®äœéšã®æ¹åãè¡ãã«ã¯ã掻åæéãããããè¶³ããªãïŒæã£ããããèŠæš¡ã倧ãããªããã¡ïŒã ãšããããšã§ããã å
·äœçã«ã¯ã以äžã®ããã«2ã€ã®ãã¿ãŒã³ã§åé¡ãèµ·ããŠããŸããã â ãšã³ãžãã¢äž»å°ã§é²ããå Žåã æ¥åãããŒã®çè§£ã調æ»ãä»ããŒã ãžã®ç¢ºèªãå€ããªã£ãŠããŸã ãããçµæçã«å®è£
ã ãã§ãªããšããã«æããããããšïŒåçåŸ
ã¡ãçºçããŠãªããªãå®è£
ã«é²ããªãããšãïŒ â¡ PdMã»ãã¶ã€ããŒã察å¿ããŠããäœæ¥ã¯ ããããããªãã€ãã§ã«ãããçŽãããâèŠæš¡ã倧ãããªã£ãŠããŸãããã¿ãŒã³ãšããè¿ããã¡ã«ãããžã§ã¯ãåŽã§ä»£æ¿ã®å¯Ÿå¿ãå
¥ãããè§ŠããªããŠOKãšãªãããã¿ãŒã³ãçºçãã ããšã§ããã ãããã®åé¡ã¯ãæå¿ã¡ã³ããŒä»¥å€ã®ãããžã§ã¯ããããŒã ãšã®ããåãããå¿
èŠãªããã«çºçããŠããã®ã§ã #iikanji-pkb-kaizen ã§åãæ±ããã®ã®ã¹ã³ãŒããããå°ãçµããéå¶äœå¶ãšããŠã¯ããããäŒã®ãããªåœ¢ã«ç§»è¡ããããšã«ããŸããã ãšã³ãžãã¢åŽã¯ ããŽãŒã«ãæç¢ºã§ãå®è£
察å¿ãšé²æææ¡ãããããäžå
·åã®è§£æ¶ãé²ããã ã PdM / ãã¶ã€ããŒåŽã¯ ãã·ã§ãããªãŒããŒããåãåã£ããã£ãŒãããã¯ãæŽçããå¯Ÿå¿æ¹éã»æ
åœé åãå«ããŠPKBã®ã¢ã€ãã ãšããŠèµ·ç¥šãããã ã ãšããéšåã«ãããããã©ãŒã«ã¹ããé±2åããããäŒã«éãŸã£ãã¡ã³ããŒã§ããããäžèšã®ãããªå¯Ÿå¿ããã€ã€ãå¥ã®è·èœã®ç¥èãå¿
èŠãªå Žåã¯ããããäŒã§é©å®è³ªåããåãããšãã圢ã«åãæ¿ããŸããã éçšæ¹åŒãå€ããŠåŸãå¹çš ãšã³ãžãã¢åŽ ãšã³ãžãã¢åŽã§å¯Ÿå¿ãããäžå
·åãã«ã¯ä»¥äžã®ãããªãã®ãå«ãŸããã®ã§ããããããã®å¯Ÿå¿ã¯çãæéã§ã察å¿ããããããµã¯ãµã¯ãšãªãªãŒã¹ããããšãåºæ¥ãŸããã çŽåæžããŠã³ããŒã App ã§ããŠã³ããŒãã§ããPDFãã¡ã€ã«ã®æ±ºæžæ¹æ³ã®è¡šç€ºéšåã ãå€åœèªå¯Ÿå¿ãããªã åå詳现ç»é²ç»é¢ã®ã¹ãããã¥ãŒã®ãšãã«ã ã衚瀺ããããã¿ã³æèšãæ§åŒã®åŒã³æ¹ã®ãŸãŸã ã£ã ã¬ãã¥ãŒ App ã®èšå®é
ç®ãæ°ãããã¶ã€ã³ããŒãã ãšäžèŠãªã®ã«è¡šç€ºãããŠããŸã£ãŠãã ãªã©ãªã©âŠ ãããŸã§ã«å¯Ÿå¿ãããã®ã®äžã®äžéšã§ãããäžèšã§ããããããªçްããªäžå
·åã¯çãæéã§è§£æ¶ããªãªãŒã¹ãŸã§å®äºããããšãåºæ¥ãŸããã PdMã»ãã¶ã€ããŒåŽ ãã¡ãã®éçšæ¹åŒã®å€æŽãå³è§£ãããšã以äžã®å³ã®çŽ«è²ã®æ ã§å²ã£ãéšåãã¬ã³ã¬ã³é²ããŠãããïŒãšãã圢ã§ãã ãã®æŽ»åãè¡ãããšã§ãä»ãŸã§ããã察å¿èŠæã®è©³çŽ°åºŠãäžãã£ãããã¯ãã°ã¢ã€ãã ãPKBã«ç©ãŸããããšã«ãªããŸãã ããã«ãã£ãŠ #iikanji-pkb-kaizen ã«åå ããŠãããšã³ãžãã¢ã察å¿ããããããã¯ãã°ã¢ã€ãã ãå¢ãããšããã¡ãªããã¯ãã¡ãã享åã§ããã®ã§ããã坿¬¡çã« æã
ããã£ãŠãããšã¯æ°å
¥ç€Ÿå¡åããªã³ããŒãã£ã³ã°ã¿ã¹ã¯ãšãªã«ãéãïŒ / ã«ããã£ãŠãªãïŒ ãšãã課é¡ã«å¯ŸããŠã®è§£æ±ºçã«ããªããŸããã å³ã§ã¯ä»¥äžã®çŽ«è²ã®æ ã§å²ã£ãéšåãå¢ãããªã³ããŒãã£ã³ã°ã¿ã¹ã¯ãå¿
èŠãªæã¯PKBããæ¢ãããšããéçšããããããªããŸããã ãŸãšã 以äžããããã¯ãã®å°ããªè² ã®éšåãè§£æ¶ããã#iikanji-pkb-kaizenããšããæŽ»åã«ã€ããŠã®ç޹ä»ã§ããïŒ ãããã£ãæå¿æŽ»åã¯ãããããã°æŽ»åãããŸãããïŒããããã絶察çãªæ£è§£ã ïŒããšãããã®ãèŠã€ããã®ã¯ãªããªãé£ãããšæã£ãŠããŠãäŒç€Ÿå
šäœã®çµç¹ç¶æ
ã«åãããŠèšæ©å¿å€ã«å¯Ÿå¿ããŠãããªããã ãªã«ãããç¶ç¶ãç¶ããããš ãäžçªå€§äºã ãšæã£ãŠããŸãã ãªã®ã§ãBASEã§ã1幎è¿ãæå¿æŽ»åãããŠãããšãããªç¶æ³ã«ãªã£ãŠãããããããšãèããŠè§£æ±ºããŠãã£ããïŒãšããã±ãŒã¹ã¹ã¿ãã£ã®ææãšããŠçããã«ç¥ã£ãŠããããã°ãããªãšæã£ãŠãã®èšäºãæžãããŠããã ããŸããã ä»å玹ä»ã§ããå
容ã¯ãäŒç€Ÿçµç¹ã®ç¶æ³ã«å¯Ÿããããªã察åŠçæ³çãªãã®ã°ããã§ããããå°ãã§ãçããã®åèã«ãªãã°å¹žãã§ãã ææ¥ã¯åãããŒã ã® shiiyan ããã®èšäºã§ãïŒã楜ãã¿ã«ïŒ
ãã®èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®8æ¥ç®ã®èšäºã§ãã ã¯ããã« BASE BANK Section Dev Group Manager/ BASEã«ãŒã Engineering Program Managerã®æŸéª( @applepine1125 )ã§ãã æ®æ®µã¯ BASEã«ãŒã ã®EPMãšããŠéçºããªãŒãããªãããBASE BANKããã€ãããã¯ãéçºããŒã ãããããã¬ã³ã¬ã³ã¢ãŠãããããåºããŠãããããã«æ§ã
ãªãµããŒããè¡ã£ãŠããŸãã æè¿ã¯ããŸã æ¥æ¬ã§ããŸã銎æã¿ã®ãªãEngineering Program Managerã«ã€ããŠè²ã
ãšã¢ãŠããããããŠããã®ã§ãç¹ã«ãããžã¡ã³ãèŠç¹ããã¢ãžãªãã£ã®é«ãããŒã äœã£ãŠããããã!ãšããæ¹ã¯æ¯éèªãã§ããã ãããšå¹žãã§ãã ãããã¯ãã®ããªããªãŒãã¯ãªãªãã£ã«è²¬ä»»ãæã€Engineering Program Managerãšããåœ¹å² ãªãŒããŒã·ãããæã¡èªå·±çµç¹åããããŒã ã«å¿
èŠãª Engineering Program Managerãšããåœ¹å² ä»åã¯ãBASE BANKã§ãæ²ããŠãããã«ãµã€ã¯ã«ãšã³ãžãã¢(Full Cycle Developer)ãšããã¹ã¿ã³ã¹ã«ã€ããŠãå®çŸ©ã ãã§ãªãå®éã®ä»äºã®äžã§èŠåºããå§¿ããäŒãããŸãã ãã«ãµã€ã¯ã«ãšã³ãžãã¢(Full Cycle Developer)ãšã¯ 2018幎ã«Netflixãèšäºã§å
¬éããæ¥æ¬ã§ãCARTA Holdingsãããèš³ããŠãã ãã£ãããšã«ããããã«åºãŸãã€ã€ããæŠå¿µã§ãã Full Cycle Developers at Netflix â Operate What You Build Netflixã«ããããã«ãµã€ã¯ã«éçºè
âéçºãããã®ãéçšãã äžèšèšäºã®æ¥æ¬èªèš³ 詳现ãªå
容ã«ã€ããŠã¯äžèšèšäºã«ä»»ããŸãããèŠã¯ãããŸã§ãœãããŠã§ã¢ã©ã€ããµã€ã¯ã«ã®å段éã忥ãå°éåããŠããç¶æ
ãããããã¹ããŒãã£ã«ãããã¯ãã¢ãŠãããããç¶ããããã«äžé£ã®æ®µéãäŸ¡å€æäŸã«é¢ãããšã³ãžãã¢ãããŒã ã責任ãæã¡ãå®è¡ã§ããããã«ããããšããã¹ã¿ã³ã¹ã§ãã https://netflixtechblog.com/full-cycle-developers-at-netflix-a08c31f83249 å¥ã«Netflixãæå±ããŠåããŠãããã£ãåãæ¹ãé¢ããæ¹ãçãŸããããã§ã¯ãªãããããŸã§ãèªåŸæ§ã®é«ãããŒã ã ã£ãããè¯ããæªããã«ãªã¹ãªããŒã ã«æå±ããã¡ã³ããŒã¯äŒŒããããªåããããŠããã®ã§ã¯ãªãã§ããããã ãããã¯ããäºæ¥ãåã«ããããããã«ãåµãã¹ããããã¯ãã«ã€ããŠèããå®è£
ããã€ã³ãã©ãå®å®ãããªãªãŒã¹ã®ããã®CI/CDãããŒãæ§ç¯ããå¹ææž¬å®ã®ããã®åæåºç€ãŸã§æŽåãéçºã®ãµã€ã¯ã«ãåãç¶ããã webã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢ãæ
ã£ãŠãããã®è²¬åã«NetflixãFull Cycle Developersãšããååä»ããè¡ãããšã§ããããã¯ãã¢ãŠããããã®ãµã€ã¯ã«å
šäœãããèœåçã«å¹çããåãããšããæµããã§ãã€ã€ããã®ã¯åã°ããããšã§ãã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã¯ãã«ã¹ã¿ãã¯ãšã³ãžãã¢ãªã®ã? ãã«ãµã€ã¯ã«ãšã³ãžãã¢ãå¿åããäžã§ããã話ã«äžããã®ããã«ã¹ã¿ãã¯ãšã³ãžãã¢ãšã®æ¯èŒã§ã¯ãªãã§ããããã æãããŠãã«ãµã€ã¯ã«ãšã³ãžãã¢ãå¿åããããšã¯ãã«ã¹ã¿ãã¯ãšã³ãžãã¢ã«ãªãããšãªã®ã§ãããã? å人çãªæèŠã§ãããçµæçã«ãã«ã¹ã¿ãã¯ãšã³ãžãã¢ã«ãªã£ãŠããããšã¯ãããã®ã®ãå¿
é ã§ã¯ãªããšæã£ãŠããŸãã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã¯ âOperate what you buildâ (éçºãããã®ãéçšãã)ãšããã¢ãããŒãã§ãéçºã ãã§ãªããã¹ããéçšãæ§ã
ãªãã®ãå¹çåããŸãã ããã§éèŠãªã®ã¯ã å人ã§ã¯ãªãããŒã ã§ äžé£ã®ãµã€ã¯ã«ãã¹ããŒãã£ã«åãããšã«åãçµãã§ããããšã§ãã å
šå¡ãå
šæè¡é åã«ãããŠå§åçãªã¢ãŠãããããã§ããã°çæ³ã§ãããçŸå®äžçã§ã¯ã¡ã³ããŒã«ãã£ãŠã¹ãã«ãèå³é¢å¿ã®ããé åãç°ãªãã®ã¯åœããåã§ãã ãããã£ãäžã§ãCI/CDããã¹ããªã©ã®æè¡çãªããŒã«ã ãã§ãªããåã¡ã³ããŒã®åŸæé åã«ãããç¥èŠãã¹ãã«ãããŒã ã®ããŒã«ã®äžã€ãšããŠæŽ»çšããããšã§ãããŒã ãšããŠããè¯ãã¢ãŠãããããçãããšãã§ããŸãã ãšã¯ãããããŒã å
ã§æè¡çã«å®å
šã«åæ¥ããŠããŸããšãããŸã§ã®ãããªå°éåãã忥äœå¶ãããŒã å
ã§åçŸããããšã«ãªããããåã¡ã³ããŒãå°ãªããšãåæè¡é åã«ãã£ã¬ã³ãžããããšã¯æ±ããã¹ãã ãšæã£ãŠããŸãã ãããã¯ãã®ããã«ãèªåã®åŒ·ã¿ã掻ããã€ã€ããã®æã
ã§ãã¹ãããšãè¡ã£ãŠããããšã§ãããããTååã®ãããªã¹ãã«ã»ããããã£ããšã³ãžãã¢ã«ãªã£ãŠããããšã¯ããã§ãããã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã¯å°éæ§ã身ã«ã€ããªãã®ã? åºããããã¯ãã©ã€ããµã€ã¯ã«ãæè¡é åã«é¢ããããšã§ãåšçšè²§ä¹ã«ãªãããšãæããŠããæ¹ãæã
èŠãããŸãã ããŒã ãäŒç€Ÿã®ç¶æ³ã«ããã仿¹ãªããããããªé åã«é¢ãããããåŸãªããªã£ãçµæãèªèº«ã®åŒ·ã¿ãšãªãé åãèŠã€ãããããããããšãããã§ãããã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã®å Žåãããè¯ããããã¯ãã¢ãŠããããã®ããã«èªãæ§ã
ãªé åã«ãã£ã¬ã³ãžããŠãããŸãã äžã§ãæžããããã«ãèªèº«ã®åŒ·ã¿ãããŒã ã®ããŒã«ã®äžã€ãšããŠæŽ»ãããªããããããã¯ãã®ããã«å®è¡ã§ããé åãåºããŠãããããã«æé·æŠç¥ãç«ãŠãŠããããšã§ãæè¡çã«ãååå°éæ§ãè²ãŠãããšãã§ããŸãã ãšã¯ãããããŒã ãšããŠåæ¥äœå¶ãããŸãæ§ç¯ãããããããæ·±ãIåã®ã¹ãã«ãæã£ããšã³ãžãã¢ã«æè¡çãªå°éæ§ã§å£ããšæããããšãããã§ãããã ãããæ§ã
ãªã¹ãã«ããããã¯ãã®ããã«ã©ã䜿ãããªãããããã«ãã£ãŠã¡ã³ããŒãšå
±ã«ææãåºãç¶ããããããšãåäºåã«å°éæ§ã®é«ãã¹ãã«ã ãšæã£ãŠããŸãã åã§ã¯ãªãããŒã ã®ã¢ãŠãããããæå€§åãã äºæ¥ããããã¯ãã¯åžžã«æé·å§åã«æãããŸãããããã¯ãã®èŠæ±ãè€éãã€æè»ã«å€åããŠãããŸãã èªãã®æã ãã§å
šé åå®è¡ã§ããããã«ãªã£ããšããŠãããã€ãå人ã®ç©ççãªã¢ãŠããããéã®éçã«ã¶ã€ãããŸãã çŽ æ©ãåžå Žã®å€åãæè»ãªèŠæ±ã®å€åã«è¿œåŸãããªãŒãããŠããããã«ã¯ããŒã ã§èª²é¡ã«åãçµãŸãªããã°ãªããŸããã Some developers view design+development, and sometimes testing, as the primary way that they create value. This leads to the anti-pattern of viewing operations as a distraction, favoring short term fixes to operational and support issues so that they can get back to their âreal jobâ. But the âreal jobâ of full cycle developers is to use their software development expertise to solve problems across the full life cycle Netflixã®ããã°ã§ãããèšã£ãŠããããã«ãå°éæ§ãçºæ®ãã€ã€ããããŸã§ ããŒã ãšããŠã©ã€ããµã€ã¯ã«å
šäœã®åé¡ã解決ããããšã«ãã©ãŒã«ã¹ãã å¿
èŠããããŸãã ãã®ãªãã§ååäººã«æ±ããããããšã¯ãå°ãªããšã ãã¹ãŠã®ã©ã€ããµã€ã¯ã«ã®æ®µéã«ãªãŒããŒã·ãããæã€ããš ã§ãã çŸå®ã«ã¯ã€ã³ãã©æ§ç¯ã¯SREã®æ¹ã«å®è¡ããã ããããã«ã¹ã¿ããŒãµããŒãã®æ¹ã«ãŠãŒã¶ãŒã®ãµããŒããããŠããã ãããããããšãããã§ãããã ãããã£ãå Žåã§ãã©ã€ããµã€ã¯ã«å
šäœãããè¯ãããããã«ã¹ããŒã¯ãã«ããŒãšã©ãã³ã©ãã¬ãŒã·ã§ã³ããããå Žåã«ãã£ãŠã¯ããŒã ã®è²¬åãšããŠå·»ãåããã äž»äœçã« æ€èšãå®è¡ããããšã«ãããå人ã ãã§ã¯ãªãããŒã ã匷åããããšãã§ããŸãã By combining all of these ideas together, we arrived at a model where a development team, equipped with amazing developer productivity tools, is responsible for the full software life cycle: design, development, test, deploy, operate, and support. å人çã«Netflixã®ããã°å
ã®ãã®äžç¯ã奜ãã§ãã å人ã§ã¯ãªãããŒã ãªã®ã§ãã Netflixã®ãšã³ããªã®ã¿ã€ãã«ã Full Cycle Developer ã§ã¯ãªã Full Cycle Developer"s" ã§ããããšã«ãæ°ã¥ãã§ããããã developerãè€æ°åœ¢ã§ããããšã«(åæã«)æå³ãæãåã£ãŠããŸãã ãããã¯ãéçºã¯åºæ¬çã«ããŒã ã§è¡ããŸããããŒã ãããããäŸ¡å€æäŸãç®æããŠäžäžžãšãªãããã®ããã«åã
人ãããŒã ã«å¯Ÿãã©ããã£ãè²¢ç®ãããã®ãããããããŸãçµã¿ç«ãŠãããšãã§ããã°ãåã
ã®åŒ·ã¿ãæå€§éã«çãããããããã¯ããžã®æ§ã
ãªé¢ããæ¹ãçã¿åºãããšãã§ããŸãã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ãšããŠåãæçŸ©ãæå³ãåµã ãããŸã§äž»ã«ã¡ã³ããŒã®ç«å Žã§ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã«ã€ããŠã話ããŠããŸããã ãã ãããã¯ãã®ããã«ããã¹ãããšããã!ã§ã¯äººã¯åããŸãããããã§ãããžã¡ã³ãã®è
ã®èŠãæã§ãã ããŒã ãšããŠãã«ãµã€ã¯ã«ãšã³ãžãã¢ãšããŠåãçµãããšãã€ã³ã»ã³ãã£ããšãªãããã«ç®æšãè©äŸ¡ãèšèšããå¿
èŠããããŸãã å人ãçŽæ¥ãããã¯ãã«äŸ¡å€ãäžããŠããã ãã§ãªãã解決ãã¹ãåé¡ãèŠã€ããããã®èŠç¹ã®æé軞ãåãæ¿ããããããã«ãããŒã ãäœè£ãæãŠããããªæè³ãè¡ã£ãŠããå¿
èŠããããŸãã äŸãã°ãçæçã«ç®ã®åã®ãããžã§ã¯ãããªããšããŠãã¹ã±ãžã¥ãŒã«éãã«çµããããããšã ããã²ãããæ±ããããå ŽåãèããŠã¿ãŸãããã åœç¶ç®ã®åã®ã¿ã¹ã¯ã«éäžãããããžã§ã¯ããå®éãããããã«æã£ãæè¡çè² åµãè¿æžããäœè£ããªããããŒã«ãã¹ãã«ã ãã§ã¯ã©ãã«ããªããªããªããŸãã ãããšãçæçãªèŠç¹ã§ä»»ãããèªåã®ä»äºã ããããªãããšã«èºèµ·ã«ãªããä¿å®çãªèŠç©ãããè¶å¢ãåé¿ããããšã«ãããã£ã¹ã³ãã¥ãã±ãŒã·ã§ã³ãå€ãçºçããããã«ãªããPMãããžãã¹ãµã€ããšãšã³ãžãã¢ãšã®éã§ä¿¡é Œé¢ä¿ãæ§ç¯ã§ããããŒã ãšããŠç Žç¶»ããŠãããŸãã ããŒã ãã¡ã³ããŒã¯çãå°œãã®ãªã¹ã¯ã«æããããããã¯ãã¢ãŠããããã®ã©ã€ããµã€ã¯ã«ãç Žå£ãããŠããŸãã®ã§ãã ãšã¯ãããé·æçãªèŠç¹ã§æè¡çãªæè³ã°ããããŠããŠã¯äºæ¥ã¯åã«ããããããšãã§ããŸããã ãããŸã§ãããã¯ãã¢ãŠããããã®ããã«ã©ããã£ãæè³ãã§ãããèãããããå®è¡ããããšã§æ¥ã
ã®éçºãã©ã®ããã«å¹çåãããåžžã«æ¯ãè¿ãç¶ããå¿
èŠããããŸãã çŽæ¥äºæ¥ãé²ããããã®ä»äºãšé·æçãªæè³ã®ãã©ã³ã¹ãåãããã«ã¯ããããžã¡ã³ãããã人éãäž¡æ¹ã®èŠç¹ãæã£ãŠããŸãåªå
é äœä»ããè¡ããã¡ã³ããŒã®æé·ããµããŒããçãçããšåãããããªç°å¢ã¥ããããã責任ããããŸãã BASE BANKã§ã®ãã«ãµã€ã¯ã«ãšã³ãžãã¢å è²ã
ãšåãããªããšãæžããŠããŸããããæã
BASE BANKããŒã ããŸã ãŸã çºå±éäžã®æ®µéã§ããæ¥ã
æ¹åãç©ã¿éããŠããŸãã BASE BANKããŒã ã¯ã·ã§ãããªãŒããŒããã®ãã£ãã·ã¥ãããŒã®èª²é¡è§£æ±ºãè¡ãããã«2018幎ã«èªçããããããYELL BANKããBASEã«ãŒããªã©ã®ãããã¯ããçã¿åºããŠããŸããã æ°èŠäºæ¥ç«ã¡äžããã°ããŒã¹ãæ
ãããŒã ãšããŠãæåããæèããŠããããšã¯ãšã«ããæ©ããªãªãŒã¹ããçŽ æ©ãæ¹åã®ãµã€ã¯ã«ãåãç¶ããããšã§ãã ããã倧åæãšããŠä»ã«è³ããŸã§çµç¹èšèšãæè¡éžå®ãæåã®éžæãè¡ãç¶ããŠããŸãã çŸåšBASE BANKã¯å
šäœã§15åã»ã©ã®ããŒã ã§ãã ãã®ãã¡ãšã³ãžãã¢ã¯10åã§ãäžèšçµç¹å³ã®ããã«Dev Groupå
ã§BASE BANK管æã®3ãããã¯ãããšã«ããŒã ãåããŠããŸãã(ä»ã«ãããŒã ã¯ãããBASE BANKã«é¢ä¿ããçµç¹æ§é ã ãæç²) ãããã¯ãã®æææ±ºå®ã«é¢ããã¡ã³ããŒãçµç¹æ§é çã«ãè¿ãäœçœ®ã«çœ®ããããã¹ããŒãã£ã«ã³ãã¥ãã±ãŒã·ã§ã³ãåãæææ±ºå®ãé²ããããããã«çµç¹èšèšãããŠããŸãã https://speakerdeck.com/base/basebank?slide=29 ãªãããã®ãèãããã£ãŒãããã¯ã«ãŒããéããŠåŠã³ç¶ãã ãšã³ãžãã¢ãšããŠè§£ãã¹ãæ¬è³ªçãªèª²é¡ãçºèŠãããã©ãŒã«ã¹ããŠãããããã«ããªãä»ã®ãããªçµç¹æ§é ãéçºããã»ã¹ãæåã«ãªã£ãŠããã®ãã«ã€ããŠæ·±ãè
¹èœã¡ããŠãããããã®äžã§ããŒã ã®äžå¡ãšããŠäœããã¹ãããäžç·ã«èããã¢ãŠããããããŠããŸãã ãããŠå人ãããŒã ãã¢ãŠããããã®çµæäœãåŸãããããäœãæ¹åãã¹ãããæ¯ãè¿ãã€ã¥ããããããã«ãµããŒãããããšã§ãåŠã³ãç©ã¿éããçºèŠãã課é¡ãšãã®ã¢ãŠããããã®è³ªãé«ããŠãããããã«ããŠããŸãã ãšã³ãžãã¢ããŒã ã®ããããã¬ããã¹ãã¯ãã£ãã®ãããªã¹ããªã³ãããšã®æ¯ãè¿ãã ãã§ãªããæ§ã
ãªã¿ã€ãã³ã°ãç²åºŠã§ã®æ¯ãè¿ããããããçãŸãããã¯ã¹ãã¢ã¯ã·ã§ã³ã®å®è¡ããããŠãŸãæ¯ãè¿ãã»ã»ã»ãšãã£ãç©ã¿éããããšã³ãžãã¢ã«éããBASE BANKããŒã å
šäœã§åœããåã®ããã«è¡ãããŠããŸãã ããŒã å
šäœã§ãšã«ããåŠã³ç¶ããã ããã培åºããŠããŸãã èäžãä»»ãåããã³ã©ãã¬ãŒã·ã§ã³ BASE BANKã®ã¡ã³ããŒã¯ãçããããã¯ãã®ã©ã€ããµã€ã¯ã«ãã¹ãŠãå®ç§ã«åããè¶
人ãšããããã§ã¯ãããŸããã åã
ã®åŒ·ã¿ãæå€§éã«æŽ»ãããªãããåã§ã¯ãªãããŒã å
šäœã§é«ãçç£æ§ãç¶æãåäžããç¶ãããŸãã«"åã§ã¯ãªãããŒã ã®ã¢ãŠãããããæå€§åãã"ã®é
ã§æžããããšãäœçŸããŠãããŠããŸãã æ¥ã
ã®éçºã®ãµã€ã¯ã«ã¯åããŒã ãäž»äœçã«ãŸããã€ã€ãããŒã ãæšªæãã¬ãã¥ãŒãæè¡çãªãµããŒããšéããŠèäžãä»»ãåã£ãŠããŸãã èäžãä»»ãåãã®ã¯ãšã³ãžãã¢ã«éãã話ã§ã¯ãªããproduct group(äºæ¥äŒç»ãããŒã±ãã£ã³ã°ãæ
ãããŒã )ãdesign group(ãã¶ã€ããŒãæå±ããããŒã )ãšãå¯ã«é£æºããããããã¹ããŒãã£ã«ä»äºãããããã«ã¯ã©ãã³ã©ãã¬ãŒã·ã§ã³ããŠããã°ããã?ãæ¥ã
ã®æ¯ãè¿ããéããŠã¢ããããŒããç¶ããŠããŸãã https://applepine1125.hatenablog.jp/entry/20220818/1660750909 å人çã«ææžãã"ã¿ããªã§ã¢ãžã£ã€ã«"ã®æžè©ã®äžã§ããµããŸããããã¢ãžãªãã£ã®é«ãããŒã ã§ããç¶ããããã®ååã®äžã€ãšããŠ æ©æããé »ç¹ã«ã³ã©ãã¬ãŒã·ã§ã³ããã®ãã¢ãžã£ã€ã« ãšãããã®ãæ²ããããŠããŸãã å€åã«å¯ŸããããŒã ãšããŠæè»ã«é©å¿ãç¶ããããã«ã¯äºãã«å¯ã«ãµããŒããããã®ã¯åœç¶ã®æµããªã®ã§ãã è¶å¢ "ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã¯å°éæ§ã身ã«ã€ããªãã®ã?"ã®é
ã§ãTååã®ã¹ãã«ã«ã€ããŠè§ŠããŸããã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ãšããŠé«ãã¢ãŠãããããè¡ãç¶ããããã«ã¯ãããã¯ãã«å¿
èŠãªããšã®ããã«è¶å¢ãç¶ããå¿
èŠããããŸãã æè¡çãªã¹ãã«ã«éã£ã話ã ãã§ã¯ãããŸãããå¿
èŠãªã¹ããŒã¯ãã«ããŒãžã®ã³ãã¥ãã±ãŒã·ã§ã³ãªã©ããŒã ã®è¶å¢ãããããŸã§æã£ãããšã®ãªãã£ãç¯å²ã®è²¬ä»»ãæã¡ãã£ã¬ã³ãžããè¶å¢ãªã©ãæ§ã
ãªè¶å¢ã®åœ¢ããããŸãã BASE BANKã®ã¡ã³ããŒã¯èªåãé¢ãããããã¯ãã«ãŸã€ããé åã«é«ãèå³é¢å¿ããã¡ãç©æ¥µçã«è¶å¢ãã³ãã¥ãã±ãŒã·ã§ã³ãåããäž»äœçã«ä»äºãåã«é²ããŠãããŠããŸãã ãã®èæ¯ã«ã¯ãããã¯ãããŠãŒã¶ãŒãžã®é«ãçè§£ããçžäºã®ä¿¡é Œãããã®ããªãšæã£ãŠããŸãã ãšã¯ããéé²ã«è¶å¢ãç¶ãããšã³ã³ãã©ãŒããŸãŒã³ãäžæ°ã«çªãæããããã¯ãŸãŒã³ã«ãŸã§å°éããŠããŸããè¶å¢ããåŸãåŠã³ãç©ã¿éããããšãã§ããã«æ¶èããŠããŸãããšãããã§ãããã ãããªããªãããã«ããèªåããããŒãžã£ãšããŠOKRãæ¥ã
ã®ã³ãã¥ãã±ãŒã·ã§ã³ãéããŠãããã¯ãã®æ¹åæ§ãšã¡ã³ããŒã®å¿åãããåããããã£ã¬ã³ãžããŠãããç¯å²ãçå®ã«åºããŠããŸãã ä¿¡çšãä¿¡é Œ ãããŸã§æžããŠããåŠã³ã®ãµã€ã¯ã«ãèäžãä»»ãåãããšãè¶å¢ããã¹ãŠã®æ ¹åºã«ã¯äºããžã®åŒ·ãä¿¡é Œé¢ä¿ããããŸãã ããæè»ã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããåŠã³ãç©ã¿éããªããã¹ããŒãã£ã«ãããã¯ããäºæ¥ãåã«ããããããã«ã¯ãæè¡ãçµéšã ãã§ã¯ãªã äºãã®ä¿¡çšãä¿¡é ŒãäœããéèŠ ãšèããŠããŸãã "ãã«ãµã€ã¯ã«ãšã³ãžãã¢ãšããŠåãæçŸ©ãæå³ãåµã"ã®é
ã§ãæžããããã«ãäºãã®ä¿¡é Œé¢ä¿ãæ§ç¯ã§ããªããšãè¶å¢ããããšããªããä¿å®çã«ãªããããã¯ãã¢ãŠããããã®ãµã€ã¯ã«ã¯éåããŠãããŸããæé·ãã§ããŸããã äºãã«ä¿¡é Œé¢ä¿ãæ§ç¯ããã«ã¯ææŸãã§ä»»ãåãã®ã§ã¯ãªããæ¥ã
ã®ä»äºãéããŠäºãã«è
¹ãå²ã£ãŠè°è«ããææãåºãç¶ããå¿
èŠããããŸãã è
¹ãå²ã£ãã³ãã¥ãã±ãŒã·ã§ã³ãã§ããããã«ãªããšãææçéãã¹ã ãŒãºã«ãªãã ãã§ãªããçžæã®çè§£ãæ·±ãŸããçµæçã«æ·±ãä¿¡é Œé¢ä¿ãç¯ãäºãã§ããŸãã ãŸã瀟äŒäººãšããŠè³æ¥µåœããåã®è©±ã§ãããçŽæãå®ããææãåºãç¶ããããšã§ãä¿¡é Œãç©ã¿éããããšãã§ããŸãã ãããã§ããããã«ãªããšãããããããžãã¹ãµã€ããšãšã³ãžãã¢ãµã€ãã§ããããããšãé£ãéãè¡çªãããããªããšããªããç¶æ³ã«å¿ããŠä»äºã®åªå
é äœãé©åã«ã³ã³ãããŒã«ã§ããããã«ãªããŸãã ããŒã ãšããŠä»äºãããäžã§äºãã«æ·±ãçè§£ãåããé Œãåããé¢ä¿ã®æ§ç¯ãäœãã倧äºã«ããŠããŸãã ãããã« æ§ã
ãªããŒã«ãå
å®ããšã³ãžãã¢èªèº«ã§å®è¡ã§ããç¯å²ãåºããäžããããã¯ãã®ããã«è¶å¢ãå®è¡ãç¶ãããšãã«ãµã€ã¯ã«ãšã³ãžãã¢ã«ãªã£ãŠãããšããã®ã¯èªç¶ãªæµããªã®ããªãšæã£ãŠããŸãã æã
èªèº«ããŸã ããããããŒã ã¥ããã®éäžã§ããä»åŸäºæ¥ãããŒã ã¡ã³ããŒãå¢ããäžã§æ§ã
ãªèª²é¡ã«ã¶ã€ããããšã§ãããã ããã§ãäºãã«ä¿¡é Œé¢ä¿ãæ§ç¯ããããèäžãé ãåããªããããããã¯ãã®ããã«äœãã§ãããèãç¶ããå§¿å¢ããå¿ããªããã°ãã©ããªèª²é¡ããã®ããŒã ã§ããã°ä¹ãè¶ããŠãããã®ã§ã¯ãªãããšæã£ãŠããŸãã åœç¶ãããªãæé·ã®ããã«ããå€ãã®ã¡ã³ããŒã®åãå¿
èŠã§ããBASEãBASE BANKã®äºæ¥ãæã
ã®åãæ¹ãªã©å°ãã§ããèå³ãããã°æ°è»œã«ã話ããŸããã! open.talentio.com ææ¥ã¯ @gatchan0807 @yuripi ã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ãã!
ã¯ããã« æ¬èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®8æ¥ç®ã®èšäºã§ãã BASE BANKã® @osushi_maguro ð£ã§ãã ãBASEã«ãŒãããšãããããã¯ãã®PMMïŒãããã¯ãã»ããŒã±ãã£ã³ã°ã»ãããŒãžã£ãŒïŒãæ
åœããŠããŸãã ãHUNTERÃHUNTERãã倧奜ãã§ãã ä»åã¯ããŠãŒã¶ãŒãªãµãŒããšABãã¹ããéããŠã ãBASEã«ãŒãã ã®å¹æçãªã¡ãŒã«ããŒã±ãã£ã³ã°ãå®çŸãã話ãããŸãðââïž ãã ãã®åã«âŠâŠãBASEã«ãŒããã£ãŠäœïŒð€ BASEã«ãŒãã¯ãBASEã·ã§ããã®å£²äžãå
šåœã®Visaå çåºã§ãå³ææ±ºæžãã§ããã«ãŒãã§ãã ã·ã§ãããªãŒããŒããã¯ã ãæ¯èŸŒç³è«ãããããšãªãããã«ããææ°æããããã«ã 売äžããå©çšããã ãããšãã§ããŸãã 1分でわかる、「BASEカード」のきほん - BASE U|ネットショップの開設・運営・集客のノウハウを学ぼう ãã ãŠãŒã¶ãŒãªãµãŒãå
容âïž ãŠãŒã¶ãŒãªãµãŒãã¯ã3ã¹ãããã§ãããªããŸããã BASEã«ãŒãã®ãã¡ãã«åæïŒ ãé¢è±ãå€ããã¡ãã«ããææ¡ãã ãããŒãŠãŒã¶ãŒãžã®ã€ã³ã¿ãã¥ãŒïŒ ãããŒãŠãŒã¶ãŒã®ãBASEã«ãŒãã«å¯Ÿããæçãã匷ããªã£ããã£ããããã€ã³ããææ¡ãã æªçºè¡ãŠãŒã¶ãŒãžã®ã€ã³ã¿ãã¥ãŒïŒ 1ã®èª¿æ»ã«ãããçºè¡ãã¡ãã«ãã«ãããé¢è±çãæãé«ãããšãããã£ããããçºè¡ã®é»å®³èŠå ãææ¡ãã ãã ãŠãŒã¶ãŒãªãµãŒãçµæð¡ äžèšãŠãŒã¶ãŒãªãµãŒãã®çµæãããã£ãããšã 3〠ãããŸããã BASEã«ãŒãã®ãããŒãŠãŒã¶ãŒã¯ãäž»ã« ãæ³äººåããŠããªãåäººäºæ¥äž»ã®æ¹ããBASEã坿¥ãšããŠäœçœ®ä»ããŠããæ¹ã ã«å€ãã£ã ãããŒãŠãŒã¶ãŒã«ãšã£ãŠãBASEã«ãŒãã®æå€§ã®é
åã¯ ãæ¯èŸŒç³è«ã®ãã€ã³ïŒå
¥éãŸã§ã®ãªãŒãã¿ã€ã ãé·ãã»ææ°æããããïŒãè§£æ¶ãããããšã æªçºè¡è
ã¯BASEã«ãŒãã ã¯ã¬ãžããã«ãŒãã ãšèª€è§£ ããŠããããã¯ã¬ãžããã«ãŒã = çºè¡ãé¢åèãã»å¹ŽäŒè²»ããããããšããã€ã¡ãŒãžããçºè¡ã«è³ã£ãŠããªã 以äžãããBASEã«ãŒãã®ããŒã±ãã£ã³ã°æŠç¥ãšããŠã ãçŸåšã®ãããŒãŠãŒã¶ãŒã®ãããªå±€ãã¿ãŒã²ãããšããã¯ã¬ãžããã«ãŒãã®ã€ã¡ãŒãžãææããªãããæ¯èŸŒç³è«ã®ãã€ã³ãè§£æ¶ããããšããã¡ãªããã匷調ããã ãšããæ¹éã§æœçãå®è¡ããŠããããšã«ããŸããã ãã ABãã¹ãå
容âïžïŒæé¢æ€èšŒç·š ããŒã±ãã£ã³ã°æœçãšããŠããŸãã¯ã¡ãŒã«ããå§ããããšã«ããŸããã çºè¡ãã¡ãã«ã®é¢è±çãé«ãããšããé信察象ããæªçºè¡ãŠãŒã¶ãŒãã«çµãã ãŠãŒã¶ãŒãªãµãŒãçµæãèžãŸããŠ2çš®é¡ã®æé¢ãçšæãããã¹ãããããªããŸããã A.ã æ¯èŸŒç³è«ã®ãã€ã³ãè§£æ¶ãããããšãã匷調ããå
容 ä»¶åïŒæ¯èŸŒææ°æãç¡æã«ãªããBASEã«ãŒãããçºè¡ã§ããŸãïŒ BASEã«ãŒãã»æ¯èŸŒç³è«ã®æ¯èŒã€ã¡ãŒãžãèŒãããã®ïŒå³ã®äžå€®ïŒ B. ãã¯ã¬ãžããã«ãŒãã§ã¯ãªãããšãã匷調ããå
容 ä»¶åïŒãBASEã«ãŒããïŒããªãã€ãã«ãŒãïŒãçºè¡ã§ããŸãïŒ BASEã«ãŒãã»ã¯ã¬ãžããã«ãŒãã®æ¯èŒã€ã¡ãŒãžãèŒãããã®ïŒå³ã®äžå€®ïŒ çºè¡çãé«ãã£ãã®ã¯ãæãããŠã©ã¡ãã®æé¢ã§ããããïŒ çµæãèŠãŠãããŸãããïŒ ãã ABãã¹ãçµæð¡ïŒæé¢æ€èšŒç·š çºè¡çãé«ãã£ãã®ã¯ Aã æ¯èŸŒç³è«ã®ãã€ã³ãè§£æ¶ãããããšãã匷調ããå
容 ã®ã¡ãŒã«æé¢ã§ããã æ¯èŸŒç³è«ãšé¢é£ã¥ããªããã¢ãããŒãããæ¹æ³ã¯ç¢ºå®ã«å¹æããã ããšããããšãããã£ãã®ã§ãç¶ããŠãã1ã€ãã¹ãããããªããŸããã ãã ABãã¹ãå
容âïžïŒã¿ã€ãã³ã°æ€èšŒç·š åè¿°ã®ABãã¹ãçµæãåãã ãæ¯èŸŒç³è«ã«å¯Ÿãããã€ã³ãâç¹ã«âé«ãŸãã¿ã€ãã³ã°ã«ã¢ãããŒããããšãããã«å¹æçãªã®ã§ã¯âŠâŠïŒïŒð¥žã ãšèããŸããã ããã§ã ãæ¯èŸŒç³è«ã«å¯Ÿãããã€ã³ãâç¹ã«âé«ãŸãã¿ã€ãã³ã° = æ¯èŸŒç³è«ã®çŽåŸã ãšä»®å®ããããã§ã æ¯èŸŒç³è«ããã ã〠ãã®åœæ¥ã«ãæ¯èŸŒç³è«ã®ãã€ã³è§£æ¶ã匷調ããå
容ãã®ã¡ãŒã«ãéä¿¡ããã°ã«ãŒã æ¯èŸŒç³è«ããã ã〠äžèšã¡ãŒã«ãéä¿¡ããªãã£ãã°ã«ãŒã æ¯èŸŒç³è«ãããŠããªã ã〠äžèšã¡ãŒã«ãéä¿¡ããã°ã«ãŒã æ¯èŸŒç³è«ãããŠããªã ã〠äžèšã¡ãŒã«ãéä¿¡ããªãã£ãã°ã«ãŒã ãšãã4ã€ã®ã°ã«ãŒããäœããçºè¡çãæ¯èŒããŸããã ããŠããã¡ãã®çµæã¯ã©ãã ã£ãã§ããããïŒ ãã ABãã¹ãçµæð¡ïŒã¿ã€ãã³ã°æ€èšŒç·š çºè¡çãé«ãã£ãã®ã¯ ãæ¯èŸŒç³è«ããã ã〠ãã®åœæ¥ã«äžèšã¡ãŒã«ãéä¿¡ããã ã°ã«ãŒããšã ãæ¯èŸŒç³è«ãããŠããªã ã〠äžèšã¡ãŒã«ãéä¿¡ããã ã°ã«ãŒãã§ããã æ¯èŸŒç³è«ããã»ããªãã«ãããããã¡ãŒã«ãéã£ãã°ã«ãŒãã®çºè¡çãé«ãã£ãããšããã éä¿¡ã¿ã€ãã³ã°ã广ã«åãŒã圱é¿ã¯ããŸãé«ããªã = ã¡ãŒã«ãéä¿¡ããããšèªäœãéèŠ ã ãšæãããŸãã ããã¯ãå人çã«ã¯çµæ§æå€ã§ããð³ ãã ãããã« ä»åã¯ããŠãŒã¶ãŒãªãµãŒãçµæãã¯ã€ãã¯ã«ã¢ãŠããããã«æŽ»ãããããšã»ABãã¹ããçµãŠå¹æçãªã¡ãŒã«ããŒã±ãã£ã³ã°ãå®çŸããããšãéåžžã«è¯ãã£ããšæããŸãã ãŸããããŠãŒã¶ãŒã®å£°ããã©ããªä»®èª¬ãäœããïŒããã©ããªæ€èšŒããããªããïŒããæ€èšŒã®çµæãäœãããã£ãã®ãïŒãã仮説ãã©ã®ããã«ä¿®æ£ãããïŒããšããç¹ã¯ãŸãã«PMMã®è
ã®èŠãæã§ãç·åŒµæãããã€ã€ãïŒããããããïŒæ¥ã
é¢çœããšæããŸãã ä»åŸã¯ã¡ãŒã«ããŒã±ãã£ã³ã°ã«ãšã©ãŸãããWebç»é¢ã®UI/UXæ¹åã»ãããã¯ãã®æ©èœæ¹åã«ãçæããBASEã«ãŒãããŠãŒã¶ãŒã«ãšã£ãŠæé«ã®ãããã¯ãã«ãªãããå°œåããŠãããããšæããŸãïŒ ææ¥ã¯ @gatchan0807 @yuripiiiii ã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ããã
ã«ãŒãããŒã ãæ¯ãè¿ã ãã®èšäºã¯BASEã¢ããã³ãã«ã¬ã³ããŒã®7æ¥ç®ã®èšäºã§ãã devblog.thebase.in Payment Dev Group ãããŒãžã£ãŒãæ
åœããŠããç°ä»²ïŒ @tosh ïŒã§ãã Payment Dev Groupã¯æ±ºæžé åã®ãããã¯ãéçºãæ
åœããŠããã°ã«ãŒãã«ãªããŸãããã®äžã§ãäž»ã«ã·ã§ããã³ã°ã«ãŒãæ©èœãæ
åœããŠããã«ãŒãããŒã ã«ã€ããŠãã©ãããçµç·¯ã§çãŸããã®ããããŒã ã®åœ¹å²ãä»åŸã®ããšãªã©ã玹ä»ãããŠãã ããã ã«ãŒãããŒã ã«ã€ã㊠BASEãšããECãã©ãããã©ãŒã ã«ãããŠæ±ºæžã¯ãµãŒãã¹ã®ã³ã¢é åã«ãªããŸãã BASEã®äžã§æ±ºæžã¯2ã€ã®æ¹åæ§ããããšèããŠããŸãã ã·ã§ãããªãŒããŒãšè³Œå
¥è
ã®éã§è¡ãããæ±ºæž BASEãšã·ã§ãããªãŒããŒã®éã§è¡ãããæ±ºæž ã«ãŒãããŒã ã¯åè
ã®ã·ã§ãããªãŒããŒãšè³Œå
¥è
ã®éã§è¡ãããæ±ºæžãã·ã¹ãã ã®æ©èœã§ããã°å®éã«ååã賌å
¥ãããã·ã§ããã³ã°ã«ãŒãæ©èœïŒä»¥äžãã«ãŒãæ©èœïŒãã¡ã€ã³ã«æ
åœããŠããããŒã ã§2022幎7æã«çµæãããŸããã ã«ãŒãããŒã çµæã®ããã«ã± BASEã®èª²é¡ãšããŠEOLãè¿ãããã¬ãŒã ã¯ãŒã¯ããã®ç§»è¡ãé²ããŠããŸãããã®äžã§ãã«ãŒãæ©èœã¯ãŸãåãã«ç§»è¡ãå®äºããæ©èœã«ãªããŸããã§ãããç§»è¡ããŠçµããã§ã¯ãããŸããããµãŒãã¹ã¯æé·ããŠããã®ã§äœµããŠæ©èœãæ¹ä¿®ããŠããå¿
èŠããããŸãããæ°ããã¢ãŒããã¯ãã£ãçè§£ããã«ééã£ãæ¹åã§æ¹ä¿®ãé²ããšè€éãªè² åµãçã¿åºããŠããŸãå¯èœæ§ããããŸãããŸãã¢ã©ãŒã察å¿ãããã±ãŒãžæŽæ°ãªã©ã®æ¥ã
ã®éçšãããäžèšã®ãããªèª²é¡ããããŸããã æ°ããã¢ãŒããã¯ãã£ãã©ãé©åã«éçºããŠããã®ãïŒ ã¢ã©ãŒã察å¿ãããã±ãŒãžæŽæ°ãªã©ã®éçšã¯ã©ããããïŒ äžèšã®èª²é¡ãã«ãŒãæ©èœããªãã¥ãŒã¢ã«ãããšã³ãžãã¢ãæå¿çã«å¯Ÿå¿ããŠããŸããããã¹ã±ãŒã«é¢ã«ãããŠå¥œãŸãããªãç¶æ³ã ã£ããããã«ãŒãããŒã ãšããŠçµæããŠãéçºã»éçšã»ã°ããŒã¹ãå«ããŠè²¬ä»»ãæã€ã®ãæãŸãã圢ãªã®ã§ã¯ãªãããšèããçµæããªãã¥ãŒã¢ã«ãããšã³ãžãã¢ãéããŠã«ãŒãããŒã ãèªçããŸããããã®ããŒã ããããžã¡ã³ãããç«å Žã«ãªã£ãã®ã§ãããåœåãç§ã¯ããŒã ããããžãŒã§ç޹ä»ãããŠããããŒã ã§ããã°ãã³ã³ããªã±ã€ãããã»ãµãã·ã¹ãã ããŒã ã®åœ¹å²ãã€ã¡ãŒãžããŠããŸããã ã³ã³ããªã±ã€ãããã»ãµãã·ã¹ãã ããŒã ãšã¯ãã·ã¹ãã ã®äžã§ã¹ãã·ã£ãªã¹ãã®ç¥èãå¿
èŠãšãªãããŒããéçºãä¿å®ãã責任ãæã€ãã»ãšãã©ã®ããŒã ã¡ã³ããŒããã®åéã®ã¹ãã·ã£ãªã¹ãã§ãªããã°ãçè§£ã倿Žãé£ãããããªãµãã·ã¹ãã ãæ
åœããããŒã ã«ãªããŸãã ã«ãŒãæ©èœã¯æ±ºæžãè¡ããããµãŒãã¹ã®ã³ã¢æ©èœã§ããããéãšãããŠãŒã¶ãŒã®ã»ã³ã·ãã£ããªéšåã«é¢ããããšã決æžãè¡ãå€éšã·ã¹ãã ã®ä»æ§ãªã©ãèžãŸããŠéçºããã®ã§å°éçãªç¥èãå¿
èŠã«ãªããŸãããã®ããããã®åœ¹å²ãè¯ããšèããŠä»ããŒã ã®ã«ãŒãé åã®éçºãå·»ãåãèªç¥è² è·ãäžãã€ã€è²¬ä»»ãæã£ãŠéçºãããŠãããããã«åãå§ããŸããã é²ããŠããäžã§ã®èª²é¡ çµææã®èª²é¡ãšããŠå·»ãåãã®ã¯é£ããã®ã§ã¯ïŒãšããã®ããããŸããããæ¡å€ãããã®ã§ã¯ãšæãã«ãŒãæ©èœã«é¢ããæ¡ä»¶ãåããŒã ãããã¢ãªã³ã°ããã®ã§ããããã¯ãæ¡ä»¶ãå€ãåœæã®ã¡ã³ããŒã®æ°ã§ã¯æ¡ä»¶ãæããããªãå¯èœæ§ãé«ãããŸãã¡ã³ããŒãå¢ãããšãã£ãŠãã«ãŒãããŒã ã«é¢ããããŒã ã¯è€æ°ãããæ¡çšã¯åãã¹ããŒãã§é²ãã®ã§ã¡ã³ããŒãäžè¶³ããŠããç¶æ³ã¯ç¶ããããæ¡ä»¶ã«åªå
é äœãä»ããŠå¯Ÿå¿ããŠããããšã¯ã§ãããšæããŸãããã«ãŒãããŒã ã®å¯Ÿå¿åŸ
ã¡ã§ä»ããŒã ã®éçºãæ»ã£ãŠããŸããšãµãŒãã¹æé·ãæ¢ããããšã«ç¹ãããæ¬æ«è»¢åã®è©±ãªã®ã§é¿ããããšèããŠããŸããã ã€ãã€ããªã³ã°ããŒã ãã®èª²é¡ã解決ããäžã§åœ¹ç«ã£ãã®ãã€ãã€ããªã³ã°ããŒã ã®ãããªåœ¹å²ã®ã€ã¡ãŒãžã§ããã ã€ãã€ããªã³ã°ããŒã ãšã¯ãç¹å®ã®ãã¯ãã«ã«ïŒãããã¯ãïŒãã¡ã€ã³ã®ã¹ãã·ã£ãªã¹ãããæ§æããããããã¯ãã®ããªããªãŒå
šäœã«é¢ããéçºããŒã ã®èœåã®ã£ãããåããã®ãå©ãã圹å²ã®ããŒã ã«ãªããŸãã ã«ãŒãæ©èœã¯å°éçãªç¥èãå¿
èŠã«ãªãæ©èœã§ã¯ãããã®ã®ä»ããŒã ã®èŠä»¶ã絡ãã æ¹ä¿®ãå
¥ãããšãå€ããããžãã¹ã«æ±ããããŠãããããã¯ãã®æé·ãèãããšäžéšã®ããŒã ã§ã¯ãªãéçºããŒã å
šäœã§æ¹ä¿®ããŠãããäœå¶ããŽãŒã«ã ãšèããŸãããæ°ããã¢ãŒããã¯ãã£ãçè§£ããŠãããã«ãŒãæ©èœãä»ããŒã ã«ãéçºã§ããããã«ãªã£ãŠããããåšå²ãšã®ã®ã£ãããåããŠããããã®åœ¹å²ãè¯ãã®ã§ã¯ãªãããšæããã¡ã³ããŒãã話ãèããªããäžèšã®é²ãæ¹ãè¯ããããšå€æãããŸããã ä»ããŒã ã®éçºã«ã«ãŒãããŒã ã®ãšã³ãžãã¢ãåå ããŠã«ãŒãæ©èœéçºãè¡ã ã«ãŒãããŒã ã®ãšã³ãžãã¢ã®ãµããŒãã®ããšãä»ããŒã ã«ã«ãŒãæ©èœéçºãè¡ã£ãŠãããã«ãŒãããŒã ãã³ãŒãã¬ãã¥ãŒããããšã§äŒããªããå質ãç¶æãã å匷äŒã®ãããªãã®ã§ã¢ãŒããã¯ãã£ã®çè§£ãå
šäœã«å±éããããšãæ€èšããŸããããå人ã®ã¹ãã«å·®ã¯ååšããã®ã§äŒããç²åºŠãé£ããããšã倿ŽãããŠããããç¶ç¶çãªã¢ã¯ã·ã§ã³ãå¿
èŠãšãã芳ç¹ããããæ¡ä»¶ããŒã¹ã§è§Šã£ãŠããããªããäŒããŠããæ¹æ³ãå°éã§ããéžã³ãŸããã çŸåšã®ç¶æ³ 2022幎7æã«ã«ãŒãããŒã ãçµæããŠãã5ã¶æç®ã«ãªããŸããçµææã¯ãŸã æŽçã远ãã€ããã¡ã³ããŒã«ãã«ãã¿ã¹ã¯ããé¡ãããããšããããŸããããçŸåšã¯1ã€ã®ã¿ã¹ã¯ã«éäžããŠããŸãããŸãä»ããŒã ããµããŒãããäœå¶ãåããŠããŠããä»ããŒã ã®ã¡ã³ããŒã«ã«ãŒãæ©èœãäŒããŠããããšãåŸã
ã«ã§ããŠããŠãã«ãŒãããŒã èŠå ã§éçºãé
ããããšã¯é¿ããªãããã«ãŒãæ©èœã®å質ãç¶æãããšããããšã¯å®çŸã§ããŠããŸããæ¡çšã«é¢ããŠãèªåãã¡ã§ã¡ã³ããŒãå¢ãããŠããããšã§ããŠããŠéå§æã¯4人ã§ãããçŸåšã¯8人ã«ãªããŸããã ä»åŸã®èª²é¡ æ¥ã
ã®åãåãã察å¿ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã©ãŒã察å¿ãããã±ãŒãžæŽæ°ããããã€ãªã©ãéçšé¢ã¯æ¹åã§ãããšèããŠããŠãããŒã å
ã§ãŸã åããããæ±ºæžç¥èã®å¹³æºåãå«ããæ¥ã
ã®åãåããããã®ç¶ç¶çãªæ¹åãµã€ã¯ã«ãã·ã§ããã®å¢å ãšå
±ã«å¢ããŠããæ±ºæžãã©ã³ã¶ã¯ã·ã§ã³ãã©ãåŠçãããïŒãšããæªæ¥ã®èª²é¡ã«åããŠã®ã¢ã¯ã·ã§ã³ãªã©ãã«ãŒãããŒã ãšããŠã«ãŒãæ©èœã»æ±ºæžã«è²¬ä»»ãæã£ãŠå質ãç¶æããããšããé«ããŠããããããªåãçµã¿ãä»åŸããŠãããããšèããŠããŸãã ãããã« ãããŸã§èªãã§ããã ãããããšãããããŸããã æåŸã«ãªããŸããBASEãäžç·ã«æ¯ããŠããããšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ A-1.BASE_Webアプリケーションエンジニア/ショップオーナー向け開発 / BASE株式会社 A-1.BASE_エンジニアリングマネージャー / BASE株式会社 ææ¥ã¯ @applepine1125 ãš @osushi_maguro ã®èšäºã§ãããæ¥œãã¿ã«ãã
ãã®èšäºã¯ BASEã¢ããã³ãã«ã¬ã³ã㌠ã®7æ¥ç®ã®èšäºã§ãã åãã« ããã«ã¡ã¯ãOwners MarketingããŒã ã®ç«¹æ¬ã§ãã ãã®èšäºã§ã¯æè¿BASEã«å
¥ç€Ÿããç§ãã©ã®ãããªãªã³ããŒãã£ã³ã°ãçµãŠBASEã®éçºãããŒãããŒã ã«éŠŽæãã§ãã£ãã®ãã玹ä»ã§ããã°ãšæããŸããçµè«ãå
ã«èšããšBASEã®ãªã³ããŒãã£ã³ã°ãããŒã¯éåžžã«äœéšãè¯ããã¹ããŒãã£ãŒã«ããŒã ã«æº¶ã蟌ããŠããããšãã宿ããããŸããããããBASEã«å
¥ç€Ÿãããæ¹ãå
¥ç€Ÿãæ€èšãããæ¹ã®åèã«ãªãã°å¹žãã§ãã èªå·±çŽ¹ä» æ¹ããŸããŠBASEã®ç«¹æ¬ãšç³ããŸããç§ã¯ä»å¹Žã®10æ15æ¥ã«BASEã«å
¥ç€Ÿããããã³ããšã³ããšã³ãžãã¢ãšããŠåããŠããŸããæå±ã¯Owners MarketingãšããããŒã ã§ããããã·ã§ãããéããããšæãããŠããæ¹ã«BASEãéžãã§ããã ãããããªæ¹å掻åããããã·ã§ããå
¬éãŸã§ãè¿·ããªãã¹ã ãŒãºã«è¡ãããããªæ©èœéçºãè¡ã£ãŠããããŒã ã«ãªããŸãã ç§ã¯å
ã
ã¯ããã¯ãšã³ããšã³ãžãã¢ã§ãäž»ã«PHPãæžããšã³ãžãã¢ã§ãããå°ãåãŸã§ããã³ããšã³ãé åã®ç¥èã¯jQueryãšBEMçšåºŠã®ç¥èãããããŸããã§ããããè¿å¹Žã®ããã³ããšã³ãé åã®é²åããšã³ã·ã¹ãã ã®åºããã¯èå³ãæ¹ããããã®ãããããã©ã€ããŒãã§çŸåšäž»æµãšãªã£ãŠããããã³ããšã³ãéçºãäœéšããŠã¿ããããã¬ã³ãã«ãªã£ãŠããOSSãèŠããŠã¿ããããããã«ãªããŸããããããªäžãéè¯ãåè·ã§PCã¢ããªãElectronã§æ°èŠéçºãããšããæ¡ä»¶ã«é¢ããããŠããã ããããã§æ¹ããŠWebããã³ããšã³ããšããé åã®å¥¥æ·±ããšå¹
åºãã宿ããŸããããã®æ¡ä»¶ãèœã¡çããã¿ã€ãã³ã°ã§ããã³ããšã³ãã䞻軞ã«ãã£ãŠãããããšæãè»¢è·æŽ»åããããšãããçžããã£ãŠBASEã«å
¥ç€Ÿããããšã«ãªããŸããã BASEã¯æ°åã®é ããPHPç³»ã®ã«ã³ãã¡ã¬ã³ã¹ã§ãããèŠããããŠããŸããããããã¯ããã°ãåèã«ãããŠããã ããŠããã®ã§ãããç¥ã£ãŠããäŒæ¥ã§ã¯ãããŸãããBASEãžã®å
¥ç€Ÿãæ€èšããã«ããã£ãŠæ¹ããŠããããèŠè¿ããå
¥ç€Ÿã®æ±ºãæãšãªã£ãã®ã¯ä»¥äžã®èšäºãèªãã§æè¡ã®å¹
ãåºããªããæ¥åãæ¥œããããã ãšæããããã«ãªããŸãã æ¬¡äžä»£ã®ç®¡çç»é¢ãäœãããã³ããšã³ãã®åãçµã¿ BASEã®ããŒã³ãŒãã¯ã©ã®ããã«å®çŸãããŠããã®ãïŒ ç§ã®ãªã³ããŒãã£ã³ã°æ¥èš ããããã¯ç§ã®å
¥ç€Ÿåæ¥ããã®ãªã³ããŒãã£ã³ã°äœéšããæ¥èšåœ¢åŒã§ãå±ãããŸãã ãªãã以äžã®å
容ã¯ãããŸã§ç§å人ã®è©±ã«ãªããŸãã®ã§ããªã³ããŒãã£ã³ã°ãããŒã¯æå±ããããŒã ãããŒã«ã«ãã£ãŠå€å°éãããšã«ãçæãã ããã 1æ¥ç® ã³ãããèœã¡çããŠããããšããã£ãŠç©çåºç€ŸããŸããããªãã£ã¹ã«çããšããŒã ã¡ã³ããŒãšã¡ã³ã¿ãŒã®æ¹ãæè¿ããŠãããŸãããæ®æ®µã¯ãªã¢ãŒãã¯ãŒã¯ã§ãä»äºããããŠããããã§ããããã®æ¥ã¯é¡åããã®ããã«å
šå¡åºç€Ÿã§è¿ããŠããã ããããããšãŠãå¬ããã£ãã§ãã ãã®æ¥ã®ãæŒã¯ããŒã å
šå¡ã§ã²ã€ãŸã¶ããé£ã¹ã«ãã£ãã®ã§ãããããã§ããçšåºŠããŒã ã®é°å²æ°ã人ãšãªããç¥ãããšãã§ãããšæããŸããçããæ°ããã§è©±ããããæè¡ã«å¯ŸããŠæããæ¹ã°ããã ã£ãã®ã§ããã®ããŒã ãªãäžæããã£ãŠããããã ãšãã®æããæããŠãããšæããŸãã åž°ã£ãŠããŠSlackãèŠããŠã¿ããš onbording-takemoto ãã£ã³ãã«ãã§ããŠãããå
¥ç€Ÿæç¹ã§ãªã³ããŒãã£ã³ã°äžã«ãªãã§ãèãããã£ã³ãã«ãçšæãããŠããŠå®å¿æããããŸããããããããããšããæ°æã¡ãæ¹§ããŸãããã æ¥å忥ã¯èªåã®Macbookã®ã»ããã£ã³ã°ãããããæ¥åã§äœ¿çšããã¢ã«ãŠã³ãã®ç³è«ãè¡ã£ããããŠçµäºãšãªããŸããã 2æ¥ç® 2æ¥ç®ã¯äž»ã«ç°å¢æ§ç¯ãè¡ããŸãããBASEã®ããŒã«ã«éçºç°å¢ã¯Dockerã§æ§æãããŠããããŸãã»ããã¢ããäœæ¥ã®ã»ãšãã©ãã¹ã¯ãªããåãããŠããŠãããã€ãã®ã³ãã³ããå©ãã ãã§ç°å¢æ§ç¯ãå®äºããŸããéäžãå°ãã€ãŸã¥ããšããããããŸãããåºæ¬çã«ã¯ããã¥ã¡ã³ããèªãã ããSlackã§èãããããããšã§ããã«è§£æ±ºããŸãããåè·ã»ååè·ãšç°å¢æ§ç¯ã¯äžå€§äœæ¥ã ã£ãã®ã§ã ç¹å®ã®èª°ãã«èããªããšäœæ¥ãé²ããããªã ãšããç¶æ³ã«é¥ããªãã£ãããšãæ¯ãè¿ã£ãŠã¿ãŠéåžžã«è¯ãäœéšã ã£ããªãšæããŸããäœã£ãæéã§ãªããžããªã®READMEãèªãã ããã³ãŒããªãŒãã£ã³ã°ãããããŠããŸããã 3æ¥ç® ç°å¢æ§ç¯ãçµäºãããšããã§ãæåã®éçºã¿ã¹ã¯ã«åãæãããŸããBASEã§ã¯å
¥ç€ŸããŠããã§ããã ãæ©ãæåã®ãªãªãŒã¹ãè¡ããããåãçµãã§ããŸããããã¯ãªãªãŒã¹ãããŸã§äœæ¥ãéããŠBASEã®éçºãããŒãçè§£ããŠã»ãããšããæå³ããããŸããããã¯éåžžã«ããããããéçºã«å¿
èŠãªãã¡ã€ã³ç¥èã®çè§£ãšã¿ã¹ã¯èµ·ç¥šãããªãªãŒã¹ãŸã§ã®äœæ¥ãããŒãåããŠèããããšãã§ããŸãããç§ãæåã«æ¯ãããã¿ã¹ã¯ã¯ããç»é¢ã®æèšã®äžéšãä¿®æ£ãããšãããã®ã ã£ãã®ã§ãç§ã¯ãã®ã¿ã¹ã¯ã«åãçµãéã以äžã®ãããªç¹ãçè§£ã§ããããã«åªããŸããã - ã¿ã¹ã¯ã¯ã©ã®ããã«èµ·ç¥šãããã®ã - ããããè§Šãããšã«ãªãã³ãŒãã¯ã©ã®ãããªãã£ã¬ã¯ããªæ§æã§ã©ã®ãããªæžãæ¹ã«ãªã£ãŠããã - PRãäœãæã®ãã©ãŒãããã¯ã©ããªã£ãŠããã®ã - ã©ã®ã¿ã€ãã³ã°ã§èª°ã«ã¬ãã¥ãŒãåããã®ã - 瀟å
éçºç°å¢ãžã®ã¢ããããŒãæ¹æ³ãšæ¬çªãªãªãŒã¹ã®æé ã«ã€ã㊠3æ¥ç®ã¯äžèšã¿ã¹ã¯ããªãªãŒã¹ã§ããç¶æ
ãŸã§æã£ãŠãã£ãŠçµäºããŸããã 4æ¥ç® ããããæåã®ä¿®æ£ããªãªãŒã¹ããŸããBASEã®ãªãªãŒã¹äœæ¥ã¯å®å
šã« ChatOps åãããŠããŠåºæ¬Slackäžã®ã¿ã§ãªãªãŒã¹ãè¡ããããã«ãªã£ãŠããŸããä»åã¯ä¿®æ£å
容ã軜埮ã ã£ãã®ã§åäœç¢ºèªããé
ç®ãã»ãšãã©ãªããã¹ã ãŒãºã«ãªãªãŒã¹ã«è¡ãããšãã§ããŸããããã®æã¯å
¥ç€ŸããŠããã4æ¥ç®ã§æåã®ãªãªãŒã¹ãã§ããããšã«æåããŸããããããã€ãé«éã»é«é »åºŠã«è¡ãã工倫ãéæã«ãããæ°ããå
¥ã£ã人ã§ããªãªãŒã¹ãè¡ããä»çµã¿ããã£ãã®ã§ãµãŒãã¹ã®æ¹åãé«éã«åããŠããããã ãªãšæããŸããã 5æ¥ç®ä»¥é 5æ¥ç®ä»¥éã¯æã
å
¥ãæ°å
¥ç€Ÿå¡åãã®ç ä¿®ãé€ãã°ããªã³ããŒãã£ã³ã°æãã°ããšèããªã£ãæèŠããããŸãããBASEã®éçºããŒã ã®å€ãã¯ã¹ã¯ã©ã éçºãæ¡çšããŠããŠãç§ã®ããŒã ã§ãã¹ã¯ã©ã éçºãè¡ãªã£ãŠããŸããå
¥ç€Ÿãã1é±éãçµã€é ã«ã¯ã¡ã³ã¿ãŒãããŒã ã¡ã³ããŒã®ãµããŒããåããªããã§ã¯ãããŸããã¹ããªã³ãããã¯ãã°ã«ããã¿ã¹ã¯ãæ®éã«ããªãããã«ãªã£ãŠããŸãããã¹ã¯ã©ã éçºã«å ãã£ãŠãããSlackã®ãªã³ããŒãã£ã³ã°ãã£ã³ãã«ã¯ååšããŠããŸããããEMã»ã¡ã³ã¿ãŒãšæ¯é±1on1ãèšå®ãããŠããã®ã§ãçåãäžå®ãæ±ãããããããšã¯ãããŸããã§ããã ãªã³ããŒãã£ã³ã°ã§è¯ãã£ããšãã ããããã¯ç§ãäœéšãããªã³ããŒãã£ã³ã°ãããŒã§è¯ãã£ããšæããç¹ãæããŠãããŸãã 質åã»çžè«ããããé°å²æ°ããã åè¿°ã®éããBASEã§ã¯å
¥ç€ŸãããšSlackã« onbording-ããsan ãã£ã³ãã«ãåºæ¥ãŸãã åãããªããšãããçåã«æã£ãããšã¯ãã®ãªã³ããŒãã£ã³ã°ãã£ã³ãã«ã§åããšãããŒã ã¡ã³ããŒãããã§ãããšããããã芪åã«æããŠãããŸããã¡ã³ã¿ãŒã®ååšãçžãŸã£ãŠã åãããªãããšãåºãŠããŠã倧äžå€« ãšããå®å¿æããããŸããã ããã¥ã¡ã³ããæŽåãããŠãã 誰ãã«èããªããšäœæ¥ãé²ããããªãç¶æ³ããªã³ããŒãã£ã³ã°æéã«èµ·ãããšèª°ã«èããŠããã®ããããããã¹ãã¬ã¹ã«ãªããã¡ã§ããBASEã§ã¯æ¥åã§ç¥ã£ãŠããã¹ãããšã¯åºæ¬çã«ç€Ÿå
Wikiããªããžããªã®READMEã«åããããã圢ã§ãŸãšãŸã£ãŠããã®ã§ãå°ãªããšãç§ã¯ãã®äºæ
ã«é¥ããã«æžã¿ãŸãããæ®æ®µããããã¥ã¡ã³ããã¡ã³ãããŠããã人ãã¡ã«æè¬ãããããŸããã 瀟å
ã®äººãšäº€æµãæãŠãå¶åºŠããã BASEã§ã¯ ã¡ã³ã¿ãŒã©ã³ã ãšããå¶åºŠããããŸããããã¯æ°å
¥ç€Ÿå¡ã瀟å
ã®äººãšã©ã³ãããæã«ããã®è²»çšãäŒç€Ÿãè² æ
ããŠããããšããå¶åºŠã«ãªããŸãããã®å¶åºŠã䜿ã£ãŠæ®æ®µæ¥åã§é¢ããããšã®ãªã人ãšäº€æµãæã€ããšãã§ããŸããããªã¢ãŒãç°å¢äžã§ç€Ÿå
ã®ã€ãªãããåžèã«ãªãäžãããããå¶åºŠãããããšã¯ãšãŠããããããã£ãã§ãã ä»åŸããè¯ãããŠããããã« ç§ã®æå±ããOwners MarketingããŒã ã¯æ¯èŒçæè¿çºè¶³ããè¥ãããŒã ã§ãç§ã®å
¥ç€ŸåŸã«ãïŒåã»ã©ããŒã ã«ãžã§ã€ã³ãããæ¹ãããŸãããçãæéã§ãªã³ããŒãã£ã³ã°ãç«ãŠç¶ãã«çºçããã®ã§ãèºãããããã€ã³ããããã¥ã¡ã³ãã®æå³ãæ£ããäŒãã£ãŠããªãç¹ãåŸã
ã«æç¢ºã«ãªã£ãŠããŸãããããã«ã€ããŠã¯çŸåšããã¥ã¡ã³ãããªã³ããŒãã£ã³ã°ãããŒã®èŠçŽããé²ããããŠããŠã次ã«å
¥ç€Ÿãããæ¹ã«ã¯ããè¯ããªã³ããŒãã£ã³ã°ãè¡ããããã«ãªã£ãŠãããšæããŸãã çµããã« åé ã«ãæžããŸãããæé«ã®ãªã³ããŒãã£ã³ã°äœéšã§ãããå
¥ç€Ÿãã1é±éãçµããªããã¡ã«æåã®ãªãªãŒã¹ãã¹ã¯ã©ã éçºã®åå ãããŒã å€ã®äººãšã®äº€æµãšçãã ãããã®å
容ãããªããŠå
å®ããæ¥ã
ãéãããŸããã BASE㯠ãã®ããã° ã Youtube , æè¡ã«ã³ãã¡ã¬ã³ã¹çã§ç©æ¥µçã«æ¥åã§åãçµãã§ããããšãå
¬éããŠããŸããç§ãBASEã«å
¥ç€Ÿãããã£ããã«ãªã£ãã®ããããã®ã¢ãŠããããããäŒç€ŸãšããŠåãçµãã§ããããšã課é¡ã«ã€ããŠç¥ãããšãã§ããããã§ããããã®èšäºããŸããBASEæ°ã«ãªã£ãŠããã©å
¥ã£ããã©ããªæããªãã ããããšæãããæ¹ã®åèã«ãªã£ãŠããããšå¬ããã§ãããBASEã®ãµãŒãã¹ãæè¡çãªåãçµã¿ãæ°ã«ãªã£ãæ¹ã¯ããã²ä»ã®èšäºãYoutubeãèŠããŠã¿ãŠãã£ãŠãã ããã ãããŸã§èªãã§ããã ããŠããããšãããããŸããïŒ ææ¥ã¯æŸéªããã®ãReal World Full Cycle Developersããš@osushi_maguro ããã®ããŠãŒã¶ãŒãªãµãŒããæŽ»ãããã¡ãŒã«ããŒã±ãã£ã³ã°ãã®2æ¬ç«ãŠã§ãïŒã楜ãã¿ã«ïŒ
ã¯ããã« æ¬èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®6æ¥ç®ã®èšäºã§ãã ã¯ãããŸããŠïŒBASEæ ªåŒäŒç€Ÿã§ããããã·ã§ããäœæãµãŒãã¹ãBASEãã®ãããã¯ãããŒã ã®ãããŒãžã£ãŒãããŠãã @yusaku ãšç³ããŸããèšäºãæžãã«åœãã£ãŠãèªåãããŸãŸã§ãã£ã1on1ãæ¯ãè¿ãã€ã€ãæ°ããŠã¿ãŸããã  ææã«ãã£ãŠãã¡ããå€åã¯ããã®ã§ãã£ãã詊ç®ã§ã¯ãããŸããã瀟å
ã§ã¯èªåã®çµç¹ã§ã®ã¡ã³ããŒãäžé·ãšé±1åã®15åã30åã®1on1ãæ°ããå
¥ç€ŸããŠé ããæ¹ããããªã³ããŒãã£ã³ã°æã§ã¯æ¯æ¥15åã®1on1ãè¡ã£ãŠããã®ã§ãé±5~15åããã1on1ããŠããŸããããŸããã©ã€ããŒãã§ã¯ãããã³ãŒããšããŠããŒãœãã«ã³ãŒãã³ã°ãè¡ã£ãŠããã2022幎ã§ã¯100åã»ã©1on1ãè¡ã£ãŠããã®ã§ã åãããŠ500å以äžã¯1on1ãããŠããŸããã ãã®çµæããã£ã1on1ã§å€§äºãªããš ãèšäºã«ããŠãããããšæããŸããèªåãªãã«å€§äºãªããšãèšèªåããããšã§ãæ®æ®µ1on1ãããŠããæ¹ã®å©ãã«å°ãã§ããªãã°å¹žãã§ãã 1on1ã£ãŠãªãã ãã æè¿ã§ã¯1on1ã«é¢ããæ¬ïŒ yahooã®1on1 ãã ã·ãªã³ã³ãã¬ãŒæµ1on1 ïŒãããç®ã«ããããã«ãªããŸãããããããã1on1ãšã¯ ãäžåžãšéšäžã宿çã«è¡ããâã¢ãžã§ã³ãã®ãªãâ1察1ã®ããŒãã£ã³ã°ã ã®ããšã§ãã äžè¬çã«ã¯é±ã«ïŒåãå°ãªããšãæã«ïŒåã®é »åºŠã§è¡ãããããšããšã·ãªã³ã³ãã¬ãŒã§çãŸãããããžã¡ã³ãæ¹æ³ã§ãããåœå
ã§ãå€ãåãå
¥ããããŠããŸãã BASEã§ãããã¡ããè¡ãããŠãããæ1å30å以äžè¡ãããšãæšå¥šããŠããŸãã 1on1ã£ãŠãªãã®ããã«ããã®ïŒ ã§ã¯ã1on1ã¯ãªãã®ããã«è¡ãããã®ã§ããããïŒ é²æå ±åïŒ ãâããããããŒã å
šäœã§ãã£ãã»ããå¹çãé«ãã¯ãã§ãã ç®æšèšå®ïŒ ãâãããããã§ã«æ±ºãŸã£ãç®æšã§ããã°ãããã¥ã¡ã³ãã§ã®å
±æã§ããã¯ãã§ãããŸãç®æšã¯é±ããšã«å€ãããã®ã§ã¯ãªãã§ãããã éè«ïŒ ãâããããéè«ã§ããã°ãã©ã³ããç«ã¡è©±ãæèŠªäŒã§ãããã®ã§ã¯ãªãã§ããããã 1on1ã¯ãã¡ã³ããŒã®ããã®æéã ã§ãã å人çã«ããã«è£è¶³ãããšãæ°ã¥ããçãŸãè¡åãçµéšãåŠã³ãä¿é²ãããããã®æéã ãšæããŠããŸããé±1ã§30åã®æéã¯ïŒã¶æã®å²åã«ããããã£ãã®1ã2%ã®æéã§ãããªãã®ã§ã1on1以å€ã®æéã«ããããè¡åãçµéšã«ã©ãã ã圱é¿ã§ãããã倧äºã§ãã 話ãèããŠããªãç¶æ
ãæãå±éº è¡åãçµéšãä¿é²ããã¡ã³ããŒã®ããã®æéã§ãã1on1ã«ãé¢ããããäžåžã話ãèããŠããªã1on1ããæãå±éºãªç¶æ
ã§ãããªã³ã©ã€ã³ã ãããšãã£ãŠãSlackãªã©ã®ã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãèŠãªããçžæã®è©±ãèããŠããããšã¯ãããŸãããïŒ è©±ãèããªããšãä¿¡é Œé¢ä¿ãæãªããå¿ççå®å
šæ§ãæ
ä¿ã§ãããäžèšã®ïŒã€ã®å±éºãªç¶æ
ã«é¥ããŸãã ãªã¹ã¯ã«æ°ãä»ããªã âå¿ã®å£°ãã¡ãã£ãšäžå®ãªããšããããã©èšãåºãã¥ãããªããŸãä»åºŠã§ãã£ããã çµç¹ãšå人ã®Willãã©ãã©ããºã¬ãŠãã âå¿ã®å£°ããªããçŽåŸèšã£ãŠãªããã©ãçžè«ããŠãã ãã ãã話ãã®ã¯æ§ãããã æ°ããããšãçãŸããªã âå¿ã®å£°ãããããããšãæãã€ãããã©ãææ¡ããŠãè©°ãããããã ãã倱æãããæãããããçžè«ããã®ã¯èŸããŠããããã ãã®ãããªç¶æ
ã«ãªããªãããã«ããããããã£ãŠã¿ããšè¯ããšãããã€ã³ããèããŠã¿ãŸããã çžæã®è©±ãã¡ãããšâèãâããšãããã©ã€ããŠã¿ãã 倧äºãªããšã¯ãçžæã®è©±ãã¡ãããšâèãâããšã§ãããã®ããã«ã¯ã â èšè以å€ã«ãéäžããŠèã â¡åå¿ããã â¢ããŒã¯ãŒãã«æ°ã¥ã ãšããïŒã€ã®ãã€ã³ãããããŸãããã®ãã€ã³ããããã©ã€ããŠãããããšè¯ããšæããŸãã â èšè以å€ã«ãéäžããŠèã 人ã®è©±ãèããšããããšã«å¯ŸããŠãå®ã¯ïŒæ®µéã®ã¬ãã«ãååšããŸãã ã¬ãã«ïŒ çžæã®è©±ãèãïŒèããããªããïŒãªãããèªåã®ããšãªã©çžæä»¥å€ã®ããšãèããŠããç¶æ
ã§ããäŸãã°ãã1on1äžã«ãPCãéããªããSlackãªã©ã远ããªããèããã®ã¯ããŸãã«ã¬ãã«1ã®ç¶æ
ãšèšããŸãã ã¬ãã«ïŒ ã¡ãããšçžæã®èšèãçè§£ããã¹ã話ãèããŠããç¶æ
ã§ãããã®ã¬ãã«ïŒãã話ãèããŠããç¶æ
ãšèšããŸããèªåäž»äœã§ã¯ãªãçžæãäž»äœã§ããããšãéèŠã§ãã ã¬ãã«ïŒ çžæã®èšèã ãã§ãªãæ
床ãé°å²æ°ãå«ããŠèã ããšãã§ããŠããç¶æ
ã§ãã äŸãã°ã倧äžå€«ããšããèšè1ã€ãšã£ãŠãã倧äžå€«ã§ãâŠãã倧äžå€«ã§ãïŒïŒïŒïŒïŒããšãã£ãè©±ãæ¹ã衚æ
ã§ãã©ãããæ°æã¡ã§è©±ããŠãããã¯éãã¯ãã§ããïŒåã§é°å²æ°ãäŒããã®ãé£ããã§ããïŒ ãã®ã¬ãã«ïŒã®ç¶æ
ãæèããŠã話ãèãããšãéèŠã§ãã â¡åå¿ãã 話ãèããšãã«å¿ãããŠã»ããæ¬¡ã®ãã€ã³ãã¯ãèããŠããéã« ãçžæ§ãããªãŠã è¿ããããã£ãŒãããã¯ã ãšãã£ãã話ãèããŠããåå¿ãè¡ããšããããšã§ãã äŸ çžæ§ ïŒããªãããããªãã»ã©ããããããããšãã£ãåå¿ ãªãŠã è¿ã ïŒçžæãè¡ã£ãããšããã®ãŸãŸç¹°ãè¿ãåå¿ã ex)ãã¡ãã£ãšæè¿å¿ãããã§ãâŠãâãå¿ãããã ããâããããªãã§ããâ¯â¯ã«è¿œãããŠãŠãã ãã£ãŒããã㯠ïŒçžæã®æ
床ãé°å²æ°ã«ã€ããŠèšåãããšããåå¿ãã仿¥ã¯ãªããæ¥œãããã ãïŒãããªã«ãçŠã£ãŠããããã«èŠãããã 話ã«å¯ŸããŠåå¿ããããšã¯ã話ãèããŠãããŠãããšãã çžæãžã®å®å¿æãçã¿ãŸã ãåæ¹åã«äŒè©±ããŠããäžã§éèŠãªããšãªã®ã§ãæåã¯ãããšããããããšæã£ãŠãããŸãã¯ãã£ãŠã¿ãããšããªã¹ã¹ã¡ããŸãã â¢ããŒã¯ãŒãã«æ°ã¥ã 話ãèããŠãããšããã®åèªã£ãŠã©ãããæå³ãæå³ã§äœ¿ã£ãŠãã®ããªïŒãšããããšãå¿
ãã§ãŠããŸããç¥ã£ãŠããæ
å ±ãããã¯ã°ã©ãŠã³ããç°ãªãã®ã§ã 人ã«ãã£ãŠæå³ãç°ãªã ããšã¯å€ãã§ãã ããããèªèããããŠããããšãããã®ã§ããããã£ãåèªãããŒã¯ãŒããšããŠæŸã£ãŠã¿ãŠããã¡ãªã¿ã«ãâ¯â¯ã£ãŠã©ãããæå³ããã§äœ¿ã£ãŠãïŒããªã©ãšèããŸãããããããã èªèãããåãããŠè¡ãããšãå§ãŸã ã®ã§ããããã£ãããŒã¯ãŒããæŸã£ãŠããããšããå§¿å¢ã§è©±ãèããŸãããã 話ãèãããšã«ããå€å å®éã«èªåãçµéšãããšããœãŒããäžäŸãšããŠã·ã§ã¢ããŸããïŒå人ã®è©±ãªã®ã§ããªãæœè±¡çã§ãããäºæ¿ãã ãããïŒ --- ãã®äººã¯ããã€ããã€ããªã«ãã«è¿œãããŠããŠãå¿ããããããå£ã«ããŠããŸããã1on1ãã·ã³ãã«ã«çµããããšãå€ãã1on1ãé²æå ±åã®æéã«ãªã£ãŠããŸããã ãã æçŽã«è©±ãèãç¶ããçµæãå°ããã€ããªãå¿ããã®ãããšããèªåã®èª²é¡ã«å¯ŸããŠè©±ããŠãããããã«ãªããŸããã ãããã話ãèããŠã¿ããšãæåŸ
ã«çããããã«ãèªåããªãã§ããããªããã°ãããªãããšæã£ãŠããããšã«æ°ã¥ãããã®çµæãåšå²ã«é ŒããŠããªãããèªåã§æ±ã蟌ã¿ãããŠãã³ã¯ãããŠããç¶æ
ã«ãªã£ãŠããããšãããããŸããã ããããã¯ãèªåãå®ç§ã§ããå¿
èŠã¯ãªãããšã匷ãæèããŠãåšå²ã«é ŒãããŒãã«ãäžããããã«ç©æ¥µçã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããªã©ãåšãã®æ
å ±ãåãã«è¡ãè¡åãå€ãããããã«ãªã£ãŠãããŸããã --- 1on1ã§è©±ãèãããšã§æ°ã¥ããçãŸãããå€åãçãŸãããšããœãŒããšããŠåèã«ãªãã°å¹žãã§ãã ãŸãšã ä»åã¯è©±ãèããŠããªãç¶æ
ã«å¯ŸããŠããŸããã©ã€ããŠæ¬²ããïŒã€ã®ãã€ã³ãã«ã€ããŠèšäºã«ããŠã¿ãŸããã 人ã®è©±ãèãããšã¯ã çžæãžã®èå³ãæã€ããš æããŸããçžæã«èå³ãããã°ã話ã¯èªç¶ã«èããŸãããçžæã«æ°ã¥ãããšãå¢ããŸãããã²çžæãžã®èå³ã倧äºã«ããªãããçžæã®è©±ãèãå§¿å¢ã«åãåã£ãŠã¿ãããšããåããŠã¿ãŠãã ããã ææ¥ã¯ satoshi_takemoto ã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ããã
ã¯ããã« ã¯ãããŸããŠããšã³ãžãã¢ã®è¿è€( @kon_engineer )ãšç³ããŸããæ¬èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®6æ¥ç®ã®èšäºã§ãã æ¬èšäºã§ã¯ãç§ãèŠãçµéšããåŠãã ãã¹ã¯ã©ã éçºã§æªæ¥ã®èœãšã穎ãåé¿ããèãæ¹ã«ã€ããŠæžããããšæããŸããå
·äœçã«ã¯ããŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
åºŠãæ±ºãããšãããŠãŒã¶ãŒã«ãšã£ãŠã©ãã ã䟡å€ãæäŸããããšããèŠç¹ã ãã§ãªãããããžã§ã¯ããšããŠäœããªã¹ã¯ã§ããããåé¿ããããã«äœãããã£ãŠããã®ãããã£ãããã©ã³ã¹ãèããã¹ãã ã£ãããšããçµéšè«ãèšèŒããŸãããŸããæ¬èšäºã§äºäŸãšããŠèšèŒããã¹ã¯ã©ã éçºã¯ã1ã¹ããªã³ãããšã«ãªãªãŒã¹ãã圢ã§ã¯ãªããã¹ããªã³ããããçšåºŠåããŠã倧ããªæ©èœãåºæ¥äžãã£ããéœåºŠãªãªãŒã¹ããŠããã¹ã¯ã©ã éçºã®åœ¢åŒã«ãªããŸãã ãŠãŒã¶ãŒã¹ããŒãªãŒã«ã€ã㊠ãŠãŒã¶ãŒã¹ããŒãªãŒã¯ãã·ã¹ãã ããŠãŒã¶ãŒã«å±ãã䟡å€ã衚çŸãããã®ã§ããäŸãã°ãã·ã§ãããªãŒããŒã¯ã管çç»é¢ã§ä»»æã®é
éå¯èœæ¥æãæå®ããŠãã·ã§ããã«åæ ããããšãã§ããããšãã£ã圢ã§ãç»å Žäººç©ãäœãã§ããã®ãæç¢ºã«ãããã®ã§ãããã¹ã¯ã©ã ããŒã ãã¹ããªã³ãã§éæããã¹ãéèŠãªãã®ãšæããŸãã ãŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床ã«ã€ã㊠ãŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
åºŠãæ±ºããããã«ã¯ãããã€ãã®èãæ¹ããããšæããŸããç§ãã¡ã®ããŒã ã§ã¯ããŠãŒã¶ãŒã«ãšã£ãŠæãéèŠã§ããã®ã¹ããŒãªãŒããªããã°åŸã®ã¹ããŒãªãŒã¯æãç«ããªããã®ã®åªå
床ãé«ãããŠããŸããããã®å€æåºæºèªäœã¯ééã£ãŠããªãã£ããšæããŸãããã ãåªå
床ãšããŠã¯åŸåã«åãçµãã¹ããŒãªãŒã§ãäžåºŠãããŒã ã¡ã³ããŒãè§Šã£ãããšã®ãªãé åã®éçºããããŸããããã®æã¯ãåªå
床ãé«ããªãããããã»ã©é£ããæ©èœã§ããªãããäœãšããªãã ãããšæããããŸã泚èŠããŠããŸããã§ãããããã¯è¯ããªãã£ãã§ãã ãªãªãŒã¹æåã®ã¹ããªã³ãã§åããŠå€§å€ãã«æ°ã¥ã ãªãªãŒã¹ãè¿ããªã£ãã¹ããªã³ãã§ãä»ãŸã§çµéšããªãBASEã®é åã®éçºãè¡ããŸããããã®çµæãä¿®æ£éã¯å°ãªãã£ããšããŠãããã®é åãæ·±ããŸã§çè§£ããŠããªããã°åœ±é¿ç¯å²ãèªãããéçºãèªåéã«ãšã£ãŠé£ããããšããã®ã¿ã€ãã³ã°ã§åãããŸãããçµå±ãåœåã®èŠç©ãããå以äžã®æéãããã£ãŠããŸããããŒã ã¡ã³ããŒã«å©ããããŠãªããšããªãªãŒã¹ã«éã«åã£ãããšããã®ãªã®ãªã®éçºã«ãªã£ãŠããŸããŸãããéçºãé²ããŠãããšå®ã¯å€§å€ã ã£ããšããã®ã¯ããããã§ãããå
ã
ç¥èŠããªãã®ã¯åãã£ãŠããã®ã§ãããå°ãããããããã£ããšæããŸãã ã©ãããã°ããã£ãã®ã æžå¿µããããŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床ã¯äžãã ä»åã®äºäŸã§ã¯ãæ©èœãšããŠã®åªå
床ãé«ããªãã¹ããŒãªãŒã§ãã£ãããã詳ãããªãé åã®éçºãåŸãã«åããŠããŸããŸããããããããããžã§ã¯ããšããŠäºåã«äžç¢ºããªéšåãäžå®ãªéšåãæ©ãã«æœ°ããŠå®å®ããéçºãããããšã¯ããŠãŒã¶ãŒã«ãšã£ãŠåªå
床ã®é«ãæ©èœãéçºããããšããããæãšããŠéèŠã§ãããšèããŸãããªããªããæžå¿µãåŸåãã«ããããšã§ããããžã§ã¯ãã®å€±æç¢ºçãäžãã£ãããå
šäœã®å·¥æ°ã䌞ã³ãŠããŸãã®ã§ããã°ãé·ãç®ã§èŠããšãŠãŒã¶ãŒã«ãšã£ãŠãäžå©çã§ããããã§ãããã¡ããããã åãããªããããšããçç±ã§ãéé²ã«åªå
床ãäžããããšã¯ãããããŸãããããããžã§ã¯ãã®æžå¿µãææãããŠæåçãé«ãŸãã®ã§ããã°ãä»ãã£ãæ¹ãè¯ããšæã£ããã®ã¯ãåªå
床ãäžããæ€èšãããæ¹ãè¯ããšæããŸãã æžå¿µããããŠãŒã¶ãŒã¹ããŒãªãŒãšã¯ã©ããããã®ãã«ã€ããŠãããå°ãè£è¶³ããããšæããŸããç§ãèãããã®ã¯ã以äžã®å³ã§ãŠãŒã¶ãŒã¹ããŒãªãŒBã«ããããã®ã§ãã ãŠãŒã¶ãŒã¹ããŒãªãŒã®éèŠåºŠã¯Cã®æ¹ãäžã§ãããããŠãŒã¶ãŒã¹ããŒãªãŒBã¯äŸãã°äœ¿ã£ãããšããªãæè¡ã䜿çšããå¿
èŠããããšããå€éšãµãŒãã¹ãšé£æºããªããã°ãªããªããŠããã®èª¿æ»ãå¿
èŠã§ãããšãã£ãããšã§ãèããªããã°ãããªã課é¡ãå€ãååšãããããªç¶æ
ã§ãããã®å Žåã¯ããŠãŒã¶ãŒã¹ããŒãªãŒCãããå
ãããŠBããã£ãæ¹ãè¯ãå ŽåããããšèããŸãã 調æ»ã¿ã¹ã¯ãåã ãŠãŒã¶ãŒã«ãšã£ãŠéèŠãªã¹ããŒãªãŒããå±ãããããããæè¡çã«æžå¿µãããã¹ããŒãªãŒãªã©ã¯äºåã«åããŠããããå Žåã«ãåœè©²ã¹ããŒãªãŒã®èª¿æ»ã¿ã¹ã¯ã ãåã£ãŠãå
ã«åé¡ããªãã確èªããããšãæå¹ã ãšæããŸããäžåºŠãããŒã ã¡ã³ããŒãéçºããããšã®ãªãé åãæè¡ã§ãã£ãããæè¡çã«å®çŸã§ããã®ãåãããªã課é¡ãããå ŽåãåŸã
äœãããåé¡ãèµ·ããå ŽåããããŸããç¹ã«ææ»ããçºçããŠããã§ã«éçºãããã¯ãªãªãŒã¹ããã¹ããŒãªãŒã«åœ±é¿ããäºæ
ã¯é¿ãããã®ã§ãä»åãçµãã§ããåªå
床ã®é«ãã¹ããŒãªãŒãå®å¿ããŠé²ããããã«ãäºå調æ»ããŠæžå¿µãææããŠãããŸãã ãŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床ã¯åžžã«èŠçŽã ãŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床ã¯ãæåã«æ±ºãããåãããªããã®ã§ã¯ãªããç¶æ³ã«ãã£ãŠæè»ã«å€æŽãã¹ããã®ã ãšæããŸããä»åã®äºäŸã§ã¯ãäžåºŠæ±ºããåªå
床ã§ãã®ãŸãŸéçºãé²ããŠããŸã£ãŠããŸããããŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床ãèŠçŽãæ©äŒãèšããŠããã°ãããããã°ãã®ãŠãŒã¶ãŒã¹ããŒãªãŒã¯æžå¿µã¯ãªãããªã©ãæ¹ããŠè°è«ããå Žãçšæãããã®ã§ãããå°ãæ©ãã«éçºããäžã§æžå¿µãããããšã«æ°ã¥ãããããããŸããã ãããã« æ¬èšäºã§ã¯ãèªåã®çµéšãéããŠãã¹ã¯ã©ã éçºã«ããããŠãŒã¶ãŒã¹ããŒãªãŒã®åªå
床決ãã«ã€ããŠèšèŒããããŸãããèªãã§ããã ããæ¹ã®å©ãã«å°ãã§ããªãã°å¹žãã§ãã ææ¥ã¯satoshi_takemotoãããštoshããã®èšäºãå
¬éäºå®ã§ãããã²ã芧ãã ããã
ãã®èšäºã¯BASEã¢ããã³ãã«ã¬ã³ããŒã®5æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ïŒBASEã®CRMïŒããŒã ã§ããã¯ãšã³ãéçºãæ
åœããŠãã ãªãªã( @toshi_oliver )ã§ãã2022幎11æã«å
¥ç€Ÿããã®ã§ãä»åãåã®ããã°ãšãªããŸãã ã¯ããã« åæ ç°å¢æ§ç¯ ããã〠ãããã« ã¯ããã« devblog.thebase.in ããŠãä»åã¯AWSã®ãµãŒãã¬ã¹ãµãŒãã¹ã代衚ãããšèšã£ãŠãéèšã§ã¯ãªããAWS LambdaïŒä»¥äžãLambdaïŒã«é¢ããèšäºãæçš¿ããŸãã BASEã®ããã¯ãšã³ãã®å€§éšåã¯PHPã§éçºãããŠãããã·ã¹ãã ã®äžéšã«Lambdaã䜿çšããŠããã®ã§ãããLambdaã®ã©ã³ã¿ã€ã ã§ãµããŒããããŠããèšèªã¯ä»¥äžãšãªã£ãŠãããŸãã Node.js Python Ruby Java Go .NET Core ã芧ã®éããPHPã¯ãµããŒããããŠãããŸããã ã§ã¯ãPHPã®äœ¿çšã¯æå¿µããªããã°ãªããªãã®ããšãããšããã§ã¯ãªããã«ã¹ã¿ã ã©ã³ã¿ã€ã ã䜿çšããããšã§PHPã®äœ¿çšãå¯èœãšãªããŸãã ãããã å
¬åŒããã¥ã¡ã³ã ãèŠããšãã©ã³ã¿ã€ã çšã®bootstrapãã¡ã€ã«ãã·ã§ã«ãã¡ã€ã«ãçšæãããããzipåãããã«Lambdaã¬ã€ã€ãŒåããå¿
èŠããããŸãã Lambdaã¯ããã°ã©ã éçºã«éäžããããã®ãµãŒãã¹ã§ããã«ãé¢ããããPHPãéžæããããšã§æéãå¢ããŠããŸãã®ã¯æ¬æ«è»¢åã§ãããŸãã ãŸãã å
¬åŒããã° ã«ããã³ã³ããã€ã¡ãŒãžã䜿çšããææ®µããããŸãããDockerfileãšBootstrapãã¡ã€ã«ã®ç®¡çãå¿
èŠãšãªããããããæéãå¢ããŸãã ããã§ãæ¬èšäºã§ã¯Lambdaã«ãŠPHPã®ã«ã¹ã¿ã ã©ã³ã¿ã€ã ç°å¢ãç°¡åã«æ§ç¯ã§ããã bref ã玹ä»ããŸãã åæ anyenv(1.1.5) phpenv(v0.9.0-rc.1) PHP(8.1.0) AWS CLI(2.9.1) SAM CLI(1.65.0) bref(v1.7) ç°å¢æ§ç¯ 空ã®ãã£ã¬ã¯ããªäžã§Composerã䜿ã£ãŠbrefãã€ã³ã¹ããŒã«ããŸãã $ composer require bref/bref ãããžã§ã¯ãã®åæåãè¡ããŸãã $ vendor/bin/bref init 以äžã®ã¡ãã»ãŒãžãåºåãããŸããbrefã§ã¯ãWebã¢ããªã±ãŒã·ã§ã³çšãŸãã¯ã€ãã³ãããªãã³é¢æ°çšã®Lambdaã®ã©ã¡ãããæ§ç¯ãããéžæã§ããã®ã§ãä»å㯠1 ãéžæããŸãã What kind of lambda do you want to create? ( you will be able to add more functions later by editing `serverless.yml` ) [ Web application ] : [ 0 ] Web application [ 1 ] Event-driven function ãã£ã¬ã¯ããªé
äžã«ä»¥äžã®ãã¡ã€ã«ãçæãããŸããã âââ sserverless.yml âââ vendor â âââ async-aws â âââ ... âââ composer.json âââ composer.lock âââ index.php ããã©ã«ãã§ serverless.yml ãçæãããŸããããã¯ãµãŒãã¬ã¹ã®IacããŒã«ã§ãã Serverless Framework (以äžãsls)ã§å¿
èŠãšãªããã³ãã¬ãŒããã¡ã€ã«ã§ããä»åã¯IacããŒã«ã«AWS SAMïŒä»¥äžãSAMïŒã䜿çšããã®ã§ãserverless.ymlãåé€ãSAMçšã®templete.yamlãäœæããŸã template.yamlã®Layersãã©ã¡ãŒã¿ã«ã brefå
¬åŒããã¥ã¡ã³ã ã«ç޹ä»ãããŠããLambda Layerã®ææ°ARNãæå®ããŸããä»å㯠arn:aws:lambda:ap-northeast-1:209497400698:layer:php-81:34 ãæå®ããŸããæ³šæããŠã»ããã®ããWebã¢ããªã±ãŒã·ã§ã³çšãšã€ãã³ãããªãã³çšã§å¯Ÿè±¡ã®ARNãç°ãªã£ãŠãããWebã¢ããªã±ãŒã·ã§ã³çšãéžæããå Žå㯠php-81-fpm:34 çšã®ARNãéžæããå¿
èŠããããŸã Runtimeã« provided.al2 ãæå®ããŠãããŸãããããã¯AWS ãæäŸãããããªãã¯ã® ECR ã«é
åãããŠãã provided:al2 ã®ã€ã¡ãŒãžãããŒã¹ã€ã¡ãŒãžãšããŠæå®ããŠããŸã template.yaml AWSTemplateFormatVersion : '2010-09-09' Transform : AWS::Serverless-2016-10-31 Description : Sample SAM Template for handson-bref Globals : Function : Timeout : 3 Resources : HelloWorldFunction : Type : AWS::Serverless::Function Properties : FunctionName : hello-world-function CodeUri : . Runtime : provided.al2 Handler : index.php MemorySize : 1024 Timeout : 30 Layers : - arn:aws:lambda:ap-northeast-1:209497400698:layer:php-81:34 index.php <?php declare ( strict_types = 1 ) ; require __DIR__ . '/vendor/autoload.php' ; return function ( $ event ) { return 'Hello ' . ( $ event [ 'name' ] ?? 'world' ) ; } ; ããã〠BASEã§ã¯ãµãŒãã¬ã¹ã®Iac管çãSAMã§è¡ãããšãå€ãã®ã§ãSAMã䜿çšãããããã€ã宿œããŸãã æ¬æ¥ãªã sam build ã䜿çšããŠãã«ããè¡ãããã®ã§ãããã«ã¹ã¿ã ã©ã³ã¿ã€ã ãèšå®ããŠããå Žåã¯makefileãèªèº«ã§çšæããå¿
èŠãããæéãããã£ãŠããŸãã®ã§ãLambdaããã±ãŒãžçšã®S3ãã±ãããçšæããŸã $ aws s3 mb s3://furukawa-bref-test --profile {ä»»æ} SAM CLIã䜿çšããŠããã±ãŒãžã³ã°ãè¡ããŸãã $ sam package \ --template-file template.yaml \ --output-template-file bref-output.yaml \ --s3-bucket furukawa-bref-test \ --profile { ä»»æ } SAM CLIã䜿çšããŠãããã€ãè¡ããŸãã $ sam deploy --template-file bref-output.yaml \ --stack-name furukawa-bref-test --profile { ä»»æ } --capabilities CAPABILITY_IAM ãããã€ãå®äºããã®ã§ãLambdaã³ã³ãœãŒã«äžã§è©Šãã«ãã¹ããè¡ããŸãã åé¡ãªãLambda颿°ãå®è¡ã§ããŸããã ãããã« brefã䜿çšããããšã§ãDockerfileãšBootstrapã䜿çšããã«ãLambdaã©ã³ã¿ã€ã ãPHPã«èšå®ããããšãã§ããŸããããã ããbrefã䜿çšããéã«ä»¥äžã®ç¹ã«æ³šæãå¿
èŠã§ãã brefã§çšæãããŠããLambda Layerã䜿çšãããšãsam buildã䜿çšãããããã€ãã§ããªã bref(v1.7)ã§ã¯arm64ã«å¯Ÿå¿ããŠããªã GitHub Issue ã«ãããšãβçã®bref(v2.0)ã§ã¯arm64ã«å¯Ÿå¿ãããããªã®ã§ããããã°ããæéãå¿
èŠ Lambda Layerã®ARNã«ã${bref:layer.php-81}ãæå®ããããšã§PHP8.1ã®ææ°ã®ãã€ããŒããŒãžã§ã³ãååŸããŠããããã slsã®ã¿ã®å¯Ÿå¿ 次åã¯ãbrefã䜿çšããŠSlackbotãäœã£ãŠã¿ãããšæããŸãã ææ¥ã¯ãkondo.hirotakaãããyusakuããã®èšäºã§ãããæ¥œãã¿ã«ïŒïŒ
Vue 2 ã§ã³ã³ããŒãã³ããã¹ããæžãããã« ããã«ã¡ã¯ãããã°ã©ãã³ã°ããããã³ãïŒ @Panda_Program ïŒã§ããæ¬èšäºã¯ BASE ã¢ããã³ãã«ã¬ã³ã㌠2022 ã®4æ¥ç®ã®èšäºã§ãã æ¬èšäºã§ã¯ Vue 2 + TypeScript ç°å¢ã« Testing Library ãå°å
¥ããæ¹æ³ãã玹ä»ããŸãããªããTesting Library ã®äœ¿ãæ¹ã«ã€ããŠã¯æ¬èšäºã§ã¯è§ŠããŠããŸãããåœè©²ããŒã«ã®å
·äœçãªå©ç𿹿³ãç¥ãããæ¹ã¯ å
¬åŒããã¥ã¡ã³ã ãã芧ãã ããã Testing Library ãšã¯äœã Testing Library 㯠Kent C. Dodds æ°ãäœæããã³ã³ããŒãã³ããã¹ãçšã®ãã¬ãŒã ã¯ãŒã¯ã§ãã test-utils ãªã©ä»ã®ãã¹ãçšãã¬ãŒã ã¯ãŒã¯ãšç°ãªããã³ã³ããŒãã³ãã®å
éšå®è£
ãæèããå¿
èŠããªãããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã䜿çšãã芳ç¹ãããã¹ããèšè¿°ã§ããç¹ã«ç¹åŸŽããããŸãã 以äžã§ test-utils ãš Testing Library ã®å
¬åŒããã¥ã¡ã³ããããã¹ãèšè¿°äŸãããã¯ã¢ããããŠèŠãŸããã以äžã¯å®å
šã«åçã®ãã¹ãã§ã¯ãªãã§ãããæžãå³ãèšèšææ³ãç°ãªãæ§åããã¹ãã³ãŒãããèŠãŠåããŸãã vue test utils ã®ãã¹ãå®è£
äŸ import { shallowMount } from '@vue/test-utils' import HelloWorld from '../HelloWorld.vue' describe ( 'HelloWorld.vue' , () => { test ( 'renders props.msg when passed' , () => { const msg = 'new message' const wrapper = shallowMount ( HelloWorld , { propsData: { msg } } ) expect ( wrapper.text ()) .toMatch ( msg ) } ) } ) Testing Library ã®ãã¹ãå®è£
äŸ import { render , fireEvent } from '@testing-library/vue' import Component from './Component.vue' test ( 'increments value on click' , async () => { const { getByText } = render ( Component ) getByText ( 'Times clicked: 0' ) const button = getByText ( 'increment' ) await fireEvent.click ( button ) await fireEvent.click ( button ) getByText ( 'Times clicked: 2' ) } ) Vue ã§ã³ã³ããŒãã³ããã¹ããèšè¿°ããã®ã§ããã°ãå°ãåãŸã§ã¯ test-utils ãšããããŒã«ã䜿ãã®ãäžè¬çã§ããã ããããVue 3 ã® å
¬åŒããã¥ã¡ã³ãã Testing Library ãæšå¥šããŠããããš ã2022幎çŸåšã§ã¯ React ã§ãã¹ããæžãã«ããã Testing Library ããŸãéžã°ããããšã Storybook ã䜿ã£ãã€ã³ã¿ã©ã¯ã·ã§ã³ã®ãã¹ã ã Cypress ã䜿ã£ãE2Eãã¹ãã®èšè¿°ã« Testing Library ã䜿ããããš ãããããã³ããšã³ãã®ãã¹ãå®è£
æ¹æ³ã®äž»æµãåŠã¹ãã®ã¿ãªãããã³ã³ããŒãã³ããã¹ã以å€ã«ãå¿çšã§ããç¥èãåŸããããšèããŠãã¡ããæ¡çšããŸããã Testing Library 㯠Vue åãã® Vue Testing Library ãçšæããŠããããã㯠test-utils ãèãã©ããã㊠Testing Library æ¹åŒã§ãã¹ãã®èšè¿°ãå¯èœã«ãããã®ã§ããVue Testing Library 㯠Vue 3 åãã®ã¿ãªãããææ°ã§ã¯ãªããã®ã® Vue 2 ã«ã察å¿ããããŒãžã§ã³ãååšããŸãã ãšããããæ¬¡ã§èª¬æããããã« Vue Testing Library ãã€ã³ã¹ããŒã«ããã ãã§ã¯åŒç€Ÿã® Vue 2 ç°å¢ã§ Testing Library ã¯åäœããŸããã§ãããããã§ã以äžã§ã¯ Vue 2 ç°å¢ã§ãã¹ããå®è¡å¯èœã«ããããã«å®æœãã工倫ã玹ä»ããŸãã Testing Library ã Vue 2 ã«å°å
¥ãã Testing Library Vue ã䜿ããªãã£ãçç± Testing Library Vue ã䜿ããªãã£ãçç±ãç°¡åã«èšããŸãã Testing Library ã®å
¬åŒããã¥ã¡ã³ãã«ãããšãVue 2 ã§ã¯ @testing-library/vue@5 ã䜿ãããšãæ±ããããŠããŸãã2022幎12ææç¹ã§ @testing-library/vue v5 ã®ææ°ããŒãžã§ã³ã¯ v5.8.3ïŒä»¥äžã5ç³»ãšåŒã¶ïŒ ã§ãã ãã® Vue 2 察å¿ã®5ç³»ã§ã¯ã©ã€ãã©ãªåŽã§ Vuex ã«å¯ŸããäŸåãæç€ºçã«ååšããŠããããããåŒç€Ÿã®ç°å¢ã§5ç³»ã®åäœããªãåå ã§ããã render.js å
ã®ä»¥äžã®ã³ãŒã store ãå¿
ã Vuex ã«éå®ããã ããããã¹ããå®è¡ãããš Vuex é¢é£ã®ãšã©ãŒãçºçããã®ã§ãã // src/render.js export function render ( ... ) { /// ...çç¥ if ( store ) { const Vuex = require ( 'vuex' ) localVue.use ( Vuex ) vuexStore = store instanceof Vuex.Store ? store : new Vuex.Store ( store ) } /// ...çç¥ } BASE ã§ã¯ãã³ã³ããŒãã³ããè·šãã°ããŒãã«ãªç¶æ
管çã«ç¬èªå®è£
ã® Store ãå©çšããŠããŸããããã¯åŒç€Ÿã®ããªã³ã·ãã«ããã¯ãªãŒãã§ãã @ukyo ã TypeScript ã§å®è£
ãããã®ã§ããåæåŠçãéåæåŠçãã·ã³ãã«ã«åããããŠäœ¿ããããåè£å®ãå¹ãäžã«ãç®ãŸããããå€ããããã³ããšã³ãã®ãã¬ã³ããããVuex ã¯èŸãããæè¿ã¯ PiniaïŒããŒãã£ïŒ ããããããããªã© Vue ã³ãã¥ããã£ã®ååãæ°ã«ããããšãªãããµãŒãã¹éçºã«éäžã§ãã代ç©ã§ãïŒãªããçŸåšã¯ç€Ÿå
ã§ã®å©çšã®ã¿ãæ³å®ããŠãããOSSãšããŠå
¬éããŠããŸããïŒã ã€ãŸããåŒç€Ÿã§ã¯ Vuex ã䜿çšããŠããŸããããã ããã©ã€ãã©ãªåŽã®å¶çŽãã Store ã« Vuex ã å©çšããªããš Store ã«æ¥ç¶ããã³ã³ããŒãã³ãã®ãã¹ããäžå¯èœã§ãã ããã§ããŒã å
ã§æ€èšããçµæãTesting Library Vue ã® render.js ãã³ããŒããŠäžéšæžãæããããšã«ãããVuex ãžã®äŸåãäžèŠãšãã€ã€ Testing Library ãå©çšãããã¹ããæžããããã«ãã察çãåãããšã決ããŸããããã©ãŒã¯ãããã³ãŒããã³ããŒãããã¡ãªããããããã³ã³ããŒãã³ãã®ãã¹ããæžããŠãªã°ã¬ãã·ã§ã³ã«åãããšããã¡ãªãããäžåããšèããçµæã®æææ±ºå®ã§ããã Vue 2 ã§ Testing Library ã®ãã¹ããæžãããã®å¯Ÿç åŒç€Ÿã®Vue 2 ç°å¢ã§ Vue Testing Library ã«äŸåãã Testing Library ã®ãã¹ããæžãããã®å
·äœçãªå¯Ÿçã¯2ã€ãããŸãã 1ã€ç®ã¯ render.js ã® Vuex äŸåã®ç®æãåé€ããããšã§ããããã¯ããŸãç¹çããããšã¯ãããŸããããŸã Testing Library Vue ã® src é
äžã®ãã¡ã€ã« index.js fire-event.js render.js ããããžã§ã¯ãã«ã³ããŒããåèšã® render.js ã® Vuex äŸåç®æãåé€ããŸããã ãããŠãexport ããã render 颿°ã䜿ã£ãŠã³ã³ããŒãã³ããã¹ããèšè¿°ãããšãããVuex é¢é£ã®ãšã©ãŒã¯è§£æ¶ãããŸããã ããããã°ããŒãã«ãªã³ã³ããŒãã³ãã§ãã瀟å
åãå
±éã³ã³ããŒãã³ãé BBQ ãå©çšããã³ã³ããŒãã³ãã«å¯Ÿãããã¹ããã Vue Router ã䜿ã£ãã«ãŒãã£ã³ã°ã®ãã¹ããèšè¿°ããã«ããããå¥ã®ãšã©ãŒã«ééããŸãããããããäžã€äžã€è§£æ¶ããŠãããæçµçã«åºæ¥äžãã£ã颿°ã2ã€ç®ã®å¯Ÿçã§ãã ããã¯ãrender.js ãã©ãããã颿° customRender ãäœã£ãããšã§ãããã®é¢æ°ã®è²¬åã¯ãStore ã Props ãåŒæ°ãšã㊠render 颿°ã«æž¡ããããã°ããŒãã«ãªã³ã³ããŒãã³ããç»é²ããåŠçãå®è¡ããããšã§ãã // custom-render.ts import BBQ from '@baseinc/bbq' import { Store } from '@web/vue-store' import { createLocalVue } from '@vue/test-utils' import { I18n } from '@web/shopadmin' import Vue from 'vue' import VueRouter , { RouteConfig } from 'vue-router' import VeeValidate from 'vee-validate' import { render } from './render' import { addCustumValidators , getCustomOptions } from '../vee-validator-setup' type State = Parameters <typeof Store.create > [ 0 ] type Options = { initialState: State // Store ã®åæç¶æ
props?: Record < string , any > // ã³ã³ããŒãã³ãã«æž¡ã Props routes?: VueRouter | RouteConfig [] // ã«ãŒãã£ã³ã°ã®å®çŸ© } type ConfigurationOption = { localVueOption?: ( localVue: Vue ) => void storeOption?: ( store: State ) => void routerOption?: ( router: VueRouter ) => void } export const customRender = < V extends Vue >( component: any , // this makes me sad :sob: // https://github.com/testing-library/vue-testing-library/blob/main/types/index.d.ts#L51 { initialState , props , routes } : Options , { localVueOption , storeOption , routerOption } : ConfigurationOption = {} ) => { const localVue = createLocalVue () // ããªããŒã·ã§ã³ã©ã€ãã©ãªã®ç»é² addCustumValidators () localVue.use ( VeeValidate , getCustomOptions ()) // 瀟å
å
±éã³ã³ããŒãã³ãéã®ç»é² localVue.use ( BBQ , { prefix: 'bbq-' , } ) // Store ã®ç»é² localVue.use ( Store ) // i18n å¯Ÿå¿ localVue.use ( I18n ) return render ( component , { localVue , store: Store.create ( initialState ), routes , props , } , // ãã®ç¬¬3åŒæ°ã¯ Testing Library Vue ã® v.5.8.3 ã® render 颿°ã®ç¬¬3åŒæ°ã«åãããŠãã ( localVue: Vue , store: State , router: VueRouter ) => { localVueOption?. ( localVue ) storeOption?. ( store ) routerOption?. ( router ) } ) } customRender 颿°ã䜿ã£ããã¹ãã®èšè¿°äŸãæ²èŒããŸããããã¯ååã®å
¥åæ¬ã«ç©ºæåãæžã蟌ãã æãããªããŒã·ã§ã³ãšã©ãŒãšãªããšã©ãŒæèšã衚瀺ããããšãããã¹ãã§ããinput ã§å
¥åããå
容ã¯çŽæ¥ Store ã§ç®¡çããŠããŸãã import { customRender as render } from '../custom-render' test ( 'ååã空æ¬ã®æããšã©ãŒæèšã衚瀺ãã' , async () => { render ( Component , { initialState: getInitialState () } ) const input = screen.getByLabelText ( /åå/i ) await fireEvent.update ( input , '' ) expect ( screen.queryByText ( 'ååãå
¥åããŠãã ãã' )) .toBeInTheDocument () } ) ãã®ãã¹ããæ£åžžã«ãã¹ããããšã«ããããBASE ã®ç¬èª Store ã«æ¥ç¶ããã³ã³ããŒãã³ãã«å¯Ÿãããã¹ããå¯èœãªããšããã°ããŒãã«ãªããªããŒã·ã§ã³ã©ã€ãã©ãªã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããã¹ãã§ããããšããinput ã¯ç€Ÿå
å
±éã³ã³ããŒãã³ãç±æ¥ã§ããããããã«äŸåããã³ã³ããŒãã³ãã®ãã¹ããã§ããããšãã®3ç¹ã確èªã§ããŸããã ãªããæ®æ®µ React ãæžããŠããæ¹åãã«è£è¶³ãããš Vue 2ã®å Žå㯠input ã®å
¥åå€ãçŽæ¥ Store ã«æžã蟌ãã§ããåœè©²ã³ã³ããŒãã³ã以å€ã®ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããããšã¯ãããŸããããã®çµæãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå£åããæžå¿µã¯ãªãããããã®ãããªäœãã蚱容ããŠããŸãã詳ãã㯠Vue.js ã®å
¬åŒããã¥ã¡ã³ããä»ã®ãã¬ãŒã ã¯ãŒã¯ãšã®æ¯èŒã ã®ããŒãžãã芧ãã ããã 以äžã§ãVue 2 ã§ Testing Library ã®å°å
¥æ¹æ³ã玹ä»ããããšããæ¬èšäºã®ç®çã¯éæããŸããããã ããã£ããã®ã¢ããã³ãã«ã¬ã³ããŒãªã®ã§ãããããã¯ä»é²ãšã㊠Vue Router ã§ç»é¢é·ç§»ãããã¹ãã®æžãæ¹ã®ç޹ä»ãšãTesting Library å°å
¥ãã¢ã¯ã»ã·ããªãã£ïŒa11yïŒã®æ®µéçãªæ¹åã«ç¹ãã£ããšãããšããœãŒãã玹ä»ããŸãã ä»é² Vue Router ã§ç»é¢é·ç§»ããããã¹ã æ¬ç°å¢ã§ã® Vue Router ã䜿ã£ããã¹ãã®æžãæ¹ã玹ä»ããŸããããŒãžã®ã¢ã¯ã»ã¹æã«ãã°ã€ã³å€å®ãè¡ãããã°ã€ã³æžã¿ã§ããã° /mypage ã«ãéãã°ã€ã³ç¶æ
ã§ããã° /login ã«é·ç§»ãããšããæ¶ç©ºã®ä»æ§ãæ³å®ããŸãã ãã®æããã¹ãã³ãŒãã¯ä»¥äžã®ããã«ãªãã§ãããã import '@testing-library/jest-dom' import { waitFor } from '@testing-library/dom' import Component from '../settings-container.vue' import { render } from '../../testing-library' import { getInitialState } from '../../store' import { routes } from '../../routes' type Options = Partial < ReturnType <typeof getInitialState >> const setup = ( options?: Options ) => { const { route } = render ( // ãã® render ã¯äžèšã§ç޹ä»ãã customRender Component , { initialState: { ...getInitialState (), ...options } , routes } , { routerOption: ( router ) => { router.push ( '/settings' ) } , } ) return { route: route () } } test ( 'ãã°ã€ã³æžã¿ã®ãŠãŒã¶ãŒã¯ãã€ããŒãžã«é·ç§»ãã' , async () => { const { route } = setup ( { isLoaded: true } ) await waitFor (() => expect ( route.path ) .toBe ( '/mypage' )) } ) test ( 'éãã°ã€ã³ãŠãŒã¶ãŒã¯ãã°ã€ã³ããŒãžã«é·ç§»ãã' , async () => { const { route } = setup ( { isLoaded: true , isCreated: true } ) await waitFor (() => expect ( route.path ) .toBe ( '/login' )) } ) render ã®è¿ãå€ã§ãã route ã®äžèº«ã¯ä»¥äžã®ãããªé¢æ°ã§ãã // render.js export function render ( ... ) { // ... return { ... , route: () => wrapper.vm.$route } } ãªãã Testing Library v5.8.3 ã§ã® Vue Router ã®ãã¹ãã®æžãæ¹ã®äŸã¯å
¬åŒã® GitHub ã«ãæ²èŒãããŠãã ã®ã§ããã¡ãã䜵ããŠã芧ãã ããããŸããããå°ãäžæãæžããããªæ°ã¯ããŠãããã®ã®çŸæç¹ã§ã¯ååã«åœ¹å²ãæãããŠãããããä»åŸããã« Vue Router ã䜿ã£ããã¹ãã±ãŒã¹ãå¢ããæ®µéã§ãªãã¡ã¯ã¿ãªã³ã°ã宿œããããšæããŸãïŒã€ã³ã¯ãªã¡ã³ã¿ã«ãªèšèšïŒã ãã¹ãé§åã® a11y æ¹å ã³ã³ããŒãã³ããã¹ããæžãããšããå
±éã³ã³ããŒãã³ãã® a11yïŒã¢ã¯ã»ã·ããªãã£ïŒãæ¹åãããã£ããã«ããªããŸãããããã§ã¯2ã€äºäŸã玹ä»ããŸãã 1ã€ç®ã¯ãããã©ãã°&ããããã§ãã¡ã€ã«ãã¢ããããŒãã§ããããšããã³ã³ããŒãã³ãã®å¯Ÿå¿ã§ãããã®ã³ã³ããŒãã³ãã䜿ã£ãŠç»åã¢ããããŒãã®ãã¹ããèšè¿°ããŠããéãTesting Library ã§äžè¬çãªã»ã¬ã¯ã¿ã§ãã getByLabelText() ã§ input ã¿ã°ãååŸã§ããŸããã§ããã upload åå ã¯ã bbq-upload-box ã Props ã« id 屿§ãåãåããªãã£ãããšã§ãã screen.getByLabelText('ãã¡ã€ã«ã¢ããããŒã') ãšèšè¿°ããŠãã¹ããå®è¡ãããšãã©ãã«ããã¡ã€ã«ã¢ããããŒããã«å¯Ÿå¿ãã form ãèŠã€ãããªããšãããšã©ãŒã衚瀺ãããŸãã // ã»ã¬ã¯ã¿ã§ input ãååŸã§ããªã < div > < label for = "file-upload" > ãã¡ã€ã«ã¢ããããŒã </ label > < bbq-upload-box label = "ç»å" icon = "image" accept = "image/png" @change= "uploadImage" ></ bbq-upload-box > </ div > ããã§ã bbq-upload-box ã Props ã« id 屿§ãåãåããããã«æ¹ä¿®ãããã¹ãã®èšè¿°ãšå®è£
ãç¶ããŸããã // ã»ã¬ã¯ã¿ã§ input ãååŸã§ããªã < div > < label for = "file-upload" > ãã¡ã€ã«ã¢ããããŒã </ label > < bbq-upload-box id = "file-upload" // ãã®è¡ã远å label = "ç»å" icon = "image" accept = "image/png" @change= "uploadImage" ></ bbq-upload-box > </ div > 2ã€ç®ã¯ããã¿ã³ãšããŠã¯ãªãã¯ã§ããã¢ã€ã³ã³ã®å¯Ÿå¿ã§ããã¢ã€ã³ã³ãã¿ã³ãå«ãã³ã³ããŒãã³ãã®ãã¹ããæžãã«ããããTesting Library ã®ã¯ãšãªã䜿ã£ãŠãã®ãã¿ã³ãã¯ãªãã¯ããããšããŸããããããããã®ãŸãŸã§ã¯èŠçŽ ãããŸãååŸã§ããŸããã§ããã icon buttons ããã§ã bbq-icon-button ã³ã³ããŒãã³ãã« aria-label ãæž¡ããããã«æžãæããå©çšåŽã®ã³ã³ããŒãã³ãããã©ãã«ãæå®ãã倿Žãå ããŸãããçµæçã«ã¢ã€ã³ã³ãã¿ã³ãã¯ãªãã¯ããéã«çºç«ããã³ãŒã«ããã¯ã®ãã¹ããæžããã®ã¿ãªãããStorybook ã® a11y ãã©ã°ã€ã³ã®ãButtons must have descernible textããšããææãç¡ããªããŸããã icon button a11y 察å¿ã®èгç¹ã§ã¯ããããã®æ¹ä¿®å
容ã¯ããèªäœããåºæ¬çãªãã®ã ãšæããŸãããããããã¹ããæžããªããã°èªåéã§ãã®ç¶æ
ãçºèŠããããšã¯ãªãã£ãã§ããããããæ°ã¥ããŠããã®ã§ããã°æ¢ã«èª°ããä¿®æ£ããŠããã¯ãã§ãã察å¿å
容ã®å€§å°ãããããã¹ããæžãããšã a11y æ¹åã®ãã£ããã«ç¹ãã£ãããšãåã°ããæããŸãã ãã² Testing Library ã䜿ã£ãŠããã³ããšã³ãã§ããã¹ããæžããŠã¿ãŠãã ããã ææ¥ã¯ @toshi-oliver ããã®ãAWS LambdaãPHPã§äœ¿ãããã®ãã¹ããªæ¹æ³ãã§ãïŒãã²ã芧ãã ããã
ãã®èšäºã¯ BASE Advent Calendar 2022 ã®3æ¥ç®ã®èšäºã§ãã ã©ããããã«ã¡ã¯ãShopFrontããŒã ã®éæšã§ãã 䞻㫠ã·ã§ãããã¶ã€ã³ é¢é£æ©èœã®éçºãæ
åœããŠããŸãã ä»åã¯ãããŒã ã®EMãããŠããé ã«ãã¡ã³ããŒã®GitHubãKibelaã®æŽ»åãªã©äžç®æã§ãŸãšããŠèŠããWebã¢ããªãäœæãã話ã«ãªããŸãã äœæããWebã¢ããªã«ã€ã㊠èªåã®ããŒãžã®ã¹ã¯ãªãŒã³ã·ã§ãã æ§æ ããŒã«ã«ç°å¢ã§å©çšããããšãæ³å®ãããã® ç°å¢å€æ°ã«åçš®PATçèšå®ãããAsana API, GitHub GraphQL API, Slack APIãå©çšããŠããŸã ãã¬ãŒã ã¯ãŒã¯ã«ã¯Next.js, Bootstrap5ãéžå®ããŸãã äž»ãªæ©èœ ã¡ã³ããŒããšã«ãæéãæå®ããŠã以äžã®ãããªããšãã§ããŸãã Asanaã®ã¢ãµã€ã³äžã®TaskãGitHubã®æŽ»åãKibelaã®æŽ»åãUniposã®ãªã³ã¯ãGoogle ã«ã¬ã³ããŒã®iframeåã蟌ã¿ãgeekbotã®æçš¿ã衚瀺 AsanaãGitHubãKibelaã®æŽ»åãMarkdown圢åŒã§ã³ã㌠ã©ã®ããã«æŽ»çšããŠããã 鱿¬¡å®äŸã§å
±æããé圢㫠AsanaãGitHubãKibelaã®æŽ»åãMarkdown圢åŒã§ã³ããŒã§ããã®ã§ãããã鱿¬¡å®äŸã§å
±æããé圢ã«ããŠãå®äŸè³æäœæã«ãããæéãçãã§ããããã«ãªããŸããã 1on1ã§ã®å ±åãã¹ã ãŒãºã« 鱿¬¡ã§è¡ã£ãŠããEMãšã¡ã³ããŒéã§ã®1on1ã§ã¯ãAsanaãGitHubãKibelaã®æŽ»åã«æŽ»åãèŠãäžã§ãæ¥åé¢ã§ã®å ±åãã³ã³ãã¯ãã«åºæ¥ãããå¿ãããŠããŸããã å
çã« æéã1ã¶æã3ã¶æãå幎ã1幎ãªã©ã«ããããšã§ãèªèº«ãã©ãããããšããã£ãŠããã®ãèŠãããšãã§ããŸãã ãããžã§ã¯ãã®æ¯ãè¿ãäŒããè©äŸ¡é¢è«ã«åããŠã®æºåã«ã掻çšããŠããŸãã äœã£ãŠã¿ãŠã®ææ³ åºæ¬çã«åãµãŒãã¹ã®API掻çšã¯èªã¿åºãã®ã¿ãªã®ã§ããããŸã§æéããããã«å®è£
ã§ããŸãã æ£ãã°ã£ãŠããå
¬éæ
å ±ãæå³ãã圢ã«ãŸãšããã ãã§ããæŽ»çšã§ããã·ãŒã³ãçãŸããŠã䟿å©ã ãªãšæã£ãŠããŸã Asanaã®é
ç®ãã³ããŒããæ©èœã¯å®è£
åœåãªãã£ãã®ã§ããããããããããšã«ããŒã ã®ã¡ã³ããŒãã»ãããšPRäœæããŠãããŸããïŒæè¬ïŒ æåŸã« ææ¥ã¯ã @Panda_Program ããã«ãããVue 2 + TypeScript ç°å¢ã« Testing Library ãå°å
¥ãããã§ãïŒã楜ãã¿ã«ïŒ
ã¯ããã« ãã®èšäºã¯ BASE Advent Calendar 2022 ãš Looker Advent Calender 2022 2æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãBASE æ ªåŒäŒç€Ÿ New Division BASE BANK Section ã«ãŠãEngineering Program Manager (以äžEPM) 1 ãããŠããæ°žé( @glassmonekey ) ã§ãã ç§éã®BASE BANK Section ããŒã (ä»¥äž BANK ããŒã ) ã¯BASEã®äžã§ããæ°èŠäºæ¥ã®éèç³»ã®ãããã¯ãã«ãã©ãŒã«ã¹ããããŒã ã«ãªããŸããç¹ã«æ°èŠäºæ¥ãªã®ã§ãæ¥ã
ã®äžç¢ºå®æ§ã«ã©ãåãåã£ãŠè¡ãããããŒãã«æ¥ã
ä»äºãããŠããŸãã äžç¢ºå®æ§ã«åãåãããã«ã¯ãæ¥ã
ãªãªãŒã¹ããŠãããããããŸããããããŠããã芳枬ããããã®åæåºç€ãæ¥ã
ã®ãªãªãŒã¹ã«èããããã€ãŸãã¯ã¢ãžãªãã£ãä¿ã€å¿
èŠããããŸãã ä»åã¯ã©ã®ããã«ã¢ãžãªãã£ãä¿ã£ãŠããŒã¿åºç€ãæ¥ã
éçšããŠããããããŒãã«å°å
¥ãšæŽ»çšã®ç޹ä»ãããããŸãã ããŒã¿åºç€ãããããå°å
¥ããããšããŠããæ¹ããããŒã¿åºç€ã瀟å
ã«æ®åãããããšå°œåãããŠããæ¹ã
ã®åèã«ãªãã°å¹žãã§ãã ã¡ãªã¿ã«ãä»åã®å
容ã¯7æã«éå¬ããã LookerãŠãŒã¶ãŒäŒ ã§çºè¡šããå
容ãããŒã¹ã«ãªã£ãŠããã®ã§ããã¡ããããããã£ãã埡芧ãã ããã EPMã®åœ¹å² æåã«ãç§ã®åœ¹å²ã§ããEPMãšã¯ãªã«ãïŒãç°¡åã«èª¬æãããŠãã ããã ç§ã¯çŸåšã YELL BANK ãšãããããã¯ãã®EPMãããŠããŸãã EPMã®åœ¹å²ãšããŠã¯ãã£ããã§ããã以äžã®ãããªããšãæ¥ã
ãã£ãŠããŸãã * éçºã®ãªãŒããéçºããã»ã¹ã®æ¹å * èšå®ãããªãªãŒã¹ã¹ã±ãžã¥ãŒã«ãžã®è²¬ä»» * ãããã¯ãã®ã¯ãªãªãã£ã®æ
ä¿ * ãããžã§ã¯ãããããã¯ãã®æè¡çãªé»å®³èŠå ã®æé€ * ã¹ããŒã¯ãã«ããŒãšã®é©åãªã³ãã¥ãã±ãŒã·ã§ã³ * æææ±ºå®ããšã¹ã«ã¬ãŒã·ã§ã³ã®å®æœ ç¹ã«ç§ãšããŠã¯ãæ©æãªãªãŒã¹ãšãªãªãŒã¹é »åºŠã«ã¯éãã眮ããŠããŠããŸãã æåã®äŒç»ã§ã¯3ã¶æãããæ³å®ã®ãã®ã§ããã¹ã³ãŒãã®èª¿æŽããããš1ã¶æã«ãªãããã? ããããããã工倫ããã°ãã£ãšæ©ããªãªãŒã¹ã§ããªããïŒãèããŠããæãã§ãã ãªããªããæã
ã®ã€ãã£ãŠãããããã¯ãã¯äžç¢ºå®æ§ã ãããªã®ã§ãããããªãããšã°ããã§ãã ãããã®äžç¢ºå®æ§ãšåãåã£ãŠããã«ã¯å°ãã§ãæ©ããªãªãŒã¹ããŠåŠç¿ãéããŠãããããããŸããã ã§ã¯ããªãªãŒã¹ããçµæãåŠãã§ããã«ã¯ã©ããããããã§ãããã? ç¹ã«ããŒã ã¡ã³ããŒã¯å
šå¡ããšã³ãžãã¢ãšããããã§ã¯ãããŸãããããããã®ç«å Žã§èŠãæ¯è²ãéããããKPIã®ãããªäžå®ã®å®éçãªææšã忥µæã«ããŠç®ç·ãããããŠããå¿
èŠããããŸãã ããã§ãç®ç·ãããããããã«å®éçãªææšã管çããŠããããã«ããŒã¿åºç€ãç»å ŽããŸãã ããŒã¿åºç€ãšEPM äžè¬çã«ããŒã¿åºç€ãšãããšãData Ware House(DWH)ããããŒã¿ã¬ã€ã¯ãšãã£ãèšèãã§ãŠããã®ã§ã¯ãªãã§ããããã æã
ãšããŠããããŒã¿åºç€ã®DWHã«ã¯ BigQuery ã䜿ããBIããŒã«ã«ã¯ Looker ã䜿ã£ãŠããŸãã ããšããš Redash ã䜿ã£ãŠããŸããããã¯ãšãªç®¡çã®èª²é¡ãªã©ããæè¿ã¯Lookerãžã®ç§»è¡ãé²ãã§ããŸããã Lookerãžã®æšé²ã¯ããŒã¿ãã©ãããã©ãŒã ããŒã ãå
šç€Ÿçã«ãªãŒãããæã
BANK ããŒã ãšããŠã¯ããã«åã£ã圢ã§ãã ãããããã®ç¶æ³ã ãšæ¥ã
ã®ãªãªãŒã¹å€æŽã®åºŠã«ãããŒã¿ãã©ãããã©ãŒã ããŒã ãžéœåºŠäŸé ŒããŠããŒã¿ã®å€æŽãå
±æããªããšãããªãã®ã§è¥å¹²éå¹çã§ãã ããã§ããçšåºŠã¢ãžãªãã£ãä¿ã¡ã€ã€ã人çãªãœãŒã¹ãæéãªã®ã§äžã®ãããªäœå¶ã§ã®éçšãå§ããŸããã å
šç€ŸçãªããŒã¿åºç€ã¯ããŒã¿ãã©ãããã©ãŒã ããŒã ã責任ãæã€ã BANKããŒã ã®çްããªåæææšã¯ãæ¥ã
ã®ãªãªãŒã¹ã«è²¬ä»»ãæã€EPMã責任ãæã€ ETLããELT ã§ã¯ããŒã¿ãã©ãããã©ãŒã ããŒã ãšEPMãã©ã®ããã«åæ¥ãé²ããŠãã£ãã説æããŸãã äžè¬çãªããŒã¿åºç€ã«ãããŠéèŠãªããã»ã¹ã«ä»¥äžã®3ã€ã®ããã»ã¹ãæããããŸãã * Extract(æœåºïŒ... ããŒã¿ããœãŒã¹ããæœåºããã * Transform(倿) ... ããŒã¿ãå¿
èŠã«å¿ããŠå å·¥ããã * Load(æ ŒçŽ)... ããŒã¿åºç€ã«æ ŒçŽããã äžæåã§ã¯ãExtractãTransformãLoadã®é ã«è¡ãããã®ã§ETLãšããç¥ç§°ã§åŒã°ããŠããŸãããèã銎æã¿ã®ããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã ãã®äžã§ãäžçªå€æŽå¯èœæ§ãé«ãç®æã¯Transformã«ãªããŸããåæãããç¹ããããã¯ãã®ãªãªãŒã¹ã«ããããŒã¿å€æŽã«ãã圱é¿ãåããããããã§ãã åŸæ¥ã®ETLããã»ã¹ã§ã¯ãLoadãTtranformã«äŸåããŠãã圢ã ã£ãã®ã§ãTransformã®å€æŽã®åœ±é¿ãLoadãåãããããšããæ§é ã§ãããDWHãäœããããªèŠæš¡ã®ããŒã¿ã ãšãã¿ãã€ãçŽã®ããŒã¿ãæ±ãããšãçãããªããé »ç¹ã«LoadåŠçã倿Žããããšã¯çŸå®çã§ã¯ãªãã§ãããããã®ããTransformã倿Žããããšãé£ãããšããç¶æ³ãçãã§ããŸããã¢ãžãªãã£ãäžããèŠå ã ã£ãã®ã§ã¯ãªãã§ããããã äžæ¹ã§ãæè¿ã§ã¯ETLã®ä»£ããã«ELTãšããæµããäž»æµã«ãªã£ãŠããŸãããã€ãŸãã¯ä»¥äžããã«å€æŽå¯èœæ§ã®é«ããTransformã®åŠçãæåŸã«æã£ãŠããããã§ãã å®éæã
ã®ããŒã ã§ããã¢ããªã±ãŒã·ã§ã³ã倿Žããæã
èªèº«ã§ããŒã¿åæåºç€ã®æçµçãªå
容ã倿Žãããšããäœå¶ãåããŸããããã®ãããã§ããªãªãŒã¹ããå
容ã®éå ±ãç¿æ¥ã«ã¯ããã·ã¥ããŒãã§äœã£ãããšãã£ãæè»ãªéçšäœå¶ãæ·ãããšãã§ããŸããã ã€ãŸããTransformãæã
EPMã責任ãæã¡ãExtractãšTransformã¯å
šç€Ÿçãªéšåã¯ããŒã¿ãã©ãããã©ãŒã ããŒã ããæã
ã®ããŒã ã管çããŠããããŒã¿ãœãŒã¹ã¯EPMãæŽåãããšãã£ã忥äœå¶ãšãªããŸããã ç¹ã«ãLookerã ãšã 掟çããŒãã« ã«ãã£ãŠæ°è»œã«ELTãå®çŸãããŠããç¹ã§éå®ããŠããŸãã ã¯ãšãªãæžããŠTransformãæžã圹å²ãšãæ¥ã
ã®KPIã管çããŠããã·ã¥ããŒããäœã圹å²ãåããããç¹ã¯ãä»ã®BIããŒã«ã«ã¯é£ããã£ãç¹ããªãšæããŠããŸãã ãšã¯ããRedashãªã©ã®ä»ã®BIããŒã«ã§ãã¯ãšãªãæžãããªããåããããªéçšã¯ã§ãããšæãããŸãã ãããã¯ãã©ã€ããµã€ã¯ã«ã«çµã¿èŸŒã çŸåšãæã
ã®ããŒã ã管çããŠããDatabaseãlogæ
å ±ãããããæ¥æ¯ãŸãã¯æ¥æã§BigQueryã«åæãã圢ãåã£ãŠããŸãã åºæ¬çã«ã¯embulkã§äžéšPython ã®ã¹ã¯ãªãããECSã®ã¿ã¹ã¯ã¹ã±ãžã¥ãŒãªã³ã°ã§å®çŸããŠããŸãã åºæ¬çã«åæããããŒã¿ã¯ãã»ãŒçããŒã¿ããã®ãŸãŸBigQueryã«å
¥ããããã«ããŠããŸãã åæããããããŒã¿ã®æŽåœ¢ãšãã£ãåŠçã¯BIããŒã«ãšãã£ãåæè
ã®è¿ããšããã§å®çŸããæ¹åŒããšã£ãŠããŸããåè¿°ããELTã§ãã ãã®æ¹åŒãæ¡çšããçç±ãšããŠã¯ãããŒã¿ã®ããŒãéšåã¯ããŒã¿éã®é¢ä¿ããé »ç¹ãªå€æŽã¯é£ãããšèããç¹ã倧ããã§ããåæèгç¹ãšããå€åã®ããããå
容ãããŒãéšåã«çµã¿èŸŒããšåæåºç€ãšããŠã®ã¢ãžãªãã£ãäžãã£ãŠããŸãããšãæžå¿µããããã§ãã æè¿ã¯ãPMMãšãã£ãæ¥ã
ã®æœçã«è²¬ä»»ãæã€ã¡ã³ããŒãå¢ããŠããã®ã§ãããã·ã¥ããŒãäœãã¯PMMã«ä»»ãã€ã€ããã·ã¥ããŒãã«å¿
èŠãªæ
å ±ã¯EPMã責任ãæã€ãšãã£ã忥äœå¶ã§åºç€åšãã®æŽ»åãããŠããŸãã ããšããšãBANKããŒã ã®ãšã³ãžãã¢çµç¹ã¯ãã«ãµã€ã¯ã«ãšã³ãžãã¢ãæ²ããŠå
šãŠã®ãããã¯ãã©ã€ããµã€ã¯ã«ã«é¢ããããšã倧äºã«ããŠããŸãããã®äžã«åæåºç€ãžã®ãã£ãŒãããã¯ãçµã¿èŸŒãã 圢ãåãããã«ãªã£ããšãããŸãã ãã«ãµã€ã¯ã«ãšã³ãžãã¢ã«é¢ããŠã¯ååã®æŸéª( @applepine1125 )ãã ãã®ããšblogãæžããŠãããã¯ããªã®ã§ãããæåŸ
!! æžããŠãããŸããã devblog.thebase.in ããšãLookerãæŽ»çšããŠè¯ãã£ãç¹ã«æ¥ä»ã®æ
å ±ã以äžã®ããã«TimeframeãšããŠå®çŸ©ããŠãããšã·ãŒã ã¬ã¹ã«é±æ¬¡ãææ¬¡ãQuoaterãšãã£ãåœ¢ã«æ¡åŒµã§ããç¹ã¯äŸ¿å©ã ãªãšæããŠããŸãã dimension_group: event_date { type: time time_frame: [ time, date, week, month, quarter, year ] } å
·äœçã«ã¯ãæ¥ã
ã®æ¯ãè¿ãçšã®ããŒã¿ããã®ãŸãŸæ¡åŒµããŠã圹å¡äŒè°ã®è³æã«ã掻çšã§ããç¹ã§ãããã®ããšã«ãããã¡ã³ããŒããçµå¶å±€ãŸã§èŠç¹ãåãããããã®ã§ãèŠåº§ã«é¢ãããåã忥µæã远ããªããä»äºãã§ããŠãããšæããŸãã æåŸã« ä»åŸã®å±æãšããŠãããŒã¿åºç€ãäœã£ãäœå¶ãã§ããã®ã§ããããã¯ããžã®ãã£ãŒãããã¯ã®ä»çµã¿ã¥ãããšãããæšé²ããŠããã¡ã³ããŒã®æ¡çšãé²ããŠãããããšèããŠããŸãã çŸåšã¯embulkã§éã«ããŒã¿ã転éããŠããŸãããä»åŸãããã¯ãã«ãã£ãŒãããã¯ããããšãèãããšGlueãSage Makerã®æŽ»çšãèããŠãããããªãšæã£ãŠããŸãã ããã§äžç·ã«ãããã¯ãäœã£ãŠãã仲éãçµ¶è³åéäžã§ãã ããã¡ãã£ãšã§ãèå³ãããšããç¥èŠããããšããæ¹ãã²ç§ãŸã§DMãã以äžã®ãã©ãŒã ããå¿åãåŸ
ã¡ããŠããŸã!! å·ãããã§ãããã!! open.talentio.com ææ¥ã¯ããŒããåŸæãª @ao_kiken ããã«ããããããŒã ã¡ã³ããŒã®æŽ»åãç¥ã工倫ãã§ããæ¥œãã¿ã§ãã!! åèæç® ãããã¯ãã®ããªããªãŒãã¯ãªãªãã£ã«è²¬ä»»ãæã€Engineering Program Managerãšããåœ¹å² ↩
ãã®èšäºã¯ 2022 BASEã¢ããã³ãã«ã¬ã³ã㌠1æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ïŒéçºæ
åœåœ¹å¡ã®ããµããã§ããçµ¶è³ãæ¥å£ã®çµç¹æ§é ã®èšèšäžãªã®ã§ãäœãèããªããçµç¹å³ãæ€èšããŠãããïŒãšããããšãæžããŠã¿ãããšæããŸãïŒ çµç¹æ€èšã®åºæ¬ãšããŠã¯ããµãŒãã¹ã®æ¡å€§ãçµç¹ã®æ¡å€§ã«å¯ŸããŠä»äºã®ããããããã¹ããŒãæãåŠäœã«å®çŸããªããäºæ¥ã䌞ã°ããŠãããïŒãšããããŒãã§çµç¹ãèããŠãããŸãã çµç¹æ§é ã¯åç€Ÿåæ§ã®ãã®ããããšæããŸãããå€ãã®äŒç€Ÿããã§ã¯ããžãã¹ã®ãããã©ã€ã³ã䌞ã°ãããŒã ãäž»äœã«ãä»ãã課é¡ãããªããŠããããŒã æ§æã§ããããšãå€ãããšã§ãããã ãŸããããžãã¹ã®å®ããæ¯ããããŒã ããããŸããå®ãã®è£è¿ãã¯æ»ããšèšããŸãããäœããå®ãæãããšã§ã売äžãå©çã®äžæ¯ããè¡ã課é¡è§£æ±ºã«ã€ããŠã¯çµå¶èª²é¡ãšããŠäžãããããããå°çšã®ããŒã ãäœããããããŸãã æã
ã§èšããšãæ±ºæžæ©èœã®ä¿å®ãããã«è©²åœããŸããæ±ºæžæ©èœã¯ãã ãµãŒããåãããŠããã ãã§æžããã®ã§ã¯ãããŸãããBASEã®äžã§è²©å£²ãããååããã§ãã¯ãããªã©ã®å çåºç®¡ç責任ãæããããšããæªæã®ããæ±ºæžããã·ã§ãããå®ãäžæ£æ±ºæžç®¡çãªã©ã該åœããŸãã äžæ¹ã§ãæ°æ©èœéçºãå°å¿µããŠããWebãµãŒãã¹ã®äŒç€Ÿã§ããã€ãæ©ã¿ã®ã¿ãã«ãªãã®ããéå»ã«äœã蟌ãã§ããŸã£ãäžå
·åä¿®æ£ã誰ãã©ããã£ãŠæéãå²ããŠçŽããŠããããšããããšã§ã¯ãªãã§ãããããã€ãŸããã§ã«åããŠãããµãŒãã¹ã®ã¯ãªãªãã£ãå®å®æ§ã®ç¶æã®äœæ¥ã§ã誰ãã©ã®ãããªãã©ã€ãªãªãã£ãšè²¬ä»»ã§æ
ã£ãŠããã®ããšãã課é¡ã§ãã ïŒäºè±¡ãã¯ãªãã£ã«ã«ã§ã¯ãªãïŒäžå
·åä¿®æ£ã«åŸåãããããšæ°èŠæ©èœéçºãé
ããŠããå¯èœæ§ãé«ããªããæ°èŠæ©èœéçºãåªå
ããŠãããšãããããæè¡çè² åµãè§£æ¶ãããªãã§ãããšãããããã¯ãã¯ãªãªãã£ãäœããŸãŸã«ãªããšãããªã¹ã¯ããããŸãã ããããéšåã¯ãªãããããã®åé¡ãèµ·ããªãéãããžãã¹ã€ã·ã¥ãŒã«ã¯äžããã«ããããããžã¡ã³ãã¯éçºããŒã ã«å§ããããŠããã®ã宿
ã ãšæããŸãããããŠçŸå Žã§ã¯å€§ãªãå°ãªãåé¡ãèµ·ããŠããããããã®ããšã«å¯Ÿãããžã£ããžã¡ã³ãã¯CTOãæ
ã£ãŠããã®ã§ã¯ãªãã§ããããã 以åãå人ã®ããã°ã§ã以äžã®ãããªèšäºãæžããããšããããŸãã note.com ããã§æžããŠããããšããã£ããæžããŸããšãè¶³å
ã®ãœãããŠãšã¢è³ç£ã®ç¶æïŒæè¡çè² åµã®è§£æ¶ãå«ãïŒãã»ãã¥ãªãã£ã®ç¶æãªã©ãè¡ãä¿å®äœæ¥çã®å¿
èŠæ§ã¯ãšã³ãžãã¢ãããžã£ããžã¡ã³ãã§ããªããäžæ¹ã§ãšã³ãžãã¢ã®äœæ¥å¿«é©æ§ã®ç¶æãªã©ãçŽæ¥çã«å£²äžã«ã¯è²¢ç®ããªããã©ãæŸçœ®ãè¯ããªããšãã鿥çãªããªã¥ãŒãžã®è²¢ç®ã§ããã£ããããã®ã§ãäœèšã«ãã®å€æè²¬ä»»ãæ
ãããã«ãCTOè·ãå¿
èŠã§ããããšããããšãæžããŠããããã§ãã ãããŠãäžå
·åä¿®æ£çã®å®äœæ¥ã§ãããæšä»ã¯CREïŒCustomer Reliability EngineeringïŒãªã©ãšèšãããŒã ãäœã£ãŠã顧客æºè¶³åºŠãå®çŸããããã®çµç¹ãäœããšããããããŸãããã®ããŒã ã¯ãããæçŸ©ãæå³ã®ããåãçµã¿ã§ã¯ãããŸãããèšããŠå®æ
ã¯ç€Ÿå
ã®èª°ããäœãããã äžå
·åä¿®æ£ãæ
ããè¥å¹²ã®ãšã°ã£ã¡ãæãåŠããªãããŒã ã§ãããšããéšåã§ãææ
çãªé£ãããéžãåºããããããŸãã ããããããŸãé©åãªäžå
·åä¿®æ£ã¯é£ããäœæ¥ã§ããã¹ãã«ãåãããŸãããµãŒãã¹ã®ãã¡ã€ã³ç¥èãå¿
èŠãªã®ã§ããšãããã人ãéã£ãŠããŠãçŽããŠãã ãããã§æžã人ã¯ããã©ã³ãšã³ãžãã¢ã§ãã確çãé«ãã§ãããã æŽå²ççµç·¯ã調ã¹ãããã«ã¹ããŒã¯ãã«ããŒãçè§£ãã人éé¢ä¿ãå¿
èŠã§ãã ããããããšãã§ãã人ã ã£ããæ°èŠéçºãã§ããå¯èœæ§ãé«ãã®ã§ãããžãã¹ãã©ã€ãªãªãã£ãåªå
ããçµç¹ã§ã¯ãé
ããæ©ããããããäººã¯æ°èŠéçºã«åãã¯ãã§ãã ããã§ã¯ãªããããããã©ã³ã®ãšã³ãžãã¢ã®äººãæè²è
çãªèŠç¹ãæã¡ãå®ãã®èŠãæ
ã£ãŠãããããæé«ã§ãã ã§ãWebãµãŒãã¹äŒæ¥ã¯æŽå²ãæµ
ãã®ã§ãè£œé æ¥ãªã©ã«ãããªã¿ã€ã¢éè¿ã®ããã©ã³ã®å·¥å¡ã®äººãªã©ã¯ããŸãååšããŸãããã¿ããªãã£ãšè¥ãã®ã§ãæ°èŠéçºãªã©ãéããŠèªåã®ã¹ãã«ãé«ããŠãããããšæãã®ã人æ
ãšãããã®ã§ãããã ãªã®ã§ãCREã¯ããã®äŒç€Ÿã®æŽå²ççµç·¯ã«æ¯ããããå±äººã®æŽ»èºã«å§ããããŠããçµç¹ãªããããªãããªïŒãšæã£ããããŸããçµç¹æ§é ãšããŠã¯æ¥µããŠç¶æãé£ããããŒã ã§ã¯ãªãããšèãããããã®ã§ãããã©ãã§ããããããçæ³è«ã§ã¯ãªããªã¢ãªãã£ã®ããCREããŒã ã®äœãæ¹ãæ¯éãèãããŠã¿ããã§ãã åèšæãšããèšèã«ã€ã㊠話ã¯å€ãããŸãããWebãµãŒãã¹äŒæ¥ã§ã¯ãåèšã£ãœãããšèšãèšèã䜿ãããŠå¿ã¿å«ãããããšããããŸããå€ãã¯ããããªãçµç¹æ§é ãèµ·å ãšããŠãäžããæ¡ä»¶ãéã£ãŠããããã¹ã±ãžã¥ãŒã«ã仿§ãªã©ã§ãšã³ãžãã¢ãµã€ãã®æ±ºå®æš©ãæåŠæš©ããªãããªã©ã®ãããããä»äºããšããèšèã«å¯ŸããŠäœ¿ãããã¡ãªè¡šçŸã§ããããããå€éè«è² ã®äžäœã¬ã€ã€ãŒã®äººã®è©±ãããããåºåã£ãŠããææããã£ãã®ã§ãããããèšèã䜿ãããã¡ã§ãã åã¯ä»¥åãåèšéçºãæ
ãWebå¶äœäŒç€Ÿã«ããã®ã§ãäžæ¬¡è«ãã§ããã°ããã£ãšè°è«ãã§ããããããããèŠç©ããã§ãæããã§ããããã客ãããSIerã®ãäžã«èšã£ã¡ãã£ããã仿޿ããªããã«ã¶ã€ããããšã¯ãã£ãŠãããã®ããšãå
±æããæå€§éå©ããŠãããããšããå²ãšååããªã¡ã³ã¿ãªãã£ã§ä»äºãã§ããŠããã®ã§ãåèšéçºã楜ããã£ãã§ãã ãšã¯ããåŸã«ãWebãµãŒãã¹äŒæ¥ã«è»¢è·ãããããã§ãããæ¬¡ã«äœããããã£ãããšãããšãèªåããããæéãããã¹ãŠãã®ãµãŒãã¹ã®æé·ã«çµã³ã€ããããšããããšã§ããã ã©ãããŠãåœæåãé¢ãã£ãŠããåèšéçºã ãšãå¥çŽæ¡ä»¶ãšããŠãçŽåãããŸã§ãããžãã¹ã§ããã®ã·ã¹ãã ã¯ã客æ§ã®è³ç£ã§ããããããã©ãéçšãããŠããããŸã§ãåœæã¯é¢ãããªãã£ãã®ã§ãã©ãæåãããã©ã倱æããã®ããŸã§ã¯é¢ãããŸããã§ããããŸãæ°æ©èœææ¡ãªã©ããã客æ§ã«ãéãããã ããªããšè²¬ä»»ãæãŠãªããšãããªãŒããŒãããããåœæã®åã®ã¹ãã«ã§ã¯ç¡é§ã ãšæã£ãŠããããäœããã客æ§ã倿ã§ããããšããã§ããŸããã ã®ãŒã¯çãªããªã§ããšãããããã£ãŠã¿ãã èªåãã¡ã®è²¬ä»»ã§ãã£ã¬ã³ãžããŠã¿ããªã©ãã§ããªãããã§ãã ãã¡ãããããã¯åœæã®åã®ã¹ãã«ãšç°å¢ãããã ã£ãã ãã§ãæè¿ã¯DXã®åã®äžã§ãã¢ãžã£ã€ã«ããã»ã¹ã䜿ããªããéçšã䌎å¥ãããµãŒãã¹éçºã®åèšããžãã¹ãªã©ãç«ã¡äžãã£ãŠããŠãã¬ããã¥ãŒã·ã§ã¢ã®ä»çµã¿ãé£åã§ããã°é¢çœãã§ãããDAOçãªåœ¢ã§åºè³ãåãããžãã¹ãããã§ããããæããé¢çœããªã£ãŠããã®ã§ãå人çã«ã¯ããããä»äºã«ãèå³ããããŸãã ...ããã¯ãšããããšããŠãWebãµãŒãã¹ã®ãšã³ãžãã¢ã¯ããã®ãµãŒãã¹ã®ç殺äžå¥ªãæ¡ã£ãŠããã®ã§ãæ°èŠéçºã ãã§ãªãããã®ãµãŒãã¹ã®å®å®æ§ç¶æãäžå
·åä¿®æ£ãã»ãã¥ãªãã£ããµãŒãã¹éçšãªã©ãå
šéšèªåãã¡ã®è²¬ä»»ã®å
ã§ããªãã¹ãã ãšæã£ãŠããŸãããããããäž»äœçã«WebãµãŒãã¹ã«æºãããšã³ãžãã¢ã®çæã ãšãæã£ãŠããŸãã ã§ããã©ãããŠãä»äºãšããŠèŠããšãéçºèšç»ã«ãããããžã§ã¯ããåªå
çã«ãããªããïŒã£ãŠæã人ãããŸããããããã«ããã¯éèŠãªã®ã§ãããããšèšã£ãŠãããã ãã«å¿ãåãããŠããŸãã®ããåã¯ããããåèšã£ãœããšèšããããã䟡å€èгããªãã£ãŠæããšããããããŸãã ãã£ãšã¯ã¬ããã«èªåãã¡ãå®ã£ãŠãããµãŒãã¹å
šäœãå®ããã ãšããæèã®å
ã§ãæ°èŠãããžã§ã¯ããããªãã€ã€ããµãŒãã¹ãç¶æãããšã³ãžãã¢ãªã³ã°ã¹ãã«ãé«ããŠããæ¹ã絶察楜ãããšåã¯æã£ãŠããŸããããããã§ãã人ããåœç€Ÿã§ãCTOã§ãã£ããããªã³ã·ãã«ããã¯ãªãŒããªã©ã®é責ã«ã€ããŠããããšã¯ãäžå¿æžããŠãããŸãïŒèŠããã«ãã®äž»äœæ§ãã¹ããŒãæãšæè¡åãå
Œãåãã人æããããããããšã³ãžãã¢ãšããŠåºäžããããŠããŠãšããããšã§ãïŒ æ»ããšå®ããäž¡ç«ããã æã
ã®Slackã«ã¯ã#cs_qãšããã客æ§ããã®åãåããã®äžã§æè¡çãªèª¿æ»ãåçãè¡ããã£ã³ãã«ããããŸãã 以åã¯çµç¹ãå°ããã£ãã®ã§ãåºæ¬çã«åãåããã«æ°ãã€ãã人ãåçãããšããç§æçãªã³ãã¥ãã±ãŒã·ã§ã³ãã£ã³ãã«ã§ãããããã€ããåãåãããå¢ãã人ãå¢ããæµãã§ãCTOãããªã³ã·ãã«ããã¯ãªãŒããããŸã ãã®è©æžãã€ã以åããåãåãã察å¿ã«ä»ã®äººéãããçéã§å¯Ÿå¿ãç¶ããŠããŸãããã€åœŒããæã£ãŠããéçºãããžã§ã¯ããã¹ã±ãžã¥ãŒã«ã«éã«åãããã«ããããã«æ®æ¥æéãçå¢ããããããã®è² è·åæ£ã®ããã«ãåœçªå¶ã§æ
åœããããã«å€ãããŸããã ä»ã¯ããããŒãžã£å€æã§#cs_q察å¿ã®åœçªãªã¹ãããå€ããªãéãã¯ãååãšããŠãããžã§ã¯ãã«åå ããŠãããšã³ãžãã¢ãå«ããŠãå
šå¡äœå¶ã§å¯Ÿå¿ãããŠããŸãã 以åã®ã¢ããã³ãã«ã¬ã³ããŒã§ãããããèšäºãæžããŠããŸãã devblog.thebase.in æã
ã¯çŸåšãããããäœå¶ã§å¯Ÿå¿ãããŠããŸãããäžæ¹ã§ãã©ãããŠãçŸå Žç®ç·ã§ã¯#cs_q察å¿ã¯ãããžã§ã¯ããé
ããèŠå ãšããŠèªãããããããããããžãã¹æé©åãšããåŽé¢ã§ã¯ããããã£ãå®ãã®å¯Ÿå¿ã®ããã®å¥ããŒã ãçµæããŠã¿ãŠã¯ïŒãšãã話ãåºãŠããããã§ãã ãªã®ã§ãçµç¹æ§é ããããã©ã€ã³ã䌞ã°ãæ¹åã ãã«æé©åãããšãããã話ã«ãªã£ãŠããŸãããã§ããããžãã¹ãžã£ããžã¡ã³ããåªå
ããããŠãµãŒãã¹ã®å®å®æ§ãç¶ç¶æ§ããœãŒã¹ã³ãŒãã®å£åã«äŒŽãéçºçç£æ§ãæãªãããŠãããããªããšã«ã¯ãªããªãããã«ããã€ãWebãµãŒãã¹ã®ãšã³ãžãã¢ãšããŠãèªåãã¡ã§äœã£ããã®ã¯èªåãã¡ã§çŽãããšããåœããåã®ããšãããç¶ããããçµç¹æ§é ãç¶æããªããšãããªããšã¯æã£ãŠããŸããããã¯ããã¯ãã³ãã£ãŒãšããŠã®ãã ãããã€ã³ãã§ã¯ãªãããšæã£ãŠããŸãã ãã¡ãã管çè
ç®ç·ã§ã¯äž¡ç«ã§ããçµç¹æ§é ã§ãããããæéã§åããããªçµç¹ã®æ¹ãããããªã®ã§ãå°æ¥ã¯ãããªã£ãããããªãšã¯æããŸããããšã³ãžãã¢ç®ç·ã§ã¯ãããã§WebãµãŒãã¹ã«æºãã£ãŠããšèšããã®ããªããä»äºæ¥œããã®ããªãããšããæ°æã¡ãæã¡ãªãããïŒã€ã®äŸ¡å€èгãèããŠãããšããæãã§ãããã 責åã®ãã¡ã€ã³åå²ãäœæ¥å¹çã«ã ãæé©åãããã ãã®ç¶æ
ãæ£è§£ã ãšã¯æããªããšãã話ã§ããŠãçãã®åºãªã話ã§ã¯ããã®ã§ããããã£ãããããšèªåèªèº«ãå¹çæ§ã ããèããŠçµç¹èšèšãããã¡ã ã£ããããã®ã§ãæ°ãã€ããªãããªãšèããªããçµç¹å³æ¡ãæžããŠã仿¥ãã®ããã§ãã ã¢ããã³ãã«ã¬ã³ããŒ ïŒæ¥ç®ã¯BASE BANKããŒã ã®æ°žé( @glassmonekey )ããã«ããããŒã¿åæåºç€ã®ç®¡çéçšã«ã€ããŠã®è©±ã§ãããæ¥œãã¿ã«ïŒ 2022幎ã®ã¢ããã³ãã«ã¬ã³ããŒã®ã¹ã±ãžã¥ãŒã«
ããã«ã¡ã¯ïŒBASE product blogç·šééšã§ãããã€ãåŒããã°ã®èšäºãã芧ããã ãããããšãããããŸãïŒ ãã£ãšãããŸã«2022幎ã幎ã®ç¬ã幎ã®ç¬ãšããã°ããïŒã¢ããã³ãã«ã¬ã³ããŒ! ä»å¹ŽãæäŸã®BASEã¡ã³ããŒã«ããã¢ããã³ãã«ã¬ã³ããŒãéå¬ããŸãïŒ éå»ã®æ§å 2021幎ã®ã¢ããã³ãã«ã¬ã³ã㌠2020幎ã®ã¢ããã³ãã«ã¬ã³ã㌠2019幎ã®ã¢ããã³ãã«ã¬ã³ã㌠2018幎ã®ã¢ããã³ãã«ã¬ã³ã㌠ä»å¹Žã1æ¥1èšäºã«éå®ããããããã®ãã©ãšãã£è±ããªèšäºãå
¬éããäºå®ã§ãã å
¬éããæ¬¡ç¬¬ä»¥äžã®ã«ã¬ã³ããŒã鿿޿°ããŠãããŸãã®ã§ããã²ã楜ãã¿ã«ïŒ èšäºã®ã«ã¬ã³ã㌠æ¥ä» ææ¥ å·çè
ããŒãã»ã¿ã€ãã« 12/1 æš @fshin2000 WebãµãŒãã¹ã®éçºããŒã ãæ
ãã¹ãæ»ããšå®ããšããïŒã€ã®åœ¹å² 12/2 é @glassmonekey ã¢ãžãªãã£ãä¿ã£ãŠããŒã¿åºç€ãäœãåãçµã¿ 12/3 å @ao_kiken ããŒã ã¡ã³ããŒã®æŽ»åãç¥ã工倫 12/4 æ¥ @Panda_Program Vue 2 + TypeScript ç°å¢ã« Testing Library ãå°å
¥ãã 12/5 æ @toshi_oliver AWS LambdaãPHPã§äœ¿ãããã®ãã¹ããªæ¹æ³ 12/6 ç« @kon_engineer @yusaku ã¹ã¯ã©ã éçºã§æ°ã¹ããªã³ãå
ã®æªæ¥ã®èœãšã穎ãåé¿ãã â 幎é500å1on1ããçµæããã£ã倧äºãªããš 12/7 æ°Ž @satoshi_takemoto @tosh å
¥ç€ŸããŠ1ã¶æçµã£ãã®ã§BASEã®ãªã³ããŒãã£ã³ã°äœéšã玹ä»ããŸã ã«ãŒãããŒã ãæ¯ãè¿ã 12/8 æš @takashi_matsuyuki @yuki_tsukita Real World Full Cycle Developers ãŠãŒã¶ãŒãªãµãŒããšABãã¹ãã§å¹æçãªããŒã±ãã£ã³ã°ãå®çŸãã話 12/9 é @gatchan0807 @yuripi â ãããã¯ãã®å°ããªè² ãè§£æ¶ããæå¿æŽ»åã®æ¯ãè¿ã ãªã³ã©ã€ã³ã§ã®ããŒã ãã«ãã£ã³ã°ã§æèãããŠããããš 12/10 å @gan.seki ãã¡ãããªæ³šææ€çŽ¢ã¢ãã«ããªãã¡ã¯ã¿ãã話 12/11 æ¥ @izuhara reportã·ã¹ãã ã®æ¥åæ¹åã§çµçæ¥åãæŽã«ççž®ãã話 12/12 æ @naoki.munechika BASEã«è»¢è·ããUI/UXãã¶ã€ããŒãå
¥ç€ŸåŸ1ã¶æã§æããŠããããš 12/13 ç« @shibu_t @wakana UXã©ã€ãã£ã³ã°ã®ã¬ãã¥ãŒå·¥æ°ãtextlintã§90%åæžããä»¶ è¥æãšã³ãžãã¢ã®èªåã«ãšã£ãŠBASEãæé«ã®æé·ç°å¢ã ã£ã話 12/14 æ°Ž @matzz @yuni ãªã¢ãŒãã¯ãŒã¯ã§èšãã¿ç¶ãã俺ã®èªå®
ç°å¢ã®ãã¹ãŠãè©°ã蟌ã ç¥ã£ãŠæ¬²ããïŒè³é調éãµãŒãã¹ãYELL BANKãã®æšããã€ã³ã 12/15 æš @funasaka ããŒã ã®èœåãæ°å€åããŠä»åŸã®æé·æ¹éãç«ãŠãŠã¿ã 12/16 é @yanagawa ãªã¢ãŒãã¯ãŒã¯ãä¹ãããªãããã«èªå·±é瀺ã®ä»çµã¿ãäœã£ãŠãã話 12/17 å @zan BASEã«å
¥ç€ŸããŠæããSpeak Openlyã®è¯ããšãã3éž 12/18 æ¥ @chihirokym @cureseven @ngsw ã¢ããã³ãã«ã¬ã³ããŒã§BASEãã¶ã€ããŒãš2022å¹Žãæ¯ãè¿ã Large-Scale ScrumïŒLeSSïŒäœéšèš SREé¢é£Issueã7幎åãæ¯ãè¿ã - BASEãããã¯ãããŒã ããã° 12/19 æ @Shunsuke @ShoTakeuchi åå®å
šãªPythonã§å
ç¢ãªã¢ããªã±ãŒã·ã§ã³éçº BERTãå©çšããååã«ããŽãªã®æšè«åºç€ãäœããŸãã 12/20 ç« @yuzuy @ayako-hotehama BASEã«ãŒãã«ããããã£ãã·ã¥ããã¯ã®èšèš BASEã«å
¥ç€ŸããŠ3ã¶æéã§ãããããããªãšæããŠãã3ã€ã®ããš 12/21 æ°Ž @ogata2104 @tadamatu äžå Ž3幎ç®ãæ¹ããŠITçµ±å¶ã«ã€ããŠèãã BASEå
šäœã®ã€ã³ãã©ç¥èåºäžãã®ãã AWS JumpStart ã«åå ããŠããããŸãã 12/22 æš @02 @tsubo BASEæè¡ã€ãã³ãç»å£æ¯ãè¿ã2022 æ°èŠäºæ¥ã®ãããã¯ããããŒãžã£ãŒãå
¥ç€ŸïŒã¶æã§åãçµãã ããš 12/23 é @FUJIIMichiro @Linda ããã¹ãäœéšã®ãã¶ã€ã³ã®å
ã«èŠããUXã©ã€ãã£ã³ã°ã¡ãœããã®æªæ¥ çµå¶æŠç¥å®€ãšåãã¡ãä¿¡ããæªæ¥ 12/24 å @rerenote Pay IDã®éçºçµç¹ããããŒãžã£ãŒãããã·ã§ã³å€ãã§ç޹ä»ããã 12/25 æ¥ CTO gg BASEã®CTOããšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒã«æ±ããŠããããš ïŒå¹Žéã®ç€ŸäŒäººçµéšãçµãŠã倧åã ãšæã£ãïŒã€ã®ããš
ã¯ããã« ã¯ãããŸããŠãCSE (Corporate Solution Engineering 1 ïŒã®äžéã§ãã ä»å㯠BASE Partners ãšããäºæ¥ã§äœ¿çšããŠãã Google ãã©ãŒã ã S3 + API gateway + Lambda (+ Aurora) ã䜿çšãã Serverless æ§æã®ãã©ãŒã ã«ç§»è¡ãããšãããããžã§ã¯ãã«ã€ããŠã話ããŸãã 倿Žåã®æ§æå³ãšæ§ç¯ããæ§æå³ãšããŠã¯ä»¥äžã®ããã«ãªããŸãã 倿Žå 倿ŽåŸ BASE Partners ã«ã€ã㊠BASE ã§ã¯æ°èŠã®ã·ã§ãããªãŒããŒæ§ã玹ä»ã»æ¯æŽããã ããªãã£ã·ã£ã«ããŒãããŒãåéããããŒãããŒããã°ã©ã ãéå¶ããŠããŸãã ãããã®ç³è«ã«ã¯åæçã«ã¯ Move fast ã«è¡ããããGoogle ãã©ãŒã ãš Google ã¹ãã¬ããã·ãŒãã䜿çšãããŠããŸãããããããããããšã«ããŒãããŒæ§ãã玹ä»ããã ããã·ã§ããæ§ã¯é 調ã«å¢å ããããã«æ¯äŸããŠã誀ç³è«ãšããã«ããããåããå¢å ãããªã©ãæ¥åè² è·ãé«ãŸã£ãŠããŸããã æ¢åã®ä»çµã¿ã Google ãã©ãŒã â Google ã¹ãã¬ããã·ãŒã â DB ãžãããåã蟌㿠ãšããæµãã®ãããç³è«è
ããªã¢ã«ã¿ã€ã ã«ç³è«ããå
å®¹ãæ£ãããã©ãããããããªããšããã®ã誀ç³è«ã®äž»ãªåå ã ã£ãããããã©ãŒã ããçŽæ¥ DB ãåç
§ã§ããããããã©ãŒã ãç§»è¡ããããšã«æ±ºå®ããŸããã æè¡éžå® ç§»è¡ããã«ããã£ãŠããŸãã¯ã©ã®æè¡ã䜿çšããããšãããšããããæ€èšãã¯ãããŸãããä»åã¯ãµãŒããŒã管çã»éçšãã人çãªãœãŒã¹ããªãããªã©ã®çç±ããå°ãã§ãéçšã軜æžã§ãããã S3 ã®éçãµã€ããã¹ãã£ã³ã°ãš API gatewayãLambda ãçšãã Serverless ã®æ§æãšããããã«æ±ºå®ããŸãããèšèªã«ã€ããŠã¯ãBASE ã§ã¯ PHP ãããçšããããŠããŸãããLambda ã§ã¯ PHP ã¯å
¬åŒã§ã¯ãµããŒããããŠããªããããCSE ã§ Lambda ã䜿çšããéã«ããçšãã Python ãéžæããŸããã ãŸããServerless ã¢ããªã±ãŒã·ã§ã³ã®ç®¡çã¯ãCSE ã§äœ¿çšå®çžŸã®ãã£ã Servewrless Application Model ïŒSAMïŒã䜿çšããããšã«ããŸããã SAMã«ããå®è£
ãããã¯ãŒã¯ã®èšå® Lambda ããæ¢åã® DB ã«ã¢ã¯ã»ã¹ããå¿
èŠããããããVPCãSubnetãSecurity Group ã®èšå®ãå¿
èŠã«ãªããŸãã ä»åã®å®è£
ã§ã¯ Terraform ã§ãããã¯ãŒã¯çã管çããŠããå¥ãªããžããªããããããå®è£
ãšããŠã¯ãããŸããããäžèšã®ãããªæ§æãšãªãããã«ããããèšå®ããŸããã VPCãSubnetãSecurity Group ã®èšå®åŸãSAM ã® template.yaml ã® VpcConfig èšå®ã§ Lambda ã« Subnet ãš Security Group ã®èšå®ãä»äžããŸãã Resources : SomeFunction : Type : AWS::Serverless::Function Properties : CodeUri : functions/ Handler : some_function.lambda_handler Runtime : python3.9 Architectures : - x86_64 VpcConfig : SecurityGroupIds : - <SecurityGroupId> # æ§ç¯ããã»ãã¥ãªãã£ã°ã«ãŒãIDãèšå® SubnetIds : - <SubnetId> # æ§ç¯ãããµããããIDãèšå® CORS ã®èšå® S3ã®éçãµã€ããã¹ãã£ã³ã°ã®ãã¡ã€ã³ãšãAPI gateway ã®ãã¡ã€ã³ãç°ãªããããCross-Origin Resource Sharing (CORS) ã®èšå®ãå¿
èŠã«ãªããŸãã API gateway ãš Lambda ã®äž¡æ¹ã«èšå®ãå¿
èŠã«ãªãããã以äžã®ãããªåœ¢ã§å®è£
ãããŸãã template.yaml ã®å®è£
äžèšã®ãµã³ãã«ã§ã¯1ã€ã®é¢æ°ãããããŸããããå®éã«ã¯è€æ°ã®é¢æ°ãååšãããããGlobals å
ã§ api ã« Cors ããããã£ãèšå®ããŸãã ä»åå®è£
ãã API 㯠POST ã¡ãœãããã¡ã€ã³ã«ãªããŸãããCORS ã®èšå®ãããå Žå㯠OPTIONS ã¡ãœããã§ preflight ãªã¯ãšã¹ããéä¿¡ãããããOPTIONS ã¡ãœããã®èšå®ãå¿
èŠã«ãªããŸãã Globals : Api : Cors : AllowOrigin : "'<origin>'" AllowCredentials : false AllowMethods : "'POST,OPTIONS'" AllowHeaders : "'<headers>'" Resources : SomeFunction : Type : AWS::Serverless::Function Properties : CodeUri : functions/ Handler : some_function.lambda_handler Runtime : python3.9 Architectures : - x86_64 VpcConfig : SecurityGroupIds : - <SecurityGroupId> SubnetIds : - <SecurityGroupId> Events : SomeApi : Type : Api Properties : Path : /path Method : post Lambda ã®å®è£
API gateway ã® Lambda ãããã·çµ±åã®å Žåãããã¯ãšã³ãã® Lambda 颿°ã§ã Access-Control-Allow-Origin ããã³ Access-Control-Allow-Headers ãè¿ãå¿
èŠãããããã以äžã®ããã«è¿ãå€ã® headers ã«èšèŒããŸãã 2 def lambda_handler (event, context): ... return { "statusCode" : 200 , "headers" : { 'Access-Control-Allow-Headers' : 'Content-Type' , 'Access-Control-Allow-Origin' : '<ORIGIN>' , 'Access-Control-Allow-Methods' : 'OPTIONS,POST' }, "body" : json.dumps({ ... }), } ãããã€ã®èªåå ç¶ããŠãããã€ãèªååããä»çµã¿ã«ã€ããŠã§ãã ä»åã¯å€§ããªã¢ããªã±ãŒã·ã§ã³ã§ã¯ç¡ãã®ã§ GitHub Actions ã§ SAM ã® deploy ã³ãã³ããå®è¡ããç°¡æçãªãã®ã䜿çšããŸããã ãŸãããããã€ã«äœ¿çšããèªèšŒã¯ãåæçã«ã¯ GitHub Secrets ã䜿çšããããšæã£ãŠããŸããããOpenID Connect ã§ããã°ã¯ã¬ãã³ã·ã£ã«æ
å ±ã®æŒæŽ©ãªã©ã®ãªã¹ã¯ããªããé©åã«äœ¿çšããã°ããã»ãã¥ã¢ã§ãããšããããšãç¥ããOpenID Connect ã䜿çšããããšã«ããŸããã OpenID Connect ã® IAM Role èšå® ID ãããã€ãã®è¿œå ãŸãã¯ä»¥äžã®èšå®ã§ GitHub ã ID ãããã€ããšã㊠AWS ã«è¿œå ããŸãã Provider URL : https://token.actions.githubusercontent.com Audience : sts.amazonaws.com IAM Role ã®äœæ 次ã«èªèšŒåŸã«äœ¿çšãã IAM Role ãäœæããŸãã ãŸã Policy ã§å
çšèšå®ãã GitHub ã® ID ãããã€ãã Principal ã«èšå®ããAction ã§ sts:AssumeRoleWithWebIdentity ãæå®ããŸãã { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect " : " Allow ", " Principal " : { " Federated ": [ " arn:aws:iam::<account_id>:oidc-provider/token.actions.githubusercontent.com " ] } , " Action " : " sts:AssumeRoleWithWebIdentity ", " Condition " : { " StringLike ": { " token.actions.githubusercontent.com:sub ": [ " repo:<repository>:* " ] } } } ] } ä»å㯠SAM ã®ãããã€ãããããã以äžã®ããªã·ãŒãã¢ã¿ããããŸãã - IAMFullAccess - AmazonS3FullAccess - AmazonAPIGatewayAdministrator - AWSCloudFormationFullAccess - AWSLambda_FullAcces GitHub Actions ã®å®è£
å
ã«èšå®ãã IAM Role ã䜿çšããŠãèªåãããã€ãå®è¡ãã GitHub Actions ãå®è£
ããŸãã name : 'deploy' on : push : paths : - 'template.yaml' - '.github/workflows/deploy.yml' - 'functions/**' branches : - 'branch' env : AWS_ROLE_ARN : 'arn:aws:iam::<aws_account_id>:role/<OIDC_ROLE_NAME>' permissions : id-token : write contents : read jobs : deploy : runs-on : ubuntu-latest steps : - uses : actions/checkout@v2 - uses : actions/setup-python@v2 - uses : aws-actions/setup-sam@v1 - uses : aws-actions/configure-aws-credentials@v1 with : role-to-assume : ${{ env.AWS_ROLE_ARN }} - run : sam build --use-container - run : sam deploy --config-env <env> --no-confirm-changeset ãŸãšã æ¬èšäºã§ã¯ãæ¥åæ¹åãç®çãšãã API gateway ãš Lambda ã«ãã Serverless ãªãã©ãŒã ã®æ§ç¯ã«ã€ããŠã話ããŸããã æ¥åæ¹åã®èгç¹ãšããŠã¯ãç§»è¡ããŠéããªãããã©ã®ãããã®æ¹åãã§ããããšããå®éçãªææšã¯ãªããã®ã®ãæåã«èšèŒããŠãã誀ç³è«ã§ã®åãåããã¯åæžããããšãã§ããŸããã ãŸããAPI gatewayãLambda ã§ã® CORS ã®èšå®ã®èšäºããOIDC ã«ã€ããŠã®èšäºãªã©ãåè«ã®èšäºã¯å€ã
ãããã®ã®ãå
šäœã®å®è£
ããŸãšãããã®ãå°ãªããšæã£ãã®ã§ãåèã«ãªãã°å¹žãã§ãã ææ³ AWS ã«è§Šããã®ã¯ BASE ã«å
¥ç€ŸããŠããã ã£ãã®ã§ãããçµéšãå°ãªãäžã§ãææŠãããŠããããŠãšãŠãããçµéšãã§ããŸããã 以åå
¬éãããè¥èã®èšäº ã«ã æãæããããšã§ããããããšã«ç©æ¥µçã«ãã£ã¬ã³ãžãããŠãããã ãšãã瀟颚ããã ãšãããŸããããããã«ãããã£ã瀟颚ããããšããã®ãäœæããããšãã§ããŸããã ãŸããã³ãŒãã¬ãŒããšã³ãžãã¢ãšãããšãã³ããŒã³ã³ãããŒã«ãã¡ã€ã³ãšããã€ã¡ãŒãžããã¬ã¬ã·ãŒãªã·ã¹ãã ã®ä¿å®ãã¡ã€ã³ã ãšããã€ã¡ãŒãžãããæ¹ãããã£ãããããšæããŸãããBASE ã§ã¯å®è£
ãæè¡éžå®ãªã©æ§ã
ãªãã§ãŒãºãAWSãServerless ãªã©ã¢ãã³ãªæè¡ãçµéšãã§ããããšããããšãç¥ã£ãŠããã ããã°å¹žãã§ãã æåŸã« BASE ã§ã¯ç©æ¥µçã«ãã£ã¬ã³ãžãããããšã³ãžãã¢ãåéããŠããŸããã«ãžã¥ã¢ã«é¢è«ã宿œããŠããŸãã®ã§ãèå³ãæã£ãŠããã ããæ¹ã¯ãã²ãæ°è»œã«ãå¿åãã ããã https://open.talentio.com/r/1/c/binc/homes/4380 CSE ã«ã€ããŠã¯ ãã¡ãã®èšäº ãåç
§ãã ãã ↩ AWS å
¬åŒããã¥ã¡ã³ã ↩
åºç€ããŒã ã«æå±ããŠãã @okinaka ã§ãã å人çã«ã¯ CakePHP ãšã¯é·ãä»ãåãã§ããã14幎以äžã«ãªããŸãã BASE ã®äºæ¥ã«ãããŠã10幎éãã£ãšæ¯ããŠãããŠãã倧å€ããããã Web ãã¬ãŒã ã¯ãŒã¯ã§ãã 以åãã BASE ã®å€ãã®ã³ãŒãã¯ãŸã å€ã CakePHP 2 (v2.10.24) äžã§åäœããŠããããšã課é¡ã«ãªã£ãŠããŸãã CakePHP èªèº«ã¯é 調ã«éçºãç¶ç¶ãããŠããŸããã2ç³»ãã3ç³»ãžã®ããŒãžã§ã³ã¢ããã¯ãªããªãå°é£ã§äºã®è¶³ãèžãã§ããŸããã ããããããŠãããã¡ã«å€ãããŒãžã§ã³ã®2ç³»ã¯æ¢ã«å
¬åŒã§ã®ãµããŒãã¯åããŠããããã« PHP 8.0 æªãµããŒãã®ç¶æ
ã§ãã ãããã«ãã®ãŸãŸç¶ç¶ããŠå©çšããã®ã¯ç¡çãããã®ã§ãæ°å¹Žåãããããæè»ã«ã·ã¹ãã ãæ§ç¯ããããã®ã¢ãŒããã¯ãã£åèšèšãããããŠããŸãã ãã®ææã¯äžãã£ãŠããŠããã®ã§ãããåçŽãªãã¬ãŒã ã¯ãŒã¯ã®ããŒãžã§ã³ã¢ããã«ãšã©ãŸãããæ ¹æ¬çãªã¢ãŒããã¯ãã£ãåèšèšããŠãããšãããªã®ã§ãå
šãŠãå·æ°ããããŸã§ã«ã¯ããŸã ãŸã æ¢åã®ä»çµã¿ãå©çšããããšãç¶ãããã§ãã(ã¢ãŒããã¯ãã£ã®åèšèšã«é¢ããŠã¯ããã©ãããã©ãŒã ããŒã ãå¥ã®æ©äŒã§ç޹ä»ããããšã«ãªããšæããŸããïŒ ããã倧å€ãPHP 7.4 ã® EOL (2022-11-28) ãè¿ããŠãããåŸã®ãªãç¶æ
ããã®ãŸãŸå
ã«é²ãã«ã¯ PHP 8.0 以äžã«äžããå¿
èŠã«è¿«ãããŠããŸããã PHP 8.0 ã§ãæå€ãšåãã ãããããããšã«ãCakePHP 2 ãå
¬åŒã®ãªããžããªãããã©ãŒã¯ã㊠PHP 8.0 察å¿ãããŠããæ¹ãããããšã CakePHP ã® Slack ãã£ã³ãã«ã§ç¥ããŸããã https://github.com/kamilwylegala/cakephp2-php8 ã詊ãã§ãã£ãŠã¿ããããããªãåãã§ã¯ãããŸãããïŒãããïŒãšæã£ãã®ã§ãããäžã€ã ãåé¡ããããŸããã ããã¯èªåãã¹ãã¯ãæªå¯Ÿå¿ãªã®ã§ããã ãšããããšã§ãPHP 8.0 ã§åäœããããã«å¿
èŠãª PHPUnit 9 察å¿ãç¬èªã«ãã£ãŠã¿ããã§ãããšããå ±åã§ãã PHPUnit 9 ã«å¯Ÿå¿ããŠã¿ã å眮ããé·ããªã£ãŠããŸããŸããããæ¬é¡ã«å
¥ããŸãã PHPUnit 9 㯠PHP 7.3 以äžã«å¯Ÿå¿ããŠããŸãã®ã§ããããªã PHP 8.0 ãŸã§äžããå¿
èŠã¯ãããŸããã ä»åã¯å
¬åŒã® CakePHP 2.10.24 (& PHP 7.4) ã®ãŸãŸã§ PHPUnit 9 ã«å¯Ÿå¿ããŠã¿ãŸãã 倧ããªèŠç¹ã¯2ç¹ãããŸãã CakeTestCase ã ControllerTest ãç¶æ¿ããªã (ãããã¯å·®ãæ¿ãã) cake test ã䜿ããã«çŽæ¥ PHPUnit ãå®è¡ãã ä»ã«ã现ããªãã€ã³ãã¯ããããããã®ã§ãããããã«é·ããªããããªã®ã§ä»¥äžã§çããŠãããŸãã CakeTestCase ã ControllerTest ãç¶æ¿ããªã (ãããã¯å·®ãæ¿ãã) ãšãŠãæ®å¿µãªããšã§ãããPHPUnit ã®ããŒãžã§ã³ã¢ãã(phpunit>=8.0)ã«äŒŽãåŸæ¹äºææ§ã®ãªã倿Žããã£ããããCakeTestCase ã ControllerTest ãç¶æ¿ããŠãã¹ããæžãããšã¯ã§ããªããªããŸããã TestCase ã® setUp() ã tearDown() ãªã©ã®ã¡ãœããã®æ»ãå€ã«å宣èšã远å ãããããã§ãã ããã°ããã¯ããã¬ãŒã¯ã¯ãŒã¯åŽãä¿®æ£ãããããªãã®ã§ãå¿æ¥æªçœ®ãšã㊠CakeTestCase ãã³ããŒããã¯ã©ã¹ãçšæããŸããã åå空éããªããç¬èªã®ã¯ã©ã¹ããŒããŒãå©çšããŠããã¡ãªãããæŽ»ããã app/TestSuite/CakeTestCase.php ãé
眮ããããšã§ã App::uses('CakeTestCase', 'TestSuite'); ãšæžãããŠãããšããªãªãžãã«ã§ã¯ãªãã³ããŒã®æ¹ãèªã¿èŸŒãŸããŸãã 察å¿äŸã¯ ãã¡ã ã çŽæ¥ PHPUnit ãå®è¡ãã CakePHP 2 ã§ã¯ã cake test ãšããã³ãã³ããçšæãããŠããŠãå
éšã§ã¯ PHPUnit ãåãããŠããŸãã å€ãPHPUnit åãã®ããžãã¯ãæžãããŠãããããããã䜿ãããšãé¿ã㊠PHPUnit ãçŽæ¥å®è¡ããŸãã åŒç€Ÿã§ã¯ãããŒãžã§ã³ã¢ãã以åãã PhpStorm ãªã©ã® IDE ã®æ¯æŽãåããããã« PHPUnit ãçŽæ¥å©çšããããšããçç±ã§å¯Ÿå¿ããŠãŸããã ãã®ããã®å¯Ÿå¿æ¹æ³ã¯ GitHub ã® issue ã«åŒç€Ÿã® tenkoma ããã玹ä»ããŠããŸãã®ã§åèã«ãªããŸãã https://github.com/cakephp/cakephp/issues/12700#issuecomment-444150548 ãã¹ãã³ãã³ãèµ·åæã®ããŸããªãå°ã
ãšãã£ã¯ã¹ãã£åšãã®ããžãã¯ã®è¿œå ãå¿
èŠã§ããã ãªããCakePHP 2 ã«ã¯ web äžãããã¹ããå®è¡ããæ©èœãããã®ã§ããããã®æ©èœã¯åãæšãŠãããšã«ãªããŸãã(IDE ã CI ã§ãã¹ãããåã«ã¯äžèŠãªã®ã§ãªããŠãå°ããªããšæããŸãã) 察å¿äŸã¯ ãã¡ã ã ãµã³ãã« ä»åã®ããã°ã®ããã«ãCakePHP 2 ã§ PHPUnit 9 ãåãããµã³ãã«ãäœæããŠã¿ãŸããã CakeTestCase ã®ããã®ãã¹ãã±ãŒã¹ (CakeTestCaseTest) ãçšæããŸãããGitHub Actions ã® workflow ã䜿ã£ãŠèªåãã¹ãã«ã察å¿ããŠããŸãã https://github.com/okinaka/cakephp2-phpunit9-sample ãããã« æ¬æ¥ããã¬ãŒã¯ã¯ãŒã¯ã¯åžžã«ææ°ããŒãžã§ã³ã䜿ãããšã奜ãŸããããšãªã®ã§ãããèªåãã¹ããããã°ãå€ãããŒãžã§ã³ã䜿ã£ãŠããŠãå®å¿ã§ãããšæããŸãã (ãããŸã§ç§»è¡å®äºãŸã§ã®äžç¶ããšããŠã§ãã) ãã®èšäºã§ãCakePHP ã®ããŒãžã§ã³ã¢ãããã§ããã«å€ãããŒãžã§ã³ãå»¶åœããããã©ããè¿·ã£ãŠããæ¹ã«åèã«ãªãã°å¹žãã§ãã
ã¯ããã« 2022/11/19ïŒåïŒã«éå¬ããã ããã³ããšã³ãã«ã³ãã¡ã¬ã³ã¹æ²çž2022 ã«BASEã«æå±ãã4åã®ãšã³ãžãã¢ãç»å£ããŸãã BASE ã§ã¯ãããŸã§ããã€ãã®ããã³ããšã³ã ã«é¢é£ããããã¯ããã°èšäºãã€ãã³ããžã®åå ãè¡ã£ãŠãŸãããŸããã ãããŠä»åã¯ãããã³ããšã³ããããŒããšããŠããã€ã€ããè·çš®åããWebã«æºããæ¹ãæ¥œãããã€ãã³ããšããããšã§åè³ããããŸããã ããã³ããšã³ãã«ã³ãã¡ã¬ã³ã¹æ²çž2022ã«ã€ã㊠ããã³ããšã³ãã«ã³ãã¡ã¬ã³ã¹æ²çž2022ãšã¯ããã¶ã€ããŒããšã³ãžãã¢ããè·çš®åããWebã«æºããæ¹ãæ¥œãããã€ãã³ãã§ãã BASEã¯ããŽãŒã«ãã¹ãã³ãµãŒãšããŠæ¬ã«ã³ãã¡ã¬ã³ã¹ã«åè³ããŠããŸãã ïŒã¹ãã³ãµãŒç޹ä»ïŒ BASE æ§ BASEã¯ã©ãªãã§ãç°¡åã«ãããã·ã§ãããäœãããµãŒãã¹ã§ãããPayment to the People, Power to the People.ããããã·ã§ã³ã«ã180äžã·ã§ãããè¶
ããã·ã§ããæ§ã«å®å®ãããµãŒãã¹ãæäŸããŠãããŸãã #front_okinawa https://t.co/SQcoK6eTQK — ããã³ããšã³ãã«ã³ãã¡ã¬ã³ã¹æ²çž (@fec_okinawa) 2022幎11æ10æ¥ ã»ãã·ã§ã³å
容 mk0812ïŒ@mk0812__ïŒ mk0812 ã§ããä»å5åã®LTã«ç»å£ããŸããã¿ã€ãã«ã¯ã Figma TokensãšStyle Dictionaryããå§ãããã¶ã€ããŒãšãšã³ãžãã¢ã飿ºããããåãçµã¿ã®è©± ãã§ãããã¶ã€ããŒãšãšã³ãžãã¢ã®é£æºåšãã§5åã§ã¯å
šãŠã¯èªããªãã§ããFigma Tokensãªã©ãçšããŠå¹çåãªã©ã§ãããããªè©±ãããŠããããã§ãïŒæ¯éã芧ãã ããïŒ fortee.jp åèãªãªã£ïŒ @chiba_rry ïŒ åèãªãªã£ ã§ãïŒãããåã«ã Reject Conference - Vue Fes Japan Online 2022 ããšããã€ãã³ãã§ãç»å£ããŸããããããã§å°ãè§Šãã OpenAPI ã® API Client èªåçæã«ã€ããŠã話ãããŸãã ãšã¯ããä»åã¯5åã® LT ãªã®ã§ãå
šéšã¯èªãããããšã©ãŒãã³ããªã³ã°ã«ãã©ãŒã«ã¹ããçºè¡šãšãªããŸãã ã¡ãªã¿ã«è³æé²æã¯0ïŒ
ã§ãïŒå
æ¥ @mk0812 ãæ©éã¬ãã¥ãŒäŸé ŒåºããŠãŠéããŠããããªããšæããŸãããããããããã°ããŸãã fortee.jp ããã°ã©ãã³ã°ããããã³ãïŒ@Panda_Program ïŒ ããã°ã©ãã³ã°ããããã³ãïŒ@Panda_Program ïŒ ã§ããä»åã¯ãããã³ããšã³ããšã³ãžãã¢ãšå人éçºã®æ¥œãã¿ããšããã¿ã€ãã«ã§ãå人éçºã«ã€ããŠçºè¡šããŸãã ä»è³æãäœæããŠããã®ã§ããã30åãšããæ ãè²°ã£ãŠãããã®ã®çŽ æ¡ã®æ®µéã§ã¯å€å30åã«åãŸããªãã§ãïŒç¬ïŒ å
容çãã ããããªã®ã§ãã²ã芧ãã ããïŒ fortee.jp aokiken (@ao_kiken) aokiken ã§ããäºå¹Žåã®ã¢ããã³ãã«ã¬ã³ããŒã§æžããã Webéçºãè£å©ããç®çã§Puppeteerã䜿ã ãã®2022幎çã5åã®LTãããŸã ã¿ã€ãã«ã¯ãWebéçºãè£å©ããç®çã§Playwrightã䜿ã£ãŠãã話ãã«ãªããŸã ãã©ãŠã¶æäœèªååãE2Eãã¹ãã«èå³ãããæ¹ãã²ã芧ãã ããïŒ devblog.thebase.in æåŸã« ããã³ããšã³ãã«ã³ãã¡ã¬ã³ã¹æ²çž2022ã¯ãå
¬åŒããŒãžã«ãŠåå ç³èŸŒå¯èœã§ãã ä»åæã
ã¯ãªã³ã©ã€ã³ã§ã®åå ã«ãªããŸãããSNSãªã©ã§ããããçãäžãããŸãããã frontend-conf.okinawa.jp