
- TOP
- ã¿ã°äžèЧ
- JavaScript
JavaScript
ã€ãã³ã

ãã¬ãžã³
æè¡ããã°
ããã³ããšã³ãã®äŸåã©ã€ãã©ãªã®è匱æ§å¯Ÿçã« OSV-Scanner ãå°å
¥ããŠã¿ã
ã¯ããã« ããã«ã¡ã¯ãã¯ã©ãŠããšãŒã¹ã®ç¬¬äžéçºéšã«æå±ããŠããéåã§ãã æšä»ãããã³ããšã³ãéçºã§ã¯äŸåã©ã€ãã©ãªã®è匱æ§å¯ŸçãéèŠã«ãªã£ãŠããŸãã ããã§ãæ
åœããŠãããããžã§ã¯ãã®äŸåã©ã€ãã©ãªã®è匱æ§å¯Ÿçãšã㊠OSV-Scanner ãå°å
¥ããŸããã ãã®èšäºã§ã¯ãOSV-Scanner ãéžãã çç±ãšãå®éã«ãããžã§ã¯ãã«å°å
¥ã»éçšããæé ã玹ä»ããŸãã 察象èªè
ããã³ããšã³ãã®äŸåã©ã€ãã©ãªã®è匱æ§å¯Ÿçã«é¢å¿ãããæ¹ GitHub Actions ã§ã»ãã¥ãªãã£ã¹ãã£ã³ãå®è£
ãããæ¹ OSV-Scanner ã®å°å
¥ãéçšæ¹æ³ãç¥ãããæ¹ ãªãä»ã察çãå¿
èŠ
ã¯ããã« æ ªåŒäŒç€Ÿ MIXI ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ã軞ã«ããœãŒã·ã£ã«ãããã¯ãŒãã³ã°ãµãŒãã¹ããã²ãŒã ãã¹ããŒããã©ã€ãã¹ã¿ã€ã«ãµãŒãã¹ãžãšäºæ¥ãå€è§åããŠããæ¥æ¬ã®äŒæ¥ã§ãããã¢ã³ã¹ã¿ãŒã¹ãã©ã€ã¯ãããå®¶æã¢ã«ãã ã¿ãŠãããšãã£ããµãŒãã¹ã«å ããFCæ±äº¬ãã¯ãããšããããã¹ããŒãããŒã ã®éå¶ãéããŠã人ãšäººãšã®è±ããªã³ãã¥ãã±ãŒã·ã§ã³ã®å ŽãæäŸããŠããŸãã æ¬èšäºã§ã¯ãMIXI ã FCæ±äº¬åãã«éçºãããåçéžå®æ¥åå¹çåã·ã¹ãã ãã®ããã¯ãšã³ãããŒã¿ããŒã¹ãšããŠãAmazon Aurora DSQL æ¡çšã®çµç·¯ãšæè¡çãªå·¥å€«ãåŸããã广ããã客æ§ã®å£°ã亀ããŠç޹ä»ããŸãã â»æ¬ç»åã¯ãFCæ±äº¬æ§ãš MIXI æ§ã®èš±è«ŸãåŸãŠæ²èŒããŠããŸã 解決ãããã£ãèª²é¡ FCæ±äº¬ã§ã¯ã詊åããšã«å
¬åŒã«ã¡ã©ãã³ãæ®åœ±ããçŽ 1 äžæã®åçãã詊ååœæ¥ã« Web å
¬éãããããã¬ããŒããšãã£ãããŒã±ãã£ã³ã°ã»åºå ±çšéã«æŽ»çšããŠããŸãããããŸã§ã¯æ
åœè
ãåçãç®èŠã§ 1 æãã€ç¢ºèªããªããéžå®ããéçšãè¡ã£ãŠãããéžå®ã«æéããããããšã§ã¿ã€ã ãªãŒã«åççŽ æã掻çšã§ããªãããšã課é¡ã§ãããããã§ãç»åèªèã¢ãã«ãšçæ AI ãçµã¿åãããŠèªåçã«åçãåæã»éžå®ããWeb UI ããåè£ãçŽ æ©ããã¬ãã¥ãŒã§ããã·ã¹ãã ãæ°èŠã«æ§ç¯ããããšã«ããŸããã ãã ãããã®éçºã»éçšãæ
ãã®ã¯å°äººæ°ã®ããŒã ã§ãããããŒã¿ããŒã¹ã®ç®¡çã«äººæããããããªããšããäºæ
ããããŸãããå ããŠã詊åã¯åºæ¬çã«é± 1ã2 åãäž»ã«åæ¥ã«éå¬ããããã®ãã³ã«åçã®åã蟌ã¿ã»åæã»éžå®ãçæéã«éäžããäžæ¹ã詊åãšè©Šåã®éã«ã¯ãããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãçºçããªãæé垯ãçããŸãããããã皌åã«æ³¢ã®ããã¯ãŒã¯ããŒãã§ã¯ãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããªãæé垯ã®ã³ã¹ããæããæé©åãå¿
èŠã§ããã ãªã Aurora DSQL ãéžãã ã®ã ãããã®åæãèžãŸããããŒã¿ããŒã¹ã«æ±ããã®ã¯ãå°äººæ°ã§ç¡çãªãéçšã§ãã皌åã®æ³¢ã«ãç¡é§ãªã察å¿ã§ããéçšç¹æ§ã§ãããæ±ºãæã¯æ¬¡ã®ç¹ã§ãã ã¡ã³ããã³ã¹ã»ããŒãžã§ã³ç®¡çãäžèŠ ïŒãšã³ãžã³ã®ããŒãžã§ã³ã¢ãããã¡ã³ããã³ã¹ãŠã£ã³ããŠãæèããå¿
èŠããªããå°ä»» DBA ã眮ããã«å°äººæ°ã®ããŒã ã§éçšã§ãã 䜿ã£ãåã ãã®èª²é ïŒ ããªã¯ãšã¹ãããŒã¹ã®ã䜿çšéäž»å°åã®äŸ¡æ Œã¢ãã«ã ãæ¡çšããŠãããããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãçºçããªãæé垯ã¯åŠçã«å¯Ÿãã課éãçºçããªããããåºå®ã€ã³ã¹ã¿ã³ã¹ïŒåžžæçšŒåïŒã®æ§æãšæ¯ã¹ãŠå©çšã«æ³¢ã®ããæ¬ã¯ãŒã¯ããŒãã§ãç¡é§ãªã³ã¹ããæãããã éåžžã® RDB ãšããŠå©çšã§ãã ïŒäœ¿ãæ
£ãã SQL ã§ããŒã¿ãæ±ããPostgreSQL ã®ãã©ã€ããŒã»ORMã»ããŒã«ã掻ãããïŒåŸè¿°ã®ãšããäžéšã®å¯Ÿå¿ã宿œïŒ ã¢ãŒããã¯ãã£æŠèŠ ã·ã¹ãã å
šäœã®ã¢ãŒããã¯ãã£ã¯ä»¥äžã®éãã§ãã æè¡çã«å·¥å€«ããç¹ æ¬ã·ã¹ãã ã§ã¯ãJavaScript / TypeScript ã® ORM ã§ãã DrizzleïŒ https://orm.drizzle.team/ ïŒãæ¡çšããŠããŸããAurora DSQL ã PostgreSQL äºæã§ããããšã掻ãã㊠Drizzle ãããŒã¹ã«å®è£
ãé²ããŸããããã ããäžéšã® PostgreSQL æ©èœãšã®éäºæ ã ãã©ã³ã¶ã¯ã·ã§ã³ãµã€ãºãªã©ã®å¶é ããããæ¬¡ã®ãããªå¯Ÿå¿ãè¡ã£ãŠããŸãããªããæ¬èšäºã§è§Šãã Aurora DSQL ã®å¶çŽã»ä»æ§ã¯å·çæç¹ã®ãã®ã§ããAurora DSQL ã¯ç¶ç¶çã«æ©èœè¿œå ã»æ¹åãè¡ãããŠãããããææ°ã®æ
å ±ã¯å
¬åŒããã¥ã¡ã³ããã確èªãã ããã 1. ORM ã® Drizzle ãåºåãã DDL ã Aurora DSQL äºæåœ¢åŒã«å€æããã¹ã¯ãªãããå
補 Drizzle ãçæããã¹ããŒãå€æŽ DDL ã¯éåžžã® PostgreSQL ãæ³å®ããŠãããAurora DSQL ã®å¶çŽã»ä»æ§ã«åããªãç®æããããŸããAWS 㯠Aurora DSQL åãã«ã äžéšã® ORM ãã¬ãŒã ã¯ãŒã¯çšã®ã¢ããã¿ãŒïŒãã€ã¢ã¬ã¯ãããåçš®ããŒã¿ããŒã¹ãã©ã€ããŒçšã®ã³ãã¯ã¿ãŒ ãå
¬éããŠããŸãããæ¬ã·ã¹ãã ã§æ¡çšããŠãã Drizzle åãã®ã¢ããã¿ãŒã¯å·çæç¹ã§ã¯æäŸãããŠããŸããã§ãããããã§ãDrizzle ãåºåãã DDL ã Aurora DSQL ã®å¶çŽã»ä»æ§ã«åãããŠå€æããã¹ã¯ãªãããå
補ããŸãããäž»ãªåŠçã¯æ¬¡ã®éãã§ãã ã€ã³ããã¯ã¹äœæ ïŒAurora DSQL ã§ã¯åäœã® CREATE INDEX æã«éåææå®ïŒCREATE INDEX ASYNCïŒãå¿
é ã®ãããDrizzle ãåºåãã CREATE INDEX ã CREATE INDEX ASYNC ã«å€æããåŠç å€éšããŒå¶çŽ ïŒAurora DSQL ã¯å€éšããŒå¶çŽããµããŒãããŠããªããããDrizzle ãçæããå€éšããŒå¶çŽã® ALTER TABLEïŒADD FOREIGN KEYïŒãåé€ããåŠç ãã©ã³ã¶ã¯ã·ã§ã³ã®åå² ïŒAurora DSQL 㯠1 ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ã DDL ã 1 ã€ããå®è¡ã§ããªããããè€æ°ã® DDL 倿Žã 1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§ãŸãšããŠé©çšããããšãã Drizzle ã®ãã€ã°ã¬ãŒã·ã§ã³ãã1 ã€ãã€åå¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ïŒBEGIN ⊠COMMITïŒã«åå²ããåŠç ãããã®å€æã¯ãDrizzle ã®ãã€ã°ã¬ãŒã·ã§ã³ãå®è¡ããã³ãã³ãïŒnpm scriptïŒã«çµã¿èŸŒãã§ããŸããããŒã«ã«ã§ã CI/CD ãã€ãã©ã€ã³ã§ãåãã³ãã³ãã§å®è¡ããããããéçºè
ã¯éåžžã® Drizzle ã®ã¯ãŒã¯ãããŒã®ãŸãŸã¹ããŒã倿Žãé²ããããŸãã 2. ãã©ã³ã¶ã¯ã·ã§ã³ãµã€ãºå¶éãžã®å¯Ÿå¿ïŒå€§ããªæŽæ°ãè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«åå² Aurora DSQL ã«ã¯ã1 ãã©ã³ã¶ã¯ã·ã§ã³ãããã«å€æŽã§ããè¡æ°ã«äžéããããŸãïŒ3,000 è¡ïŒã1 詊åãããçŽ 1 äžæã®åçããããã« 5ã6 åã®ã¿ã°ãä»äžããŸããã¬ã³ãŒãæ°ã¯ã¿ã°ã ãã§çŽ 5ã6 äžä»¶ã«éããããã«åã£ãŠãã人ç©ã®é¢é£ä»ãïŒäººæ°åã®ã¬ã³ãŒãïŒãç»é²ããŸãããããããŸãšã㊠1 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§åæ ãããšäžéïŒ3,000 è¡ïŒãè¶
ããŠããŸããŸããæ¬ã·ã¹ãã ã§ã¯ãäžæçãªäžæŽåã蚱容ã§ããåŠçãæŽçããããã§ãåæçµæã®åæ ã«ã€ããŠã¯è€æ°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ã«åå²ããŠåŠçããæ¹åŒã«ããŸãããããã«ããã1 ãã©ã³ã¶ã¯ã·ã§ã³ãããã®å€æŽè¡æ°ãäžéå
ã«æããŠããŸããå©çšè
ã«ã¯åŠçäžãã©ããã®ç¶æ
ãç»é¢ã«è¡šç€ºããã¢ããããŒãã»åæã®é²æãææ¡ã§ããããã«ããŠããŸãã 3. OCCïŒæ¥œèгçåæå®è¡å¶åŸ¡ïŒãžã®å¯Ÿå¿ Aurora DSQL 㯠OCC ãæ¡çšããŠãããã³ãããæã«ç«¶åãæ€åºãããå Žåã¯ãã©ã³ã¶ã¯ã·ã§ã³ããªãã©ã€ããå¿
èŠããããŸããæ¬ã·ã¹ãã ã§ã¯ããã©ã€ããŒå±€ã«ãªãã©ã€åŠçãäœã蟌ã¿ãç«¶åæã«ã¯æ°åãªãã©ã€ããããã§ãããã§ãæåããªãå Žåã¯ãããã¬ã¿ãŒãã¥ãŒãžéé¿ãããŠåŸç¶ã®ãã³ããªã³ã°ãè¡ã£ãŠããŸãã éçºã»éçšé¢ã§åŸããã广 æ¬ã·ã¹ãã ã®èšèšã»å®è£
ã¯ããAWS Prototyping Programãã®æ¯æŽãåããŠé²ããŸãããããã¯ãAWS ã® Prototyping Engineer ã課é¡ã«åãããŠã·ã¹ãã ã®ãããã¿ã€ããéçºããããã°ã©ã ã§ããçŽ 1 ãæã®éçºæéãçµãŠããããžã§ã¯ãéå§ããçŽ 2 ãæåŸã«ã¯æ¬çªçšŒåãŸã§å°éã§ããŸãããDSQL æ¡çšåŸã«éçºããŒã ã宿ããŠããå¹æã¯æ¬¡ã®éãã§ãã ã¡ã³ããã³ã¹ãŠã£ã³ããŠã»ããŒãžã§ã³ç®¡çãäžèŠ ãDB ã®ååšãæèããéçºã»éçšã§ãããããšãæ¡çšåŸæå€§ã®ã¡ãªããã§ãããæšæºã§ãã«ã AZ æ§æã«ãªã£ãŠãããå®éãæ¬çªçšŒååŸ DB èµ·å ã®é害ã¯çºçããŠããŸãããåŸæ¥åã®ïŒããããžã§ã³ãæ§æã®ïŒRDB ãæ¡çšããŠããå Žå㯠0.5 人æçšåºŠãèŠãããšæ³å®ããŠããŸããããAurora DSQL ã®æ¡çšåŸã¯ããããäœæ¥ãã»ãŒäžèŠãšãªããŸããã å°äººæ°ããŒã ã§ã¢ããªéçºã«éäžã§ãã DBA ãå°ä»»ã§çœ®ãå¿
èŠããªããã€ã³ã¹ã¿ã³ã¹ã®ãµã€ãžã³ã°ãã¹ã±ãŒãªã³ã°ãšãã£ããã£ãã·ãã£èšèšãã®ãã®ãäžèŠãªãããå°äººæ°ã®ããŒã ã§ãã¢ããªã±ãŒã·ã§ã³æ©èœã®å®è£
ã«éäžã§ããéçºã¹ããŒããä¿ãŠãŸãããæ¬ã·ã¹ãã ã¯ããŒã¿ããŒã¹ãå«ãã¢ããªã±ãŒã·ã§ã³å
šäœãå®è³ª 1 åã§éçºããŠããŸããããµãŒããŒã¬ã¹æ§æã«ãããã£ãã·ãã£ãæèããããŒã¿ããŒã¹ãæ±ããããšããéçºã®é«éåã«çŽçµããŠããŸãããªããéçºã¡ã³ããŒã¯ PostgreSQL ã®å©çšçµéšããããDSQL èªäœã®åŠç¿ã³ã¹ãã¯ã»ãšãã©çºçããŸããã§ãããDSQL åºæã®å¶çŽäºé
ã«ã€ããŠãçè§£ã»ææ¡ã¯çæéã§æžã¿ãããããžã®å
·äœçãªå¯Ÿå¿ã¯åè¿°ã®ãæè¡çã«å·¥å€«ããç¹ãã®ãšããå®è£
ã§åžåããŠããŸãã 䜿ã£ãåã ãã®èª²éã§ç¡é§ã®ãªãã³ã¹ãæ§é 皌åã«æ³¢ãããæ¬ã·ã¹ãã ã§ã¯ã䜿ã£ãåã ãã®èª²éãšããã³ã¹ãã¢ãã«ãç¹ã«ããåèŽããŸãããã¢ã¯ã»ã¹ãçºçããªãæé垯ã¯åŠçã«å¯Ÿããã³ã¹ããããããªããããããããã¯ãŒã¯ããŒãã§ãç¡é§ãªã³ã¹ããæããããŠããŸãã æ§èœèŠä»¶ãååã«æºãããŠãã è€éãªæ€çŽ¢æ¡ä»¶ãèšå®ããŠããµã ãã€ã«äžèЧã®åæè¡šç€ºã¯ 1 ç§ä»¥å
ã«åãŸããåçåæã®ã¹ã«ãŒããããå®çšäžååãªé床ã§å®äºããŠããŸããå®éçšã«ãããŠãããŒã¿ããŒã¹ãããã«ããã¯ã«ãªã£ãããšã¯ãããŸããããã¡ãã DB æ§èœã ãã§å®çŸããããã§ã¯ãããŸããããAurora DSQL ããããã®èŠä»¶ãæ§èœé¢ã®åé¡ãªãæ¯ããããŠããããšããã·ã¹ãã å
šäœãšããŠã®èšèšäœå°ãåºããŠãããŠããŸãã ãããã« æ ªåŒäŒç€Ÿ MIXI ã§ã¯ãFCæ±äº¬åãã®åçéžå®æ¥åå¹çåã·ã¹ãã ã®ããã¯ãšã³ãã« Aurora DSQL ãæ¡çšããå©çšãç¹å®ã®æé垯ã«åãã¯ãŒã¯ããŒãããéçšå·¥æ°ãæå°éã«æããªããçæéã§æ¬çªçšŒåãŸã§å°éãããããšãã§ããŸãããæ ªåŒäŒç€Ÿ MIXI ã®æžè€æ°ã¯æ¬¡ã®ããã«æ¯ãè¿ã£ãŠããŸãã ãDB ã®ååšãæèããã«éçºã»éçšã§ããããšãäžçªã®ã¡ãªããã§ãããã¡ã³ããã³ã¹ãã¹ã±ãŒãªã³ã°ã®èšèšããè§£æŸãããå°äººæ°ã®ããŒã ã§ãã¢ããªã±ãŒã·ã§ã³éçºã«éäžã§ããŠããŸããããããç¹æ§ãæã€ã¯ãŒã¯ããŒãã§ã¯ãä»åŸãç©æ¥µçã« Aurora DSQL ãæŽ»çšããŠãããããšèããŠããŸããã Aurora DSQL ã®æ¡çšãæ€èšããŠããããŒã ã«ãšã£ãŠãæ¬äºäŸãäžã€ã®åèã«ãªãã°å¹žãã§ãã æ ªåŒäŒç€Ÿ MIXI ã©ã€ããšã¯ã¹ããªãšã³ã¹äºæ¥æ¬éš äŒç»æšé²éš ãšã³ãžãã¢ãªã³ã°æ¯æŽã°ã«ãŒã æžè€ æºå¹ž æ°
ããã«ã¡ã¯ã CTO宀/PlatforméçºããŒã ã§SREãæ
åœããŠããå¯ç°( @Cooking_ENG )ã§ãã ãã¡ã€ã³ãã£ã®ãPlatforméçºããŒã ãã¯å
šç€Ÿæšªæã®SREã®åœ¹å²ãæ
ã£ãŠããŸããåœç€Ÿã®ãµãŒãã¹ãã©ãã»ã©ã®è² è·ã«èããããããææ¡ããæ§èœã®åé¡ã衚é¢åã»æ¹åããããšã§ããŠãŒã¶ãŒã«å®å®ãããµãŒãã¹ãæäŸã§ããç¶æ
ãç®æããŠããŸãã ããã§ãGrafana LabsãæäŸããGrafana Cloud k6ãæ¡çšãã è² è·è©Šéšç°å¢ããŒãããæ§ç¯ ããŸãããä»åã¯ã Findy Conference ã察象ã«è² è·è©Šéšã宿œããŠããŸãã Findy Conferenceã¯ãããã¯ã«ã³ãã¡ã¬ã³ã¹ã«ç¹åãããã©ãããã©ãŒã ãµãŒãã¹ã§ãã conference.findy-code.io ãã®èšäºã§ã¯ãè² è·è©ŠéšããŒã«ã®éžå®ãããæ¬çªãã©ãã£ãã¯ãåçŸããã·ããªãªã®äœæãGrafana Cloud k6ãšDatadogãçµã¿åãããè² è·è©Šéšã®å®æœãŸã§ã®åãçµã¿ããåããŠè² è·è©Šéšãæ
åœãããšã³ãžãã¢ã®æ¹ã
ããããããå°å
¥ãèããŠããããŒã ã«åããŠç޹ä»ããŸãã è² è·è©Šéšç°å¢ãäœãããšã«ãªã£ãèæ¯ è² è·è©ŠéšããŒã«ã®éžå® ãã¡ã€ã³ãã£ã§éèŠããå€æè»ž åè£ããŒã«ã®æ¯èŒ è² è·è©Šéšã®ã·ã¹ãã æ§æ è² è·ã·ããªãªã®äœæ har-to-k6ã䜿ã£ãã¹ã¯ãªããã®äœæ è² è·ã®ããæ¹ã調æŽããOptionsãããã¯ã®è©± æ³å®ããè² è·ããããããŠããããDatadogã䜿ã£ãŠç¢ºèªããæ¹æ³ äœæã§ã€ãŸããããã€ã³ã Optionså
ã®å€ã¯ãªãã©ã«å¿
é èªèšŒä»ããšã³ããã€ã³ãã®æ±ã è² è·è©Šéšã®å®æœãšçµæ è² è·èŠæš¡ãšå¿
èŠã³ã³ããæ° Datadogã§åã£ãã¡ããªã¯ã¹ ãŸãšã è² è·è©Šéšç°å¢ãäœãããšã«ãªã£ãèæ¯ Findy Conferenceã§ã¯ãã»ãã·ã§ã³ã®éå§ãçµäºã®ã¿ã€ãã³ã°ã§ãåå è
ã®æ¹ã
ãäžæã«ã¢ã¯ã»ã¹ãã ç¬éçãªã¹ãã€ã¯ ãçºçããç¹åŸŽããããŸãã éå»ã®Blogã«ãŸãšããŠããã®ã§ãæ°ã«ãªãæ¹ã¯ãã² ãã¡ãã®èšäº ãã芧ãã ããã tech.findy.co.jp ããããã¹ãã€ã¯ã«åãããããã«ã³ãã¡ã¬ã³ã¹éå¬åã«ã³ã³ããæ°ãå¢ããéçšãããŠããŸãããã³ã³ããæ°ãæ±ºããéã®å€æã¯ããŒã ã®çµéšå€ã«åºã¥ããŠãããããæ¬åœã«ãã®æ°ã§ååãªã®ããéå°ã«ãªã£ãŠããªãããæ ¹æ ãæã£ãŠå€æã§ããªãç¶æ
ã§ããã ããã§ãæ³å®ããã¹ãã€ã¯ã«å¯Ÿã㊠å®éã®èšæž¬å€ã«åºã¥ããæé©ãªã³ã³ããæ°ãèšçœ®ã§ãã ç¶æ
ãç®æããè² è·è©Šéšç°å¢ã®æŽåã«åãçµãããšã«ããŸããã è² è·è©ŠéšããŒã«ã®éžå® ãã¡ã€ã³ãã£ã§éèŠããå€æè»ž ããŒã«éžå®ã«ãããããã¡ã€ã³ãã£ã®ç¶æ³ã«åãããŠæ¬¡ã®å€æè»žã眮ããŸããã ã€ã³ãã©ç®¡çãäžèŠã§ããããšïŒç°å¢ã®æ§ç¯ã»éçšã³ã¹ããæãããïŒ ã·ããªãªäœæã®èªç±åºŠïŒæ¬çªã«è¿ããŠãŒã¶ãŒå°ç·ãåçŸã§ããïŒ ãµãŒãã¹ã®ç¶ç¶æ§ïŒSaaSãšããŠé·ã䜿ãããïŒ ã³ã¹ãïŒåŸé課éã§ã䜿ããªããšãã«è²»çšãèšããŸãªãããšïŒ åè£ããŒã«ã®æ¯èŒ åè£ãšããŠã次ã®ããŒã«ãæ¯èŒããŸããã ãµãŒãã¹ ã·ããªãªèšè¿° æäŸåœ¢æ
éå¶å
ç¹åŸŽã»åŸæé å Grafana Cloud k6 JavaScript SaaSïŒOSSçããïŒ Grafana Labs ã¢ãã³ãªéçºäœéšãGrafanaçµ±åãå°çšããã·ã¥ããŒããæšæºãOSSçã§ããŒã«ã«å®è¡ãå¯èœ BlazeMeter JMeterïŒGUI SaaS Perforce JMeterè³ç£ã掻ãããããã詳现ãªã¬ããŒããšGUIæäœã«åŒ·ã¿ Gatling Enterprise ScalaïŒJava SaaS Gatling Corp å€§èŠæš¡è² è·è©Šéšã«åŒ·ã¿ãJavaãšã³ã·ã¹ãã ãšã®èŠªåæ§ãé«ã Locust Python OSS Locustã³ãã¥ãã㣠Pythonã§ã·ããªãªãæè»ã«èšè¿°ã§ããã軜éã§åæ£å®è¡ã«ãå¯Ÿå¿ JMeter GUIïŒXML OSS Apache Software Foundation é·å¹Žã®å®çžŸãšè±å¯ãªãã©ã°ã€ã³ã察å¿ãããã³ã«ãå¹
åºã ããããã®ããŒã«ã«ã¯åŸæãªçšéããããŸããä»åã¯ãã¡ã€ã³ãã£ã®å€æè»žãåºæºã«è©äŸ¡ããŸããã è©äŸ¡ã®çµæãGrafana Cloud k6ãæ¡çšããŸããã å
ã«æãã4ã€ã®å€æè»žããããã«å¯Ÿããè©äŸ¡ã¯æ¬¡ã®ãšããã§ãã å€æè»ž Grafana Cloud k6ã§ã®è©äŸ¡ ã€ã³ãã©ç®¡ç ãããŒãžããµãŒãã¹ã®ãããè² è·è©Šéšçšã®ç°å¢ãèªåã§æ§ç¯ã»éçšããå¿
èŠããªã ã·ããªãªäœæã®èªç±åºŠ JavaScriptããŒã¹ã§ã·ããªãªãèšè¿°ãããããããã³ããšã³ãïŒããã¯ãšã³ãåæ¹ã®ãšã³ãžãã¢ãèªã¿æžããããã ãµãŒãã¹ã®ç¶ç¶æ§ éå¶å
ã®Grafana Labsãç£èŠã»å¯èŠåé åã®ãµãŒãã¹ãé·ãæäŸããŠããå®çžŸããããé·æå©çšã®èŠéããç«ãŠããã ã³ã¹ã Proãã©ã³ã®æé¡ã$19ã500 VUh/æãŸã§ã¯ç¡ææ ãè¶
éåã$0.15/VUhã®åŸé課éã§ã䜿ããªããšãã«è²»çšãèšããŸãªãïŒ2026幎6ææç¹ãææ°ã¯ å
¬åŒæéããŒãž ãåç
§ïŒ è² è·è©Šéšã®ã·ã¹ãã æ§æ è² è·ã·ããªãªã®äœæ ããããã¯ãå®éã«è² è·ã·ããªãªãã©ãäœã£ãŠãã£ããã玹ä»ããŸãã har-to-k6ã䜿ã£ãã¹ã¯ãªããã®äœæ æ¬çªã«è¿ããŠãŒã¶ãŒå°ç·ãåçŸããã«ã¯ããŠãŒã¶ãŒãã©ã®ãšã³ããã€ã³ãã«ã©ã®é ã§ã¢ã¯ã»ã¹ããããã·ããªãªãšããŠæžãèµ·ããå¿
èŠããããŸããåœåã¯æäœæ¥ã§ã·ããªãªãæžãããšããŸããããã¹ããŒãžã³ã°ç°å¢ã§ã¯Cognitoã«å ããŠãã¡ã€ã³ãã£ç¬èªã®èªèšŒåºç€ãFindy IDããªã©è€æ°ã®èªèšŒãçªç Žããå¿
èŠããããèªèšŒã®æµããã¹ã¯ãªããã§åçŸããã®ã¯ç°¡åã§ã¯ãããŸããã§ããã ããã§ã har-to-k6 ã䜿ãããã©ãŠã¶ã®æäœãã°ããk6ã®ã·ããªãªãçæããæ¹æ³ã«åãæ¿ããŸãããhar-to-k6ã¯ããã©ãŠã¶ã®éçºè
ããŒã«ã§æžãåºãã HARïŒHTTP ArchiveïŒãã¡ã€ã« ãå
¥åãšããŠãk6çšã®JavaScriptã·ããªãªãçæããŠãããå
¬åŒããŒã«ã§ãããã©ãŠã¶ã§äžåºŠèªèšŒãéããããšã®æäœãHARãšããŠèšé²ããã°ãèªèšŒåŸã®ãªã¯ãšã¹ãããã®ãŸãŸåçŸã§ãããããæäœæ¥ã§æžããããæ¬çªã«è¿ãã·ããªãªãå¹çããçšæã§ããŸããã ãããŸããªæµãã¯æ¬¡ã®ãšããã§ãã ãã©ãŠã¶ã®éçºè
ããŒã«ã§ãåçŸãããæäœãå®è¡ããHARãã¡ã€ã«ãæžãåºã har-to-k6 input.har -o script.js ã§k6çšã®JavaScriptã«å€æãã çæãããã¹ã¯ãªããããã·ããªãªã«äžèŠãªãªã¯ãšã¹ãã®é€å»ãèªèšŒæ
å ±ã®ç°å¢å€æ°åãªã©ã«åãããŠæŽãã HARãã倿ããçŽåŸã®ã¹ã¯ãªããã«ã¯ãç»åã»CSSã»JavaScriptãã¡ã€ã«ãªã©ã®éçã¢ã»ããååŸã®ãªã¯ãšã¹ãããHARã«å«ãŸããŠããèªèšŒæ
å ±ïŒãã¹ã¯ãŒããªã©ïŒããã®ãŸãŸæ®ã£ãŠããŸãããããã®æŽçã«ã¯Claude Codeãªã©ã®AIã³ãŒãã£ã³ã°æ¯æŽããŒã«ã䟿å©ã§ããã ãã ããå¹³æã®ãã¹ã¯ãŒãããã®ãŸãŸAIã«æž¡ãã®ã¯ã»ãã¥ãªãã£äžé¿ãããã®ã§ãå
ã«èªèšŒæ
å ±ã __ENV.TEST_PASSWORD ã®ãããªåœ¢ã§ç°å¢å€æ°åããããããäžèŠãªãªã¯ãšã¹ãã®é€å»ãAIã«ä»»ããŸãããAIãæŽ»çšããããšã§ãæäœæ¥ã§1ã€ãã€åããããçãæéã§æ¬çªã«è¿ãã·ããªãªãçšæã§ããŸããã è² è·ã®ããæ¹ã調æŽããOptionsãããã¯ã®è©± k6ã®ã·ããªãªã§ã¯ã options ãšãããããã¯ã§è² è·ã®ããæ¹ã现ããå¶åŸ¡ã§ããŸããä»åã®ã·ããªãªã§ã¯ã ramping-arrival-rate ãšããexecutorã䜿ã£ãŠã ã¹ãã€ã¯ã®ç«ã¡äžããã»ããŒã¯ã»åæã1æ¬ã®ã·ããªãªã§åçŸãã æ§é ãæ¡çšããŸããã ãªããk6ã§ã¯è² è·ã·ããªãªã®é¢æ°ã1åå®è¡ãããããšããã€ãã¬ãŒã·ã§ã³ããšåŒã³ãŸããä»åã®ã·ããªãªã¯1ã€ãã¬ãŒã·ã§ã³ã®ãªãã§è€æ°ã®HTTPãªã¯ãšã¹ããéãæ§æã§ãã å®éã®Optionsãããã¯ã¯æ¬¡ã®ãããªåœ¢ã§ãïŒæ°å€ã¯èšäºçšã®ãããŒå€ã§ããã察象ãµãŒãã¹ãæ³å®ããã¹ãã€ã¯èŠæš¡ã«å¿ããŠèª¿æŽããŸãïŒã export const options = { scenarios: { spike: { executor: 'ramping-arrival-rate', startRate: 0, timeUnit: '1m', preAllocatedVUs: 50, stages: [ { duration: '10s', target: 100 }, { duration: '10s', target: 200 }, { duration: '50s', target: 200 }, { duration: '10s', target: 0 }, ], }, }, cloud: { distribution: { tokyo: { loadZone: 'amazon:jp:tokyo', percent: 100 }, }, }, }; äž»ãªèšå®é
ç®ã¯æ¬¡ã®ãšããã§ãã èšå®é
ç® èª¬æ executor è² è·ã®ããæ¹ã®ãã¿ãŒã³ã ramping-arrival-rate ã¯ãåã¹ããŒãžã®targetã«åããŠã€ãã¬ãŒã·ã§ã³æ°ããªãããã«å¢æžãããå±±åã®è² è·æ²ç·ã衚çŸã§ãã startRate éå§æç¹ã®ã¬ãŒããä»åã¯0ããç«ã¡äžãã timeUnit targetã®åäœæéã '1m' ã«ãããšç®æšå€ãã1åãããã®ã€ãã¬ãŒã·ã§ã³æ°ãã§æå®ã§ãã preAllocatedVUs ç®æšã¬ãŒããæãããã«äºåã«ç¢ºä¿ããŠããä»®æ³ãŠãŒã¶ãŒïŒVUïŒæ° target åã¹ããŒãžã§å°éããããç®æšã€ãã¬ãŒã·ã§ã³æ°/ timeUnit ã timeUnit: '1m' ãªã target: 100 ã¯ã1åããã100ã€ãã¬ãŒã·ã§ã³ããæå³ããdurationããããŠãã®å€ãŸã§ãªãããã«å¢æžãã timeUnit ã '1m' ã«ããŠããã®ã¯ãéå»ã®ã«ã³ãã¡ã¬ã³ã¹ã®å®æž¬å€ãã1åãããã®ãªã¯ãšã¹ãæ°ãã§ææ¡ããŠããããã§ãããã®å®æž¬ãªã¯ãšã¹ãæ°ã1ã€ãã¬ãŒã·ã§ã³ãããã®ãªã¯ãšã¹ãæ¬æ°ã§å²ãããšã§ãå¿
èŠãªã€ãã¬ãŒã·ã§ã³æ°ïŒtargetïŒãç®åºããã·ããªãªã®åäœãããã«æããŸããã stagesã4段ã«åããŠããã®ã¯ãæ¬çªã®ã¹ãã€ã¯ã次ã®ãããªæµãã§åçŸããããã§ãã 1段ç®ïŒ10ç§ïŒïŒæ¬çªæ³å®ã®ååãŸã§æ¥éã«ç«ã¡äžããã¢ã¯ã»ã¹æ¥å¢ã®åå
ãåçŸ 2段ç®ïŒ10ç§ïŒïŒæ¬çªæ³å®ãŸã§äžæ°ã«å°éããã 3段ç®ïŒ50ç§ïŒïŒæ¬çªæ³å®ã®è² è·ãç¶æããŠãã·ã¹ãã ãå®å®ããŠæãããã芳å¯ãã 4段ç®ïŒ10ç§ïŒïŒç®æšå€ã0ã«æ»ããåæããã cloud.distribution ã§ã¯ãGrafana Cloud k6äžã§è² è·ãçºçãããAWSã®ãªãŒãžã§ã³ãæå®ããŠããŸããä»åã¯å®éã®ãŠãŒã¶ãŒã¢ã¯ã»ã¹ã«è¿ã¥ãããããæ±äº¬ãªãŒãžã§ã³ïŒ amazon:jp:tokyo ïŒã100%ãšããŸããã æ³å®ããè² è·ããããããŠããããDatadogã䜿ã£ãŠç¢ºèªããæ¹æ³ ããããã¡ã°ã詊è¡é¯èª€ãããšããã§ããã k6åŽã®ã¬ããŒãã§ãç®æšãšããŠããã€ãã¬ãŒã·ã§ã³æ°ãçºè¡ããããšè¡šç€ºãããŠããŠããããã ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã«å®éã«å±ãããªã¯ãšã¹ãæ° ãšçŽæ¥äžèŽããããã§ã¯ãããŸãããä»åã®ã·ããªãªã¯1ã€ãã¬ãŒã·ã§ã³ã§è€æ°ã®ãªã¯ãšã¹ããéãããã§ãã ããã§ããŸããã€ãã¬ãŒã·ã§ã³æ° à 1ã€ãã¬ãŒã·ã§ã³ãããã®ãªã¯ãšã¹ãæ¬æ°ãã§ãã¢ããªã±ãŒã·ã§ã³ã«å±ãã¯ãã®ãªã¯ãšã¹ãæ°ïŒæåŸ
ãªã¯ãšã¹ãæ°ïŒãèŠç©ãããŸããããã®ããã§ãk6åŽã®targetã埮調æŽããªãããæåŸ
ãªã¯ãšã¹ãæ°ã©ããã®è² è·ããããããã«èª¿æŽããŠãããŸãã 調æŽãããªã¯ãšã¹ããå®éã«å±ããŠãããã¯ãDatadogã§ç¢ºèªããŸãããã¡ã€ã³ãã£ã§ã¯ããšããšDatadogã§ãªãã¶ãŒãããªãã£ã«åãçµãã§ãããåãµãŒãã¹ã®ããã·ã¥ããŒããéçšããŠããŸããè² è·è©Šéšã®ã¡ããªã¯ã¹ãæ®æ®µã®ç£èŠãšåãããã·ã¥ããŒãã§ç¢ºèªã§ãããããç¶æ
ãææ¡ããããç°å¢ããã§ã«æŽã£ãŠããŸããã ãã ããã©ã®ã¡ããªã¯ã¹ãèŠããã§æ°åã®æå³ãå€ãããŸãã芳枬åè£ãããã€ãæ¯èŒããçµæã ALBã®ã¬ã¹ãã³ã¹æ° ãèŠãããšã«ããŸãããä»åã¯ã¬ã¹ãã³ã¹æ°ããã¢ããªã±ãŒã·ã§ã³ãå®éã«åŠçããè² è·ã®ææšãšããŠæ±ã£ãŠããŸãã 芳枬察象 è² è·ç¢ºèªã®çšéãšã㊠çç± ALBã®ã¬ã¹ãã³ã¹æ° é©ããŠãã ã¢ããªã±ãŒã·ã§ã³ãå®éã«è¿ããã¬ã¹ãã³ã¹æ°ãèŠç©ãã£ãæåŸ
ãªã¯ãšã¹ãæ°ãšçªãåããããã CloudFrontã®ãªã¯ãšã¹ãæ° åããªã CDNãã£ãã·ã¥ãéçã¢ã»ããåãæ°Žå¢ããããk6ã®çºè¡æ°ãšããã APMã®ãªã¯ãšã¹ãæ° ããåããªã ãµã³ããªã³ã°ã§äžéšãéåŒããŠèšé²ãããããå®éããäœãã«èŠããããšããã ALBã®ã¬ã¹ãã³ã¹æ°ã®æšç§»ãèŠãŠãèŠç©ãã£ãæåŸ
ãªã¯ãšã¹ãæ°ã©ããã®è² è·ãåŠçãããŠãããã倿ããŸããå€ãæ³å®ããå°ãªãå Žåã¯ãCloudFrontåŽã§åŒŸãããŠãããªã¯ãšã¹ããããããã·ããªãªåŽã§æå³ããªããšã³ããã€ã³ããå©ããŠããªãããèŠçŽããµã€ã³ã«ãªããŸãã æ¬¡ã®å³ã¯ãããè² è·è©Šéšã§ã®ALBã®ã¬ã¹ãã³ã¹æ°ã®æšç§»ã§ããã·ããªãªã§èšèšãããšãããçæéã§ç«ã¡äžãã£ãŠããŒã¯ã«éããåæããŠããå±±åã«ãªã£ãŠããããšã確èªã§ããŸãã äœæã§ã€ãŸããããã€ã³ã ã·ããªãªãæžãéçšã§ã€ãŸããããã£ãã®ã§ãããããåãçµãæ¹åãã«å
±æããŸãã Optionså
ã®å€ã¯ãªãã©ã«å¿
é Grafana Cloud k6ã®ãã¬ãã¥ãŒç»é¢ã§ã¯ãOptionsãããã¯ã®å€ãéçè§£æããŠVUhïŒä»®æ³ãŠãŒã¶ãŒæéïŒã詊ç®ããŸãããã®ãšãã Math.round() ã®ãããªé¢æ°åŒã³åºãããå€éšã®å®æ°ãåç
§ããæžãæ¹ã¯è©äŸ¡ã§ããã VUhãæ£ããèšç®ãããŸãã ã // NGïŒVUh ãèšç®ãããªãïŒ const MaxTarget = 200; export const options = { scenarios: { spike: { stages: [ { duration: '50s', target: MaxTarget }, // 倿°åç
§ã¯è©äŸ¡ãããªã ], }, }, }; // OKïŒãªãã©ã«æ°å€ã§æžãïŒ export const options = { scenarios: { spike: { stages: [ { duration: '50s', target: 200 }, ], }, }, }; DRYã«æžããããªãæ°æã¡ã¯ãããŸãããOptionsãããã¯ã«éã£ãŠã¯ãªãã©ã«ã§æžãããšã培åºãããšå®å
šã§ãã èªèšŒä»ããšã³ããã€ã³ãã®æ±ã ã¹ããŒãžã³ã°ç°å¢ãæ¬çªçžåœã«ã¹ã±ãŒã«ã¢ããããŠè©Šéšããå ŽåãèªèšŒãæãŸãå°ç·ã§ã¯ CloudFront â Cognito â ã¢ããªã±ãŒã·ã§ã³ ã®ããã«ãªãã€ã¬ã¯ããé£éããŸããæåããæ¬çªæ³å®ã®ã·ããªãªãæµããšãèªèšŒã§åŒŸãããŠããŸãè² è·ãããããªãããšããããŸãã ããã§ããŸã㯠/health ã®ãããªçé確èªçšãšã³ããã€ã³ãã« redirects: 0 ãä»ããŠãªã¯ãšã¹ããéããæ³å®ã©ããã«200ã302ãè¿ã£ãŠãããã確èªããŠããã·ããªãªãçµã¿ç«ãŠãã®ãããããã§ãã è² è·è©Šéšã®å®æœãšçµæ ãããŸã§ã§äœã£ãã·ããªãªã䜿ããã¹ããŒãžã³ã°ç°å¢ãæ¬çªçžåœã«ã¹ã±ãŒã«ã¢ããããããã§è² è·è©Šéšã宿œããŸãããããã§ã¯ããã¡ã€ã³ãã£ãã©ã®ããã« ãæ³å®ã¹ãã€ã¯ããšã«å¿
èŠãªã³ã³ããæ°ããå²ãåºãã ã®ãã玹ä»ããŸãã æ¬¡ã®å³ã¯ãGrafana Cloud k6ã§è² è·è©Šéšãå®è¡ãããšãã®çµæãµããªã§ããèšèšãããšããã«è² è·ãããã£ãŠããŒã¯ã«éãããã®éãšã©ãŒãåºããã«åŠçã§ããŠããããšã確èªã§ããŸãã â»ç»åã¯ã€ã¡ãŒãžã§ãã è² è·èŠæš¡ãšå¿
èŠã³ã³ããæ° éå»ã®ã«ã³ãã¡ã¬ã³ã¹ã§ã®åå è
æ°ãšå®æž¬ãªã¯ãšã¹ãæ°ãããæ³å®ããè² è·èŠæš¡ïŒ1åãããã®ãªã¯ãšã¹ãæ°ïŒãè€æ°æ®µéçšæããè² è·èŠæš¡ããšã«è©ŠéšããŸããã ã³ã³ããæ°ãå€å®ããææšã¯ã次ã®ããã«å®ããŸããã é
ç® å
容 å€å®ææš ecs.fargate.cpu.percent ïŒDatadogïŒ èŠ³æž¬å¯Ÿè±¡ Findy Conferenceã®ãªãã§æããªã¯ãšã¹ããéäžããããã¯ãšã³ããµãŒãã¹ éŸå€ 50% ããã«ããã¯ã«ãªããããããã¯ãšã³ããµãŒãã¹ã®CPU䜿çšçãçŽæ¥èŠ³æž¬ããããšã§ãã³ã³ããæ°ã®éäžè¶³ã倿ããŸãã éŸå€ã50%ã«ããèæ¯ ãªãŒãã¹ã±ãŒã«ã¯ããäœãCPU䜿çšçã§çºåããããã«éçšããŠããŸãããã¹ãã€ã¯æã¯è¿œãã€ãåã«ã¢ã¯ã»ã¹ãéäžããŠããŸããŸãã ãã®ãããçºåãåŸ
ã€ããããCPU䜿çšçã50%ãè¶
ããæç¹ã§ã³ã³ãããå¢ãã倿ãããã»ãããã«ã³ãã¡ã¬ã³ã¹éå¶ã§ã¯å®å
šã ãšèããŸããã 詊éšã¯æ¬¡ã®ãµã€ã¯ã«ã§é²ããŸããã æ³å®ããè² è·èŠæš¡ã®ã·ããªãªãGrafana Cloud k6ããå®è¡ãã Datadogã§ããã¯ãšã³ããµãŒãã¹ã®CPU䜿çšçãšSLOã«é¢ããã¡ããªã¯ã¹ã芳枬ãã CPU䜿çšçãéŸå€ïŒ50%ïŒãè¶
ããå Žåã¯ã³ã³ããæ°ãå¢ãããåãã·ããªãªãåå®è¡ãã SLOã®ç¯å²å
ã«åãŸãæå°ã®ã³ã³ããæ°ãããã®è² è·èŠæš¡ã§ã®å¿
èŠæ°ãšããŠèšé²ãã ãã®æµããè² è·èŠæš¡ããšã«ç¹°ãè¿ããçµæãæ³å®ããã«ã³ãã¡ã¬ã³ã¹ã®èŠæš¡ããšã«å¿
èŠãªã³ã³ããæ°ãå²ãåºãããšãã§ããŸãããããã«ãããéå¬åã®ã³ã³ãã調æŽãçµéšé Œã¿ã§ã¯ãªãèšæž¬å€ã«åºã¥ããŠè¡ããããã«ãªã£ãŠããŸãã Datadogã§åã£ãã¡ããªã¯ã¹ 詊éšäžã¯CPU䜿çšçã®ã»ãã«ããæ¬¡ã®ã¡ããªã¯ã¹ãDatadogã§èŠ³æž¬ããŸããã ã¡ããªã¯ã¹ 芳枬ããç®ç ECSã®CPUã»ã¡ã¢ãªäœ¿çšç ã³ã³ããã®ãªãœãŒã¹ã«äœè£ããããïŒã³ã³ããæ°å€å®ã®äž»ææšïŒ APMã®ã¬ã€ãã³ã·ïŒp95ïŒ é
ããªã¯ãšã¹ããSLOã®ç¯å²ã«åãŸã£ãŠããã DBã®ã³ãã¯ã·ã§ã³æ° ããŒã¿ããŒã¹åŽãããã«ããã¯ã«ãªã£ãŠããªãã ãšã©ãŒçºçç è² è·ã«ãã£ãŠãšã©ãŒãå¢ããŠããªãã ãŸãã詊éšçµæã®åæã«ã¯Datadogã®BitsAIãæŽ»çšããŸããã詊éšäžã®ã¡ããªã¯ã¹ãããµããªãçæããŠNotionã«éçŽããéçºããŒã ãžã®å
±æãæ¹åææ¡ã«ã€ãªããŠããŸãã ãŸãšã ä»åã¯ãGrafana Cloud k6ãšDatadogãçµã¿åãããŠãFindy Conferenceã®è² è·è©Šéšç°å¢ããŒãããæ§ç¯ããåãçµã¿ã玹ä»ããŸãããã³ã³ããæ°ã®å€æããããŒã ã®çµéšå€ããèšæž¬å€ã«åºã¥ããã®ãžå€ããããããšã倧ããªææã§ãã ããã§æŽçããæé ã¯ä»ã®ãµãŒãã¹ã«ãå¿çšã§ãããšèããŠãããä»åŸã¯ãã¡ã€ã³ãã£ã§æäŸããŠããåãµãŒãã¹ã§ã暪æçã«è² è·è©Šéšã宿œã§ããäœå¶ãžåºããŠããããã§ãã ãã®èšäºããããããè² è·è©Šéšã«åãçµããšã³ãžãã¢ã®æ¹ã
ãããŒã ã®åèã«ãªãã°å¬ããã§ããæåŸãŸã§ãèªã¿ããã ãããããšãããããŸããïŒ ãã¡ã€ã³ãã£ã§ã¯äžç·ã«äŒç€ŸãçãäžããŠãããã¡ã³ããŒãåéäžã§ããèå³ãæã£ãŠããã ããæ¹ã¯ãã¡ãã®ããŒãžãããå¿åãé¡ãããŸãã herp.careers
















