ããã«ã¡ã¯ïŒBASE BANK Sectionã®æŸéª( @applepine1125 )ãšæž
æ°Ž( @budougumi0617 )ã§ãã å»ã2022/08/04(æš)ã«ãªã³ã©ã€ã³ã§éå¬ãããæ ªåŒäŒç€ŸUPSIDERããŸãšæ ªåŒäŒç€ŸKanmuããŸãšã®ååMeetup ãTech Meetup ãGoã§äœã決æžãµãŒãã¹ããã«BASE BANK Sectionãã2åç»å£ããŸããã upsider.connpass.com youtu.be ã©ããªã€ãã³ã? ä»åã®ã€ãã³ãã¯GoÃæ±ºæžãšããããŒãã§ãéçºæã®å·¥å€«ããããŸã§çŽé¢ãã課é¡ãªã©ã«ã€ããŠGoèšèªãé§äœ¿ããŠã«ãŒã決æžäºæ¥ãè¡ã3瀟ãããããäºäŸã玹ä»ããã£ã¹ã«ãã·ã§ã³ãããã®ã§ããã ãäžç·ãããŠããã ããUPSIDERããŸãKanmuããŸæ¹ããŠæè¬ç³ãäžããŸããããããšãããããŸããïŒ åœæ¥ã¯åå ãã3瀟ã®çºè¡šãšãGoãæ±ºæžã«ã€ããŠã®ããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããŸããã åœæ¥ã®ããã·ã¥ã¿ã°ã¯ #go_tech_meetup ã§ãããåœæ¥ã®ãã€ãŒããé¡ããšçºè¡šæã®çãäžãããäŒããããšæããŸããæ±ºæžãªãã§ã¯ã®ã³ã¢ãªè³ªåãé£ã³äº€ã£ãŠããã®ã§ãã²çºããŠã¿ãŠãã ãã! LTããå
容ã«ã€ã㊠ä»åLT㯠BASE BANK Sectionã®æŸéª( @applepine1125 ) ãBASEã«ãŒããšãããããã¯ãã§è¡ã£ãŠããæ±ºæžã·ãã¥ã¬ãŒã·ã§ã³ãã¹ãã«ã€ããŠçºè¡šããŸããã basecard-lp.thebase.com speakerdeck.com è€éãªã«ãŒã決æžã®ä»æ§ãååšããäžã§ã質ã®é«ãæ±ºæžæ©èœãæäŸããããã«ã©ã®ãããªãã¹ããè¡ã£ãŠãããã«ã€ããŠçºè¡šããŸããã ä»åçºè¡šããæ±ºæžé åã«éãããè€éãªãã¡ã€ã³ç¥èã仿§ãååšããäºæ¥ã§ã¯ãã©ã®ããã«ãããã¯ãã®è³ªãæ
ä¿ããã®ãããã®ããã«ã©ããã£ããã¹ããè¡ãã¹ããªã®ãã«ã€ããŠçèããæ©äŒãå€ãããšæããŸãã ä»åã®çºè¡šã§ã¯ãã·ãã¥ã¬ãŒã·ã§ã³ãã¹ãã®å®çŸæ¹æ³ã ãã§ãªãã ãªãã·ãã¥ã¬ãŒã·ã§ã³ãã¹ããè¡ãããšæã£ãã®ã? ã«ã€ããŠããã®èæ¯ã«ããè€éãªæ±ºæžã®ä»æ§ãèžãŸããŠè©±ããŸãšããŸããã ãªããã¹ããããã®ã?ãšããç¹ã«ã€ããŠã¯æ±ºæžé åã«éããã©ã®ãããã¯ãã§ãèããå¿
èŠããããšæã£ãŠãããä»åã®çºè¡šãéããŠãã®1äºäŸããæäŸã§ããã°ãšæã£ãŠçºè¡šãããŸããã ããã«ãã£ã¹ã«ãã·ã§ã³ã®å
容ã«ã€ã㊠å瀟ã®çºè¡šåŸãååã§ããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããæŸéª( @applepine1125 )ãšæž
æ°Ž( @budougumi0617 )ãåå ããŸããã åœæ¥ã¯ä»¥äžã®æ§ãªããŒãã§ãã£ã¹ã«ãã·ã§ã³ãè¡ãããããã©ãŒã ãã§ãªãtwitteräžã§ã倧ããªçãäžãããèŠããŠããŸããã å瀟ã®ã¢ãŒããã¯ãã£çŽ¹ä» GoãæžããŠããŠããã£ããšæãããš æ®é«ç®¡çãæ±ºæžãªã©ã³ã¢æ©èœã®ãã¹ãæŠç¥ éçºããŒã æ§æãéçºããã»ã¹ã§æ°ãã€ããŠããäº æåŸã«å®£äŒ BASE BANK Sectionã§ã¯ãä»åçºè¡šãããŠããã ããBASEã«ãŒãã ãã§ãªããBASEãå©çšããã·ã§ãããªãŒããŒããã®ãã£ãã·ã¥ãããŒãæ¹åããããã®æ§ã
ãªãããã¯ãéçºãè¡ã£ãŠããŸãã Goãäžå¿ã«Python, PHPãªã©ã®èšèªãé§äœ¿ãããã«ãµã€ã¯ã«ãšã³ãžãã¢ãšããã¹ã¿ã³ã¹ã§ããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã«è§Šãã ãã§ãªããäžé£ã®éçºããã»ã¹ã«ãšã³ãžãã¢ãäž»äœçã«é¢ãã質ã®é«ãã¹ããŒãã£ãªã¢ãŠãããããè¡ã£ãŠããŸãã basebook.binc.jp ãããªãšã³ãžãã¢ããªãŒããŒã·ããããã£ãããŒã ã§ãããã¯ãã®ã°ããŒã¹ã«ææŠãããïŒãšæã£ãæ¹ãä»åã®çºè¡šã§éèæ±ºæžé åã«èå³ãæã£ãæ¹ã¯ãã²äžèšã®ç޹ä»è³æãåéãã芧ãã ãã! ä»ååå ããã¡ã³ããŒãžã®twitter DMããã§ããåŸ
ã¡ããŠãããŸã! speakerdeck.com open.talentio.com
2022/07/23ïŒåïŒã«éå¬ããã ISUCON 12 *1 äºéžã« BASE ãã8åã®ãšã³ãžãã¢ã6ããŒã ã«åãããŠåå ããŸããã åå è
ã®ææ³ããå±ãããŸãïŒ isucon.net ããŒã ãSpeed of Soundã æçµã¹ã³ã¢ 4,711ç¹ ããã210äœã§ãããåœæ¥ã®äœæ¥ãªããžããªã¯ä»¥äžã§ãã github.com æž
æ°ŽïŒ@budougumi0617 ïŒ BASE BANK Section ããã¯ãªãŒãã® @budougumi0617 ã§ãã ISUCON11ã«åŒãç¶ã2åç®ã®åå ã§ãããåååæ§ç°å¢æ§ç¯ãããã«ãŠã§ã¢ã®èšå®å€æŽãç£èŠçšã®ããŒã«ã®å°å
¥ãªã©ãäž»ã«å¯Ÿå¿ããŸããã æ§æç®¡çããããæ¬²ãåºããããŠããªãè¶³ãåŒã£åŒµã£ãŠããŸããŸããã /etc ãã£ã¬ã¯ããªä»¥äžã®èšå®ãã¡ã€ã«ã®ããŒããã·ã§ã³ã倿Žãã·ã³ããªãã¯ãªã³ã¯åããå¯äœçšã§ PAM ãŸããã®æåããããããã sudo ã³ãã³ããåããªããªã£ãŠCloudFormationãããçŽãã¯ãã« MySQLã® my.conf åšãã®ãã¡ã€ã«ãã·ã³ããªãã¯ãªã³ã¯åããããã¹ããŒã¯ãšãªèšå®ã®æå¹åã«æéãæº¶ãã AppArmorãåã£ãŠããã¯ããªã®ã§è¬ ã¹ããŒã¯ãšãªãã°ã確èªããŠMySQLã® PREPARE ãæå¶ãã ãæ±ºãŸãã®å€æŽ ãããããšã¯ã»ãšãã©æå¹ãªäžæãæãŠãŸããã§ããã alp ã³ãã³ãã netdata ã®å°å
¥ãããŠããã®ã«ã¹ããŒã¯ãšãªçµæããããã¢ãããŒããèããªãççªçãªè¡åã«ãªã£ãŠããŸããã ãŸããæè¿ã®ISUCONã§å€çšãããŠãã env.sh ãsqlãã¡ã€ã«ã« ALTER ã INDEX ã远èšããã° initialize ã§æ¯åããŒãã«ãåæåããããããªæ§æã«éŠŽããŠããããæéåã£ãŠãããšãããå€ãã£ãã§ãã çµç€ã§ã¯ãã³ãããŒã¯ã®æ€èšŒãéããªããªã£ãŠããŸã埩æ§ã«æéåããŸãããã·ãŒãããŒã¿ãã¡ã€ã«ãèŠåœãããªãã£ãã®ã§å®æã«DBäžã®ããŒã¿ãæ¶ããã®ãåå ã§ãããä»ã®ã€ã³ã¹ã¿ã³ã¹ããããŒã¿ããã³ãããŠåŸ©æ§ããŸããããç«¶æãšã¯ãã宿ã«ããŒã¿ããŒã¹ã®ããŒã¿ããµã£é£ã°ããŠã¯ãããªããšããããšãå確èªããŸããã sqliteãæèãããšãããŸã§ããã«ããã¯ã®è§£æ¶ãã§ããéåžžã«æããçµæã«ãªã£ãã®ã§æ¥å¹Žã¯ãªãã³ãžãããã§ãã æ°žé(@glassmonekeyïŒ ããã«ã¡ã¯ @glassmonekey ã§ããä»åååå ã§ããååã«èªãããã®ã§ããæ©äŒãšæãåå ããŠã¿ãŸããã ç¹ã«åæ
ããäºå®ã¯ãªãã£ãã®ã§ãããMySQLã ããšããããå¥ãããšãã£ãè¥å¹²ã€ã³ãã©å¯ãã®äœæ¥ããããããŸããã ãµãŒããŒã«sshããŠ/etc以äžãè§Šãçµéšã¯ä¹
ããããŠãªãã£ãã®ã§æãããæ°æã¡ã«ãªããŸããã åçç¹ãšããŠã¯ããµãŒããŒæ§æã®åæ æŒããšãã§æéãæº¶ããã¿ã€ãã³ã°ãšããã£ãã®ã§ãã¢ããªã±ãŒã·ã§ã³ã®æ¹ä¿®ã«ãããŸã§æéãåãããšãã§ããªãã£ãããšããããŸãããã€ã³ãã©æ§æã¯AnsibleåãããªãããŠãããããªããšæã£ããããŸããã çæéã§ãã¡ã€ã³ç¥èã®åžåãããµãŒãã¹ç¹æ§ãèªã¿è§£ããšãããæ±ãããã®ã§ã楜ããæéã§ãããæ¬¡åã¯äºéžçªç Žãç®æããã â åç° ( @yopidax ) ä»åååå ã§ãããåã
ããISUCONèªäœã¯æ°ã«ãªã£ãŠããã®ãšååã®æž
æ°Žããã«èªããã®ããã£ããã§åå ããŠã¿ãŸããã ããŒã ã§ã®äœæ¥åæ
ã¯ç¹ã«ç¡ãã£ãã®ã§ãããç§ã¯MySQLã®ã¹ããŒã¯ãšãªãèŠã€ã€ããã«ããã¯ãç¹å®ãindex貌ã£ããã¢ããªã±ãŒã·ã§ã³åŽã®æ¹åãããŠããŸããã察çãšããŠç·Žç¿ãªãã§éå»åé¡ãšè§£èª¬ãçºãããããããè¡ããæãã ã®ã§ãããçµæããŸãæãä»ããããšãåºæ¥ãæºåäžè¶³ãçæããŸããã çãæéã§ä»æ§ãèªã¿è§£ãã€ã€æ®æ®µäžç·ã«åãååãšã¯ã€ã¯ã€ããªããé²ããããšèªäœã¯æ¥œããã£ãã®ã§ãäºåç·Žç¿ãè¡ãã€ã€æ¬¡åãæ¯éåå ããããšæããŸãïŒ ããŒã ãngswã æçµã¹ã³ã¢ 3,614ç¹ @ngsw ã€ã³ãã©åŽã®åé¡ã«è³ãåã®ããã«ããã¯ãããããã©ãã«ãã§ããŸããã§ããã ãªã®ã§ä»¥äžãè¡ãªã£ãã®ã§ãããç¹æ°çã«ã¯ã»ãŒæå³ããããŸããã§ããã Dockerã¯ãã sqliteã/dev/shm äžã«é
眮(ããããããOSåèµ·å詊éšã1.5hããã£ã) ISUCONåå (ããã³ååäºéžåé¡ãå©çšããŠã®äºåã®ç€Ÿå
ç·Žç¿äŒ)ã§èªèº«ã®èŠæãªé åããç®ã«èŠããŠãããã®ã§ãããéåžžã«é¢çœãã£ãã§ãã ãªã®ã§çãåããéèŠãšæããŸãããäºéžééè
ã®ãšã³ããªãèªãã ãããªããããã³ãããŒã«ãŒå
¬éãããã®ãåŸ
ã¡ããã§ãã dockerãèµ·åããŠãEC2ã§ããããã¯ãããŠäºã
ã¿ãããªã®ã¯ããºã«çãªé¢çœãããããŸããã ãªãã¬ãŒã·ã§ã³ãèº«äœæ§ã䌎ã£ãŠãããšãã«èšªããäžèœæãããããã®ããã«çŽ æ¯ãéèŠãªãã ãããªã£ãŠæããŸããã ããŒã ãç¡è £é£ãã° éããªããªã ãªãæãã æçµã¹ã³ã¢ 7,472ç¹ @cureseven ä»å¹ŽãISUCON10ã§æ¬æŠã«äžç·ã«åºå Žãã瀟å€ã®å人ãšåå ããŸãããã7,472ç¹133äœã§æéããŸããã ç§ã¯ä»å¹Žãã¢ããªã±ãŒã·ã§ã³ãæ
åœããŸãããä»åã®åé¡ã¯sqliteãmysqlã«çœ®ãæããäœæ¥ãçµãã£ãŠããindexã貌ãããã®äžã§ããã«ããã¯ã®ç¹å®ãããããšæããN+1ãæœ°ãããæ©æreturnããç¡é§ãªèšç®ãçããŠãããããŠãããæéãæ¥ãŠããŸããŸããã ç·Žç¿ã®ææãããååã¯æ¯åäžæããããæ°åã¯1äœã«ããããããã®ã§ãããsqliteã®çœ®ãæãã«ãããŠã®initializeãæéå
ã«çµãããªãåé¡ãªã©ã«ã¶ã€ããåŸåã¯ç¹æ°ãäŒžã³æ©ã¿ãŸããã ç°¡åã«è§£æ±ºã§ããªããšããå¥ã®æãèãããäžç·ã«æ¹éãèããããããªã©ãããŒã ã®æè»ãªåãæ¹ã課é¡ã§ãããå人çã«ã¯å»å¹Žãããææ°ãæãŠãŠæé·ãæããŸããã æ¬æŠåé¡ãšããŠåºãŠããããããªããããªé£æåºŠã®é«ãåé¡ã§å€§å€åºæ¿ã«ãªããŸãããéå¶ã®çæ§ããããšãããããŸããã ããŒã ãexample.comã æçµã¹ã³ã¢ 3,119ç¹ æšªå±± ä»åã§3åç®ã®åæŠã§ãã ã¯ãšãªäžå¿ã«æåã¯èŠãŠããexplainãªã©ã®ã¯ãšãªå®è¡ããªããindexã®å¹æã確èªããŠãããŸããã ãã®ããšã¯N+1ã®å®è£
éšåãä¿®æ£ããŠã«ãŒãããinsertåŠçããã«ã¯åŠçã«æžãçŽãããããŸããã çµæãšããŠã¹ã³ã¢ã¯äŒžã³ã3,119ç¹ãšãªããŸããã ååãåã
åã¯3人ã§åå ããŠããŸãããä»åã¯è«žäºæ
ã§1人ã§ã®åæŠãšãªããã®é¢ã§ã¢ãããŒã·ã§ã³ãä¿ã£ãŠå¯Ÿå¿ããã®ãé£ããã£ãã§ãã æ¬¡åã¯ãŸã3人ã§åæŠããŠã¯ã€ã¯ã€ããªãããããããšæããŸãã ããŒã ãä»ããããŠã³ããŒãã æçµã¹ã³ã¢ 0ç¹ (èšæž¬å€±æåã®æé«ã¹ã³ã¢ã¯1,400ç¹å°(1,466ïŒ) ç°äž @tenkoma åããŠISUCONã«åå ããŸããã ãŸããåèå®è£
ãPHPã«å€æŽåŸã®åæã¹ã³ã¢ã1,000ç¹ãããã«ãªããŸããã ãã®åŸãMySQLãµãŒããã¢ããªã±ãŒã·ã§ã³ãµãŒããšåããŠ1,400ç¹ãããã«ã SQLã§è€æ°ååŒã³åºããŠãããã®ããŸãšããããã€ã³ããã¯ã¹ã远å ããŠã¿ããã®ã®å¹æãåºãã æåŸã«ãSQLiteãã¡ã€ã«ãMySQLã«ç§»è¡ããããã«ä»¥äžã®äœæ¥ãããŸãããããã³ãããŒã¯åã®åæåãçµãããªããªã£ãŠããŸãã0ç¹ã§çµäºããŸããã ã¢ããªã±ãŒã·ã§ã³ãã tenant DBã®åç
§å
ã admin DBãšåãæ¥ç¶ã«å€æŽ SQLite ãã¡ã€ã«ãdump ããŠ1ãã¡ã€ã«ã«ããåæåã·ã§ã«ã¹ã¯ãªããã§MySQL DBã«æå
¥ ãŸãåå ããæ©äŒãããã°ããŒã ã§åå ãããã§ãã ããŒã ãIMSã æçµã¹ã³ã¢ 0ç¹ çç°ïŒ @tac_tanden ïŒ ä»åã瀟å€ã®å人ãš3人ã§ååæŠã§ãããæçµã¹ã³ã¢ã¯0ç¹ïŒ0ç¹ã«ãªãåã®æå€§ã¹ã³ã¢ã¯4,821ç¹ã§ããïŒã§éåžžã«æããæããŠããŸãã ç«¶æäžã¯äž»ã«ã¯ãšãªã®ãã¥ãŒãã³ã°ãšã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å€æŽãnginxã®ãã¥ãŒãã³ã°ãªã©ããã©ã€ããŠããŸããïŒããå
šç¶ã¹ã³ã¢äžãããŸããã§ãã...ïŒãMySQLã®ç§»ç®¡ã«é¢ããŠã¯è©Šã¿ãŸããããæéå
ã«å®äºãããããšãã§ããŸããã§ããã ããã«ããã¯ãå·éã«èŠå®ããããã®ããŒã«ã䜿ããããã«ããã®ããåºç€ã«çŽ æ©ãèšå®ã§ããããã«ããã®ã次åã®èª²é¡ãªã®ã§ãæ¥å¹Žåºå Žããåã«ç·Žç¿ããããšæããŸãïŒ æåŸã« ä»å¹ŽãææŠã®ãããã®ããåé¡ãåœæ¥ã®å¿«é©ãªã³ã³ãã¹ãç°å¢ãæºåããŠããã ããISUCONéå¶ã®çæ§ã«æè¬ããããŸãã 瀟å
ã§ã¯ #club-isucon ãã£ã³ãã«ã§ISUCONã«åããæ
å ±äº€æãååç·Žç¿ãããŠããŸããã æ®å¿µãªããä»åã®äºéžãçªç Žã§ããåŒç€Ÿã¡ã³ããŒã¯ããŸããã§ããããã é人ãæããwebããã©ãŒãã³ã¹ãã¥ãŒãã³ã° ãã®å匷äŒãªã©ãäŒç»ããŠæ¥å¹Žã®ãªãã³ãžã«åãåãåºããããšæããŸãïŒ å®£äŒ BASEã§ã¯è³Œå
¥è
ãã·ã§ãããªãŒããŒã®çæ§ã®ããšã第äžã«èããããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã«ãèå³ããããµãŒããŒãµã€ããšã³ãžãã¢ã®ä»²éãåéããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ã宿œããŠãããŸãã®ã§ããã²ãæ°è»œã«ãåãåãããã ããã open.talentio.com open.talentio.com *1 : ãISUCONãã¯ãLINEæ ªåŒäŒç€Ÿã®åæšãŸãã¯ç»é²åæšã§ãã
2022/7/21(æšææ¥)ã«ãªã³ã©ã€ã³ã§éå¬ãããã Looker User Meetup Online #8 ãã« BASE BANK Dev Groupã®æ°žé(@glssmonekey)ãç»å£ããŸããã looker-japan-user-group.connpass.com ã€ãã³ãã«ã€ã㊠ä»åã®ããŒãã¯ãLookerãŸã§ã®ããŒã¿ããªããªãŒãã¿ããªã©ãããŠãïŒãã§ããã å瀟ã®LookerãŸã§ã®ããŒã¿ãã€ãã©ã€ã³ã®æ§æãããŒã æ§æãªã©ãLookerãäžå¿ã«ããããŒã¿ã«é¢ãã話é¡ã§ããããããŸããã åœæ¥ã¯åŒç€Ÿå«ããŠæ¬¡ã®4ç€ŸïŒæ¬ç§°ç¥ïŒã®çºè¡šãè¡ãããŸããã Uniposæ ªåŒäŒç€Ÿ æ ªåŒäŒç€Ÿã¿ã€ããŒ æ ªåŒäŒç€Ÿãã£ãŒããã©ãŒã¹ BASEæ ªåŒäŒç€Ÿ åœæ¥ã®Twitterããã·ã¥ã¿ã°ã¯ #lookermeetup ã§ããã ç»å£å
容ã«ã€ã㊠ä»åãæ°žéïŒ @glassmonekey ïŒ ãçºè¡šããå
å®¹ã¯æ¬¡ã®ã¹ã©ã€ãã§ãã ä»åã¯ã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢ã®èŠç¹ãããããªãªãŒã¹ãµã€ã¯ã«ã«ããŒã¿åæåºç€ã®æ§ç¯ãå«ããŠè¡ãããšãã®éèŠæ§ãšããã³ã³ã»ããã§ããŒã¯ããŸããã æ¥ã
å€åããããžãã¹èŠä»¶ã«å¿ããŠãèŠããããŒã¿ã¯å€åããŠããããšã§ãããã ãã®ãããªèŠæããããšä»¥äžã®ãããªæ¹æ³ãå€ãã®ã§ã¯ãªãã§ããããïŒ ããŒã¿åºç€ã®ã¹ããŒãã倿Žãã åæã®ããã®SQLã倿Žãã etc... å€ãã®å Žåã§å°éã®ããŒã ãããããã¡ã³ããã³ã¹ããŠããã±ãŒã¹ãå€ãããã«æãããŸããã ãã®å Žåã ãšããžãã¹ã®å€åãšããé床ã«é©å¿ããããšãé£ããã®ã§ã¯ãªãã§ããããïŒ ãã®ããç§éã®ããŒã ã§ã¯ãããŒã¿åæåºç€ã®æ§ç¯ããªãªãŒã¹ãµã€ã¯ã«ã«å«ããŠæ§ç¯ããããã«ããŠããŸãã ãã®ããªãªãŒã¹ãµã€ã¯ã«ã«ããŒã¿åæåºç€ã®æ§ç¯ãå«ããŠè¡ãããšãã®å®çŸã«ãLookerã¯ãšãŠã圹ç«ã£ãŠããŸãã çŸç¶ã¯ 掟çããŒãã« ã䜿ãããšã§ãæ¥ã
å€åããããžãã¹èŠä»¶ãæã
èªèº«ã§èŠããããŒã¿ãæ§ç¯ããŠããŸããããã«ããããªãªãŒã¹ã«å¿ããææšãã¹ããŒãã£ãŒã«åæããäœå¶ãå®çŸããŠããŸãã ææ³ æŽŸçããŒãã«ã掻çšããŠãããã®ã®ãä»åŸã®å±æãããŒã¿ã®ç²åºŠã§è¿·ã£ãŠãç¹ãè²ã
ãã£ãã®ã§ãã€ãã³ãã«ãŠ dbt ã PDT ã®æŽ»çšäºäŸãå®éã«èŽãããšãã§ããæé«ã«ããããããæéã§ããã çŸç¶CDCã«embulk+ããŒãžã¯ãšãªã§é 匵ã£ãŠãã®ã§ãããdbtã䜿ããšããå°ã楜ã«ã§ãããã¿ãããªãšãããç¥ãããšãã§ããã®ã§ãå®éã«æ¥åã§ãåãå
¥ããŠã¿ãããªãšæããŸããã ä»ã«ã話é¡ãšããŠããŒã¿ã®ãã¹ãæŠç¥ãäžãã£ãŠããã®ã§ãæ¹ããŠä»ç€Ÿããã®äºäŸããšãŠãèããŠã¿ãããªãšæããŸããã ããŒã¿åºç€ã®ãã¹ãèšèšã¯çç®æ€èšã«ã€ããŠãªãç¶æ
ãªã®ã§ããã²åŠã³ãã!! å®£äŒ BASE BANKããŒã ã§ã¯ Go, Python, PHPãäžå¿ã«ãããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã§éçºããŠããŸãã ãŸãéçºã ãã§ãªããæ©èœãã°ããŒã¹ã»åæã»ãµããŒããŸã§æ
åœããŸãã basebook.binc.jp ãããªéçºã¹ã¿ã€ã«ã®ããŒã ã§æ°èŠäºæ¥éçºã«ææŠããŠã¿ãããïŒãšæã£ãæ¹ã¯ãã²äžèšã®åéãã芧ãã ããã open.talentio.com
2022/6/28(ç«)ã«ãªã³ã©ã€ã³ã§éå¬ãããã æ°èŠäºæ¥ãããã¯ãéçºæã®æè¡éžå®ã©ããã£ãïŒ -ã«ã±ãã·ÃLINEÃBASEã®éçºè
ãæ¯ãè¿ãæè¡éžå®ããã»ã¹ãšå
ç- ãã«BASEãã2åãç»å£ããŸããã techplay.jp ã€ãã³ãã«ã€ã㊠ä»åç»å£ãããŠããã ããã€ãã³ãã¯æ°èŠäºæ¥ãããã¯ãéçºæã®æè¡éžå®ã«ã€ããŠå瀟ã®äºäŸã玹ä»ãããã®ã§ãããäž»å¬ã®æ ªåŒäŒç€Ÿã«ã±ãã·ããŸãèªãããããšãããããŸããã åœæ¥ã¯åŒç€Ÿå«ããŠæ¬¡ã®3ç€ŸïŒæ¬ç§°ç¥ïŒã®çºè¡šãšããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããŸããã æ ªåŒäŒç€Ÿã«ã±ãã· LINEæ ªåŒäŒç€Ÿ BASEæ ªåŒäŒç€Ÿ åœæ¥ã®Twitterããã·ã¥ã¿ã°ã¯ #TechKKHS ã§ããã ç»å£å
容ã«ã€ã㊠ä»åãBASE BANKããŒã ã®æ³å·ïŒ @gimupop ïŒãšæž
æ°ŽïŒ @budougumi0617 ïŒãååã§çºè¡šããå
å®¹ã¯æ¬¡ã®ã¹ã©ã€ãã§ãã ç»å£å
容ã«ã€ããŠïŒæ³å·ïŒ æ°èŠäºæ¥ãè¡ãäžã§ã®å¿æ§ãããã€ã³ããäžå¿ã«ãçµéšãã話ããŸããã ãããŠãããçŸåšã«ã©ãã€ãªãã£ãŠãããã®æ¯ãè¿ããå«ããŠè©±ãããŠããã ããŸããã æã¡åž°ã£ãŠãããã ããããã®ã¯åæ°ãšããèšãæ¹ãããŸãããæ°èŠäºæ¥ã®ãããŠã¯ããã¯ãããæå³å±äººçãªäººã®æ±ºæãšãããã®ãå¿
èŠã§ãã 仿¯ãè¿ã£ãŠã¿ããšãæè¡éžå®æã®æ±ºæãããã®åŸã®ããŒã ã®ç²Ÿç¥ã®æ žã«ãªã£ãŠãããšæ°ãä»ããŸããã åŒãç¶ãã¢ãžãªãã£ãèœãšããªã圢ã§ãããŒã æ¡å€§ãããã¢ãŠããããã®ã¯ãªãªãã£ããããŠããããšã«åãçµãã§è¡ãããšæããŸããã ç»å£å
容ã«ã€ããŠïŒæž
æ°ŽïŒ æ°èŠäºæ¥ãè€æ°ãªãªãŒã¹ãã°ããŒã¹ããã€ã¥ããŠããããã«ããŒã ã§å€§äºã«ããŠããããšãšãã®ããã«éžæããæè¡ã«ã€ããŠè©±ãããŠããã ããŸããã æè¡éžå®ã¯ããŒã ãäœã倧äºã«ããŠãããã«ãã£ãŠå€§ããå€ãã£ãŠããããšæããŸãã ä»åã®ç»å£ã§ã¯ç¹å®ã®æè¡ã®ç޹ä»ãšããããã ãäœãåºæºã«æè¡ãéžãã ã®ãïŒãããªãªãŒã¹ãã4幎ééçºãç¶ããŠããŠãã®å¹æãã©ãæããŠãããïŒã ãäžå¿ã«è©±ããŸãšããŸããã ãŸããèªåãšããŠãä»äœ¿ã£ãŠããæè¡ã®ã©ãã«è¯ããæããŠæŽ»çšãç¶ããŠããã®ãèŠã€ãçŽãããæ©äŒã«ãªããŸããã ãããããããããã¯ãããã¡ã€ã³ã«éäžããããšããç®çãå¿ããã«æè¡ãšåãåã£ãŠããããšæããŸãã ããã«ãã£ã¹ã«ãã·ã§ã³ã«ã€ã㊠åå人ã®çºè¡šåŸã¯3瀟ååã§ããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããåœæ¥ã¯æ¬¡ã®ãããªè©±é¡ãæãããŸããã ãšã³ãžãã¢ä»¥å€ãå«ãããããŒã ã«ã¯ã©ããªããŒã«ã®äººãäœäººãããããã®ã ããã£ã±ãããããŠããã°ããã£ããªããšåŸæããŠããããš æ°èŠéçºã«åããŠããããªäºº ããã«ãã£ã¹ã«ãã·ã§ã³ã®å
容ã¯TECH PLAYããŸã®ã€ãã³ãã¬ããŒãã§ç¢ºèªã§ããŸãã techplay.jp å®£äŒ BASE BANKããŒã ã§ã¯ Go, Python, PHPãäžå¿ã«ãããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã§éçºããŠããŸãã ãŸãéçºã ãã§ãªããæ©èœãã°ããŒã¹ã»åæã»ãµããŒããŸã§æ
åœããŸãã basebook.binc.jp ãããªéçºã¹ã¿ã€ã«ã®ããŒã ã§æ°èŠäºæ¥éçºã«ææŠããŠã¿ãããïŒãšæã£ãæ¹ã¯ãã²äžèšã®åéãã芧ãã ããã open.talentio.com
ããã«ã¡ã¯ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãããŠãããŸãæ€ç°ã§ãã4æ18æ¥ã« ã°ããŒã¹ãã©ã³ ã®æäŸãéå§ãããŸãããä»åãã®éçºãããžã§ã¯ãã«ãŠããªã¹ã¯ç®¡çãã«åãçµãã§ã¿ãã®ã§ãã®ã話ãããŸãã Index ãªã¹ã¯ç®¡çã«åãçµãã èæ¯ ãããããªã¹ã¯ç®¡çãšã¯ å
·äœçãªãªã¹ã¯ç®¡çã®é²ãæ¹ ãªã¹ã¯ç®¡çã¯ã©ã®ãããªãããžã§ã¯ãã§å®è¡ãã¹ãã å®éã«ã©ã®ããã«åãçµãã ã åãçµãã§è¯ãã£ãããšãšãä»åŸçºå±ããããããš ãªã¹ã¯ç®¡çã«åãçµãã èæ¯ ãŸãä»åãªããªã¹ã¯ç®¡çã«åãçµãã ããã話ããŸããBASEã§ã¯çŸåšå€§å°æ§ã
ãªéçºãããžã§ã¯ããåæé²è¡ããŠããŸãããæ¥ã«æ¥ã«ãã®è€éæ§ã¯å¢ããŠããŸãã幎æã远ãããšã«ç©ã¿éãªã仿§ãæ¥ã«æ¥ã«æ¡å€§ããŠãããªããžããªïŒãœãŒã¹ã³ãŒã矀ïŒâŠãšãè€éæ§ã»é£æåºŠã¯å¢ãäžæ¹ã§ãããã®äžã§ãéçºãããžã§ã¯ãããããããäžç¢ºå®æ§ãé«ãããšèšãããããšãåœããåã®ç¶æ³ã«ãªã£ãŠããŸããäžç¢ºå®æ§ãšã¯ã€ãŸããªã¹ã¯ã®ããšã§ãããã®äžç¢ºå®æ§ã»ãªã¹ã¯ã«ç«ã¡åããã«ã¯ãªã¹ã¯ç®¡çãè¡ã£ãŠããããšãæå¹ãªææ®µã§ãããšèªèº«ã®çµéšããèããŸãããåé ã«è§Šããã°ããŒã¹ãã©ã³ãããžã§ã¯ã㯠ãããã·ã§ã³ã¯ãªãã£ã«ã«ãªãããžã§ã¯ãã ã§ãã£ãããšã ãè€æ°ã®ããŒã ããã¡ã³ããŒãéãŸã暪æçã«éçºããã¿ã¹ã¯ãã©ãŒã¹åã®ãããžã§ã¯ãã ã§ãã£ãããšããšããç¹ã§ãªã¹ã¯ç®¡çãããã«ã¯ãã£ãŠããã®ãããžã§ã¯ãã§ãããšèããé¢ä¿è
ã«åŒã³ãããªã¹ã¯ç®¡çã«åãçµãã§ã¿ãããšãšãªããŸããã ãªããç§èªèº«ã¯PMBOKãããŒã¹ãšããŠãªã¹ã¯ç®¡çãåŠã³ãŸããã®ã§ããããèå³ãããæ¹ã¯PMBOKã®æžç±çãããããŠã芧ããã ãããšå¬ããã§ãã ãããããªã¹ã¯ç®¡çãšã¯ ãªã¹ã¯ç®¡çãšã¯ããããžã§ã¯ãã«ãããæœåšçãªãªã¹ã¯ãæŽãåºãããªã¹ã¯ãé¡åšåããªãããã«å
æãæã€ãããžã§ã¯ãç®¡çææ³ã®1ã€ã§ãããŸããä»®ã«ãªã¹ã¯ãé¡åšåããŠããŸã£ãæã®ããã«ããããã察åŠã決ããŠããããšã§åé¡ã®åœ±é¿ãæå°éã«æããè¡çºã§ãããªã¹ã¯ç®¡çãè¡ãããšã§ãåé¡ãé²ãããšãã§ãããŸãåé¡ã«çºå±ããå Žåãå³åº§ã®å¯Ÿå¿ãå
åãããŠã§ãããããèšãã°è»¢ã°ã¬å
ã®æãšããŠæ©èœããããšãã§ããŸãããããžã§ã¯ããããžã¡ã³ãã®æ Œèšãšã㊠ããªã¹ã¯ãå¶ããè
ã¯ãããžã§ã¯ããå¶ãã ãšãã£ãèšèãããã»ã©ãªã¹ã¯ç®¡çã¯éèŠãªããã»ã¹ã§ãã®ã§ãã²ãåèããã ãããã§ãã å
·äœçãªãªã¹ã¯ç®¡çã®é²ãæ¹ å
·äœçãªãªã¹ã¯ç®¡ç衚ãèŠãŠé ããã»ããçè§£ããããã®ã§äžèšã®ãµã³ãã«è¡šãã芧ãã ããã â»ãµã³ãã«ã®ããã°ããŒã¹ãã©ã³ãããžã§ã¯ãã®å
容ãšã¯é¢é£ãããŸãã ãã®ãããªãªã¹ã¯ç®¡çç°¿ãäœæãéçšããŠãããŸãããµã³ãã«ã®ããã·ã³ãã«åããŠããŸãããå®éã«ã¯ã起祚è
ã起祚æ¥ãåèæ¬ãªã©ç®¡çäžå¿
èŠã ãšæãé
ç®ã¯é©å®è¿œå ãã ããã ç¶ããŠå®éã®é²ãæ¹ããµã€ã¯ã«ã«ã€ããŠè§£èª¬ããŸãã ãã¡ãã®å³ã®ããã«1é±éçšåºŠã®ãµã€ã¯ã«ã§ããªã¹ã¯ã®ç¹å®â察çã®ç«æ¡â察çã®å®è¡âã¢ãã¿ãªã³ã°ããç¹°ãè¿ãã®ãåºæ¬ã§ãã â ãªã¹ã¯ã®ç¹å®ãšåªå
é äœä»ã ãããžã§ã¯ãã®ããã¯ãªããéå§ãããããšã¯ã§ããã ãæ©æã«ãªã¹ã¯ç¹å®ã®ããã®äŒè°ãéããŸãããããªã¹ã¯ã¯ãããžã§ã¯ããéå§ãããæç¹ããæœåšçã«ååšãããã®ã§ãããžã§ã¯ãã®è
åšãšãªããã®ã§ãã1æ¥ã§ãæ©ããªã¹ã¯ãç¹å®ã察çãå®è¡ããããšã§ãããžã§ã¯ãã®æå確床ãé«ãŸããŸãã1ã2æéã»ã©é¢ä¿è
ã«ãŠãªã¹ãã¢ãããè¡ããŸãããã ãªã¹ã¯ãæŽãåºããããšã¯ããªã¹ã¯ã«å¯ŸããŠåªå
é äœã決ããŠãããŸããä»®ã«ãªã¹ã¯ã®æŽãåºããè¡ã£ãŠ20ä»¶ã®ãªã¹ã¯ããªã¹ãã¢ããããããšããŠããæçŽã«ãªã¹ãã®äžããé çªã«ãã¹ãŠå¯ŸåŠãããã®ã¯å¹ççã§ã¯ãããŸãããçºç確çãšåœ±é¿åºŠåããæ±ºå®ããããããããåãããäžã§åªå
åºŠãæ±ºå®ããåªå
床ãé«ããã®ãã察åŠãæ€èšããŠãããŸãããããªããçºç確çãšåœ±é¿åºŠåãã¯3段éã§æ±ºå®ããŸããããã¡ãã¯åœäºè
ã§çžè«ããŠæ±ºå®ããã°ããçšåºŠæèŠå€ã§ãã£ãŠãåé¡ãããŸãããåªå
åºŠãæ±ºãŸãã°ããã®ã§ããã®æ°å€ã«å³å¯æ§ã¯å¿
èŠãããŸããã â¡ãªã¹ã¯ãžã®å¯Ÿå¿æŠç¥ïŒå¯Ÿçã®ç«æ¡ïŒ ãªã¹ã¯ã«ã¯ããªã¹ã¯ãé¡åšåããªãããã«ããäºå察çããå®è¡ãã¢ãã¿ãªã³ã°ããããšãæå¹ãªææ®µã§ãããªã¹ã¯ãžã®å¯Ÿå¿æŠç¥ã¯ä»¥äžã®4çš®é¡ã«å€§å¥ãããŸãã çš®é¡ èª¬æ åé¿ ãªã¹ã¯ãé¿ãããããªã¹ã¯ã®çºçåå ãåãé€ãããããªã¹ã¯ã®åœ±é¿ãé¿ããçºã«ãããžã§ã¯ãã®èšç»ã倿Žããããš è»¢å« ãªã¹ã¯ã®åœ±é¿ã責任ãšãšãã«ç¬¬äžè
ãžç§»è»¢ããããš è»œæž ãªã¹ã¯ã®çºç確çããã³åœ±é¿åºŠããããžã§ã¯ãã蚱容ã§ããçšåºŠãŸã§äœæžããããš å容 äºå察çãè¬ããªããšæ±ºããããšããªã¹ã¯ã®é€å»ãå°é£ãªå Žåããäžãäžãªã¹ã¯ãé¡åšåããŠã倧ããªåœ±é¿ãåãŒããªããšãã«æ¡æããã ãããããªã¹ã¯ããšã®åºæ¬æ¹éãšããããžã§ã¯ãã¡ã³ããŒãšå
±ã«æ€èšãã察å¿çãæ±ºå®ããŠãããŸããåªå
床ã®é«ããªã¹ã¯ãžã®å¯Ÿçã«é¢ããŠã¯ç¬¬äžè
ãäžäœå±€ãžã¬ãã¥ãŒããŠãããããšã§ããæå¹ãªå¯Ÿå¿çã«ãã©ãã·ã¥ã¢ããããŠããããšãã§ããŸãããªã¹ã¯ç®¡çãç¹°ãè¿ããŠããããšã§ã察çãèããã³ããæŽããŠããŸãã®ã§ãåœäºè
ã§ã©ãã©ãã¢ã€ãã¢ãåºãåã£ãŠãããã察çãç«æ¡ããŠããããšããã§ããã â¢å¯Ÿçã®å®è¡ ãªã¹ã¯ã®ãªã¹ãã¢ãããåªå
é äœä»ãã察çãæ±ºãŸãã°ãåªå
é äœã®é«ããªã¹ã¯ãã1ã€ãã€å¯Ÿçãå®è¡ããŠãããŸããããæ
åœè
ïŒæ
åœããŒã ïŒãå¯Ÿå¿ææ¥ã決ããã¡ããšå¯Ÿå¿ããŠããããšã§ãããžã§ã¯ããå®ãçµã³ãŸãã â£ã¢ãã¿ãªã³ã° å®è¡ãã©ã³ãã§ãããã察çãé æ¬¡éå§ãããããšã¯ âã¢ãã¿ãªã³ã°â ãéèŠãšãªã£ãŠããŸããæ°ããªãªã¹ã¯ãçãŸããŠããªãããæ¢åãªã¹ã¯ãåé¡ãšãªã£ãŠé¡åšåããŠããªããããªã¹ã¯ãé¡åšåããå Žåã¯ããã«èª²é¡ã®å¯Ÿçãå®è¡ããããšãã£ãåãåºããå¿
èŠã§ãããªãããããžã§ã¯ããçµäºããææã«ãªã¹ã¯ããã¹ãŠè§£æ¶ã»è§£æ±ºããŠããå¿
èŠã¯ãããŸãããåªå
床ãäœããã®ããªãªãŒã¹ã«ç¹æ®µã®åœ±é¿ãåãŒããªããã®ã¯ç¡çã«è§£æ¶ããå¿
èŠã¯ãããŸããã®ã§ãçŸå®ãšãåãåããªããã¢ãã¿ãªã³ã°ããŠãããŸãããã ãªã¹ã¯ç®¡çã¯ã©ã®ãããªãããžã§ã¯ãã§å®è¡ãã¹ãã ãªã¹ã¯ç®¡çãæå¹ã ãããšãã£ãŠãåããŠãããã¹ãŠã®ãããžã§ã¯ãã§å®è¡ããå¿
èŠã¯ãªãã§ããããã§ã¯ã©ããªãããžã§ã¯ãã§æŽ»çšããã°ãããã§ãããäŸãã°ä»¥äžã®ãããªé
ç®ã«ããŠã¯ãŸããããžã§ã¯ãã§ã¯ãªã¹ã¯ç®¡çã®é©çšãæ€èšããŠã¿ããšè¯ããšèããŠããŸãã®ã§ãåèãã ããã æéçïŒ3ã¶æä»¥äžããããããªãããžã§ã¯ã æè¡çïŒæè¡çã«é£ãããæ°ããæè¡ãå°å
¥ãããªã© 人çïŒãªãœãŒã¹ãäžå®å®ãæ°èŠã®é¡ã¶ããã¹ããŒã¯ãã«ããŒãå€ããªã© ãã®ä»ïŒã€ã¬ã®ã¥ã©ãŒèŠçŽ ããããªã© å®éã«ã©ã®ããã«åãçµãã ã ä»åã¯ãã©ã€ã¢ã«ã§ã°ããŒã¹ãã©ã³ãããžã§ã¯ãã«ãŠåãçµãã§ã¿ãã®ã§ããŸãã¯é¢ä¿ãããããŒãžã£ãŒæ°åã§å§ããŠã¿ãŸããã以äžã¯å
·äœçãªçµéã§ãã 1åç®ïŒ1æéïŒïŒååã¯ãŸãæ³å®ããããªã¹ã¯ãã¿ããªã§ãªã¹ãã¢ããããçµæ20ä»¶ã»ã©ã®ãªã¹ã¯ãæŽãåºãããŸããããã®æ¥ã¯çºç確çãšåœ±é¿åºŠåãŸã§çžè«ãåªå
åºŠãæ±ºå®ããŸããã 2åç®ïŒ1æéïŒïŒç¿é±ã®2åç®ã¯åªå
床9ã6ãŸã§ã®ãã®ã«å¯ŸããŠãªã¹ã¯ã®å¯Ÿçãæ€èšããŸãããæéãããã°ãã¹ãŠã®å¯ŸçãèããŠãããã®ã§ããéãããæéãæå¹æŽ»çšãåªå
床ã®é«ããã®ã«ãã©ãŒã«ã¹ããŠå¯Ÿçãæ±ºå®ããŸããã 3åç®ïŒ1æéïŒïŒããã«ç¿é±ã®3åç®ã¯åªå
床9ã6ãŸã§ã®ãªã¹ã¯ã®å¯Ÿçã®é²æç¢ºèªãšãåªå
床6æªæºã®å¯Ÿçãæ€èšããŸããã 4åç®ä»¥éã¯åºæ¬çã«ãªã¹ã¯ã®å¯Ÿçã®é²æç¢ºèªãã¡ã€ã³ãšãªãããããžã§ã¯ãããªãªãŒã¹ããããŸã§æ¯é±30åçšåºŠéãŸããŸããã 倧äºãªããšã¯ãªã¹ã¯ã®å¯Ÿçãé²ãã«åŸããããããã®ãªã¹ã¯ã®ã¹ããŒã¿ã¹ãæªçæâ察å¿äžâã¢ãã¿ãªã³ã°âã¯ããŒãºããšå€æŽããŠããããšã ãšæã£ãŠããŸããããããããšã§ããããžã§ã¯ãã«ããããªã¹ã¯ç®¡çã鲿ããŠããããšãã¹ããŒã¿ã¹ã®é·ç§»ãšå
±ã«ææ¡ã§ããŸãã ä»åã¯1é±éã«1床ã®é »åºŠã§ãªã¹ã¯ç®¡çå®äŸãéå¬ããŸããããéå¬é »åºŠã¯çŸå Žã§çžè«ã®äžæ±ºå®ããã ããã°ããããšæããŸãããŸããä»åã®ãããžã§ã¯ãã¯3ã¶æçšåºŠã®æéã§ããã®ã§ããªã¹ã¯ç®¡çå®äŸãåèš10åçšåºŠéãããã®ãå®çžŸãšãªããŸãã åãçµãã§è¯ãã£ãããšãšãä»åŸçºå±ããããããš åãçµãã§è¯ãã£ãããš 20ä»¶çšåºŠã®ãªã¹ã¯ããªã¹ãã¢ããããããªã¹ã¯é¡åšåã®æå¶ãåºæ¥ããããªã¹ã¯ãé¡åšåãããšãã«ãããããæ³å®ããéãã®å¯ŸåŠãå®è¡ãããããš ãªã¹ã¯ç®¡çã宿œãããŠããªããã°ãåé¡ãçºçããŠããæ
ãŠãŠè§£æ±ºã«åããŠããã§ãããäºè±¡ãè€æ°ãã£ãããš ã¹ããŒã¯ãã«ããŒã«å¯ŸããŠãããžã§ã¯ãã«ããããªã¹ã¯ã®ä»¶æ°ãå®éçã«ã¬ããŒãã§ããããš ä»ååããŠåãçµãã ãããŒãžã£ãŒãããªã¹ã¯ç®¡ççµç€ã«ããã£ãŠããã£ãã§ããããšççŽãªææ³ãããããããš ä»åŸçºå±ããããããš éçºããŒã ã¡ã³ããŒãšãšãã«ãªã¹ã¯ç®¡çã«åãçµã¿ãã ä»åã¯ãã©ã€ã¢ã«ã ã£ãããšããããŸããããŒãžã£ãŒã®ã¿ã§ãªã¹ã¯ç®¡çã«åãçµã¿ãŸããããéçºãããžã§ã¯ãã®ãªã¹ã¯ãäžçªç¥ã£ãŠããã®ã¯éçºã«åãåã£ãŠããã¡ã³ããŒã ãšæããŸãã®ã§ããã²ä»åŸã¯ãããŒãžã£ãŒãšã¡ã³ããŒãäžç·ã«ãªã£ãŠãªã¹ã¯ç®¡çããã£ãŠãããããšæã£ãŠããŸãã ãªã¹ã¯ç®¡çã®æšªå±é ä»åŸå°ããã€ç€Ÿå
ã§æšªå±éãè¡ããªã¹ã¯ç®¡çãããŠãããããžã§ã¯ããå¢ãããŠãããããšèããŠããŸãã 以äžãBASEã§ãªã¹ã¯ç®¡çã«åãçµãã ã話ã§ãããã²çæ§ããªã¹ã¯ç®¡çã«ææŠããã ãããšå¬ããã§ãã
ã¯ããã« åºç€ããŒã ã§ããã¯ãšã³ããšã³ãžãã¢ããã£ãŠããæŸç°ïŒ @tadamatu ïŒã§ãã 以åã«CTOå·å£ãåœããã°å
ã§å
¬éãã以äžã®èšäºããããŸãã devblog.thebase.in æ°èŠæ¥ç¶ã®éç BASE ã®ã¢ã¯ã»ã¹éã®äŒžã³ã¯åãŸãããã®æ§æã§ãæ¥ç¶ãšã©ãŒãçºçããããã«ãªã£ãŠããŸããŸããã ããŒã¯æã«ç§é 2 äžãã®æ°èŠæ¥ç¶ã primary ã€ã³ã¹ã¿ã³ã¹ãžè¡ãããŠãããšãã£ãç¶æ
ã§ãã ãã®èšäºãå
¬éãããã®ãçŽïŒå¹Žåã§ã åœæ100äžçšåºŠ ã ã£ãã·ã§ããæ°ã¯ 170äžãè¶
ã ãæã
ã¯ãŸã ãŸã 䌞ã°ããããšèããŠããŸãã ããã¯ãã·ã§ããæ°ã®äŒžã³ãšãšãã«ãææ°é¢æ°çã«å¢ããŠãããŠãŒã¶ã®ã¢ã¯ã»ã¹ãæãå¿
èŠãããããšãæå³ããŸãã ããã°å
¬éåœæãæã
ã¯ããŸããŸãªæ€èšã®æ«ã以äžã®ãããªå¯ŸçãåããŸããã æ®ãããææ®µã¯ primary ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠã®æ¥ç¶æ°ãåŠäœã«ããŠæžãããããšããããšã®ã¿ã§ãã ããã§åºæ¥ãããšã¢ããªã±ãŒã·ã§ã³åŽã®æ¥ç¶ãããã« reader ã€ã³ã¹ã¿ã³ã¹ã«è¡ããããšããããšã§ãã ããã¯ã¯ãšãªã reader ã«åãããšããããããè² è·å¯Ÿçã§ã¯ãªããæ°èŠæ¥ç¶èªäœã reader ã«æåããåãã 察å¿åŸãã¡ãã£ã¢é²åºãªã©ã«ããã¢ã¯ã»ã¹ãéäžãããšããã³ãã³MySQLãžã®æ°èŠæ¥ç¶ãããã«ããã¯ãšãªããæ¥ç¶ãã¥ããç¶æ
ã«é¥ã£ãŠããŸããã ããã§BASEã§ã¯ã RDS Proxy ã2020/06ã«GAããã ããšããããæ€èšŒãéå§ããå°å
¥ãããŸã§ã«è³ããŸããã aws.amazon.com æ¬èšäºã§ã¯ãããã§åŸã ç¥èŠ ã PHPãšã®çžæ§ã¯ã©ããªã®ã ã æ€èšŒããæ¹æ³ ã å°å
¥åŸã©ã®çšåºŠå¹æããã£ãã®ã ã å°å
¥åŸçºçããé害 ããªã©ãRDS Proxyå°å
¥ã«ããã ã¡ãªããã»ãã¡ãªãã ãå
¬éãããŠããã ãããšæããŸãã RDS Proxyå°å
¥æ¹æ³ãªã©åºæ¬çãªããšã¯ä»ã®èšäºã«è²ããŸãããã®èšäºã§ã¯ å®éã®å°å
¥ãéããŠåŸãTips ãã§ããã ãç¶²çŸ
ããŸããã®ã§ã RDS Proxyãæ°ã«ãªã£ãŠããæ¹ ã å°å
¥ãæ€èšããŠããæ¹ ã®ã圹ã«ç«ãŠãã°å¬ããã§ãã RDS Proxyãšã¯ ãŸãã RDS Proxy ãå°å
¥ããããšã§å
¬åŒã«èšèŒãããŠããã¡ãªãããç°¡åã«æžããŠãããŸãã aws.amazon.com ã(1) æ¥ç¶ããŒãªã³ã°ã«ããããã©ãŒãã³ã¹ã®åäž ã(2) ãã«ãããŒãžã ã(3) ãã§ã€ã«ãªãŒããŒçºçæã®æéççž®ãªã©ã«ããã¢ããªã±ãŒã·ã§ã³ã®å¯çšæ§åäž ã(4) IAM èªèšŒãå©çšãã»ãã¥ãªãã£ã¬ãã«ã®åäžïŒãªãã·ã§ã³ïŒ ãªã©ããã€ããããŸããããã¡ããæã
ãäžçªåŸããã£ãã¡ãªãã㯠(1) ã«ãªããŸãã å°å
¥åã®æ€èšŒ ããŠãæ€èšŒãå§ããŠããããã§ããããã€ã³ããšãªã£ããã®ãèšèŒããŠãããŸãã ã¢ããªã±ãŒã·ã§ã³çãªéå£ã¯ã»ãŒãªãã£ã ãŸãæå§ãã«å®éã«DEVç°å¢ã«RDS Proxyãæ§ç¯ããŠã¿ãŠãã¢ããªã±ãŒã·ã§ã³ããã®DBæ¥ç¶ãRDS Proxyçµç±ã«åãæ¿ããŠæ€èšŒãããŠã¿ãŸãã ããã«é¢ããŠã¯QAããŒã ã«ååãããŠããã ããäžéããªã°ã¬ãã·ã§ã³ãã¹ããéãããšã§æ€èšŒãåäœæ
ä¿ãè¡ããŸããã çµæããã£ãããªã°ã¬ãã·ã§ã³ãã¹ãããã¹ïŒ ã€ãŸããRDS Proxyã®åãæ¿ãã«é¢ããŠã³ãŒãã®å€æŽã¯ã»ãŒãªãã§å¯èœã§ã ã³ãŒã倿Žããã®ã¯æ¥ç¶å
ã®åãæ¿ãããããšããã©ã€ããªæèŠã§åãæ¿ããå¯èœ ãšããããšãåãããŸããã ïŒåŸè¿°ããŸãããBASEã§ã¯RDS Proxyã®åãæ¿ãã§ãå
šãã¢ããªã®ã³ãŒãã¯å€æŽããŸããã§ããïŒ è²»çšé¢ã«ã€ããŠèŠç©ãã RDS Proxy㯠RDSã€ã³ã¹ã¿ã³ã¹ã®vCPUã®ç·æ° ã«å¿ããŠè²»çšãããããŸãã aws.amazon.com BASEã§ã¯ãéå»ã«é害ãçºçããŠããçµç·¯ããããå®å®éçšã®ãããå°ãåæã§Auroraã®ã€ã³ã¹ã¿ã³ã¹ãå¢ãããã€ã³ã¹ã¿ã³ã¹ãµã€ãºã倧ãããããã®ãå©çšããŠããŸããã ãã®ãŸãŸã·ããããŠRDS Proxyæ¡çšããå Žåã§èŠç©ãããšã 幎é300äžåçšåºŠã®äžä¹ãè²»çšãçºçãã ããšãåãããŸããã æ±ºããŠå°ããªé¡ã§ã¯ãªãã§ãããBASEã§ã¯å°æ¥ã®æ¥ç¶å®å®æ§ãåŸããã®ã§ããã°å°å
¥ããããšããããšã§ãæ€èšŒãç¶ããŸããã ãããå°å
¥åŸãåæåã®ã€ã³ã¹ã¿ã³ã¹ãæžãããã€ã³ã¹ã¿ã³ã¹ãµã€ãºãèœãšãããšãã調æŽãã§ããããšã§ãçµæçã«RDSã®åæžåãå«ãã㚠幎é960äžåãã®åæž ãã§ããèšç®ã«ãªããŸãã ããã¯éåžžã«å€§ããªã¡ãªããã§ããã ãã³çããå¿é
RDS Proxyãå°å
¥ããã«ããã£ãŠãäžçªæ°ã«ãªã£ãŠããã®ã¯ ãã³çã ãšããçŸè±¡ã§ãã ãã³çããåé¿ãã ããæç² RDS Proxy ã¯ãä»ã®ã»ãã·ã§ã³ã«äžé©åãªã»ãã·ã§ã³ç¶æ
ã®å€åãæ€åºãããšãã¯ã©ã€ã¢ã³ãæ¥ç¶ãç¹å®ã® DB æ¥ç¶ã«èªåçã«ãã³çãããŸãããã³çãã«ãããæ¥ç¶ã®åå©çšã®æå¹æ§ãäœäžããŸãã ãã³çã㯠CloudWatch ã® DatabaseConnectionsCurrentlySessionPinned ã¡ããªã¯ã¹ã«ãã£ãŠç¢ºèªãã§ããŸãã æ€èšŒã®çµæãBASEã®ã¢ããªã±ãŒã·ã§ã³ããã®æ¥ç¶ã§ã¯ ãã³çããå
šãçºçããŸããã§ãã ã BASEã§ã¯CakePHPããã¬ãŒã ã¯ãŒã¯ãšããŠå©çšããŠããŸãããPHPã¯äžè¬çã«ïŒããã«ãŠã§ã¢ãªã©ã§æ¥ç¶ããŒãªã³ã°ãå®è£
ããŠããªãéãïŒãªã¯ãšã¹ãã®ãã³ã«æ¥ç¶ã»åæãç¹°ãè¿ãããããã³çãã®åœ±é¿ãå
šãåããªãã£ãã®ã§ã¯ãªãããšæšæž¬ããŠããŸãã ã¡ãªã¿ã«ããã®æªéã®èšŒæãšãèšããããªã¡ããªã¯ã¹ã«è¡šç€ºãããªããã³çããã©ã®ããã«æ€èšŒããããšãããšããŸãRDS Proxyçµç±ã§mysqlã¯ã©ã€ã¢ã³ãã«ããæ¥ç¶ãã SET ã¹ããŒãã¡ã³ãã LOCK TABLE æäœãããããšã«ããç¡çãããã³çããçºçãããã¡ããªã¯ã¹ãšããŠã¯æ€ç¥ã§ããããšã確èªããŸãã ãã®åŸãQAã®ãªã°ã¬ãã·ã§ã³ãã¹ããéãããšãã«ãã³çãã¡ããªã¯ã¹ãæ€åºãããªãããšã確èªããããšã§çºçããŠããªããšçµè«ã¥ããŸããã ïŒå®éãæ¬çªãªãªãŒã¹åŸããã®ã¡ããªã¯ã¹ã¯ã»ãŒæ€ç¥ãããŸããã§ããïŒ è² è·è©Šéšã«ã€ã㊠BASEã§ã¯ãè² è·è©Šéšçšã®DEVç°å¢ããããŸãã ä»åã¯ããã®ç°å¢ã§åããã¢ããªã±ãŒã·ã§ã³ããã®DBæ¥ç¶ãã ã(A) RDSçŽæ¥æ¥ç¶ããå ŽåïŒçŸç¶ã®ç°å¢æ³å®ïŒ ã(B) RDS Proxyçµç±ãæ¥ç¶ããå Žå ã§æ¯èŒããæ€èšŒããŸããã æ€èšŒãã軞ãšããŠã¯ä»¥äžã®ïŒè»ž ã(1) ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã«ããèª¿æŽ ã(2) ã¹ã¯ãªããã«ããã¢ã¯ã»ã¹æ°ãèª¿æŽ ãŸã (A) ã®éçå€ ãèŠæ¥µããŸãã (1) ãæ¬çªãšåããã®ã«åºå®ãã (2) ã®ã¢ã¯ã»ã¹æ°ãäžããŠããã ãšã©ãŒãåºãéçå€ ãã ããŸããã æ¬¡ã«ã (B)ã®éçå€ ãå軞ã§äžäžãããããšã§åºããŠãããŸãã (2) ãåºå®ã«ããŠã (1) ãäžããŠãããŸãã çµæã ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã1/4 ãµã€ãºã«èœãšããŠããšã©ãŒãåºãªããšãã奜æçžŸ ã«ã ãã以äžã€ã³ã¹ã¿ã³ã¹ã¿ã€ããèœãšãç¶ããŠãæå³ããªããããæ¬¡ã« (1) ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã 1/4 ã®ç¶æ
ã§åºå®ãã (2) ã®ã¢ã¯ã»ã¹æ°ãå¢ããéçå€ãèŠæ¥µããŸãã ãã¡ããçµæãšããŠã 5å以äžã®ã¢ã¯ã»ã¹æ°ã«ããŠãDBã®ãšã©ãŒãåºãŸãã ã§ããããªããšãããã«ããã¯ãRedisãApacheãªã©ä»ã«ç§»ã£ãŠããŸããéçå€ãèšæž¬ã§ããªãã£ãããã广ããããŸããã æ¥ç¶åæãç¹°ãè¿ããšãããªãŒããŒããããããã»ã©å€§ããã£ãã®ã ãããšããçµè«ã«ããããŸããã PHPãšçžæ§ããšãŠãè¯ãã£ããšããçµæã ãšæããŸãã ã«ã¹ã¿ã ãšã³ããã€ã³ãåé¡ RDS Proxyãå°å
¥ãããšã DBãžã®æ¥ç¶ã¯RDS Proxyãclusteråäœã§ã³ã³ãããŒã« ãããããã«ãªããŸãã BASEã§ã¯ãDBã¬ããªã±ãŒã·ã§ã³ãclusterã«äŸåããWriter/Readeræ§é ãå©çšããŠéçšãããŠããŸããã å°ãç¹æ®ãªéšåãšããŠã調æ»ãåæãªã©ã§ãµãŒãã¹ãžã®åœ±é¿ãäžããªããããReaderã®ãã¡ã®ïŒã€ãåæçšãšããŠå©çšããä»ã®DBãã«ã¹ã¿ã ãšã³ããã€ã³ãã«ããDBæ¥ç¶ãã³ã³ãããŒã«ããŠããŸãããïŒäžèšã€ã¡ãŒãžã®AS-ISã®éšåïŒ RDS Proxyãå°å
¥ãããšããã¹ãŠã®DBãã³ã³ãããŒã«å¯Ÿè±¡ãšãªã£ãŠããŸãããµãŒãã¹ã«åœ±é¿ãäžããåæã§ããDBã確ä¿ã§ããªããšããç¶æ
ã«ãªãããå°ãåé¡ã§ãã ããã§ç§ãã¡ãåã£ã解決çãšããŠã¯ã Binlogã«ããã¬ããªã±ãŒã·ã§ã³ããå¥clusterãèªåãã¡ã§æ§ç¯ ããŸãããïŒäžèšã€ã¡ãŒãžã®TO-BEïŒ Binlogã«ããã¬ããªã±ãŒã·ã§ã³æ§ç¯ äœè«ã§ãããå®ã¯æã
ãRDS Proxyã®å°å
¥ãããäžã§äžçªæãçŒããã®ãããã®å¥clusterãã€ãããšããéšåã§ããã ã¹ãããã·ã§ããããšãããã®ãã³ãã€ã³ãã®ã¿ã€ãã³ã°ã®ããžã·ã§ã³ããšããå¥clusterã§Binlogã®ã¬ããªã±ãŒã·ã§ã³ãéå§ããããã®æäœãããŠã³ã¿ã€ã ãªãã§ã¯é£ãããã¡ã³ããã³ã¹ã³ã³ãããŒã«ãªã©å¿
èŠã§ããã ãã ããã¯ãBASEã®ç¬ç¹ãªç°å¢ã®åé¡ãªã®ã§RDS Proxyå°å
¥ã§å¿
é ã§ã¯ãããŸããã MySQLãŠãŒã¶ã®ã¢ã¯ã»ã¹ã³ã³ãããŒã« RDS Proxyãå°å
¥ããå Žåã RDS Proxyã«å¯ŸããŠMySQLãžã®ã¢ã¯ã»ã¹æ
å ±(ãŠãŒã¶/ãã¹ã¯ãŒã)ãã¢ã¿ããããŠããå¿
èŠããã ãŸãã ããã¯ããã¹ãŠã®ã¢ã¯ã»ã¹ãRDS Proxyçµç±ã«ããå ŽåãMySQLã«ç»é²ããŠãããŠãŒã¶ããã¹ãŠã¢ã¿ããããŠããå¿
èŠããããšããããšã§ãã ãŠãŒã¶ãå¢ãããå ŽåãéœåºŠè¿œå ããå¿
èŠããããŸããæš©é管çã®ããã«ãŠãŒã¶ãå¢ããããšããããããŸããã管ççã«ãç
©éã§ãããããŸããã ããã§ç§ãã¡ã¯å°ããã«ãŒã«ã¥ããããŠãã³ã³ãããŒã«ããããšã«ããŸããã以äžã®ãããªãã®ã§ãã - SREãã³ã³ãããŒã«ãããŠãŒã¶ã«é¢ããŠã¯ãRDS Proxyãçµç±ããŠã¢ã¯ã»ã¹ããã - åºæ¬çã«ã¯ãµãŒãã¹ããã®ã¢ã¯ã»ã¹ - ãã以å€ã®ãŠãŒã¶ã«é¢ããŠã¯RDS Proxyãçµç±ããã¢ã¯ã»ã¹ãã åè
ã®ãŠãŒã¶ãå¢ãããå Žåã®ã¿ãã¢ã¿ãããå¿
èŠãšãªããŸããããšãã¢ã¿ãããæŒãããšããŠãåäœæ€èšŒæã«çºèŠã§ããŸãã äžè¬ãŠãŒã¶è¿œå ãªã©ã®é »åºŠã®é«ãæäœã§ã¯ã¢ã¿ãããäžèŠã§ããDBæäœéçºè
ãå¢ããŠãŠãŒã¶äœæããããDBã«ã¢ã¯ã»ã¹ã§ããªãããªãã§ã ãããšãã£ãæ··ä¹±ãé²ããŸãã ãããªãªãŒã¹ æ¥ç¶ãšã³ããã€ã³ãã®åãæ¿ã BASEã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããã®RDSãžã®æ¥ç¶ã¯ clusterã®ãšã³ããã€ã³ã ãå©çšãããRoute53çµç±ããããšã§è¡ãªã£ãŠããŸãã ãªãªãŒã¹ã¯ããã RDS Proxyã®ãšã³ããã€ã³ã ã« Route53äžã§åãæ¿ããããšã§å®æœ ããŸããã å®è¡ã¯ã¢ã¯ã»ã¹ã®å°ãªãæ·±å€åž¯ã«ãããŠã³ã¿ã€ã ãªãïŒãŠãŒã¶ãµã€ãããèŠãã¡ã³ããã³ã¹ç¶æ
ã«ããïŒã§åãæ¿ãå®äºã åãæ¿ãåŸãã¢ãã¿ãªã³ã°ã§ãéã«å¿é
ã«ãªããããäœãåé¡ãªããã¬ã€ãã³ã·ãŒãå°ãçºçããŠãããªãŒãããã§å®äºããŸããã ãªããŒã å®éã¯ããªãã£ãã®ã§ããããªããŒãã«ã€ããŠãRoute53äžã§ãšã³ããã€ã³ããæ»ãã ããšããã©ã€ããªãã®ã§ããã®ã§ãä»åã¯æãåã£ã宿œãã§ããŸããã å¿ã®å®å¿ã¯å€§åã§ããã (äœè«)åãæ¿ãåŸãæ¥ç¶ãå¢ãç¶ãäžå®ã« åãæ¿ãçŽåŸãDBãžã®æ¥ç¶ã24æéã®ããã äžæ¹çã«å¢ãç¶ãã¢ãã¿ãªã³ã°ããŠããŠäžå®ã«ãªããŸããããåå ã¯ä»¥äžã®éãã§ããã MaxIdleConnectionsPercent ããæç² RDS ãããã·ã¯ãããŒã¿ããŒã¹æ¥ç¶ã䜿çšãããªããªã£ã 24 æéåŸã«ãã®æ¥ç¶ãéããŸãããããã·ã¯ãã¢ã€ãã«ç¶æ
ã®æå€§æ¥ç¶æ°ã®èšå®å€ã«é¢ä¿ãªãããã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã 以äžã¯ã CloudWatch ã® DatabaseConnections ã¡ããªã¯ã¹ãªã®ã§ãããåãæ¿ãçŽåŸã¯24æéã§æ¥ç¶ãã¬ã¯ã³ãšèœã¡ããã®åŸãããã¥ã€å¹³æºåãããŠããåãã«ãªã£ãŠããããšãããããšæããŸãã RDS Proxyåãæ¿ãåŸã®DatabaseConnectionsã¡ããªã¯ã¹ å°å
¥åŸã®æž¬å®ã»å¹æ ConnectionAttemptsãç¡é¢šã« ãããŸã§ã®éå®³ã§æ¥ç¶ãµãŒãžãçºçããŠããæã¯ã æ°èŠæ¥ç¶ãè©Šãæ°ã§ãã ConnectionAttempts ãšããã¡ããªã¯ã¹ãç°åžžãªå€ã瀺ã㊠ããŸããã RDS Proxyãå°å
¥ããåãŸã§ã¯ããããªãã®æ°å€ã瀺ããŠããã®ã§ããã å°å
¥åŸã¯æ¥ç¶ããŒã«ã§ã³ã³ãããŒã«ããããã1æ¡ ã«ãªããŸããã ãããïŒã€ã®å®å®æ¥ç¶ãåŸããšãã蚌æ ãšãªããŸãã ïŒã°ã©ãã§ã¯ãŒãã«èŠããŸããå®éã¯å°ããããŸããããã ãæžã£ããšããããšã§ããïŒ RDS Proxyåãæ¿ãæã®ConnectionAttemptsã¡ããªã¯ã¹ æ¥ç¶ãå®å® åè¿°ããŸãããã DatabaseConnections ãéåžžã«å®å® ããŸããïŒäžå³ïŒã å°å
¥åã«æ¯ã¹ãŠè¥å¹²å¢å ããŠãã®ã¯ãRDS Proxyãã¢ã€ãã«ç¶æ
ã«ãªã£ãã³ãã¯ã·ã§ã³ãéãããŸãŸä¿æãããããšèããããŸãã ã¢ã€ãã«ç¶æ
ã®ã³ãã¯ã·ã§ã³ä¿ææå€§å€ã«ã€ããŠã¯ã MaxIdleConnectionsPercent ãšããå€ã§èšå®ã§ããŸãã®ã§ç°å¢ã«åãããŠèª¿æŽãããšè¯ããšæããŸãã RDS Proxyåãæ¿ãåŸã®DatabaseConnectionsã¡ããªã¯ã¹ äžå³ã¯ãæå€§æ¥ç¶æ°ã®ã°ã©ããªã®ã§ãããå€ããŠã 1,200 çšåºŠã«ãããªã£ãŠããŸããã RDSã«èšå®ããŠãã max_connections ã 12,000 ãªã®ã§ãçŸç¶ã¯ ããªãã®äœè£ãããçµæ ãšãªã£ãŠããŸãã RDS Proxyåãæ¿ãåŸã®çŸåšã®æå€§æ¥ç¶æ° Readerã€ã³ã¹ã¿ã³ã¹ãæžããã äžèšã®æ¥ç¶å®å®ã®çµæãåããæ¥ç¶ã«äœè£ãããŠããšåãã£ãããšã§ã Readerã€ã³ã¹ã¿ã³ã¹ãïŒã€åé€ ã§ããŸããã åé€ããåŸã CPU䜿çšéãå°ãå¢ã ã åDBã®ãããã¯ãŒã¯ã¹ã«ãŒãããéãå¢ãã ãããã§ãæ³å®éãã®çµæãšãªããŸããã ã¡ã¢ãªäœ¿çšéã¯å¢ããŸããã§ããã äžå³ã¯åé€ååŸã® CPU䜿çšé (CPUUtilizationã¡ããªã¯ã¹) ãªã®ã§ãããåé€åŸã¯ 30-35% ã§é·ç§»ããŠããããããŸã§æ¥ç¶å®å®åã®ããã«ç¡é§ã«ãµã€ãºãäžããŠãŸãããããããæé©åã§ããã®ã§ã¯ãªãããšèããŠããŸãã Readerã€ã³ã¹ã¿ã³ã¹å逿ã®CPUUtilizationã¡ããªã¯ã¹ åé€ããŠä»¥éãåé¡ã¯çºçããŠãããã è²»çšåæžã«è²¢ç® ããŸããã Writerã€ã³ã¹ã¿ã³ã¹ã®ãµã€ãºãäžããããšãã§ãã ããã«æ¥ç¶å®å®ã®çµæãåãã Writerã€ã³ã¹ã¿ã³ã¹ãååã«ãã ããšãã§ããŸããã ãµã€ãºãäžããåŸãReaderãšåæ§ã§ CPU䜿çšéãå°ãå¢ã ããããã§ãåé¡ã¯çºçããŠãããã è²»çšåæžã«è²¢ç® ããŸããã ããã§ç¹çãã¹ãã¯ãWriterã€ã³ã¹ã¿ã³ã¹ã®ãµã€ãºãäžãããšãã® ãã§ãŒã«ãªãŒããŒã®åã ã§ãã ãµã€ãºã®å€æŽã¯ããŸãclusterå
ã«ãåãæ¿ãå
ãšãªãDBããäºåã«äœæãããã§ãŒã«ãªãŒããŒãããããšã§åãæ¿ããåãæ¿ããåŸã«ãåãæ¿ãå
ã®DBããåé€ããã®ã§ãããããã§ãRDS Proxyã®ãããããåããèŠãŠãšãããšãã§ããŸããã äžå³ã¯ããã§ãŒã«ãªãŒããŒããããšãã® RDS Proxyã®ã¡ããªã¯ã¹ ã§ãã åãæ¿ããç¬éã ClientConnections ãæ¥æ¿ã«å¢ã ãã¯ã©ã€ã¢ã³ãããã®æ¥ç¶ãRDS ProxyãåŸ
æ©ãããŠããããšãèŠãŠåããŸãã ãããšåæã« DatabaseConnections ãæ¥æ¿ã«å¢ããŠãã ããšãåãããŸããããã¯ããããåŸ
æ©ãããæ¥ç¶ããã£ãã«æãããã ãšèããããŸãã Writerã€ã³ã¹ã¿ã³ã¹å€æŽæã®RDS Proxyã®ã¡ããªã¯ã¹ ãããŠäžå³ã QueryResponseLatency ã¡ããªã¯ã¹ ã§ãã ãããèŠãŠãæå€§ã§4ç§ã»ã©åŸ
æ©ãããŠããããšãåãããŸãã ã€ãŸããŠãŒã¶ããèŠããšããããïŒã¡ãã£ãšé
ããªãçšåºŠã§æžãã§ãããšããããšã§ãã Writerã€ã³ã¹ã¿ã³ã¹å€æŽæã®QueryResponseLatencyã¡ããªã¯ã¹ ãã¡ãããšã©ãŒãå
šããªãã£ãèš³ã§ã¯ãããŸãããSentryã«ãšã©ãŒ 2006 MySQL server has gone away ãåºåãããŠããŸããããããªãå°ãªãéåžžã®ãã§ãŒã«ãªãŒããŒãšæ¯ã¹ããšããªãå°ããªåœ±é¿ã§æžãã ãšèšãããšæããŸãã ãããŠäžå³ã DatabaseåŽããèŠã DatabaseConnections ã¡ããªã¯ã¹ïŒ1æ¥ä»¥äžçµéãããã®ïŒ ã§ãã åè¿°ããŸãããããã§ãŒã«ãªãŒããŒçŽåŸãªã¯ãšã¹ããæãããäžæ°ã«å¢ãããŸãã¢ã€ãã«ç¶æ
ã§24æéçµéãããã®ããè§£æŸãããŠãããšããã®ãèŠãŠåããã¡ããªã¯ã¹ã«ãªã£ãŠããŸãã 24æéåŸã¯æ¥ç¶ãå¿
èŠåã ããšãªããå®å®ããŠããŸãã Writerã€ã³ã¹ã¿ã³ã¹å€æŽæã®DatabaseConnectionsã¡ããªã¯ã¹ RDS Proxyã®ç¹åŸŽã®äžã€ã§ããã(3) ãã§ã€ã«ãªãŒããŒçºçæã®æéççž®ãªã©ã«ããã¢ããªã±ãŒã·ã§ã³ã®å¯çšæ§åäžãã確èªããããšãã§ããŸããã ã¬ã€ãã³ã·ãŒãçºçãã AWSå
¬åŒ ã§ã¯å¿çæéã« å¹³å5ããªç§/ã¯ãšãª ã®ãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒãçºçãããšèšèŒããããŸãã BASEã§ãäŸå€ãªããå°å
¥ããããšã§ APIã®ã¬ã¹ãã³ã¹ã¿ã€ã ã 0.05ã0.1ç§ çšåºŠå¢å ããŸããã BASEã§ã¯RDS Proxy ã«ãã倿®µã«ãªã£ãããšã«ããã仿¹ã®ãªãã³ã¹ããšããŠãå°æ¥ã®ã¢ã¯ã»ã¹å®å®æ§ãåã蚱容ããããšã«ããŸããã RDS Proxyå°å
¥åŸã®ã¬ã€ãã³ã·ãŒ ã¢ãã¿ãªã³ã°ã®çµ±åã«ã€ã㊠BASEã§ã¯ç£èŠãµãŒãã¹ãšã㊠Mackerel ã New Relic ãå©çšããã¢ãã¿ãªã³ã°ããŠããã®ã§ãããRDS Proxyã®ã¡ããªã¯ã¹ããããã« çµ±åã§ããŸããã§ããã ïŒ çµ±åããããšã¯ã§ããŸãïŒäžã«è¿œèšããïŒ ïŒ RDS Proxyã¯ããŸã ãŸã å©çšè
ãå€ããšèšããç£èŠãµãŒãã¹åŽã§é©çšãããŠããªãã®ã ãšæããŸãã ä»åŸãRDS Proxyã®å©çšè
ãå¢ããŠããã°å¯Ÿå¿ãããŠããå¯èœæ§ããããããããŸããã 以äžããåãµãŒãã¹ã®ã¡ããªã¯ã¹ã«ãªããŸãã®ã§ãç¶æ³ã¯ãã¡ãã§ç¢ºèªãã ããã Mackerel - AWSã€ã³ãã°ã¬ãŒã·ã§ã³ - RDS NewRelic - Amazon RDS monitoring integration 2023/03/10 è¿œèš äžèšããŒãžã®ã¡ããªã¯ã¹ã¯æ§æ¥ããã®API Pollingã®å¯Ÿå¿è¡šã§ãããæ°èŠã®å¯Ÿå¿ãããŠããªãããã ããã§ãã CloudWatch Metric Streams ã§ã®å¯Ÿå¿ãããããšã§ãçµ±åããããšãå¯èœã§ãã ïŒNew Relic ã®æ
åœè
æ§ãããé£çµ¡ããã ããŸãããããããããïŒ å°å
¥åŸã«çºçããé害 ããã¯æ€èšŒã§çºèŠã§ããªãã£ãBASEã§çºçããé害ïŒå€±æè«ïŒã«ãªããŸãã ã€ãŸãç°å¢ã«äŸåããå
容ãå«ãŸããŸãããåèã«ãªãã°ãšããããšã§æžããŠãããŸãã 鷿鿥ç¶åé¡ BASEãµãŒãã¹ã«ã¯åžžæåäœããŠããWorkerããããŸãã ãã¡ããPHPã§å®è£
ãããŠãããåºæ¬ã¯ ããã»ã¹ãçããŠããéã¯DBãžæ¥ç¶ããã£ã±ãªãã«ãªã£ãŠããã®ã§ãããããã圱é¿ããšã©ãŒãçºç ããŸããã RDS Proxy ã®å°å
¥åã¯ã MySQLã®èšå®å€ wait_timeout = 28800 (8æéã»ããã©ã«ãå€) ã«ãã鷿鿥ç¶ãã§ããŠãã ã®ã§ãããRDS Proxy ã®å°å
¥åŸã¯ã åæ®µã®RDS Proxyãµã€ãã§ã¿ã€ã ã¢ãŠãã«ããåæãããŠããŸã ããšãåå ã§ããã RDS Proxy ã«ã¯ã ã¢ã€ãã«ã¯ã©ã€ã¢ã³ãã®æ¥ç¶ã¿ã€ã ã¢ãŠã(IdleClientTimeout) ãšããèšå®ããããããã 30å ã«ãªã£ãŠãããã ãã¿ã€ã ã¢ãŠãããããŸã§ãããçæéã§é »çºããããã«ãªã£ãŠããŸããã ä»åã¯ãããMySQLã®æéãšåã 8æé ã«èšå®ãã ããšã§è§£æ±ºããŸããã ããã©ã«ãå€ã 30å ã§ãã®ã§ãDBæ¥ç¶ãé·æéç¶æããéšåãããå Žåã¯æ³šæãå¿
èŠã§ãã 倧éã®ã¬ã³ãŒããçºçãããã®ã¯æ¥µç«¯ã«ã¬ã€ãã³ã·ãŒãçºçãã RDS Proxyå°å
¥åŸãããããŒãžãç¹å®ãŠãŒã¶ã§è¡šç€ºã§ããªãçŸè±¡ãçºçããŸããã åå 調æ»ããçµæã SQLã¯ãšãªã®çµæã倧éã¬ã³ãŒããè¿ã ããšãåãããRDS Proxyå°å
¥åŸããã®ã¯ãšãªã ããç°åžžã«é
ããªã£ãŠããããšãåãããŸãããïŒæ°ç§çšåºŠã ã£ãã¬ã¹ãã³ã¹ããæ°åãããããã«ãªã£ãŠããïŒ è»¢éã¬ã³ãŒãéãé©åã«ãªãããä¿®æ£ãã ããšã§ããã解決ããŸããã å
¬åŒã«èšè¿°ã¯ãªãã®ã§ããã倿®µã«ãªã£ãããšã§è»¢éãéã«å¿ããŠæéããããããã«ãªã£ãã®ã§ã¯ãªãããšæ³åããŠããŸãã å®éãDBã¯ã©ã€ã¢ã³ããªã©ã§ã倧éã¬ã³ãŒããè¿ãåãã¯ãšãªããRDSçŽæ¥ç¶ãšãRDS Proxyçµç±æ¥ç¶ããå Žåã§æ¯èŒãããšæããã«ã¬ã¹ãã³ã¹ã¿ã€ã ãå€ãã£ãŠæ¥ãŸãã 倧éã¬ã³ãŒããè¿ãåŠçãããå Žåã«ã¯æ³šæãã€ã³ãã ãšæããŸãã ã¯ãšãªæ°ã®èª¿æ» é害ã§ã¯ãªãã§ãããåè¿°ããéãã¯ãšãªæ°ã«å¿ããŠã¬ã€ãã³ã·ãŒãçºçããããšãåãã£ãŠããã®ã§ãåŸè¿œãã§ïŒãªã¯ãšã¹ãã®ã¯ãšãªæ°ã®èª¿æ»ã宿œããŸããã 調æ»ã®çµæãN+1åé¡ãã¡ãã»ãçºçããŠããããšã確èªã§ããã®ã§ãã²ã©ããã®ã«é¢ããŠã¯å³æå¯Ÿå¿ã宿œããŸããã ããã¯RDS Proxyé¢ä¿ãªãã±ã¢ããŠãããããšããã§ãã RDS Proxy èªäœã®èšå®å€æŽã¯å®è¡äžãå°å
¥ãŠãŒã¶ãžã®åœ±é¿ã¯ãªã äžèšã«èšèŒãããããªãããã€ãã®ãã©ãã«ãçºçããRDS Proxyã®èšå®ã倿Žãããå ŽåããããŸããã ã¢ã€ãã«ã¯ã©ã€ã¢ã³ãã®æ¥ç¶ã¿ã€ã ã¢ãŠã(IdleClientTimeout) ã®èª¿æŽããRDS Proxyã® ãã°èšé²ãæå¹ ã«ãããå Žåãªã©ã§ãã AWSãµã€ãã«ã確èªãããŸãããããããã®å€æŽã¯ããŠã³ã¿ã€ã ãªãã§åãæ¿ãããããæ°è»œã«å€æŽããŠã倧äžå€«ã®ããã§ãã ãŸãšã BASE ã RDS Proxy ãå°å
¥ããããšã§åŸãã¡ãªããã»ãã¡ãªããããŸãšãããšä»¥äžã®ããã«ãªããŸãã ã¡ãªãã MySQLãžã®æ¥ç¶ãè¶
å®å® ããã«ããã¯ãå¥ã«ç§»ã£ããšèšã£ãŠãéèšã§ã¯ãªãã»ã©ã®å®å®æ¥ç¶ãç²åŸã§ãã è²»çšçãªã¡ãªãããããã æ¬æ¥ãRDS Proxyã«ã¯ã³ã¹ãããããããRDSã®ã€ã³ã¹ã¿ã³ã¹ãæžããããšãã§ãããããå®è³ªã³ã¹ãããŠã³ã«ãªã£ã PHPãšã®çžæ§ãéåžžã«ããã£ã æ¯ã¢ã¯ã»ã¹ã§æ¥ç¶åæãç¹°ãè¿ããããªèšèªãã¢ããªã±ãŒã·ã§ã³ïŒ PHP ã ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ ãªã©ïŒãšã¯çžæ§ãè¯ãå¯èœæ§ãã ãã¡ãªãã ïŒä»åŸã®èª²é¡ã蚱容ããå¯äœçšïŒ è¥å¹²ã®ã¬ã€ãã³ã·ãŒãçºçãã BASEã§ã¯RDS Proxyãæãåã仿¹ã®ãªãã³ã¹ããšèãã ãããžã§ã¯ãã«ãã£ãŠã¯èš±å®¹ã§ããªãå¯èœæ§ãããã®ã§æ³šæãå¿
èŠ çŸç¶ã¯ç£èŠãµãŒãã¹ã§ã¢ãã¿ãªã³ã°çµ±åãã§ããªã BASEã§ã¯RDS Proxyãå°å
¥ããããšã§ãå®å®ããæ¥ç¶ãã§ããããã«ãªããä»åŸå¢ããŠããã§ãããã¢ã¯ã»ã¹ãè¿ãå
¥ããæºåãã§ããéåžžã«å€§ããªã¡ãªããããã£ããšèããŠããŸãã ãã®èšäºããçæ§ã®RDS Proxyå°å
¥æ€èšã®åèã«ãªãã°å¬ããã§ãã 以äžãBASEã§ã®RDS Proxyå°å
¥ã¬ããŒãã§ããã æåŸã« BASEã§ã¯ããã®ããã«æäŸãããµãŒãã¹ãå©çšããŠãã ãã賌å
¥è
ãã·ã§ãããªãŒããŒã®çæ§ã®ããšã第äžã«èããŠãæ§ã
ãªè§åºŠãããµãŒãã¹ãå
±ã«çºå±ãããŠãã仲éãåéããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ã宿œããŠãããŸãã®ã§ããã²ãæ°è»œã«ãåãåãããã ããã open.talentio.com
2022/4/28(æš)ã«ãªã³ã©ã€ã³ã§éå¬ãããã éå
¬åŒïŒ Go Conference 2022 Spring ã¹ãã³ãµãŒäŒæ¥4瀟 ã¢ãã¿ãŒããŒã¯ ãã«BASEããã2åãç»å£ããŸããã andpad.connpass.com ã€ãã³ãã«ã€ã㊠ä»åç»å£ãããŠããã ããã€ãã³ãã¯å
æ¥éå¬ãããã Go Conference 2022 Spring ãã«ã¹ãã³ãµãŒãšããŠåè³ããŠãã4瀟ã§è¡ãããã€ãã³ãã§ããäž»å¬ã®ANDPADããŸãèªãããããšãããããŸããã gocon.jp åœæ¥ã¯åŒç€Ÿå«ããŠæ¬¡ã®4ç€ŸïŒæ¬ç§°ç¥ïŒã®Gopherã®çºè¡šãšããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããŸããã æ ªåŒäŒç€ŸShowcase Gig BASEæ ªåŒäŒç€Ÿ æ ªåŒäŒç€ŸLayerX æ ªåŒäŒç€ŸANDPAD ïŒé çªã¯åœæ¥ã®çºè¡šé ïŒ åœæ¥ã®Twitterããã·ã¥ã¿ã°ã¯ #gocon2022_4sponsor ã§ããã BASEãšGo Conference 2022 Spring å
æ¥è¡ãããGo Conference 2022 Springã§BASEãè¡ãªã£ãã¹ãã³ãµãŒå
容ãã¡ã³ããŒã«ããç»å£å
容ã«ã€ããŠã¯æ¬¡ã®èšäºããåç
§ãã ããã devblog.thebase.in ç»å£å
容ã«ã€ã㊠ã¢ãã¿ãŒããŒã¯ã§ã¯BASE BANKããŒã ã®æž
æ°ŽïŒ @budougumi0617 ïŒãšæ°žéïŒ @glassmonekey ïŒãç»å£ããŸããã åœæ¥ã¯YouTubeã§é
ä¿¡ãããé²ç»ã¯æ¬¡ã®ãšããã§ãã www.youtube.com ANDPADããŸã®ç»å£å
容ã«ã€ããŠã¯æ¬¡ã®èšäºãåç
§ãã ããã \非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク LT内容の解説 〜ExcelとShift-JISとの闘争編〜 - ANDPAD Tech Blog New Relicã䜿ã£ã Observabilityã®å®çŸæ¹æ³ãšæŽ»çšäŸ by @budougumi0617 BASEæ ªåŒäŒç€ŸBASE BANKããŒã ã«ãŠã ããã¯ãªãŒããããŠããæž
æ°ŽïŒ @budougumi0617 ïŒã§ãã ã¢ãã¿ãŒããŒã¯ã§ã¯ç§ãã¡BASE BANKããŒã ã§New Relicãã©ã®ããã«Goã¢ããªã±ãŒã·ã§ã³ã«å°å
¥ããŠããããçºè¡šãããŠããã ããŸããã Goã¯ã¢ãããŒã·ã§ã³ããã°ã©ãã³ã°ãªã©ãåºæ¥ããæç€ºçã«SaaSã®SDKã®åŒã³åºããã³ãŒãã®äžã§å®è£
ããå¿
èŠããããŸãããã®ããäœãèããã«New Relicã®èšè£
ã³ãŒãïŒèšæž¬çšã®ã³ãŒãïŒãé©çšããŠãããšã次ã®èª²é¡ãæããããŸãã æ°èŠæ©èœã»æ°èŠãšã³ããã€ã³ããéçºãããã³ã«New Relicã®èšè£
ã³ãŒããå¿
èŠã«ãªã ããžãã¹ããžãã¯ã®ã¬ãã¥ãŒä»¥å€ã«New Relicã®å¯Ÿå¿ãæŒããŠããªããã¬ãã¥ãŒããå¿
èŠããã çºè¡šã§ã¯ãããã®èª²é¡ã«ã€ããŠæã
ãã©ã®ããã«ã¢ãããŒããããŠããã®ããµã³ãã«ã³ãŒããšäžç·ã«ç޹ä»ãããŠããã ããŸãããNew Relicã䜿ã£ãŠããªãæ¹ã«ãã²ãšã€ã®èšèšãã¿ãŒã³ãšããŠåèã«ããŠããã ããããšæããŸãã Goã§å§ããTDD by @glassmonkey ããªããBASEæ ªåŒäŒç€ŸBASE BANKããŒã ã«ãŠã Engineering Program Manager ãããŠãããšæ°žéïŒ @glassmonekey ïŒã§ãã ä»åã®ã¢ãã¿ãŒããŒã¯ã§ã¯Goã§TDDããã€ã€å°ããäœã£ãŠããããã»ã¹ã«é¢ããŠè©±ããããŠããã ããŸããã TDDãâã©ãâããã®ããšãã話ã¯ããèããšæããŸãããTDDã"ãªã"ããã®ãã®äžäŸããäŒãã§ãããªã幞ãã§ãã ä»å㯠Go Conference 2022 Spring ã§çºè¡šã®é¡æã«ããå§ååå²ããŒã«ã® glassmonkey/seimei ã顿ã«ããŸããã github.com ä»ã®æ¹ãäœã£ãã³ãŒããªãããã詊ããªããäœãããšã§å°ããã€çè§£ãéãã€ã€ã³ãŒããæžãããšãã§ããŸããããã®ãããã2~3æ¥ãããã®çæéãªãããæ£ç¢ºã«å®è£
ããããšãã§ããŸããã ãŸãã« @t_wada ãããä»°ã£ãŠã 質ãšã¹ããŒãã®è©± ãäœéšããããšãã§ããŸããã ä»åã®å Žåã ãšè³ªã ç§»æ€å
ã®ããŒã«(rskmoi/namedivider-python) ã質ãæ
ä¿ããŠãããŠãããšããã®ãäœæ¥ãšããŠã¯é²ããããã¯ãããŸããã github.com ãŸããçºè¡šåŸã« @serima ãããèšã£ãŠãç¹ã¯ãŸãã«ããã§ãæšä»ã®DevOpsã®æèã§èšããããããã€é »åºŠãéèŠãšèšãããç¹ãããã§ãããéçºè
å人ã«ããã£ãŒãããã¯ã«ãŒãã®åæ°ã¯å質ã«ãããŠéèŠãªèŠçŽ ã ãšåèªèããŸããã Goã¯ãããã£ãæå³ã§ãã³ã³ãã€ã«èšèªãªãããã³ã³ãã€ã«æéãçãæé«ã§ãã 仿¥ã® @glassmonekey ããã®çºè¡šãèããŠãããæãåºãããã ã£ãïŒ ããã«ãå°ããæ©ãã倱æã«æ°ä»ããä»çµã¿ãã€ããããã¿ãããªè©±ã§ãããOGP ã«ããªã£ãŠãããã®å³ãç§éžïŒ https://t.co/E1nXHVYsn1 — serima | LayerX (@serima) 2022幎4æ28æ¥ æåŸã«æ¹ããŠå
ããŒã«ã®äœè
ã§ãã @rskmoi ããã«ã¯æè¬ãè¿°ã¹ãããšæããŸããäžçã§2çªç®ã«ã¢ã«ãŽãªãºã ãžã®çè§£ãæ·±ãŸã£ããšèªè² ããŠãã®ã§ãä»åŸãã£ãŒãããã¯ã¯é©å®ããŠãããããªãšæã£ãŠã¯ããŸãã æšæ¥ã® #gocon ã§ãç§ãå人éçºããŠãPythonã®OSSãGoã«ç§»æ€ããLTããããŸãããç§ã®å®è£
ãèªãã§å®ç§ã«ç§»æ€ããŠé ããããšãGoã®ç¹æ§ãçãããŠCLIãšããŠã®æ§èœãæ Œæ®µã«äžããŠé ããããšãªã©å¬ããããšã°ããã§ãð https://t.co/buFlswv6iV — Rei Sakamoto (@rskmoi) 2022幎4æ24æ¥ ããã«ãã£ã¹ã«ãã·ã§ã³ã«ã€ã㊠åå人ã®çºè¡šåŸã¯4瀟ååã§ããã«ãã£ã¹ã«ãã·ã§ã³ãè¡ãããåœæ¥ã¯æ¬¡ã®ãããªè©±é¡ãæãããŸããã Go Conference 2022 Springã§æ°ã«ãªã£ãçºè¡š ããŒã¿ããŒã¹ããã±ãŒãžã®éžå®äºæ
ã¢ãã¿ãŒããŒã¯ã®çºè¡šå
容ã«ã€ã㊠CSVãæ±ãéã®èŠåŽè©± æ®æ®µã©ã®ããã«ç»å£å
å®¹ãæ±ºããŠããã®ã ä»ç€Ÿã®æ¹ã
ãšæ®æ®µãªããªãã話ãããããšãã§ããªãããããããããããšãã話ãã§ããããã¹ã©ã€ãçºè¡šãšã¯éã£ãç¥èŠå
±æã®æéã«ãªã£ããšæããŸãã å®£äŒ BASE BANKããŒã ã§ã¯ Go, Python, PHPãäžå¿ã«ãããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã§éçºããŠããŸãã ãŸãéçºã ãã§ãªããæ©èœãã°ããŒã¹ã»åæã»ãµããŒããŸã§æ
åœããŸãã ãããªéçºã¹ã¿ã€ã«ã«èå³ãããã£ãŠæ¹ã¯æ°žé( @glassmonekey )ã«DMãéã£ãŠããã ããã äžèšã®ãªã³ã¯ããæ°è»œã«ãé£çµ¡ãã ããã open.talentio.com ãè»¢è·æŽ»åã¯ããŠããªããã©ãGoã®æ¥ã
ã®éçºã®å°ãããšã£ãŠã©ããã£ãŠè§£æ±ºããŠããã®ïŒãã®ãããªéè«ãããããæ¹ã¯ @budougumi0617 ã®Meetyã§ã話ããŸãããã meety.net
ãã®åºŠã¯ã4/9(å)~4/11(æ¥)ã«éå¬ããã PHPerKaigi 2022 ã«ã¡ã³ããŒãç»å£ãããããã©ããã¹ãã³ãµãŒããã³ã¹ãã³ãµãŒããŒã¹ã¹ãã³ãµãŒãšããŠåè³ããŸããã ä»åã¯ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®æ§åãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã§ç»å£ããã¡ã³ããŒããã³ã¡ã³ãããå±ãããŸãïŒ PHPerKaigi 2022 ãšã¯ 2022/04/09(å) ~ 2022/04/11(æ) ã® 3 æ¥éã«ããã£ãŠ PHPerKaigi 2022 ãéå¬ãããŸãããä»å¹Žã¯ãªã³ã©ã€ã³ãšãªãã©ã€ã³ã®ãã€ããªããéå¬ã«ãªããŸãã BASE ã¯ãããŸã§ã«ãéå¬ãããŠãã PHPerKaigi ãžã®ç»å£äžŠã³ã«ã¹ãã³ãµãŒããã³ãã¥ããã£è²¢ç®æŽ»åãšããŠè¡ã£ãŠåããŸããã ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®æ§å äŒæ¥ããŒã¹æšªã®ã³ãŒããŒã§ã¯ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãšç§°ããã€ãã³ãäžã«åéããã»ãã·ã§ã³ãç¹°ãåºããããŸããããŸããä»åã¯ãªã³ã©ã€ã³ãªãã©ã€ã³ã®ãã€ããªããéå¬ã ã£ãããããªã³ã©ã€ã³ã§å®æœãããã¢ã³ã«ã³ãã¡ã¬ã³ã¹ããããŸããã ãçŸå°ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®ãç¥ããã ãããªãã¯ãã¥ãŒã€ã³ã°äŒå Žã«ã¯ãçŸå°ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ããšãªã¢ããããŸãã ãªã³ã©ã€ã³ïŒTrack CïŒã®ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãšã¯éããçŸå°ã«å±
ã人ããã®å Žã§æ°è»œã«ããŒã¯ãéå§ã§ããŸãã çŸå°ã«å±
ãæ¹ã¯ãã²ãã§ãã¯ïŒãå©çšãã ããïŒ #phperkaigi pic.twitter.com/BqmMgWYI2M — PHPerKaigi 2025 @3/21-3/23 (@phperkaigi) 2022幎4æ10æ¥ BASEããã¯ã以äžã®çºè¡šãè¡ããŸããã BASE x ã¡ã«ã«ãª ã¹ããŒã«ãŒ ã¢ãã¿ãŒããŒã¯ by kawashima ãªããžã§ã¯ãæåUIãšããèãæ¹ããšã³ãžãã¢ãããŒã ã«å°å
¥ãã話 by wakano ãPHP 8 ã§äœã JSON ããŒãµã ïŒby @shin1x1 ããïŒãå®è£
ããŠã¿ã by kushibiki åæŒïŒãªãŒããã«ã³ãããã®ããã by 02 ç¡éLT - ãªã³ã©ã€ã³ãããã by cureseven ã¯ããŸããŸããïŒ #phperkaigi pic.twitter.com/E2CKMbsXh9 — Mercari_Dev (@mercaridevjp) 2022幎4æ10æ¥ BASE x ã¡ã«ã«ãª ã¹ããŒã«ãŒ ã¢ãã¿ãŒããŒã¯ ã¯ãã¡ã«ã«ãªã®æ¹ã«ãèªãããã ãå®çŸããŸããã䞡瀟ã¢ãžã¥ã©ãŒã¢ããªã¹ã«ææŠããŠããã䌌ããããªæ©ã¿ãæã£ãŠããããªã®ã§å¯Ÿè«ããŸããããšã声ããããã ããéå¬ã«è³ããŸããã kawashimaãšç»å£ããŠãã ãã£ãå®éæ§ãã¯ãããã¡ã«ã«ãªã®ã¿ãªããŸããããšãããããŸããã ããŒã¯ã®äžã§ã¯ã ã¢ããªã¹ãšãã€ã¯ããµãŒãã¹ã®äžéã®éžæè¢ãã§ããã®ã¯è¯ãããšã ãšæã 綺éºã«å¢çãç¶æ
ã«ããã®ã¯å°é£ãªã®ã§ãé¢ä¿ããå ŽæãŸã§èª°ã§ãè§Šããç¶æ
ãäœã£ãŠããããšãå€§äº ã¢ãžã¥ã©ãŒã¢ããªã¹åãé²ããã«ããããçµç¹æ¹å€ãäžç·ã«é²ããå¿
èŠããããšæããŠãã ãšãã£ã話ããããŸããã ãªããžã§ã¯ãæåUIãšããèãæ¹ããšã³ãžãã¢ãããŒã ã«å°å
¥ãã話 by wakano ãPHP 8 ã§äœã JSON ããŒãµã ïŒby @shin1x1 ããïŒãå®è£
ããŠã¿ã by kushibiki åæŒïŒãªãŒããã«ã³ãããã®ããã by 02 ç¡éLT - ãªã³ã©ã€ã³ãããã by cureseven ç»å£è
ã®ã³ã¡ã³ã è¥é ( @sam8helloworld ) BASEã®ãéåšãã®ãµãŒãã¹éçºãããŠãã @sam8helloworld ã§ããPHPerKaigi 2022ã§ã¯çŸå°ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã«ãŠããªããžã§ã¯ãæåUIãšããèãæ¹ããšã³ãžãã¢ãããŒã ã«å°å
¥ãã話ããšããçºè¡šãè¡ããŸããã èªåèªèº«ãã®ã€ãã³ãã¯ååå ã§ããããšãäžç·ã«åå ããååã¯ã»ãŒå
šå¡ãªã¢ã«ã§ã¯åããŸããŠã§ããããšãçºè¡šå
容ãéçºã®æèããã¯é¢ãããã®ã§ããããšãªã©ãçç±ã§åœæ¥ã¯æããããªãç·åŒµããŠããŸãã(ç¬) ãŸãèªåã®åã£ãæ ã®éå§æéã¯ãæŒã®ãããªãã¯ãã¥ãŒã€ã³ã°ã®ã»ãã·ã§ã³ãšè¢«ã£ãŠããŠãæéã«ãªã£ãŠã誰ã人ãåšãã«ããŸããã§ãããç·åŒµããŠãã®ãçžãŸã£ãŠã人ããªããã¢ã³ã«ã³ãã¡ã¬ã³ã¹ããããããªïŒããšæã£ãããããŠãŸããã ãã ãPHPerKaigiã¯åãæž©ãããã®ã§ã ãã ããšäººãéãŸã£ãŠããŠæ°ã¥ãããäœäººãã®äººãã¹ã©ã€ããæ ããã¹ã¯ãªãŒã³ãèŠãŠãããŠããŸããããã®å
æ¯ã«ãšãŠãå¬ãããªãæ°ã¥ãããæšæ¶ããŠçºè¡šãå§ããŠãŸããã çºè¡šäžã¯åå è
ã®çãããçžæ§ãæã£ãŠãããŠãããã¡ã¢ããŠãããŠããã®ãèŠããã®ã§å¬ãããªããäœãšãããŠãã®äººãã¡ã«èªåã®äœéšè«ã圹ã«ç«ãŠãŠããããããšæããŸããããªã®ã§çšæããŠãåçš¿ã«ã¯æžããŠãªãã£ãããšãå«ããŠæ²¢å±±è©±ããŠããŸããŸããã åœå20åã¡ãã£ãšã§çµããå
容ã§äœã£ãã¹ã©ã€ãã ã£ãã®ã§ãããæ°ã¥ããã40åè¿ã話ããŠãŠçµããé ã«ã¯å£°ãå°ãæ¯ãã¡ãã£ãŠãã®ãããæãåºã§ãã çºè¡šåŸã¯åæ¥ãŸã§ã®ç²ããç·åŒµã¯å¹ãé£ã³ãããŸã話ãããããªãã£ãäŒå Žã®åå è
ãäžç·ã«åå ããŠãååãšãããã話ãããšãã§ããŸãããããã¯ã«ã³ãã¡ã¬ã³ã¹ãã€ããšã§ãèšãã®ã§ããããïŒç§ã«ãšã£ãŠç·åŒµããä¹
ãã¶ãã®ãªãã©ã€ã³ã«ã³ãã¡ã¬ã³ã¹ã¯ãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®ããŒã¯ãšãããªãããªãéããŠåãæ¥œããã«ã³ãã¡ã¬ã³ã¹ã«ãªã£ãŠããŸããã ä»ã¯æ¥å¹Žã®PHPerKaigi 2023ãæ¥œãã¿ã§ä»æ¹ããªãã§ãïŒ æ«åŒ ( @Panda_Program ) @Panda_Program ã§ããPHPerKaigi 2022 ã§ã¯ ãPHP 8 ã§äœã JSON ããŒãµã ïŒby @shin1x1 ããïŒãå®è£
ããŠã¿ã ãšããã¿ã€ãã«ã§çºè¡šãããŸããã æ®æ®µæ¥åã§ã¯ TypeScript ã§ Vue ã React ãæžããŠããããã³ããšã³ããšã³ãžãã¢ã§ãããã ãå
ã
ãã£ãªã¢ã PHP ã®ãµãŒããŒãµã€ããšã³ãžãã¢ããå§ããïŒæ¬åœã®æå㯠WordPress ã® Plugin éçºïŒãããPHPerKaigi ã®ååšã¯ç¥ã£ãŠããŸããã 瀟å
ã§ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®æ ã空ããŠããããã©ãããšã声ããè²°ãããšãŠãå¬ããã£ãã®ã§åå ããããšã«ããŸããã ä»åã¯ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãšããããšã§åæ¹åçãªãããšããã§ããããšãåæã«ãã¿æ¢ããããéã«ã以å PHP ã«ã³ãã¡ã¬ã³ã¹ã§æ°åããïŒ@shinx1xïŒã PHP ã§ JSON ããŒãµãå®è£
ãããšããçºè¡šããããŠããããšãèªåã PHP ãæžããŠããé 㯠7.4 ãææ°ã ã£ããã PHP 8 ã®æ©èœãåŠã³ãããšããåæ©ã§ãã®é¡æãéžã³ãŸããã æ¬çªã¯ã©ã€ãã³ãŒãã£ã³ã°ã§ãããæµç³ã«ã¶ã£ã€ãæ¬çªã§äžæãã¯ãããªãã ãããšãæºåãããŸãããæºåå
容ã¯ã忥ãšåã
æ¥ã«1åãã€éãã§ã¹ã©ã€ããèŠãªããå®è£
ããããšã§ãã æºåã§ã¯ã³ãŒããæžãããšãããŒãµã®ä»çµã¿ã«èå³ããã£ãããšããŸã PHP ã®æ°æ©èœã䜿ããããšïŒç¹ã« match åŒãé
åçïŒãããå¿ççã«ã¯çºè¡šçšã®è³æäœæããæ¥œã§ããïŒç¬ïŒã ã³ãŒã㯠GitHub ã«äžããŠããŸãã ãªã³ã©ã€ã³ã§ã®ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã§ãã£ãããšãæ¬çªåœæ¥ã®çŽåãèªåã®çºè¡šãšåãæé垯ã«ãçŸå°ã§ BASE à ã¡ã«ã«ãª ã®æåŒ·ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®éå¬ãçªçºçã«æ±ºãŸã£ãããšããããZoom ã®èŠèŽè
æ°ã¯10åãããããªããçšåºŠã§ããã ãã ããã®äžã§ãåå è
ã®æ¹ãåç»ã§é¡åºãããŠèªåã®è§£èª¬ã«ããªã¥ããŠãã ãã£ãŠãããããã¹ããèœã¡ãæã®ãããã°ãã³ã¡ã³ãã§æäŒã£ãŠãã ãã£ãããšããªã³ã©ã€ã³ã§ããã亀æµãã§ããŠããã£ãã§ãïŒ ä»åã¯åŒã£è¶ãçŽåŸã§ãã¿ãã¿ããŠããããšãã©ã€ãã³ãŒãã£ã³ã°ãããåãããšãç®æšãšããŠããã®ã§ãªãã©ã€ã³ããã¯ç·åŒµããªããªã³ã©ã€ã³ãéžã³ãŸããã ããããçºè¡šäžã«èªåã®ãšã³ãžã³ãããããçºè¡šåŸãããã«ã¯ç±ãå·ããªãã£ããããã©ã€ãã³ãŒãã£ã³ã°ã«å€±æããŠãããªãã©ã€ã³ã§åå ããã®ãããã£ãããªãšæããŸããããªã³ã©ã€ã³ã ãšãã«ã³ãã¡ã¬ã³ã¹ã®å»äžãïŒç«ã¡è©±ïŒãã§ããªãã§ãããã ãŸãåå ããæ©äŒãããã°ã次ã¯ãªãã©ã€ã³åå ããŠèŠãããšæããŸãïŒ åœæ¥ã®ã©ã€ãã³ãŒãã£ã³ã°ã®æ§åãçŸå°ã¡ã³ããŒã BASE ã®ããŒã¹ã§ãæµããŠãããŠããŸãã æåŸã« PHPerKaigiã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã¯ããªãã©ã€ã³ãªãã§ã¯ã®äº€æµãããããçãŸããŸãããã«ã³ãã¡ã¬ã³ã¹ãšéããã©ããªç©ºæ°ã§è³ªåãããããé£ã³äº€ã£ãŠããæ§åã§ããã ãããªç©ºæ°æã®äžã§ãçºè¡šãéããŠããããã®äººãšäº€æµã§ããããšãå¬ããæã£ãŠããŸãïŒ ãããããBASEã¯ãšã³ãžãã¢ã³ãã¥ããã£ãšã®ã€ãªããã倧äºã«ããŠãããŸãã ç§ãã¡ã¯ãµãŒãã¹ãå
±ã«çºå±ãããŠãã仲éãåéããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ã宿œããŠãããŸãã®ã§ããã²ãæ°è»œã«ãåãåãããã ããã https://open.talentio.com/r/1/c/binc/homes/4380
ã¹ããã³ãµãŒãããŒã¹ãŠãã®éååç ãã®åºŠã4/9(å)~4/11(æ¥)ã«éå¬ããã PHPerKaigi 2022 ã«ãã©ããã¹ãã³ãµãŒããã³ã¹ãã³ãµãŒããŒã¹ã¹ãã³ãµãŒãšããŠåè³ããŸããã ä»åã¯ãã¹ãã³ãµãŒããŒã¹ã®æ§åãPHPerããŒã¯ã³ã®çãåãããªã©ããå±ãããŸãïŒ PHPerKaigi 2022 ãšã¯ 2022/04/09(å) ~ 2022/04/11(æ) ã® 3 æ¥éã«ããã£ãŠ PHPerKaigi 2022 ãéå¬ãããŸãããä»å¹Žã¯ãªã³ã©ã€ã³ãšãªãã©ã€ã³ã®ãã€ããªããéå¬ã«ãªããŸãã BASE ã¯ãããŸã§ã«ãéå¬ãããŠãã PHPerKaigi ãžã®ç»å£äžŠã³ã«ã¹ãã³ãµãŒããã³ãã¥ããã£è²¢ç®æŽ»åãšããŠè¡ã£ãŠåããŸãããä»åã¯ãã©ããã¹ãã³ãµãŒããã³ã¹ãã³ãµãŒããŒã¹ã¹ãã³ãµãŒãšããŠåœã«ã³ãã¡ã¬ã³ã¹ã«åè³ããŠããŸãã ãã©ããã¹ãã³ãµãŒã®äžèЧïŒ2段ç®1çªå·Šã«BASEã¢ã€ã³ã³ïŒ ã¹ãã³ãµãŒããŒã¹ã¹ãã³ãµãŒã®äžèЧïŒ1段ç®1çªå³ã«BASEã¢ã€ã³ã³ïŒ ã¹ãã³ãµãŒããŒã¹åºå± elePHPantã¬ãããã¿ããããã䞊ãã ããŒã¹ã§ã¿ãªããããåºè¿ã ãããªãã¯ãã¥ãŒã€ã³ã°äŒå Žã®ç·ŽéЬåºç«åºæ°ã»ç£æ¥ãã©ã¶ CoconeriããŒã«ã§ã¯ããªãã©ã€ã³ã§åå ãããŠããçããŸãšäº€æµããå ŽãšããŠãããŒã¹ãåºå±ããŸããã ãªãã£ã¹ã«ããããããelePHPantãã¡ãç·åå¡ããŠãããŒã¹ã圩ã£ãŠããããŸããã BASEããã¯åèš6人ã®ã¡ã³ããŒãç»å£ããã¡ã€ã³ã»ãã·ã§ã³ãLTããªãã©ã€ã³ã»ãªã³ã©ã€ã³ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ãªã©ã®æ§ã
ãªå Žæã§çºè¡šãè¡ã£ãŠããã®ã§ãããç»å£åŸãããŒã¯ã®å
容ã«ã€ããŠè³ªåãçžè«ãªã©ã®ã³ãã¥ãã±ãŒã·ã§ã³ãè¡ãå ŽãšããŠããããã®æ¹ã«ãç«ã¡å¯ãããã ãã倧å€è³ãã£ãŠãããŸããã ãç«ã¡å¯ãããã ããçããŸããããšãããããŸããïŒ å®éã«åºå±ããã¹ãã³ãµãŒããŒã¹ã®åç ããŒã¹ã³ã³ãã³ãã®BASE Appsã¯ã€ãº ãŸããããŒã¹ã§ã¯éã³ã«æ¥ãŠãã ãã£ãçããŸã«ããBASEã®ããšãç¥ã£ãŠããã ãããã«ããBASE Appsã¯ã€ãºããšãããã®ããçšæããŠéãã§ããã ããŠããŸããïŒ ãããã·ã§ããäœæãµãŒãã¹ãBASEãã«ã¯ãã©ããªèŠæš¡ã®ã·ã§ããã§ãã·ã§ããéå¶ã«å¿
é ãªãåºæ¬æ©èœãã®ä»ã« ãBASE Appsããšãããã©ã°ã€ã³æ¹åŒã§ã·ã§ããéå¶ã«å¿
èŠãªæ©èœãå¿
èŠã«ãªã£ãã¿ã€ãã³ã°ã§è¿œå ã§ããä»çµã¿ ããããä»åã¯ãã®ãBASE Appsãã®ã¢ã€ã³ã³ããæ©èœã®å
容ãšååãæšæž¬ããŠçããŠããã ããšããã¯ã€ãºãäœæããŸããã BASE Appsã¯ã€ãºãããããŒãž ã·ã§ãããªãŒããŒãããšã®åºäŒã ããããã®æ¹ãããŒã¹ã«ç«ã¡å¯ã£ãŠããã ããã®ã§ããããã®äžã§ãå®éã«BASEããå©çšããã ããŠããæ¹ã
ã«åºäŒãããµãŒãã¹ã«ã€ããŠã®çã®å£°ãããã ããŠéåžžã«ãããããæ©äŒã«ããªããŸããã ãé£ã®äŒæ¥ããŒã¹ã«ãŠåå ãããŠããæ¹ãæèžäœåãªã©ã®è²©å£²ã«äœ¿ã£ãŠããã ããŠãããããå®¶æãæäœãã®ã¢ã¯ã»ãµãªãŒã®è²©å£²ã«ãå©çšãã ãã£ãŠããæ¹ãããã£ããã£ãããã¯ããŸããããããäœ¿ãæ¹ã£ãŠã§ããããªïŒããšçžè«ãã«æ¥ãŠãã ããæ¹ãããã£ããããBASEãšãããµãŒãã¹ãè²ã
ãªæ¹ã«å©çšããã ããŠããããšãæ¹ããŠæ°ä»ããããŠããããããè¯ããµãŒãã¹äœã£ãŠãããïŒïŒðª ããšã¢ãããŒã·ã§ã³ãé«ãŸããã£ãããããã ããŸããã ãŸãããé£ã®äŒæ¥ããŒã¹ã«ããã£ããã£ãæ¹ã¯ã©ã€ããšã³ããã€ããªã³ã°ã§PHPerKaigi 2022ããŽãåºç¹ããããã¯ãã·ã§ã³ãäœãããŠããŠãããããã£ãŠBASEã·ã§ããã§è²©å£²ãããŠããååã¯ã€ããããŠããã®ãâŠïŒããšãæãããŸããŸããšèŠãŠããŸããŸããïŒç¬ïŒ ããããšã¬ãçµãã£ãããã²ã£ããè¿ããŠç¶¿ãè©°ããŠè©°ããŠè©°ããŠ... #phperkaigi ããŽã®ããã¯ãã·ã§ã³ãåºæ¥ãŸããïŒ pic.twitter.com/UX6WTXfX7p — æ¯çœèã¡ãã/ãŸãã (@marii_mikuriya) 2022幎4æ11æ¥ PHPerããŒã¯ã³ã®è§£èª¬ PHPerãã£ã¬ã³ãž ä»åã®ã€ãã³ãã§ã¯ãªã³ã©ã€ã³ããªãã©ã€ã³ã©ã¡ãã®åå è
ãã²ãŒã æèŠã§æ¥œãããïŒããå§ãŸãããŒã¯ã³ãæ¢ããã€ã³ããç«¶ãPHPerãã£ã¬ã³ãžã䜵ããŠïŒæ¥éã®ã€ãã³ãã®éã¿ããªã§ã©ã³ãã³ã°ãç«¶ã£ãŠããŸããïŒ å
š150ããŒã¯ã³ããã³ãã¬ãããèšäºã«æ£ãã°ã£ãŠããã®ã§ã¿ããªã§è²ã
ãšæ¢ããŠæ¥œããã§ãããŸãããïŒé ããŠããããŒã¯ã³ãæ¢ãã®ã¯æ¥œããã§ããïŒ ã©ã³ãã³ã°ã®çµæã¯ ãã¡ã ïŒïŒïŒ BASEããã®ããŒã¯ã³ããèŠãããŸãïŒ ã#ä»BASEã«å
¥ç€ŸããŠããããšããã®?ã ãã³ãã¬ããã®BASEã®ã³ãŒããŒã®ã¿ã€ãã«ã«ãããŸããïŒ ãã³ãã¬ããã®BASEã®ã³ãŒã㌠ã#BASEãã4人ç»å£ã BASE Bookã®èšäºã®äžã«å
¥ã£ãŠããŸããïŒ BASE Bookã®èšäºã®åç basebook.binc.jp ã#ç»å£å¿æŽäžã YoutubeïŒPeople & Culture in BASEïŒã®æŠèŠæ¬ãããã·ã¥ã¿ã°ã®äžã«ãããŸããïŒ Youtubeã®æŠèŠæ¬ã®åç 【前編】登壇するエンジニアを増やしたい。登壇支援活動をするエンジニアに話を聞きました - YouTube æåŸã« ãªãã©ã€ã³ã§ã®ã¹ãã³ãµãŒããŒã¹ã®åå ã¯ä¹
ã
ãªããšããããªãã©ã€ã³ãªãã§ã¯ã®ã³ãã¥ãã±ãŒã·ã§ã³ãä¹
ãã¶ãã«ã§ããã®ããªãšæããŸããã BASEããã£ãšèº«çŽã«æããŠããã ããããšãã§ããªãŒããŒããããšãå®éã«ã話ããã§ãããããããã·ã§ããã䜿ã£ãŠã¿ããæ¹ã®ãçžè«ã«ä¹ãããšãã§ããŸããã ããããã®åå è
ã®æ¹ã
ãçºè¡šã«ãµããããšãã§ãããšãŠãå
å®ããæéãéããããŠããã ããŸããã ãããå®è¡å§å¡é·ã§ããé·è°·å·ãããã¯ãããå®è¡å§å¡äŒã®çæ§ã®ãããã§ããå¿ããæè¬ç³ãäžããŸãã æ¥å¹ŽããŸãçæ§ã«ãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸãã
ã¯ããã« ããã«ã¡ã¯ãProduct Dev Division ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãããŠãã @tac_tanden ã§ãã Docker Desktop ææåã®ç§»è¡æéãçµãã£ãŠçŽ 3 ã¶æãçµã¡ãŸããããçããŸããããéããã§ããããïŒ æ¬ã®ææã¯éããŠããæ°ãããŸãããBASE 瀟å
ã§è¡ã£ã Docker Desktop ã®ææåç§»è¡ãããäžã§åŸãç¥èãç¥èŠãæ¹ããŠãŸãšããã®ã§ãããã¯ããã°ã§å
¬éãããŠããã ãããšã«ãªããŸããã ææã¢ã«ãŠã³ã賌å
¥ã®éçšãããŒã瀟å
ã®äºç®æ¡ã®äœæãæ
åœããåœæã®èªåããæåããç¥ã£ãŠããã°ãããªã«èŠåŽããªãã£ãã®ã«ïŒãšããã®ãäž»ã«ãŸãšããŠããŸãã ãªã®ã§ãæ³å®ãããèªè
ã®æ¹ãšããŠã¯ä»¥äžã®éãã§ãã Docker Desktop ã®ææãã©ã³ã賌å
¥äºå®ã ããã©ãããåºæºã§éžãã§ããã®ãããããªã è¿ãå°æ¥ãææãã©ã³ã®è³Œå
¥æ¡ä»¶ã«è©²åœããããªã®ã§ãäºãæºåãããŠãããã æ°å
¥ç€Ÿå¡ã®æ¹ã® Docker Desktop ã®ææãã©ã³ãžã®è¿œå éçšãããŒãã©ããã£ãŠããã®ãæ°ã«ãªã ããã§ã¯ããããããé¡ãããŸãïŒ Docker Desktopã®å©çšãææã«ãªãåºæºã¯ã©ãããïŒ Â Docker ã®ãã©ã³ããšã®äŸ¡æ Œè¡šãæ²èŒãããŠããããŒãžã®äžçªäžã«ä»¥äžã®ããã«æžãããŠããŸãã Docker Desktop is free to use, as part of the Docker Personal subscription, for individuals, non-commercial open source developers, students and educators, and small businesses of less than 250 employees AND less than $10 million in revenue. Pricing & Subscriptions ç¹ã«ã¹ã¢ãŒã«ããžãã¹ã®éšåã§ãã "small businesses of less than 250 employees AND less than $10 million in revenue"ãšãããåŸæ¥å¡æ°ã 250 äººæªæºãã€å¹Žéå£²äž 1000 äžãã«æªæºã®äŒæ¥ã®ã¿ç¡æã§å©çšå¯èœãšæžãããŠããŸãã äŸãã° BASE æ ªåŒäŒç€Ÿã¯åŸæ¥å¡æ°ãã 250 å以äžã§ããã幎é売äžé« 1000 äžãã«ä»¥äžã«ã¯è©²åœãããç¡æå©çšã®å¯Ÿè±¡å€ãšããããšãããããŸãã ç¡æå¯Ÿè±¡ã®äŒæ¥ åŸæ¥å¡æ° 250 äººæªæº 幎éå£²äž 1000 äžãã«æªæº ææãã©ã³ã¯å
šéšã§3çš®é¡ æ¯æãæ¹æ³ã«ãã倿®µãå€ãã£ãŠããŸãã 幎æããããå Žåã¯ä»¥äžã®å€æ®µã«ãªããŸãã ãŸããææããããå Žåã¯ä»¥äžã®å€æ®µã«ãªããŸãã Pro ãš Team ã ãš 1 ã¶æãããã®éé¡ã 2 ãã«éããŸãïŒå¹Žé 24 ãã«ïŒãããã«ãBusiness ã ãš 1 ã¶æããã 21 ãã«ïŒå¹Žé 252 ãã«ïŒãšãªãäžæ°ã«å€æ®µãäžãããŸããGitHub Enterprise ãã©ã³ã幎é 252 ãã«ãšåãéé¡ãªã®ã§ããããæèãã倿®µèšå®ã«ãªã£ãŠããã®ãããããŸããã"Buy Now"ã®äžã«ç®ç«ã€ããã«"Contact Sales"ã®ãã¿ã³ãããã®ã§ãåãåãããããŠããªã¥ãŒã ãã£ã¹ã«ãŠã³ãããµããŒããªã©ã§å€æ®µã調æŽããåæã«ãªã£ãŠããããã«ãèŠããŸããã Team ãã©ã³ã§ã¯ã幎æãã®å Žå㯠"Start with minimum 5 users for $25."ãšãããæäœ 5 ãŠãŒã¶å賌å
¥ãå¿
èŠã§ãããæåã® 5 ãŠãŒã¶ãŸã§ã¯åãããŠæé¡ 25 ãã«ã§å©çšã§ããããšãããããŸãã æé¡ 25 ãã«ãªã®ã§å¹Žé 300 ãã«ãšãªããéåžžã ãš 5 ãŠãŒã¶ã§æé¡ 35 ãã«ãªã®ã§å¹Žé 120 ãã«å®ã賌å
¥ã§ããèšç®ã§ãã ãŸããææãã®å Žåã®åæ§ã®å²åŒããããæåã® 5 ãŠãŒã¶ã¯ãŸãšããŠæã
35 ãã«ã§å©çšãå¯èœã§ãã 賌å
¥æ° ææã 幎æã æåã® 5 ãŠãŒã¶åèš 35 ãã«/æ 25 ãã«/æ 6 ãŠãŒã¶ç®ä»¥éïŒ1 ãŠãŒã¶ãããïŒ 9 ãã«/æ 7 ãã«/æ â»ãã©ã³ã®äŸ¡æ Œã¯ 2022/04/28 çŸåšã®äŸ¡æ Œã«ãªããŸããææ°ã®æ
å ±ã¯ Pricing & Subscriptions ã埡芧ãã ããã ãã©ã³ããšã®æ©èœã®å·® BASE 瀟å
ã§ãã©ã³ãæ€èšãããšãã«æ¯èŒãããã€ã³ããããã€ãããã¯ã¢ããããŸãã Docker Desktopã®å©çš BASE ã§ã®äžçªã®ç®çã Docker Desktop ã®å©çšã§ããïŒä»£æ¿æ¹æ³ãããã€ããããŸãããããããšã®æ¯èŒã¯å²æããŸãïŒã ãã¹ãŠã®ãã©ã³ã«å«ãŸããŠããã®ã§ããã©ã³éã®æ¯èŒã§ç¹ã«èæ
®ãã¹ãç¹ã¯ãããŸããã§ããã ææã¢ã«ãŠã³ã管ç Pro ãã©ã³ã®èª¬æã«ã¯ "Includes pro tools for individual developers who want to accelerate their productivity." ãšãããåºæ¬çã«ã¯å人åãã®ãã©ã³ã§ã賌å
¥ãå人æ¯ã«ãªã£ãŠããŸããŸãã察ããŠãTeam, Business ã¯çµç¹åãïŒäŒç€Ÿãªã©ïŒã®ãã©ã³ã§ã賌å
¥ããOrganizationããšããåäœã§è¡ãããŸããDocker Hub ã® Organization å
ã«ãŠãŒã¶ãæåŸ
ããŠãææã¢ã«ãŠã³ãæ ïŒã·ãŒãïŒã«è¿œå ã§ããŸãïŒGitHub ã® Organization ãšã»ãŒåã圹å²ã§ããïŒã äŒç€Ÿã®éçºçµç¹ãšããŠè³Œå
¥ããå Žåã¯ãäžæ¬ã§ç®¡çã§ããã»ããè¯ããšæãã®ã§ãåºæ¬çã« Team ãã©ã³ä»¥äžãéžæè¢ã«ãªãããã§ãã Audit Log Team 以äžã®ãã©ã³ã§ãOrganization å
ã®å€æŽãã°ã確èªã§ããããã«ãªããŸãã Purchase via invoice è«æ±æžã«ãã賌å
¥ã¯ Business ãã©ã³ã®ã¿å¯Ÿå¿ããŠããããã§ããäŒç€ŸãšããŠå¿
é ãªã±ãŒã¹ããããããããŸããã Single Sign-On (SSO) BASE 瀟å
ã§æ€èšããéã«ãäžçªéèŠãªãã€ã³ãã ã£ãã®ã SSO ã§ãããSSO 㯠Business ãã©ã³ãã察å¿ããŠããŸãããSSO ã¯äŒç€ŸãšããŠå¿
é ã«ãªã£ãŠããå Žåãããã®ã§ã¯ãªãã§ããããã åŒç€Ÿã®å Žåã瀟å
ã®ã¢ã«ãŠã³ãã®ç®¡çãæ
åœããŠããããŒã ãšç¢ºèªããå°å
¥ãããµãŒãã¹ã SSO ã«å¯Ÿå¿ããŠããããšã¯çŸæç¹ã§å¿
é ã«ããŠããªããšããã¬ã€ãã©ã€ã³ã®ããšãSSO ãçç±ã« Business ãã©ã³ãéžæããŸããã§ãããSSO 以å€ã«ã现ããéšåãå«ããŠè°è«ããçµæããŸã㯠Team ãã©ã³ãå°å
¥ããããšã«æ±ºãŸããŸããã â»ãã©ã³å
容㯠2022/04/28 çŸåšã®ãã®ã«ãªããŸããææ°ã®æ
å ±ã¯ Pricing & Subscriptions ã埡芧ãã ããã ææãã©ã³ã®äºç®ãç«ãŠãäžã§èæ
®ããããã€ã³ã ããã§ã¯ãTeamããã©ã³ãå°å
¥ãããšãã«ã幎éã®äºç®ãç«ãŠãäžã§èª¿æ»ããŠããã£ããã€ã³ãããŸãšããŠãããŸãã 幎æã/ææã ãŸãã幎æã or ææãã§ 1 ãŠãŒã¶ããã幎é 24 ãã«å·®ããããŸãããããŠãæåã® 5 ãŠãŒã¶ãŸã§ã¯åç®ã§ 25 ãã«ïŒææãã®å Žå㯠35 ãã«ïŒã§å©çšã§ããã®ã§ãèšç®ããå Žåã¯å°ãããããããªããŸãïŒå¹Žé 120 ãã«ã®å·®ã§ããïŒã èªåã¯ããæå 5 ãŠãŒã¶ãŸã§ãã®ãšãããèªã¿éãã5 ãŠãŒã¶æ¯ã«ãã£ã¹ã«ãŠã³ãããããšæãäºç®ã®èšç®ãããŠããŸããŸãããã120 ãã«ã®ãã£ã¹ã«ãŠã³ãã«ãªãã®ã¯æåã® 5 ãŠãŒã¶ã®ã¿ã§ã以éã®ãŠãŒã¶ã«å¯ŸããŠã¯ãã£ã¹ã«ãŠã³ãã¯ãªãã®ã§ã泚æãã ããã ãŸãã Add seats to your subscription ã®ããŒãžã確èªãããšããã幎æããšææãã®ãŠãŒã¶ãæ··åšãããããšã¯ã§ããŸããã§ããã When you add a monthly or annual subscription, it includes seats for that subscription only. ææã¢ã«ãŠã³ãã墿žãããšãã«ãããæé æ¬¡ã«ææã¢ã«ãŠã³ãïŒã·ãŒãïŒæ°ã®å¢æžã®éšåãèããŠãããŸãã ãã¡ãã Add seats to your subscription ã確èªãããšã远å 賌å
¥ã¯æ¬¡åã®æ¯æãææ¥ãŸã§ã®æ¥å²ãæåã§æ¯æãããšãæžãããŠããŸãã When you add seats to your subscription in the middle of your billing cycle, you are charged a prorated amount for the additional seats. ãããŠãããŒã ã®ææã¢ã«ãŠã³ãã¯ãã·ãŒãïŒåžïŒããšããæŠå¿µã§ãææåžã空ãããå¥ã®ãŠãŒã¶ãçŽä»ããããä»çµã¿ã«ãªã£ãŠããŸãããªã®ã§ãããéè·è
ãåºãŠããŸã£ãå Žåã§ãã䜿ããªããªã£ãææã¢ã«ãŠã³ããå¥ã®ãŠãŒã¶ã«ä»ãæ¿ããããšãå¯èœã§ãã éã«è§£çŽæã§ããã Remove seats from your subscription ã«ã¯ãè§£çŽã¯æ¬¡åã®æ¯æãæã«ãã®åãæžé¡ãããšèšèŒãããŠããŸããã You can manage your Docker Hub subscription anytime by removing seats from your subscription. If you remove seats in the middle of the billing cycle, changes are applied immediately and reflect in the next billing cycle. äžèšã®èŠçŽ ã«å ããŠãäŒç€Ÿã®æ¡çšç¶æ³ãšä»åŸã®äººå¡èšç»ãéå»ã®éè·è
/å©çšè
ã®å®çžŸãã 1 幎éã«æ¯æãæéãæ¯èŒããŠã幎æããææããæ€èšãããšããããã§ãã ææã¢ã«ãŠã³ãã«æ°å
¥ç€Ÿå¡ã®æ¹ã远å ããéçšæ¹æ³ æåŸã« BASE ã§ã®ãææã¢ã«ãŠã³ãã®ç®¡çæ¹æ³ãå
±æãããŠããã ãããšæããŸãããšã¯èšã£ãŠãç¹å¥ãªããšã¯ããŠããããGoogle form ãšã¹ãã¬ããã·ãŒãã䜿ã£ãŠã¢ã«ãŠã³ãã®è¿œå ãä»ãæ¿ãã®ç®¡çãè¡ã£ãŠããŸãã æ°ããå
¥ç€Ÿãããæ¹ã«ããªã³ããŒãã£ã³ã°æéã« Google form ããå©çšäžã® Docker ID ãæçš¿ããŠããã ãããã«ããã«ããŠããŸããGoogle form ã§ã¯åçããã®ãŸãŸã¹ãã¬ããã·ãŒãã«åæ ãããããã«èšå®ã§ããŸãããform ã®ç®¡çè
ã¯æ°ããåçããããéã«ã¡ãŒã«ã§éç¥ãé£ã¶ããã«ããããšãã§ããã®ã§ãèŠéããŠããŸãå¿é
ãå°ãªãã§ãã æ°ããå
¥ç€Ÿãããæ¹ããªã³ããŒãã£ã³ã°æéã«å¿ããã«ç³è«ããªããã°ãããªãããšããç¹ã¯ãŸã æ¹åã®äœå°ã¯ãããŸãããçŸç¶ã¯ä»¥äžã®ãããªéçšã«ãªã£ãŠããŸãã ãåèã«ãªãã°å¹žãã§ãã ãããã« Docker Desktop ææå察å¿ãæ
åœããŠããåœæã®èªåããæåããç¥ã£ãŠããã°èŠåŽããªãã£ãã®ã«ãªãããšãããã€ã³ããäž»ã«ãŸãšããŠã¿ãŸãããå°ãã§ãåèã«ãªãã°å¹žãã§ãã æåŸãŸã§èªãã§ããã ããããããšãããããŸããã BASE ã§ã¯ãŠãŒã¶ç¬¬äžã«ãµãŒãã¹ãå
±ã«äœã£ãŠãã仲éãåéããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ã宿œããŠãããŸãã®ã§ããã²ãæ°è»œã«ãåãåãããã ããïŒ https://open.talentio.com/r/1/c/binc/homes/4380
ããã«ã¡ã¯ãBASEæ ªåŒäŒç€Ÿ BASE BANKããŒã ã®åå·ãæž
æ°Ž( @budougumi0617 )ã§ãã 3æäžæ¬ã«New RelicããCircleCI integrationãå
¬éãããŸããã BASE BANKããŒã ã§äœ¿çšããŠã¿ãã®ã§ãèšå®æ¹æ³ãªã©ããŸãšããŠãéãããããŸãã TL;DR 3æäžæ¬ã«New Relicã®CircleCI Integrationãå
¬éãããNew Relicäžã§jobãã¯ãŒã¯ãããŒã®å®è¡æéããžã§ããã«ã¹ãå®è¡æ°ãªã©ãååŸã§ããããã«ãªã£ã New Relic OneãšCircleCIã飿ºããããã·ã¥ããŒããäœæããæ¹æ³ãã玹ä»ãã jobã®ç¶æ³ã ãã§ãªããworkflowã®ç¶æ³ãããã·ã¥ããŒãã«è¡šç€ºããæ¹æ³ãã玹ä»ãã èæ¯ 2022幎3æã« New Relic Instant ObservabilityïŒNew Relic I/OïŒ ã®æ°ããªé£æºå
ããŒãããŒãšããŠCircleCI, Netlify, Jiraãªã©ãçºè¡šãããŸããã docs.newrelic.com BASE BANKããŒã ã§ã¯ãèªåãã¡ã®éçºçµç¹ãšããŠã®ããã©ãŒãã³ã¹ãã©ãããããªã®ãã倿ããããã«ããœãããŠã§ã¢éçºããŒã ã®ããã©ãŒãã³ã¹ã瀺ã 4 ã€ã®ææšã®ãã¡æå§ãã«ãããã€é »åºŠãèšæž¬ããŠããŸãã devblog.thebase.in ãããŸã§ã¯Deployment MarkerãçšããŠNew Relic Oneäžã§ãããã€é »åºŠãèšæž¬ããŠããŸãããããã®åºŠCircleCI Integrationãç»å Žããã®ã§ãããã䜿ã£ãŠãããã€é »åºŠãªã©ã®æ
å ±ãããã·ã¥ããŒãã«è¡šç€ºããŠã¿ãŸããã CircleCI Integration ãã®Integrationã§ã¯CircleCI WebhookããååŸã§ããæ
å ±ãNew Relic Oneã«é£æºããããšãã§ããŸãã newrelic.com circleci.com CIäžã§å®è¡ãããžã§ããã¯ãŒã¯ãããŒããã€ãã©ã€ã³ã®IDãååãã¹ããŒã¿ã¹ãå®è¡éå§æéãçµäºæéã ãã§ãªããCircleCIãšé£æºããŠããVCS(gitãªã©)ã®ã³ãããæéãå
容ãauthorãªã©ãååŸããããšãã§ããŸãã ãã®ãããäŸãã° åäœæéãããã®ããŒã¿ã«å®è¡ãžã§ãæ°ãã¯ãŒã¯ãããŒæ° ãžã§ããã«ã¹ çŽè¿å€±æãããžã§ã ãããžã§ã¯ããããã®ãžã§ãå®è¡æ° ã³ããããããªãªãŒã¹ãŸã§ã®æèŠæé ãªã©ãååŸã§ãããã©ã¡ãŒã¿ã®äœ¿ãæ¹ã«ãã£ãŠæ§ã
ãªããŒã¿ãèšæž¬ã衚瀺ããããšãã§ããŸãã èšå® ããã·ã¥ããŒããäœæãã ãµã³ãã«ã®ããã·ã¥ããŒãã¯New Relic I/Oã®CircleCIããŒãžã®ãInstall quickstartãããç°¡åã«äœæã§ããŸãã New Relicäžã® Install quickstart ãã¿ã³ Quick Installãå®äºãããšã2022/04/06æç¹ã§ã¯æ¬¡ã®ãããªããã·ã¥ããŒããäœæãããŸãã New Relicäžã«äœæãããCircleCIã®ããã·ã¥ããŒã ãã®ã¯ã€ãã¯ã€ã³ã¹ããŒã«ã§ã¯ããã·ã¥ããŒãã¯äœæãããŸããããŒã¿é£æºã®èšå®ã¯è¡ãããŸããã äœæãããããã·ã¥ããŒãã«CircleCIããCI/CDã®ããŒã¿ãéä¿¡ããã«ã¯CircleCIäžã§ã®èšå®ãå¿
èŠã«ãªããŸãã CircleCIããNew RelicãžããŒã¿ãéä¿¡ãã Quick Installã®æé ã«ã¯èšèŒãããŠããŸãã 1 ããCircleCIäžããNew Relicã«éä¿¡ããã«ã¯APIããŒãå©çšããŠåŸè¿°ã®New Relicã®ãšã³ããã€ã³ãã®URLãCircleCIã®Webhookã«ç»é²ããå¿
èŠã«ãªããŸãã New Relicã®API KeyãååŸãã ä»åã®é£æºã§å©çšããNew Relicã®APIã¯Log APIã§ãã®ã§ãAPI Keyã¯ã©ã€ã»ã³ã¹ããŒã«ãªããŸãã docs.newrelic.com ã©ã€ã»ã³ã¹ããŒã¯æ¬¡ã®ããã¥ã¡ã³ãã«èšèŒãããŠããæé ã§ç¢ºèªã§ããŸããã©ã€ã»ã³ã¹ããŒã«ãã£ãŠé£æºããã¢ã«ãŠã³ããåºå¥ãããã®ã§ãã¢ã«ãŠã³ããééããªãããã«ããŠãã ããã docs.newrelic.com ã©ã€ã»ã³ã¹ããŒã衚瀺ãããªãå Žåã¯æš©éäžè¶³ãªã®ã§çµç¹ã®New Relic管çè
ã«åãåãããŠãã ããã CircleCIäžã§Webhookãç»é²ãã CircleCIããNew Relicã«ã¯ãŒã¯ãããŒã®å®è¡çµæã衚瀺ããã«ã¯ãNew Relicäžã§ããŒã¿ã衚瀺ããããããžã§ã¯ãããšã«New Relicã®Webhookãç»é²ããå¿
èŠããããŸãã circleci.com ãŸããNew Relicã§ãã€ãã©ã€ã³æ
å ±ã確èªããããããžã§ã¯ãã®ãProject SettingsããéããŸãã GitHubãªããžããªãšé£æºããCircleCIãããžã§ã¯ãã®å ŽåããProject Settingsãã¯ä»¥äžã®URLã§ã. https://app.circleci.com/settings/project/github/${ORG_NAME}/${REPO_NAME} ãProject Settingsãã®äžã«ãããWebhooksããã¯ãªãã¯ãããšãAdd Webhookããã¿ã³ãããã®ã§ãããã¯ãªãã¯ããŸãã CircleCIã®Webhookèšå®ç»é¢ æ°ããWebhookã远å ããç»é¢ã«ãªãã®ã§ç¢ºèªããAPI Keyã䜿ã£ãŠæ¬¡ã®ããã«èšå®ããŸãã èšå®å å
容 Webhook name ä»»æã®å€å¥ããããåå Receiver URL https://log-api.newrelic.com/log/v1?Api-Key=${NEW_RELIC_API_KEY} Secret token 空æ¬ã®ãŸãŸ Certificate verification ãã§ãã¯ãå
¥ãã Workflow Completed ãã§ãã¯ãå
¥ãã Job Completed ãã§ãã¯ãå
¥ãã ããã§CircleCIãå®è¡ããããã³ã«ããã·ã¥ããŒãã«æ
å ±ãæµããããã«ãªããŸããã è€æ°ã®ãããžã§ã¯ãã®ãã€ãã©ã€ã³ã®å®è¡çµæãNew Relicã§å©çšãããå Žåã¯ãã®æäœããããžã§ã¯ãããšã«ç¹°ãè¿ããŸãã ãã䟡å€ã®ããæ
å ±ã衚瀺ãã NewRelicäžã§CircleCIã®ã¯ãŒã¯ãããŒã®å®è¡æ
å ±ãååŸã§ããããã«ãªããŸããã ããããã¯ã€ãã¯ã€ã³ã¹ããŒã«ã§äœæããããã·ã¥ããŒãã®ãµã³ãã«ã°ã©ãã¯æã
ã®éçšæ¹æ³ã§ã¯ããŸãæå³ã®ãªããã®ã§ããã ãªãããšãããšãè€æ°ãããžã§ã¯ãã®ã¯ãŒã¯ãããŒã®å®è¡çµæãäžã€ã®ã°ã©ãã«ãããšããžã§ãã®æ°ã§ã¯ãããã€ã®å®äœãããããªããªãããã§ããæã
ã®ãããžã§ã¯ãã¯ãããžã§ã¯ãããšã«ãããã€ãã€ãã©ã€ã³ãç°ãªãããããã€ãããŸã§ã«å®è¡ããããžã§ãã®æ°ãç°ãªããŸãããããããžã§ã¯ãAã¯1åã®ãããã€ã§ãžã§ãã10åå®è¡ãããããããžã§ã¯ãBã1åã®ãããã€ã§ãžã§ãã5åããå®è¡ããªãå Žåããžã§ãã®å®è¡ç·æ°ãå¯èŠåããŠãæå³ã®ããæ
å ±ã«ã¯ãªããŸããã ãžã§ãã®å®è¡ç·æ°ã100ã ã£ãå Žåããã¹ãŠãããžã§ã¯ãAèµ·å ãªãã°10åãããã€ããããšãæ³å®ãããŸããããã¹ãŠãããžã§ã¯ãBèµ·å ã ã£ãå Žåã¯20åãããã€ããŠããããšã«ãªããŸãã ããã§ãã¯ãŒã¯ãããŒåäœã®ã°ã©ããæ¹ããŠã€ããããšã«ããŸããã CircleCI ããã©ããªæ
å ±ãååŸã§ããã®ãïŒ CircleCi ããã¯çŸåšä»¥äžã® 2 çš®é¡ã®ã€ãã³ããååŸã§ããŸãã workflow-completed job-completed Webhook - CircleCI New Relic äžã§ã¯ type ãšãããã©ã¡ãŒã¿ã§è¡šãããŠããã以äžã®ã¯ãšãªã§ 2 çš®é¡ã®ã€ãã³ããååŸã§ããŠããããšã確èªã§ããŸãã FROM Log SELECT uniques( type ) since 30 days ago NRQLリファレンス | New Relic Documentation ããããã®ã€ãã³ãã§ååŸã§ããæ
å ±ãã New Relic äžã§ã¯ãããã以äžã®ã¯ãšãªã§ç¢ºèªããããšãã§ããŸãã FROM Log SELECT keyset() WHERE type = ' workflow-completed ' since 30 days ago FROM Log SELECT keyset() WHERE type = ' job-completed ' since 30 days ago NRQLリファレンス | New Relic Documentation æ
å ±ã®äžéšã確èªãããšãworkflow-completed ã€ãã³ãã§ã¯ã¯ãŒã¯ãããŒã«é¢ä¿ããæ
å ±ãååŸã§ããjob-completed ãã€ãã³ãã§ã¯ãžã§ãã«é¢ä¿ããæ
å ±ãšé¢é£ããã¯ãŒã¯ãããŒã®æ
å ±ã®äžéšãååŸã§ããŠããããšãããããŸãã ãŸããã¯ãŒã¯ãããŒã®ã¹ããŒã¿ã¹ã«é¢ããŠã¯ workflow-completed ã§ã®ã¿ååŸã§ãããšããããšã確èªã§ããŸãã ã¯ãŒã¯ãããŒåäœã§ã®æ
å ±ã®è¡šç€ºã«ã€ã㊠ã¯ãŒã¯ãããŒã«é¢ããæ
å ±ã¯ workflow-completed ãš job-completed äž¡æ¹ã®ã€ãã³ãã«å«ãŸããŠããŸãã ãŸããNew Relic äžã®å®éã®ããŒã¿ã確èªãããšãworkflow-completed ã€ãã³ãã«é¢ããŠã¯æ®ã©ã workflow.id ã§ãŠããŒã¯ã§ãããäžéšéè€ããããŸããã ãã£ãŠä»åã¯ãŒã¯ãããŒåäœã§ã®æ
å ±ã®è¡šç€ºã«ã€ããŠã¯ã以äžã®æ¹éã«åºã¥ããŠå¯èŠåãè¡ããŸããã uniqueCount 颿°ãå©çšããŠã¯ãŒã¯ãããŒã«é¢ãã屿§ã®ãŠããŒã¯å€ã®æ°ãéèšãã workflow-completed ã€ãã³ãã®æ
å ±ãéèšãã NRQLリファレンス | New Relic Documentation ãŸãã¯ã¯ãŒã¯ãããŒã®æ°ã衚瀺ããŠã¿ãŸãããã FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' since 30 days ago ã¯ãŒã¯ãããŒæ° åæ§ã«ãæ¥æ¯ã®ã¯ãŒã¯ãããŒæ°ã®æšç§»ããããžã§ã¯ãå¥ã«å¯èŠåããã¯ãšãªã¯ä»¥äžã®ããã«ãªããŸãã FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' FACET project.name TIMESERIES 1 days since 30 days ago æ¥æ¯ã®ã¯ãŒã¯ãããŒæ° 次ã«ãã¯ãŒã¯ãããŒã®ã¹ããŒã¿ã¹ã«ã€ããŠå¯èŠåããŠã¿ãŸãããã workflow-completed ã€ãã³ãã«ã€ããŠã workflow.status ã®å€ã§ã°ã«ãŒãåãã«ãŠã³ãããŠè¡šç€ºããã¯ãšãªã¯ä»¥äžã®ããã«ãªããŸãã FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' FACET workflow.status since 30 days ago ã¯ãŒã¯ãããŒã¹ããŒã¿ã¹ã®éèš æåŸã«ãä»é±ã®ãããã€ç·æ°ãå
é±ãšæ¯èŒããŠã¿ãŸãããã ä»åã¯æåã¹ããŒã¿ã¹ã§ããç¹å®ã®ã¯ãŒã¯ãããŒåã®ã¯ãŒã¯ãããŒã®æ°ãã«ãŠã³ãããããšã§ãããã€ã®æ°ãéèšããŠã¿ãŸãã FROM Log SELECT uniqueCount(workflow.id) WHERE workflow.name = ' test-build-deploy ' AND workflow.status = ' success ' SINCE this week COMPARE WITH 1 week ago ä»é±ã®ãããã€æ°ãšå
é±ãšã®æ¯èŒ åæ§ã«ãæ¥æ¯ã®ãããã€æ°ã®æšç§»ããããžã§ã¯ãå¥ã«å¯èŠåããã¯ãšãªã¯ä»¥äžã®ããã«ãªããŸãã FROM Log SELECT uniqueCount(workflow.id) WHERE workflow.name = ' test-build-deploy ' AND workflow.status = ' success ' TIMESERIES 1 day FACET project.name SINCE 30 days ago ãããžã§ã¯ãããšã®ãããã€æ°ã®æšç§» ãããã« ä»åãæ°ããç»å ŽããNew Relic Oneã®CircleCI Integrationã®å°å
¥æ¹æ³ã«ã€ããŠã玹ä»ããŸããã èšå®ããããã°æäœéã®æ
å ±ã¯ããã«åºåã§ããããã«ãªããããèªè
ã®çæ§ãæå±ããéçºçµç¹ã®ããã©ãŒãã³ã¹èšæž¬ã®äžå©ãšãªãã°å¹žãã§ãã New RelicãæŽ»çšãããµãŒãã¹å質ã®åäžããéçºçµç¹ã®ããã©ãŒãã³ã¹æ¹åã«èå³ã®ããæ¹ã¯ãã²ã«ãžã¥ã¢ã«ã«ã話ããŸããã! open.talentio.com ã©ããã«æžããŠããã®ãããããŸããããæã
ã®èª¿æ»ã§ã¯ããã¥ã¡ã³ããèŠã€ããããã¯ãã«ã«ãµããŒãã«åãåãããŸããã ↩
2022/4/23(å)ã«ãªã³ã©ã€ã³ã§éå¬ãããGo Conference 2022 Spring Onlineã«ã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ãã2åã®ã¡ã³ããŒãç»å£ããŸãã Go Conferenceãšã¯ https://gocon.jp/2022spring/ Go Conference 2022 Spring Online Go Conferenceã¯äžè¬ç€Ÿå£æ³äººGophers Japanãäž»å¬ãå幎ã«1åè¡ãããããã°ã©ãã³ã°èšèªGoã«é¢ããã«ã³ãã¡ã¬ã³ã¹ã§ãã åå ã«åŒãç¶ãããªã³ã©ã€ã³éå¬ã§ãã ä»åãåŒç€Ÿã¯ååã«åŒãç¶ãã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ããŸãã â» The Go gopher was designed by Renee French . Illustrations by tottie . BASEãšGo ãããã¯ãã®å€§åã®ãµãŒããŒãµã€ããPHPã§å®è£
ãããŠããBASEã§ãããBASE BANKããŒã ãéçºã»éçšããŠããè³é調éãµãŒãã¹ã§ãããYELL BANKããã·ã§ããã®å£²äžéãVisaå çåºã®æ±ºæžã§å©çšã§ãããBASEã«ãŒããã¯Goã®åæ£ãµãŒãã¹ãšããŠå®è£
ãããŠããŸãã thebase.in https://cp.thebase.in/basecard cp.thebase.in ãYELL BANKãã®ãªãªãŒã¹ã¯2018幎12æã§ãããGoã䜿ã£ããããã¯ãéçšå®çžŸã¯3幎以äžã«ãªããŸãã ç»å£å
容ã«ã€ã㊠testingããã±ãŒãžã䜿ã£ãWebã¢ããªã±ãŒã·ã§ã³ãã¹ãïŒåäœãã¹ãããE2Eãã¹ããŸã§ïŒ by @budougumi0617 gocon.jp BASEæ ªåŒäŒç€ŸBASE BANKããŒã ã«ãŠã ããã¯ãªãŒããããŠããæž
æ°ŽïŒ @budougumi0617 ïŒã§ãããtestingããã±ãŒãžã䜿ã£ãWebã¢ããªã±ãŒã·ã§ã³ãã¹ãïŒåäœãã¹ãããE2Eãã¹ããŸã§ïŒããšããã¿ã€ãã«ã§ããããŒã¶ã«ãæåºãæ¡æãããŸããã ãœãããŠã§ã¢ãšãã¹ãã¯åã£ãŠãåããªãé¢ä¿ã§ãã ãã£ãœããWebã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠã¯DBãªã©ã®ããã«ãŠã§ã¢ã»å€éšAPIã»æ°žç¶åæ
å ±ã®ç¶æ
ãªã©æ§ã
ãªäŸåé¢ä¿ãååšããŸãã æ¬ã»ãã·ã§ã³ã§ã¯DBãå€éšAPIã«äŸåããã³ãŒãã®åäœãã¹ããããã¹ãäžã«WebãµãŒããDBãèµ·åããã·ãã¥ã¬ãŒã·ã§ã³ãã¹ããŸã§ã ç§ãtestingããã±ãŒãžã䜿ã£ãŠè¡ãªã£ãŠããæ§ã
ãªã¬ãã«ã®ãã¹ãã«ã€ããŠç޹ä»ããŸãã åè·ã®çµéšãåããããšæ¥åã§Goã®Webã¢ããªã±ãŒã·ã§ã³éçºã«æºããå§ããŠ5幎ã«ãªããŸãã ãã®äžã§è¡ãªã£ã詊è¡é¯èª€ããŠæžãããã¹ãã®ã¢ãããŒãã玹ä»ããŸãã ãããã¯ãã«ãã£ãŠãã¹ãã§æ
ä¿ãããå質ã仿§ã¯ç°ãªããŸããç§ã®çºè¡šãèŠèŽããŠããã ããæ¹ã®ãã¹ãã«å¯Ÿãããææããã²ãšã€ã§ãå¢ããã°å¹žãã§ãã Python補ã®å§ååå²ã©ã€ãã©ãªãGoã«ç§»æ€ãã話 by @glassmonkey gocon.jp äžè¬çã«ããã¡æžãã§ã¯ç¡ãæ¥æ¬èªã§å§åãããå§ïŒåãã®åå²ãè¡ãããšã¯å°é£ã§ãã ããããPython補ã®å§ååå²ã©ã€ãã©ãª( https://github.com/rskmoi/namedivider-python )ãçšãããšããçšåºŠç²ŸåºŠè¯ãåå²ã¯å¯èœã§ãã ããã§ã·ã³ã°ã«ãã€ããªã§æ±ããGoã®ã¡ãªãããæŽ»ãããŠãPython補ã®å§ååå²ã©ã€ãã©ãªãGoã«ç§»æ€ãã話ãããŸãã ãã®éç§»æ€ã§å·¥å€«ããç¹ãæ°ãã€ããç¹ãã話ããŸãã ä»åãä»ã®æ¹ãæžããã³ãŒããä»èšèªã«ç§»æ€ããããšãåããŠãã£ã¬ã³ãžããŸããã ä»åã®ã±ãŒã¹ã§ã¯LLèšèªæ
ã®runtimeæã®äžå®å®ããGoã«ç§»æ€ããããšã§è§£æ¶ããããšãã§ããŸããã ãã ãäžéšnumpyã®å®è£
ãç¬èªã«è¡ãå¿
èŠããã£ããªã©ãã¡ãªããã°ããã§ã¯ç¡ãããšãåŠã³ãšããŠãããŸããã å¥èšèªã®å®è£
ãGoãããã«ä»èšèªãžç§»æ€ããéã®æææ±ºå®ã®åèã«ãªãã°å¬ããæããŸãã ãªãã£ã¹ã»ã¢ã¯ãŒã«ã€ã㊠ä»åã¯æã
BASEã¯ã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããããã€ãã³ãåœæ¥ã¯Remoäžã§ãªãã£ã¹ã¢ã¯ãŒãéããŠåå è
ã®ã¿ãªããããåŸ
ã¡ããŠãããŸãã ãªãã£ã¹ã¢ã¯ãŒäžã®åŒç€ŸããŒã¹ã§ã¯åŒç€Ÿã宿éå¬ããŠããGophers Code Reading Partyãéå¬äºå®ã§ãã åPartyã¯ã³ãŒããªãŒãã£ã³ã°ã«éããããã®å Žã§éãŸã£ãã¡ã³ããŒãæè¿æ°ã«ãªã£ãGoã®ãããã¯ã話ãéãŸãã§ã瀟å€ã²ã¹ããå«ãã«ã³ãã¡ã¬ã³ã¹ã®å»äžããªãã£ã¹ã®äŒæ©ã¹ããŒã¹ã®ãããªé°å²æ°ã§éè«ããéãŸãã§ãã æ®æ®µäœ¿ã£ãŠããGoã®OSSã®ã³ãŒããªãŒãã£ã³ã° ã¡ãã£ãšæåãããããªãã£ãæšæºããã±ãŒãžã®ã³ãŒã çŽè¿è©±é¡ã«ãªã£ãGoé¢é£ã®ãããã¯ã»ããã°èšäºã«ã€ã㊠BASEã§Goãã©ããã£ãŠäœ¿ã£ãŠããã etc... publicãªããžããªã®issueã§æ¯åã¡ã¢ãåã£ãŠããŸãã åœæ¥çšã¯ãã¡ãã®issueã䜿ãäºå®ãªã®ã§äºåã«ãããã¯ãã³ã¡ã³ãããŠããã ãã®ã倧æè¿ã§ãã github.com æ®æ®µã®é°å²æ°ããããã¯ã«ã€ããŠã¯éå»ã®åã®ã¡ã¢ïŒæ¢åissueïŒã埡芧ãã ããã https://github.com/basebank/gophers-code-reading-party/issues å®£äŒ ANDPADããäž»å¬ã®GoConã¹ãã³ãµãŒäŒæ¥ååã¢ãã¿ãŒããŒã¯ã€ãã³ãã«ãåå äºå®ã§ãã andpad.connpass.com æ ªåŒäŒç€ŸShowcase Gigãããæ ªåŒäŒç€ŸLayerXãããæ ªåŒäŒç€Ÿã¢ã³ãããããããš4瀟ååã§è¡ãªããŸãã åŒç€Ÿãã㯠@budougumi0617 , @glassmonekey ãæ¬¡ã®å
容ã®çºè¡šãšããã«ãã£ã¹ã«ãã·ã§ã³ã«åå ããäºå®ã§ãã New Relic Oneã䜿ã£ãObservabilityã®å®çŸæ¹æ³ãšæŽ»çšäŸ by @budougumi0617 Goã§å§ããTDD by @glassmonekey 宣äŒãã®2 BASE BANKããŒã ã§ã¯ Go, Python, PHPãäžå¿ã«ãããã³ãããã€ã³ãã©ãŸã§ãäžæ°é貫ã§éçºããŠããŸãã ãŸãéçºã ãã§ãªããæ©èœãã°ããŒã¹ã»åæã»ãµããŒããŸã§æ
åœããŸãã ãããªéçºã¹ã¿ã€ã«ã«èå³ãããã£ãŠæ¹ã¯æ°žé( @glassmonekey )ã«DMãéã£ãŠããã ããã äžèšã®ãªã³ã¯ããæ°è»œã«ãé£çµ¡ãã ããã open.talentio.com ãè»¢è·æŽ»åã¯ããŠããªããã©ãGoã®æ¥ã
ã®éçºã®å°ãããšã£ãŠã©ããã£ãŠè§£æ±ºããŠããã®ïŒãã®ãããªéè«ãããããæ¹ã¯ @budougumi0617 ã®Meetyã§ã話ããŸãããã meety.net æåŸã«ãGo Conference 2022 Spring Onlineã«åå ããã«ã¯æ¬¡ã®ã€ãã³ãããŒãžããåå ç»é²ããé¡ãããŸãã gocon.connpass.com ããã§ã¯4æ23æ¥ã«ãäŒãããŸãããïŒ
ã¡ã³ããŒãç»å£ããŠããæ§å ãã®åºŠã¯ã4/9(å)~4/11(æ¥)ã«éå¬ããã PHPerKaigi 2022 ã«4åã®ã¡ã³ããŒãç»å£ããŸããã ä»åã¯ãç»å£è
4 åããã³ã¡ã³ããšãä»ã®ã»ãã·ã§ã³ã®ææ³ãªã©ããå±ãããŸãïŒ PHPerKaigi 2022 ãšã¯ 2022/04/09(å) ~ 2022/04/11(æ) ã® 3 æ¥éã«ããã£ãŠ PHPerKaigi 2022 ãéå¬ãããŸãããä»å¹Žã¯ãªã³ã©ã€ã³ãšãªãã©ã€ã³ã®ãã€ããªããéå¬ã«ãªããŸãã BASE ã¯ãããŸã§ã«ãéå¬ãããŠãã PHPerKaigi ãžã®ç»å£äžŠã³ã«ã¹ãã³ãµãŒããã³ãã¥ããã£è²¢ç®æŽ»åãšããŠè¡ã£ãŠåããŸããã ç»å£è
ã®ã³ã¡ã³ã å·å³¶ ( @nazonohito51 ) TechLeadã®å·å³¶ïŒ @nazonohito51 ïŒã§ãã ä»åã¯BASEããµãŒãã¹ãšããŠãçµç¹ãšããŠãæé·ããŠããäžã§çç£æ§ãç¶æããããã®ã¢ãŒããã¯ãã£æŠç¥ã«ã€ããŠã®çºè¡šããããŠããã ããŸããã瀟å
ã§ãã®æŠç¥ãæã¡åºãããã®ã¯ãããã2幎ã»ã©åã«ãªãã®ã§ãããæç¢ºãªåœ¢ã§ç€Ÿå€ã«å
¬è¡šãããã®ã¯ä»åãåã«ãªããŸãã ãã®æŠç¥ã¯ã¢ãŒããã¯ãã£ã®æ¬ããããŒã ã»çµç¹ã»æåãªã©ã®æ¬ãããåŠç¿ããçµç¹ããšãã£ããã¯ãããžãŒç³»ãšã¯èšããªãæ¬ãŸã§ãã¡ãã¡èªãã æ«ã«èãåºãããŸããã宿
ãšããŠã¯ã¯ãªãŒã³ã¢ãŒããã¯ãã£ããã€ã¯ããµãŒãã¹ãªã©ã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ãšãããããé²åçã¢ãŒããã¯ãã£ïŒDevOpsãšãã£ãè¶£æšã®å
容ã§ãããšèšã£ãã»ããè¿ããšæããŸããäžé·æçãªæéã§èããã°ã¢ãŒããã¯ãã£ã«åºå®çãªè§£ã¯ååšãããã·ã¹ãã ãåãå·»ãç°å¢ã®å€åã®äžã§åžžã«ãã©ã³ã¹ãåãç¶ããå€åããåäœã§ããå¿
èŠããããŸãããããŠå€åã®æ¹åã¯ããã®æã®ç®å
ã®åé¡ã ããåå¿çã«å±ææé©ã§è§£æ±ºããã®ã§ã¯ãªããåžžã«äœãããã®ç®çãéæãããããªæ§é ãžåãããããªæåæ§ãæ±ããããŸãããããŠåŒç€Ÿã«ãããç®çãšã¯è³æã®ååã§è§ŠããããŠãããããªãã®ã§ããã åæã®åå¿ãèŠãéããã¢ãžã¥ã©ã¢ããªã¹ããšããåèªã«æ¹ãããæ¹ãå€ãããªå°è±¡ã§ãããè¶£æšãšããŠã¯äžé·æçã«ã¢ãŒããã¯ãã£ã«å¯ŸããŠã©ããªå§¿å¢ã§è¡ããã®èããæŽçãããã®ãã¡ã€ã³ã³ã³ãã³ãã«ãªããŸããã¢ãžã¥ã©ã¢ããªã¹ã¯ãã®äžã®äžå¿ã§ã¯ãããŸããäžéšã«éããããã¢ãžã¥ã©ã¢ããªã¹ããšããåèªãã®ãã®ã«ãçµç¹ã®çç£æ§ããšããæåŸ
ãå¯ããŠãããªãã°äœãèŠèœãšãããããšæããŸãããã®è³æã§çµå§åŸ¹åºããã®ã¯æè¡çãªæ¹æ³è«ããã¯å
¥ããªãããšããç¹ã§ãäºæ¥ãšæè¡ã®æŽåæ§ãã©ãåãã®ãã«ã€ããŠäžçªãšãã«ã®ãŒã䜿ãããŠããŸãã ãã®ã¢ãŒããã¯ãã£æŠç¥ã¯æªã ã«ææ¢ãã®éšåãã»ãšãã©ã®ç¶æ³ã§ããããããã瀟å
ã§å°ããã€é²ããŠããäºå®ã§ãã Discordãã£ã³ãã«ã«éããã質åã«ã€ã㊠Discordã«éãããŠãã質åã¯ããããä»ã®å€ãã®æ¹ãæãããçåã ãšæãããã®ã§ãã¡ãã«ãèšè¿°ããŸãã ã¢ãžã¥ã©ã¢ããªã¹ã®æç¹ã§ã¯DBåå²ãããŠããªãç¶æ
ãªã®ãïŒ ãããªããŸããçç±ã¯DBåå²ã®å¢çã¯ãã¡ã€ã³ãæ ¹æ ã§ããã¹ãããšèããŠããããã§ãããã¡ã€ã³åºæºã§åå²ããããã©å¢çç·ãåãããªã->DBèšèšã®ææ»ãã¯ã³ã¹ããé«ã->ã¢ããªã±ãŒã·ã§ã³ã®ææ»ãã¯DBãããäœã³ã¹ããªã®ã§ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ïŒïŒã¢ãžã¥ãŒã«ïŒå¢çãå®å®ãããŠãããããDBèšèšã«åæ ããããšããæŠç¥ãç«ãŠãŠãããããã¢ãžã¥ã©ã¢ããªã¹éå§æç¹ã§ã¯ãããŠDBåå²ããŠããŸããã æŒžé²çã«ãã€ã¯ããµãŒãã¹ãžåãã£ãŠãããã©ããã§ã¢ãžã¥ãŒã«ããŸããã ãã©ã³ã¶ã¯ã·ã§ã³å¢çã«ã€ããŠèãæ¹ãå€ãããªããïŒ ãã€ã¯ããµãŒãã¹åãããªãã¢ãžã¥ãŒã«ããŸããã ãã©ã³ã¶ã¯ã·ã§ã³ãèš±ããŠã¯ãªããªããïŒãã€ã¯ããµãŒãã¹åããæç¹ã§ãã©ã³ã¶ã¯ã·ã§ã³åãããïŒããã€ã¯ããµãŒãã¹åããªããªããããããã©ã³ã¶ã¯ã·ã§ã³ãèš±å¯ããããšããèãæ¹ã«ãªããªããããšãã質åã§ããã çµè«ãšããŠã¯ãææã®ãšããã«ãªããŸãããã€ã¯ããµãŒãã¹åããå ŽåãCAPå®çã«ãããéãCAPã®ããããã倧ããæãªãããŸããã¹ã©ã€ãè³æäžã«ãèµ€æåã§èšè¿°ããŠããŸãããã¢ããªã¹ãšåæ£ã·ã¹ãã ã«ãããããŒã¿æŽåæ§ã«å¯ŸããæŠç¥ã¯æ ¹æ¬çã«ç°ãªããŸããã¢ãžã¥ã©ã¢ããªã¹æç¹ã§ãããŠããããšã¯ãã€ã¯ããµãŒãã¹åããŠãå
šãŠãåãããã«ã§ããããã§ã¯æ±ºããŠãããŸããããã©ã³ã¶ã¯ã·ã§ã³å¢çã«å¯Ÿããæç¢ºãªæŠç¥ã¯æã¡åºããŠã¯ããªãã®ã§ãããå°ãªããšãã¢ãžã¥ã©ã¢ããªã¹æç¹ã§åäžãã©ã³ã¶ã¯ã·ã§ã³ã§åŠçããããšãã§ããã°å¥ãã©ã³ã¶ã¯ã·ã§ã³ã«åããããšãã§ãããšããéžæè¢ãçšæããŠããŸãããã¡ããã€ãã³ãããªãã³ãªçµææŽåæ§ã®åŠçãå®çŸããããšã¯ã¢ãžã¥ã©ã¢ããªã¹ã«ãããŠãåºæ¥ãŸããã¢ãžã¥ãŒã«å¢çç·ãæç¢ºãªãã¯ãããããã©ã³ã¶ã¯ã·ã§ã³ãåããããçµææŽåæ§ã®åŠçã«ããŠããŸãããšãåŸã®ãã€ã¯ããµãŒãã¹åãããšãã«æå©ã«ãªããŸããããå¢çç·ãæç¢ºã§ãªããªãç¡æå³ã«æŽæ°åŠçãè€éåããããæŽæ°ãåæ ãããŠããªãåç
§ãçºçããå¯èœæ§ããããããŠããŸã£ããããããã¯ãã¢ãžã¥ãŒã«å¢çç·èªäœãåŸããèŠçŽããããããšããã¢ãžã¥ã©ã¢ããªã¹ã®ã¡ãªãããäžéšææŸãããšã«ãªãå¯èœæ§ããããŸãããã©ã³ã¶ã¯ã·ã§ã³å¢çã«å¯ŸããŠã¯çŸç¶ç»äžçãªå€æã¯ã§ãããéœåºŠå€æããããšã«ãªãããšã«ãªããšèããŠããŸãã ããšå®ã¯ãçºè¡šäžã«ã¯è§ŠããŸããããBASEã§å®éã«ãã€ã¯ããµãŒãã¹åããç®æã¯æ¥µããŠéå®çã«ãªãã®ã§ã¯ãªãããšèããŠããèæ¯ããããŸããå°ãªããšãå
šã¢ãžã¥ãŒã«ããã€ã¯ããµãŒãã¹ã«ãªã£ãŠåããŠãããããªæªæ¥ã¯ã»ãšãã©ããããªãã ãããšèããŠããŸãã ã¢ãžã¥ã©ã¢ããªã¹ãšãããã¿ãŒã³ã«ã€ã㊠ã¢ãžã¥ã©ã¢ããªã¹ãšãããã¿ãŒã³èªäœã¯ãããäœãããšããæç¢ºãªæç€ºãããããã§ã¯ãªãã®ã§ãèªç€Ÿããã¢ãžã¥ãŒã«ããšããæ§é ãéããŠäœãå®çŸããããã«ãã£ãŠãã®å§¿ã¯å€ãã£ãŠãããšæããŸããåŒç€Ÿã¯ã¯ãªãŒã³ã¢ãŒããã¯ãã£ãããŒã¹ã«ããŸããããããã¯äžäŸã«éããŸãããããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ãã£ãŠäœãéæãããã®ãæç¢ºã«ææ¡ããŠããªãå Žåã«ã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã¯æªãã¢ã€ãã£ã¢ã§ããããšããèšèã¯ã¢ãžã¥ã©ã¢ããªã¹ã«ãããŠããã®ãŸãŸåœãŠã¯ãŸãããšæããŸãã ã¹ã©ã€ãè³æã ããèŠãŠåç»ãèŠãŠãªãæ¹ã«ã¯èª€è§£ãçã¿ãããªãã®ã§ãã¡ãã®èšäºã§ãè§ŠããããŠããã ããŸãããã¢ãžã¥ã©ã¢ããªã¹ã¯æ±ºããŠéã®åŒŸäžžã§ã¯ãããŸããããã€ã¯ããµãŒãã¹ãšã¯å¥ã®åœ¢ããã諞åã®å£ã§ããæ¯ãæ¹ã誀ãã°ãã¡ããšæªæãããŸãã®ã§ã泚æãã æ°žé ( @glassmonekey ) BASE BANKããŒã ã§Engineering Program ManagerãããŠããæ°žé( @glassmonekey )ã§ãã ä»åã¯å人éçºã坿¥ã§æ±ã£ãŠãGraphQLã«é¢ããŠãæ®æ®µæ¥åã§æ±ã£ãŠãPHPãéããŠã©ããªã®ããããŒã¯ããŸãããä»åäºååé²ãå人çã«ãåããŠã§éå¶ã®çæ§ã«ã¯ãè¿·æããããããŸããã åŒç€Ÿã§ã¯GraphQLã«åãçµãã§ããããã§ã¯ãªãã£ãã®ã§ãããæ¹ããŠå°å
¥ãã¹ããã©ãããæŒ ç¶ãšèããŠããã®ã§ãçºè¡šè³æãäœãéçšãéããŠè¯ãæèå®éšã«ãªããŸãããçæ§ãè¿·ã£ããç»å£é§åã¯ããããã§ãã çºè¡šåŸã«ã¯ãGraphQLã®å°å
¥ã«è¿·ã£ãŠããããªãåèã«ãªã£ããšãã£ãææ³ãããã ãæ©äŒãããããªãã®å±ã¿ã«ãªããŸãããç¹ã«ãªãã©ã€ã³ã ã£ãã®ã§çŽæ¥ææ³ãèšãåãããšããäœéšã¯æé«ã§ããã ãããéå¶ã®çæ§ã®èª¿æŽãã£ãŠããã ã£ããšæãã®ã§ãæ¹ããŠããããšãããããŸããã 倧接 ( @cocoeyes02 ) Product Dev Division / Service Dev Section ã«æå±ããŠãã02ïŒ @cocoeyes02 ïŒããšå€§æŽ¥ã§ãã ä»åã¯ã³ãããã¡ãã»ãŒãžè»œéèŠçŽãConventional Commitsãã®èª¬æãšé¢é£ããŒã«ã䜿ã£ãŠã¿ãæ§åãããŒã¯ããŸããã PHP ã«ã³ãã¡ã¬ã³ã¹æ²çž 2021ã§ããŒã¯ãã ãªãŒããã«ã³ãããã®ããã ã§ãå°ãã ããConventional Commitsãã«ã€ããŠè§ŠããŸããããä»åã¯ã¬ãããªç°å¢ãçšæããŠè©ŠããšãããŸã§ãã£ãä»ã ãConventional Commitsãã®å
¬åŒããã¥ã¡ã³ããµã€ãã«IssueãPRãåºããšãããŸã§ãã£ãŠã¿ãŸãã ïŒãšã¯ããåå¿èããŠã¡ãã£ãšæ²ããã»ã»ã»ïŒ ä»å䜿çšãã ramsey/conventional-commits ã§ãããå°å
¥ã®ææ¡ Issue ã laravel/framework ã CakePHP ãªã© PHP ãã¬ãŒã ã¯ãŒã¯ã®ãªããžããªã§åºããŠã¿ããããªãšæã£ãŠããŸãïŒ å°å
¥ãã®ãã®ããããPHP OSS ã³ãã¥ããã£çéã®äººãã³ãããã¡ãã»ãŒãžã«ã€ããŠã©ãæããè°è«ãããšããã®ãç®çã§ãã åãããããã³ãããã¡ãã»ãŒãžã®ã¡ãªããããã£ãšå€ãã®äººã享åã§ãããããä»åã®çºè¡šä»¥å€ã§ãåããŠãããããšæããŸãïŒ çç° ( @tanden ) Product Dev Division / Service Dev Section ã«æå±ããŠããtandenïŒ @tanden ïŒã§ãã ä»åã®LTã§ã¯ãWebãµãŒãã¹ã®ããŠã³ã¹ã¡ãŒã«åŠçã®äºå§ãããšããããšã§ãããããããŠã³ã¹ã¡ãŒã«ãšã¯äœãªã®ããAWS SESãã€ãã£ãŠããŠã³ã¹ã¡ãŒã«ããµãŒãã¹ã«ã©ã®ããã«ãã£ãŒãããã¯ããã®ããç°¡åã«çºè¡šãããŠããã ããŸããã LTã®çºè¡šã¯äºååé²ã§ã¯ãªãã£ãã®ã§ãã³ã³ããªããŒã«ã®äŒå Žã§ã®çºè¡šã§ãããããªã³ã©ã€ã³ã§ã®æ°è»œããèŠèŽã®ããããã¯ãã¡ããããã®ã§ããããªãã©ã€ã³ã§ã®çºè¡šã®é°å²æ°ã¯ãã¯ããããªãçŽ æµã ãªãšæ¹ããŠæããŸããïŒãã®åç·åŒµããããã®ã§ããïŒã çŽ æµãªé°å²æ°ã®äŒå Žãäœã£ãŠãã ãã£ããéå¶ã®çããŸã«æ¹ããŠæè¬ç³ãäžããŸããããããšãããããŸããã å人çãªå¿æ®ãã¯ãLTã§ç¬ããå
šããšããªãçé¢ç®ãªçºè¡šã«ãªã£ãŠããŸã£ãããšã§ããæ¬¡åã¯ãã£ãšãã©ã³ã¯ãªLTã«ææŠããŠã¿ãããšæããŸãïŒïŒç¬ïŒ ä»ã®ã»ãã·ã§ã³ã«ã€ã㊠è¥è ( @ wakanaction ) Product Dev Division / Service Dev Section ã«æå±ããŠããwkã§ãã Day1ãšDay2ã®å°ãã ãããªã³ã©ã€ã³ã§èŠèŽåå ããŸããã ããã€ãããã€ãŸãã§ææ³æžããŸã ðšâð³ äºé²ã«åãé²åŸ¡ãªã - å
ç¢ãªã³ãŒããå°ãæ§ã
ãªèšèšã®ãã³ã @t_wada ãã ã€ãã«t_wadaããã®ã»ãã·ã§ã³ããªã¢ã«ã¿ã€ã ã§èãããšãã§ããææ¿...ïŒ PHPerã®ã¿ãªããããããŠååŠè
ããäžçŽè
ãŸã§åºãç¯å²ã®æ¹ã«åºãããããªå
容ã ã£ã äžã§ãã以äžãçšããŠå
ç¢ãªèšèšãèããŠããéã³ã倧å€ããã«ãªã£ã åå®£èš åæå ã¢ããªã³ã° æ®éæ§ãšçäŸ¡æ§ å®å
šæ§ è²¬åã®é
眮 ã¡ãœããã«æž¡ãå€ãå宣èšã«ãã£ãŠçµããããã«æ±ãå
容ãéãããŠããå€ã¯åæåã§çµãããšãã£ãå
·å 床ã
ã ããã°ã©ããç¥ãã¹ã97ã®ããš ããåŒçšãããŠããããäžã§ã以äžãéç¹ã«çœ®ããŠãããèªåã®æ¥åã§ããã²åèã«ãããèãæ¹ã ã£ãã ããã€ã³ã¿ãŒãã§ãŒã¹ã®æ¡ä»¶ãšã¯ãæ£ãã䜿çšããæ¹ã æäœãã¹ãããããç°¡å 誀ã£ãäœ¿ãæ¹ãããããšãå°é£ ãäžå®ãç念ã¯ãã¹ãã«æžããŠããã æ¥åããžãã¯ã«éãããFWã®æåãçµã¿èŸŒã¿åŠçã®åããªã©ããã¹ãã«æ®ããŠããããšã§ãPHPã®æãã¬èœãšãç©Žã«æ°ä»ããããäžæ¹ãçŽãããäžæ¹ãå£ããããªããŠããšã«æ°ã¥ãããããªã£ãŠããŠã粟ç¥è¡çãšããŠããããè¯ãã£ãã ç·è«ïŒèšèšãã³ãŒãã¬ãã¥ãŒã®éã«åžžã«å¿µé ã«çœ®ããŠãããããããªã峿¥åã«æŽ»ãããŠãããå
容ã ã£ããå峿 Œãªæ¹åã«é²ãã§ãããPHPã®æ©æµã«æè¬ããªããé 匵ããŸã ã³ãããã¡ãã»ãŒãžèŠçŽãConventional Commitsããå°å
¥ããŠã¿ããïŒ @02 ãã Commitã¡ãã»ãŒãžãããããããæžãããæ°æã¡ã¯ãããã®ã®ãå®éã©ããããè¯ããããŸãã¡ããã£ãŠããªãã£ã æ¥æ¬èªã§äžå¯§ã«æžããŠã¿ãããè±èªã§çµ±äžããŠæžããŠã¿ããè²ã
詊ãã Commitã¡ãã»ãŒãžã«é¢ããèŠçŽãããã®ã¯åããŠç¥ã£ã ãã©ãŒããããæ±ºãŸã£ãŠããããPrefix (feat, fix, ãªã©) ãã¿ã€ãã«ãæ¬æãããã¿ãŒãç Žå£ç倿Žãã®ãããªå
容ã§commit ã¡ãã»ãŒãžãæžã å€å°èŠçŽãå³ããã«æãããããããããã®æ¹ãèŠçŽãçšããæå³ããããããŸãã¯ç¶ãããã圢ã§äžéšåãå
¥ããã®ãè¯ãã®ããã ãŸããã³ãããã¡ãã»ãŒãžãããããããæžããŠãããããšèããæã坿¬¡çã«ä»¥äžã®ãããªèãã«ãè³ã£ãã ã³ãããã¡ãã»ãŒãžãããããããããã â ã³ãããã«å«ãå
容ãããããããããªããšãããããããã¡ãã»ãŒãžã¯äœããªã â é©åãªç¯å²ã§ã³ããããåãæèãè²ãŠãããïŒ ç·è«ïŒå€§èŠæš¡éçºã«ãããŠãCommitã¡ãã»ãŒãžãæ®ãæ
å ±ã¯éèŠã§ããããã詊ãã«ã§ã宿œããŠã¿ãããšæã£ãã æ®æ®µäœ¿ã£ãŠããSourceTreeã§ã¯è€æ°è¡ã«ãããCommitã¡ãã»ãŒãžãæžããããããã詊ãããããšæã£ãã shiiyanïŒ @shiiyannn ïŒ Product Dev Division / Service Dev Section ã«æå±ããŠããshiiyanã§ãã PHPerKaigi2022ã®Day1ãšDay2ããªã³ã©ã€ã³ã§åå ãããŠããã ããŸããã å°è±¡ã«æ®ã£ãããã€ãã®çºè¡šã«ææ³ãæžããŸãã day1 - MongoDB ã«æºãŸã£ãçŽ1.6åã¬ã³ãŒããããŒã¿é1TBã®ãããããµã€ãã®èšäºããŒã¿ã BigQuery ã§é«éæ€çŽ¢ã§ããããã«ãã話 æ€æ±ç°ãã å€§èŠæš¡ããŒã¿åŠçé¢ããŠãæè¿æ¥åäžã§ã課é¡ããããŸããããã¡ãã®çºè¡šã¯èª²é¡è§£æ±ºã®ãã³ãã«ãªããããšæããPHPerKaigiã®äžã«ç¹ã«èå³ãæã¡ãŸããã MongoDBã«ä¿åãããããŒã¿ã«ã€ããŠä»¥äžã®ããšã玹ä»ãããŸããã æ§ã
ãªãµã€ãããèšäºãã¯ããŒã«ãã¯ãªãããã ã¯ããŒã«ããèšäºããŒã¿ãMongoDBã§ä¿å 1æ¥ã§10äžä»¶ã®ã¬ã³ãŒããä¿åããã 1æ¥10äžã¬ã³ãŒããªãã°ã1ã¶æã§300äžã¬ã³ãŒããšãªããæ°å¹ŽçµãŠã°çŽ1.6åãšãšãã§ããªãèŠæš¡ã«ãªã£ãŠããããšãããããŸããã ããŒã¿ç§»è»¢äžã®èª²é¡ã«ã€ããŠä»¥äžã®ããšã玹ä»ãããŸããã åçã¹ããŒãããéçã¹ããŒããžã®ç§»è¡èª²é¡ ååšããªãã«ã©ã ããããšãšã©ãŒãšãªã ã«ã©ã ã®é çªãå€ãããšãšã©ãŒã«ãªã åŠçæéãšãµãŒããŒã¹ãã¬ãŒãžå®¹éã®èª²é¡ ç§»è¡åŠçãå®äºãŸã§ã«20æé以äžãå¿
èŠ ç§»ç§»è¡åŠçãå®äºãŸã§ã«6000以äžã®csvãã¡ã€ã«ãå¿
èŠ èª²é¡ã«å¯ŸããŠã®è§£æ±ºæ³ã«ã€ããŠä»¥äžã®ããšã玹ä»ãããŸããã ååšããªãã«ã©ã ã«nullãå
¥ãã PHPã®é£æ³é
åã§ã«ã©ã ã®é çªãåºå®ãã ã¹ããªãŒã ã³ããŒïŒ stream_copy_to_stream ïŒãå©çšããã°2åé«éãã åçã¹ããŒããæ¡çšããããŒã¿ã¹ãã¢ã§ã¯ãã«ã©ã ãå©çšäžã§å¢ããŠããã«ã©ã ã®é çªãå€ãã£ãŠããšã©ãŒãªã䜿ãç¶ããŸãããã€ã°ã¬ãŒã·ã§ã³ãäžèŠã§ã¹ããŒãã®å€æŽãã¡ã³ããã³ã¹ãããããäžæ¹ã§ãéçã¹ããŒãã®ããŒã¿ã¹ãã¢ã«ç§»è¡ããæã«ãã¹ããŒãã®æŽåãšããæé ãçºçãããšããç¥èŠãåŸãããŸããã ãŸãããã¡ã€ã«ãéããŠäžè¡ãã€ã³ããŒãã以å€ã«ãã¹ããªãŒã ã³ããŒãšããããæ¹ãä»åã§æ°ããåŠã³ãŸãããé«éåãšããã¡ãªãããããã®ã§ãä»åŸPHPã§ãã¡ã€ã«ã«æžãåºãåŠçãå®è£
ããæã«æŽ»çšã§ãããšæããŸããã day2 - ã³ãããã¡ãã»ãŒãžèŠçŽãConventional Commitsããå°å
¥ããŠã¿ããïŒ02ãã ä»ãŸã§ã¯ã³ãããã¡ãã»ãŒãžãå²ãšéã§æžããŠããŸããããã®ããã§ãPRã®ã³ã³ããªã¯ãå¯Ÿå¿æãgit rebaseæã«èŠåŽããçµéšããããŸããã ãã³ãããã¯ä»äººãèŠããã®ã ãããä»äººãæžãæã®æå³ãçè§£ã§ããªããšâããšããã®ãçºè¡šã®å
容ã«ãããŸããããŸãã«ããã®éãã ãšæããŸãããã³ãããã¯pushããã ãã®ãã®ã§ã¯ãªããå°æ¥ã®èªåãä»äººããã®æå³ãçè§£ã§ããªããšæå³ããªããšçè§£ããŸããã Conventional Commitsãšããã³ãããã¡ãã»ãŒãžã®è»œéèŠçŽã玹ä»ãããŸããã featãdocsãªã©ã®ã³ãããã¡ãã»ãŒãžã®ããªãã£ãã¯ã¹åããç¥ã£ãŠãããã®ã®ãã³ãããã¡ãã»ãŒãžèŠçŽãå匷ããã®ã¯ä»åãåããŠã§ããã çºè¡šã«å©çšããã ãµã³ãã«ãªããžã㪠ã®ã³ãããå±¥æŽãçºãããšãèŠçŽã«æ²¿ã£ãŠæžããã³ãããã¡ãã»ãŒãžããããšãœãŒã¹ã³ãŒããèŠãªããŠããäœããã£ãã®ããæ³åã§ããããšã宿ã§ããŸããã çºè¡šã®åŸãchoreãšããããªãã£ãã¯ã¹ã¯ãã€å©çšããããã調ã¹ãŸããã chore (updating grunt tasks etc; no production code change) ç§ã®çè§£ã§ã¯ãfeatãdocsãªã©æç¢ºãªç®çãããããªãã£ãã¯ã¹ä»¥å€ãæ¬çªã³ãŒãã«åœ±é¿ããªããã®ä»çãªå€æŽããã£ãæã«äœ¿ããŸãã ãŸããç Žå£ç倿ŽïŒBreaking changesïŒããããšãã«å¿
ãããã¿ãŒéšåã§æèšããããšãèŠããŸããã ä»åŸã¯ãã²èŠçŽã«åã£ãã³ãããã¡ãã»ãŒãžãæžããŠãã³ãããã¡ãã»ãŒãžã圹ç«ã€ããã«ããããšæ±ºããŸããã æåŸã« ä»åèš 4 åã®ã¡ã³ããŒãç»å£ããæ©äŒãããã ãã PHP ã³ãã¥ããã£ã®çãäžããã«è²¢ç®ããããšãã§ã倧倿æçŸ©ãªæéãšãªããŸããã ãŸãèªèº«ã®çºè¡šä»¥å€ã«ããå€ãã®ã¹ããŒã«ãŒã®çºè¡šãéããŠåã
ãæ°ããªç¥èŠãæ°ã¥ããæã£ãŠåž°ãããšèããŠãããŸãã æ¥åã§ãå¿ããã«ãé¢ããããã¹ã¿ããã®æ¹ã
ã«ã¯å€ãã®æéãã«ã³ãã¡ã¬ã³ã¹æºåãžå²ããŠããã ããããšæããŸãããã®å ŽãåããŠå¿ãã埡瀌ç³ãäžããŸãã ä»åã¯ããŒã¯ç·šã®èšäºãšãªã£ãŠãããŸããä»ã«ãã¹ãã³ãµãŒç·šãã¢ã³ã«ã³ãã¡ã¬ã³ã¹ç·šãã¹ã¿ããç·šã®èšäºãæçš¿ããäºå®ã§ãã ããã§ã¯ãæ¥å¹ŽããŸãçæ§ã«ãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸãïŒ
ã¯ããã« ããã«ã¡ã¯ãããã¯ãšã³ããšã³ãžãã¢ã®å°ç¬ åã§ãã ä»åã¯ã2022幎2æ18æ¥ãã2022幎3æ4æ¥ã«ãããŠçºçããŠãããã¡ãã®é害ã«å¯Ÿãç§ééçºããŒã ã宿œãããsession.cookieã§å®çŸ©ããŠããCookieã®keyåã倿Žãããšãã圱é¿ç¯å²ã®å€§ãã察å¿ã«ã€ããŠã宿œã«è³ããŸã§ã®çµç·¯ã察å¿éçšã«ã€ããŠã玹ä»ããããšæããŸãã ã·ã§ãããªãŒããŒåãã«æ²èŒããŠãããç¥ããã®å
容 èæ¯ å
šãŠã¯ iOS14.5ãã端æ«èå¥åã®ååŸã«åæãå¿
èŠã«ãªã£ãããšããå§ãŸã£ã ããšã®çºç«¯ã¯ãiOS14.5以éããIDFAïŒç«¯æ«ããšã«æã€åºæèå¥åïŒã®ååŸã«ç«¯æ«ææè
ã®èš±å¯ãå¿
èŠã«ãªã£ãããšã§ããã ãã®å€æŽã¯ãç«¯æ«ææè
åŽããèŠããšæ
å ±ã®æŽ»çšç¯å²ãèªèº«ã§ç®¡çã§ããããšã§ãããã©ã€ãã·ãŒã«é
æ
®ãããããã«ãªã£ãè¯ã倿Žãšèšããã§ãããã äžæ¹ã§ãåºååºçš¿åŽããèŠãå Žåã¯æåŠããããŠãŒã¶ãŒã®åºåãã©ããã³ã°ãåºæ¥ãªããªãããšã§åºåã®å¹ææž¬å®ã倧å¹
ã«å¶éãããããšããåé¡ãçºçããŠããŸããŸãã ãã®åé¡ã«å¯ŸããŠãFacebookãã¯ã»ã«ãšããåºåå¹ææž¬å®ããŒã«ãæäŸããŠããMeta瀟(æ§Facebook瀟)ã¯ãåºåå¹ææž¬å®ã®ä»æ§ã倿ŽããŠåç®ã€ãã³ã枬å®ã«ããéèšãè¡ãããšã§IDFAã®ååŸãæåŠãããŠãŒã¶ãŒã«ã€ããŠãåºåã®å¹ææž¬å®ãã§ããããã«å¯Ÿçãè¡ããŸããã BASEã«ãããŠãInstagramåºåAppããã®åœ±é¿ãåããã®ã§ãäœããã®å¯Ÿå¿ãè¡ãå¿
èŠã«è¿«ãããŸããã åç®ã€ãã³ã枬å®ã«å¯Ÿå¿ããéã®è©³çްã«ã€ããŠã¯æ¬èšäºã®äž»é¡ã§ã¯ãªãã®ã§ããã§ã¯çç¥ãããŠããã ããŸãããçµè«ãšããŠeTLD+1ãªãã¡ã€ã³ãèªèšŒããããšã§åç®ã€ãã³ã枬å®ã䜿çšå¯èœã«ãªããšããããšãããã£ããããåœæéçºããŒã ã¯ã·ã§ããéèšæã«éžæããããšãã§ãããã¡ã€ã³çŸ€ãPublic Suffix ListïŒPSLïŒã«ç»é²ãããšãã察å¿ãè¡ã£ãŠããŸããã Public Suffix ListïŒPSLïŒãšã¯ Public Suffix ListïŒPSLïŒãšã¯ãjpãcomãªã©ã®Top Level DomainïŒTLDïŒãšãco.jpãmeguro.tokyo.jpã®ãããªå®è³ªçã«TLDã®ããã«æ¯ãèãããšãæåŸ
ãããeffective Top Level Domain ïŒeTLDïŒã管çããŠãããªã¹ãã®ããšã§ãGitHubäžã§ç®¡çã»éå¶ãããŠããŸãã ãã®ãªã¹ãã«å¯ŸããŠå¿
èŠãªæ
å ±ãæ·»ããŠPull Requestãéãããšã§ã誰ã§ãä»»æã®ãã¡ã€ã³ã®è¿œå ãç³è«ããããšãå¯èœã§ãã https://github.com/publicsuffix/list ã€ãŸããPSLã«ä»»æã®ãã¡ã€ã³ãç»é²ããããšã§ãã®ãã¡ã€ã³ãeTLDãšããŠæ±ãããã«ããããšãã§ããããã«ãã£ãŠã·ã§ããã®URLãeTLD+1ãšèªèããããããã·ã§ããåäœã§ãã¡ã€ã³èªèšŒãè¡ãããšã§åç®ã€ãã³ã枬å®ã䜿çšå¯èœã«ãªãããšããããšã§ãã ãã®å¯Ÿå¿ã®ãããéçºããŒã ã¯ã·ã§ããéèšæã«éžæããããšãã§ãã以äžã®ãã¡ã€ã³çŸ€ãPSLã«ç»é²ããç³è«ãè¡ããŸããã base.ec official.ec buyshop.jp fashionstore.jp handcrafted.jp kawaiishop.jp supersale.jp theshop.jp shopselect.net base.shop ãªããžããªã®Pull Requestå±¥æŽã確èªãããšãç»é²ç³è«ãããã®ã¯2021幎9æ14æ¥ã§ãããŒãžãããã®ã¯2021幎12æ5æ¥ã ãšããããšãããããŸãã https://github.com/publicsuffix/list/pull/1420 PSLã«ç»é²ããããã¡ã€ã³ã«ã¯Cookieãä¿åã§ããªã ãšããã§ã PSLã«ç»é²ãããã¡ã€ã³ã«ã¯Cookieãä¿åããããšãã§ããªããªã£ãŠããŸããŸãã ä»®ã«jpã®ãããªTLDã«å¯ŸããŠCookieãä¿åå¯èœã«ããŠããŸããšããã®ãã¡ã€ã³ã䜿çšããŠããå
šãŠã®Webãµã€ãã§ãã®Cookieãå
±æã§ããããšã«ãªã£ãŠããŸããŸããTLDã¯äžç¹å®å€æ°ã®å©çšè
ãæ§ã
ãªç®çã§ãµããã¡ã€ã³ãååŸããŠéçšããŠããããšãå€ãããã®ãããªåºç¯å²ã«å¯ŸããŠCookieãåç
§å¯èœãªç¶æ
ã«ããŠããŸãããšã¯ã»ãã¥ãªãã£ãªã¹ã¯ãé«ãããæšå¥šããããã®ã§ã¯ãããŸããã ãã®ãããTLDã«ã¯Cookieãä¿åã§ããªãã«ãŒã«ã«ãªã£ãŠããŸãããããŠãTLDãšåæ§ã®æ¯ãèããããeTLDã«å¯ŸããŠãåãããšãèšãããããTLDãšåæ§ã«eTLDã«å¯ŸããŠãCookieãä¿åã§ããŸããã ã€ãŸããPSLã«ãã¡ã€ã³ãç»é²ãããšããããšã¯ããã®ãã¡ã€ã³ã«å¯ŸããŠCookieãä¿åã§ããªããªãããšããããšãæå³ããŸãã PSLãžãã¡ã€ã³ãç»é²ããããšã«ãã£ãŠã©ã®ãããªåœ±é¿ãåºãŠããŸã£ãã®ã BASEã®ã·ã§ããã§ãäŸã«æŒããCookieãå©çšããŠãããäŸãã°ãã·ãŒã¯ã¬ããECã·ã§ãããžã®ãã°ã€ã³æ
å ±ããã«ãŒããžååã远å ããéã®ååæ
å ±ããªã©ã¯Cookieã® THEBASE ãšããkeyåã«ä¿åããŠç®¡çããŠããŸããããããŠããããã®Cookieã¯ã·ã§ããæ¯ã«å²ãåœãŠãããŠãããµããã¡ã€ã³ã«å¯ŸããŠã§ã¯ãªããåé
ã§ç޹ä»ããPSLã«ç»é²ãããã¡ã€ã³ã«å¯ŸããŠCookieãä¿åããåŠçã«ãªã£ãŠããŸããã ã€ãŸãããããã®æ
å ±ãCookieã«ä¿åã§ããªããªã£ãããšã§ãã·ãŒã¯ã¬ããECã«ãã°ã€ã³ã§ããªãããã«ãŒããžååãå
¥ããŠãã«ãŒãã®äžã空ã®ãŸãŸããšãã£ãäžå
·åãçºçããŠããããšãä»åã®é害ã®è£åŽã§çºçããŠããäºè±¡ã§ããã ãªãPSLã«ãã¡ã€ã³ãç»é²ããŠããæ°ã¶æçµéããŠããåé¡ãé¡åšåãå§ããã®ã PSLã«ãã¡ã€ã³ãç»é²ããã®ã¯2021幎12æ5æ¥ã§ããããã®é害ãéçºããŒã ãèªèããã®ã¯2022幎2æ19æ¥ã®æ®µéã§ããã ãªãããã2ã¶æã»ã©çµéãããŸã§ãã®äžå
·åã«æ°ãã€ãããšãã§ããªãã£ãã®ããšãããšãããã¯ãã©ãŠã¶ãææ°ã®PSLãåã蟌ãã ã¿ã€ãã³ã°ãé¢ä¿ããŠããããã§ããã å®ã¯ãåãã©ãŠã¶ã¯åžžã«ææ°ã®PSLãåç
§ããŠããããã§ã¯ãªããä»»æã®ã¢ããããŒãã®ã¿ã€ãã³ã°ã§ãã®æç¹ã®ææ°ã®PSLã®ã¹ãããã·ã§ããããã«ãã«å«ããŠåç
§ããŠããŸãã ããã«ã以äžã®è¡šã®ããã«å¿
ãããã¢ããããŒãæã«ææ°ã®PSLãžãšæŽæ°ããŠããããã§ã¯ãªãããã®æŽæ°åšæã«ã¯èŠåæ§ããªãããšãããããŸããã ãã©ãŠã¶å PSLã®æŽæ°åšæ FireFox Firefox96ïŒ2022/01/12ãªãªãŒã¹ïŒæç¹ã§ã¯BASEã®ç»é²ãããã¡ã€ã³ã¯å«ãŸããŠããããFirefox97ïŒ2022/02/08ïŒã«ã¯å«ãŸããŠãã Chrome chrome97ïŒ2022/01/04ãªãªãŒã¹ïŒæç¹ã§ 2021/10/27 ã®PSLãåã蟌ãã§ä»¥åŸãæŽæ°ãããŠããªã äžèšã®éããçŽè¿ã®Firefox97ã®ãªãªãŒã¹ã«ãã£ãŠãã®é害ã«ééãã賌å
¥è
ãåŸã
ã«å¢ããŠããã®ã§ã¯ãªããããšæšæž¬ãããŸããã é害ãžã®å¯Ÿå¿å
容 base.shopãªã©ã®eTLDã«å¯ŸããŠCookieãä¿åã§ããªããšããåé¡ã«å¯ŸããŠãä»åã¯ã·ã§ããã®URLã«è©²åœãããµããã¡ã€ã³ã«å¯ŸããŠCookieãä¿åããããã«å€æŽãããšããæ¹æ³ãæ¡çšããŸããã ããã¯ãã·ã§ããæ¯ã«ãµããã¡ã€ã³ãå²ãåœãŠãŠããBASEã®ä»çµã¿ãèãããšãåºæ¬çã«ã¯ã·ã§ããã®äžã§sessionãä¿æã§ããã°è³Œå
¥è
ã®è²·ãç©äœéšã¯é»å®³ãããªãã§ãããããšãã倿ã«ãããã®ã§ãã å®çŸæ¹æ³ãšããŠãããŒã ã§ã¯ä»¥äž2ç¹ã®éžæè¢ãæãããŸããã Cookieã®domain屿§ã§ãµããã¡ã€ã³ãæå®ãã Cookieã®domain屿§ãæå®ããªã domain屿§ãæå®ããªãã£ãå Žåã¯äžçªçãç¯å²ã«å¯ŸããŠCookieãä¿åããããããæåãšããŠã¯ããµããã¡ã€ã³ã«å¯ŸããŠCookieãçºè¡ããããã«å€æŽããããšããç¹ã§ã©ã¡ãã®å¯Ÿå¿ã宿œããŠãåãæå³ãšãªããŸãã ä»åã¯ã»ãã¥ãªãã£ã®å
¥éæžãšããŠæåã§ãããäœç³»çã«åŠã¶ å®å
šãªWebã¢ããªã±ãŒã·ã§ã³ã®äœãæ¹ ç¬¬2ç è匱æ§ãçãŸããåçãšå¯Ÿçã®å®è·µãã«domain屿§ãæå®ããªãç¶æ
ãæãCookieã®éä¿¡ç¯å²ãçãå®å
šãªç¶æ
ã§ãããšããèšåããã£ãããšãããåŸè
ã®domain屿§ãæå®ããªãããã«ä¿®æ£ããæ¹éã«æ±ºãŸããŸããã åé¡ç¹ ããŠãå眮ããé·ããªã£ãŠããŸããŸãããããããããæ¬èšäºã®æ¬é¡ãšãªããŸãã å¯Ÿå¿æ¹éãæ±ºãŸã£ããšããã§æ€èšŒç°å¢ã§åäœç¢ºèªãããŠãããšã察å¿åŸã®ãœãŒã¹ã³ãŒãã§ãã·ãŒã¯ã¬ããECã«ãã°ã€ã³ã§ããªãããšããé害ãçšã«çºçããããšããããŸããã ä¿®æ£åãšä¿®æ£åŸã®åäœç¢ºèªçµæã®æ¯èŒ ãã®çŸè±¡ã¯ eTLD+1ããã¡ã€ã³å±æ§ã«ã〠THEBASE ã®CookieãšãeTLDããã¡ã€ã³å±æ§ã«ã〠THEBASE ã®Cookieãåæã«éä¿¡ãããŠããã±ãŒã¹ã§çºçããŠããããšãããããŸããã ããã¯ãä»ãŸã§äžå
·åãçºçããŠããã·ã§ããïŒCookieãä¿åã§ããŠããªãã£ãã·ã§ããïŒã§ã¯ä¿®æ£åŸã®Cookieã®ã¿ãä¿åãããŠããããã«äžå
·åãè§£æ¶ãããäžæ¹ã§ãä»ãŸã§æ£åžžã«ãã°ã€ã³ã§ããŠããã·ã§ããïŒCookieãä¿åã§ããŠããã·ã§ããïŒã§æ°ãã«äžå
·åãçºçããããã«ãªã£ãããšããããšã§ãã ãããããªãåãkeyã®Cookieãäºçš®é¡ã§ããŠããŸãã®ã THEBASE ã®Cookieã¯æå¹æéãã»ãã·ã§ã³ã«èšå®ããŠããããããã®çŸè±¡ã«ééããå Žåã¯ãã©ãŠã¶ãåèµ·åããã°å€ãCookieãåé€ãããŠåé¡ãè§£æ¶ããããšãã§ãããšäºæ³ãããŸããã ãšããããå®éã«ãã©ãŠã¶ãéããŠã·ã§ãããéããªãããŠããæ¬æ¥ã§ããã°æ¶ããã¯ãã®ååã¢ã¯ã»ã¹ããéã®Cookieãæ®ã£ããŸãŸã«ãªã£ãŠããŸã£ãŠããããšãçºçããŠããŸããã å®ã¯ããã®åé¡ã¯ãã©ãŠã¶ããååéãããµã€ãã埩å
ãããæ©èœãå®çŸããããã«ããã©ãŠã¶ãéããåŸãæå¹æéãã»ãã·ã§ã³ã«ãªã£ãŠããCookieãä¿æãç¶ããæåãããããšãåå ã§çºçããŠãããããããšãããããŸããã ããã«ãååã®Cookieãååšããå Žåã®Cookieã®åæ±ããã©ãŠã¶ã«ãã£ãŠç°ãªã£ãŠããããšãç§ãã¡ãæ··ä¹±ãããŸããã ãã©ãŠã¶ Cookieã®äžŠã³é ååã®Cookieãè€æ°ããæã·ãŒã¯ã¬ããECã«ãã°ã€ã³ã§ããã FireFox å€ãCookieãæ°ããCookieãããå
ã«äžŠã¶ ã§ããªã Chrome å€ãCookieãæ°ããCookieãããå
ã«äžŠã¶ ã§ããªã Safari æ°ããCookieãå€ãCookieãããå
ã«äžŠã¶ ã§ãã ãã®ããã«ããã©ãŠã¶ã«ãã£ãŠæåãç°ãªã£ãŠããããã€Cookieãåé€ãããã®ãããã©ãŠã¶äŸåã§ãããšããç¶æ
ã§ããããšãããCookieã®domainæå®æ¹æ³ã倿Žããã ãã§ã¯é害ãã埩æ§ã§ããªãããšãããã£ãŠããŸããŸããã 解決æ¡ã®æš¡çŽ¢ ãã®åé¡ã«å¯ŸããŠãç§éã®ããŒã ã§ã¯2ã€ã®æ¡ã«ã€ããŠæ€èšããŸãããäžã€ç®ã®æ¡ã¯ãã®çŸè±¡ã蚱容ãããŸãŸã§å¯Ÿå¿ããªãªãŒã¹ããããšããããŠäºã€ç®ã®æ¡ã¯session.cookieã§å®çŸ©ããŠããCookieã®keyåã倿Žããäžã§å¯Ÿå¿ããªãªãŒã¹ããããšãã§ããã ãã®2ã€ã®æ¡ã®æ¯èŒæ€èšãšé害ã®åœ±é¿ç¯å²ã®ææ¡ã®ãããéçºã¡ã³ããŒã§ååããŠãœãŒã¹ã³ãŒãäžã§session.cookieã®å®çŸ©ã䜿çšããŠããå
šãŠã®åç
§ç®æãæŽãåºããŸããã 以äžã®è¡šã¯ããã®2ã€ã®æ¡ã«å¯ŸããŠããããæ¯èŒæ€èšããå
容ã衚ã«ãŸãšãããã®ã§ãã æ¡1ïŒCookieã®éè€ã蚱容ãã æ¡2ïŒCookieã®keyåã倿Žãã 圱é¿ç¯å² FireFox97ãšSafari以å€ã®ãã©ãŠã¶ã䜿çšããŠãã賌å
¥è
å
šãŠã®è³Œå
¥è
ã¡ãªãã ããã«ãªãªãŒã¹ã§ãã å®å
šã«äžå
·åãçºçããªããªã ãã¡ãªãã Cookieãäºéã§ç»é²ãããŠããŸã£ã賌å
¥è
ã«ã¯ããã©ãŠã¶ãã£ãã·ã¥ãåé€ããŠãããå¿
èŠããã ã»ãã·ã§ã³ããªã»ãããããã®ã§ãåãã°ã€ã³çãå¿
èŠã«ãªã å·¥æ° ãªã ãªã°ã¬ãã·ã§ã³ãã¹ããèšå€§ åœ±é¿æé ãã©ãŠã¶ã®æ§Cookieãæ¶ãããŸã§ïŒã€ãŸããã€åæãããäžæïŒ ãããã€ã®ã¿ã€ãã³ã°ã®ã¿ ã©ã¡ãã®æ¡ã§ãçºçãããã¡ãªãããšããŠããããã€ãè·šãã§è³Œå
¥è
ãæäœããéã«ä»¥äžã®åœ±é¿ãåºããšããåé¡ããããŸããã æ¹åãªãªãŒã¹ãããã€åã«æœéžã»å®æäŸ¿ã»ã³ãã¥ããã£éå®ååãã«ãŒããžè¿œå ããŠæªè³Œå
¥ç¶æ
ã®å Žåãæ¹åãªãªãŒã¹ãããã€åŸã«ã¯ã«ãŒãå
ã®ååãå
šãŠæ¶ããŠããŸã ã³ãã¥ããã£äŒå¡ããŒãžãžãã°ã€ã³æžã¿ã®ç¶æ
ã§ããå床ãã°ã€ã³ãå¿
èŠã«ãªã£ãŠããŸã ã·ãŒã¯ã¬ããECãããã£ãã·ã§ããããŒãžãžã¢ã¯ã»ã¹ãããŠããç¶æ
ã§ããå床PWå
¥åãå¿
èŠã«ãªã£ãŠããŸã ãããã€ããŸããã§è³Œå
¥ããããŠãŒã¶ãŒã®å Žåãæ±ºæžãèµ°ã£ãŠãããã®ã®Cookieãæã¡è¶ããªãããã«è³Œå
¥å®äºç»é¢ã衚瀺ãããªãããšã§ã賌å
¥ã«å€±æãããšèª€è§£ãããŠéè€è³Œå
¥ããŠããŸã ä¿®æ£å¯Ÿå¿ãªãªãŒã¹ååŸãŠãåé¡ããçºçããã±ãŒã¹ ãããŠæã
ã¯session.cookieãä¿®æ£ããŠCookieã®Keyåãå€ãã æçµçã«ãCookieã®keyåã倿Žããæ¡2ã®æ¹ããã賌å
¥è
ã«åªããã ããããšããããšã§æ±ºãŸããŸããã äžæçãªäžäŸ¿ãå
šè³Œå
¥è
ã«èŠæ±ããŠããŸãããšã«ã¯ãªãã®ã§ããã賌å
¥è
ã«èŠæ±ããæäœãšããŠã¯åãã°ã€ã³ãã«ãŒããžã®å床ã®åå远å ãªã©ãéåžžã®Webãã©ãŠãžã³ã°ã®æäœã®ç¯å²å
ã§å¯ŸåŠã§ãããã®ãšãªã£ãŠããŸãã éã«ãæ¡1ã®å Žåã¯ãã©ãŠã¶ã®ãã£ãã·ã¥ãåé€ãããšããéåžžã®Webãã©ãŠãžã³ã°ã§ã¯è¡ããªãæäœã賌å
¥è
ã«èŠæ±ããŠããŸãäžã«ãBASE以å€ã®ãµã€ãã®ãã£ãã·ã¥ãåé€ããŠããŸãããšã«ãªããŸãããã¡ããç¹å®ã®ãµã€ãã®ã¿ã®Cookieãåé€ããããšããã©ãŠã¶ã®æ©èœãšããŠã¯å¯èœã§ããããã®æäœã¯ããã«é£æåºŠã®é«ããã®ã§ãã ãŸããæ¡1ã«ã€ããŠã¯éè€ããCookieãåé€ãããã¿ã€ãã³ã°ããã©ãŠã¶äŸåã§ãããããã€ã³ã·ãã³ãã®åæã¿ã€ãã³ã°ãææ¡ã§ããªããšããåé¡ç¹ããã以äžé¿ããã¹ãã ããããšããæèŠããããŸããã ããããŠãäžèšã®ãããªçç±ããå®å
šãã€å®å
šãªåœ¢ã§é害ãã埩æ§ãããæ¹æ³ã§ãããCookieã®keyåã倿ŽããŠãããªãªãŒã¹ããããšããæ¹æ³ã宿œããæ±ºæãè¡ããŸããã ãªãªãŒã¹ã«åœãã£ãŠã¯ãäžå
šãæãããã«èª¿æ»ã§å€æããsession.cookieã®å®çŸ©ã䜿çšããŠããåŠçãå
šãŠç¶²çŸ
ãããã¹ãã±ãŒã¹ãäœæãããšå
±ã«ãQAããŒã ã䜿çšããŠãããªã°ã¬ãã·ã§ã³ãã¹ãé
ç®ãå
±æããŠãããã賌å
¥è
ã®äžè¬çãªæäœãå
šãŠåäœç¢ºèªããããšã§ããå®å
šæ§ãé«ããŸããã ããã«ãã£ãŠããã«é害ã®åŸ©æ§ãŸã§ã«æéãèŠããããšã«ã¯ãªããŸãããããå®å
šãã€å®å
šã«å¯Ÿå¿ããããã«ã¯å¿
èŠãªäœæ¥ã ãšããã®ãéçºããŒã ã®å
±éèªèã§ããã ãããã« ä»åãé害ã®çºçãèªèããŠããåæãããŸã§ã®éã«2é±éãšããæéãããã£ãŠããŸã£ãç¹ãšã察å¿ã®å¯äœçšã«ãã£ãŠè³Œå
¥è
æ§ã®çæ§ã«ãè¿·æããããããŠããŸã£ãããšã¯å€§å€ç³ãèš³ãªãã£ããšæããŠããŸãã ãµãŒãã¹ãæäŸããŠããäžã§ãé害ãèµ·ãããªãããã«æ°ãã€ããããšã¯éèŠãªããšã§ãããããŠãäžãäžé害ãçºçããŠããŸã£ãéã«ã¯ãåŠäœã«çŽ æ©ã圱é¿ãæå°éã«çããŠé©åãªå¯ŸåŠã§é害ã解決ããããšãã§ãããããšããç¹ããŸãéèŠãªããšã§ãã BASEã§ã¯ããã®ããã«BASEãæäŸãããµãŒãã¹ãå©çšããŠãã ãã賌å
¥è
ãã·ã§ãããªãŒããŒã®çæ§ã®ããšã第äžã«èããŠãµãŒãã¹ãå
±ã«çºå±ãããŠãã仲éãåéããŠãããŸãã ã«ãžã¥ã¢ã«é¢è«ã宿œããŠãããŸãã®ã§ããã²ãæ°è»œã«ãåãåãããã ããã https://open.talentio.com/r/1/c/binc/homes/4380
ããã³ããšã³ããšã³ãžãã¢ã® @rry ã§ãã èªå㯠BASE ã® Sales Promotion ãšããããŒã ã§äž»ã«æ°èŠæ©èœéçºãè¡ã£ãŠããŸãããã®ããŒã ã§ã¯äž»ã«ãªãŒããŒããã®äœ¿ã管çç»é¢ã«æ°ããæ©èœè¿œå ãããŠããŸãã ããã§ã管çç»é¢ã§äœ¿ã£ãŠãã API Client ãšåãã OpenAPI Generator ã䜿ã£ãŠèªåçæããããã«ããŠã¿ãã®ã§ãã®ãè©±ãæžããããšæããŸãã ãããã OpenAPI ãšã¯ïŒ https://www.openapis.org/ OpenAPI ãšã¯ãRESTful Web ãµãŒãã¹ãèšè¿°ãçæã䜿çšãããã³èŠèŠåããããã®ä»æ§ã§ãã ⻠以å㯠OpenAPI ã§ã¯ãªã仿§èªäœã Swagger ãšåŒã°ããŠããŸããããçŸåšã¯ä»æ§èªäœã«ã€ããŠã¯ OpneAPI ãšåŒã°ããŠãããSwagger ãšããã®ã¯ OpenAPI ã䜿ã£ãããŒã«çŸ€ã®ããšãããããã«ãªããŸããããŸãããããã®ã§ Swagger ã§ã¯ãªã䞻㫠OpenAPI ãšåŒã³ãŸãïŒããŒã«çŸ€ã®ã»ãããOpenAPI ã®ããŒã«ããšåŒãã§ãããŸãïŒ BASE ã§ã¯ YAML ãã¡ã€ã«ã§èšè¿°ããŠããŸãã OpenAPI ãšãã®ããŒã«çŸ€ã䜿ãããšã§ãªã«ãã§ããïŒ API ã®ä»æ§ïŒã¹ããŒãïŒãå®çŸ© å®çŸ©ã®äžå
管çãã§ãã API ããã¥ã¡ã³ããçæ ããã¥ã¡ã³ãã®ã¡ã³ããã³ã¹ã楜 API ã¢ãã¯ãµãŒããŒãç«ãŠããã API ãåºæ¥äžãã£ãŠããªããŠãå
ã«ããã³ããšã³ãã®éçºãã§ãã API Client ãèªåçæ API Client ã®ã³ãŒããããã³ããšã³ãã§æžããã«ããïŒ API ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®åãèªåçæ ã¹ããŒãããçæããåã䜿ãããšã§ããåå®å
šã«ãªã åšèŸºããŒã«ã§ããããã§ãã ããã¯ãšã³ãã®å®è£
ãšå®çŸ©ããã¹ããŒããä¹é¢ããå Žåã«èªåãã¹ããèœã¡ãããã«ããããã§ãã ããã¯ãšã³ãã®å®è£
ãä¹é¢ããªãããã«ã§ãã OpenAPI ã®ãããªã¹ããŒããäžå¿ã«ããéçºã®ããšãããã¹ããŒãé§åéçºããšãããŸãã OpenAPI ã䜿ã£ãã¹ããŒãé§åéçºãããããšã§ãªã«ãããããã®ïŒã©ãããåé¡ã解決ããã®ïŒãšãããšããã¯ã以äžã®ã¹ã©ã€ããåèã«ãªãã®ã§ãã¡ããã©ããã BASE æ¢åã·ã¹ãã ãžã® OpenAPI å°å
¥ã®èæ¯ã«ã€ã㊠BASE ã§ã¯æè¿ã«ãŒãã®å€§èŠæš¡ãªãã¬ã€ã¹ãè¡ããŸããã BASE Tech Talk #1 ãNext.jsã䜿ã£ãã«ãŒãå€§èŠæš¡ãªãã¬ã€ã¹PJã®è£åŽã - connpass æ°ããã«ãŒãã®ã¢ãŒããã¯ãã£ã§ã¯ãæ¢ã« OpenAPI ãå°å
¥ãããŠããã¹ããŒãé§åéçºãè¡ã£ãŠããŸãããèªåãããã³ããšã³ãã®éçºã§ OpenAPI ããçæãã API Client ãå©çšãããããŠããŸããã ããã BASE ã®ãªãŒããŒããã®äœ¿ã管çç»é¢ãªã©ãã«ãŒã以å€ã®ã·ã¹ãã ã§ã¯æ¢åã® API å®çŸ©ã¯ OpenAPI ã§ã¯ãªã API Blueprint ãå©çšããŠããŸããã API Blueprint ã䜿ã£ãéçºã§ã¯ API ã®ä»æ§ïŒã¹ããŒãïŒãå®çŸ© API ããã¥ã¡ã³ããçæ API ã¢ãã¯ãµãŒããŒãç«ãŠããã ãããã®ããšã¯ã§ããŸãããAPI Client ãåãèªåçæããããšã¯ã§ãããæ¯åæåã§ API Client ãšåãå®çŸ©ããŠããŸããã æåã§å®çŸ©ããã API ã®ä»æ§ãå€ãã£ããšãã«ãããã®è¿œåŸãããããšã倧å€ã ãšæããã«ãŒãéçºã®ãšããšåæ§ã®éçºäœéšãåŸããã£ãèªåã¯ãä»åã® PJ ãã OpenAPI ã䜿ã£ãã¹ããŒãé§åéçºããããïŒAPI Client ãšåãèªåçæããŠãããïŒããšåŒã³ããããã®ããã®ä»çµã¿ãå°å
¥ããããšã«ããŸããã API Client ã£ãŠäœïŒèªåçæã£ãŠã©ãããããšïŒ API ã«ãªã¯ãšã¹ããéãããã®ã³ãŒãã API Client ãšåŒãã§ããŸãã // ãã®ãããªæãã®ã³ãŒã export class FooApiClient extends APIClient { async getBar () { return this .request < APIResponseWith < Bar >>( { url: ` ${ BASE_PATH } /foo/bar` , } ) } } BASE ã§ã¯ä»ãŸã§äžèšã®ãã㪠API Client ãæåã§æžããŠããã®ã§ããããããã㯠OpenAPI ããèªåçæãã API Client ãå©çšããŠããããšã«ããŸããã 以äžã¯å®éã«ã©ã®ããã«ã㊠API Client ãšåãèªåçæããŠããã®ãã«ã€ããŠè©³ãã説æããŠãããŸãã â API Client ãèªåçæããä»çµã¿ã®æŠèŠ OpenAPI ããã©ã®ããã«ã㊠API Client ãçæããŠãããããŸãšããŸããã OpenAPI ã®åå¥ã®ãã¡ã€ã«çŸ€ãç·šé äžã€ã®å€§ã㪠merged.yaml ãšãã OpenAPI ãã¡ã€ã«ã swagger-merger ã䜿ã£ãŠçæ merged.yaml ãå
ã« openapi-generator-cli ã䜿ã£ãŠ API Client ãã¹ããŒãã®åãçæ ãã®ä»äŸ¿å©é¢æ°ãšäžç·ã« GitHub Packages ã䜿ã£ãŠ npm ããã±ãŒãžãšããŠé
ä¿¡ openapi-generator-cli ã® typescript-fetch ã䜿ã£ãŠ fetch API ã® API Client ãçæããŠããŸãã API Client ãçæããæµãã¯ãã®ãããªæãã§ãããä»ã«ã merged.yaml ãå
ã« Docker ãå©çšããŠè²ã
ããŠããŸããReDoc / SwaggerUI ãç«ãŠãŠ API ããã¥ã¡ã³ããèªãã ããAPI Sprout ã䜿ã£ãŠ API ã¢ãã¯ãµãŒããŒãç«ãŠãããããŠããŸãã ã©ã®ãããªéçºäœéšã«ãªãã ãŸãããã¯ãšã³ããšã³ãžãã¢ã API ãäœãåã«ãOpenAPI ã® YAML ãã¡ã€ã«ã ãã远å ãã PR ãåºã㊠API ã®ã¹ããŒãã«ã€ããŠããã³ããšã³ããšã³ãžãã¢ãšå
±ã«ã¬ãã¥ãŒããŸããPR ãããŒãžããããš GitHub Actions ãèªåã§ API Client ã® npm ããã±ãŒãžãé
ä¿¡ããŠãããŸãã ããã³ããšã³ãã¯é
ä¿¡ãããããã±ãŒãžãå©çšããŠãã¹ããŒãã«æ²¿ã£ã API ãžã®ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ãå®çŸããããšãã§ããŸãã ãŸãã䟿å©é¢æ°ãšã㊠API ã¢ãã¯ãµãŒããŒãžã®ãªã¯ãšã¹ããã§ããããã«ããŠããŸãã ããã«ãã API ã®éçºãåŸ
ããããŠããã³ããšã³ãåŽã®å®è£
ãé²ããŠããããšãã§ããŸãã ãã®ããã«ããŠèªåçæãã API Client ã¯ä»¥äžã®ãããªåœ¢ã§äœ¿ãããšãã§ããŸãã import { apiConfig , FooApi , FooBarResponse } from 'api-client' const client = new FooApi ( apiConfig ) const result: FooBarResponse = await client.getBar () â¡ OpenAPI ã®åå¥ã®ãã¡ã€ã«çŸ€ã«ã€ã㊠OpenAPI ã®åå¥ã®ãã¡ã€ã«çŸ€ã¯ãAPI Client ãçæããããããã«ããã€ãã®åœåèŠåã«æ²¿ã£ãŠäœãããŠããŸãã ãã£ã¬ã¯ããªæ§æã¯ä»¥äžã®ãšããã§ãã âââ README.md âââ docker-compose.yaml âââ src âââ _components.yaml - components å®çŸ© âââ _paths.yaml - paths å®çŸ© âââ components - å
±é components å®çŸ© â âââ error_response.yaml âââ merged.yaml - Docker ããåç
§ããããã®ãã¡ã€ã«ãç¹ã«ããããªã âââ openapi.yaml - ããŒã¹ãã¡ã€ã« âââ services - ãµãŒãã¹ãã£ã¬ã¯ã㪠âââ <service_name> âââ components - service ã® components å®çŸ© â âââ xxx_request.yaml â âââ xxx_response.yaml âââ definitions - service ã® definitions å®çŸ© â âââ user.yaml âââ examples - examples å®çŸ© â âââ <paths_name> â â âââ default.yaml â â âââ xxx.yaml â âââ 400_example.yaml âââ <paths>.yaml src/openapi.yaml ã® tags ã« name ãå®çŸ© src/_paths.yaml ã« path ãå®çŸ© src/services/ é
äžã« yaml ãã¡ã€ã«ãäœæ yaml ãã¡ã€ã«ã®å
容ã src/merged.yaml ã«åæ ããã ãšããã®ãã¶ãã¯ãªãšããç·šéæ¹æ³ã§ãã OpenAPI 㯠$ref ãšããããŒã¯ãŒãã䜿ã£ãŠå€éšãã¡ã€ã«ãåç
§å¯èœãªããã path API ãšã³ããã€ã³ã ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã® schema example ãããã services é
äžã«ãŸãšããŠã现ãããã¡ã€ã«åå²ãããŠç®¡çãããã圢ã«ããŠããŸãã ⢠API Client ãã¹ããŒãã®åãçæããã«ããã£ãŠã®åœåèŠå ãã¡ã€ã«åããã®ä»åœåãªã©çްããèŠåãããã€ãèšããŠããŸããããã®äžã§ã API Client ã®çæã«åœ±é¿ãããã®ããŸãšããŸããã ãã©ã«ãã®åœåèŠå src/services/* é
äž å API ã®ã¹ããŒãã眮ãå Žæ API ã® URL ãšåãæ§æã«ãã ãã®é path ã« api ãå
¥ã£ãŠããå Žå㯠api ãæã äŸïŒ /apps/api/foo/bar ãªãã src/services/apps/foo/bar.yaml ãšãªã çæããã API Client ã¯ãã©ãããªéå±€ã«äžåŸåºåããããããããããã®åœåãšããŠãŠããŒã¯æ§ãå¿
èŠã§ãããã®ãã URL ã®æ§æã«åŸã£ãŠåœåããŠããŸãã tags ãš operationId tags ãã©ã«ãã® path ã® services ãã芪ãšãªããªãœãŒã¹ãŸã§ã® path ãã€ãªãã äŸïŒ src/services/apps/foo/bar.yaml ãªã appsFoo ã«ãªã tags 㯠services ã®åãŸãšãŸãããšã«åããã®ãçšãã äŸïŒ /services/apps/foo/bar.yaml ãš /services/apps/foo/baz.yaml ã¯åã tags appsFoo ã䜿ã operationId ãªã¯ãšã¹ãã¡ãœãã + ãªãœãŒã¹å äŸïŒ /services/apps/foo/bar.yaml ã® GET ãªã¯ãšã¹ãã ã£ãã getBar ãšãªã API Client ãçæããããšããtags ã API ã¯ã©ã¹åã§ operationId ãã¡ãœããåãšãªããŸãããã®ããäžèšã®åœåèŠåã§çæãããã¯ã©ã¹ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã export class AppsFooApi extends runtime.BaseAPI { async getBar ( requestParameters: GetBarRequest = {} , initOverrides?: RequestInit ) : Promise < AppsFooBarResponse > { // ... } } requestBody ãš responses ã®ã¹ããŒããš examples ãããã¯å¥ãã¡ã€ã«ã« models ãšããŠåãåºãããã«ããŠããŸãã get : tags : - appsFoo operationId : getBar responses : '200' : description : OK content : application/json : schema : $ref : ./components/bar_response.yaml examples : default : $ref : ./examples/default.yaml '500' : description : Internal Server Error content : application/json : schema : $ref : ../../../components/error_response.yaml examples : barInternalError : $ref : ./examples/bar_internal_error.yaml # ... # ./components/bar_response.yaml title : appsFooBarResponse type : object properties : status : type : number bar : type : string nullable : true # ./examples/default.yaml value : status : 200 bar : null models ãšããŠåãåºããŠåå¥ã« title ãå®çŸ©ããããšã§ãã¬ã¹ãã³ã¹ã®åã®åœåãèªåçã« InlineResponseXXX ã®ããã«ãªã£ãŠããŸãã®ãé²ããŸãã ãŸããexamples ã default ã®ããã«ååãå®çŸ©ããããšã§ãAPI ã¢ãã¯ãµãŒããŒãžãªã¯ãšã¹ããããšãã«æå³ããã¬ã¹ãã³ã¹ãè¿ããŠãããããšãã§ããããã«ããŠããŸãã import { mockApiConfig , AppsFooApi } from 'api-client' const client = new AppsFooApi ( mockApiConfig ( { status : 500 } )) const result = await client.getBar ( {} ) // 500 ãšã©ãŒãè¿ã£ãŠãã // example ã® value 㯠OpenAPI å®çŸ©ã® examples ã® key ãæå® const client = new AppsFooApi ( mockApiConfig ( { example: 'default' } )) const result = await client.getBar ( {} ) // default ã§èšå®ãã example ã®å€ãè¿ã£ãŠãã ⣠ãã®ä» API Client ãå©çšããäžã§çšæãã䟿å©é¢æ° éåæé¢æ°ã® catch ã try / catch ã§ãšã©ãŒãèµ·ãããšãã®ãã³ããªã³ã°ãè¡ã䟿å©é¢æ°ãçšæããŠããŸãã apiErrorType ã䜿ã£ãŠèµ·ãã£ããšã©ãŒã3ã€ã®ãã¿ãŒã³ã«æŽåœ¢ãã APIError: API ããè¿ã£ãŠãããšã©ãŒã¬ã¹ãã³ã¹ Error: ãã以å€ã®äœãããã®ãšã©ãŒ null: 401ãšã©ãŒã®å Žåã¯äžåŸã§ãšã©ãŒãã³ããªã³ã°ããŠããäœãããªããã null ãè¿ã isAPIError ã䜿ã£ãŠãšã©ãŒã APIError ãªã®ã Error ãªã®ããå€å¥ãã const client = new AppsFooApi ( apiConfig ) const result = await client.getBar ( {} ) . catch (async ( e ) => { const error = await apiErrorType ( e ) // 401 ã®ãšãã¯èªåçã« FlashMessage ãåºãããã«ããŠããããæ©æãªã¿ãŒã³ if ( ! error ) return if ( isAPIError ( error )) { // APIError ã§ 404 ãªã©è¿ã£ãŠãããšãã®ãšã©ãŒãã³ããªã³ã° } else { // ããã§ãªããã ã®ãšã©ãŒãè¿ã£ãŠãããšãã®ãšã©ãŒãã³ããªã³ã° console .log ( error.message ) } } ) ãŸãããšã©ãŒãã³ããªã³ã°ã«ã€ããŠã®èãæ¹ã¯ä»ãŸã§å®è£
è
ã®å€æã«å§ããŠããéšåããããŸãããããšã©ãŒãã³ããªã³ã°ã®ããæ¹ã«ã€ããŠãå¥èšäºã§ãŸãšããŠèªèåããããããããŸããã Web ãµãŒãã¹ãéçºãããšãã®ãšã©ãŒãã³ããªã³ã°ã«ã€ã㊠ãŠãŒã¶ãŒã«è¡šç€ºãããšã©ãŒã¡ãã»ãŒãžã管çããã®ã¯ããã³ããšã³ãïŒããã¯ãšã³ãïŒ æ³šæãããã®ãããã§è¿ã£ãŠãã title ã detail ãªã©ã¯ããŠãŒã¶ãŒã«è¡šç€ºããããã®æèšã§ã¯ãªããããŸã§éçºè
ã«äœã®ãšã©ãŒãæããŠãããããã®æèšã ãšããããšã§ãã ãšã©ãŒãè¿ããŠããã®ã¯ API ã§ãã£ãŠãAPI ãæäœããã®ã¯ããã³ããšã³ãã®ã³ãŒãïŒã€ãŸãããã³ããšã³ãéçºè
ïŒãªã®ã§ãéçºè
ãããããšã©ãŒã¡ãã»ãŒãžã§ååã§ãã ãŠãŒã¶ãŒã«è¡šç€ºãããšã©ãŒæèšã«ã€ããŠã¯ããã¶ã€ããŒãšçžè«ããŠæ±ºããããšãã»ãšãã©ããšæããŸããããã¯çްãã調æŽãè¡ããããããã³ããšã³ãã§ç®¡çããã®ãè¯ãã§ãããããŠãŒã¶ãŒã«è¡šç€ºããé åã¯ããã³ããšã³ãã®é åã§ãã †GitHub Actions ã䜿ã£ã GitHub Packages ã®é
ä¿¡ src/merged.yaml ãŸã㯠api-client/package.json ã«å€æŽããã£ã PR ã main ãã©ã³ãã«ããŒãžãããå Žå㯠GitHub Actions ã§ GitHub Packages ãé
ä¿¡ããããã«ããŠããŸãã - uses : docker://openapitools/openapi-generator-cli with : args : generate -g typescript-fetch -i src/merged.yaml -o api-client/src/generated --additional-properties=modelPropertyNaming=camelCase,supportsES6= true ,withInterfaces= true ,typescriptThreePlus= true - run : | cd api-client yarn install --frozen-lockfile yarn build - env : GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | cd api-client npm config set //npm.pkg.github.com/:_authToken=$GITHUB_TOKEN npm publish ããããmain ã«ããŒãžããéã«äœããã®çç±ã§ npm publish ã倱æãããã©ãããŸãããïŒð€ ãããªãšãã®ããã«ãCI ã§ publish ã§ãããããã§ãã¯ããŠããŸãã can-npm-publish ãå©çšã㊠npm publish ãã§ããªãå Žå㯠CI ãèœã¡ãŠæ°ã¥ããããã« GitHub Actions ãèšå®ããŠããŸãã䟿å©ã§ããã - env : GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | cd api-client npm config set //npm.pkg.github.com/:_authToken=$GITHUB_TOKEN yarn run can-npm-publish --verbose 以äžãâ ãâ€ãŸã§ API Client ãšåã®èªåçæãããäžã§ã®ãã€ã³ãããããŸããã ãã®ãããªåœ¢ã§çŸåšã¯èªåã®ãã£ãŠãã PJ 以å€ã§ã OpenAPI ããçæãã API Client ãšåãå©çšãããããã«ãªã£ãŠããŠããŸãã 䜿ã£ãŠããäžã§ã®ã¡ãªãããšããããã®èª²é¡ OpenAPI ãå©çšããã¹ããŒãé§åéçºããã£ãŠã¿ãŠæããã¡ãªããã¯ä»¥äžã®éãã§ãã API ã®å®è£
ãåŸ
ããããŠããã³ããšã³ãéçºãã§ãã API ã¢ãã¯ãµãŒããŒã䜿ãããšã§ãå€éšé£æºãªã©ãå¿
èŠãªè€é㪠API ã§ãã£ããšããŠãããã³ããšã³ãã®åäœç¢ºèªãéçºã楜ã«è¡ãããšãã§ãã API Client ãã¹ããŒãã®åããã¡ãã¡æåã§æžãå¿
èŠããªããªã 仿§ãšå®è£
ã®ä¹é¢ããªããªã ãã®ããã«ãéçºã楜ã«ïŒéãããããšãã§ããŸããïŒ ð ãšã¯ãããå
šäœãéãã課é¡ã¯ãŸã ãŸã æããŸãã ããã³ããšã³ãã®éçºã«ãšã£ãŠã¡ãªãããæããããããšã¯å€§ããã®ã§ãããããã¯ãšã³ãã®éçºã«ãšã£ãŠã¯ã©ãã§ããããã ããã¯ãšã³ãã®å®è£
ãšå®çŸ©ããã¹ããŒããä¹é¢ããå Žåã«èªåãã¹ããèœã¡ãããã«ããããªã©ã®èšå®ããŸã ã§ããŠããªã ããã¯ãšã³ãã¯ä»æ§ãšå®è£
ã®ä¹é¢ãèµ·ãã£ãŠãæ€ç¥ã§ããªãã®ã§ãAPI ã«å€æŽãããå Žåã¯ã³ãã¥ãã±ãŒã·ã§ã³ã§ãªããšãããå¿
èŠããã ãšãã£ãããã«ãçŸç¶ã¯ããã³ããšã³ãã®éçºã§ã¯ã¹ããŒãé§åéçºã®è¯ãã享åã§ãããã©ããã¯ãšã³ãã®éçºã§ã¯ããã³ããšã³ãã»ã©ã®æ©æµã¯åããããŠããªãç¶æ³ã§ãã ãšã¯ããããã¯ãšã³ãã®éçºã§ããAPI ã®å®è£
ãããã³ããšã³ãã®å®è£
ã®ãããã«ãŒã«ãªããã«ãããšãããšããã®ã¯ããã¯ãšã³ãéçºè
ã®ç²Ÿç¥è¡çäžãšãŠãè¯ãããšã ãšããããããã£ãŒãããã¯ãåããããããŸããã ä»åŸããã¯ãšã³ãã®ç¶æ
ãå€ããæ¬¡ç¬¬ OpenAPI ã®ããŒã«ãå
¥ãããªãããŠãããã«ããè¯ãã¹ããŒãé§åéçºãæšé²ããŠãããã°ãããªãšæã£ãŠããŸãã ãããã« OpenAPI ãå©çšããã¹ããŒãé§åéçºã§åŸãããã¡ãªããã¯ãšãŠã倧ãããã®ã§ãã ãã² API Client ãšåãèªåçæããŠå PJ ã§æŽ»çšããŠã¿ãŠãã ããïŒ
BASEã®æ©æ¢°åŠç¿ããŒã ã§è«æèªã¿äŒã宿œããŠã¿ãŸãã ããã«ã¡ã¯ãBASEã®DataStrategyïŒDSïŒããŒã ã§ãšã³ãžãã¢ãããŠãã竹å
ã§ãã DSããŒã ã§ã¯BASEã«ãããæ§ã
ãªããŒã¿åææ¥åãã¯ãããæ©æ¢°åŠç¿æè¡ãå©çšããæ€çŽ¢ãæšèŠæ©èœã®ãµããŒããååã®ãã§ãã¯ãäžæ£æ±ºæžã®é²æ¢ãªã©ã«åãçµãã§ããŸãã å
æ¥ãããŒã å
ã§ææ°ã®æ©æ¢°åŠç¿æè¡ã«ã€ããŠã®ç¥èŠãçžäºã«æ·±ããããã®è©Šã¿ãšããŠãåã
èå³ã®ããæ©æ¢°åŠç¿ç³»ã®è«æãæã¡å¯ã£ãŠç޹ä»ãåããããããè«æèªã¿äŒãšãããã®ã宿œããŠã¿ãŸããã ãã®èšäºã§ã¯ããã®äŒã§ç§ãçºè¡šããå
容ã®äžéšã玹ä»ããããšæããŸãã â» äžèº«ã¯è«æèªã¿äŒçšããæ¬èšäºçšã«äžéšä¿®æ£ãå ããŠããŸãã A ConvNet for the 2020s 玹ä»ããè«æã«ã€ã㊠ã¿ã€ãã«: A ConvNet for the 2020s èè
: Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, Saining Xie Facebook AI Research (FAIR), UC Berkeley CVPR 2022 arXivãªã³ã¯: https://arxiv.org/abs/2201.03545 å
¬åŒå®è£
: https://github.com/facebookresearch/ConvNeXt â» æ¿å
¥ããŠããå³ïŒç»åïŒãšè±æã¯ç¹ã«èšåããªãéãæ¬è«æããã®åŒçšã«ãªããŸãã TL;DR çŽè¿ã®ç»ååŠçNNã®ã¢ãŒããã¯ãã£ã«ãããŠã¯ãTransformerãããŒã¹ã«ãããã®ããããã¯ã©ã¹ã®æ§èœãçºæ®ïŒSwin-TïŒ Transformerã®ããŒãšãªãã¢ãžã¥ãŒã«ã¯Multi-Head Self-AttentionïŒMSAïŒã ããå®éã«ã¯ãã以å€ã«ãåŸæ¥ã®ConvNetã«åãå
¥ããããŠããªãæ§ã
ãªãã¯ããã¯ãååšâçã«ConvNetãäžåã£ãŠãããšã¯èšããªãã®ã§ã¯ ããã§åŸæ¥ã®ResNetã«ãTransformerã«å ããããŠããMSA以å€ã®ãã¯ããã¯ãå¯èœãªéãçã蟌ãã ïŒConvNeXtãšåœåïŒ ConvNeXtã¯åŸæ¥ã®TransformerããŒã¹ã®ã¢ãã«ã«å¯ŸããŠãã¢ãã«ãµã€ãºãæããªããæ§èœãäžåãããšãã§ãã We gradually âmodernizeâ a standard ResNet toward the design of a vision Transformer, and discover several key components that contribute to the performance difference along the way. ç»ååé¡ã¿ã¹ã¯ã«ãããConvNeXtãšViTã®æ§èœæ¯èŒ ç»åç³»NNã¢ãã«ã¢ãŒããã¯ãã£ã®æµã ConvNeXtã«å°éãããŸã§ã®ã¿ãŒãã³ã°ãã€ã³ãçãªã¢ãŒããã¯ãã£ããã£ãããšæ¯ãè¿ã£ãŠã¿ããïŒãªã³ã¯ã¯arXivïŒ AlexNet(2012) ConvNetã®å§ç¥çãªååš ImageNetã³ã³ãã¹ãã§å§å â以éConvNetã®å±€ãæ·±ãããã®ããã¬ã³ãã« âå±€ãæ·±ããããšä»¥äžã®äºã€ã®åé¡ãæµ®äž Back Propagationæã®åŸé
æ¶å€±ã»åŸé
ççºã®åé¡ ç²ŸåºŠã®é£œåãåŠç¿æã®ãšã©ãŒã®äžæïŒDegradationïŒã®åé¡ ResNet(2015) åŸé
æ¶å€±ã»åŸé
ççºåé¡ã¯Batch Normalizationãæå¹ Degradationã«å¯Ÿããã¢ãããŒããšããŠãå±€éã®ã·ã§ãŒãã«ããæ¥ç¶ã®éèŠæ§ã«æ³šç® ã·ã§ãŒãã«ãããå«ãã ãããã¯ãå«ãã¢ãŒããã¯ãã£ãæå± ResNetã®ã·ã§ãŒãã«ããæ§é ïŒHe, Kaiming, et al. "Deep residual learning for image recognition."ããïŒ ResNeXt(2016) ResNetã®ãããã¯ã䞊åã«äžŠã¹ãŠéèšããä»çµã¿ãæå± ãã©ã¡ãŒã¿æ°ãšæ§èœã®ãã¬ãŒããªããæ¹å 䞊åã«äžŠã¹ãæ°Cardinalityããã€ããŒãã©ã¡ãŒã¿ãšããŠå°å
¥ å°ãªããã©ã¡ãŒã¿æ°ãå°ããã¢ãã«ãµã€ãºãã·ã³ãã«ãªåœ¢ã§ResNetã®æ§èœãäžåã ResNeXtã®ä»çµã¿ïŒXie, Saining, et al. "Aggregated residual transformations for deep neural networks."ããïŒ EfficientNet(2019) ãããã¯ãŒã¯ã®æ·±ããåºããè§£å床ïŒç»åãµã€ãºïŒã®3ã€ããã©ã¡ãŒã¿ãšããŠæé©å æ±ããããç»åç³»ã®æ©æ¢°åŠç¿ã³ã³ãçã§ã¯ããèŠãã¢ãŒããã¯ãã£ã®äžã€ VisionTransformer(ViT)(2020) èªç¶èšèªåŠçç³»NNã«ãããŠã¯ããã¡ã¯ãã¹ã¿ã³ããŒããšãªã£ãTransformerãç»ååŠçã«å¿çš ç»åã16x16ã®ãããã«åããããããã®Embeddingãåèªã«èŠç«ãŠã ç»ååé¡ã«ãããŠå°ãªãèšç®ã³ã¹ãã§ãããæ§èœãçºæ® ç»ååŠçã«ãããæè¿ã®å€§ããªãã¬ãŒã¯ã¹ã«ãŒã®äžã€ ViTã§çšããããç»åã®ãããåïŒDosovitskiy, Alexey, et al. "An image is worth 16x16 words: Transformers for image recognition at scale."ããïŒ Swin Transformer(Swin-T)(2021) ViTãç©äœæ€ç¥ãã»ãã³ãã£ãã¯ã»ã°ã¡ã³ããŒã·ã§ã³ãªã©ããã¯ã»ã«åäœã®è§£å床ãèŠæ±ãããä»ã®ã¿ã¹ã¯ã§ã广ãçºæ®ã§ããããã«æ¹è¯ ãããåã®åŠçãéå±€å+1ãã¹ãã€ãºã©ãåŠçïŒShifted WindowïŒãå°å
¥ããããšã§ç»åãµã€ãºã®2ä¹ã§ãã£ãViTã®èšç®éãç·åœ¢ãŸã§èœãšãã ç»ååŠçç³»ã®ãããã«ã³ãã¡ã§ããICCV'21ã®Best Paper ConvNeXtã®è«æã§ã¯ãSwin-Tã§æ¡çšãããŠããWindowããºã©ãåŠçãConvãšé¡äŒŒããŠãããããéèŠãªèŠçŽ ã§ãããšèããããããšãèšåãããŠãã For example, the âsliding windowâ strategy (e.g. attention within local windows) was reintroduced to Transformers, allowing them to behave more similarly to ConvNets. ... Swin Transformerâs success and rapid adoption also revealed one thing: the essence of convolution is not becoming irrelevant; rather, it remains much desired and has never faded. Swin-Tã§çšããããéå±€çãªãããåïŒLiu, Ze, et al. "Swin transformer: Hierarchical vision transformer using shifted windows."ããïŒ ConvNeXt(2022) æ¬èšäºã§ç޹ä»ããŠããè«æ ResNetãConvNeXtã«ãªããŸã§ã«å ããããæ¹è¯ Chapter2以éã§ã¯ããŒã¹ãšãªãResNetã«å ããããææ³ãšãããã«ããç²ŸåºŠã®æ¹åå¹
ã«ã€ããŠé ã«èª¬æãããŠããã 2.1 åŠç¿ææ³ ãããã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ãåŒãåã«åŠç¿ææ³ãTransformerã«å£ã£ãŠæ¹åããŠããã ãšããã¯æ°ã90â300ã« AdamW optimizer(2019) L2æ£ååãšWeight DecayãAdamã§ã¯åäžèŠããããšãã§ããªãããšã瀺ããAdamã®Weight Decayã«ä¿®æ£ãå ãã ããŒã¿æ¡åŒµ Mixup(2018) 2çš®é¡ã®ããŒã¿ãšã©ãã«ãããŒã¿ååžããã©ã³ãã çæããã ã䜿ã£ãŠä»¥äžã®ããã«æ··ãåããã ããŒã¿: ã©ãã«: Cutmix(2019) ç»åã®äžéšãåãåããå¥ã®ã©ãã«ã®ç»åãæ¿å
¥ RandAugment(2020) ã°ãªãããµãŒãã§æé©ãªæ¡åŒµåºŠåããèŠã€ãã RandomErasing(2017) ç»åå
ã«ã©ã³ãã ãªç©åœ¢ã远å ãã CutmixïŒYun, Sangdoo, et al. "Cutmix: Regularization strategy to train strong classifiers with localizable features."ããïŒ Random ErasingïŒZhong, Zhun, et al. "Random erasing data augmentation."ããïŒ æ£åå Stochastic Depth(2016) ã©ã³ãã ã§Resãããã¯ãã¹ãããã®ã¿ã«ããïŒåŸãã®å±€ã«ãªãã»ã©ãã®ç¢ºçãé«ããªãïŒ Label Smoothing(2016) æ£è§£ã©ãã«ãšäžæ£è§£ã©ãã«ã®å€ã1, 0ã§ã¯ãªã0.9, 0.1ãªã©ãšãã ãããã®è¿œå ã«ããæ§èœã¯76.1%â78.8%ã«æ¹å 2.2 ãã¯ããã¶ã€ã³ ããããã¯ãResNetã®ãã¯ããªæ§é ãTransformerã«è¿ã¥ããŠããã ã¹ããŒãžããšã®èšç®æ¯çã®å€æŽ è€æ°ã®Resãããã¯ãããªã1ãããŸãã¯ã¹ããŒãžãšåä»ããããŠãããConvNeXtã«ã¯åèšã§4ã€ã®ã¹ããŒãžãååšããã ããããã®ã¹ããŒãžã®ãããã¯æ°ã¯ResNet-50ã§ã¯(3, 4, 6, 3)ã§ãã£ããããããSwin-Tã«åãããŠ(3, 3, 9, 3)ã«å€æŽããã 78.8%â79.4%ã«æ¹å stemã§ç»åããããåããããã«å€æŽ å
¥åãããç»åã«å¯ŸããŠäžçªæåã«åŠçãè¡ãéšåã¯stemãšåä»ããããŠãããViTãªã©ã§ã¯ç»åã®ãããåãè¡ãéšåã«çžåœããã åŸæ¥ã®ResNetã§ã¯ããŸãå
¥åã®ç»åãé©åãªç¹åŸŽéã®ãµã€ãºã«ããããã«ã«ãŒãã«ãµã€ãº7Ã7ã¹ãã©ã€ã2ã®Conv+Max Poolingã䜿çšããããšã§4åã®ããŠã³ãµã³ãã«ãè¡ãªã£ãŠããã äžæ¹ã§ViTã§ã¯ç»åã16Ã16ã®ãããã«ããåŠçãè¡ãªã£ãŠããããããã¯ã«ãŒãã«ãµã€ãº16Ã16ã§éè€ãªãïŒã¹ãã©ã€ã16ïŒã®Convã«çžåœããã Swin-Tã§ã¯ããå°ãã4Ã4ã®ããããäœæããŠãããããããã«å£ã£ãŠstemã§ã«ãŒãã«ãµã€ãº4Ã4ã§ã¹ãã©ã€ã4ã®Convã䜿çšããã 79.4%â79.5%ã«æ¹å 2.3 ResNeXtå ResNeXtã§åãå
¥ããããŠããã1ã€ã®Convãè€æ°ã«åå²ãããŠããšãããŸãšããããšã§ãã©ã¡ã¿æ°ãåæžããææ³ãé©çšããã ã¢ãã«ã®ãã£ãã·ãã£ã®æžå°ãæãã€ã€ãã©ã¡ã¿æ°ãå¹ççã«åæžã§ãããããã¢ãã«ãµã€ãºãç¶æãããŸãŸæ§èœã倧å¹
ã«åŒãäžããããšãã§ããã ä»åã¯ãã£ã³ãã«æ°åã®åå²ãäœæããDepthwise Convã䜿çšãããããã¯Transformerã«ãããAttentionå±€ã®Multi-Headåã«çžåœãããšèšåãããŠããã We note that depthwise convolution is similar to the weighted sum operation in self-attention 79.5%â80.5%ã«æ¹å 2.4 Inverted Bottleneck Transformerã§ã¯å
¥åã®æ¬¡å
ããé ãå±€MLPã®æ¬¡å
ã®æ¹ã4å倧ãããªãInverted Bottleneckãšãããã¶ã€ã³ãæ¡çšããŠããã ãã®ã¢ã€ãã¢ã¯MobileNetV2(2018)ã§ãã§ã«å©çšãããŠããããã®åŸã®æ¹è¯åConvNetã§ããã°ãã°çšããããŠããã äžå³ã®(a)ãResNeXtã®1ãããã¯ã§çšããããéåžžã®Bottleneckã§ããã£ã³ãã«ãµã€ãºã384â96ã«èœãšããŠããDepthwise Convã§96â96ã«ç³ã¿èŸŒã¿ãæåŸã«ãã£ã³ãã«æ°ã384ã«æ»ããŠããã (b)ãInverted Bottleneckã§ããã£ã³ãã«æ°ãéã«96â384ã«å¢ãããŠãã384â96ã«æ»ããŠããã ããã«ãã£ãŠDepthwise Convã®èšç®éã¯å¢ãããã®ã®ãå
¥åéšåãããŠã³ãµã³ãã«ãããŠããããšã«ãã£ãŠResãããã¯ã®ã·ã§ãŒãã«ããã®1Ã1Convã®èšç®éãæžããããå
šäœã®èšç®éã¯æžãããšã«ãªãã (a)ãResNeXt, (b)ãInverted Bottleneck, (c)ãDepthwise Convãç§»åããããã® 80.5%â80.6%ã«æ¹åïŒResNet-200ã§ã¯81.9%â82.6%ã«æ¹åïŒ 2.5 Large Kernel Sizes åŸæ¥ã®ConvNetã§ã¯3Ã3ãªã©å°ããã«ãŒãã«ãµã€ãºäœ¿çšããã®ãäž»æµã§ãã£ããã®ã®ãSwin-Tã®Windowã®ãµã€ãºã¯å°ãããšã7Ã7ã§ããç¹ãèæ
®ãããšãã«ãŒãã«ãµã€ãºã¯å€§ããæ¹ãæå¹ã ãšæãããã ãããå®çŸããããã«ä»¥äžã®äºã€ã®æé ãèžãã§ããã Depthwise Convã®ç§»å ãã倧ããªã«ãŒãã«ãµã€ãºãå©çšããããã«ãDepthwise ConvãResãããã¯ã®æåã«ãã£ãŠãããïŒäžã®å³ã®(b)â(c)ã«å¯Ÿå¿ïŒ ããã¯Transformerã®Multi-Head AttentionãMLPã®åã«é
眮ãããŠããããšã«å¯Ÿå¿ããã ïŒäžæçã«ïŒ80.6%â79.9%ã«æªå ã«ãŒãã«ãµã€ãºã®å¢å Depthwise Convãç§»åãããåŸããã®ã«ãŒãã«ãµã€ãºã3ãã5, 7, 9, 11ãšå¢ãããŠãããšèšç®éã¯å€§äœä¿ããããŸãŸæ§èœãæ¹åããã7ã§å€§äœæ§èœã飜åããã ãµã€ãºã®å€§ããResNet-200ã§ãåã7ã§é£œåããããšã確èªãããŠããã 79.9%â80.6ã«æ¹å ãã®æç¹ã§ViTã§æ¡çšãããŠãããã¶ã€ã³ã®å€§éšåãå®çŸã§ããŠããããšã«ãªãã 2.6ãã¯ããã¶ã€ã³ 倧æ ã®ã¢ãŒããã¯ãã£ã¯å®æãããããããããã¯ã¬ã€ã€ãŒã¬ãã«ã§æ¹åããŠããã ReLUãGELUã§çœ®ãæãã æŽ»æ§å颿°ãšããŠäœ¿çšãããŠããReLUãBERTãGPT-2ãViTã§ã䜿ãããŠãã以äžã® GELU(2016) ã«çœ®ãæããã GELUãšä»ã®æŽ»æ§å颿°ãšã®æ¯èŒïŒHendrycks, Dan, and Kevin Gimpel. "Gaussian error linear units (gelus)."ããïŒ 80.6%â80.6%ã§æ§èœæ®ãçœ®ã æŽ»æ§å颿°ãæžãã Transformerã®1ãããã¯ïŒå
¥åã®Key/Query/ValueãEmbeddingããŠMLPã«å
¥ããéšåïŒã«ã¯æŽ»æ§å颿°ã1åãã䜿çšãããŠããªãäžæ¹ã§ãResNetã¯1ãããã¯ã«Convå±€ã®æ°ã ãæŽ»æ§å颿°ãååšããã ããã1Ã1ã®Conv2ã€ã®éã®ã¿ã«çµãããšã§æŽ»æ§å颿°ã®æ°ãåãããã 80.6%â81.3%ã«æ¹å Normalizationå±€ãæžãã ãããTransformerã«åãããŠ1Ã1convå±€ã®åã«ã®ã¿Batch Normalizationå±€ã眮ãã 81.3%â81.4%ã«æ¹å BatchNormãLayerNormã«å€æŽ ãããTransformerã§äœ¿çšãããŠããææ³ã§ã¯ããããåçŽãªResNetã®BNãLNã«çœ®ãæããã ãã§ã¯æ§èœãäžããããšã確èªãããŠããããããŸã§ã®æ¹é ãå
šãŠå ããäžã§LNã«çœ®ãæãããšæ§èœã®æ¹åãèŠãããã 81.4%â81.5%ã«æ¹å ããŠã³ãµã³ãã«å±€ãåãé¢ã ResNetã§ã¯åã¹ããŒãžã®æåã®Resãããã¯ã§ã¹ãã©ã€ã2ã®Convã«ãã£ãŠããŠã³ãµã³ããªã³ã°ãè¡ãªã£ãŠããããSwin-Tã§ã¯ãã®ãããªåŠçã¯åã¹ããŒãžã®éã§è¡ãããŠããã ããã«å£ã£ãŠConvNeXtã§ãã¹ããŒãžã®éã«ããŠã³ãµã³ãã«å±€ãšNormå±€ã远å ããããšã§åŠç¿ãå®å®åããããïŒNormå±€ãªãã ãšåŠç¿ãçºæ£ãããïŒ 81.5%â82.0%ã«æ¹å ResNetã«å ããå
šãŠã®å€æŽç¹ãšããã«ããæ§èœããã³èšç®éã®æ¹å æçµçãªã¢ãã«ã®ã¢ãŒããã¯ã㣠æ§èœ ç»ååé¡ã¿ã¹ã¯ã«ãããæ§èœæ¯èŒ ImageNetã«ãããŠConvNeXtã¯åçšåºŠã®ã¢ãã«ãµã€ãºã®SwinTransformerãäžåãæ§èœãçºæ®ããŠããã ç©äœæ€åºã¿ã¹ã¯ã«ãããæ§èœæ¯èŒ COCOããŒã¿ã»ããã«ãããç©äœæ€åºã«ãããŠãConvNeXtã¯åçšåºŠã®ã¢ãã«ãµã€ãºã®SwinTransformerãäžåãæ§èœãçºæ®ããŠããã ææ³ãªã© ããæè¿ã®ç»ååŠçç³»ã®æµããæ¯ãè¿ãã®ã«ã¡ããã©è¯ãè«æã§ãå
¬åŒã®pytorchã«ããå®è£
ãšåãããŠå
容ãéåžžã«ããããããè¯ãè«æ 匷ããŠèšãã°æ¢åã®æè¡ã®å¿çšãšããé¢ã匷ããããæ°ããã¢ã€ãã¢ãç¥èŠãçè«çãªæ·±æãïŒããªãAttentionããConvolutionã®æ¹ãäžæãããã®ãããªã©ïŒïŒã®é¢ã§ã¯è¥å¹²ç©è¶³ããªãæ°ããã æèªãã æ·±å±€åŒ·ååŠç¿ç³»ã® Rainbow: Combining Improvements in Deep Reinforcement Learning ãšããè«æã«ãªããšãªãç«ã¡äœçœ®ã䌌ãŠãããªãšæãã ããŒã¹ãšãªãDeep Q-Networkãšããææ³ã«7ã€ã®æ¹åææ³ãå ãããšãã®ããã©ãŒãã³ã¹ã®æ¹åã«ã€ããŠç ç©¶ããè«æ èªåã§ããŒã¹ã¢ãã«ã®ã¢ãŒããã¯ãã£ãåŠç¿ææ³ã«æ¹åãå ããéã®æµããšããŠãåèã«ãªã ãããã« ä»åã®ãããªè«æèªã¿äŒã¯DSããŒã ãšããŠã¯åã®è©Šã¿ã§ããããæ°ããç¥èŠãåãå
¥ãèŠéãåºããè¯ãæ©äŒã«æããã®ã§1Qã«1åãããã®ããŒã¹ã§ç¶ç¶ããŠãããããšæã£ãŠããŸãã ä»åŸãDSããŒã ã§ã¯æ°ããæè¡ã«ã€ããŠãç©æ¥µçã«æ€èšããæ€èšŒãéããããšã§æŽãªããããã¯ãã®æ¹åããµãŒãã¹ã®åäžã«åãçµãã§ãããŸãã
åããŸããŠãããã³ããšã³ããšã³ãžãã¢ã®è¿è€ @kon_engineer ãšç³ããŸãã æ¬èšäºã§ã¯ã2022幎1æ24æ¥ïŒæïŒã«ãªãªãŒã¹ããããåååšåº«çµãèŸŒã¿æ©èœã®æ¯ãè¿ããšããµãŒãã¹å
šäœã®ç¶æ³ãå¯èŠåã§ããNew Relicãšãããã©ãããã©ãŒã ãæŽ»çšããAPIã®èŠ³æž¬ã«ã€ããŠç޹ä»ããŸãã ä»åã®äºäŸã§ã¯ãNew Relicã§èŠ³æž¬å¯èœãªAPIã®ã¬ã¹ãã³ã¹é床ãåã¯ãšãªãã©ã¡ãŒã¿ã®ãªã¯ãšã¹ãç¶æ³ãªã©ãåæããŠãå¹ææž¬å®ãä»åŸã®æœçã«æŽ»ããåãçµã¿ãè¡ããŸãããNew Relicã®è©³ãã説æããBASEãNew Relicãå°å
¥ããçµç·¯ã¯ ãã¡ãã®èšäº ããåç
§é ããããšæããŸãã åååšåº«çµãèŸŒã¿æ©èœãšã¯ åå管çç»é¢ã§ååã®åšåº«æ°ãæå®ããŠæ€çŽ¢ã§ããæ©èœã§ããBASEã§ã¯åå管çç»é¢ã®äžèЧãããåšåº«åãã®ååãåšåº«ãå°ãªããªã£ãŠããååãç°¡åã«èŠã€ããããšãã§ããªããšãã課é¡ããããŸãããç¹ã«ååæ°ã50ãè¶
ããå Žåã¯ãåšåº«ç¶æ³ãããŒãžã³ã°ããŠç¢ºèªããå¿
èŠããããŸãããããã§ãåšåº«æ°ã§ååãçµã蟌ããããã«æ¹ä¿®ããŠãåå管çã®å©äŸ¿æ§ã®åäžãå³ããŸããã Twitteräžã®åç¥ã¯ä»¥äžã§ãã âââââ®â ãNEWâš â°âïœâ⯠BASE( á )âºïž ðãåå管çãð ãã¢ããããŒãïŒ ð¡åšåº«ããªãååããããšèŠã€ããããð¡ 管çç»é¢ã®ãåå管ç>çµã蟌ã¿ããã ðåšåº«ãªã ðåšåº«ãäžå®æ°ä»¥äž ã®ååã®çµã蟌ã¿ãå¯èœã«â ãã²ã掻çšãã ããïŒ pic.twitter.com/7PtLZCf7GW — BASEïŒãã€ã¹ïŒðæ°æ©èœç»å ŽïŒ (@BASEec) 2022幎1æ25æ¥ New Relicã«ããç£èŠ New Relicã«ããç£èŠã¯BASEå
šäœãšããŠæšé²ããŠãããã®ã®ãæ¬PJã®ã¡ã³ããŒã¯æ¬æ Œçãªå°å
¥çµéšã¯ãããŸããã§ãããä»åã¯ãããžã§ã¯ããšããŠãã©ã€ããŠã¿ãããšããããšã§ãã¡ã³ããŒãããããä»çµã¿ãåŠã³ãªããéçšããŠãããŸããã éçºå æ€çŽ¢å©çšç¶æ³ åååšåº«æ€çŽ¢æ©èœã¯ãæ¢åã®ååæ€çŽ¢APIã«ã¯ãšãªãã©ã¡ãŒã¿ã远å ããããšã§å®è£
ããŸãããå®è£
åã«æ¢åã®ååæ€çŽ¢APIã®ã¬ã¹ãã³ã¹é床ãã䜿çšãããŠããé »åºŠãææ¡ããããšã§æ¢åã®åé¡ãã远å ã§è¡ã£ãæ¹ãè¯ãæ¹åããªãããéçºåã«èŠ³æž¬ããããšã«ããŸããã ãŸãã¯æ€çŽ¢APIå
šäœã®åŒã³åºãããåæ°ãæž¬å®ããŠã次ã«åãã©ã¡ãŒã¿ãæå®ãããåæ°ãæž¬å®ããããšã§ãã©ã®ãã©ã¡ãŒã¿ã䜿ãããŠãã©ã®ãã©ã¡ãŒã¿ã䜿ãããŠããªããåããããã«ããŸããã åŸãããçµæãšããŠãå
šäœã®æ€çޢ忰ã«å¯ŸããŠãããŒã¯ãŒããæå®ããŠæ€çŽ¢ãããåæ°ãçŽ87%ããããšã枬å®ã§ãããããããŒã¯ãŒãã§äž»ã«æ€çŽ¢ãããŠããããšãåãããŸããããŸããååã¿ã€ãå¥ã®æ€çŽ¢ã¯ãä»ã®æ€çŽ¢æ¡ä»¶ãããæ¥µç«¯ã«äœ¿çšãããŠããªãããšãåŒã³ãããŠããåæ°ããåãã£ããããäœããã®å¯Ÿå¿ãæ€èšãã䟡å€ããããšææ¡ã§ããŸããã ããã«ãããŒã¯ãŒãæ€çޢ以å€ã¯ãçµã蟌ã¿ãã¿ã³ãæŒããŠæ€çŽ¢ã¢ãŒãã«ãéããªããã°æ€çŽ¢ã§ããªãUIã®ãããããŒã¯ãŒã以å€ã®åæ€çޢ忰ã®çµæãããæ€çŽ¢ã¢ãŒãã«çµç±ã§äžå®æ°ã®æ€çŽ¢ãªã¯ãšã¹ããåŒã°ããŠããããšãåãããŸãããä»åã¯æ€çŽ¢ã¢ãŒãã«ã«åšåº«æ°ã®æ€çŽ¢æ©èœã远å ãããããããããæ€çŽ¢ã¢ãŒãã«ãã»ãšãã©éãããŠããªãããšããç¶æ³ã§ã¯ãªãããšãææ¡ããããšã¯éèŠã§ããã è² è·ç¶æ³ ã¬ã¹ãã³ã¹éåºŠã«æ¹åã®äœå°ã¯ãªããããŸãä»åã®æ¹ä¿®ã«ãã£ãŠã¬ã¹ãã³ã¹ãæªããªããªããææ¡ããããã«ãçŸç¶ã®å¿çé床ãäºåã«ææ¡ããŸãããç¹ã«å€§ããªåé¡ã¯èŠã€ãããªãã£ãããããã®é床ãç¶æããããšãç®æšãšããŸããã ãªãªãŒã¹ååŸ èŠæš¡å¥ äºåã«ã·ã§ãããèŠæš¡å¥ã«åé¡ããŠãèŠæš¡å¥ã§ã©ã®ãããªå¹æããã£ãã®ã芳枬ã§ããããã«æºåããŸãããä»åã®æ©èœã¯ãååæ°ãå¢ããŠåšåº«ç®¡çã倧å€ãªå€§èŠæš¡ã·ã§ããã«ãã䜿ã£ãŠããããããšããæãããã£ãã®ã§ãèŠæš¡å¥ã«èŠ³æž¬ããããšã§å¹æã现ããææ¡ããçãããããŸããã ãªãªãŒã¹åŸã®æ€çޢ忰 ãŸããåšåº«æ°ãæ€çŽ¢ãããåæ°ãã©ãããããªã®ãããªã¯ãšã¹ãURLãç£èŠããŠãªãªãŒã¹åŸããã«åããããã«ããŸãããæ©èœãé 調ã«äœ¿ãããŠããããšã芳枬ã§ããŠãPJã¡ã³ããŒã§åã¶å Žé¢ããããŸããã ã©ã®ãããªå€ã§æ€çŽ¢ãããŠãããææ¡ãã åœåã¯èŠ³æž¬ããŠããªãã£ãã®ã§ããããªãªãŒã¹åŸã«åšåº«æ°0ã§æ€çŽ¢ãããŠããã±ãŒã¹ããšãŠãå€ãããšã倿ããŸãããåšåº«ãå°ãªãååãæ€çŽ¢ããããã«äœ¿ãããããšã¯äºæ³ããŠããã®ã§ãããããã«ããŠã0ã§æ€çŽ¢ãããããšãå€ãããšããå°è±¡ã§ããããã®ãããã©ã®ãããªæ°å€ã§æ€çŽ¢ãããŠããã®ããåŸããNew Relicã®ããã·ã¥ããŒãã«è¿œå ããŠèŠ³æž¬ããŸãããçµæãšããŠ8å²ä»¥äžãåšåº«æ°0ã§æ€çŽ¢ãããŠããããšãåãããæ°åããäºå®ãšããŠåšåº«åãååãææ¡ãããããŒãºãææ¡ããããšãã§ããŸãããããã«ãããåšåº«åãååãçŽ æ©ãéç¥ãããããªãåšåº«åãã«ã¢ãããŒãããæœçãä»åŸãæå¹ã ãããšããããšãåãããŸããã è² è·ç¶æ³ äºåã«ååã«æ€èšŒã¯ãããã®ã®ããªãªãŒã¹åŸãã¬ã¹ãã³ã¹ãé
ããªã£ãŠããªããããšã©ãŒã³ãŒããåºãŠããªãããªã©ã®æ€èšŒãããŸãããç¹ã«ãšã©ãŒãçºçããŠããããã¬ã¹ãã³ã¹ãæªåããŠããªãããšã芳枬ããããšãã§ããŸããã çµããã« PJãå§ãŸã£ãæãä»ãŸã§å¹ææž¬å®ãé©åã«è¡ããŠããªããšããããŒã ã¡ã³ããŒã®èª²é¡æããããŸããããã®ããããã ãªãªãŒã¹ããŠçµããã®ã§ã¯ãªããæ©èœã䜿ã£ãŠããã£ãŠããã®ããã©ã®ãããªäœ¿ããæ¹ãããŠããã®ããææ¡ããŠãåçãšæ¬¡ã®æœçã«ç¹ããåãçµã¿ãè¡ããŸããã ä»åã®æœçã¯ãèŠæš¡ãšããŠå€§ããªæ¹ä¿®ã§ã¯ãããŸããã§ããããæ¹ä¿®ããAPIãNew Relicã§èŠ³æž¬ããããšã§ããã£ãããšæ©èœã䜿ãããŠããããšãææ¡ã§ããŠãæœçãšããŠäžå®ã®å¹æããã£ãããšãåãããŸããããŸããåœåããŒã ãæã£ãŠãã仮説ãšããŠãã·ã§ãããªãŒããŒã®æ¹ã
ã¯ãåšåº«åãã®ååãå°ãªãæéã§ç°¡åã«ææ¡ãããããšãããã®ããããŸããã仮説ãééã£ãŠããªãã£ãããšãæ¹ä¿®ããAPIã®å©çšç¶æ³ãããåãããä»åŸãåšåº«åãã®ååãããã«åãããããªæœçãæå¹ã§ãããšãèªä¿¡ãæ·±ããããšãã§ããŸããã äœãããäœã£ããã®ããã£ãããšäœ¿ãããŠããããšã芳枬ã§ããããšã§ãããŒã å
šäœã®å£«æ°ãäžãã£ããšæããŸããä»åŸãç¶ç¶çã«ãã®ãããªåãçµã¿ãè¡ãããšã§ãæœçã®æå¹æ§ãåŠ¥åœæ§ãæèããŠéçºããŠãããããšèããŠããŸãã
ãã®èšäºã¯ BASE Advent Calendar 2021 ã®25æ¥ç®ã®èšäºã§ãã ã¯ããã« ã¡ãªãŒã¯ãªã¹ãã¹ïŒïŒïŒ å·è¡åœ¹å¡ VP of Productã®ç¥å®®åž( @7jin16 )ã§ãã 2021幎ã«åãçµãã 顧客ãã£ãŒãããã¯ã補åéçºã«æŽ»ããããã«ãããªã£ãããšãæžããŸãã ãªãå§ããã ãããŸã§ã顧客ããã®ãã£ãŒãããã¯ã掻ãããŠããªãã£ãããã§ã¯ãªãã®ã§ãããããå€ããããåºããã£ãŒãããã¯ãéãããå
šç€Ÿã§é²èЧã»å©çšå¯èœãªåœ¢ã§éç©ããããšè£œåäŒç»ã»éçºã®è³ªãåäžãããšèããŠåãçµãããšã«ããŸããã ãªã«ãããã "ããå€ããããåºããã£ãŒãããã¯ãéããå
šç€Ÿã§é²èЧã»å©çšå¯èœãªåœ¢ã«ãã" ãçæ³ãšããŠæ²ããŠãããéæããããã®æ¹æ³ãèããŸããã 1. ãã£ãŒãããã¯éãå¢ããããã« ä»ãŸã§ã¯è£œåå
ããçŽæ¥ãã£ãŒãããã¯ãéä¿¡ããæ©èœã¯ãªãã£ãããã補åã®ã»ãŒãã¹ãŠã®ããŒãžã®ããã¿ãŒä»è¿ã«ãã£ãŒãããã¯éä¿¡ãã©ãŒã ãžã®ãªã³ã¯ãèšçœ®ããŸããããªã³ã¯ãèšçœ®ãããšãããªãªãŒã¹ããæ¥ãæµ
ãé ã¯1æ¥æ°çŸä»¶ã®ãã£ãŒãããã¯ãéãããŠããŸããã 2. 補åéçºã«åœ¹ç«ãŠãããã« ãã£ãŒãããã¯ããã éããã ãã§ã¯ã補åéçºã«æå€§é圹ç«ãŠãããšã¯ã§ããŸããããããããŸã§ãBASEãã§ãããã·ã§ãããéå¶ããŠããã·ã§ããã¯160äžã·ã§ãããè¶
ããŠããŠå£²äžèŠæš¡ãæ±ã£ãŠããåæãã·ã§ããã«ãã£ãŠããŸããŸã§ããåãæ©èœãžã®ãã£ãŒãããã¯ã§ãæ³šææ°ã®å€ããæ±ãååæ°ã«ãã£ãŠã·ã§ãããæ±ãã課é¡ã¯ãŸã£ããç°ãªã£ãŠããããéä¿¡å
ã·ã§ããã®æ³šææ°ãååæ°ãæ¥çš®ãªã©ã®æ
å ±ã¯å¿
é ã§ãã ãã©ãŒã ãšããŠã¯ã²ãšã€ã§ããéä¿¡å
ã®ã·ã§ãããšæ³šææ°ãååæ°ãæ¥çš®ãªã©ã®ã·ã§ããã®æ
å ±ããã£ãŒãããã¯ãšçŽã¥ããŠããŸãã ãã£ãŒãããã¯ãéä¿¡ãããšç€Ÿå
管çç»é¢ã«éãããŸãã 3. å
šç€Ÿã§é²èЧã»å©çšå¯èœãªåœ¢ã«ãã 以åãããBASEãã«ã¯ãååããå£é ã§å€ãã®é¡§å®¢ãããã£ãŒãããã¯ãå¯ããããŠããŸããããSlackãGoogleã¹ãã¬ããã·ãŒãã«ä¿åãããŠããŠéç©å Žæãç¹åšããŠããããäžèЧæ§ãæ€çŽ¢æ§ãäœãå©çšããããç¶æ
ã§ã¯ãããŸããã§ããã å©çšãã«ããç¶æ
ã ãšãã£ãŒãããã¯ãéããŠã瀟å
ã®ã¡ã³ããŒã掻çšãã«ããããéç©å Žæãçµ±äžããããšããå§ããŸããã 顧客ããBASEãã«ãã£ãŒãããã¯ãäŒããæ¹æ³ã¯ ã«ã¹ã¿ããŒãµããŒãã®ãååããã©ãŒã ïŒZendeskïŒ é¡§å®¢ãšè©±ããŠãã瀟å
ã¡ã³ããŒã«å£é ã§äŒãã 補åã«èšçœ®ãããŠãããã©ãŒã ããéä¿¡ ã®3ãã¿ãŒã³ãããã©ãããäŒããããŠã瀟å
管çç»é¢ã«éç©ãããŠããããã«ããŸããã SaaSãéžã¹ãªãã£ãçç± è£œåãã£ãŒãããã¯ãè€æ°ãã£ãã«ã§éããŠç®¡çããSaaSã¯åœå
å€åããå¢ããŠããŠãŸãããããããBASEãã§ã¯åè¿°ãã以äžã®èŠä»¶ãèœãšãããšãã§ããçæçã«ã¯SaaSã§éæããããšãã§ããªãããèªç€Ÿéçºãããããšã«ããŸããã åãæ©èœãžã®ãã£ãŒãããã¯ã§ãæ³šææ°ã®å€ããæ±ãååæ°ã«ãã£ãŠã·ã§ãããæ±ãã課é¡ã¯ãŸã£ããç°ãªã£ãŠããããéä¿¡å
ã·ã§ããã®æ³šææ°ãååæ°ãæ¥çš®ãªã©ã®æ
å ±ã¯å¿
é ã§ãã å®éã«ãããã¯ãæ¹åã«æŽ»ãããã®ãïŒ 6æã«ãã£ãŒãããã¯ãã©ãŒã ããªãªãŒã¹ããŠãã6,000件以äžã®ãã£ãŒãããã¯ãããã ããŠããŸãããã£ãŒãããã¯ãããã ãããããšãã£ãŠãã®ãŸãŸæ©èœãšããŠå®è£
ãããããšã¯ãªãããã£ãŒãããã¯ãéä¿¡ããŠãããé¡§å®¢ãæ±ããŠããæ¬åœã®èª²é¡ãæ¢ãã課é¡ã®ã³ã¢ã«èŸ¿ãçãããšãéèŠã ãšæã£ãŠããŸãã ãã£ãŒãããã¯ãã©ãŒã ããªãªãŒã¹ããŠããæ¢ã«50件以äžã®æ©èœæ¹åã«ã€ãªãã£ãŠãããä»åŸãçºå±ãããŠããããã§ãã ãªãŒããŒæ§ïŒã客æ§ã®å£°ããçãŸããæ¹åã¬ããŒããŸãšã ãBASEãã§ã¯äžç·ã«ãããã¯ããæ¹åããŠããã¡ã³ããŒãåéããŠãŸãïŒå¹
åºãè·çš®ã§åéäžã§ãã®ã§å°ãã§ããèå³ãããããŸããã æ¡çšããŒãž ããã«ãžã¥ã¢ã«é¢è«ãç³ã蟌ãã§ããã ãããšå¬ããã§ãïŒ
ã¯ããã« CTOã®å·å£ ( id:dmnlk ) ã§ãã ããã¯BASE Advent Calendar25æ¥ç®ã®èšäºã§ããåã¯ç«åè£ããŠãªãã®ã«åæã«æ¥çšãçµã¿èŸŒãŸããŠãŸããã BASEæ ªåŒäŒç€Ÿã§ã¯ç©æ¥µçã«ãšã³ãžãã¢æ¡çšãè¡ã£ãŠãããŸãã ãã®äžã§ãã質åãé ãã®ã¯ãBASEã«ä»ããå
¥ç€Ÿããå Žåã«ããããšã¯ããã®ãïŒããšãããã®ã§ãã 確ãã«ãµãŒãã¹ã¯æé·ãäžå ŽãããŠããäŒæ¥ã§èªåãããããšã¯ãããã ãããããšããã®ã¯åãåæ§ã«çåãæã€ã ãããªãšã¯æããŸãã ã§ãã®ã§ä»åã¯è©±ããç¯å²ã§ã¯ãããŸãããä»BASEã§å¿
èŠãšãããŠããããšãæžããŠããããšæããŸãã ãã¬ãŒã ã¯ãŒã¯ç§»è¡ æ¥å¹Žä»¥éãBASEã·ã¹ãã ãšããŠåãçµããã®ãšããŠéåžžã«å€§ãããŠã§ã€ããå ããã®ã¯ééããªãããã«ãªãã§ãããã çŸåšBASEã®å€§éšåãå©çšããŠããèšèªåã³ãã¬ãŒã ã¯ãŒã¯ã¯CakePHPã§ãã2ç³»ãå©çšããŠããEOLãè¿ããŠããã ãã§ãªãéçºçç£æ§ãªã©ãæ°äžä»£é
ããŠãããšããããšãåŠå®åºæ¥ãŸããã(CakePHP2ãšãããã¬ãŒã ã¯ãŒã¯èªäœãæªãã£ããšãã話ã§ã¯ãããŸãã) ããããåŸã
ã«å¥ã®ãã¬ãŒã ã¯ãŒã¯ãèšèªã®ã·ã¹ãã ã«å€æŽããŠãããšããã®ãäž»ãªããã·ã§ã³ã§ãã ãã®äžã§ã¢ããªã¹ãããã€ã¯ããµãŒãã¹ãšãã圢ã«ããŠãããšããéžæè¢ãããã§ããããå人çã«ã¯RDBMSã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æ©æµãæšãŠãéžæè¢ãåãããšã«ææã¯ãããŸããã BASEã·ã¹ãã ã®ã³ãŒãéã¯éåžžã«å€ãããŒã¿ã®ãã¿ãŒã³ãå€å²ã«æž¡ããããã³ãŒãã®æŽå²ã®è§£èªã調æ»ãä¿®æ£ã«ãã¹ããªã©æè¡çè§£ã ãã§ãªãå¹
åºãã¹ãã«ãå¿
èŠã«ãªããšæããŸãã 䜿ã£ãŠããã ããŠãããŠãŒã¶ãŒããã®äžäŸ¿ãèµ·ãããªããããå®å
šã«ã·ã¹ãã ããã€ã°ã¬ãŒã·ã§ã³ããŠãããšããä»äºã¯èåã®ããããã·ã§ã³ã ãšã¯æããŸããæããã¯ãšããæ¹ã¯æ¯éãåŸ
ã¡ããŠããŸãã open.talentio.com ã»ãã¥ãªã㣠BASEã§ã¯å€ãã®ãŠãŒã¶ãŒæ§ã®ããŒã¿ããé ããããŠããã瀟å
ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã匷åããŠããããšã¯éèŠã§ãã ä»ãŸã§å°ä»»ã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã¯æ¡çšããŠããããå
ã
ã»ãã¥ãªãã£ã«äžå®ã®é è©£ãããã¡ã³ããŒã«ãã£ãŠè匱æ§èšºæã®å¯Ÿå¿çãè¡ã£ãŠãããŸããã ãããããã§ã¯çµç¹ãšããŠéåžžã«åŒ±ããããèžã¿èŸŒãã ã»ãã¥ãªãã£å¯Ÿçãè¡ããªãç¶æ
ã§ã¯ãããŸããã®ã§ä»ååéããããŠé ããŠãããŸãã ç¹ã«ã¢ããªã±ãŒã·ã§ã³åŽã®ã»ãã¥ãªãã£ãšã³ãžãã¢ã«é¢ããŠã¯ãå
éšçµ±å¶ãåçš®èªèšŒååŸãªã©ã®æŽåãªã©ãšã¯å¥ã®ããŒã ãšããŠåããŠããã ããŸãã BASEã§å©çšããŠããAWSã®ã»ãã¥ãªãã£è£œåã®é©çšã«ããã»ãã¥ãªãã£åäžãè匱æ§èšºæã®çµæããªã¢ãŒãžãäžæ£ãªã¯ãšã¹ãã®æ€ç¥å¯Ÿå¿ãªã©æ§ã
ãããŸãã è匱æ§èšºæã®çµæããªã¢ãŒãžã¯ãå Žåã«ãã£ãŠã¯ä¿®æ£ãããããã€ãŸã§è¡ã£ãŠããã ãäºå®ã§ããPHPã§ããå¿
èŠã¯ãããŸããããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®éçºçµéšãèŠæ±ããŠããŸãã 倧éã®ãªã¯ãšã¹ããå€ãã®çš®é¡ã®ãŠãŒã¶ãŒãããé£ã³äº€ãã¢ããªã±ãŒã·ã§ã³äžã§èµ·ãããããããã®ã»ãã¥ãªãã£ãªã¹ã¯ãäœæžããå®å¿ããŠäœ¿ã£ãŠããã ããç°å¢ãäœãããŒã ãšããŠç«ã¡äžããŠããããæ¹ããåŸ
ã¡ããŠããŸãã open.talentio.com DXæ¹å Digital Transformationã§ã¯ãªããDeveloper Experienceã§ãã éçºè
äœéšãæªãç¶æ
ã§ã®éçºã¯é²ããããŸãããè€å©çã«å¹ããŠããŸãã ãããæ¹åããããã«ããããã€é床ã®åäžãããŒã«ã«åã³éçºç°å¢ã®æŽåãCI/CDãã€ãã©ã€ã³ã®å¹çåãªã©ããããšã¯éåžžã«å€ããããŸãã å
æ¥ã®ã€ãã³ãã§è»œã話ããŸããããã®ãããã¯åžžæã¿ã¹ã¯ããããšããããã§ã¯ãªãå°å±ãšã³ãžãã¢ãä»ãã¥ããCTOè·ãªã©ãããããšãå€ããªã£ãŠããŸãã®ãçŸå®ã ã£ããããŸãã éçºè
ã®çŸç¶ã«å¯ãæ·»ããªããããããéçºè
äœéšãäœã£ãŠããããæ¹ãåéããŠããŸãã EMã®è²æãæ°èŠã¡ã³ããŒã®ãªã³ããŒãã£ã³ã°åŒ·å çµç¹ã倧ãããªããšå¿
ãéåžžã«éèŠã«ãªã£ãŠããã®ããããŒãžã£ãŒã®ååšã§ãã æ®æ®µã®ã¿ã¹ã¯ç®¡çãªã©ã¯ãããŸã§åé¡ãšãªããŸããããã¡ã³ããŒã®æé·ãèããªããããŒã ãšããŠã®ææãæå€§åãèããå¿
èŠããããŸãã æ¥ããããªããCTOã®èªåã¯ãã®ãããã®ç¥èŠãèãåŸæã§ããªãã®ã§ãEMãè²æãšãã芳ç¹ã§äœãæå¹ã«ãªã£ãŠããããããŸãããã£ãŠããŸããã å€§èŠæš¡çµç¹ã§ã®ãããžã¡ã³ãçµéšãè²æãè¡ã£ãŠããæ¹ã¯æ¯éBASEã«æ¥ãŠãã®ç¥èŠã掻ãããŠæ¬²ãããšæããŸãã åãããŠãç¶ã
ãšå
¥ã£ãŠããæ°ã¡ã³ããŒã«å€§èŠæš¡ã«ãªã£ãŠããBASEã·ã¹ãã ã®ãªã³ããŒãã£ã³ã°äœéšãåäžãããŠãããšãã£ãããšãäžç·ã«èããŠããã ããã°ãšæããŸãã ã©ãã ãåªç§ãªãšã³ãžãã¢ã§ãå
¥ç€ŸããŠããã®ææãæå€§åããŠãããããã«ãªã³ããŒãã£ã³ã°ã¯å¿
é ã§ããã課é¡ã¯å€§ãããªã£ãŠããã®ã§ãã²ãšãåãçµã¿ããç®æã§ãã ãŸã äºå®ã¯ãããŸãããæ°åæ¡çšãèŠæ®ããŠãã£ãŠããããã§ããã ããã©ãŒãã³ã¹æ¹å å€ãã®ã·ã§ããæ§ã䜿ã£ãŠãããçŸç¶ã«ãããŠããã©ãŒãã³ã¹æ¹åã¯æ¥ã
ã®ã¿ã¹ã¯ãšããŠåãçµãŸãªããšãããªã課é¡ã§ãã ããŒã¿éãå€ããªã£ãã·ã§ããæ§ã®ç®¡çç»é¢ããã©ãŒãã³ã¹ãã·ã§ããããŒãžã®ã¬ã³ããªã³ã°é«éåãªã©æ¹åãã¹ãããŒãžã¯ãããããããŸãã çŸä»£çãªCDNæè¡ãªã©ãå©çšãé«éåãå³ã£ãŠãããããšæã£ãŠããŸãã New Relicãç©æ¥µçã«æŽ»çšããŠããã®ã§ç£èŠãè¶
ããŠå¯èŠ³æž¬æ§ãé«ããŠããé«éãªãããã·ã§ããäœæãµãŒãã¹ã«ããŠããããã§ãã®ã§ãæ¯éããã©ãŒãã³ã¹ãžã£ã³ããŒã®æ¹ãåéããŠããŸãã æè¿ã§ã¯ãã®ãããªã¢ãŠããããããããŸãã devblog.thebase.in ãããã« ãããã®åãçµã¿ã ãã§ãªããäºæ¥ã®èª²é¡ã«ã€ããŠã®ãµãŒãã¹éçºãPay IDéçºããããªãUXã®åäžãã¢ã¯ã»ã·ããªãã£ãããŒã¿åºç€æŽåãæ©æ¢°åŠç¿ã«ããäžæ£æ±ºæžå¯Ÿçãã¬ã³ã¡ã³ãéçºãªã©ãªã©ãããããããŸãããšããããŸã ãŸã ããïŒã¡ãã£ã¯ãã£ããïŒå©ããŠãã ããïŒ æ¯éèå³ããæ¹ã¯äžèšããå¿åããŠé ããããåã®Twitterã«DMãMeetyãªã©ã©ããªææ®µã§ãããã®ã§ãé£çµ¡ãã ããã ã§ã¯ãçæ§è¯ãã幎ãïŒïŒïŒ open.talentio.com meety.net
ãã®èšäºã¯BASE Advent Calendar 24æ¥ç®ã®èšäºã§ãã BASEããã¯ããã°ç·šéé·ã®æŸå( @simezi9 )ã§ãã 12æããããã倧詰ããã¯ãªã¹ãã¹ã»ã€ããšããããšã§ãããã幎å
ã®ä»äºãçŽããããæ¹ãããã®ã§ã¯ãªãã§ããããã BASEã®ã¢ããã³ãã«ã¬ã³ããŒãä»å¹Žã§ 4åç® ãšãªããŸããã ä»å¹Žãå
šéšã§32æ¬ïŒäžæ¥ã§è€æ°èšäºã®æ¥ãäœã£ãããïŒã®èšäºã12/1~12/25ã®æéã§æçš¿ããŠããŸããã æ¬èšäºã§ã¯ããã°ç·šéé·ãšããŠã¢ããã³ãã«ã¬ã³ããŒéå¶ã«éããŠè¡ã£ãããšãšããã®æ¯ãè¿ããããããšæããŸãã ããã¯æ¥å¹ŽãŸãBASEã®ã¢ããã³ãã«ã¬ã³ããŒãç¡äºã«éå¬ãããããšã ãããã¯äžã®äžã®ã ãããã¢ããã³ãã«ã¬ã³ããŒãéå¶ããéã«ãªã«ã1ã€ã§ãåèã«ãªãããšãããã°ãšæã£ãŠæžãæ®ãåå¿é²ã§ããããŸãã ã¿ã€ã ã©ã€ã³ ç·šééšãšããŠã®ã¢ããã³ãã«ã¬ã³ããŒã®æºåã®ããã®æµãã¯ä»¥äžã®ããã«ãªããŸãã æ¥æ ã€ãã³ã 11/4 ã¢ããã³ãã«ã¬ã³ããŒã®ã¬ã®ã¥ã¬ãŒã·ã§ã³ã瀟å
ã«å
¬é & å·çè
ã®åéãéå§ 11/18 ã«ã¬ã³ããŒã®æ¥çšãåãŸã 11/25 ã¢ããã³ãã«ã¬ã³ããŒã®åèšäºã«äœ¿ãã¢ã€ãã£ããç»åã®ãã³ãã¬çšæå®äº 11/30 åç¥ããŒãž å
¬é 12/1 èšäºå
¬ééå§ ã¬ã®ã¥ã¬ãŒã·ã§ã³ã«ã€ã㊠ãŸã11æé ã«ã¢ããã³ãã«ã¬ã³ããŒã®è¶£æšãšåå æ¹æ³ãæžããããã¥ã¡ã³ãã瀟å
ãã¬ããžããŒã¹ã«ãã¹ãããŸããã ãã®ã¿ã€ãã³ã°ã§å
¬éããã®ã¯äž»ã« èšäºã®å
容ãšå
¬éææ®µã«ã€ã㊠èšäºäœæããå®éã®å
¬éã«è³ããŸã§ã®ãã㌠åå æ¥ã衚æã§ããã«ã¬ã³ã㌠ã®3ã€ã§ããããããããæãäžããŠã¿ãŸãã 1. èšäºã®å
容ã«ã€ã㊠èšäºã®å
容ã¯BASEãéçºã«é¢ä¿ãããããšã§ããã°äœã§ãå¯ããšãããã¯ããã°ã«ã¯æè¡èšäºã®ã¿æ²èŒå¯èœãšããèšäºã®å
容次第ã§ã¯ note ãå人ããã°ã䜿ã£ãŠã倧äžå€«ãšããããšãæç¢ºã«ããŸããã åœããåã®å
å®¹ã«æãããããããŸããããããã«ã€ããŠã¯éå»ã®çµç·¯ããããŸãã éå»BASEã®ã¢ããã³ãã«ã¬ã³ããŒã§ã¯ããŒããããªãŒã«ãããšãããçé¢ç®ãªãã®ããããããã®ãŸã§å¹
åºãããŒãã®èšäºãéãŸã£ãããšããããŸããã ãšãŠãã«ãããã§ã¯ãã£ãã®ã§ããããããã®èšäºããã¹ãŠãã®ããã¯ããã°ã§å
¬éããããšã§ããã°ã®èšäºã®è»žãã¶ããŠããŸãçµæã«ãªã£ãŠããŸã£ãããšããããŸãã ããã¯æ¢åã®ããã°èªè
ã®æ¹ã«ãšã£ãŠãããŸã奜ãŸãããªãç¶æ
ã§ããããšèããæšå¹Žã¯ããã¯ããã°ã§ã®å
¬éã«ãµããããæè¡èšäºã®ã¿ã§æ§æããã¢ããã³ãã«ã¬ã³ããŒãšããŸããã ããããªããã瀟å
ã®é°å²æ°ããäŒããããšããæå³ã§å€æ§ãªèšäºãã¢ããã³ãã«ã¬ã³ããŒã«æ²èŒãããããšã¯åºæ¬çã«è¯ãããšã§ãããšç§èªèº«ã¯èããŠããŸããã éå»ã«çºçããåé¡ã¯çµå±ã®ãšãããå
¬éå Žæã«ãµãããããªãèšäºãã¢ããã³ãã«ã¬ã³ããŒã ããæ²èŒãããšããããšã§èµ·ããŠããã ããªã®ã§ã note ãå人ããã°ã§ã¢ããã³ãã«ã¬ã³ããŒå
¬éãå¯èœã§ãããšããããšãæåããæèšããã°ãããšæããããçã蟌ãããšã§ãæè¡èšäºã§ãªããŠããããšããã®ãä»å¹Žæ¹ããŠæ±ºå®ã§ããããšããæµãã§ãã ïŒäœè«ã§ãã BASEã¯noteæ ªåŒäŒç€Ÿãšè³æ¬æ¥åææº ãçµãã§ããŸãã) æ®å¿µãªããä»å¹Žã¯noteã§ã®èšäºå
¬éã¯ãªãã£ããšãããªããã€ããŠããŸã£ãã®ã§ããããšããããå
¬éããèšäºã®æ¹åæŽçãã§ãããšããç¹ã§æ¥å¹Žä»¥éã«æåŸ
ããããšæã£ãŠããŸãã 2. èšäºäœæããå
¬éã«è³ããŸã§ã®ãã㌠ã¢ããã³ãã«ã¬ã³ããŒæéã¯éåžžã®ç¶æ³ãé¥ãã«è¶
ããèšäºã®ã¬ãã¥ãŒäŸé Œãæ¥ãããå
Œåã§è¡ã£ãŠããããã°ç·šééšã®è² è·ããžããå¿
èŠããããŸãã ããã§èšäºã®å
¬éãŸã§ã«å¿
èŠãªä»¥äžã®æé ãå
¬éãããã¥ã¡ã³ããšããŸããã äžæžããæžãå Žæãšã¬ãã¥ãŒäŸé Œã®åºãæ¹ ã¬ãã¥ãŒã«ã€ããŠã¯å®äºãŸã§ã®æéã®ç®å®ãåæã«æžã ã¢ã€ãã£ããç»åã®äœãæ¹ ããã«ã€ããŠã¯ãã¶ã€ããŒã® @nomjic ã誰ã§ãã³ããŒããŠããã¹ããç·šéããã ãã§ã¢ã€ãã£ãããäœããã¹ããFigmaãçšæããŠãããŸãã ããã¯ããã°ã«æçš¿ããå Žåã®æé ããã«ãã£ãŠäžåºŠã¢ããã³ãã«ã¬ã³ããŒãå§ãŸã£ãŠããŸãã°ç·šééšå¡ã®è² è·ã¯ã»ãŒã»ãŒèšäºã®ã¬ãã¥ãŒã ããšãªããŸããã 3. åå 衚æã®ããã®ã«ã¬ã³ã㌠ããã°ç·šééšãšããŠã«ã¬ã³ããŒããŒãžãå
¬éããã¿ã€ãã³ã°ã§æããŠããã®ã¯ä»¥äžã®2ç¹ã§ãã 空çœã ããã®ã«ã¬ã³ã㌠TBDããºã©ããšãªãã¶ã«ã¬ã³ã㌠ããããé¿ããããã«11æé ããç©æ¥µçã«åããŠããŸããã ãŸã空çœã ããã®ã«ã¬ã³ããŒãé¿ããããã«å·çè
ã®ç¢ºä¿ã«èµ°ããŸããã ã¢ããã³ãã«ã¬ã³ããŒã¯äžã«ãããããããããŒã次第ã§ã¯ç©ºåžãå¢ããŠããŸãããšããããŸãããäŒæ¥ã®ã¢ããã³ãã«ã¬ã³ããŒã§ãã®ãããªç¶æ
ã§å
¬éãããããšã¯ããŸãå°è±¡ãè¯ããªããšèããŠããŸããã é廿°å¹Žã®çµéšããèšäºãäžè¶³ããããšã¯ãŸããªããšåãã£ãŠãããã®ã®ãåãããŒãžã£ãŒé£ã«ãé¡ãããŠã¡ã³ããŒãžã®åããããããŠã¿ããslackã®#generalã§å®£äŒãããŠã¿ãããšå
æãæã£ãŠåããŠãããŸããã ããã§èããŠãããªããšãããªãããšã¯æ¥çšãã¶ãã®åé¡ã§ãã ã¢ããã³ãã«ã¬ã³ããŒã¯äžäºº1æ¥1èšäºãæåãšãªã£ãŠããŠãã«ã¬ã³ããŒãåãŸã£ãã2åç®ã®ã«ã¬ã³ããŒãäœããšããã¹ã¿ã€ã«ã§éå¶ãããããšãå€ãã§ãã å®éã«BASEã§ã2019ãªã©ã¯1æ¥2èšäºã§2åã®ã«ã¬ã³ããŒãèµ°ããŸããã ãã®ã¹ã¿ã€ã«ã¯éå¶ã倧å€ãªãšãããå€ãã1åç®ã®ã«ã¬ã³ããŒã¯åãŸã£ãŠãããã©2åç®ã®ã«ã¬ã³ããŒãã¹ã«ã¹ã«ãšããããšãèµ·ãããããè² è·ãé«ãã§ãã ããèããŠãããšãããããã«ã¬ã³ããŒåãããäžæ¥1èšäºãšããçžãããããããŠã äžæ¥nèšäºã§ããããã ãšããåçŽãªããšãæãã€ããŸãã ãã é©åœã«å¥œããªæ¥ã§ããšãããšååã空ã£ãœã«ãªã£ãŠåŸåã«éäžãããããšããå¯èœæ§ããã£ãã®ã§ã ã1æ¥ããããŸã2人ãŸã§ã¯å
çé ã§åå 衚æã§ãããå
šäœçã«åãŸã£ãŠããã2人ã®å¶çŽãç·©åããã ãšããã¹ã¿ã€ã«ã«ããŸããã ããã§ããçšåºŠã«ã¬ã³ããŒå
šäœã«èšäºãæ£ããããšãå¯èœã«ãã€ã€ãæ¥çšããã¶ã£ãŠãåé¡ã«ãªããªãã¹ã±ãŒã©ããªãã£ã確ä¿ããŸããã ãŸããåå 衚æãããŠããã£ãã¿ã€ãã³ã°ã§èšäºã§æ±ãäºå®ã®ãããã¯ãããŒãã ãã¯å¿
ã衚æããŠãããïŒå€æŽå¯ïŒãTBD/æªå®ã§åãŸãããšãé²ããŸãããTBDãã«ã¬ã³ããŒã«äžŠã¶ãšã©ãããŠãè¡ãåœããã°ã£ãããªæããåºãŠããŸããŸãããã©ãããé°å²æ°ã®ã¢ããã³ãã«ã¬ã³ããŒãéå¬ãããããäŒãããªããããèå³ãæã£ãŠãããããšãã§ããªãã ãããšèããããã§ãã æ¯ãè¿ã ãããŸã§ã¯å®éã«ã¢ããã³ãã«ã¬ã³ããŒãéå¶ããäžã§è¡ã£ãŠããããšãæžããŸããã ããããã¯ããã¯ããã°ç·šéé·ã®æããæžããŠã¿ãããšæããŸãã ã¢ããã³ãã«ã¬ã³ããŒã®æçŸ© æè¡åºå ±ã«ç©æ¥µçãªäŒæ¥ã«ãšã£ãŠèªç€Ÿã®ã¢ããã³ãã«ã¬ã³ããŒãéå¬ããããšã¯ãã¯ãåœããåã®ããã«ãªã£ãŠããŸãã ãã å¿ããŠã¯ãããªãããšããããŸãããã㯠ãã¢ããã³ãã«ã¬ã³ããŒæéã¯å€§éã®ããã¯èšäºãå
¬éãããã¬ãããªãŒã·ã£ã³ã§ããã ãšããããšã§ãã ãã¡ããèªè
åŽã®ã¢ã³ãããé«ããªãé¢ããããŸãããã ããããé¥ãã«äžåãéã§èšäºã®äŸçµŠéãå¢ããæéã§ãã èªè
ãæè¡èšäºã«å²ãæéã®ç·éã¯ãããŸã§å¢ãããããŸããããã®æéãäžã®æ§ã
ãªèšäºãšåãåãããšã«ãªããŸãã çŽç²ã«èªç€Ÿã®æè¡ãäžã«åºããŠèªç€Ÿã®é
åãã¢ããŒã«ããã®ã§ããã°ãåžžæ¥é ããã®å®æçãªã¢ãŠããããããŸã確ç«ãã¹ãã§ãã¢ããã³ãã«ã¬ã³ããŒã®æ¿ããç«¶äºã§çãå°œããŠããŸãã®ã¯å¿äœãªããšæã£ãŠããŸãã ãŸãã¯èªç€Ÿãã宿çã«èšäºãåºãããããªéå¶ãè¡ããããã«ãªã£ãŠããã¢ããã³ãã«ã¬ã³ããŒã§ãç¥ãã«åå ãããšããæµãã®ã»ããããã®ã§ã¯ãªãããšããæ°ãããŠããŸãã ãã éã«ãã¬ãããªãŒã·ã£ã³ãšããã®ãå©çšããŠå¢ãã§æ®æ®µã¢ãŠãããããåºãããšã«äžå®ãæãããããªã¡ã³ããŒã®èäžãæŒããŠèšäºãæžããŠã¿ãŠãããçµ¶å¥œã®æ©äŒã§ãããšãèšãããããããŸããã 察å€çãªã¢ããŒã«ãšããŠã¢ããã³ãã«ã¬ã³ããŒã䜿ãã®ã§ã¯ãªããã¡ã³ããŒã«èšäºãæžãçµéšå€ãç©ãæ©äŒã®äŸ¡å€ã匷調ããããšã§ååããŠãããããšããèãã§éå¶ããã»ããåŸããã®ãå€ãããšãããã®ãããããŸããã èšäºã®ã¬ãã¥ãŒã«ã€ã㊠å°ãã¢ããã³ãã«ã¬ã³ããŒã®æ¯ãè¿ããšã¯è©±ããããã®ã§ãããèšäºã®ã¬ãã¥ãŒã«ã€ããŠèããŠãããšãæžããŸãã èšäºã®ã¬ãã¥ãŒã¯æ°ã䜿ãäœæ¥ã§ããæã
èªèº«ãå¥ã«åºçæ¥çã§ç·šéè
ããã£ãŠããããã§ããªãæç« ã®çŽ äººã§ãã ãã ããäŒæ¥ã®ããã¯ããã°ãéå¶ããäžã§ç¡è²¬ä»»ãªããšã¯ã§ããŸãããèšäºã®ã¬ãã¥ãŒã¯å¿
èŠã§ãããã®ãªãã§ãã£ãŒãããã¯ãè¡ãããšã¯å°ãªãããç²ããäœæ¥ã§ãã ãã èªåã¯åºæ¬çã«ããŸãå€ããFBããªãããã«ããŠããŸãã芳ç¹ãšããŠã¯ ããªã³ã¬ãå«çã«åããå
容ã¯ãªãã æ¥åäžå
¬éã§ããªãå
容ã¯ãªãã èšäºãšããŠèªã¿ããããªãããã«ã§ããæ§é çãªå·¥å€«ã¯ãªãã ã§ããæåã®2ã€ã¯èšãããããªã§å¿
ããã§ãã¯ããéšåã§ããããã¯æ¯èŒçæçã«å€æã§ããéšåã§ãã ããã«å¯ŸããŠãæåŸã®æç« ã®å·¥å€«ã«ã€ããŠã¯æèŠçãªé åãå€ãéåžžã«é£ãããªããŸãã èªåã¯åºæ¬çã«ãæç« ã®é çªãå
¥ãæ¿ããããå³ã远å ããããåŸãããææããããããããã衚çŸã远å ãããã®3ã€ã®FBãããŸãã ããæç« ãšã¯åŒãç®ã«ãã£ãŠç£ãŸãããšããèšãããŸãããæç« ãåãèœãšããŠåŒãç· ããŠçŽ æŽããããã®ã«ä»äžãããšããã®ã¯æçã®çŽ äººã«ã¯è·ãéãããšã§ããäººã®æç« ã«å¯ŸããŠããäœããè¶³ããã»ããè¯ãããšã¯èšããããã§ããããã®æç« ã¯ãããªããããã®è¡šçŸã¯æ£ãããªãããšãããããªããšã¯èšãã¥ããããã§ãã å
šç¶é¢ä¿ã®ãªãå人çãªäœè«ãªã®ã§ããããã®èšäºã®ã¬ãã¥ãŒãšããè¡çºããããšãã«ããæãåºãããšããããŸãã ããã¯ããªã³ãšããã©ãããŒã®ãããããšããåç¡ãã®2ãã£ã³ãã©ãŒè«žåããšããæ²ã®ããšã§ãã ãã®æ²èªäœã¯ããªã³ãåœæã®2ã¡ããããã«ãã£ãèªåã®ã¹ã¬ããã«å¯ŸããŠãå
šã¬ã¹ããè¿ã圢ã§ã©ãããããšããæªäœã§ããïŒããã14å匱ããïŒ ããªãã¯ã»ã®åŒ·ãæ²ã§ç§èªèº«ã¯å¥œãã§ãä»äººã«ããããããã¿ã€ãã®æ²ã§ã¯ãªãã®ã§ããããã®æ²ã®æçµç€ã«ç»å Žãã èªåã®äžçãããããã®ã¯èªåã ãã§ããã¹ãã ãèµ€ãã³ã§èšæ£ãããŠè¯ãæ°åãããªãã®ã¯ã¿ãªåãã ãã ãšããäžç¯ãããèŠããŠããŸãã ã€ãŸãäœãèšãããã®ããšãããšãããã°ã®èšäºãšãããã®ãå人ã®å
åŽããçãŸããèªå·±è¡šçŸã§ããããããæå€§éå°éããããšãçŽ äººç·šéãšããŠãã£ãšãéèŠããã¹ãããšãªã®ã§ã¯ãªããããšããããšã§ãã 现ãã衚çŸãžã®éåæã®è¡šæãªã©ã¯ããããšæãã°ãã£ãšãããã§ããããŸãããããã¯ããããããã¯ããã°ã«æ±ããããããšã§ããªããã°èšäºãæžããŠãããã¡ã³ããŒã®æ±ããŠããéšåã§ããªãã®ã§ã¯ãªãããããèããŠæ
å ±ã®æ§é ã«å¯ŸããŠãªã«ãå ããããããšã¯ãªãããããã ããèããŠã¬ãã¥ãŒãããããã«ããŠããŸãã æåŸã« æåŸã¯å°ããšããšãããªããªã£ãŠããŸããŸããããæåŸã«ãã®èšäºãèªãã§æ¥å¹Žã®ã¢ããã³ãã«ã¬ã³ããŒã«åœ¹ç«ãŠãŠããã ããæ¹ãäžäººã§ãå±
ãã°å¹žãã ãšæã£ãŠããŸãã ææ¥ã®æçµæ¥ã¯åŒç€ŸãèªãCTOã® @dmnlk ãçŽ æŽãããäœåãããããããŠãããäºå®ã§ããä¹ããæåŸ
ãã ãã ä»å¹Žãå·çã«ååããŠããã ããŠçŽ æŽãããèšäºãæäŸããŠãããåŒç€Ÿã®çæ§ã«ãã®å ŽãåããŠã瀌ãèšãããŠããã ããã°ãšæããŸãã(ãã®èšäºã§åãããªããšããããªããã¬ãã¥ãŒäŸé ŒãèŠèœãšããŠããããšå€§å€ãè¿·æãããããŸãã)