Yandex.Money Node.jsã¹ã¯ãŒã«ã®ç«ã¡äžãã®åå€ã«ããã®ãã©ãããã©ãŒã ãããã³ããšã³ãã§å®çããçç±ã«ã€ããŠããå°ãã話ãããããšæããŸãã
æ°å¹ŽåãYandex.Moneyã§ãããã³ããšã³ããµãŒããŒã¬ã€ã€ãŒã®ãã©ãããã©ãŒã ã®å€æŽãæ¥å¢ããŠããŸãããæ¢åã®ãã©ãããã©ãŒã ã®å€æŽã¯ç€Ÿå ã®ç¬èªéçºã§ããããµããŒããšæ²äžãäžååã§ãããã次第ã«æ¶ããŠãããŸããã å®è¡æã®é ãäœæ¥ãšãAPIãæ©èœããXSLTã®éçºã®æ¬ åŠãšãšãã«ãå€ãã®å¶éã®ãããã®ããã©ãã¯ããã¯ã¹ãã眮ãæããããããã«ãªããŸããã
ãããã³ããšã³ãããšã¯ããã©ãŠã¶ã§å®è¡ãããã³ãŒãã ãã§ãªããããŒã¿åéãšHTMLçæã®ããã®ãµãŒããŒå±€ãæå³ããŸãã æ¢åã®ããžãã¯ã®é©åãªä»£æ¿ã¯Node.jsã§ããã
Node.jsãéžã¶çç±
Node.jsã¯ãåŸæ¥ã®ã¹ã¬ããããŒã¹ã®äžŠååã¢ãã«ã®ä»£ããã«ãã€ãã³ãæåã·ã¹ãã ã®ååã䜿çšããŸãããæ¥ç¶ããšã«1ã€ã®ã¹ã¬ãããã¢ãããŒããšæ¯èŒããŠãã³ãŒãã¯ããã·ã³ãã«ã§é«éã§ãã Node.jsã¯ããã®åºç¯ãªNPMãªããžããªãå°è±¡çãªéçºè ã³ãã¥ããã£ãã¯ã©ã€ã¢ã³ãããµãŒããŒãããã³ããŒã«ã®éçºã«JavaScriptã䜿çšããæ©èœã®ãããã§äººæ°ãåããŸããã äžè¬çã«ãç§ãã¡ã®ããŒã ã¯ããããã¹ãŠã®å©ç¹ãæ°ã«å ¥ã£ãŠãããããéžæã¯æçœã§ããã
2008幎9æ2æ¥ã«ãChromiumãªãŒãã³ãã©ãŠã¶ã®æåã®å ¬éãªãªãŒã¹ãå ¬åŒã«çºè¡šãããŸããããã®éçºäžã«JavaScriptã€ã³ã¿ãŒããªã¿ãŒV8ãäœæãããŸããã ãããã¯éåžžã«é«éã§ãããšè©äŸ¡ããããµãŒããŒåŽã§ãããã䜿çšããããšã«ã€ããŠã®ã¢ã€ãã¢ãçŸãå§ããæã¯ããé ããããŸããã§ããã
ãã®ããã2009幎ã«Node.jsãããžã§ã¯ããç»å ŽããŸãããããã¯ãV8ã«å ããŠãçµ±åãµãŒããŒãšã©ã€ãã©ãªã®åºæ¬ã»ãããå«ãå®å šã«ç¬ç«ãããã©ãããã©ãŒã ã§ãããlibUVã©ã€ãã©ãªã䜿çšããŠãã¡ã€ã«ãšãããã¯ãŒã¯ããã€ã¹ã§å®å šã«éåæã®äœæ¥ãæäŸããŸãã
Yandex.Moneyããã³ããšã³ãã¯ã¯ã©ã€ã¢ã³ããšNode.jsã®çµã¿åããã§ããããããŠãŒã¶ãŒãçŽæ¥ããåãããããŸãã¯å°éã§ãããã¹ãŠã®ãã®ã¯ãããã³ããšã³ãéçºè ã®èŠéã§èŠãããšãã§ããŸãã åæã«ããåããããžãã¹ããžãã¯ã¯ãNode.jsã¢ããªã±ãŒã·ã§ã³ã«ãããªãã¯HTTPããŒã¹ã®APIãæäŸããåå¥ã®ããã¯ãšã³ãã³ã³ããŒãã³ãã«ååšããŸãã ããã¯ãšã³ãã¯ããŒãžãšããã³ããšã³ãã³ã³ããŒãã³ãã®æ¬è³ªã«ã€ããŠã¯äœãç¥ããŸãããããŠãŒã¶ãŒãšã³ãã£ãã£ãæ¯æããèšå®ãªã©ãæäœããŸãã
æ°ãããã¯ãããžãŒãžã®ç§»è¡ã®è¿œå ããŒãã¹ã®ãã¡ãéçºè ãåãã¬ãŒãã³ã°ããå¿ èŠã¯ãªããããŒã«ã³ãŒãããµããŒãã§ããã®ã¯1人ã ãã§ã¯ãããŸããã
ããã³ããšã³ãã§ã®æ°ãããã¬ãŒã ã¯ãŒã¯ã®å®çæ¹æ³
æ¯æãã·ã¹ãã ã®ç¹åŸŽã¯ãNode.jsãæåã«éçºãããè² è·ã ãã§ãïŒè€éãªåæèšç®ãªãã§ãå€ãã®I / OæäœïŒçä¿¡èŠæ±ãšããã¯ãšã³ããžã®ã¢ã¯ã»ã¹ïŒãš1ã¯ããã¯ãµã€ã¯ã«ã§ã®ããããªäœæ¥ã§ãã çµæã¯ãæäœãé·æéãããã¯ãããããšã®ãªããã©ã€ããã€ãã³ããµã€ã¯ã«ã§ãã
Node.jsã¢ããªã±ãŒã·ã§ã³ã§ãŠãŒã¶ãŒãªã¯ãšã¹ããåŠçããããžãã¯ãæ€èšããŠãã ããã
Node.jsäžã®HTTPãµãŒããŒã¯ããŠãŒã¶ãŒããã®çä¿¡èŠæ±ããªãã¹ã³ããŸãã
ãŸãããªã¯ãšã¹ãããã®ããŒã¿ãåŠçããŸããCookieã®è§£æãæçš¿ãªã¯ãšã¹ãã®æ¬æã®è§£æããªã¯ãšã¹ãã«é¢ããæ å ±ã®èšé²ãªã©ã
ããã«ãURLã¯ãã®åŠçããžãã¯ã«ãªãã€ã¬ã¯ããããŸãã
ãã®ããã»ã¹ã§ãããŒãžã«å¿ èŠãªããŒã¿ãèŠæ±ããããããã®éçŽãšãã®åŸã®ããžãã¹ããžãã¯ã®å®è¡ãè¡ãããŸãã
- ãµãŒããŒã¯ãåéãããããŒã¿ããHTMLãã¬ã³ããªã³ã°ããããã¯ã©ã€ã¢ã³ããžã®å¥ã®é©åãªå¿çïŒããšãã°ãjsonããã€ããªãã¡ã€ã«ããªãã€ã¬ã¯ãïŒãçæããŸãã
- Node.jsãµãŒããŒã¯äžè¬çãªå¿çããããŒãèšå®ããå¿çãã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã
ãªã¯ãšã¹ãåŠçã®ããžãã¯å šäœãå®è£ ããã«ã¯ãäžè¬çãªNode.jsãã¬ãŒã ã¯ãŒã¯ã§ããExpressã䜿çšããŸãã ãŸããå éšã¢ããªã±ãŒã·ã§ã³ã«ã¯Koa 2ã䜿çšãããŸã ãããã«ããã Async Functionsã䜿çšããŠãªã¯ãšã¹ãåŠçã®ãããŒå šäœãèšè¿°ã§ããŸããããã¯ãJavaScriptã§ã®éåæã³ãŒãã®èšè¿°ãå€§å¹ ã«ç°¡çŽ åããæ°ããJavaScriptæ©èœã§ãã
ããã«ãKoa 2ã¯Node.js 8ãLTSã«ãªã£ããšãã«å€éšã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããå¯èœæ§ãé«ããããå®çšŒåãµãŒããŒã«ã€ã³ã¹ããŒã«ã§ããŸãã V8ãšã³ãžã³ãæ°ããTurboFanã³ã³ãã€ã©ãŒã§äœ¿çšãããã®ã¯8çªç®ã®ããŒãžã§ã³ã§ãããããã«ããéåææ©èœãæé©åãããå®çšŒåã§äœ¿çšã§ããããã«ãªããŸãã
V8éçºè Benedikt Meurerã«ããèšäºã®ç¿»èš³ãããV8ãšæ°ããæé©åã³ã³ãã€ã©ãŒã«ã€ããŠè©³ããç¥ãããšãã§ããŸãã
jsãcssãpicturesãªã©ã®éçãã¡ã€ã«ã¯Node.jsãµãŒããŒã«é åžãããŸãããããã«ã¯Nginxãªã©ã®ããé©åãªWebãµãŒããŒããããŸãã ããã«ãNginxã¯ããæè»ãªãã£ãã·ã¥ç®¡çãæäŸããŸãã ãããã£ãŠãå®çšŒåç°å¢ã§ã¯ãNode.jsã¢ããªã±ãŒã·ã§ã³ã®åã«ç¹å¥ãªWebãµãŒããŒãé 眮ããããšããå§ãããŸãã
Node.jsã¯ã¢ããªã±ãŒã·ã§ã³ã®JavaScriptã³ãŒããã·ã³ã°ã«ã¹ã¬ããæ¹åŒã§å®è¡ããŸãããç¹ã«ã³ã¢ãå€æ°ããå Žåã1ã€ã®ã¹ã¬ããã§ãã¹ãŠã®ãŠãŒã¶ãŒãªã¯ãšã¹ãããããã¯ã·ã§ã³ã§åŠçããããã»ã¹ãéå§ããã®ã¯ç¡è¬ã§ãã ãããã£ãŠãã¯ã©ã¹ã¿ãªã³ã°ã䜿çšããŸããã€ãŸããã¡ã€ã³ãã¹ã¿ãŒããã»ã¹ããåã ã®Node.jsããã»ã¹ïŒã¯ãŒã«ãŒïŒã®ããŒã«å šäœãçæããŸãã
ã¡ããªãã¯ã¹ãšã°ã©ãã£ãã¯ã¹
ä»ã®ãã¹ãŠã®ãµãŒãã¹ãšåæ§ã«ãããã³ããšã³ãã¯ç£èŠã«æ¥ç¶ãããŠããããã®äž»èŠãªã€ã³ãžã±ãŒã¿ã¯ãã¹ãŠããŒã ã®å€æ°ã®ããã·ã¥ããŒãã«ãªã¢ã«ã¿ã€ã ã§è¡šç€ºãããŸãã ãã£ãŒããèŠãã®ã¯ããªãªãŒã¹æ¥ãããŒããŠã§ã¢æ§æãªã©ã§ç¹ã«é åçã§ãã
GraphiteãšPrometheusã¯ã¡ããªãã¯ã®åéã«æé©ã§ã Grafanaã¯åéããããã¹ãŠã®èŠèŠçãªè¡šç€ºãæ åœããŸãã
ããŒã ã¯ãªãã£ã¹å ã§ã¶ãã¶ãããŠããŠãããŒã ã¯ãã®ã¡ããªãã¯ã«é¢å¿ã®ããã°ã©ãã衚瀺ããŠããŸãã
ããã³ããšã³ãã·ã¹ãã ã®äž»èŠãªã€ã³ãžã±ãŒã¿ãŒã®ãã€ããã¯ã¹ã
ããã³ããšã³ãããŒã ã«ã¯ç¬èªã®ããã·ã¥ããŒãããããŸãã次ã®ã°ã©ãããªã¢ã«ã¿ã€ã ã§è¡šç€ºãããŸãã
ãã¹ãŠã®ããŒãžã®HTMLã¬ã³ããªã³ã°æéã
çä¿¡ãªã¯ãšã¹ãã®æ°ã
çä¿¡ãªã¯ãšã¹ãã®åŠçæéã
å¿çå ã®5xxããã³4xxã¹ããŒã¿ã¹ã³ãŒãã®æ°ã
ãã¹ãŠã®ã³ãŒã«ã®ããã¯ãšã³ããžã®çºä¿¡ãªã¯ãšã¹ãã®å®è¡æéã
- ããã¯ãšã³ããžã®å€±æããçºä¿¡ãªã¯ãšã¹ãã®æ°ã
ãªããã®ãã¹ãŠãç¬ç«ãããã¬ããªã®ãïŒ ãŸããã¡ãŒã«ãåžžã«èŠãŠéç¥ã«åŸãããã§ã¯ãããŸããããããã§ã¯ãã¹ãŠãç®ã®åã«ãããã©ãããããã®é»æºãå ¥ããå¿ èŠãããããŸããã 第äºã«ãæãæšæ¥ã®ä»äºã®çµæã«ãåºå·ãããããšãã§ããŸãã
ç§ãã¡ã¯äœã«çŽé¢ããŠããŸãã
ãµãŒããŒã¬ã€ã€ãŒã®ãã©ãããã©ãŒã ãšããŠNode.jsãéžæããããšã¯ãå€ãã®å©ç¹ã«å ããŠãéçºè ã«ãšã£ãŠããçšåºŠã®é çã®çš®ã§ããã
ããšãã°ãç§ãã¡ã®ãããªå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ããããã¥ã¡ã³ããååã«ç¶²çŸ ãããŠããŠããåæŽæ°ã¯ç°¡åã§ã¯ãããŸãããéçºè ãèªåèªèº«ãæºè¶³ããããã補åãæ¹åããããšãã欲æ±ã ãã§ãªããJavaScriptéçºã®çŸå®ã®äžçãããåžžã«å€åã®éçšã«ãããŸãã
Node.jsã¯JavaScriptã®C ++ã³ãŒãã®ãã€ã³ãã£ã³ã°ãšçµã¿åãããŠäœ¿çšââããŸãããæ¢åã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããã«æåŠããããšã¯ã§ããŸããã Node.jsãã¢ããã°ã¬ãŒããããã³ã«ã移è¡ã¬ã€ãã®æŽæ°ãšããæšæºçãªå°é£ã ãã§ãªããNode.jsã®æ¬¡ã®ããŒãžã§ã³ã§ããlibxmlãlibxsltãããã³å éšC ++ã©ã€ãã©ãªããµããŒãããããã®ãã€ã³ããŒã®æŽæ°ãçºçããŸãã
äžè¬ã«ããã€ã³ããŒãžã®äŸåã¯è¿œå ã®ãµããŒããªãŒããŒãããããããããããããããåé¿ããæ¹ãè¯ãã§ããããšãã°ãå éšãã€ã³ããŒãå¥ã®HTTPãµãŒãã¹ã«è»¢éããããšããŸãã
å¥ã®è©±ã¯Node.jsã®éåææ§ã§ãããããã§ãã調çãã§ããå¿ èŠããããŸãã ããšãã°ãããæç¹ã§ãExpressãšKoaã®ãã¹ãŠã®ããžãã¯ã³ãŒãã¯ãšã©ãŒãã©ããã§ã©ãããããã€ã³ã¿ãŒã»ããããå¿ èŠããããŸãããããžãã¹ããžãã¯ãšã©ãŒãåå ã§äœæ¥äžã®ã¯ãŒã«ãŒãã¯ã©ãã·ã¥ããŠåèµ·åããããšãæã ãããŸããã ã€ãŸããã«ãŒãã®ãã³ãã©ãŒã«èšè¿°ãããããžãã¹ããžãã¯ã¯ãNode.jsããã»ã¹å šäœãåæ¢ããã¹ãã§ã¯ãããŸãããããšã«ãããããè¡ããŸããã
ç¶æ³ã®åæã«ãããå¥åŠãªç¹åŸŽãæããã«ãªããŸããã ã³ãŒã«ããã¯é¢æ°ãprocess.nextTickã«æž¡ããããšããšã©ãŒãã£ããã³ãŒããå«ãçŸåšã®ãµã€ã¯ã«ã®æ®ãã®ã³ãŒããå®è¡ãããåŸãéåæãµã€ã¯ã«ã®çŸåšã®ãµã€ã¯ã«ã§éå§ãããŸãã ãã®ãããªé¢æ°ã®å éšã§äŸå€ãçºçããå Žåãprocess.nextTickã¯ã次ã®ã¡ãžã£ãŒãã§ã¯ãªããçŸåšã®ã¡ãžã£ãŒã®çµããã§ããããããã£ããã§ããŸããã§ããã
ES2015ã«ã¯ãŸã 埮åŠãªç¹ããããŸãããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã³ãŒãã¯Babelã®ãã©ã³ã¹ãã¬ãŒã·ã§ã³ãééãããããES2015æšæºã ãã§ãªããèšèªã®ããããé©æ°ã䜿çšã§ããŸãã ããããNode.jsã«ã¯ãã®ãããªåªãããµããŒãããªããå€ãã®æ©èœãæ¬ ããŠããŸãããŸããBabelãä»ããŠãµãŒããŒã³ãŒããå®è¡ããããšã¯ãã³ãŒãã®ãµããŒããšãã«ãã«ãããŠå€§ããªé çã®çš®ã§ãã ãããã£ãŠãJavaScriptã³ãŒããèšè¿°ãããšãã¯ããã®ã³ãŒããå®è¡ãããç°å¢ãåžžã«å¿µé ã«çœ®ããŠããªã³ã¿ãŒã«ãŒã«ãå¥ã ã«æ§æããå¿ èŠããããŸãã
䜿çšããã¢ãžã¥ãŒã«ãéžæãããæŽç·Žããããããã»ã¹ã¯ãé£æ床ã®é«ãå¿«é©ãªãã§ãªãŒãšèããããšãã§ããŸãã ãã¡ãããç¹å®ã®å¿çšåéã®ãªãŒããŒã¯èªããããŠããŸããããã®äžã§ããç¹å®ã®ã±ãŒã¹ããšã«ããé©åãªãªãŒããŒãåççã«æ¢ãããšãã§ããŸãã ã¯ããããžãã¯ã®ã¬ãã¥ãŒã®æ°ã¯å¢ããŸããããNode.jsãšNPMã¯ããªãŒãã³ã¢ãžã¥ãŒã«ã®éžæè¢ãè±å¯ã§ããããã¯ãããžã«é©åããã䟿å©ãªãã®ã䜿çšã§ãããããåªããŠããŸãã
å ±æããŠã¿ãŸããã
ãã¡ãããææ°ã®ãã¯ãããžãŒãžã®ç§»è¡ã®éçšã§å°é£ã«çŽé¢ãããã³ããåããŸããããããã¯ãã¹ãŠãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®åäžèšèªã ãã§çµãããªã貎éãªçµéšãšå©ç¹ããããããŸããã
ãã®ãã¹ãŠããŒãããèç©ããã®ã¯é·ããŠéçç£çã§ãããããç§ãã¡ã®ããŒã ã¯Node.jséçºã¹ã¯ãŒã«ãç«ã¡äžããçµéšãå ±æããããšã«ããŸãã ã ãã¬ãŒãã³ã°ã¯2017幎9æ18æ¥ã«éå§ãããåå ç³è«æžã¯çŸåšæåºã§ããŸãã
ãã¬ãŒãã³ã°äžã«ã次ã®ãããã¯ãæ±ããŸãã
WebãµãŒããŒïŒäœæ¥ã®çš®é¡ãšååã
Node.jsã§ã®ãããã°ãšãã®ã³ã°ã
ãã³ãã¬ãŒããšã³ãžã³ãšHTMLã®ãµãŒããŒåŽã¬ã³ããªã³ã°ã
Node.jsã§ã®ãã¹ãïŒåäœãã¹ããçµ±åãã¹ãã
Node.jsã§ããŒã¿ããŒã¹ãæäœããŸãã
- Node.jsã®ã¹ã¬ããã
å®éããªã¹ãã¯ããé·ããåŠæ ¡ã®ããŒãžã§èŠãããšãã§ããŸã ã ããããå¡©ã¯å®éã«è¡ãããŸã-13ã®ã¬ãã¹ã³ã§ãäžç·ã«éè¡ã«ãŒãã管çããããã®é»å財åžã®ãµãŒããŒã¢ããªã±ãŒã·ã§ã³ãéçºããŸãã
ãµã€ã³ã¢ããããŠãYandex.MoneyãµãŒãã¹å šäœã®éçºè ã®1人ã®ããã«æããŠãã ããã