ããã«ã¡ã¯ãå»çä»è·æ±äººãµã€ãããžã§ãã¡ãã¬ãŒãã®éçºãæ
åœããŠãããšã³ãžãã¢ã®å±±ç°ã§ãã ä»å¹Žã®æ°åãšã³ãžãã¢ç ä¿®ã«ãããŠãã¡ã³ã¿ãŒãæ
åœããŸããã ã¡ãã¬ãŒã§ã¯ 2019 幎床ããæ°åæ¡çšãè¡ãªã£ãŠãããä»å¹Ž 2021 幎床㯠5 åã®æ°åããšã³ãžãã¢ãšããŠå
¥ç€ŸããŸããã äŸå¹Žãšåãã 4 æãã 9 æã«ãããŠãçŽ 5 ã¶æéã®æ°åãšã³ãžãã¢ç ä¿®ã宿œããŸããã®ã§ããã®åãçµã¿ããç ä¿®åè¬è
ã§ããæ°åããã®å£°ã亀ããŠã玹ä»ããŸãã æ°åç ä¿®ã®æŠèŠ ä»å¹Žã®æ°åç ä¿®ã®æçµãŽãŒã«ã¯ãã ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã Our Essentials (â») ãäœçŸãã顧客ãžäŸ¡å€æäŸã§ããããã«ãªãããã®åºç€ã身ã«ã€ããçµéšãåŸãããš ããšããŠæ²ããŸããã â») ã¡ãã¬ãŒã®è¡ååå ã¡ãã¬ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ãæè¡ã身ã«ã€ããããšã ãã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠã®åºç€ã身ã«ã€ããã¡ãã¬ãŒã倧åã«ããŠãã䟡å€èгãçè§£ããäœçŸããæèããã£ãŠã顧客ãžã®äŸ¡å€æäŸã«ã€ããŠèªåã®èšèã§è©±ããããã«ãªãããšãŸã§ãç®æããŠããããŸãã ç ä¿®ã¯æšå¹Žåæ§ã倧ããåããŠã4 ã€ã®ãã§ãŒãºã«åºåã£ãŠè¡ããŸããã ãŸããå
šç ä¿®æéãéããŠãåæ°åã«ã¯ã¡ã³ã¿ãŒãäžäººãã€ä»ããŸãããã¡ã³ã¿ãŒã¯ãäžé±éã« 1~2 åã®ããŒã¹ã§æ°åãš 1on1 ããŒãã£ã³ã°ã宿œãããã£ãžã«ã«ãšã¡ã³ã¿ã«ã®äž¡é¢ãæ°é£ããåå¥ã«ãã©ããŒãè¡ããŸããã æ°åç ä¿®ã®å
容 ãã§ãŒãº 1ïŒç€ŸäŒäºº&ã¡ãã¬ãŒåºç€ç ä¿® ãªã¹ã¯ç ä¿® ã€ã³ãµã€ããŒååŒé²æ¢ç ä¿® ã³ã³ãã©ã€ã¢ã³ã¹ç ä¿® æ
å ±ã»ãã¥ãªãã£ç ä¿® ããžãã¹ç ä¿® ããžãã¹ãããŒç ä¿® ããžãã¹ã¹ãã«ç ä¿® ããžãã¹ã¹ã¿ã³ã¹ç ä¿®ïŒå€éšç ä¿®ïŒ ãã§ãŒãº 1 ã§ã¯ã ææãåºãã䟡å€ãçºæ®ããããã«å¿
èŠãªããžãã¹ããŒãœã³ãšããŠã®åºæ¬çãªä»äºã®åã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ãªã¹ã¯ç ä¿®ã§ã¯ãã¡ãã¬ãŒç€Ÿå¡ãšããŠã瀟äŒäººãšããŠã身ã®åšãã§èµ·ãããããªã¹ã¯ã«ã€ããŠèããããã«ãããã®ãªã¹ã¯ãšåãåãããè¬çŸ©åœ¢åŒã§åŠãã§ããããŸããã ããžãã¹ç ä¿®ã§ã¯ã瀟äŒäººãšããŠã®æäœéã®ãããŒãåŠã³ãè«ççæèåãã³ãã¥ãã±ãŒã·ã§ã³åãªã©ããšã³ãžãã¢è·ã«éããªã課é¡è§£æ±ºåãžã€ãªããããŒã¿ãã«ãªç¥èãã座åŠãšã¯ãŒã¯ã·ã§ãããéããŠå®çããŠãããããšãå³ããŸããã ãŸãã瀟äŒäººã®åºæºã§ä»äºãšåãåããé©åãªå ±é£çžã«ãã£ãŠåšå²ãšååããŠããããšã®éèŠæ§ã«ã€ããŠãåŠãã§ããããŸããã æ°åããã®å£° 質ã®é«ããå€éã®ã€ã³ãããã»ã¢ãŠãããããã§ãã äŒããã¡ãŒã«ã®æžãæ¹ãååºã®æž¡ãæ¹ãªã©ã瀟äŒäººã«å¿
é ã®ãããŒãã¹ãã«ãèªèã§ãã ã¯ãŒã¯ãéããŠãèšèã§ã¯çè§£ããŠããŠãè¡åãããšã§ããªãããšãæŽãåºãã ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿® éçºåºç€ 1 ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš äºæ¥ïŒãžã§ãã¡ãã¬ãŒ ã» CLINICS ã»ä»è·ã®ã»ããïŒã®æŠèŠèª¬æ éçºåºç€ç ä¿®ïŒRuby on Rails ãã¥ãŒããªã¢ã«ïŒ éçºå®è·µ ïŒèŠä»¶å®çŸ©ããªãªãŒã¹ãŸã§ïŒ éçºåºç€ 2 æè¡æžã®èŒªèªäŒ ããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿® ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿® äžéã¬ããŒãäœæ äžéå ±åäŒ ãã§ãŒãº 2 ã§ã¯ãæ°åç ä¿®åŸã«éçºæ¥åã«å
¥ã£ãŠããããããã ãšã³ãžãã¢ãšããŠã®åºç€ã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš éçºã«é¢ãããã®ãã§ãŒãºã«ãããŠããèŠä»¶å®çŸ©ãå«ãæ±çšçãªæè¡çã¹ãã«ã¯å¿è«ã®ããšãã¡ãã¬ãŒãšã³ãžãã¢ãå
±éããŠæã€ã¹ã䟡å€èгãªã©ãå
±æããããããã§ãŒãº 2 忥ã¯ã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš ããšé¡ããŠããšã³ãžãã¢ã®å·è¡åœ¹å¡ ç°äžãè¬çŸ©ãè¡ããŸããã è¬çŸ©ã§ã¯ãã ãšã³ãžã㢠ãšã¯ã ãšã³ãžãã¢ã®äŸ¡å€ ãšã¯ã ãããšã³ãžã㢠ãšã¯ãªãã§ããããïŒããšããåãããå§ãŸããè¬çŸ©ã®çµããã«ã¯ããäžåºŠåãåããããããŠç· ãããããæ°åãã¡ãã¬ãŒã®æ±ãããšã³ãžãã¢åã«ã€ããŠèªèº«ã®èšèã§è©±ããããã«èããŠããããŸããã ã¡ãã¬ãŒãæ±ãããšã³ãžãã¢åã«ã€ããŠã¯ãCTO 平山㮠ã¡ãã¬ãŒå¹³å±±ã®äžå€®çªç Ž: THE ãšã³ãžã㢠ã«ãæžãããŠããŸãã®ã§ããããããã°ãããããŠã芧ãã ããã ããã«ãã¡ãã¬ãŒãå±éããåäºæ¥ããã³é¢é£ãããããã¯ãã®æŠèŠèª¬æããããã¯ããããŒãžã£ãŒãè¡ããã¡ãã¬ãŒã§éçºããæçŸ©ããããããŠèªèããŠããããŸããã éçºåºç€ç ä¿® 2 æ¥ç®ããã Ruby on Rails ãã¥ãŒããªã¢ã« ïŒä»¥äžããRails ãã¥ãŒããªã¢ã«ãïŒãææãšãããéçºåºç€ç ä¿®ã«ç§»ããŸããã ã¡ãã¬ãŒã®ãããã¯ã㯠Rails ã§äœãããŠãããã®ãå€ããWeb ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åºç€ã身ã«ã€ããããã«ããRails ãã¥ãŒããªã¢ã«ã®å
容ã宿œããŠããããŸããã åçŽã«ãRails ãã¥ãŒããªã¢ã«ã®å
å®¹ã«æ²¿ã£ãŠããã©ãã©ãšåçµããã®ã§ã¯ãªããéæãåŠãã ããšã¯ Confluence ã«ãŸãšããGitHub äžã§ Pull Request ãäœæãã圢ã§ããœãŒã¹ã³ãŒããå
±æããŠããããŸããã åŠãã ããšãèªåã®èšèã«çœ®ãæããŠã¢ãŠããããããããšã§å埩åŠç¿ãä¿ããPull Request ãäœæããŠãããããšã§ GitHub ã®äœ¿ãæ¹ã«æ
£ããŠãããããšãå³ããŸããã ãŸãããã€ãªãŒã§æäŒãšå€äŒã宿œããŸãããæäŒã¯ä»äºã®ãªãºã ãæŽããããã®é¡åãããå€äŒã¯æ°åãã質åã»ææãå
±æããŠã¡ã³ã¿ãŒãããã«å¯ŸããŠãã£ãŒãããã¯ãããå ŽãšããŠãããã宿œããŸããã ç ä¿®åã«æ¢ã« Rails ãã¥ãŒããªã¢ã«ãäžåšããŠããæ°åãããŸããããäºåšç®ã宿œããŠæ°ããªæ°ä»ããåŸãããAWS ãçšããŠã¯ã©ãŠãäžã«ç°å¢æ§ç¯ããäœæãã Web ã¢ããªã±ãŒã·ã§ã³ããããã€ãããŸã§ãå®è·µããŠããããªã©ãã€ã³ãã©ã«é¢ããŠãçè§£ãæ·±ããŠãããããšãã§ããŸããã æ°åããã®å£° ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäžããããã®å·¥å€«ãç¥ãããšãã§ãã ãã°çºçãåå ç¹å®ãä¿®æ£ããšãããããã°ã®ã¹ããŒãããç ä¿®åºç€ããé£èºçã«äžãã£ã ãããã¯ãã§å©çšããŠãã AWS ã®åçš®ãµãŒãã¹ã®æŠèŠãçè§£ã§ããããšã«å ãããµãŒãã¹éã®ç¹ããããããã¯ãŒã¯ã®æµãã«é¢ããŠãçè§£ãæ·±ããããšãã§ãã éçºå®è·µ éçºåºç€ç ä¿®ã«ãŠ Web ã¢ããªã±ãŒã·ã§ã³éçºã®åºç€ãåŠãã åŸã¯ãã ã¡ãã¬ãŒ/ã°ã«ãŒãäŒç€Ÿã§äœ¿ãæ¥èšªè
åä»ã·ã¹ãã ããéçºé¡æãšããŠãéçºå®è·µç ä¿®ãè¡ããŸããã éçºæ¥åå
šäœã®æµããææ¡ããããšã§ã ããŒã ã§éçºïŒèª²é¡è§£æ±ºïŒããããšãçµéšããä»åŸã®ä»äºã«åœ¹ç«ãããããš ãç®çãšããŸããã æ¬ç ä¿®ã§éæãã¹ãããšãšããŠæ²ããŠãããã®ã¯äž»ã«ã次ã®éãã§ãã ãããžã§ã¯ã管çèœåã身ã«ã€ããããš éçºãã察象ãäœç³»çã«æŽçã§ããèœåãé€ãããš ã·ã¹ãã èšèšã«é¢ããåºç€çãªç©äºãçè§£ããããš ããŒã éçºãçè§£ããããš å質ãçè§£ããããš æ¢ã«æ±ºãŸããã£ã仿§æžã«æ²¿ã£ãŠéçºããã®ã§ã¯ãªããæ°åèªèº«ãçŸç¶ã®å顿æ¡ãèª²é¡æŽçãè¡ã£ãŠããŠãŒã¶ãŒãžäŸ¡å€æäŸããããã«äœãäœãã¹ãããèããããšããå§ãŸãããªãªãŒã¹åŸã®éçšæ¹æ³ãã©ã³ãã³ã°ã³ã¹ãã®ããšãŸã§èãææ¡ããŠããããŸããã éçºå®è·µç ä¿®ã¯çŽ 1 ã¶æã®æéããããŠè¡ããŸããã倧ãŸããªæµããšããŠã¯ã次ã®éãã§ãã èŠä»¶å®çŸ©ïŒãã¢ãªã³ã°ã»çŸç¶ææ¡ã»èª²é¡æŽçã»èŠæ±åæã»æ©èœ/éæ©èœèŠä»¶ã®æŽãåºãã» UI èæ¡ïŒ ãããžã§ã¯ãèšç»ïŒåœ¹å²åæ
ã» WBS/ã¬ã³ããã£ãŒãäœæïŒ èšèšïŒç»é¢èšèšã»æ©èœèšèšã»ããŒã¿ã¢ããªã³ã°ã»æ¹åŒèšèšã»ã€ã³ãã©èšèšïŒ éçºïŒå®è£
ã»ã³ãŒãã¬ãã¥ãŒïŒ QAïŒãã¹ãèšèšã»ãã¹ãïŒ ææçºè¡šïŒææç©ãé¢ä¿è
ãžãã¬ãŒã³ã»ãªãªãŒã¹ïŒ æ¹åŒèšèšã®äžéšãšããŠãéçºã«äœ¿çšããèšèªãªã©ã®éžå®ãæ°åèªèº«ãè¡ããŸããã ä»åäœæãã瀟å¡åã管çç»é¢ãšæ¥èšªè
åãç»é¢ã¯ãããã SPAïŒäžéšãPWAïŒã®ã¢ãŒããã¯ãã£ãæ¡çšããäž»ãªã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã«é¢ããŠãããã³ããšã³ã㯠TypeScript , React , Next.js , Chakra UI , Ionic Framework ãããã¯ãšã³ã㯠Ruby on RailsïŒAPI ã¢ãŒãïŒãããããå©çšããããšãšãªããŸããã éžå®çç±ãšããŠã¯äž»ã«ã次ã®éãã§ãã TypeScript, ReactïŒäž¡ç»é¢å
±éïŒ ããžãã¯ãããã³ãã¬ãŒããŸã§ã®å
šãŠã®ã³ãŒããéçåä»ãã§æžãããšãã§ããå
ç¢æ§ã«åªããŠãããã Next.js, Chakra UIïŒç€Ÿå¡åã管çç»é¢ïŒ ãŒãã³ã³ãã£ã°ã§ãã«ããã¬ã³ããªã³ã°ãæé©åã§ãããã ã¢ã¯ã»ã·ããªãã£ã«åªãããªãã㪠UI ãçŽ æ©ãæ§ç¯ã§ãããã Ionic FrameworkïŒæ¥èšªè
åãç»é¢ïŒ iPad äžã§ããã€ãã£ãã¢ããªã®ãã㪠UI/UX ãæäŸãããã Ruby on Rails API ã¢ãŒã ããã³ããšã³ããšããã¯ãšã³ããåé¢ããŠççµåã«ãããã çæéã§æ§ç¯ãããã 瀟å
ã§ããã䜿ãããŠããã¡ã³ããã³ã¹ãããããã ã€ã³ãã©ã¯ AWS ãæ¡çšããEC2, S3, RDS, CloudFront, Route53, CloudWatch ãªã©ã®ãµãŒãã¹ãå©çšããŸããã çµæçã«ãæ¬ç ä¿®ããã°ã©ã ã®ææç©ãšããŠãªãªãŒã¹ãããã·ã¹ãã ã¯ã Medley Entrance ããšããååã§ã瀟å
ããŒã«ãšããŠçŸåšãæ¯æ¥çšŒåããŠããããŠãŒã¶ãŒãšããŠã¡ãã¬ãŒ/ã°ã«ãŒã瀟å¡ã ãã§ã¯ãªããæ¥èšªè
ã®æ¹ã
ã«ã䜿ã£ãŠããã ããŠããŸãã Medley EntranceïŒäžïŒç€Ÿå¡åã管çç»é¢ãäžïŒæ¥èšªè
åãç»é¢ïŒ ããŒã ã§èª²é¡è§£æ±ºã«èšã¿ãäŸ¡å€æäŸãŸã§ã®å®çžŸãæ®ããããšã¯èªä¿¡ã«ã€ãªãããéçºå®è·µç ä¿®ã®ãããããšããŠãæããŠããããã®ã§ã¯ãªãã§ããããã èŠä»¶å®çŸ©ãªã©ã®æéäžãæ³å®ãããã¹ã ãŒãºã«é²ããããªãã£ãæãä»è²¬ã«ãããåã
ããªãŒããŒã·ãããçºæ®ãã建èšçã«é²ããŠããæ°åã®æ§åãã¡ã³ã¿ãŒã®äžäººãšããŠåã§èŠãããŠããããŸããã ãã® 1 ã¶æéã®éçºå®è·µç ä¿®ãéããŠãæè¡åã¯ããããšãªããã課é¡è§£æ±ºã«å¯Ÿããååãªç±æãšäž»äœæ§ãæ°åããæãããããšãŠãé Œãããå°è±¡ãšããŠæ®ããŸããã æ°åããã®å£° éçºã®äžã§ã®æ¹éãæèããŠèšèš/å®è£
ããããšãã§ãã(ã·ã³ãã«ã«ãã) QA ãšã¯ããããäœããšãããªãµãŒãããå
¥ããæèè
ã®èãæ¹ãè»žã«æ¹éãæ±ºããŠããå§ãããã åã
ãæé©ãªããã©ãŒãã³ã¹ãçºæ®ã§ããç°å¢ã¥ãããæèããŠãé«éãªæææ±ºå®ãå¯èœãªäœå¶ãæŽããããšãã§ãã èŠä»¶ã決ãŸããã£ãŠããªãäžã§èšèšããã®ã¯é£ããã£ã éçºã¿ã¹ã¯ãéäžããŠããæã«ããããžã§ã¯ãå
šäœã®çŸç¶ãææ¡ã§ããŠããªãã£ã æç« ãäœãã¹ãã«ãè¶³ããŠããªã æè¡æžã®èŒªèªäŒ ãã§ãŒãº 2 ã®éçºåºç€ 2 ã®èŒªèªäŒã§ã¯ã ãWeb ãæ¯ããæè¡ -HTTPãURIãHTMLããã㊠RESTã ã顿æžç±ãšããŠã7 æ¥éã«æž¡ã£ãŠæ¯æ¥ãæ¬¡ã®æé ã§å®æœããŸããã åå è
ãåãããŒãããããããèªãã§ãããæžç±ããåŠãã ããšãããããªã©ã§èª¿ã¹ãŠãè§£æ¶ããããªãã£ãçåç¹ãªã©ããŸãšãã ãã®å
容ãããšã«ã倿¹ã®ããŒãã£ã³ã°æã«ãããŠãåèªãçºè¡šããŠãã£ã¹ã«ãã·ã§ã³ãè¡ã ãã£ã¹ã«ãã·ã§ã³ããå
容ã¯è°äºé²ã«ãŸãšãã 茪èªäŒã¯ä»è
ããã®åŠã³ãå
±æããŠãããããšã§ãèªåã«ã¯ãªãã£ãèŠç¹ã»æ°ä»ããç²åŸãããã®æžç±ãžã®çè§£ãããæ·±ãããã广ããããŸãã æ¬ç ä¿®ããã°ã©ã ã«ããã茪èªäŒã®ç®çãšããŠã¯ã Web ãµãŒãã¹ãéçºããŠããäžã§å¿
èŠãšãªãç¥èãžè§Šããããšã«ãããä»åŸç²åŸããŠããã¹ãç¥èã®ããŒã¹ã©ã€ã³ãçè§£ããããš ã§ãããã茪èªäŒãªãã§ã¯ã®ã¡ãªããã»æ¥œãããæ°åã«å®æããŠããããããšãã坿¬¡çãªå¹æãšããŠãã£ããšæããŸãã æ°åããã®å£° Web ã®åºæ¬çãªç¥èãããªãç»å Žããã®ãããçè§£ããªããç¶²çŸ
çã«åŠã¶ããšãã§ãã ææžã§ãŸãšããåŸã«ãå£ã§èª¬æããããšãåŠãã å
容ã®å®çã«è¯ããšæãã ãããŸã§ãªããšãªãå®è£
ããŠããããšã®ä»çµã¿ãåŠã¶ããšã§ãç¥èãšããŠå®çããããšãã§ãã äžéå ±åäŒ ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿®æåŸã®ç ä¿®ããã°ã©ã ã§ããäžéå ±åäŒã«åããŠãããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ããã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ã宿œããŸããã äžèšã¹ãã«ãå¿
èŠãšãªãèæ¯ã¯ã次ã®éãã§ãã ãšã³ãžãã¢ãªã³ã°ãéãã課é¡è§£æ±ºãšã¯ããã°ã©ã ãæžãã ãã§ã¯è§£æ±ºããªãå Žé¢ããã èæ¯ãç®çãæ£ããã¹ããŒã¯ãã«ããŒãžå
±æããªããããŒã ãšããŠåãçµãã§ããããšã«ãªã äŒãããããšãæç« ãšããŠæŽçããä»è
ãžåãããããäŒããŠããããšãæ±ãããã ãŸããã¡ãã¬ãŒã®è¡ååå Our Essentials ãæ§æããèŠçŽ ãšããŠããããã¥ã¡ã³ãããªãã³ããå
šãŠãæç¢ºã«ããšããé
ç®ãå«ãŸããŠãããããããå®çŸããããã«ãããšãŠãéèŠãªã¹ãã«ãšããŠã¡ãã¬ãŒã¯èããŠããŸãã æ°åç ä¿®ãçµãã£ãåŸãããšã³ãžãã¢ãšããŠæè¡çãªã¹ãã«ã身ã«ã€ããæ©äŒã¯æ¥åžžçã«å€ããããŸãããäžèšã®ãããªã¹ãã«ããŸãšããŠç¿åŸããæ©äŒã¯å°ãªãããããã®ãããªç ä¿®ã瀟äŒäººã®ã¯ããããåããŠããããšã§ããã®åŸã®äŒžã³ãããéã£ãŠããã®ã§ã¯ãªãããšæããŸãã ç ä¿®ãçµãã£ãåŸã¯ãåèªã§å ±åäŒçšã®è³æãäœæããç ä¿®è¬åž«ããã®æ·»åãåããŸããã äžéå ±åäŒã¯åéšçœ²ã®éçºãããŒãžã£ãŒãçºè¡šçžæãšããŠãåœæ¥ã¯çšããç·åŒµæããã£ãŠãè¯ãé°å²æ°ã§å ±åäŒãçµããããŸããã ãã§ãŒãº 3ïŒäºæ¥éš OJT äºæ¥éšç ä¿® åç· åœ¹è±ç°ããã®è¬çŸ© CLINICS äºæ¥éšç ä¿® ãžã§ãã¡ãã¬ãŒäºæ¥éšç ä¿® éçº OJT ã·ã¹ãã å
šäœå説æ ç°å¢æ§ç¯ åãããã¯ãã®éçºããŒã ã§ã® OJT ãã§ãŒãº 3 ã§ã¯ã 顧客ã®èª²é¡ãšã顧客ãžã®äŸ¡å€æäŸã®ããã®åããŒã ã®é£æºãäœæããã¡ãã¬ãŒã®é¡§å®¢æäŸäŸ¡å€ãèªåã®èšèã§è©±ããããã«ãªãããš ããŽãŒã«ãšããŸããã ãã§ãŒãº 3 ã®ã¯ããã«ãåç· åœ¹è±ç°ã«ããæ¥æ¬ã®å»çã®èª²é¡ãšã¡ãã¬ãŒã®åãçµã¿ã«é¢ããè¬çŸ©ãåè¬ããŠããããŸããã æç¶å¯èœãªå»çäœå¶ãæ§ç¯ããŠããããã«ã¡ãã¬ãŒãæãã¹ãããšãªã©ã®è©±ãèããåŸã«ãæ°åããã®è³ªåã®åãçãã«ãã£ãŠçè§£ãæ·±ããã¡ãã¬ãŒã®ç€ŸäŒçæçŸ©ããããããŠèªèããŠãããããšã³ãžãã¢ãšããŠã ãã§ã¯ãªãã ã¡ãã¬ãŒç€Ÿå¡ãšããŠã®èªèŠ ã匷ããŠããããŸããã äºæ¥éšç ä¿® éçº OJT ã§æãåããåã«ãèªåãã¡ãäœã®ããã«éçºããã®ããå
·äœçã«ã€ã¡ãŒãžã§ãããããæ¬¡ã®ããã«ãåçŸå Žã«åå ããŠããããŸããã èŠèŸŒé¡§å®¢ãžã®æ¶é»æ¥åèŠåŠ åè«åã®ç€Ÿå
ããŒãã£ã³ã°åå åè«çŸå Žååž å®äŸäŒè°åå äºæ¥éšã®ã¹ã¿ãããã顧客ã®èª²é¡ã«å¯ŸããŠãã©ã®ãããªå¯Ÿå¿ãããŠããŠãã©ã®ããã«ãããã¯ãã説æããŠããã®ããäºæ¥éšã®åããŒã ããã©ã®ããã«é£æºããŠæçµçã«é¡§å®¢ã«äŸ¡å€ãå±ããã®ãã®å
šäœèгãç¥ã£ãŠãããããšãçããšããŠããŸããã éçºããŒã ã®ãšã³ãžãã¢ã¯æ¥åäžããããã¯ãã®ãšã³ããŠãŒã¶ãŒã§ãã顧客ã®å£°ãªã©ãåè«ã®ã¿ã€ãã³ã°ããèããæ©äŒã¯ãªããªãç¡ãã®ã§ãç ä¿®ãéããŠè©±ãèããããšã¯ãä»åŸã®éçºã¢ãããŒã·ã§ã³ã«ã圱é¿ããè¯ãæ©äŒã ã£ããšæããŸãã æ°åããã®å£° ãŠãŒã¶ãŒã顧客ãäºæ¥éšãæ±ãã課é¡ã確èªã§ããããšã§ãéçºä»¥å€ã«ãç®ãåãããã£ããã«ãªãè¯ãã£ã åéšçœ²ã KPI ãšããŠå®ããŠããæ°åãç¥ãããšãã§ããéçºã«éããŠããŠããæœçã®åœ±é¿ç®æãã©ã®éšåããçè§£ã§ããäžã§ãéçºã«åãçµãããšãã§ããããã«ãªã£ã åéšçœ²ã®ããŒãã£ã³ã°ã«åå ããããšã§ãåéšçœ²ãã©ã®ãããªèãã§äœãç®æããŠããã®ããçè§£ã§ããã¡ãã¬ãŒå
šäœãšããŠç®æããŠããæ¹åæ§ãæŽãã éçº OJT äºæ¥éšç ä¿®ã«ç¶ãéçº OJT ã§ã¯ã ãžã§ãã¡ãã¬ãŒ ã CLINICS ã ä»è·ã®ã»ãã ã®éçºããŒã ã«åãããŠãç ä¿®ã宿œããŸããã OJT é
å±å
ã§ã¯ãã¡ã³ã¿ãŒãšã¯å¥ã«ããã¬ãŒããŒãä»ããŠæ¥åã®é²ãæ¹ãªã©ããµããŒãããŸããããã¬ãŒããŒã¯é
å±å
ã®å
茩ãšã³ãžãã¢ãæ
åœããŸããã OJT ã®æµããšããŠã¯ã忥ã«ããããã¯ããã©ã®ããã«åããŠããã®ããã·ã¹ãã å
šäœåãææ¡ããããšããå§ãŸããåèªãããã¥ã¡ã³ãã«æ²¿ã£ãŠãPC ã«ããŒã«ã«éçºç°å¢ãã»ããã¢ããããŸããã ãã®åŸã¯ãä»ã®å
茩ãšã³ãžãã¢ãšåæ§ã«ãGitHub Issue ã§ç®¡çãããŠãã課é¡ãè§£æ¶ããããšãæ¥ã
ã®ç®æšãšããŠããªããŠããããŸããããã ããåã« Issue ã«æžãããŠãã課é¡ãã¯ãªã¢ããããšããã®ã§ã¯ãªãã ããããããªããããããã®ããIssue ã®èæ¯ã起祚è
ã®æå³ãååã«çè§£ããäžã§ããããã¯ãã®ããã¹ãå§¿ã«å°ã ããšãæèããŠããããŸããã Issue ã«æžãããŠããå
容ã®çè§£ãäžååã ã£ããã解決æ¹éãããŸãå®ãŸããªãå Žåã¯éæãããŒãã£ã³ã°ã®æéãèšããŠãIssue 起祚è
ããã¬ãŒããŒãšèªèåãããè¡ããèªèã®çžéããçãŸãããã¹ã³ãã¥ãã±ãŒã·ã§ã³ãæ¥µåæžãããããåãçµã¿ãŸããã æè¡çãªè³ªåã«é¢ããŠãã宿çã«è³ªåã¿ã€ã ãèšããããè€éã«ãªããããªå®è£
ããã€ãŸãããã€ã³ããšãªããããªç®æã«é¢ããŠã¯ã ç»é¢å
±æãçšããŠã¬ãã¥ãŒ ãè¡ããçåç¹ã«é¢ããŠããã®å Žã§ç¢ºèªããŠãè§£æ¶ããŠããããŸããã ç·æ¥äºæ
å®£èšæéäžã ã£ããããäŒç€Ÿå
šäœã§ååãåšå®
å€åã®äœå¶ãšãªã£ãŠããã察é¢ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªããã¡ã§ããããæäŒãå€äŒãå«ããããšãæ°åãã質åãç¡ããŠã質åã¿ã€ã ã§ã®ããŒãã£ã³ã°ã¯å®æçã«å®æœãããªã©ã ã§ããã ãé »ç¹ã«é¡åããããŠãæ°åæ¬äººã®å£°ãšé¡ã確èªãã ããå¿ãããŸããã Issue ãžã®ã¢ãµã€ã³ããå§ãŸã£ãŠãå®è£
-> ã¬ãã¥ãŒäŸé Œ -> QA -> ãªãªãŒã¹ -> Issue 起祚è
ãžã®å ±åãŸã§ãäžé£ã®éçºãããŒãçµéšããŠããããããŒã å
ã§ã®éçºæ¥åã«æ
£ããŠãããããšãã§ããŸããã ãã§ãŒãº 4ïŒæçµå ±å æ°åç ä¿®æåŸã®ããã°ã©ã ãšããŠãã¡ãã¬ãŒåœ¹å¡é£ã«åããæçµå ±åäŒã宿œããŸããã æçµå ±åäŒã®ç®çãšããŠã¯ã次ã®éãã§ãã åŠãã ããšã®ç¥èãæ·±åããã èªãã®åŸæã»äžåŸæãæããå°æ¥ã®æé·èšç»ãç«ãŠã äœç³»çã«æŽçã»ææžåããŠä»è
ãžäŒããã¹ãã«ãåäžããã 圹å¡é£ã«åããŠãã¬ãŒã³ããããšã§ãæ¬é
å±ã«åããæ±ºæè¡šæãšããŠåºåããä»ãã 圹å¡é£ãžã®çºè¡šã§ããããšã«å ããäžäººãããã®çºè¡šæéã«ãå¶éãèšããããŠãããåœæ¥ã®ç·åŒµã¯ããªãã®ãã®ã ã£ããšæããŸãã 忥ã«çºè¡šäŒå ŽãäžèŠããŠããªããŒãµã«ãå
¥å¿µã«è¡ããªã©ãåœæ¥ã®çºè¡šäŒãæåããããããã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã®èªèŠãæã£ãŠãçºè¡šæºåã«åãçµãã§ããŸããã æè¡å¿åãšãããã¯ãå¿åã®äž¡èŒªãç®æããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ç ä¿®ã§ã¯ãæè¡çãªè¬çŸ©ãå®è·µã ãã§çµããã®ã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠå¿
èŠãªåºç€ã身ã«ã€ãããªãéçºããã®ãã远究ãããããã¯ããéãã課é¡è§£æ±ºãå®äœéšããŠãããããšãéèŠããŠããŸãã ã¡ãã¬ãŒã§ã¯ãå»çãã«ã¹ã±ã¢åéã®èª²é¡è§£æ±ºã«æã¿ãããšã³ãžãã¢ãåéããŠããŸãã æ°åã®åŠçã«éãããäžéæ¡çšãè¡ã£ãŠããã®ã§ããšã³ãžãã¢ã®æ¹ã§å°ãã§ãèå³ãæã£ãŠããã ããããæ¯éãé¢è«ã§ã話ãããŸãããã æåŸãŸã§ãèªã¿ããã ããèª ã«ããããšãããããŸããã P.S. æšå¹Žãäžæšå¹Žã®æ°åç ä¿®ã®æ§åã¯ãã¡ããããããããã芧ããã ããŸãã 2020 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠2019 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãå»çä»è·æ±äººãµã€ãããžã§ãã¡ãã¬ãŒãã®éçºãæ
åœããŠãããšã³ãžãã¢ã®å±±ç°ã§ãã ä»å¹Žã®æ°åãšã³ãžãã¢ç ä¿®ã«ãããŠãã¡ã³ã¿ãŒãæ
åœããŸããã ã¡ãã¬ãŒã§ã¯ 2019 幎床ããæ°åæ¡çšãè¡ãªã£ãŠãããä»å¹Ž 2021 幎床㯠5 åã®æ°åããšã³ãžãã¢ãšããŠå
¥ç€ŸããŸããã äŸå¹Žãšåãã 4 æãã 9 æã«ãããŠãçŽ 5 ã¶æéã®æ°åãšã³ãžãã¢ç ä¿®ã宿œããŸããã®ã§ããã®åãçµã¿ããç ä¿®åè¬è
ã§ããæ°åããã®å£°ã亀ããŠã玹ä»ããŸãã æ°åç ä¿®ã®æŠèŠ ä»å¹Žã®æ°åç ä¿®ã®æçµãŽãŒã«ã¯ãã ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã Our Essentials (â») ãäœçŸãã顧客ãžäŸ¡å€æäŸã§ããããã«ãªãããã®åºç€ã身ã«ã€ããçµéšãåŸãããš ããšããŠæ²ããŸããã â») ã¡ãã¬ãŒã®è¡ååå ã¡ãã¬ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ãæè¡ã身ã«ã€ããããšã ãã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠã®åºç€ã身ã«ã€ããã¡ãã¬ãŒã倧åã«ããŠãã䟡å€èгãçè§£ããäœçŸããæèããã£ãŠã顧客ãžã®äŸ¡å€æäŸã«ã€ããŠèªåã®èšèã§è©±ããããã«ãªãããšãŸã§ãç®æããŠããããŸãã ç ä¿®ã¯æšå¹Žåæ§ã倧ããåããŠã4 ã€ã®ãã§ãŒãºã«åºåã£ãŠè¡ããŸããã ãŸããå
šç ä¿®æéãéããŠãåæ°åã«ã¯ã¡ã³ã¿ãŒãäžäººãã€ä»ããŸãããã¡ã³ã¿ãŒã¯ãäžé±éã« 1~2 åã®ããŒã¹ã§æ°åãš 1on1 ããŒãã£ã³ã°ã宿œãããã£ãžã«ã«ãšã¡ã³ã¿ã«ã®äž¡é¢ãæ°é£ããåå¥ã«ãã©ããŒãè¡ããŸããã æ°åç ä¿®ã®å
容 ãã§ãŒãº 1ïŒç€ŸäŒäºº&ã¡ãã¬ãŒåºç€ç ä¿® ãªã¹ã¯ç ä¿® ã€ã³ãµã€ããŒååŒé²æ¢ç ä¿® ã³ã³ãã©ã€ã¢ã³ã¹ç ä¿® æ
å ±ã»ãã¥ãªãã£ç ä¿® ããžãã¹ç ä¿® ããžãã¹ãããŒç ä¿® ããžãã¹ã¹ãã«ç ä¿® ããžãã¹ã¹ã¿ã³ã¹ç ä¿®ïŒå€éšç ä¿®ïŒ ãã§ãŒãº 1 ã§ã¯ã ææãåºãã䟡å€ãçºæ®ããããã«å¿
èŠãªããžãã¹ããŒãœã³ãšããŠã®åºæ¬çãªä»äºã®åã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ãªã¹ã¯ç ä¿®ã§ã¯ãã¡ãã¬ãŒç€Ÿå¡ãšããŠã瀟äŒäººãšããŠã身ã®åšãã§èµ·ãããããªã¹ã¯ã«ã€ããŠèããããã«ãããã®ãªã¹ã¯ãšåãåãããè¬çŸ©åœ¢åŒã§åŠãã§ããããŸããã ããžãã¹ç ä¿®ã§ã¯ã瀟äŒäººãšããŠã®æäœéã®ãããŒãåŠã³ãè«ççæèåãã³ãã¥ãã±ãŒã·ã§ã³åãªã©ããšã³ãžãã¢è·ã«éããªã課é¡è§£æ±ºåãžã€ãªããããŒã¿ãã«ãªç¥èãã座åŠãšã¯ãŒã¯ã·ã§ãããéããŠå®çããŠãããããšãå³ããŸããã ãŸãã瀟äŒäººã®åºæºã§ä»äºãšåãåããé©åãªå ±é£çžã«ãã£ãŠåšå²ãšååããŠããããšã®éèŠæ§ã«ã€ããŠãåŠãã§ããããŸããã æ°åããã®å£° 質ã®é«ããå€éã®ã€ã³ãããã»ã¢ãŠãããããã§ãã äŒããã¡ãŒã«ã®æžãæ¹ãååºã®æž¡ãæ¹ãªã©ã瀟äŒäººã«å¿
é ã®ãããŒãã¹ãã«ãèªèã§ãã ã¯ãŒã¯ãéããŠãèšèã§ã¯çè§£ããŠããŠãè¡åãããšã§ããªãããšãæŽãåºãã ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿® éçºåºç€ 1 ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš äºæ¥ïŒãžã§ãã¡ãã¬ãŒ ã» CLINICS ã»ä»è·ã®ã»ããïŒã®æŠèŠèª¬æ éçºåºç€ç ä¿®ïŒRuby on Rails ãã¥ãŒããªã¢ã«ïŒ éçºå®è·µ ïŒèŠä»¶å®çŸ©ããªãªãŒã¹ãŸã§ïŒ éçºåºç€ 2 æè¡æžã®èŒªèªäŒ ããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿® ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿® äžéã¬ããŒãäœæ äžéå ±åäŒ ãã§ãŒãº 2 ã§ã¯ãæ°åç ä¿®åŸã«éçºæ¥åã«å
¥ã£ãŠããããããã ãšã³ãžãã¢ãšããŠã®åºç€ã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš éçºã«é¢ãããã®ãã§ãŒãºã«ãããŠããèŠä»¶å®çŸ©ãå«ãæ±çšçãªæè¡çã¹ãã«ã¯å¿è«ã®ããšãã¡ãã¬ãŒãšã³ãžãã¢ãå
±éããŠæã€ã¹ã䟡å€èгãªã©ãå
±æããããããã§ãŒãº 2 忥ã¯ã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš ããšé¡ããŠããšã³ãžãã¢ã®å·è¡åœ¹å¡ ç°äžãè¬çŸ©ãè¡ããŸããã è¬çŸ©ã§ã¯ãã ãšã³ãžã㢠ãšã¯ã ãšã³ãžãã¢ã®äŸ¡å€ ãšã¯ã ãããšã³ãžã㢠ãšã¯ãªãã§ããããïŒããšããåãããå§ãŸããè¬çŸ©ã®çµããã«ã¯ããäžåºŠåãåããããããŠç· ãããããæ°åãã¡ãã¬ãŒã®æ±ãããšã³ãžãã¢åã«ã€ããŠèªèº«ã®èšèã§è©±ããããã«èããŠããããŸããã ã¡ãã¬ãŒãæ±ãããšã³ãžãã¢åã«ã€ããŠã¯ãCTO 平山㮠ã¡ãã¬ãŒå¹³å±±ã®äžå€®çªç Ž: THE ãšã³ãžã㢠ã«ãæžãããŠããŸãã®ã§ããããããã°ãããããŠã芧ãã ããã ããã«ãã¡ãã¬ãŒãå±éããåäºæ¥ããã³é¢é£ãããããã¯ãã®æŠèŠèª¬æããããã¯ããããŒãžã£ãŒãè¡ããã¡ãã¬ãŒã§éçºããæçŸ©ããããããŠèªèããŠããããŸããã éçºåºç€ç ä¿® 2 æ¥ç®ããã Ruby on Rails ãã¥ãŒããªã¢ã« ïŒä»¥äžããRails ãã¥ãŒããªã¢ã«ãïŒãææãšãããéçºåºç€ç ä¿®ã«ç§»ããŸããã ã¡ãã¬ãŒã®ãããã¯ã㯠Rails ã§äœãããŠãããã®ãå€ããWeb ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åºç€ã身ã«ã€ããããã«ããRails ãã¥ãŒããªã¢ã«ã®å
容ã宿œããŠããããŸããã åçŽã«ãRails ãã¥ãŒããªã¢ã«ã®å
å®¹ã«æ²¿ã£ãŠããã©ãã©ãšåçµããã®ã§ã¯ãªããéæãåŠãã ããšã¯ Confluence ã«ãŸãšããGitHub äžã§ Pull Request ãäœæãã圢ã§ããœãŒã¹ã³ãŒããå
±æããŠããããŸããã åŠãã ããšãèªåã®èšèã«çœ®ãæããŠã¢ãŠããããããããšã§å埩åŠç¿ãä¿ããPull Request ãäœæããŠãããããšã§ GitHub ã®äœ¿ãæ¹ã«æ
£ããŠãããããšãå³ããŸããã ãŸãããã€ãªãŒã§æäŒãšå€äŒã宿œããŸãããæäŒã¯ä»äºã®ãªãºã ãæŽããããã®é¡åãããå€äŒã¯æ°åãã質åã»ææãå
±æããŠã¡ã³ã¿ãŒãããã«å¯ŸããŠãã£ãŒãããã¯ãããå ŽãšããŠãããã宿œããŸããã ç ä¿®åã«æ¢ã« Rails ãã¥ãŒããªã¢ã«ãäžåšããŠããæ°åãããŸããããäºåšç®ã宿œããŠæ°ããªæ°ä»ããåŸãããAWS ãçšããŠã¯ã©ãŠãäžã«ç°å¢æ§ç¯ããäœæãã Web ã¢ããªã±ãŒã·ã§ã³ããããã€ãããŸã§ãå®è·µããŠããããªã©ãã€ã³ãã©ã«é¢ããŠãçè§£ãæ·±ããŠãããããšãã§ããŸããã æ°åããã®å£° ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäžããããã®å·¥å€«ãç¥ãããšãã§ãã ãã°çºçãåå ç¹å®ãä¿®æ£ããšãããããã°ã®ã¹ããŒãããç ä¿®åºç€ããé£èºçã«äžãã£ã ãããã¯ãã§å©çšããŠãã AWS ã®åçš®ãµãŒãã¹ã®æŠèŠãçè§£ã§ããããšã«å ãããµãŒãã¹éã®ç¹ããããããã¯ãŒã¯ã®æµãã«é¢ããŠãçè§£ãæ·±ããããšãã§ãã éçºå®è·µ éçºåºç€ç ä¿®ã«ãŠ Web ã¢ããªã±ãŒã·ã§ã³éçºã®åºç€ãåŠãã åŸã¯ãã ã¡ãã¬ãŒ/ã°ã«ãŒãäŒç€Ÿã§äœ¿ãæ¥èšªè
åä»ã·ã¹ãã ããéçºé¡æãšããŠãéçºå®è·µç ä¿®ãè¡ããŸããã éçºæ¥åå
šäœã®æµããææ¡ããããšã§ã ããŒã ã§éçºïŒèª²é¡è§£æ±ºïŒããããšãçµéšããä»åŸã®ä»äºã«åœ¹ç«ãããããš ãç®çãšããŸããã æ¬ç ä¿®ã§éæãã¹ãããšãšããŠæ²ããŠãããã®ã¯äž»ã«ã次ã®éãã§ãã ãããžã§ã¯ã管çèœåã身ã«ã€ããããš éçºãã察象ãäœç³»çã«æŽçã§ããèœåãé€ãããš ã·ã¹ãã èšèšã«é¢ããåºç€çãªç©äºãçè§£ããããš ããŒã éçºãçè§£ããããš å質ãçè§£ããããš æ¢ã«æ±ºãŸããã£ã仿§æžã«æ²¿ã£ãŠéçºããã®ã§ã¯ãªããæ°åèªèº«ãçŸç¶ã®å顿æ¡ãèª²é¡æŽçãè¡ã£ãŠããŠãŒã¶ãŒãžäŸ¡å€æäŸããããã«äœãäœãã¹ãããèããããšããå§ãŸãããªãªãŒã¹åŸã®éçšæ¹æ³ãã©ã³ãã³ã°ã³ã¹ãã®ããšãŸã§èãææ¡ããŠããããŸããã éçºå®è·µç ä¿®ã¯çŽ 1 ã¶æã®æéããããŠè¡ããŸããã倧ãŸããªæµããšããŠã¯ã次ã®éãã§ãã èŠä»¶å®çŸ©ïŒãã¢ãªã³ã°ã»çŸç¶ææ¡ã»èª²é¡æŽçã»èŠæ±åæã»æ©èœ/éæ©èœèŠä»¶ã®æŽãåºãã» UI èæ¡ïŒ ãããžã§ã¯ãèšç»ïŒåœ¹å²åæ
ã» WBS/ã¬ã³ããã£ãŒãäœæïŒ èšèšïŒç»é¢èšèšã»æ©èœèšèšã»ããŒã¿ã¢ããªã³ã°ã»æ¹åŒèšèšã»ã€ã³ãã©èšèšïŒ éçºïŒå®è£
ã»ã³ãŒãã¬ãã¥ãŒïŒ QAïŒãã¹ãèšèšã»ãã¹ãïŒ ææçºè¡šïŒææç©ãé¢ä¿è
ãžãã¬ãŒã³ã»ãªãªãŒã¹ïŒ æ¹åŒèšèšã®äžéšãšããŠãéçºã«äœ¿çšããèšèªãªã©ã®éžå®ãæ°åèªèº«ãè¡ããŸããã ä»åäœæãã瀟å¡åã管çç»é¢ãšæ¥èšªè
åãç»é¢ã¯ãããã SPAïŒäžéšãPWAïŒã®ã¢ãŒããã¯ãã£ãæ¡çšããäž»ãªã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã«é¢ããŠãããã³ããšã³ã㯠TypeScript , React , Next.js , Chakra UI , Ionic Framework ãããã¯ãšã³ã㯠Ruby on RailsïŒAPI ã¢ãŒãïŒãããããå©çšããããšãšãªããŸããã éžå®çç±ãšããŠã¯äž»ã«ã次ã®éãã§ãã TypeScript, ReactïŒäž¡ç»é¢å
±éïŒ ããžãã¯ãããã³ãã¬ãŒããŸã§ã®å
šãŠã®ã³ãŒããéçåä»ãã§æžãããšãã§ããå
ç¢æ§ã«åªããŠãããã Next.js, Chakra UIïŒç€Ÿå¡åã管çç»é¢ïŒ ãŒãã³ã³ãã£ã°ã§ãã«ããã¬ã³ããªã³ã°ãæé©åã§ãããã ã¢ã¯ã»ã·ããªãã£ã«åªãããªãã㪠UI ãçŽ æ©ãæ§ç¯ã§ãããã Ionic FrameworkïŒæ¥èšªè
åãç»é¢ïŒ iPad äžã§ããã€ãã£ãã¢ããªã®ãã㪠UI/UX ãæäŸãããã Ruby on Rails API ã¢ãŒã ããã³ããšã³ããšããã¯ãšã³ããåé¢ããŠççµåã«ãããã çæéã§æ§ç¯ãããã 瀟å
ã§ããã䜿ãããŠããã¡ã³ããã³ã¹ãããããã ã€ã³ãã©ã¯ AWS ãæ¡çšããEC2, S3, RDS, CloudFront, Route53, CloudWatch ãªã©ã®ãµãŒãã¹ãå©çšããŸããã çµæçã«ãæ¬ç ä¿®ããã°ã©ã ã®ææç©ãšããŠãªãªãŒã¹ãããã·ã¹ãã ã¯ã Medley Entrance ããšããååã§ã瀟å
ããŒã«ãšããŠçŸåšãæ¯æ¥çšŒåããŠããããŠãŒã¶ãŒãšããŠã¡ãã¬ãŒ/ã°ã«ãŒã瀟å¡ã ãã§ã¯ãªããæ¥èšªè
ã®æ¹ã
ã«ã䜿ã£ãŠããã ããŠããŸãã Medley EntranceïŒäžïŒç€Ÿå¡åã管çç»é¢ãäžïŒæ¥èšªè
åãç»é¢ïŒ ããŒã ã§èª²é¡è§£æ±ºã«èšã¿ãäŸ¡å€æäŸãŸã§ã®å®çžŸãæ®ããããšã¯èªä¿¡ã«ã€ãªãããéçºå®è·µç ä¿®ã®ãããããšããŠãæããŠããããã®ã§ã¯ãªãã§ããããã èŠä»¶å®çŸ©ãªã©ã®æéäžãæ³å®ãããã¹ã ãŒãºã«é²ããããªãã£ãæãä»è²¬ã«ãããåã
ããªãŒããŒã·ãããçºæ®ãã建èšçã«é²ããŠããæ°åã®æ§åãã¡ã³ã¿ãŒã®äžäººãšããŠåã§èŠãããŠããããŸããã ãã® 1 ã¶æéã®éçºå®è·µç ä¿®ãéããŠãæè¡åã¯ããããšãªããã課é¡è§£æ±ºã«å¯Ÿããååãªç±æãšäž»äœæ§ãæ°åããæãããããšãŠãé Œãããå°è±¡ãšããŠæ®ããŸããã æ°åããã®å£° éçºã®äžã§ã®æ¹éãæèããŠèšèš/å®è£
ããããšãã§ãã(ã·ã³ãã«ã«ãã) QA ãšã¯ããããäœããšãããªãµãŒãããå
¥ããæèè
ã®èãæ¹ãè»žã«æ¹éãæ±ºããŠããå§ãããã åã
ãæé©ãªããã©ãŒãã³ã¹ãçºæ®ã§ããç°å¢ã¥ãããæèããŠãé«éãªæææ±ºå®ãå¯èœãªäœå¶ãæŽããããšãã§ãã èŠä»¶ã決ãŸããã£ãŠããªãäžã§èšèšããã®ã¯é£ããã£ã éçºã¿ã¹ã¯ãéäžããŠããæã«ããããžã§ã¯ãå
šäœã®çŸç¶ãææ¡ã§ããŠããªãã£ã æç« ãäœãã¹ãã«ãè¶³ããŠããªã æè¡æžã®èŒªèªäŒ ãã§ãŒãº 2 ã®éçºåºç€ 2 ã®èŒªèªäŒã§ã¯ã ãWeb ãæ¯ããæè¡ -HTTPãURIãHTMLããã㊠RESTã ã顿æžç±ãšããŠã7 æ¥éã«æž¡ã£ãŠæ¯æ¥ãæ¬¡ã®æé ã§å®æœããŸããã åå è
ãåãããŒãããããããèªãã§ãããæžç±ããåŠãã ããšãããããªã©ã§èª¿ã¹ãŠãè§£æ¶ããããªãã£ãçåç¹ãªã©ããŸãšãã ãã®å
容ãããšã«ã倿¹ã®ããŒãã£ã³ã°æã«ãããŠãåèªãçºè¡šããŠãã£ã¹ã«ãã·ã§ã³ãè¡ã ãã£ã¹ã«ãã·ã§ã³ããå
容ã¯è°äºé²ã«ãŸãšãã 茪èªäŒã¯ä»è
ããã®åŠã³ãå
±æããŠãããããšã§ãèªåã«ã¯ãªãã£ãèŠç¹ã»æ°ä»ããç²åŸãããã®æžç±ãžã®çè§£ãããæ·±ãããã广ããããŸãã æ¬ç ä¿®ããã°ã©ã ã«ããã茪èªäŒã®ç®çãšããŠã¯ã Web ãµãŒãã¹ãéçºããŠããäžã§å¿
èŠãšãªãç¥èãžè§Šããããšã«ãããä»åŸç²åŸããŠããã¹ãç¥èã®ããŒã¹ã©ã€ã³ãçè§£ããããš ã§ãããã茪èªäŒãªãã§ã¯ã®ã¡ãªããã»æ¥œãããæ°åã«å®æããŠããããããšãã坿¬¡çãªå¹æãšããŠãã£ããšæããŸãã æ°åããã®å£° Web ã®åºæ¬çãªç¥èãããªãç»å Žããã®ãããçè§£ããªããç¶²çŸ
çã«åŠã¶ããšãã§ãã ææžã§ãŸãšããåŸã«ãå£ã§èª¬æããããšãåŠãã å
容ã®å®çã«è¯ããšæãã ãããŸã§ãªããšãªãå®è£
ããŠããããšã®ä»çµã¿ãåŠã¶ããšã§ãç¥èãšããŠå®çããããšãã§ãã äžéå ±åäŒ ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿®æåŸã®ç ä¿®ããã°ã©ã ã§ããäžéå ±åäŒã«åããŠãããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ããã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ã宿œããŸããã äžèšã¹ãã«ãå¿
èŠãšãªãèæ¯ã¯ã次ã®éãã§ãã ãšã³ãžãã¢ãªã³ã°ãéãã課é¡è§£æ±ºãšã¯ããã°ã©ã ãæžãã ãã§ã¯è§£æ±ºããªãå Žé¢ããã èæ¯ãç®çãæ£ããã¹ããŒã¯ãã«ããŒãžå
±æããªããããŒã ãšããŠåãçµãã§ããããšã«ãªã äŒãããããšãæç« ãšããŠæŽçããä»è
ãžåãããããäŒããŠããããšãæ±ãããã ãŸããã¡ãã¬ãŒã®è¡ååå Our Essentials ãæ§æããèŠçŽ ãšããŠããããã¥ã¡ã³ãããªãã³ããå
šãŠãæç¢ºã«ããšããé
ç®ãå«ãŸããŠãããããããå®çŸããããã«ãããšãŠãéèŠãªã¹ãã«ãšããŠã¡ãã¬ãŒã¯èããŠããŸãã æ°åç ä¿®ãçµãã£ãåŸãããšã³ãžãã¢ãšããŠæè¡çãªã¹ãã«ã身ã«ã€ããæ©äŒã¯æ¥åžžçã«å€ããããŸãããäžèšã®ãããªã¹ãã«ããŸãšããŠç¿åŸããæ©äŒã¯å°ãªãããããã®ãããªç ä¿®ã瀟äŒäººã®ã¯ããããåããŠããããšã§ããã®åŸã®äŒžã³ãããéã£ãŠããã®ã§ã¯ãªãããšæããŸãã ç ä¿®ãçµãã£ãåŸã¯ãåèªã§å ±åäŒçšã®è³æãäœæããç ä¿®è¬åž«ããã®æ·»åãåããŸããã äžéå ±åäŒã¯åéšçœ²ã®éçºãããŒãžã£ãŒãçºè¡šçžæãšããŠãåœæ¥ã¯çšããç·åŒµæããã£ãŠãè¯ãé°å²æ°ã§å ±åäŒãçµããããŸããã ãã§ãŒãº 3ïŒäºæ¥éš OJT äºæ¥éšç ä¿® åç· åœ¹è±ç°ããã®è¬çŸ© CLINICS äºæ¥éšç ä¿® ãžã§ãã¡ãã¬ãŒäºæ¥éšç ä¿® éçº OJT ã·ã¹ãã å
šäœå説æ ç°å¢æ§ç¯ åãããã¯ãã®éçºããŒã ã§ã® OJT ãã§ãŒãº 3 ã§ã¯ã 顧客ã®èª²é¡ãšã顧客ãžã®äŸ¡å€æäŸã®ããã®åããŒã ã®é£æºãäœæããã¡ãã¬ãŒã®é¡§å®¢æäŸäŸ¡å€ãèªåã®èšèã§è©±ããããã«ãªãããš ããŽãŒã«ãšããŸããã ãã§ãŒãº 3 ã®ã¯ããã«ãåç· åœ¹è±ç°ã«ããæ¥æ¬ã®å»çã®èª²é¡ãšã¡ãã¬ãŒã®åãçµã¿ã«é¢ããè¬çŸ©ãåè¬ããŠããããŸããã æç¶å¯èœãªå»çäœå¶ãæ§ç¯ããŠããããã«ã¡ãã¬ãŒãæãã¹ãããšãªã©ã®è©±ãèããåŸã«ãæ°åããã®è³ªåã®åãçãã«ãã£ãŠçè§£ãæ·±ããã¡ãã¬ãŒã®ç€ŸäŒçæçŸ©ããããããŠèªèããŠãããããšã³ãžãã¢ãšããŠã ãã§ã¯ãªãã ã¡ãã¬ãŒç€Ÿå¡ãšããŠã®èªèŠ ã匷ããŠããããŸããã äºæ¥éšç ä¿® éçº OJT ã§æãåããåã«ãèªåãã¡ãäœã®ããã«éçºããã®ããå
·äœçã«ã€ã¡ãŒãžã§ãããããæ¬¡ã®ããã«ãåçŸå Žã«åå ããŠããããŸããã èŠèŸŒé¡§å®¢ãžã®æ¶é»æ¥åèŠåŠ åè«åã®ç€Ÿå
ããŒãã£ã³ã°åå åè«çŸå Žååž å®äŸäŒè°åå äºæ¥éšã®ã¹ã¿ãããã顧客ã®èª²é¡ã«å¯ŸããŠãã©ã®ãããªå¯Ÿå¿ãããŠããŠãã©ã®ããã«ãããã¯ãã説æããŠããã®ããäºæ¥éšã®åããŒã ããã©ã®ããã«é£æºããŠæçµçã«é¡§å®¢ã«äŸ¡å€ãå±ããã®ãã®å
šäœèгãç¥ã£ãŠãããããšãçããšããŠããŸããã éçºããŒã ã®ãšã³ãžãã¢ã¯æ¥åäžããããã¯ãã®ãšã³ããŠãŒã¶ãŒã§ãã顧客ã®å£°ãªã©ãåè«ã®ã¿ã€ãã³ã°ããèããæ©äŒã¯ãªããªãç¡ãã®ã§ãç ä¿®ãéããŠè©±ãèããããšã¯ãä»åŸã®éçºã¢ãããŒã·ã§ã³ã«ã圱é¿ããè¯ãæ©äŒã ã£ããšæããŸãã æ°åããã®å£° ãŠãŒã¶ãŒã顧客ãäºæ¥éšãæ±ãã課é¡ã確èªã§ããããšã§ãéçºä»¥å€ã«ãç®ãåãããã£ããã«ãªãè¯ãã£ã åéšçœ²ã KPI ãšããŠå®ããŠããæ°åãç¥ãããšãã§ããéçºã«éããŠããŠããæœçã®åœ±é¿ç®æãã©ã®éšåããçè§£ã§ããäžã§ãéçºã«åãçµãããšãã§ããããã«ãªã£ã åéšçœ²ã®ããŒãã£ã³ã°ã«åå ããããšã§ãåéšçœ²ãã©ã®ãããªèãã§äœãç®æããŠããã®ããçè§£ã§ããã¡ãã¬ãŒå
šäœãšããŠç®æããŠããæ¹åæ§ãæŽãã éçº OJT äºæ¥éšç ä¿®ã«ç¶ãéçº OJT ã§ã¯ã ãžã§ãã¡ãã¬ãŒ ã CLINICS ã ä»è·ã®ã»ãã ã®éçºããŒã ã«åãããŠãç ä¿®ã宿œããŸããã OJT é
å±å
ã§ã¯ãã¡ã³ã¿ãŒãšã¯å¥ã«ããã¬ãŒããŒãä»ããŠæ¥åã®é²ãæ¹ãªã©ããµããŒãããŸããããã¬ãŒããŒã¯é
å±å
ã®å
茩ãšã³ãžãã¢ãæ
åœããŸããã OJT ã®æµããšããŠã¯ã忥ã«ããããã¯ããã©ã®ããã«åããŠããã®ããã·ã¹ãã å
šäœåãææ¡ããããšããå§ãŸããåèªãããã¥ã¡ã³ãã«æ²¿ã£ãŠãPC ã«ããŒã«ã«éçºç°å¢ãã»ããã¢ããããŸããã ãã®åŸã¯ãä»ã®å
茩ãšã³ãžãã¢ãšåæ§ã«ãGitHub Issue ã§ç®¡çãããŠãã課é¡ãè§£æ¶ããããšãæ¥ã
ã®ç®æšãšããŠããªããŠããããŸããããã ããåã« Issue ã«æžãããŠãã課é¡ãã¯ãªã¢ããããšããã®ã§ã¯ãªãã ããããããªããããããã®ããIssue ã®èæ¯ã起祚è
ã®æå³ãååã«çè§£ããäžã§ããããã¯ãã®ããã¹ãå§¿ã«å°ã ããšãæèããŠããããŸããã Issue ã«æžãããŠããå
容ã®çè§£ãäžååã ã£ããã解決æ¹éãããŸãå®ãŸããªãå Žåã¯éæãããŒãã£ã³ã°ã®æéãèšããŠãIssue 起祚è
ããã¬ãŒããŒãšèªèåãããè¡ããèªèã®çžéããçãŸãããã¹ã³ãã¥ãã±ãŒã·ã§ã³ãæ¥µåæžãããããåãçµã¿ãŸããã æè¡çãªè³ªåã«é¢ããŠãã宿çã«è³ªåã¿ã€ã ãèšããããè€éã«ãªããããªå®è£
ããã€ãŸãããã€ã³ããšãªããããªç®æã«é¢ããŠã¯ã ç»é¢å
±æãçšããŠã¬ãã¥ãŒ ãè¡ããçåç¹ã«é¢ããŠããã®å Žã§ç¢ºèªããŠãè§£æ¶ããŠããããŸããã ç·æ¥äºæ
å®£èšæéäžã ã£ããããäŒç€Ÿå
šäœã§ååãåšå®
å€åã®äœå¶ãšãªã£ãŠããã察é¢ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªããã¡ã§ããããæäŒãå€äŒãå«ããããšãæ°åãã質åãç¡ããŠã質åã¿ã€ã ã§ã®ããŒãã£ã³ã°ã¯å®æçã«å®æœãããªã©ã ã§ããã ãé »ç¹ã«é¡åããããŠãæ°åæ¬äººã®å£°ãšé¡ã確èªãã ããå¿ãããŸããã Issue ãžã®ã¢ãµã€ã³ããå§ãŸã£ãŠãå®è£
-> ã¬ãã¥ãŒäŸé Œ -> QA -> ãªãªãŒã¹ -> Issue 起祚è
ãžã®å ±åãŸã§ãäžé£ã®éçºãããŒãçµéšããŠããããããŒã å
ã§ã®éçºæ¥åã«æ
£ããŠãããããšãã§ããŸããã ãã§ãŒãº 4ïŒæçµå ±å æ°åç ä¿®æåŸã®ããã°ã©ã ãšããŠãã¡ãã¬ãŒåœ¹å¡é£ã«åããæçµå ±åäŒã宿œããŸããã æçµå ±åäŒã®ç®çãšããŠã¯ã次ã®éãã§ãã åŠãã ããšã®ç¥èãæ·±åããã èªãã®åŸæã»äžåŸæãæããå°æ¥ã®æé·èšç»ãç«ãŠã äœç³»çã«æŽçã»ææžåããŠä»è
ãžäŒããã¹ãã«ãåäžããã 圹å¡é£ã«åããŠãã¬ãŒã³ããããšã§ãæ¬é
å±ã«åããæ±ºæè¡šæãšããŠåºåããä»ãã 圹å¡é£ãžã®çºè¡šã§ããããšã«å ããäžäººãããã®çºè¡šæéã«ãå¶éãèšããããŠãããåœæ¥ã®ç·åŒµã¯ããªãã®ãã®ã ã£ããšæããŸãã 忥ã«çºè¡šäŒå ŽãäžèŠããŠããªããŒãµã«ãå
¥å¿µã«è¡ããªã©ãåœæ¥ã®çºè¡šäŒãæåããããããã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã®èªèŠãæã£ãŠãçºè¡šæºåã«åãçµãã§ããŸããã æè¡å¿åãšãããã¯ãå¿åã®äž¡èŒªãç®æããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ç ä¿®ã§ã¯ãæè¡çãªè¬çŸ©ãå®è·µã ãã§çµããã®ã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠå¿
èŠãªåºç€ã身ã«ã€ãããªãéçºããã®ãã远究ãããããã¯ããéãã課é¡è§£æ±ºãå®äœéšããŠãããããšãéèŠããŠããŸãã ã¡ãã¬ãŒã§ã¯ãå»çãã«ã¹ã±ã¢åéã®èª²é¡è§£æ±ºã«æã¿ãããšã³ãžãã¢ãåéããŠããŸãã æ°åã®åŠçã«éãããäžéæ¡çšãè¡ã£ãŠããã®ã§ããšã³ãžãã¢ã®æ¹ã§å°ãã§ãèå³ãæã£ãŠããã ããããæ¯éãé¢è«ã§ã話ãããŸãããã æåŸãŸã§ãèªã¿ããã ããèª ã«ããããšãããããŸããã P.S. æšå¹Žãäžæšå¹Žã®æ°åç ä¿®ã®æ§åã¯ãã¡ããããããããã芧ããã ããŸãã 2020 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠2019 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãå»çä»è·æ±äººãµã€ãããžã§ãã¡ãã¬ãŒãã®éçºãæ
åœããŠãããšã³ãžãã¢ã®å±±ç°ã§ãã ä»å¹Žã®æ°åãšã³ãžãã¢ç ä¿®ã«ãããŠãã¡ã³ã¿ãŒãæ
åœããŸããã ã¡ãã¬ãŒã§ã¯ 2019 幎床ããæ°åæ¡çšãè¡ãªã£ãŠãããä»å¹Ž 2021 幎床㯠5 åã®æ°åããšã³ãžãã¢ãšããŠå
¥ç€ŸããŸããã äŸå¹Žãšåãã 4 æãã 9 æã«ãããŠãçŽ 5 ã¶æéã®æ°åãšã³ãžãã¢ç ä¿®ã宿œããŸããã®ã§ããã®åãçµã¿ããç ä¿®åè¬è
ã§ããæ°åããã®å£°ã亀ããŠã玹ä»ããŸãã æ°åç ä¿®ã®æŠèŠ ä»å¹Žã®æ°åç ä¿®ã®æçµãŽãŒã«ã¯ãã ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã Our Essentials (â») ãäœçŸãã顧客ãžäŸ¡å€æäŸã§ããããã«ãªãããã®åºç€ã身ã«ã€ããçµéšãåŸãããš ããšããŠæ²ããŸããã â») ã¡ãã¬ãŒã®è¡ååå ã¡ãã¬ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ãæè¡ã身ã«ã€ããããšã ãã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠã®åºç€ã身ã«ã€ããã¡ãã¬ãŒã倧åã«ããŠãã䟡å€èгãçè§£ããäœçŸããæèããã£ãŠã顧客ãžã®äŸ¡å€æäŸã«ã€ããŠèªåã®èšèã§è©±ããããã«ãªãããšãŸã§ãç®æããŠããããŸãã ç ä¿®ã¯æšå¹Žåæ§ã倧ããåããŠã4 ã€ã®ãã§ãŒãºã«åºåã£ãŠè¡ããŸããã ãŸããå
šç ä¿®æéãéããŠãåæ°åã«ã¯ã¡ã³ã¿ãŒãäžäººãã€ä»ããŸãããã¡ã³ã¿ãŒã¯ãäžé±éã« 1~2 åã®ããŒã¹ã§æ°åãš 1on1 ããŒãã£ã³ã°ã宿œãããã£ãžã«ã«ãšã¡ã³ã¿ã«ã®äž¡é¢ãæ°é£ããåå¥ã«ãã©ããŒãè¡ããŸããã æ°åç ä¿®ã®å
容 ãã§ãŒãº 1ïŒç€ŸäŒäºº&ã¡ãã¬ãŒåºç€ç ä¿® ãªã¹ã¯ç ä¿® ã€ã³ãµã€ããŒååŒé²æ¢ç ä¿® ã³ã³ãã©ã€ã¢ã³ã¹ç ä¿® æ
å ±ã»ãã¥ãªãã£ç ä¿® ããžãã¹ç ä¿® ããžãã¹ãããŒç ä¿® ããžãã¹ã¹ãã«ç ä¿® ããžãã¹ã¹ã¿ã³ã¹ç ä¿®ïŒå€éšç ä¿®ïŒ ãã§ãŒãº 1 ã§ã¯ã ææãåºãã䟡å€ãçºæ®ããããã«å¿
èŠãªããžãã¹ããŒãœã³ãšããŠã®åºæ¬çãªä»äºã®åã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ãªã¹ã¯ç ä¿®ã§ã¯ãã¡ãã¬ãŒç€Ÿå¡ãšããŠã瀟äŒäººãšããŠã身ã®åšãã§èµ·ãããããªã¹ã¯ã«ã€ããŠèããããã«ãããã®ãªã¹ã¯ãšåãåãããè¬çŸ©åœ¢åŒã§åŠãã§ããããŸããã ããžãã¹ç ä¿®ã§ã¯ã瀟äŒäººãšããŠã®æäœéã®ãããŒãåŠã³ãè«ççæèåãã³ãã¥ãã±ãŒã·ã§ã³åãªã©ããšã³ãžãã¢è·ã«éããªã課é¡è§£æ±ºåãžã€ãªããããŒã¿ãã«ãªç¥èãã座åŠãšã¯ãŒã¯ã·ã§ãããéããŠå®çããŠãããããšãå³ããŸããã ãŸãã瀟äŒäººã®åºæºã§ä»äºãšåãåããé©åãªå ±é£çžã«ãã£ãŠåšå²ãšååããŠããããšã®éèŠæ§ã«ã€ããŠãåŠãã§ããããŸããã æ°åããã®å£° 質ã®é«ããå€éã®ã€ã³ãããã»ã¢ãŠãããããã§ãã äŒããã¡ãŒã«ã®æžãæ¹ãååºã®æž¡ãæ¹ãªã©ã瀟äŒäººã«å¿
é ã®ãããŒãã¹ãã«ãèªèã§ãã ã¯ãŒã¯ãéããŠãèšèã§ã¯çè§£ããŠããŠãè¡åãããšã§ããªãããšãæŽãåºãã ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿® éçºåºç€ 1 ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš äºæ¥ïŒãžã§ãã¡ãã¬ãŒ ã» CLINICS ã»ä»è·ã®ã»ããïŒã®æŠèŠèª¬æ éçºåºç€ç ä¿®ïŒRuby on Rails ãã¥ãŒããªã¢ã«ïŒ éçºå®è·µ ïŒèŠä»¶å®çŸ©ããªãªãŒã¹ãŸã§ïŒ éçºåºç€ 2 æè¡æžã®èŒªèªäŒ ããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿® ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿® äžéã¬ããŒãäœæ äžéå ±åäŒ ãã§ãŒãº 2 ã§ã¯ãæ°åç ä¿®åŸã«éçºæ¥åã«å
¥ã£ãŠããããããã ãšã³ãžãã¢ãšããŠã®åºç€ã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš éçºã«é¢ãããã®ãã§ãŒãºã«ãããŠããèŠä»¶å®çŸ©ãå«ãæ±çšçãªæè¡çã¹ãã«ã¯å¿è«ã®ããšãã¡ãã¬ãŒãšã³ãžãã¢ãå
±éããŠæã€ã¹ã䟡å€èгãªã©ãå
±æããããããã§ãŒãº 2 忥ã¯ã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš ããšé¡ããŠããšã³ãžãã¢ã®å·è¡åœ¹å¡ ç°äžãè¬çŸ©ãè¡ããŸããã è¬çŸ©ã§ã¯ãã ãšã³ãžã㢠ãšã¯ã ãšã³ãžãã¢ã®äŸ¡å€ ãšã¯ã ãããšã³ãžã㢠ãšã¯ãªãã§ããããïŒããšããåãããå§ãŸããè¬çŸ©ã®çµããã«ã¯ããäžåºŠåãåããããããŠç· ãããããæ°åãã¡ãã¬ãŒã®æ±ãããšã³ãžãã¢åã«ã€ããŠèªèº«ã®èšèã§è©±ããããã«èããŠããããŸããã ã¡ãã¬ãŒãæ±ãããšã³ãžãã¢åã«ã€ããŠã¯ãCTO 平山㮠ã¡ãã¬ãŒå¹³å±±ã®äžå€®çªç Ž: THE ãšã³ãžã㢠ã«ãæžãããŠããŸãã®ã§ããããããã°ãããããŠã芧ãã ããã ããã«ãã¡ãã¬ãŒãå±éããåäºæ¥ããã³é¢é£ãããããã¯ãã®æŠèŠèª¬æããããã¯ããããŒãžã£ãŒãè¡ããã¡ãã¬ãŒã§éçºããæçŸ©ããããããŠèªèããŠããããŸããã éçºåºç€ç ä¿® 2 æ¥ç®ããã Ruby on Rails ãã¥ãŒããªã¢ã« ïŒä»¥äžããRails ãã¥ãŒããªã¢ã«ãïŒãææãšãããéçºåºç€ç ä¿®ã«ç§»ããŸããã ã¡ãã¬ãŒã®ãããã¯ã㯠Rails ã§äœãããŠãããã®ãå€ããWeb ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åºç€ã身ã«ã€ããããã«ããRails ãã¥ãŒããªã¢ã«ã®å
容ã宿œããŠããããŸããã åçŽã«ãRails ãã¥ãŒããªã¢ã«ã®å
å®¹ã«æ²¿ã£ãŠããã©ãã©ãšåçµããã®ã§ã¯ãªããéæãåŠãã ããšã¯ Confluence ã«ãŸãšããGitHub äžã§ Pull Request ãäœæãã圢ã§ããœãŒã¹ã³ãŒããå
±æããŠããããŸããã åŠãã ããšãèªåã®èšèã«çœ®ãæããŠã¢ãŠããããããããšã§å埩åŠç¿ãä¿ããPull Request ãäœæããŠãããããšã§ GitHub ã®äœ¿ãæ¹ã«æ
£ããŠãããããšãå³ããŸããã ãŸãããã€ãªãŒã§æäŒãšå€äŒã宿œããŸãããæäŒã¯ä»äºã®ãªãºã ãæŽããããã®é¡åãããå€äŒã¯æ°åãã質åã»ææãå
±æããŠã¡ã³ã¿ãŒãããã«å¯ŸããŠãã£ãŒãããã¯ãããå ŽãšããŠãããã宿œããŸããã ç ä¿®åã«æ¢ã« Rails ãã¥ãŒããªã¢ã«ãäžåšããŠããæ°åãããŸããããäºåšç®ã宿œããŠæ°ããªæ°ä»ããåŸãããAWS ãçšããŠã¯ã©ãŠãäžã«ç°å¢æ§ç¯ããäœæãã Web ã¢ããªã±ãŒã·ã§ã³ããããã€ãããŸã§ãå®è·µããŠããããªã©ãã€ã³ãã©ã«é¢ããŠãçè§£ãæ·±ããŠãããããšãã§ããŸããã æ°åããã®å£° ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäžããããã®å·¥å€«ãç¥ãããšãã§ãã ãã°çºçãåå ç¹å®ãä¿®æ£ããšãããããã°ã®ã¹ããŒãããç ä¿®åºç€ããé£èºçã«äžãã£ã ãããã¯ãã§å©çšããŠãã AWS ã®åçš®ãµãŒãã¹ã®æŠèŠãçè§£ã§ããããšã«å ãããµãŒãã¹éã®ç¹ããããããã¯ãŒã¯ã®æµãã«é¢ããŠãçè§£ãæ·±ããããšãã§ãã éçºå®è·µ éçºåºç€ç ä¿®ã«ãŠ Web ã¢ããªã±ãŒã·ã§ã³éçºã®åºç€ãåŠãã åŸã¯ãã ã¡ãã¬ãŒ/ã°ã«ãŒãäŒç€Ÿã§äœ¿ãæ¥èšªè
åä»ã·ã¹ãã ããéçºé¡æãšããŠãéçºå®è·µç ä¿®ãè¡ããŸããã éçºæ¥åå
šäœã®æµããææ¡ããããšã§ã ããŒã ã§éçºïŒèª²é¡è§£æ±ºïŒããããšãçµéšããä»åŸã®ä»äºã«åœ¹ç«ãããããš ãç®çãšããŸããã æ¬ç ä¿®ã§éæãã¹ãããšãšããŠæ²ããŠãããã®ã¯äž»ã«ã次ã®éãã§ãã ãããžã§ã¯ã管çèœåã身ã«ã€ããããš éçºãã察象ãäœç³»çã«æŽçã§ããèœåãé€ãããš ã·ã¹ãã èšèšã«é¢ããåºç€çãªç©äºãçè§£ããããš ããŒã éçºãçè§£ããããš å質ãçè§£ããããš æ¢ã«æ±ºãŸããã£ã仿§æžã«æ²¿ã£ãŠéçºããã®ã§ã¯ãªããæ°åèªèº«ãçŸç¶ã®å顿æ¡ãèª²é¡æŽçãè¡ã£ãŠããŠãŒã¶ãŒãžäŸ¡å€æäŸããããã«äœãäœãã¹ãããèããããšããå§ãŸãããªãªãŒã¹åŸã®éçšæ¹æ³ãã©ã³ãã³ã°ã³ã¹ãã®ããšãŸã§èãææ¡ããŠããããŸããã éçºå®è·µç ä¿®ã¯çŽ 1 ã¶æã®æéããããŠè¡ããŸããã倧ãŸããªæµããšããŠã¯ã次ã®éãã§ãã èŠä»¶å®çŸ©ïŒãã¢ãªã³ã°ã»çŸç¶ææ¡ã»èª²é¡æŽçã»èŠæ±åæã»æ©èœ/éæ©èœèŠä»¶ã®æŽãåºãã» UI èæ¡ïŒ ãããžã§ã¯ãèšç»ïŒåœ¹å²åæ
ã» WBS/ã¬ã³ããã£ãŒãäœæïŒ èšèšïŒç»é¢èšèšã»æ©èœèšèšã»ããŒã¿ã¢ããªã³ã°ã»æ¹åŒèšèšã»ã€ã³ãã©èšèšïŒ éçºïŒå®è£
ã»ã³ãŒãã¬ãã¥ãŒïŒ QAïŒãã¹ãèšèšã»ãã¹ãïŒ ææçºè¡šïŒææç©ãé¢ä¿è
ãžãã¬ãŒã³ã»ãªãªãŒã¹ïŒ æ¹åŒèšèšã®äžéšãšããŠãéçºã«äœ¿çšããèšèªãªã©ã®éžå®ãæ°åèªèº«ãè¡ããŸããã ä»åäœæãã瀟å¡åã管çç»é¢ãšæ¥èšªè
åãç»é¢ã¯ãããã SPAïŒäžéšãPWAïŒã®ã¢ãŒããã¯ãã£ãæ¡çšããäž»ãªã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã«é¢ããŠãããã³ããšã³ã㯠TypeScript , React , Next.js , Chakra UI , Ionic Framework ãããã¯ãšã³ã㯠Ruby on RailsïŒAPI ã¢ãŒãïŒãããããå©çšããããšãšãªããŸããã éžå®çç±ãšããŠã¯äž»ã«ã次ã®éãã§ãã TypeScript, ReactïŒäž¡ç»é¢å
±éïŒ ããžãã¯ãããã³ãã¬ãŒããŸã§ã®å
šãŠã®ã³ãŒããéçåä»ãã§æžãããšãã§ããå
ç¢æ§ã«åªããŠãããã Next.js, Chakra UIïŒç€Ÿå¡åã管çç»é¢ïŒ ãŒãã³ã³ãã£ã°ã§ãã«ããã¬ã³ããªã³ã°ãæé©åã§ãããã ã¢ã¯ã»ã·ããªãã£ã«åªãããªãã㪠UI ãçŽ æ©ãæ§ç¯ã§ãããã Ionic FrameworkïŒæ¥èšªè
åãç»é¢ïŒ iPad äžã§ããã€ãã£ãã¢ããªã®ãã㪠UI/UX ãæäŸãããã Ruby on Rails API ã¢ãŒã ããã³ããšã³ããšããã¯ãšã³ããåé¢ããŠççµåã«ãããã çæéã§æ§ç¯ãããã 瀟å
ã§ããã䜿ãããŠããã¡ã³ããã³ã¹ãããããã ã€ã³ãã©ã¯ AWS ãæ¡çšããEC2, S3, RDS, CloudFront, Route53, CloudWatch ãªã©ã®ãµãŒãã¹ãå©çšããŸããã çµæçã«ãæ¬ç ä¿®ããã°ã©ã ã®ææç©ãšããŠãªãªãŒã¹ãããã·ã¹ãã ã¯ã Medley Entrance ããšããååã§ã瀟å
ããŒã«ãšããŠçŸåšãæ¯æ¥çšŒåããŠããããŠãŒã¶ãŒãšããŠã¡ãã¬ãŒ/ã°ã«ãŒã瀟å¡ã ãã§ã¯ãªããæ¥èšªè
ã®æ¹ã
ã«ã䜿ã£ãŠããã ããŠããŸãã Medley EntranceïŒäžïŒç€Ÿå¡åã管çç»é¢ãäžïŒæ¥èšªè
åãç»é¢ïŒ ããŒã ã§èª²é¡è§£æ±ºã«èšã¿ãäŸ¡å€æäŸãŸã§ã®å®çžŸãæ®ããããšã¯èªä¿¡ã«ã€ãªãããéçºå®è·µç ä¿®ã®ãããããšããŠãæããŠããããã®ã§ã¯ãªãã§ããããã èŠä»¶å®çŸ©ãªã©ã®æéäžãæ³å®ãããã¹ã ãŒãºã«é²ããããªãã£ãæãä»è²¬ã«ãããåã
ããªãŒããŒã·ãããçºæ®ãã建èšçã«é²ããŠããæ°åã®æ§åãã¡ã³ã¿ãŒã®äžäººãšããŠåã§èŠãããŠããããŸããã ãã® 1 ã¶æéã®éçºå®è·µç ä¿®ãéããŠãæè¡åã¯ããããšãªããã課é¡è§£æ±ºã«å¯Ÿããååãªç±æãšäž»äœæ§ãæ°åããæãããããšãŠãé Œãããå°è±¡ãšããŠæ®ããŸããã æ°åããã®å£° éçºã®äžã§ã®æ¹éãæèããŠèšèš/å®è£
ããããšãã§ãã(ã·ã³ãã«ã«ãã) QA ãšã¯ããããäœããšãããªãµãŒãããå
¥ããæèè
ã®èãæ¹ãè»žã«æ¹éãæ±ºããŠããå§ãããã åã
ãæé©ãªããã©ãŒãã³ã¹ãçºæ®ã§ããç°å¢ã¥ãããæèããŠãé«éãªæææ±ºå®ãå¯èœãªäœå¶ãæŽããããšãã§ãã èŠä»¶ã決ãŸããã£ãŠããªãäžã§èšèšããã®ã¯é£ããã£ã éçºã¿ã¹ã¯ãéäžããŠããæã«ããããžã§ã¯ãå
šäœã®çŸç¶ãææ¡ã§ããŠããªãã£ã æç« ãäœãã¹ãã«ãè¶³ããŠããªã æè¡æžã®èŒªèªäŒ ãã§ãŒãº 2 ã®éçºåºç€ 2 ã®èŒªèªäŒã§ã¯ã ãWeb ãæ¯ããæè¡ -HTTPãURIãHTMLããã㊠RESTã ã顿æžç±ãšããŠã7 æ¥éã«æž¡ã£ãŠæ¯æ¥ãæ¬¡ã®æé ã§å®æœããŸããã åå è
ãåãããŒãããããããèªãã§ãããæžç±ããåŠãã ããšãããããªã©ã§èª¿ã¹ãŠãè§£æ¶ããããªãã£ãçåç¹ãªã©ããŸãšãã ãã®å
容ãããšã«ã倿¹ã®ããŒãã£ã³ã°æã«ãããŠãåèªãçºè¡šããŠãã£ã¹ã«ãã·ã§ã³ãè¡ã ãã£ã¹ã«ãã·ã§ã³ããå
容ã¯è°äºé²ã«ãŸãšãã 茪èªäŒã¯ä»è
ããã®åŠã³ãå
±æããŠãããããšã§ãèªåã«ã¯ãªãã£ãèŠç¹ã»æ°ä»ããç²åŸãããã®æžç±ãžã®çè§£ãããæ·±ãããã广ããããŸãã æ¬ç ä¿®ããã°ã©ã ã«ããã茪èªäŒã®ç®çãšããŠã¯ã Web ãµãŒãã¹ãéçºããŠããäžã§å¿
èŠãšãªãç¥èãžè§Šããããšã«ãããä»åŸç²åŸããŠããã¹ãç¥èã®ããŒã¹ã©ã€ã³ãçè§£ããããš ã§ãããã茪èªäŒãªãã§ã¯ã®ã¡ãªããã»æ¥œãããæ°åã«å®æããŠããããããšãã坿¬¡çãªå¹æãšããŠãã£ããšæããŸãã æ°åããã®å£° Web ã®åºæ¬çãªç¥èãããªãç»å Žããã®ãããçè§£ããªããç¶²çŸ
çã«åŠã¶ããšãã§ãã ææžã§ãŸãšããåŸã«ãå£ã§èª¬æããããšãåŠãã å
容ã®å®çã«è¯ããšæãã ãããŸã§ãªããšãªãå®è£
ããŠããããšã®ä»çµã¿ãåŠã¶ããšã§ãç¥èãšããŠå®çããããšãã§ãã äžéå ±åäŒ ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿®æåŸã®ç ä¿®ããã°ã©ã ã§ããäžéå ±åäŒã«åããŠãããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ããã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ã宿œããŸããã äžèšã¹ãã«ãå¿
èŠãšãªãèæ¯ã¯ã次ã®éãã§ãã ãšã³ãžãã¢ãªã³ã°ãéãã課é¡è§£æ±ºãšã¯ããã°ã©ã ãæžãã ãã§ã¯è§£æ±ºããªãå Žé¢ããã èæ¯ãç®çãæ£ããã¹ããŒã¯ãã«ããŒãžå
±æããªããããŒã ãšããŠåãçµãã§ããããšã«ãªã äŒãããããšãæç« ãšããŠæŽçããä»è
ãžåãããããäŒããŠããããšãæ±ãããã ãŸããã¡ãã¬ãŒã®è¡ååå Our Essentials ãæ§æããèŠçŽ ãšããŠããããã¥ã¡ã³ãããªãã³ããå
šãŠãæç¢ºã«ããšããé
ç®ãå«ãŸããŠãããããããå®çŸããããã«ãããšãŠãéèŠãªã¹ãã«ãšããŠã¡ãã¬ãŒã¯èããŠããŸãã æ°åç ä¿®ãçµãã£ãåŸãããšã³ãžãã¢ãšããŠæè¡çãªã¹ãã«ã身ã«ã€ããæ©äŒã¯æ¥åžžçã«å€ããããŸãããäžèšã®ãããªã¹ãã«ããŸãšããŠç¿åŸããæ©äŒã¯å°ãªãããããã®ãããªç ä¿®ã瀟äŒäººã®ã¯ããããåããŠããããšã§ããã®åŸã®äŒžã³ãããéã£ãŠããã®ã§ã¯ãªãããšæããŸãã ç ä¿®ãçµãã£ãåŸã¯ãåèªã§å ±åäŒçšã®è³æãäœæããç ä¿®è¬åž«ããã®æ·»åãåããŸããã äžéå ±åäŒã¯åéšçœ²ã®éçºãããŒãžã£ãŒãçºè¡šçžæãšããŠãåœæ¥ã¯çšããç·åŒµæããã£ãŠãè¯ãé°å²æ°ã§å ±åäŒãçµããããŸããã ãã§ãŒãº 3ïŒäºæ¥éš OJT äºæ¥éšç ä¿® åç· åœ¹è±ç°ããã®è¬çŸ© CLINICS äºæ¥éšç ä¿® ãžã§ãã¡ãã¬ãŒäºæ¥éšç ä¿® éçº OJT ã·ã¹ãã å
šäœå説æ ç°å¢æ§ç¯ åãããã¯ãã®éçºããŒã ã§ã® OJT ãã§ãŒãº 3 ã§ã¯ã 顧客ã®èª²é¡ãšã顧客ãžã®äŸ¡å€æäŸã®ããã®åããŒã ã®é£æºãäœæããã¡ãã¬ãŒã®é¡§å®¢æäŸäŸ¡å€ãèªåã®èšèã§è©±ããããã«ãªãããš ããŽãŒã«ãšããŸããã ãã§ãŒãº 3 ã®ã¯ããã«ãåç· åœ¹è±ç°ã«ããæ¥æ¬ã®å»çã®èª²é¡ãšã¡ãã¬ãŒã®åãçµã¿ã«é¢ããè¬çŸ©ãåè¬ããŠããããŸããã æç¶å¯èœãªå»çäœå¶ãæ§ç¯ããŠããããã«ã¡ãã¬ãŒãæãã¹ãããšãªã©ã®è©±ãèããåŸã«ãæ°åããã®è³ªåã®åãçãã«ãã£ãŠçè§£ãæ·±ããã¡ãã¬ãŒã®ç€ŸäŒçæçŸ©ããããããŠèªèããŠãããããšã³ãžãã¢ãšããŠã ãã§ã¯ãªãã ã¡ãã¬ãŒç€Ÿå¡ãšããŠã®èªèŠ ã匷ããŠããããŸããã äºæ¥éšç ä¿® éçº OJT ã§æãåããåã«ãèªåãã¡ãäœã®ããã«éçºããã®ããå
·äœçã«ã€ã¡ãŒãžã§ãããããæ¬¡ã®ããã«ãåçŸå Žã«åå ããŠããããŸããã èŠèŸŒé¡§å®¢ãžã®æ¶é»æ¥åèŠåŠ åè«åã®ç€Ÿå
ããŒãã£ã³ã°åå åè«çŸå Žååž å®äŸäŒè°åå äºæ¥éšã®ã¹ã¿ãããã顧客ã®èª²é¡ã«å¯ŸããŠãã©ã®ãããªå¯Ÿå¿ãããŠããŠãã©ã®ããã«ãããã¯ãã説æããŠããã®ããäºæ¥éšã®åããŒã ããã©ã®ããã«é£æºããŠæçµçã«é¡§å®¢ã«äŸ¡å€ãå±ããã®ãã®å
šäœèгãç¥ã£ãŠãããããšãçããšããŠããŸããã éçºããŒã ã®ãšã³ãžãã¢ã¯æ¥åäžããããã¯ãã®ãšã³ããŠãŒã¶ãŒã§ãã顧客ã®å£°ãªã©ãåè«ã®ã¿ã€ãã³ã°ããèããæ©äŒã¯ãªããªãç¡ãã®ã§ãç ä¿®ãéããŠè©±ãèããããšã¯ãä»åŸã®éçºã¢ãããŒã·ã§ã³ã«ã圱é¿ããè¯ãæ©äŒã ã£ããšæããŸãã æ°åããã®å£° ãŠãŒã¶ãŒã顧客ãäºæ¥éšãæ±ãã課é¡ã確èªã§ããããšã§ãéçºä»¥å€ã«ãç®ãåãããã£ããã«ãªãè¯ãã£ã åéšçœ²ã KPI ãšããŠå®ããŠããæ°åãç¥ãããšãã§ããéçºã«éããŠããŠããæœçã®åœ±é¿ç®æãã©ã®éšåããçè§£ã§ããäžã§ãéçºã«åãçµãããšãã§ããããã«ãªã£ã åéšçœ²ã®ããŒãã£ã³ã°ã«åå ããããšã§ãåéšçœ²ãã©ã®ãããªèãã§äœãç®æããŠããã®ããçè§£ã§ããã¡ãã¬ãŒå
šäœãšããŠç®æããŠããæ¹åæ§ãæŽãã éçº OJT äºæ¥éšç ä¿®ã«ç¶ãéçº OJT ã§ã¯ã ãžã§ãã¡ãã¬ãŒ ã CLINICS ã ä»è·ã®ã»ãã ã®éçºããŒã ã«åãããŠãç ä¿®ã宿œããŸããã OJT é
å±å
ã§ã¯ãã¡ã³ã¿ãŒãšã¯å¥ã«ããã¬ãŒããŒãä»ããŠæ¥åã®é²ãæ¹ãªã©ããµããŒãããŸããããã¬ãŒããŒã¯é
å±å
ã®å
茩ãšã³ãžãã¢ãæ
åœããŸããã OJT ã®æµããšããŠã¯ã忥ã«ããããã¯ããã©ã®ããã«åããŠããã®ããã·ã¹ãã å
šäœåãææ¡ããããšããå§ãŸããåèªãããã¥ã¡ã³ãã«æ²¿ã£ãŠãPC ã«ããŒã«ã«éçºç°å¢ãã»ããã¢ããããŸããã ãã®åŸã¯ãä»ã®å
茩ãšã³ãžãã¢ãšåæ§ã«ãGitHub Issue ã§ç®¡çãããŠãã課é¡ãè§£æ¶ããããšãæ¥ã
ã®ç®æšãšããŠããªããŠããããŸããããã ããåã« Issue ã«æžãããŠãã課é¡ãã¯ãªã¢ããããšããã®ã§ã¯ãªãã ããããããªããããããã®ããIssue ã®èæ¯ã起祚è
ã®æå³ãååã«çè§£ããäžã§ããããã¯ãã®ããã¹ãå§¿ã«å°ã ããšãæèããŠããããŸããã Issue ã«æžãããŠããå
容ã®çè§£ãäžååã ã£ããã解決æ¹éãããŸãå®ãŸããªãå Žåã¯éæãããŒãã£ã³ã°ã®æéãèšããŠãIssue 起祚è
ããã¬ãŒããŒãšèªèåãããè¡ããèªèã®çžéããçãŸãããã¹ã³ãã¥ãã±ãŒã·ã§ã³ãæ¥µåæžãããããåãçµã¿ãŸããã æè¡çãªè³ªåã«é¢ããŠãã宿çã«è³ªåã¿ã€ã ãèšããããè€éã«ãªããããªå®è£
ããã€ãŸãããã€ã³ããšãªããããªç®æã«é¢ããŠã¯ã ç»é¢å
±æãçšããŠã¬ãã¥ãŒ ãè¡ããçåç¹ã«é¢ããŠããã®å Žã§ç¢ºèªããŠãè§£æ¶ããŠããããŸããã ç·æ¥äºæ
å®£èšæéäžã ã£ããããäŒç€Ÿå
šäœã§ååãåšå®
å€åã®äœå¶ãšãªã£ãŠããã察é¢ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªããã¡ã§ããããæäŒãå€äŒãå«ããããšãæ°åãã質åãç¡ããŠã質åã¿ã€ã ã§ã®ããŒãã£ã³ã°ã¯å®æçã«å®æœãããªã©ã ã§ããã ãé »ç¹ã«é¡åããããŠãæ°åæ¬äººã®å£°ãšé¡ã確èªãã ããå¿ãããŸããã Issue ãžã®ã¢ãµã€ã³ããå§ãŸã£ãŠãå®è£
-> ã¬ãã¥ãŒäŸé Œ -> QA -> ãªãªãŒã¹ -> Issue 起祚è
ãžã®å ±åãŸã§ãäžé£ã®éçºãããŒãçµéšããŠããããããŒã å
ã§ã®éçºæ¥åã«æ
£ããŠãããããšãã§ããŸããã ãã§ãŒãº 4ïŒæçµå ±å æ°åç ä¿®æåŸã®ããã°ã©ã ãšããŠãã¡ãã¬ãŒåœ¹å¡é£ã«åããæçµå ±åäŒã宿œããŸããã æçµå ±åäŒã®ç®çãšããŠã¯ã次ã®éãã§ãã åŠãã ããšã®ç¥èãæ·±åããã èªãã®åŸæã»äžåŸæãæããå°æ¥ã®æé·èšç»ãç«ãŠã äœç³»çã«æŽçã»ææžåããŠä»è
ãžäŒããã¹ãã«ãåäžããã 圹å¡é£ã«åããŠãã¬ãŒã³ããããšã§ãæ¬é
å±ã«åããæ±ºæè¡šæãšããŠåºåããä»ãã 圹å¡é£ãžã®çºè¡šã§ããããšã«å ããäžäººãããã®çºè¡šæéã«ãå¶éãèšããããŠãããåœæ¥ã®ç·åŒµã¯ããªãã®ãã®ã ã£ããšæããŸãã 忥ã«çºè¡šäŒå ŽãäžèŠããŠããªããŒãµã«ãå
¥å¿µã«è¡ããªã©ãåœæ¥ã®çºè¡šäŒãæåããããããã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã®èªèŠãæã£ãŠãçºè¡šæºåã«åãçµãã§ããŸããã æè¡å¿åãšãããã¯ãå¿åã®äž¡èŒªãç®æããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ç ä¿®ã§ã¯ãæè¡çãªè¬çŸ©ãå®è·µã ãã§çµããã®ã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠå¿
èŠãªåºç€ã身ã«ã€ãããªãéçºããã®ãã远究ãããããã¯ããéãã課é¡è§£æ±ºãå®äœéšããŠãããããšãéèŠããŠããŸãã ã¡ãã¬ãŒã§ã¯ãå»çãã«ã¹ã±ã¢åéã®èª²é¡è§£æ±ºã«æã¿ãããšã³ãžãã¢ãåéããŠããŸãã æ°åã®åŠçã«éãããäžéæ¡çšãè¡ã£ãŠããã®ã§ããšã³ãžãã¢ã®æ¹ã§å°ãã§ãèå³ãæã£ãŠããã ããããæ¯éãé¢è«ã§ã話ãããŸãããã æåŸãŸã§ãèªã¿ããã ããèª ã«ããããšãããããŸããã P.S. æšå¹Žãäžæšå¹Žã®æ°åç ä¿®ã®æ§åã¯ãã¡ããããããããã芧ããã ããŸãã 2020 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠2019 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãå»çä»è·æ±äººãµã€ãããžã§ãã¡ãã¬ãŒãã®éçºãæ
åœããŠãããšã³ãžãã¢ã®å±±ç°ã§ãã ä»å¹Žã®æ°åãšã³ãžãã¢ç ä¿®ã«ãããŠãã¡ã³ã¿ãŒãæ
åœããŸããã ã¡ãã¬ãŒã§ã¯ 2019 幎床ããæ°åæ¡çšãè¡ãªã£ãŠãããä»å¹Ž 2021 幎床㯠5 åã®æ°åããšã³ãžãã¢ãšããŠå
¥ç€ŸããŸããã äŸå¹Žãšåãã 4 æãã 9 æã«ãããŠãçŽ 5 ã¶æéã®æ°åãšã³ãžãã¢ç ä¿®ã宿œããŸããã®ã§ããã®åãçµã¿ããç ä¿®åè¬è
ã§ããæ°åããã®å£°ã亀ããŠã玹ä»ããŸãã æ°åç ä¿®ã®æŠèŠ ä»å¹Žã®æ°åç ä¿®ã®æçµãŽãŒã«ã¯ãã ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã Our Essentials (â») ãäœçŸãã顧客ãžäŸ¡å€æäŸã§ããããã«ãªãããã®åºç€ã身ã«ã€ããçµéšãåŸãããš ããšããŠæ²ããŸããã â») ã¡ãã¬ãŒã®è¡ååå ã¡ãã¬ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ãæè¡ã身ã«ã€ããããšã ãã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠã®åºç€ã身ã«ã€ããã¡ãã¬ãŒã倧åã«ããŠãã䟡å€èгãçè§£ããäœçŸããæèããã£ãŠã顧客ãžã®äŸ¡å€æäŸã«ã€ããŠèªåã®èšèã§è©±ããããã«ãªãããšãŸã§ãç®æããŠããããŸãã ç ä¿®ã¯æšå¹Žåæ§ã倧ããåããŠã4 ã€ã®ãã§ãŒãºã«åºåã£ãŠè¡ããŸããã ãŸããå
šç ä¿®æéãéããŠãåæ°åã«ã¯ã¡ã³ã¿ãŒãäžäººãã€ä»ããŸãããã¡ã³ã¿ãŒã¯ãäžé±éã« 1~2 åã®ããŒã¹ã§æ°åãš 1on1 ããŒãã£ã³ã°ã宿œãããã£ãžã«ã«ãšã¡ã³ã¿ã«ã®äž¡é¢ãæ°é£ããåå¥ã«ãã©ããŒãè¡ããŸããã æ°åç ä¿®ã®å
容 ãã§ãŒãº 1ïŒç€ŸäŒäºº&ã¡ãã¬ãŒåºç€ç ä¿® ãªã¹ã¯ç ä¿® ã€ã³ãµã€ããŒååŒé²æ¢ç ä¿® ã³ã³ãã©ã€ã¢ã³ã¹ç ä¿® æ
å ±ã»ãã¥ãªãã£ç ä¿® ããžãã¹ç ä¿® ããžãã¹ãããŒç ä¿® ããžãã¹ã¹ãã«ç ä¿® ããžãã¹ã¹ã¿ã³ã¹ç ä¿®ïŒå€éšç ä¿®ïŒ ãã§ãŒãº 1 ã§ã¯ã ææãåºãã䟡å€ãçºæ®ããããã«å¿
èŠãªããžãã¹ããŒãœã³ãšããŠã®åºæ¬çãªä»äºã®åã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ãªã¹ã¯ç ä¿®ã§ã¯ãã¡ãã¬ãŒç€Ÿå¡ãšããŠã瀟äŒäººãšããŠã身ã®åšãã§èµ·ãããããªã¹ã¯ã«ã€ããŠèããããã«ãããã®ãªã¹ã¯ãšåãåãããè¬çŸ©åœ¢åŒã§åŠãã§ããããŸããã ããžãã¹ç ä¿®ã§ã¯ã瀟äŒäººãšããŠã®æäœéã®ãããŒãåŠã³ãè«ççæèåãã³ãã¥ãã±ãŒã·ã§ã³åãªã©ããšã³ãžãã¢è·ã«éããªã課é¡è§£æ±ºåãžã€ãªããããŒã¿ãã«ãªç¥èãã座åŠãšã¯ãŒã¯ã·ã§ãããéããŠå®çããŠãããããšãå³ããŸããã ãŸãã瀟äŒäººã®åºæºã§ä»äºãšåãåããé©åãªå ±é£çžã«ãã£ãŠåšå²ãšååããŠããããšã®éèŠæ§ã«ã€ããŠãåŠãã§ããããŸããã æ°åããã®å£° 質ã®é«ããå€éã®ã€ã³ãããã»ã¢ãŠãããããã§ãã äŒããã¡ãŒã«ã®æžãæ¹ãååºã®æž¡ãæ¹ãªã©ã瀟äŒäººã«å¿
é ã®ãããŒãã¹ãã«ãèªèã§ãã ã¯ãŒã¯ãéããŠãèšèã§ã¯çè§£ããŠããŠãè¡åãããšã§ããªãããšãæŽãåºãã ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿® éçºåºç€ 1 ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš äºæ¥ïŒãžã§ãã¡ãã¬ãŒ ã» CLINICS ã»ä»è·ã®ã»ããïŒã®æŠèŠèª¬æ éçºåºç€ç ä¿®ïŒRuby on Rails ãã¥ãŒããªã¢ã«ïŒ éçºå®è·µ ïŒèŠä»¶å®çŸ©ããªãªãŒã¹ãŸã§ïŒ éçºåºç€ 2 æè¡æžã®èŒªèªäŒ ããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿® ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿® äžéã¬ããŒãäœæ äžéå ±åäŒ ãã§ãŒãº 2 ã§ã¯ãæ°åç ä¿®åŸã«éçºæ¥åã«å
¥ã£ãŠããããããã ãšã³ãžãã¢ãšããŠã®åºç€ã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš éçºã«é¢ãããã®ãã§ãŒãºã«ãããŠããèŠä»¶å®çŸ©ãå«ãæ±çšçãªæè¡çã¹ãã«ã¯å¿è«ã®ããšãã¡ãã¬ãŒãšã³ãžãã¢ãå
±éããŠæã€ã¹ã䟡å€èгãªã©ãå
±æããããããã§ãŒãº 2 忥ã¯ã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš ããšé¡ããŠããšã³ãžãã¢ã®å·è¡åœ¹å¡ ç°äžãè¬çŸ©ãè¡ããŸããã è¬çŸ©ã§ã¯ãã ãšã³ãžã㢠ãšã¯ã ãšã³ãžãã¢ã®äŸ¡å€ ãšã¯ã ãããšã³ãžã㢠ãšã¯ãªãã§ããããïŒããšããåãããå§ãŸããè¬çŸ©ã®çµããã«ã¯ããäžåºŠåãåããããããŠç· ãããããæ°åãã¡ãã¬ãŒã®æ±ãããšã³ãžãã¢åã«ã€ããŠèªèº«ã®èšèã§è©±ããããã«èããŠããããŸããã ã¡ãã¬ãŒãæ±ãããšã³ãžãã¢åã«ã€ããŠã¯ãCTO 平山㮠ã¡ãã¬ãŒå¹³å±±ã®äžå€®çªç Ž: THE ãšã³ãžã㢠ã«ãæžãããŠããŸãã®ã§ããããããã°ãããããŠã芧ãã ããã ããã«ãã¡ãã¬ãŒãå±éããåäºæ¥ããã³é¢é£ãããããã¯ãã®æŠèŠèª¬æããããã¯ããããŒãžã£ãŒãè¡ããã¡ãã¬ãŒã§éçºããæçŸ©ããããããŠèªèããŠããããŸããã éçºåºç€ç ä¿® 2 æ¥ç®ããã Ruby on Rails ãã¥ãŒããªã¢ã« ïŒä»¥äžããRails ãã¥ãŒããªã¢ã«ãïŒãææãšãããéçºåºç€ç ä¿®ã«ç§»ããŸããã ã¡ãã¬ãŒã®ãããã¯ã㯠Rails ã§äœãããŠãããã®ãå€ããWeb ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åºç€ã身ã«ã€ããããã«ããRails ãã¥ãŒããªã¢ã«ã®å
容ã宿œããŠããããŸããã åçŽã«ãRails ãã¥ãŒããªã¢ã«ã®å
å®¹ã«æ²¿ã£ãŠããã©ãã©ãšåçµããã®ã§ã¯ãªããéæãåŠãã ããšã¯ Confluence ã«ãŸãšããGitHub äžã§ Pull Request ãäœæãã圢ã§ããœãŒã¹ã³ãŒããå
±æããŠããããŸããã åŠãã ããšãèªåã®èšèã«çœ®ãæããŠã¢ãŠããããããããšã§å埩åŠç¿ãä¿ããPull Request ãäœæããŠãããããšã§ GitHub ã®äœ¿ãæ¹ã«æ
£ããŠãããããšãå³ããŸããã ãŸãããã€ãªãŒã§æäŒãšå€äŒã宿œããŸãããæäŒã¯ä»äºã®ãªãºã ãæŽããããã®é¡åãããå€äŒã¯æ°åãã質åã»ææãå
±æããŠã¡ã³ã¿ãŒãããã«å¯ŸããŠãã£ãŒãããã¯ãããå ŽãšããŠãããã宿œããŸããã ç ä¿®åã«æ¢ã« Rails ãã¥ãŒããªã¢ã«ãäžåšããŠããæ°åãããŸããããäºåšç®ã宿œããŠæ°ããªæ°ä»ããåŸãããAWS ãçšããŠã¯ã©ãŠãäžã«ç°å¢æ§ç¯ããäœæãã Web ã¢ããªã±ãŒã·ã§ã³ããããã€ãããŸã§ãå®è·µããŠããããªã©ãã€ã³ãã©ã«é¢ããŠãçè§£ãæ·±ããŠãããããšãã§ããŸããã æ°åããã®å£° ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäžããããã®å·¥å€«ãç¥ãããšãã§ãã ãã°çºçãåå ç¹å®ãä¿®æ£ããšãããããã°ã®ã¹ããŒãããç ä¿®åºç€ããé£èºçã«äžãã£ã ãããã¯ãã§å©çšããŠãã AWS ã®åçš®ãµãŒãã¹ã®æŠèŠãçè§£ã§ããããšã«å ãããµãŒãã¹éã®ç¹ããããããã¯ãŒã¯ã®æµãã«é¢ããŠãçè§£ãæ·±ããããšãã§ãã éçºå®è·µ éçºåºç€ç ä¿®ã«ãŠ Web ã¢ããªã±ãŒã·ã§ã³éçºã®åºç€ãåŠãã åŸã¯ãã ã¡ãã¬ãŒ/ã°ã«ãŒãäŒç€Ÿã§äœ¿ãæ¥èšªè
åä»ã·ã¹ãã ããéçºé¡æãšããŠãéçºå®è·µç ä¿®ãè¡ããŸããã éçºæ¥åå
šäœã®æµããææ¡ããããšã§ã ããŒã ã§éçºïŒèª²é¡è§£æ±ºïŒããããšãçµéšããä»åŸã®ä»äºã«åœ¹ç«ãããããš ãç®çãšããŸããã æ¬ç ä¿®ã§éæãã¹ãããšãšããŠæ²ããŠãããã®ã¯äž»ã«ã次ã®éãã§ãã ãããžã§ã¯ã管çèœåã身ã«ã€ããããš éçºãã察象ãäœç³»çã«æŽçã§ããèœåãé€ãããš ã·ã¹ãã èšèšã«é¢ããåºç€çãªç©äºãçè§£ããããš ããŒã éçºãçè§£ããããš å質ãçè§£ããããš æ¢ã«æ±ºãŸããã£ã仿§æžã«æ²¿ã£ãŠéçºããã®ã§ã¯ãªããæ°åèªèº«ãçŸç¶ã®å顿æ¡ãèª²é¡æŽçãè¡ã£ãŠããŠãŒã¶ãŒãžäŸ¡å€æäŸããããã«äœãäœãã¹ãããèããããšããå§ãŸãããªãªãŒã¹åŸã®éçšæ¹æ³ãã©ã³ãã³ã°ã³ã¹ãã®ããšãŸã§èãææ¡ããŠããããŸããã éçºå®è·µç ä¿®ã¯çŽ 1 ã¶æã®æéããããŠè¡ããŸããã倧ãŸããªæµããšããŠã¯ã次ã®éãã§ãã èŠä»¶å®çŸ©ïŒãã¢ãªã³ã°ã»çŸç¶ææ¡ã»èª²é¡æŽçã»èŠæ±åæã»æ©èœ/éæ©èœèŠä»¶ã®æŽãåºãã» UI èæ¡ïŒ ãããžã§ã¯ãèšç»ïŒåœ¹å²åæ
ã» WBS/ã¬ã³ããã£ãŒãäœæïŒ èšèšïŒç»é¢èšèšã»æ©èœèšèšã»ããŒã¿ã¢ããªã³ã°ã»æ¹åŒèšèšã»ã€ã³ãã©èšèšïŒ éçºïŒå®è£
ã»ã³ãŒãã¬ãã¥ãŒïŒ QAïŒãã¹ãèšèšã»ãã¹ãïŒ ææçºè¡šïŒææç©ãé¢ä¿è
ãžãã¬ãŒã³ã»ãªãªãŒã¹ïŒ æ¹åŒèšèšã®äžéšãšããŠãéçºã«äœ¿çšããèšèªãªã©ã®éžå®ãæ°åèªèº«ãè¡ããŸããã ä»åäœæãã瀟å¡åã管çç»é¢ãšæ¥èšªè
åãç»é¢ã¯ãããã SPAïŒäžéšãPWAïŒã®ã¢ãŒããã¯ãã£ãæ¡çšããäž»ãªã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã«é¢ããŠãããã³ããšã³ã㯠TypeScript , React , Next.js , Chakra UI , Ionic Framework ãããã¯ãšã³ã㯠Ruby on RailsïŒAPI ã¢ãŒãïŒãããããå©çšããããšãšãªããŸããã éžå®çç±ãšããŠã¯äž»ã«ã次ã®éãã§ãã TypeScript, ReactïŒäž¡ç»é¢å
±éïŒ ããžãã¯ãããã³ãã¬ãŒããŸã§ã®å
šãŠã®ã³ãŒããéçåä»ãã§æžãããšãã§ããå
ç¢æ§ã«åªããŠãããã Next.js, Chakra UIïŒç€Ÿå¡åã管çç»é¢ïŒ ãŒãã³ã³ãã£ã°ã§ãã«ããã¬ã³ããªã³ã°ãæé©åã§ãããã ã¢ã¯ã»ã·ããªãã£ã«åªãããªãã㪠UI ãçŽ æ©ãæ§ç¯ã§ãããã Ionic FrameworkïŒæ¥èšªè
åãç»é¢ïŒ iPad äžã§ããã€ãã£ãã¢ããªã®ãã㪠UI/UX ãæäŸãããã Ruby on Rails API ã¢ãŒã ããã³ããšã³ããšããã¯ãšã³ããåé¢ããŠççµåã«ãããã çæéã§æ§ç¯ãããã 瀟å
ã§ããã䜿ãããŠããã¡ã³ããã³ã¹ãããããã ã€ã³ãã©ã¯ AWS ãæ¡çšããEC2, S3, RDS, CloudFront, Route53, CloudWatch ãªã©ã®ãµãŒãã¹ãå©çšããŸããã çµæçã«ãæ¬ç ä¿®ããã°ã©ã ã®ææç©ãšããŠãªãªãŒã¹ãããã·ã¹ãã ã¯ã Medley Entrance ããšããååã§ã瀟å
ããŒã«ãšããŠçŸåšãæ¯æ¥çšŒåããŠããããŠãŒã¶ãŒãšããŠã¡ãã¬ãŒ/ã°ã«ãŒã瀟å¡ã ãã§ã¯ãªããæ¥èšªè
ã®æ¹ã
ã«ã䜿ã£ãŠããã ããŠããŸãã Medley EntranceïŒäžïŒç€Ÿå¡åã管çç»é¢ãäžïŒæ¥èšªè
åãç»é¢ïŒ ããŒã ã§èª²é¡è§£æ±ºã«èšã¿ãäŸ¡å€æäŸãŸã§ã®å®çžŸãæ®ããããšã¯èªä¿¡ã«ã€ãªãããéçºå®è·µç ä¿®ã®ãããããšããŠãæããŠããããã®ã§ã¯ãªãã§ããããã èŠä»¶å®çŸ©ãªã©ã®æéäžãæ³å®ãããã¹ã ãŒãºã«é²ããããªãã£ãæãä»è²¬ã«ãããåã
ããªãŒããŒã·ãããçºæ®ãã建èšçã«é²ããŠããæ°åã®æ§åãã¡ã³ã¿ãŒã®äžäººãšããŠåã§èŠãããŠããããŸããã ãã® 1 ã¶æéã®éçºå®è·µç ä¿®ãéããŠãæè¡åã¯ããããšãªããã課é¡è§£æ±ºã«å¯Ÿããååãªç±æãšäž»äœæ§ãæ°åããæãããããšãŠãé Œãããå°è±¡ãšããŠæ®ããŸããã æ°åããã®å£° éçºã®äžã§ã®æ¹éãæèããŠèšèš/å®è£
ããããšãã§ãã(ã·ã³ãã«ã«ãã) QA ãšã¯ããããäœããšãããªãµãŒãããå
¥ããæèè
ã®èãæ¹ãè»žã«æ¹éãæ±ºããŠããå§ãããã åã
ãæé©ãªããã©ãŒãã³ã¹ãçºæ®ã§ããç°å¢ã¥ãããæèããŠãé«éãªæææ±ºå®ãå¯èœãªäœå¶ãæŽããããšãã§ãã èŠä»¶ã決ãŸããã£ãŠããªãäžã§èšèšããã®ã¯é£ããã£ã éçºã¿ã¹ã¯ãéäžããŠããæã«ããããžã§ã¯ãå
šäœã®çŸç¶ãææ¡ã§ããŠããªãã£ã æç« ãäœãã¹ãã«ãè¶³ããŠããªã æè¡æžã®èŒªèªäŒ ãã§ãŒãº 2 ã®éçºåºç€ 2 ã®èŒªèªäŒã§ã¯ã ãWeb ãæ¯ããæè¡ -HTTPãURIãHTMLããã㊠RESTã ã顿æžç±ãšããŠã7 æ¥éã«æž¡ã£ãŠæ¯æ¥ãæ¬¡ã®æé ã§å®æœããŸããã åå è
ãåãããŒãããããããèªãã§ãããæžç±ããåŠãã ããšãããããªã©ã§èª¿ã¹ãŠãè§£æ¶ããããªãã£ãçåç¹ãªã©ããŸãšãã ãã®å
容ãããšã«ã倿¹ã®ããŒãã£ã³ã°æã«ãããŠãåèªãçºè¡šããŠãã£ã¹ã«ãã·ã§ã³ãè¡ã ãã£ã¹ã«ãã·ã§ã³ããå
容ã¯è°äºé²ã«ãŸãšãã 茪èªäŒã¯ä»è
ããã®åŠã³ãå
±æããŠãããããšã§ãèªåã«ã¯ãªãã£ãèŠç¹ã»æ°ä»ããç²åŸãããã®æžç±ãžã®çè§£ãããæ·±ãããã广ããããŸãã æ¬ç ä¿®ããã°ã©ã ã«ããã茪èªäŒã®ç®çãšããŠã¯ã Web ãµãŒãã¹ãéçºããŠããäžã§å¿
èŠãšãªãç¥èãžè§Šããããšã«ãããä»åŸç²åŸããŠããã¹ãç¥èã®ããŒã¹ã©ã€ã³ãçè§£ããããš ã§ãããã茪èªäŒãªãã§ã¯ã®ã¡ãªããã»æ¥œãããæ°åã«å®æããŠããããããšãã坿¬¡çãªå¹æãšããŠãã£ããšæããŸãã æ°åããã®å£° Web ã®åºæ¬çãªç¥èãããªãç»å Žããã®ãããçè§£ããªããç¶²çŸ
çã«åŠã¶ããšãã§ãã ææžã§ãŸãšããåŸã«ãå£ã§èª¬æããããšãåŠãã å
容ã®å®çã«è¯ããšæãã ãããŸã§ãªããšãªãå®è£
ããŠããããšã®ä»çµã¿ãåŠã¶ããšã§ãç¥èãšããŠå®çããããšãã§ãã äžéå ±åäŒ ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿®æåŸã®ç ä¿®ããã°ã©ã ã§ããäžéå ±åäŒã«åããŠãããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ããã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ã宿œããŸããã äžèšã¹ãã«ãå¿
èŠãšãªãèæ¯ã¯ã次ã®éãã§ãã ãšã³ãžãã¢ãªã³ã°ãéãã課é¡è§£æ±ºãšã¯ããã°ã©ã ãæžãã ãã§ã¯è§£æ±ºããªãå Žé¢ããã èæ¯ãç®çãæ£ããã¹ããŒã¯ãã«ããŒãžå
±æããªããããŒã ãšããŠåãçµãã§ããããšã«ãªã äŒãããããšãæç« ãšããŠæŽçããä»è
ãžåãããããäŒããŠããããšãæ±ãããã ãŸããã¡ãã¬ãŒã®è¡ååå Our Essentials ãæ§æããèŠçŽ ãšããŠããããã¥ã¡ã³ãããªãã³ããå
šãŠãæç¢ºã«ããšããé
ç®ãå«ãŸããŠãããããããå®çŸããããã«ãããšãŠãéèŠãªã¹ãã«ãšããŠã¡ãã¬ãŒã¯èããŠããŸãã æ°åç ä¿®ãçµãã£ãåŸãããšã³ãžãã¢ãšããŠæè¡çãªã¹ãã«ã身ã«ã€ããæ©äŒã¯æ¥åžžçã«å€ããããŸãããäžèšã®ãããªã¹ãã«ããŸãšããŠç¿åŸããæ©äŒã¯å°ãªãããããã®ãããªç ä¿®ã瀟äŒäººã®ã¯ããããåããŠããããšã§ããã®åŸã®äŒžã³ãããéã£ãŠããã®ã§ã¯ãªãããšæããŸãã ç ä¿®ãçµãã£ãåŸã¯ãåèªã§å ±åäŒçšã®è³æãäœæããç ä¿®è¬åž«ããã®æ·»åãåããŸããã äžéå ±åäŒã¯åéšçœ²ã®éçºãããŒãžã£ãŒãçºè¡šçžæãšããŠãåœæ¥ã¯çšããç·åŒµæããã£ãŠãè¯ãé°å²æ°ã§å ±åäŒãçµããããŸããã ãã§ãŒãº 3ïŒäºæ¥éš OJT äºæ¥éšç ä¿® åç· åœ¹è±ç°ããã®è¬çŸ© CLINICS äºæ¥éšç ä¿® ãžã§ãã¡ãã¬ãŒäºæ¥éšç ä¿® éçº OJT ã·ã¹ãã å
šäœå説æ ç°å¢æ§ç¯ åãããã¯ãã®éçºããŒã ã§ã® OJT ãã§ãŒãº 3 ã§ã¯ã 顧客ã®èª²é¡ãšã顧客ãžã®äŸ¡å€æäŸã®ããã®åããŒã ã®é£æºãäœæããã¡ãã¬ãŒã®é¡§å®¢æäŸäŸ¡å€ãèªåã®èšèã§è©±ããããã«ãªãããš ããŽãŒã«ãšããŸããã ãã§ãŒãº 3 ã®ã¯ããã«ãåç· åœ¹è±ç°ã«ããæ¥æ¬ã®å»çã®èª²é¡ãšã¡ãã¬ãŒã®åãçµã¿ã«é¢ããè¬çŸ©ãåè¬ããŠããããŸããã æç¶å¯èœãªå»çäœå¶ãæ§ç¯ããŠããããã«ã¡ãã¬ãŒãæãã¹ãããšãªã©ã®è©±ãèããåŸã«ãæ°åããã®è³ªåã®åãçãã«ãã£ãŠçè§£ãæ·±ããã¡ãã¬ãŒã®ç€ŸäŒçæçŸ©ããããããŠèªèããŠãããããšã³ãžãã¢ãšããŠã ãã§ã¯ãªãã ã¡ãã¬ãŒç€Ÿå¡ãšããŠã®èªèŠ ã匷ããŠããããŸããã äºæ¥éšç ä¿® éçº OJT ã§æãåããåã«ãèªåãã¡ãäœã®ããã«éçºããã®ããå
·äœçã«ã€ã¡ãŒãžã§ãããããæ¬¡ã®ããã«ãåçŸå Žã«åå ããŠããããŸããã èŠèŸŒé¡§å®¢ãžã®æ¶é»æ¥åèŠåŠ åè«åã®ç€Ÿå
ããŒãã£ã³ã°åå åè«çŸå Žååž å®äŸäŒè°åå äºæ¥éšã®ã¹ã¿ãããã顧客ã®èª²é¡ã«å¯ŸããŠãã©ã®ãããªå¯Ÿå¿ãããŠããŠãã©ã®ããã«ãããã¯ãã説æããŠããã®ããäºæ¥éšã®åããŒã ããã©ã®ããã«é£æºããŠæçµçã«é¡§å®¢ã«äŸ¡å€ãå±ããã®ãã®å
šäœèгãç¥ã£ãŠãããããšãçããšããŠããŸããã éçºããŒã ã®ãšã³ãžãã¢ã¯æ¥åäžããããã¯ãã®ãšã³ããŠãŒã¶ãŒã§ãã顧客ã®å£°ãªã©ãåè«ã®ã¿ã€ãã³ã°ããèããæ©äŒã¯ãªããªãç¡ãã®ã§ãç ä¿®ãéããŠè©±ãèããããšã¯ãä»åŸã®éçºã¢ãããŒã·ã§ã³ã«ã圱é¿ããè¯ãæ©äŒã ã£ããšæããŸãã æ°åããã®å£° ãŠãŒã¶ãŒã顧客ãäºæ¥éšãæ±ãã課é¡ã確èªã§ããããšã§ãéçºä»¥å€ã«ãç®ãåãããã£ããã«ãªãè¯ãã£ã åéšçœ²ã KPI ãšããŠå®ããŠããæ°åãç¥ãããšãã§ããéçºã«éããŠããŠããæœçã®åœ±é¿ç®æãã©ã®éšåããçè§£ã§ããäžã§ãéçºã«åãçµãããšãã§ããããã«ãªã£ã åéšçœ²ã®ããŒãã£ã³ã°ã«åå ããããšã§ãåéšçœ²ãã©ã®ãããªèãã§äœãç®æããŠããã®ããçè§£ã§ããã¡ãã¬ãŒå
šäœãšããŠç®æããŠããæ¹åæ§ãæŽãã éçº OJT äºæ¥éšç ä¿®ã«ç¶ãéçº OJT ã§ã¯ã ãžã§ãã¡ãã¬ãŒ ã CLINICS ã ä»è·ã®ã»ãã ã®éçºããŒã ã«åãããŠãç ä¿®ã宿œããŸããã OJT é
å±å
ã§ã¯ãã¡ã³ã¿ãŒãšã¯å¥ã«ããã¬ãŒããŒãä»ããŠæ¥åã®é²ãæ¹ãªã©ããµããŒãããŸããããã¬ãŒããŒã¯é
å±å
ã®å
茩ãšã³ãžãã¢ãæ
åœããŸããã OJT ã®æµããšããŠã¯ã忥ã«ããããã¯ããã©ã®ããã«åããŠããã®ããã·ã¹ãã å
šäœåãææ¡ããããšããå§ãŸããåèªãããã¥ã¡ã³ãã«æ²¿ã£ãŠãPC ã«ããŒã«ã«éçºç°å¢ãã»ããã¢ããããŸããã ãã®åŸã¯ãä»ã®å
茩ãšã³ãžãã¢ãšåæ§ã«ãGitHub Issue ã§ç®¡çãããŠãã課é¡ãè§£æ¶ããããšãæ¥ã
ã®ç®æšãšããŠããªããŠããããŸããããã ããåã« Issue ã«æžãããŠãã課é¡ãã¯ãªã¢ããããšããã®ã§ã¯ãªãã ããããããªããããããã®ããIssue ã®èæ¯ã起祚è
ã®æå³ãååã«çè§£ããäžã§ããããã¯ãã®ããã¹ãå§¿ã«å°ã ããšãæèããŠããããŸããã Issue ã«æžãããŠããå
容ã®çè§£ãäžååã ã£ããã解決æ¹éãããŸãå®ãŸããªãå Žåã¯éæãããŒãã£ã³ã°ã®æéãèšããŠãIssue 起祚è
ããã¬ãŒããŒãšèªèåãããè¡ããèªèã®çžéããçãŸãããã¹ã³ãã¥ãã±ãŒã·ã§ã³ãæ¥µåæžãããããåãçµã¿ãŸããã æè¡çãªè³ªåã«é¢ããŠãã宿çã«è³ªåã¿ã€ã ãèšããããè€éã«ãªããããªå®è£
ããã€ãŸãããã€ã³ããšãªããããªç®æã«é¢ããŠã¯ã ç»é¢å
±æãçšããŠã¬ãã¥ãŒ ãè¡ããçåç¹ã«é¢ããŠããã®å Žã§ç¢ºèªããŠãè§£æ¶ããŠããããŸããã ç·æ¥äºæ
å®£èšæéäžã ã£ããããäŒç€Ÿå
šäœã§ååãåšå®
å€åã®äœå¶ãšãªã£ãŠããã察é¢ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªããã¡ã§ããããæäŒãå€äŒãå«ããããšãæ°åãã質åãç¡ããŠã質åã¿ã€ã ã§ã®ããŒãã£ã³ã°ã¯å®æçã«å®æœãããªã©ã ã§ããã ãé »ç¹ã«é¡åããããŠãæ°åæ¬äººã®å£°ãšé¡ã確èªãã ããå¿ãããŸããã Issue ãžã®ã¢ãµã€ã³ããå§ãŸã£ãŠãå®è£
-> ã¬ãã¥ãŒäŸé Œ -> QA -> ãªãªãŒã¹ -> Issue 起祚è
ãžã®å ±åãŸã§ãäžé£ã®éçºãããŒãçµéšããŠããããããŒã å
ã§ã®éçºæ¥åã«æ
£ããŠãããããšãã§ããŸããã ãã§ãŒãº 4ïŒæçµå ±å æ°åç ä¿®æåŸã®ããã°ã©ã ãšããŠãã¡ãã¬ãŒåœ¹å¡é£ã«åããæçµå ±åäŒã宿œããŸããã æçµå ±åäŒã®ç®çãšããŠã¯ã次ã®éãã§ãã åŠãã ããšã®ç¥èãæ·±åããã èªãã®åŸæã»äžåŸæãæããå°æ¥ã®æé·èšç»ãç«ãŠã äœç³»çã«æŽçã»ææžåããŠä»è
ãžäŒããã¹ãã«ãåäžããã 圹å¡é£ã«åããŠãã¬ãŒã³ããããšã§ãæ¬é
å±ã«åããæ±ºæè¡šæãšããŠåºåããä»ãã 圹å¡é£ãžã®çºè¡šã§ããããšã«å ããäžäººãããã®çºè¡šæéã«ãå¶éãèšããããŠãããåœæ¥ã®ç·åŒµã¯ããªãã®ãã®ã ã£ããšæããŸãã 忥ã«çºè¡šäŒå ŽãäžèŠããŠããªããŒãµã«ãå
¥å¿µã«è¡ããªã©ãåœæ¥ã®çºè¡šäŒãæåããããããã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã®èªèŠãæã£ãŠãçºè¡šæºåã«åãçµãã§ããŸããã æè¡å¿åãšãããã¯ãå¿åã®äž¡èŒªãç®æããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ç ä¿®ã§ã¯ãæè¡çãªè¬çŸ©ãå®è·µã ãã§çµããã®ã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠå¿
èŠãªåºç€ã身ã«ã€ãããªãéçºããã®ãã远究ãããããã¯ããéãã課é¡è§£æ±ºãå®äœéšããŠãããããšãéèŠããŠããŸãã ã¡ãã¬ãŒã§ã¯ãå»çãã«ã¹ã±ã¢åéã®èª²é¡è§£æ±ºã«æã¿ãããšã³ãžãã¢ãåéããŠããŸãã æ°åã®åŠçã«éãããäžéæ¡çšãè¡ã£ãŠããã®ã§ããšã³ãžãã¢ã®æ¹ã§å°ãã§ãèå³ãæã£ãŠããã ããããæ¯éãé¢è«ã§ã話ãããŸãããã æåŸãŸã§ãèªã¿ããã ããèª ã«ããããšãããããŸããã P.S. æšå¹Žãäžæšå¹Žã®æ°åç ä¿®ã®æ§åã¯ãã¡ããããããããã芧ããã ããŸãã 2020 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠2019 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãå»çä»è·æ±äººãµã€ãããžã§ãã¡ãã¬ãŒãã®éçºãæ
åœããŠãããšã³ãžãã¢ã®å±±ç°ã§ãã ä»å¹Žã®æ°åãšã³ãžãã¢ç ä¿®ã«ãããŠãã¡ã³ã¿ãŒãæ
åœããŸããã ã¡ãã¬ãŒã§ã¯ 2019 幎床ããæ°åæ¡çšãè¡ãªã£ãŠãããä»å¹Ž 2021 幎床㯠5 åã®æ°åããšã³ãžãã¢ãšããŠå
¥ç€ŸããŸããã äŸå¹Žãšåãã 4 æãã 9 æã«ãããŠãçŽ 5 ã¶æéã®æ°åãšã³ãžãã¢ç ä¿®ã宿œããŸããã®ã§ããã®åãçµã¿ããç ä¿®åè¬è
ã§ããæ°åããã®å£°ã亀ããŠã玹ä»ããŸãã æ°åç ä¿®ã®æŠèŠ ä»å¹Žã®æ°åç ä¿®ã®æçµãŽãŒã«ã¯ãã ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã Our Essentials (â») ãäœçŸãã顧客ãžäŸ¡å€æäŸã§ããããã«ãªãããã®åºç€ã身ã«ã€ããçµéšãåŸãããš ããšããŠæ²ããŸããã â») ã¡ãã¬ãŒã®è¡ååå ã¡ãã¬ãŒã®æ°åãšã³ãžãã¢ç ä¿®ã§ã¯ãæè¡ã身ã«ã€ããããšã ãã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠã®åºç€ã身ã«ã€ããã¡ãã¬ãŒã倧åã«ããŠãã䟡å€èгãçè§£ããäœçŸããæèããã£ãŠã顧客ãžã®äŸ¡å€æäŸã«ã€ããŠèªåã®èšèã§è©±ããããã«ãªãããšãŸã§ãç®æããŠããããŸãã ç ä¿®ã¯æšå¹Žåæ§ã倧ããåããŠã4 ã€ã®ãã§ãŒãºã«åºåã£ãŠè¡ããŸããã ãŸããå
šç ä¿®æéãéããŠãåæ°åã«ã¯ã¡ã³ã¿ãŒãäžäººãã€ä»ããŸãããã¡ã³ã¿ãŒã¯ãäžé±éã« 1~2 åã®ããŒã¹ã§æ°åãš 1on1 ããŒãã£ã³ã°ã宿œãããã£ãžã«ã«ãšã¡ã³ã¿ã«ã®äž¡é¢ãæ°é£ããåå¥ã«ãã©ããŒãè¡ããŸããã æ°åç ä¿®ã®å
容 ãã§ãŒãº 1ïŒç€ŸäŒäºº&ã¡ãã¬ãŒåºç€ç ä¿® ãªã¹ã¯ç ä¿® ã€ã³ãµã€ããŒååŒé²æ¢ç ä¿® ã³ã³ãã©ã€ã¢ã³ã¹ç ä¿® æ
å ±ã»ãã¥ãªãã£ç ä¿® ããžãã¹ç ä¿® ããžãã¹ãããŒç ä¿® ããžãã¹ã¹ãã«ç ä¿® ããžãã¹ã¹ã¿ã³ã¹ç ä¿®ïŒå€éšç ä¿®ïŒ ãã§ãŒãº 1 ã§ã¯ã ææãåºãã䟡å€ãçºæ®ããããã«å¿
èŠãªããžãã¹ããŒãœã³ãšããŠã®åºæ¬çãªä»äºã®åã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ãªã¹ã¯ç ä¿®ã§ã¯ãã¡ãã¬ãŒç€Ÿå¡ãšããŠã瀟äŒäººãšããŠã身ã®åšãã§èµ·ãããããªã¹ã¯ã«ã€ããŠèããããã«ãããã®ãªã¹ã¯ãšåãåãããè¬çŸ©åœ¢åŒã§åŠãã§ããããŸããã ããžãã¹ç ä¿®ã§ã¯ã瀟äŒäººãšããŠã®æäœéã®ãããŒãåŠã³ãè«ççæèåãã³ãã¥ãã±ãŒã·ã§ã³åãªã©ããšã³ãžãã¢è·ã«éããªã課é¡è§£æ±ºåãžã€ãªããããŒã¿ãã«ãªç¥èãã座åŠãšã¯ãŒã¯ã·ã§ãããéããŠå®çããŠãããããšãå³ããŸããã ãŸãã瀟äŒäººã®åºæºã§ä»äºãšåãåããé©åãªå ±é£çžã«ãã£ãŠåšå²ãšååããŠããããšã®éèŠæ§ã«ã€ããŠãåŠãã§ããããŸããã æ°åããã®å£° 質ã®é«ããå€éã®ã€ã³ãããã»ã¢ãŠãããããã§ãã äŒããã¡ãŒã«ã®æžãæ¹ãååºã®æž¡ãæ¹ãªã©ã瀟äŒäººã«å¿
é ã®ãããŒãã¹ãã«ãèªèã§ãã ã¯ãŒã¯ãéããŠãèšèã§ã¯çè§£ããŠããŠãè¡åãããšã§ããªãããšãæŽãåºãã ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿® éçºåºç€ 1 ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš äºæ¥ïŒãžã§ãã¡ãã¬ãŒ ã» CLINICS ã»ä»è·ã®ã»ããïŒã®æŠèŠèª¬æ éçºåºç€ç ä¿®ïŒRuby on Rails ãã¥ãŒããªã¢ã«ïŒ éçºå®è·µ ïŒèŠä»¶å®çŸ©ããªãªãŒã¹ãŸã§ïŒ éçºåºç€ 2 æè¡æžã®èŒªèªäŒ ããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿® ãã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿® äžéã¬ããŒãäœæ äžéå ±åäŒ ãã§ãŒãº 2 ã§ã¯ãæ°åç ä¿®åŸã«éçºæ¥åã«å
¥ã£ãŠããããããã ãšã³ãžãã¢ãšããŠã®åºç€ã身ã«ã€ããããš ããŽãŒã«ãšããŸããã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš éçºã«é¢ãããã®ãã§ãŒãºã«ãããŠããèŠä»¶å®çŸ©ãå«ãæ±çšçãªæè¡çã¹ãã«ã¯å¿è«ã®ããšãã¡ãã¬ãŒãšã³ãžãã¢ãå
±éããŠæã€ã¹ã䟡å€èгãªã©ãå
±æããããããã§ãŒãº 2 忥ã¯ã ã¡ãã¬ãŒãšã³ãžãã¢ãšããŠæ±ããããš ããšé¡ããŠããšã³ãžãã¢ã®å·è¡åœ¹å¡ ç°äžãè¬çŸ©ãè¡ããŸããã è¬çŸ©ã§ã¯ãã ãšã³ãžã㢠ãšã¯ã ãšã³ãžãã¢ã®äŸ¡å€ ãšã¯ã ãããšã³ãžã㢠ãšã¯ãªãã§ããããïŒããšããåãããå§ãŸããè¬çŸ©ã®çµããã«ã¯ããäžåºŠåãåããããããŠç· ãããããæ°åãã¡ãã¬ãŒã®æ±ãããšã³ãžãã¢åã«ã€ããŠèªèº«ã®èšèã§è©±ããããã«èããŠããããŸããã ã¡ãã¬ãŒãæ±ãããšã³ãžãã¢åã«ã€ããŠã¯ãCTO 平山㮠ã¡ãã¬ãŒå¹³å±±ã®äžå€®çªç Ž: THE ãšã³ãžã㢠ã«ãæžãããŠããŸãã®ã§ããããããã°ãããããŠã芧ãã ããã ããã«ãã¡ãã¬ãŒãå±éããåäºæ¥ããã³é¢é£ãããããã¯ãã®æŠèŠèª¬æããããã¯ããããŒãžã£ãŒãè¡ããã¡ãã¬ãŒã§éçºããæçŸ©ããããããŠèªèããŠããããŸããã éçºåºç€ç ä¿® 2 æ¥ç®ããã Ruby on Rails ãã¥ãŒããªã¢ã« ïŒä»¥äžããRails ãã¥ãŒããªã¢ã«ãïŒãææãšãããéçºåºç€ç ä¿®ã«ç§»ããŸããã ã¡ãã¬ãŒã®ãããã¯ã㯠Rails ã§äœãããŠãããã®ãå€ããWeb ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åºç€ã身ã«ã€ããããã«ããRails ãã¥ãŒããªã¢ã«ã®å
容ã宿œããŠããããŸããã åçŽã«ãRails ãã¥ãŒããªã¢ã«ã®å
å®¹ã«æ²¿ã£ãŠããã©ãã©ãšåçµããã®ã§ã¯ãªããéæãåŠãã ããšã¯ Confluence ã«ãŸãšããGitHub äžã§ Pull Request ãäœæãã圢ã§ããœãŒã¹ã³ãŒããå
±æããŠããããŸããã åŠãã ããšãèªåã®èšèã«çœ®ãæããŠã¢ãŠããããããããšã§å埩åŠç¿ãä¿ããPull Request ãäœæããŠãããããšã§ GitHub ã®äœ¿ãæ¹ã«æ
£ããŠãããããšãå³ããŸããã ãŸãããã€ãªãŒã§æäŒãšå€äŒã宿œããŸãããæäŒã¯ä»äºã®ãªãºã ãæŽããããã®é¡åãããå€äŒã¯æ°åãã質åã»ææãå
±æããŠã¡ã³ã¿ãŒãããã«å¯ŸããŠãã£ãŒãããã¯ãããå ŽãšããŠãããã宿œããŸããã ç ä¿®åã«æ¢ã« Rails ãã¥ãŒããªã¢ã«ãäžåšããŠããæ°åãããŸããããäºåšç®ã宿œããŠæ°ããªæ°ä»ããåŸãããAWS ãçšããŠã¯ã©ãŠãäžã«ç°å¢æ§ç¯ããäœæãã Web ã¢ããªã±ãŒã·ã§ã³ããããã€ãããŸã§ãå®è·µããŠããããªã©ãã€ã³ãã©ã«é¢ããŠãçè§£ãæ·±ããŠãããããšãã§ããŸããã æ°åããã®å£° ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäžããããã®å·¥å€«ãç¥ãããšãã§ãã ãã°çºçãåå ç¹å®ãä¿®æ£ããšãããããã°ã®ã¹ããŒãããç ä¿®åºç€ããé£èºçã«äžãã£ã ãããã¯ãã§å©çšããŠãã AWS ã®åçš®ãµãŒãã¹ã®æŠèŠãçè§£ã§ããããšã«å ãããµãŒãã¹éã®ç¹ããããããã¯ãŒã¯ã®æµãã«é¢ããŠãçè§£ãæ·±ããããšãã§ãã éçºå®è·µ éçºåºç€ç ä¿®ã«ãŠ Web ã¢ããªã±ãŒã·ã§ã³éçºã®åºç€ãåŠãã åŸã¯ãã ã¡ãã¬ãŒ/ã°ã«ãŒãäŒç€Ÿã§äœ¿ãæ¥èšªè
åä»ã·ã¹ãã ããéçºé¡æãšããŠãéçºå®è·µç ä¿®ãè¡ããŸããã éçºæ¥åå
šäœã®æµããææ¡ããããšã§ã ããŒã ã§éçºïŒèª²é¡è§£æ±ºïŒããããšãçµéšããä»åŸã®ä»äºã«åœ¹ç«ãããããš ãç®çãšããŸããã æ¬ç ä¿®ã§éæãã¹ãããšãšããŠæ²ããŠãããã®ã¯äž»ã«ã次ã®éãã§ãã ãããžã§ã¯ã管çèœåã身ã«ã€ããããš éçºãã察象ãäœç³»çã«æŽçã§ããèœåãé€ãããš ã·ã¹ãã èšèšã«é¢ããåºç€çãªç©äºãçè§£ããããš ããŒã éçºãçè§£ããããš å質ãçè§£ããããš æ¢ã«æ±ºãŸããã£ã仿§æžã«æ²¿ã£ãŠéçºããã®ã§ã¯ãªããæ°åèªèº«ãçŸç¶ã®å顿æ¡ãèª²é¡æŽçãè¡ã£ãŠããŠãŒã¶ãŒãžäŸ¡å€æäŸããããã«äœãäœãã¹ãããèããããšããå§ãŸãããªãªãŒã¹åŸã®éçšæ¹æ³ãã©ã³ãã³ã°ã³ã¹ãã®ããšãŸã§èãææ¡ããŠããããŸããã éçºå®è·µç ä¿®ã¯çŽ 1 ã¶æã®æéããããŠè¡ããŸããã倧ãŸããªæµããšããŠã¯ã次ã®éãã§ãã èŠä»¶å®çŸ©ïŒãã¢ãªã³ã°ã»çŸç¶ææ¡ã»èª²é¡æŽçã»èŠæ±åæã»æ©èœ/éæ©èœèŠä»¶ã®æŽãåºãã» UI èæ¡ïŒ ãããžã§ã¯ãèšç»ïŒåœ¹å²åæ
ã» WBS/ã¬ã³ããã£ãŒãäœæïŒ èšèšïŒç»é¢èšèšã»æ©èœèšèšã»ããŒã¿ã¢ããªã³ã°ã»æ¹åŒèšèšã»ã€ã³ãã©èšèšïŒ éçºïŒå®è£
ã»ã³ãŒãã¬ãã¥ãŒïŒ QAïŒãã¹ãèšèšã»ãã¹ãïŒ ææçºè¡šïŒææç©ãé¢ä¿è
ãžãã¬ãŒã³ã»ãªãªãŒã¹ïŒ æ¹åŒèšèšã®äžéšãšããŠãéçºã«äœ¿çšããèšèªãªã©ã®éžå®ãæ°åèªèº«ãè¡ããŸããã ä»åäœæãã瀟å¡åã管çç»é¢ãšæ¥èšªè
åãç»é¢ã¯ãããã SPAïŒäžéšãPWAïŒã®ã¢ãŒããã¯ãã£ãæ¡çšããäž»ãªã©ã€ãã©ãª/ãã¬ãŒã ã¯ãŒã¯ã«é¢ããŠãããã³ããšã³ã㯠TypeScript , React , Next.js , Chakra UI , Ionic Framework ãããã¯ãšã³ã㯠Ruby on RailsïŒAPI ã¢ãŒãïŒãããããå©çšããããšãšãªããŸããã éžå®çç±ãšããŠã¯äž»ã«ã次ã®éãã§ãã TypeScript, ReactïŒäž¡ç»é¢å
±éïŒ ããžãã¯ãããã³ãã¬ãŒããŸã§ã®å
šãŠã®ã³ãŒããéçåä»ãã§æžãããšãã§ããå
ç¢æ§ã«åªããŠãããã Next.js, Chakra UIïŒç€Ÿå¡åã管çç»é¢ïŒ ãŒãã³ã³ãã£ã°ã§ãã«ããã¬ã³ããªã³ã°ãæé©åã§ãããã ã¢ã¯ã»ã·ããªãã£ã«åªãããªãã㪠UI ãçŽ æ©ãæ§ç¯ã§ãããã Ionic FrameworkïŒæ¥èšªè
åãç»é¢ïŒ iPad äžã§ããã€ãã£ãã¢ããªã®ãã㪠UI/UX ãæäŸãããã Ruby on Rails API ã¢ãŒã ããã³ããšã³ããšããã¯ãšã³ããåé¢ããŠççµåã«ãããã çæéã§æ§ç¯ãããã 瀟å
ã§ããã䜿ãããŠããã¡ã³ããã³ã¹ãããããã ã€ã³ãã©ã¯ AWS ãæ¡çšããEC2, S3, RDS, CloudFront, Route53, CloudWatch ãªã©ã®ãµãŒãã¹ãå©çšããŸããã çµæçã«ãæ¬ç ä¿®ããã°ã©ã ã®ææç©ãšããŠãªãªãŒã¹ãããã·ã¹ãã ã¯ã Medley Entrance ããšããååã§ã瀟å
ããŒã«ãšããŠçŸåšãæ¯æ¥çšŒåããŠããããŠãŒã¶ãŒãšããŠã¡ãã¬ãŒ/ã°ã«ãŒã瀟å¡ã ãã§ã¯ãªããæ¥èšªè
ã®æ¹ã
ã«ã䜿ã£ãŠããã ããŠããŸãã Medley EntranceïŒäžïŒç€Ÿå¡åã管çç»é¢ãäžïŒæ¥èšªè
åãç»é¢ïŒ ããŒã ã§èª²é¡è§£æ±ºã«èšã¿ãäŸ¡å€æäŸãŸã§ã®å®çžŸãæ®ããããšã¯èªä¿¡ã«ã€ãªãããéçºå®è·µç ä¿®ã®ãããããšããŠãæããŠããããã®ã§ã¯ãªãã§ããããã èŠä»¶å®çŸ©ãªã©ã®æéäžãæ³å®ãããã¹ã ãŒãºã«é²ããããªãã£ãæãä»è²¬ã«ãããåã
ããªãŒããŒã·ãããçºæ®ãã建èšçã«é²ããŠããæ°åã®æ§åãã¡ã³ã¿ãŒã®äžäººãšããŠåã§èŠãããŠããããŸããã ãã® 1 ã¶æéã®éçºå®è·µç ä¿®ãéããŠãæè¡åã¯ããããšãªããã課é¡è§£æ±ºã«å¯Ÿããååãªç±æãšäž»äœæ§ãæ°åããæãããããšãŠãé Œãããå°è±¡ãšããŠæ®ããŸããã æ°åããã®å£° éçºã®äžã§ã®æ¹éãæèããŠèšèš/å®è£
ããããšãã§ãã(ã·ã³ãã«ã«ãã) QA ãšã¯ããããäœããšãããªãµãŒãããå
¥ããæèè
ã®èãæ¹ãè»žã«æ¹éãæ±ºããŠããå§ãããã åã
ãæé©ãªããã©ãŒãã³ã¹ãçºæ®ã§ããç°å¢ã¥ãããæèããŠãé«éãªæææ±ºå®ãå¯èœãªäœå¶ãæŽããããšãã§ãã èŠä»¶ã決ãŸããã£ãŠããªãäžã§èšèšããã®ã¯é£ããã£ã éçºã¿ã¹ã¯ãéäžããŠããæã«ããããžã§ã¯ãå
šäœã®çŸç¶ãææ¡ã§ããŠããªãã£ã æç« ãäœãã¹ãã«ãè¶³ããŠããªã æè¡æžã®èŒªèªäŒ ãã§ãŒãº 2 ã®éçºåºç€ 2 ã®èŒªèªäŒã§ã¯ã ãWeb ãæ¯ããæè¡ -HTTPãURIãHTMLããã㊠RESTã ã顿æžç±ãšããŠã7 æ¥éã«æž¡ã£ãŠæ¯æ¥ãæ¬¡ã®æé ã§å®æœããŸããã åå è
ãåãããŒãããããããèªãã§ãããæžç±ããåŠãã ããšãããããªã©ã§èª¿ã¹ãŠãè§£æ¶ããããªãã£ãçåç¹ãªã©ããŸãšãã ãã®å
容ãããšã«ã倿¹ã®ããŒãã£ã³ã°æã«ãããŠãåèªãçºè¡šããŠãã£ã¹ã«ãã·ã§ã³ãè¡ã ãã£ã¹ã«ãã·ã§ã³ããå
容ã¯è°äºé²ã«ãŸãšãã 茪èªäŒã¯ä»è
ããã®åŠã³ãå
±æããŠãããããšã§ãèªåã«ã¯ãªãã£ãèŠç¹ã»æ°ä»ããç²åŸãããã®æžç±ãžã®çè§£ãããæ·±ãããã广ããããŸãã æ¬ç ä¿®ããã°ã©ã ã«ããã茪èªäŒã®ç®çãšããŠã¯ã Web ãµãŒãã¹ãéçºããŠããäžã§å¿
èŠãšãªãç¥èãžè§Šããããšã«ãããä»åŸç²åŸããŠããã¹ãç¥èã®ããŒã¹ã©ã€ã³ãçè§£ããããš ã§ãããã茪èªäŒãªãã§ã¯ã®ã¡ãªããã»æ¥œãããæ°åã«å®æããŠããããããšãã坿¬¡çãªå¹æãšããŠãã£ããšæããŸãã æ°åããã®å£° Web ã®åºæ¬çãªç¥èãããªãç»å Žããã®ãããçè§£ããªããç¶²çŸ
çã«åŠã¶ããšãã§ãã ææžã§ãŸãšããåŸã«ãå£ã§èª¬æããããšãåŠãã å
容ã®å®çã«è¯ããšæãã ãããŸã§ãªããšãªãå®è£
ããŠããããšã®ä»çµã¿ãåŠã¶ããšã§ãç¥èãšããŠå®çããããšãã§ãã äžéå ±åäŒ ãã§ãŒãº 2ïŒãšã³ãžãã¢åºç€ç ä¿®æåŸã®ç ä¿®ããã°ã©ã ã§ããäžéå ±åäŒã«åããŠãããã¥ã¡ã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ããã¬ãŒã³ããŒã·ã§ã³ã¹ãã«ç ä¿®ã宿œããŸããã äžèšã¹ãã«ãå¿
èŠãšãªãèæ¯ã¯ã次ã®éãã§ãã ãšã³ãžãã¢ãªã³ã°ãéãã課é¡è§£æ±ºãšã¯ããã°ã©ã ãæžãã ãã§ã¯è§£æ±ºããªãå Žé¢ããã èæ¯ãç®çãæ£ããã¹ããŒã¯ãã«ããŒãžå
±æããªããããŒã ãšããŠåãçµãã§ããããšã«ãªã äŒãããããšãæç« ãšããŠæŽçããä»è
ãžåãããããäŒããŠããããšãæ±ãããã ãŸããã¡ãã¬ãŒã®è¡ååå Our Essentials ãæ§æããèŠçŽ ãšããŠããããã¥ã¡ã³ãããªãã³ããå
šãŠãæç¢ºã«ããšããé
ç®ãå«ãŸããŠãããããããå®çŸããããã«ãããšãŠãéèŠãªã¹ãã«ãšããŠã¡ãã¬ãŒã¯èããŠããŸãã æ°åç ä¿®ãçµãã£ãåŸãããšã³ãžãã¢ãšããŠæè¡çãªã¹ãã«ã身ã«ã€ããæ©äŒã¯æ¥åžžçã«å€ããããŸãããäžèšã®ãããªã¹ãã«ããŸãšããŠç¿åŸããæ©äŒã¯å°ãªãããããã®ãããªç ä¿®ã瀟äŒäººã®ã¯ããããåããŠããããšã§ããã®åŸã®äŒžã³ãããéã£ãŠããã®ã§ã¯ãªãããšæããŸãã ç ä¿®ãçµãã£ãåŸã¯ãåèªã§å ±åäŒçšã®è³æãäœæããç ä¿®è¬åž«ããã®æ·»åãåããŸããã äžéå ±åäŒã¯åéšçœ²ã®éçºãããŒãžã£ãŒãçºè¡šçžæãšããŠãåœæ¥ã¯çšããç·åŒµæããã£ãŠãè¯ãé°å²æ°ã§å ±åäŒãçµããããŸããã ãã§ãŒãº 3ïŒäºæ¥éš OJT äºæ¥éšç ä¿® åç· åœ¹è±ç°ããã®è¬çŸ© CLINICS äºæ¥éšç ä¿® ãžã§ãã¡ãã¬ãŒäºæ¥éšç ä¿® éçº OJT ã·ã¹ãã å
šäœå説æ ç°å¢æ§ç¯ åãããã¯ãã®éçºããŒã ã§ã® OJT ãã§ãŒãº 3 ã§ã¯ã 顧客ã®èª²é¡ãšã顧客ãžã®äŸ¡å€æäŸã®ããã®åããŒã ã®é£æºãäœæããã¡ãã¬ãŒã®é¡§å®¢æäŸäŸ¡å€ãèªåã®èšèã§è©±ããããã«ãªãããš ããŽãŒã«ãšããŸããã ãã§ãŒãº 3 ã®ã¯ããã«ãåç· åœ¹è±ç°ã«ããæ¥æ¬ã®å»çã®èª²é¡ãšã¡ãã¬ãŒã®åãçµã¿ã«é¢ããè¬çŸ©ãåè¬ããŠããããŸããã æç¶å¯èœãªå»çäœå¶ãæ§ç¯ããŠããããã«ã¡ãã¬ãŒãæãã¹ãããšãªã©ã®è©±ãèããåŸã«ãæ°åããã®è³ªåã®åãçãã«ãã£ãŠçè§£ãæ·±ããã¡ãã¬ãŒã®ç€ŸäŒçæçŸ©ããããããŠèªèããŠãããããšã³ãžãã¢ãšããŠã ãã§ã¯ãªãã ã¡ãã¬ãŒç€Ÿå¡ãšããŠã®èªèŠ ã匷ããŠããããŸããã äºæ¥éšç ä¿® éçº OJT ã§æãåããåã«ãèªåãã¡ãäœã®ããã«éçºããã®ããå
·äœçã«ã€ã¡ãŒãžã§ãããããæ¬¡ã®ããã«ãåçŸå Žã«åå ããŠããããŸããã èŠèŸŒé¡§å®¢ãžã®æ¶é»æ¥åèŠåŠ åè«åã®ç€Ÿå
ããŒãã£ã³ã°åå åè«çŸå Žååž å®äŸäŒè°åå äºæ¥éšã®ã¹ã¿ãããã顧客ã®èª²é¡ã«å¯ŸããŠãã©ã®ãããªå¯Ÿå¿ãããŠããŠãã©ã®ããã«ãããã¯ãã説æããŠããã®ããäºæ¥éšã®åããŒã ããã©ã®ããã«é£æºããŠæçµçã«é¡§å®¢ã«äŸ¡å€ãå±ããã®ãã®å
šäœèгãç¥ã£ãŠãããããšãçããšããŠããŸããã éçºããŒã ã®ãšã³ãžãã¢ã¯æ¥åäžããããã¯ãã®ãšã³ããŠãŒã¶ãŒã§ãã顧客ã®å£°ãªã©ãåè«ã®ã¿ã€ãã³ã°ããèããæ©äŒã¯ãªããªãç¡ãã®ã§ãç ä¿®ãéããŠè©±ãèããããšã¯ãä»åŸã®éçºã¢ãããŒã·ã§ã³ã«ã圱é¿ããè¯ãæ©äŒã ã£ããšæããŸãã æ°åããã®å£° ãŠãŒã¶ãŒã顧客ãäºæ¥éšãæ±ãã課é¡ã確èªã§ããããšã§ãéçºä»¥å€ã«ãç®ãåãããã£ããã«ãªãè¯ãã£ã åéšçœ²ã KPI ãšããŠå®ããŠããæ°åãç¥ãããšãã§ããéçºã«éããŠããŠããæœçã®åœ±é¿ç®æãã©ã®éšåããçè§£ã§ããäžã§ãéçºã«åãçµãããšãã§ããããã«ãªã£ã åéšçœ²ã®ããŒãã£ã³ã°ã«åå ããããšã§ãåéšçœ²ãã©ã®ãããªèãã§äœãç®æããŠããã®ããçè§£ã§ããã¡ãã¬ãŒå
šäœãšããŠç®æããŠããæ¹åæ§ãæŽãã éçº OJT äºæ¥éšç ä¿®ã«ç¶ãéçº OJT ã§ã¯ã ãžã§ãã¡ãã¬ãŒ ã CLINICS ã ä»è·ã®ã»ãã ã®éçºããŒã ã«åãããŠãç ä¿®ã宿œããŸããã OJT é
å±å
ã§ã¯ãã¡ã³ã¿ãŒãšã¯å¥ã«ããã¬ãŒããŒãä»ããŠæ¥åã®é²ãæ¹ãªã©ããµããŒãããŸããããã¬ãŒããŒã¯é
å±å
ã®å
茩ãšã³ãžãã¢ãæ
åœããŸããã OJT ã®æµããšããŠã¯ã忥ã«ããããã¯ããã©ã®ããã«åããŠããã®ããã·ã¹ãã å
šäœåãææ¡ããããšããå§ãŸããåèªãããã¥ã¡ã³ãã«æ²¿ã£ãŠãPC ã«ããŒã«ã«éçºç°å¢ãã»ããã¢ããããŸããã ãã®åŸã¯ãä»ã®å
茩ãšã³ãžãã¢ãšåæ§ã«ãGitHub Issue ã§ç®¡çãããŠãã課é¡ãè§£æ¶ããããšãæ¥ã
ã®ç®æšãšããŠããªããŠããããŸããããã ããåã« Issue ã«æžãããŠãã課é¡ãã¯ãªã¢ããããšããã®ã§ã¯ãªãã ããããããªããããããã®ããIssue ã®èæ¯ã起祚è
ã®æå³ãååã«çè§£ããäžã§ããããã¯ãã®ããã¹ãå§¿ã«å°ã ããšãæèããŠããããŸããã Issue ã«æžãããŠããå
容ã®çè§£ãäžååã ã£ããã解決æ¹éãããŸãå®ãŸããªãå Žåã¯éæãããŒãã£ã³ã°ã®æéãèšããŠãIssue 起祚è
ããã¬ãŒããŒãšèªèåãããè¡ããèªèã®çžéããçãŸãããã¹ã³ãã¥ãã±ãŒã·ã§ã³ãæ¥µåæžãããããåãçµã¿ãŸããã æè¡çãªè³ªåã«é¢ããŠãã宿çã«è³ªåã¿ã€ã ãèšããããè€éã«ãªããããªå®è£
ããã€ãŸãããã€ã³ããšãªããããªç®æã«é¢ããŠã¯ã ç»é¢å
±æãçšããŠã¬ãã¥ãŒ ãè¡ããçåç¹ã«é¢ããŠããã®å Žã§ç¢ºèªããŠãè§£æ¶ããŠããããŸããã ç·æ¥äºæ
å®£èšæéäžã ã£ããããäŒç€Ÿå
šäœã§ååãåšå®
å€åã®äœå¶ãšãªã£ãŠããã察é¢ã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåžèã«ãªããã¡ã§ããããæäŒãå€äŒãå«ããããšãæ°åãã質åãç¡ããŠã質åã¿ã€ã ã§ã®ããŒãã£ã³ã°ã¯å®æçã«å®æœãããªã©ã ã§ããã ãé »ç¹ã«é¡åããããŠãæ°åæ¬äººã®å£°ãšé¡ã確èªãã ããå¿ãããŸããã Issue ãžã®ã¢ãµã€ã³ããå§ãŸã£ãŠãå®è£
-> ã¬ãã¥ãŒäŸé Œ -> QA -> ãªãªãŒã¹ -> Issue 起祚è
ãžã®å ±åãŸã§ãäžé£ã®éçºãããŒãçµéšããŠããããããŒã å
ã§ã®éçºæ¥åã«æ
£ããŠãããããšãã§ããŸããã ãã§ãŒãº 4ïŒæçµå ±å æ°åç ä¿®æåŸã®ããã°ã©ã ãšããŠãã¡ãã¬ãŒåœ¹å¡é£ã«åããæçµå ±åäŒã宿œããŸããã æçµå ±åäŒã®ç®çãšããŠã¯ã次ã®éãã§ãã åŠãã ããšã®ç¥èãæ·±åããã èªãã®åŸæã»äžåŸæãæããå°æ¥ã®æé·èšç»ãç«ãŠã äœç³»çã«æŽçã»ææžåããŠä»è
ãžäŒããã¹ãã«ãåäžããã 圹å¡é£ã«åããŠãã¬ãŒã³ããããšã§ãæ¬é
å±ã«åããæ±ºæè¡šæãšããŠåºåããä»ãã 圹å¡é£ãžã®çºè¡šã§ããããšã«å ããäžäººãããã®çºè¡šæéã«ãå¶éãèšããããŠãããåœæ¥ã®ç·åŒµã¯ããªãã®ãã®ã ã£ããšæããŸãã 忥ã«çºè¡šäŒå ŽãäžèŠããŠããªããŒãµã«ãå
¥å¿µã«è¡ããªã©ãåœæ¥ã®çºè¡šäŒãæåããããããã¡ãã¬ãŒã®ãšã³ãžãã¢ãšããŠã®èªèŠãæã£ãŠãçºè¡šæºåã«åãçµãã§ããŸããã æè¡å¿åãšãããã¯ãå¿åã®äž¡èŒªãç®æããšã³ãžãã¢åéäž ã¡ãã¬ãŒã®ç ä¿®ã§ã¯ãæè¡çãªè¬çŸ©ãå®è·µã ãã§çµããã®ã§ã¯ãªããããžãã¹ããŒãœã³ãšããŠå¿
èŠãªåºç€ã身ã«ã€ãããªãéçºããã®ãã远究ãããããã¯ããéãã課é¡è§£æ±ºãå®äœéšããŠãããããšãéèŠããŠããŸãã ã¡ãã¬ãŒã§ã¯ãå»çãã«ã¹ã±ã¢åéã®èª²é¡è§£æ±ºã«æã¿ãããšã³ãžãã¢ãåéããŠããŸãã æ°åã®åŠçã«éãããäžéæ¡çšãè¡ã£ãŠããã®ã§ããšã³ãžãã¢ã®æ¹ã§å°ãã§ãèå³ãæã£ãŠããã ããããæ¯éãé¢è«ã§ã話ãããŸãããã æåŸãŸã§ãèªã¿ããã ããèª ã«ããããšãããããŸããã P.S. æšå¹Žãäžæšå¹Žã®æ°åç ä¿®ã®æ§åã¯ãã¡ããããããããã芧ããã ããŸãã 2020 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠2019 幎床æ°åãšã³ãžãã¢ç ä¿®ã«ã€ã㊠åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã https://www.medley.jp/jobs/
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ãããŸããŠãã¡ãã¬ãŒã®ãšã³ãžãã¢çæ¬ã§ããæ°åã§å
¥ç€Ÿãä»å¹Žã§ 3 幎ç®ã«ãªããŸããŠã 2019 幎床ãšã³ãžãã¢æ°åã®ç ä¿® ãçµããŠããæ© 2 幎ãçµãšããšããŠããŸãã ãããªç§ã§ããå»å¹Žã® 11 æé ããå
æãŸã§ã®éããšãããããžã§ã¯ãã®ãªãŒããŒãä»»ããŠããã£ãŠããã®ã§ããã®ã話ããããŠããã ããŸãã ã¯ããã« ç§ã¯æ°åç ä¿®ãçµããŠããå»çä»è·æ±äººãµã€ã ãžã§ãã¡ãã¬ãŒ ã®ããŒã ã§éçºãããŠããŸãããããã®ãžã§ãã¡ãã¬ãŒãæ¯ãã瀟å
管çã·ã¹ãã ã®ãªãã¥ãŒã¢ã«ãããžã§ã¯ãã«åæããæºãã£ãŠããŸããã ãã¡ãã®ãããžã§ã¯ãã«ã€ããŸããŠã¯ãåŒç€Ÿãã¶ã€ããŒã®é
äºã ãã¶ã€ããŒããã¶ã€ã³ããŒã«ã䜿ããã«ãReact ã䜿ã£ãŠãã¶ã€ã³ãã話 ããåŒç€Ÿãšã³ãžãã¢ã®å±±ç°ã GraphQL, TypeScript, React ãçšããŠåå®å
šã«ç€Ÿå
ã·ã¹ãã ããªãã¥ãŒã¢ã«ãã話 ã以åããã°ã«ããŠããŸãã®ã§ããããããã°ããããŠã芧ãã ããã ãã®ç€Ÿå
管çã·ã¹ãã ãã©ã®ãããªæµãã§ãªãã¥ãŒã¢ã«ãããã®äžã§èªåã®åœ¹å²ãã©ãå€åãã©ã察å¿ããã®ããªã©ã«ã€ããŠã次ã®ç« ããã話ãããŠãããŸãã ãããžã§ã¯ãã«ã€ã㊠ãªãã¥ãŒã¢ã«ã®èæ¯ãã·ã¹ãã ã®æŠèŠã«ã€ããŠã¯äžã«ç޹ä»ããèšäºã§ã説æããŠãããã岿ããŸãããæ±è·è
ãæ±äººãæ²èŒãã顧客ã«é¢ããæ¥åãè¡ã£ãŠããã·ã¹ãã ãããã 1 幎åãããŠå·æ°ãããšãã倧ããªãããžã§ã¯ãã§ããã ã·ã¹ãã ã®äžã§ãæ±è·è
é¢é£ããPhase1ãã顧客é¢é£ããPhase2ããšããŠåå²ãããªãã¥ãŒã¢ã«ãé²ããŸããã ãããžã§ã¯ãå
ã§ã®èªåã®åœ¹å²ã®å€é· Phase1 ã®æåæã¯å
茩æ¹ãã¢ãŒããã¯ãã£ã®èšèšãã¹ã±ãžã¥ãŒãªã³ã°ãããŠããŸãããåœæãŸã æ°å 1 幎ç®ã§æªçãªç§ã§ããããæš©é管çã®ããŒãã«èšèšãããã¿ã¹ã¯ãã¢ãµã€ã³ããŠããããŸãããããã§ã¯è©³çްãçããŸãããåããŠã®ããŒãã«èšèšã§å³ãå·Šãåãããªãç¶æ
ãã責任æãæã£ãŠäœãšã圢ã«ããããšãã§ããïŒãã¡ãããªãã¥ãŒã¢ã«äžã«å€å°ã®èŠçŽãã¯ãããŸãããïŒå€§ããªéææãåŸãããšãèŠããŠããŸãã åçš®èšèšãæè¡éžå®ãéçºã®é²ãæ¹ãªã©ã倧æ¹åºãŸãæ¬æ Œçã«éçºãå§ãŸãããã§ãããPhase1 ã®éã¯å
茩瀟å¡ããããžã§ã¯ããªãŒããŒãšããŠåŒã£åŒµã£ãŠããã ããèªåã¯éçºã¡ã³ããŒã®äžå¡ãšã㊠API ã®äœæãªã©ã«å¥®éããŠããŸããã GraphQL ãšãã£ãæè¡ãã¹ã±ãžã¥ãŒã«ãå³å¯ã«åŒããããããžã§ã¯ãã§ã®éçºãªã©åããŠçµéšããããšãå€ã
ãããŸããããå
茩æ¹ã«ãµããŒããããã ããããåæãšåç£ç¢ç£šããªããåãçµãããããã§ãPhase1 ãä¹ãåãããšãã§ããŸããã ããŠããããããæ¬é¡ã«ãªããŸãããPhase2 ã«ãªããšãããžã§ã¯ãã¡ã³ããŒã®å
¥ãæ¿ããç§èªèº«ã®ç®æšèšå®ãéãªãããããžã§ã¯ããªãŒããŒãä»»ããŠãããããšã«ãªããŸãããŸãã¯ãããžã§ã¯ããªãŒããŒã«ä»»åœãããŠãããã©ããã£ãä»äºãããŠããã®ãã玹ä»ããŸãã ãããžã§ã¯ããªãŒããŒã®ä»äº ãããžã§ã¯ããªãŒããŒãšããŠæåŸ
ãããŠããããšã¯ä»¥äžã®éãã§ãã ãããžã§ã¯ã管ç ã·ã¹ãã èšèš éçº ããŒã ãããžã¡ã³ã ãããæŽã«çްååããç§ã®å®æ¥åãšç
§ããåãããªãã䞊ã¹ãŠã¿ããšãå€å°ç²åºŠã«ã°ãã€ãããããããããŸããã以äžã®ãããªããšãæããããŸãã èŠä»¶å®çŸ©ã»ç»é¢èšèšïŒãã£ã¬ã¯ã¿ãŒãšãã¶ã€ããŒäž»å°ã§é²ãã€ã€ããšã³ãžãã¢ãå®ããŒã¿ãæ¢åããžãã¯ãèžãŸãã芳ç¹ãæã¡åãããŠåå ããŸããïŒ éçºæ¹éã®æ€èš éçºã¿ã¹ã¯ãžã®èœãšã蟌㿠æè¡èª¿æ»ã»éžå® API èšèš å·¥æ°ç®åºã»ã¹ã±ãžã¥ãŒãªã³ã° å®è£
ã»ã¬ãã¥ãŒ QAïŒQuality AssuranceïŒãã¹ã ãªãªãŒã¹ãããžã¡ã³ã Phase2 ã¯æ®µéçã«ãªãªãŒã¹ãè¡ã£ãããããã®åºŠã« 1 ãã 9 ãŸã§ãç¹°ãè¿ããŠãããããªæµãã«ãªããŸãããŸããäžèšã«å ããå®äŸããŒãã£ã³ã°ã§ã®å ±åãéçºã¡ã³ããŒã®ã¿ã¹ã¯ãããžã¡ã³ããéæè¡ã£ãŠããŸããã ãã¡ããèŠåŽããããšã¯å€ããå
šéšãæããããšãããšããªããªãã®ã§ããããã®äžã§ãããã€ãã«çµã£ãäžã§ç޹ä»ããããšæããŸãã èŠåŽãšå·¥å€« 1. ãããããäœãããã°ããã®ãã ãŸãæåã«èŠåŽããããšã¯ãããããäœãããã°ããã®ãããããªãããšããããšã§ãããåãããå
ã»ã©æãããããªåããã€ã¡ãŒãžã§ããŠããããã§ã¯ãªããèšäºãæ¬ãèªã¿æŒã£ããå
茩ãšã® 1on1 ã§è³ªåæ»ãã«ããããšåºæ¬çãªç¥èãå©ã蟌ãããã§ãããå®éã«ãšã£ãæåã®åããšããŠã¯ãã§ããéšåãèŠã€ããŠãã£ãŠããããšããããšã ã£ããšæããŸãã èªåããªãŒããŒã«ä»»åœãããæç¹ã§ã®ãããžã§ã¯ãã®ç¶æ³ãšããŠã¯èŠä»¶å®çŸ©ãç»é¢èšèšãé²ãã§ããæäžã§ãããããããããŸãšãŸãã®ãåŸ
ã€ã®ã§ã¯ãªããå
šéšæ±ºãŸããªããšãããªãããšããšãçŸæç¹ã§ãããããšããåãåããŠåããŸããããããããšããããå°ããã€ãªãºã ãäœããæçµçã«å
ã»ã©åæãããããªäžéãã®ããšãã€ã¡ãŒãžã»å®è¡ã§ããããã«ãªã£ãã®ã ãšæããŸãã 2. å·¥æ°èŠç©ãã äžè¬çã«å·¥æ°èŠç©ããã«é¢ããèšäºã¯äžã®äžã«å€ãååšããŸãããç§ã®å Žåã¯å·¥æ°èŠç©ããã®æ¹æ³ãããããªãã£ããšãããããããã©ãããææ³ã§èŠç©ãã£ãã®ããã©ãããéžæè¢ãããã®ãããææ§ã«ããŠããããšãåœåã®åé¡ã§ããã åããŠèŠç©ãã£ãæã¯åã«éçºã¿ã¹ã¯ãç©ã¿äžããå·¥æ°ãå ±åããŠæºè¶³ããŠããŸããŸããããæ§ã
ãªæ¹ã®ãã£ãŒãããã¯ãåããããã¯ã䟡å€ãé«ããããã«ã©ãããåããã§ããã®ããèããå¿
èŠããã£ãããšãçæããŸãããåçŽã«å·¥æ°ãç©ã¿äžããå Žåãäºæ¥çãªéœåãèžãŸããŠãããã ã§éçºããå Žåãªã©ãããã€ãã®éžæè¢ãããããã®è»žã§èããå¿
èŠããã£ãããšãåŠã³ãŸããïŒãã®ææã¯å€ãªå€ãªå€¢ã®äžã§å·¥æ°èŠç©ãããããŠããã®ãä»ã§ã¯ããæãåºã§ãïŒã 3. æææ±ºå® ããã¯ãã€ã«ãªã£ãŠãæ£è§£ãååšããé¡ã®ãã®ã§ã¯ãªãã®ã§ãããç¹ã«æææ±ºå®ã«ã¯èŠåŽããŸãããæææ±ºå®ãšãã£ãŠãéçºæ¹éããæè¡éžå®ãŸã§æ§ã
ãªç²åºŠã®ãã®ããããŸãããç¹ã«æåããèŠåŽããã®ã¯æè¡çãªæ±ºå®ã§ããã ãããŸã§å
茩ã«é Œãããšã®å€ãã£ãç§ããããžã§ã¯ããªãŒããŒã«ãªã£ãçŽåŸããäœãããã§ããããã«ãªãããã§ã¯ãªãããšã¯æã
çœã
ã§ããããèªåãæ±ºããªããšããšçŠã£ãŠããŸã£ãŠããææããã£ããšæããŸãã ããã§äžåºŠç«ã¡æ¢ãŸã£ãŠæèããããšã¯ããäœãã§ããŠäœãã§ããªãã®ããä»è
ã«æç€ºãããããšã§ãããã¯ã£ãããšèªåã«è¶³ããŠããªãããšãä»è
ã«äŒããããšã§ãåšãããµããŒããããããªããšæããŸãããèªåèªèº«ãªã«ããããããšãªã®ãæç¢ºã«ãªãã®ã§åçŽãªããšã§ãã广çã§ãã£ããšæããŸããä»ã«ãéçºã¡ã³ããŒã®ææ¡ã§ãã€ã³ã»ãã·ã§ã³ããããåãå
¥ããŠã¿ãããšã广çã§ããã ãŸããæææ±ºå®ãšã¯æèãå°ãå€ãã£ãŠããŸãããã¢ãããããã¢ããã宿œããŠããŒã åãé«ãå±äººåããªããã€ã€éçºå¹çãåäžãããåãçµã¿ããæéãçµãŠã°çµã€ã»ã©å¹æã宿ã§ããŠè¯ãã£ããšæããŸãããã®ããã«ã¢ãžã£ã€ã«éçºã®ææ³ããããŒã ã«ãã£ããããææ³ãããã€ãåãå
¥ããããšãã§ããŸããã ãããžã§ã¯ããéããŠæé·ããããš ãããŸã§å°åºãã§è²ã
ãšã話ããããŠããã ããŸããããèªåãç¹ã«æé·ãããšæããŠããããšããŸãšããããŠããã ããŸãã äžéãã®çµéšãéããŠåŸããããªãŒãå ãAPI èšèšã ããã§ã¯ãªãäžéãå
šãŠãä»»ããŠããã ããããšã¯ãšãŠã倧ããªçµéšã«ãªããŸãããåããŠå人ã§ã¯ãªãããŒã ã»ãããžã§ã¯ãå
šäœãšããŠå¹çãè¯ããªãåããèããçµéšãã§ãããšæããŸãã æè¡å ãã¡ããå®è£
ãéããŠåŸãæè¡ã¯æ°ããããªãã»ã©ãããŸããããã®äžã§ãç¹ã«è²¬ä»»ãæã£ãŠä»è
ã®ã³ãŒããã¬ãã¥ãŒããããèªåãæžãã³ãŒãã®åœ±é¿ç¯å²ãã¹ã³ãŒããæèãç¶ããããšã倧ããªç³§ã«ãªã£ãŠããæ°ãããŸãã ãªã¹ã¯ç®¡çå ã¹ã±ãžã¥ãŒã«é
å»¶ã®ãªã¹ã¯ãæ¹åæ§ããããŠããŸããªã¹ã¯ãæè¡çãªãªã¹ã¯ãæ§ã
ãããŸãããããã®ãªã¹ã¯ãããžãèããåããããžã§ã¯ããªãŒããŒã«ã¯å¿
èŠã§ãã ãªã¹ã¯ç®¡çã«ãããŠãå
èªã¿ã倧åããšããèšãããŸãããç§ã®å Žåã¯ããå
茩瀟å¡ãããåžžã« 2 é±éå
ãèŠæ®ããŠããããšããå
·äœçãªæ¥æ°ã®ã¢ããã€ã¹ãããã ããŸãããå
·äœçã«ããããšã§ããããããšãæ³åãããããªããŸããããããã 1 å¹Žä»¥äžæ¯æ¥æèãå®è¡ãç¶ããããšãããããžã§ã¯ããããåãããšãã§ããèŠå ã«ããªã£ãŠãããšæããŸãããã¡ãããã®èšèã¯å®¶å®ã«ããããšæã£ãŠããŸãã 䟡å€ã«å¯ŸããèŠé äœãããããããã¯ãã®ãŠãŒã¶ãŒã«äŸ¡å€ãæäŸããããšãã®æå³ãçè§£ããŸããããããŸã§ã«æžããŠãããããªã¹ã±ãžã¥ãŒã«ç®¡çããªã¹ã¯ç®¡çãªã©ã¯ããããŸã§ãããžã§ã¯ããéè¡ããäžã§å¿
èŠãªä»äºã®äžã€ã§ãããªãã¯ãã§ãããããžã§ã¯ããéããŠã·ã¹ãã ã䜿ã£ãŠãã瀟å¡ãæŽã«ã¯ãã®å
ã®é¡§å®¢ã»æ±è·è
ãžåŠäœã«äŸ¡å€ãæäŸã§ãããèããã¹ãã§ãããäžææã¯ãã©ãããã®ãã»ãªã«ãããã®ãããšãããããžã§ã¯ãèªäœãå®éãããããšããèããããŠããªãææããããŸããã èŠéãçããªã£ãŠããããšã«åšãããã®ææã§æ°ã¥ãããšãã§ãããã以éã¯ãããããæ¬åœã«ãã®æ©èœã¯ããã®ãããªã©ãŠãŒã¶ãŒã®ç«å Žããã®èгç¹ãåŸã
ã«èº«ã«ä»ããããšãã§ããŸãããããããã£ãããšãªããåšããšãé »ç¹ã«ããªãããã®ãããè°è«ã§ããããã«ãªã£ããšæããŸããæ°å 1 幎ç®ã§å£é
žã£ã±ãèšãããŠãããç®çæèããããããè
¹èœã¡ããäœçŸããããšãã§ããŸããã æåŸã« æåŸãšãªããŸããããããžã§ã¯ããªãŒããŒã«ã€ããŠèªã£ãŠããç§ã§ãããå
¥ç€ŸãããŸã§ã¯ Web éçºæªçµéšã§ããŠãã¡ãã¬ãŒã§ã®æé·ãéåžžã«å®æããŠããŸãããããªã¡ãã¬ãŒã§ã¯ãšã³ãžãã¢ã»ãã¶ã€ããŒãã¯ããå€ãã®ããžã·ã§ã³ã§æ°ããªã¡ã³ããŒãåéããŠããŸãã®ã§ãå°ãã§ããèå³ããæã¡ããã ããæ¹ã¯ãæ¯éãæ°è»œã«ã話ããããŠããã ããã°ãšæããŸãïŒ ãããŸã§ãä»ãåãããã ããããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã https://www.medley.jp/jobs/
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
äºæ¥æ¬éš ãããã¯ãéçºå®€ãšã³ãžãã¢ã®æ¥äžã§ãã ãªã³ã©ã€ã³èšºçã»æè¬æå°ã»ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãCLINICSã ã®ãæ£è
ã»å»çæ©é¢ã«åããã¢ããªã±ãŒã·ã§ã³ã®æ©èœéçºãéçºåºç€ãã€ã³ãã©åšããæ
åœããŠãããŸãã ä»å CLINICS ãæäŸãããªã³ã©ã€ã³èšºçæ©èœã«ãç»é¢å
±ææ©èœãã远å ããŸããã®ã§ããã®èæ¯ã»æè¡çãªè©±ããŸãšããŸãã ç»é¢å
±ææ©èœå®è£
ã®èæ¯ CLINICS ãšãªã³ã©ã€ã³èšºç æ®æ®µçãããç
é¢ã«ããããšããå€ãã®å Žåã¯ç
é¢ã«è¡ããå»åž«ã®èšºå¯ã察é¢ã§åããäŒèšãããŠåž°ããšãã£ãæµãã«ãªãããšæããŸãã CLINICS ã®ãªã³ã©ã€ã³èšºçã¯ãã®æµããã€ã³ã¿ãŒããããéããŠæäŸãããµãŒãã¹ã§ãã â» ãªã³ã©ã€ã³èšºçã¯ãäžåºŠãå蚺çã§å¯Ÿé¢èšºçãåããéã«å»åž«ãå¯èœãšå€æããå Žåãæ¬¡å以éã®èšºå¯ã«ãããŠå¯èœã«ãªããŸãããŸããçŸåšã¯æ°åã³ãããŠã€ã«ã¹ææç察çæéæªçœ®ãšããŠãå蚺ãããªã³ã©ã€ã³èšºçãåããããšãå¯èœãšãªã£ãŠããŸãã CLINICS ãå©çšããå Žåãäºåã«äºçŽããæéã«ã¹ãããŸã㯠PC ã§åŸ
æ©ããããå»åž«ã®èšºå¯ããããªãã£ããã§åããäŒèšã¯ã¯ã¬ãžããã«ãŒãã§è¡ããããšããæµããšãªã£ãŠããŸãã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ãšããŠã® CLINICS 㯠2016 幎ã«ããªã³ã©ã€ã³èšºçã®ããã®ã·ã¹ãã ããšããŠããŒã³ã ããã 2018 幎ã«ã¯ã¯ã©ãŠãåé»åã«ã«ãæ©èœã ã 2019 幎ã«ã¯äºçŽç®¡çã·ã¹ãã æ©èœã ã 2020 幎ã«ã¯ãããã€ãè¬å±æ¯æŽã·ã¹ãã Pharms ãšã®é£æºæ©èœã远å ã ãæ£è
åãã¢ããªãããªã³ã©ã€ã³æè¬æå°ãã·ãŒã ã¬ã¹ã«åããããšãã§ããããã«ãªããŸããã ãããã¯ãéçºå®€ã§ã¯ããããªã³ã©ã€ã³èšºçæ©èœã»é»åã«ã«ãæ©èœã»äºçŽç®¡çæ©èœã»é£æºæ©èœã®æ¹åãæ¥ã
è¡ã£ãŠããŸãã ç»é¢å
±ææ©èœã®éèŠã®é«ãŸããå®è£
ã®æ±ºå® ãã®ããã« CLINICS ã®æ¹åãæ¥ã
è¡ãªã£ãŠããäžãæšå¹Žããå§ãŸã£ã æ°åã³ãããŠã€ã«ã¹ææçïŒCOVID-19ïŒ ã®æµè¡ã«äŒŽã£ãéèŠã®å¢å ã«ããããªã³ã©ã€ã³èšºçã®ä»¶æ°ãæ¥å¢ããŸããã CLINICS ãæ°å€ãã®å»çæ©é¢ã«ãå©çšããã ãäžã§ããªã³ã©ã€ã³èšºçã«é¢ããããŸããŸãªãèŠæãããã ãããã«ãªããŸããããã®äžã§ãç¹ã«å€ãã£ããã®ããä»å玹ä»ããç»é¢å
±ææ©èœã§ãã 察é¢ã§ã®èšºå¯ã®éã«å»åž«ãæ€æ»çµæãªã©ãæ£è
ã«èŠããªãã説æããããã«ããªã³ã©ã€ã³ã§èšºå¯ããå Žåã§ãè³æããªã¢ã«ã¿ã€ã ã§å
±æããªãã説æãã§ããããã«ãªãã°ãä»ãŸã§ä»¥äžã«ãªã³ã©ã€ã³ã§ã質ã®é«ã蚺å¯ãè¡ããããã«ãªããŸãã ãããã£ããŠãŒã¹ã±ãŒã¹ãèŠæãªã©ãæ€èšããçµæãCLINICS ãå©çšãããã¹ãŠã®å»çæ©é¢åã³æ£è
ã«ãšã£ãŠå€§ããªæ©æµãèŠèŸŒãŸããããããªã³ã©ã€ã³èšºå¯ïŒãããªãã£ããïŒäžã«å»åž«ã® PC ç»é¢ããªã¢ã«ã¿ã€ã ã§æ£è
ã«å
±æããæ©èœãšããŠå®è£
ãããããšã«ããŸããã ç»é¢å
±ææ©èœã®å®è£
ç»é¢å
±æãããå»åž«åŽåãã®ã³ãŒãã§ã©ããã£ãå®è£
æ¹æ³ãããã®ãã倧ãŸããªæµãããŸãšããŸãã ⻠以äžã«èšèŒããŠããã³ãŒãã¯èª¬æã®ããã®ç䌌ã³ãŒãã§ãã®ã§ããã®ãŸãŸã§ã¯åäœããªãããšã«ã泚æãã ããããŸããå»åž«åŽã®å®è£
äŸãæ²èŒããŠãããããæ£è
åŽïŒç»é¢å
±æãåããåŽïŒã®å®è£
ã¯å¥éå¿
èŠã«ãªããŸãã ãªã³ã©ã€ã³èšºå¯éå§ãŸã§ã®åŠç ãªã³ã©ã€ã³èšºå¯ãéå§ããã«ã¯å»åž«åŽã®ãã€ã¯ãšã«ã¡ã©ã§ååŸããæ
å ±ãæ£è
åŽã«éä»ããå¿
èŠããããŸããããã§ã¯ãããŸã§ã®å®è£
ã®æµããèŠãŠãããŸãã ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ã®ååŸ ãªã³ã©ã€ã³èšºå¯éå§æç¹ã§å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã®æ
å ±ãå
±æããããããŸãã¯ãããã®ã¹ããªãŒã ãååŸããå¿
èŠããããŸãããããã£ãã¡ãã£ã¢ã³ã³ãã³ãã®ã¹ããªãŒã ãåžãã€ã³ã¿ãŒãã§ã€ã¹ãšã㊠MediaStream ãå®çŸ©ãããŠããŸãã ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã¯ãäŸãã° MediaDevices.getUserMedia() ãå©çšããŠååŸã§ããŸãã const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay çµç±ã§ãªã³ã©ã€ã³èšºå¯ãå§ãã WebRTC ã§ P2P ã®ãããªãã£ãããå©çšããããã«ã¯ãåæã®æ¥ç¶ã®ããã®åŠçåã³æ¥ç¶ã®ç¶æãªã©ã®åŠçãè¡ãå¿
èŠããããŸããåŒç€Ÿã§ã¯ãã®ãããã®åŠçã WebRTC SaaS ã® SkyWay åã³ãã® SDK ãå©çšããããšã§ç°¡ç¥åããŠããŸãã ãªã³ã©ã€ã³èšºå¯éå§æã«ã¯ãå
çšååŸããå»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ã® MediaStream ã SkyWay ã® SDK ã«æž¡ãããšã§ãäžå¯Ÿäžã§ã®ãªã¢ã«ã¿ã€ã ãããªãã£ãããå®çŸã§ããŸãã import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // äºåã«æ£è
ãšå
±æããŠããã peer id ã«å¯Ÿã㊠call ã¡ãœãããš MediaStream ãæž¡ãããšã§èšºå¯ãéå§ã§ããã const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: æ£è
åŽã¯éä»ãããåŠçããã³ããªã³ã°ããæ©èœãå®è£
ããå¿
èŠããã ãããŸã§ããªã³ã©ã€ã³èšºå¯ãéå§ãããŸã§ã®åŠçã§ãã ⻠詳现㯠SkyWay å
¬åŒã® ãã¥ãŒããªã¢ã« ãªã©ãåç
§ãã ããã ç»é¢å
±æã®åŠç ãããŸã§ã§æ£è
ã«å¯ŸããŠå»åž«åŽã®ã«ã¡ã©ã»ãã€ã¯ã§ååŸãããæ åã»é³å£°ã衚瀺ãããŠããç¶æ
ã®ããããããåãæ¿ããåŠçãå¿
èŠã«ãªããŸããä»åã¯çŸåšæ¥ç¶ã«å©çšããŠãã MediaStream ããç»é¢å
±æçšã® MediaStream ã«å
¥ãæ¿ããããšã§å®çŸããŸããã ç»é¢ã® MediaStream ã®ååŸ ãŸãã¯å
±æããç»é¢ã® MediaStream ãååŸããå¿
èŠããããŸãããã㯠MediaDevices.getDisplayMedia() ã䜿ãããšã§å®çŸã§ããŸãã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); ç»é¢å
±æçšã® MediaStream ãäœã getDisplayMedia() ããå
±æããç»é¢ã® MediaStream ãååŸã§ãããã®ã®ããã®ãŸãŸå©çšãããšãã€ã¯ã®é³å£°ãå
¥ããŸããã ãã㯠getDisplayMedia() ããåãã MediaStream ã«ãã€ã¯ã®é³å£°ãå«ãŸããŠããªãããšãåå ãªã®ã§ãå¿
èŠãªç»åã»é³å£°ã®çµã¿åãããæã£ãç»é¢å
±æçšã® MediaStream ãäœæããããšã§å¯ŸåŠãã§ããŸãã MediaStreamTrack ãçµã¿ããããŠç»é¢å
±æçšã® MediaStream ãäœã ç»é¢å
±æçšã® MediaStream ãäœæããåã«ãŸããMediaStreamTrack ãš MediaStream ã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã MediaStreamTrack ã¯ã¹ããªãŒã ã«å«ãŸããäžã€ã®ã¡ãã£ã¢ãã©ãã¯ã衚çŸãããã®ã§ãã kind ãšããèªã¿åãå°çšããããã£ãããããªãŒãã£ãªãã©ãã¯ã§ããã° "audio" ãããããªãã©ãã¯ã§ããã° "video" ãèšå®ãããŠããŸãã ãŸãã MediaStream ã¯è€æ°ã® MediaStreamTrack ããæãããªãŒãã£ãªãã©ãã¯ã»ãããªãã©ãã¯ãåãåºãã¡ãœããããããã MediaStream.getAudioTracks() ã» MediaStream.getVideoTracks() ãšããŠå®è£
ãããŠããŸãã ããããçµã¿åãããããšã§ããã€ã¯ãšç»é¢ã® MediaStreamTrack ãæã€ MediaStream ãäœãããšãã§ããããã SkyWay ã® SDK ã«æž¡ãããšã§ãç»é¢å
±æãå®çŸã§ããŸãã const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream ã®å
¥ãæ¿ã æåŸã«ç»é¢å
±æç¶æ
ãžã®åãæ¿ãã§ãããã€ã¯ã»ã«ã¡ã©ãå
±æãããŠããç¶æ
ããã®åãæ¿ãã«ã¯ããã€ãã®æ¹æ³ãèããããŸãã äŸãã°ãå€éåã§ããã° MediaConnectionïŒ Skyway ã® SDK ã®åäœã§ããæ¥ç¶å
Peer ãžã®ã¡ãã£ã¢ãã£ãã«æ¥ç¶ãã管çããïŒã®å€éåãMediaStream ã®å€éåãMediaStreamTrack ã®å€éåãããããèããããŸãããããã®æ¹æ³ã¯ãã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ãæå¶ãªã©å®è£
äžã®éžæè¢ãå¢ããã¡ãªãããããäžæ¹ã§ãéä¿¡éãå€ããªã£ãŠããŸãç¹ããã¡ãªãããšèšããŸãã ä»åã¯å€éåãããã«æ¢åã® MediaStream ãåãæ¿ããå®è£
ã玹ä»ããŸãããã®æ¹æ³ã®ã¡ãªããã¯ãå€éåã«æ¯ã¹ããšéä¿¡éãå°ãªãããŸããã§ã« MediaStream ãäžã€ã§ããåæã§äœãããŠããå Žåã¯ãç»é¢å
±æãåããåŽã®å®è£
ã®å€æŽãäžèŠãšããç¹ã§ãã ãã®æ¹æ³ã¯ã SkyWay ã® SDK ã§ããã° MediaConnection ã® replaceStream ãšããã¡ãœãã ã«å¯ŸããŠæ°ãã MediaStream ãæž¡ãããšã§å®çŸãã§ããŸãã // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã // MediaConnection ã¯å
çš `peer.call` ããéã®è¿ãå€ãšããŠåããŠããããããããå©çšãã mediaConnection . replaceStream ( sharingMediaStream ); å®è£
åã«æžå¿µããŠãããã€ã¯ã»ã«ã¡ã©ã®åãæ¿ãæã®ãã©ã€ããªã©ãæ°ã«ãªãã»ã©ã¯ãªããå®çšã«è¶³ããããªå質ãä¿ã€ããšãã§ããããšã確èªããŠããŸãã å®è£
ã®å
šäœæŠèР以äžã®æµããå®è£
ãããšã次ã®ãããªã³ãŒãã«ãªããŸãã import Peer , { MediaConnection } from "skyway-js" ; /** å»åž«åŽã®ãã€ã¯ã»ã«ã¡ã©ãå
±æããŠãªã³ã©ã€ã³èšºå¯éå§ãããšãããŸã§ **/ // getUserMedia()ã§ã«ã¡ã©ã»ãã€ã¯ã®ã¹ããªãŒã ãååŸ const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk ã®åæååŠç const peer = new Peer ({ key: "your-api-key" }); // ãªã³ã©ã€ã³èšºå¯ã®éå§ const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** ç»é¢å
±æãéå§ããåŠç **/ // ç»é¢å
±æããç»é¢ã® stream ãåã const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // ç»é¢å
±æã®é³å£°ã¯ãã€ã¯ã®é³å£°ãå©çšãããã®ã§ãuserMediaStream ãã audioTrack ãåãåºããŠãã const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // ç»é¢å
±æããããã® MediaStream ãäœæãã(ç»é¢ã® videoTrackããã€ã¯ã® audioTrack ãæã€ MediaStream ãäœã) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // ç»é¢å
±æçšã® MediaStream ãæž¡ãããšã§ãç»é¢å
±æãéå§ãã mediaConnection . replaceStream ( sharingStream ); éçºäžã«ééããåé¡ãžã®å¯Ÿå¿ ã¹ãªãŒãã¢ãŒãã»å
±æã忢ãã¿ã³ãæŒãããšãã®å¯Ÿå¿ Google Chrome ã§ç»é¢å
±æã®éã«è¡šç€ºããããå
±æã忢ããã¿ã³ãæŒäžããããPC ãã¹ãªãŒãã¢ãŒãã«ãããšãç»é¢ã® MediaStreamTrack ãéåããŠããŸããŸãã ããã¯è©²åœã® MediaStreamTrack ã« "ended" ã®ã€ãã³ããªã¹ããç»é²ããŠããããšã§ãã³ããªã³ã°ã§ããŸãã displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript ã®åã®å¯Ÿå¿ çŸç¶ TypeScript ã®åã getDisplayMedia() ã«å¯Ÿå¿ããŠããªãã£ããããä»åã¯å®è£
ã®åèã«ããŠãã skyway-conf ã§å©çšãããŠããå ãæµçšãã圢ã§å¯Ÿå¿ãããŸããã declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } ããã¯æ ¹æ¬çã«ã¯ TypeScript ã® dom.d.ts ã«åå®çŸ©ãå
¥ã£ãŠããªãããšãèµ·å ããŠããŸããã TypeScript4.4 ã§å¯Ÿå¿ããããããã§ã ã ãŸãšã æšä»ã®ç¶æ³ã«ããããªã³ã©ã€ã³èšºå¯ã®ããŒãºãé«ãŸããç»é¢å
±ææ©èœã®éèŠæ§ãé«ãŸããŸããã 蚺å¯äžã®ç»é¢å
±ææ©èœã¯ä»¥äžã® api ãçµã¿åãããããšã§å®çŸããããšãã§ããŸãã PC ç»é¢ã® MediaStream 㯠getDisplayMedia() ã䜿ãããšã§ååŸ MediaStream ã«å«ããé³å£°ã»ç»åã¹ããªãŒã ã倿Žãããå Žå㯠MediaStreamTrack ã®çµã¿åãããå€ããããšã§äœæ æ¥ç¶äžã® MediaStream ã®å€æŽã¯ SkyWay ã® SDK ã® MediaConnection.replaceStream() ãäœ¿ã æåŸã« CLINICS ã§ã¯æ¬çš¿ã§ç޹ä»ããç»é¢å
±æãªã©ã®æ°èŠæ©èœã®å°å
¥ãæ¥ã
ã®æ¹åãéããŠãå»çæ©é¢ã»æ£è
åæ¹ã«æ¯æããããããã¯ããç®æãéçºãè¡ã£ãŠããŸããèå³ãæããããšã³ãžãã¢ã®æ¹ãããã£ããããŸããããã² ãã¡ã ã«ãé£çµ¡ããã ããã°ãšæããŸãã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp