
æçš¿è Alexander TrishchenkoãDataArtã·ãã¢ããã³ããšã³ãéçºè
å 容ïŒ
â¢ã€ãã¬ãŒã¿ã çºé»æ©
â¢ãžã§ãã¬ãŒã¿ãŒã®äœ¿çšïŒReduxãKoaïŒ
â¢ãªãkoa.jsã䜿çšããå¿ èŠãããã®ã§ãã
â¢æªæ¥ã éåæåŸ æ©ããã³koa.js 2.x
ãžã§ãã¬ãŒã¿ãŒ-æ°ããä»æ§ãECMAScript 6ã§äœ¿çšã§ããæ°ããæ©èœã 2ã€ã®äŸãèŠãŠã¿ãŸãããïŒReact + Reduxãããã³ããšã³ãã®ã±ãŒã¹ãšããŠãkoa.jsãããã¯ãšã³ããšããŠã 次ã«ãJavaScriptã®æªæ¥ã§ããkoa.jsãéåæé¢æ°ãããã³koa.js 2ã«ã€ããŠèª¬æããŸãã
ãã®èšäºã§ã¯ãç¹ã«åçšããã¹ããããã䜿çšããŠããŸãïŒãœãŒã¹ãžã®ãªã³ã¯ã¯æåŸã«èšèŒãããŠããŸãïŒãã³ãŒãã®äžéšãç»åã®åœ¢ã§ããããšãããã«ãaã³ããŸãã

ECMAScript 6ïŒ2015ïŒã¯ãããã䜿çšããã®ã«ååãµããŒããããŠããŸãã å³ã¯ãååãšããŠãEdgeã®Microsoftã§ããã¹ãŠãæªããªãããšã瀺ããŠããŸãã倧ããªåé¡ã¯Internet Explorerã§ã®ã¿èŠ³å¯ãããŸãïŒåçŽåº§æšè»ž-æ©èœã®ãµããŒããïŒ ïŒã WebKitããŒã ã«ãããšãSafari 10ã«ã¯ããããé©ãããããŸãã
ã€ãã¬ãŒã¿
â¢å埩å¯èœãªãªããžã§ã¯ãã¯ãå埩å¯èœãªãªããžã§ã¯ãã®ã¿ã§ãã
â¢Symbol.iteratorã䜿çšããŠãåç¬ã§å®è¡ãããªããã¹ãŠã®ãã®ã匷å¶ã§ããŸãã
åå埩å¯èœããŒã¿åãåå埩å¯èœããŒã¿æ§é ã¯ãå埩åãååŸããŠå埩å¯èœã«ãªããŸãã æååãé åãå埩åŠçã§ããŸããMapãSetãªã©ã®æ°ããããŒã¿æ§é ãå埩åŠçã§ããŸãããããã¯ãã¹ãŠç¬èªã®å埩åãå«ãå¿ èŠããããŸãã ããã§ãã€ãã¬ãŒã¿èªäœã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã ãŸãããã¡ããšåããªãããã«ããæ©äŒããããŸãããæã«ã¯éåžžã«äŸ¿å©ãªå ŽåããããŸãã

ã€ãã¬ãŒã¿ãŒãšã¯äœã§ããïŒ ã芧ã®ãšãããåçŽãªé åããããŸãã æãåçŽãªé åã«ã¯ããŒããããŸããã€ãã¬ãŒã¿ã·ã³ãã«ãå®éã«ã¯ã€ãã¬ãŒã¿ãè¿ããã¡ã¯ããªã§ãã ãã®ãã¡ã¯ããªãŒãåŒã³åºããã³ã«ãã€ãã¬ãŒã¿ãŒã®æ°ããã€ã³ã¹ã¿ã³ã¹ãè¿ãããçžäºã«ç¬ç«ããŠããããå埩åŠçã§ããŸãã ãã®çµæãã€ãã¬ãŒã¿ãžã®ãªã³ã¯ãä¿åããå€æ°ãååŸããŸããã 次ã«ãå¯äžã®nextã¡ãœããã䜿çšããŠããããç¹°ãè¿ããŸãã 次ã®ã¡ãœããã¯ã2ã€ã®ããŒãå«ããªããžã§ã¯ããè¿ããŸãã1ã€ç®-å€-ã€ãã¬ãŒã¿ã®å€ã2ã€ç®-ã€ãã¬ãŒã¿ã®ç¶æ -doneïŒfalseã

ã€ãã¬ãŒã¿ã¯èªåã§èª¬æã§ããŸãã åºæ¬çã«ãããã¯å·¥å Žã§ãããéåžžã®æ©èœã§ãã endlessNumbersé¢æ°ãã€ã³ããã¯ã¹ãããã³nextã¡ãœããããããšããŸãã å埩å¯èœãªå€ãšã¹ããŒã¿ã¹ãè¿ãåäžã®nextã¡ãœãããæã€ãªããžã§ã¯ãã doneããŒãtrueã«èšå®ããããšã¯æ±ºããŠãªãã®ã§ããã®ã€ãã¬ãŒã¿ã¯æåŸãŸã§ç§»åããŸããã
ã€ãã¬ãŒã¿ã¯ãç¹ã«æ å ±ãæ±ãããã®éæšæºçãªã¢ãããŒããå®è£ ããã¢ããªã±ãŒã·ã§ã³ã§éåžžã«åºã䜿çšãããŠããŸãã 空ãæéã«ã¯ãWeb Audio APIã䜿çšããŠJavaScriptã·ãŒã±ã³ãµãŒãäœæããŸãã ç§ã«ã¯ä»äºããããŸãïŒç¹å®ã®ééã§é³ãåºãããšã§ãã ããçš®ã®ãµã€ã¯ã«ã«å ¥ããã®ã¯äžäŸ¿ãªã®ã§ãã¡ãã£ã¢ãã¬ãŒã€ãŒã«ããŒãããã¹ããããããã€ãã¬ãŒã¿ãŒã䜿çšããŸãã

çºé»æ©ã®åºçŸã®åææ¡ä»¶ã¯é·ãéçããŠããŸããã éå»5幎éã®Node.jsã®äººæ°ã®ãã€ããã¯ã¹ãèŠãããšãã§ããŸããããã¯ãäžè¬çãªJavaScriptã®äººæ°ãéæ¥çã«åæ ããŠããŸãã ã°ã©ãã«ã¯ãã³ãŒã«ããã¯å°çã®ãªã¯ãšã¹ãã®é »åºŠãåæ ãããŸããJavaScriptã®ååžã«æ¯äŸããŸãã ã€ãŸãã人æ°ã®ããJavaScriptãå¢ããã»ã©ãéçºè ãšã¯ã©ã€ã¢ã³ããèŠããã§ããŸãã

ç»åã«ç€ºãããŠãã麺ã¯ããžã§ãã¬ãŒã¿ãŒãªãã§èšè¿°ãããã³ãŒãã®æ§é çãªèŠèŠåã§ãã ã€ãŸããããã¯ç§ãã¡å šå¡ãåãçµãŸãªããã°ãªããªããã®ã§ã-ç§ãã¡ã¯ããã«æ £ããéžæã®äœå°ããªããç§ãã¡ã¯ãããåœããåã ãšæã£ãŠããŸãã éçºè ããã®çŸè±¡ãšéãããšãããšãçŽæã®ãããªãã®ãçŸããŸããã ã¢ã€ãã¢ã¯ããã¹ãŠã®ã³ãŒã«ããã¯ïŒã³ãŒã«ããã¯é¢æ°ïŒãååŸããã³ãŒãå šäœã§ãããããæ±ããããšã§ããããã䟿å©ãªå Žæã宣èšããããšã§ããã ãã ããå®éã«ã¯ãåãã³ãŒã«ããã¯é¢æ°ããŸã ããããããã«ç°ãªã圢åŒã§è¡šç€ºãããŠããŸãã éçºè ã¯èŠåŽãç¶ããŸãã-ããããžã§ãã¬ãŒã¿ãŒãšéåæé¢æ°ã®ç»å Žã§ãã
çºé»æ©
ç³èŸŒã¿
â¢åæã³ãŒãã®äœæã
â¢äžæåæ¢ãããé¢æ°ã®äœæã
â¢è€éãªã€ãã¬ãŒã¿ãŒã®äœæã
ãžã§ãã¬ãŒã¿ãŒã䜿çšãããšãåæã³ãŒããäœæã§ããŸãã JavaScriptã®å°å³ã¯ãŸãã«ãã®éåææ§ã«ãããšèšã£ãŠããŸããããä»åºŠã¯JavaScriptã§åæã³ãŒããèšè¿°ããæ¹æ³ã«ã€ããŠè©±ããŸãããã å®éãäžæåæ¢äžã®ãžã§ãã¬ãŒã¿ãŒã®å®è¡ãåŸ æ©ããŠããéã«ããã¯ã°ã©ãŠã³ãã§ã¿ã€ã ã¢ãŠããçºçããŠãã€ãã³ãã«ãŒãã¯åæ¢ããªãããããã®ã³ãŒãã¯æ¬äŒŒåæã«ãªããŸãã ããã¯ã°ã©ãŠã³ãã§ä»ã®å¿ èŠãªæäœãå®è¡ã§ããŸãã éåžžã«åºã䜿çšãããŠããéåæã¢ã¯ã·ã§ã³ãšã¯å¯Ÿç §çã«ããµã¹ãã³ãå¯èœãªé¢æ°ãäœæã§ããŸãã è€éãªã€ãã¬ãŒã¿ãäœæããæ©äŒããããŸããã ããšãã°ãæ¯åããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããããã1ã€ã®å€ãé çªã«ç¹°ãè¿ãã€ãã¬ãŒã¿ãäœæã§ããŸãã

äžäžã«ãæ©èœçã«ãŸã£ããåãã¹ããããããããŸãã ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããŠuser.payment_idãååŸããç¹å®ã®é¢æ°ããããŸãã ãã®åŸã圌女ã¯å€éšAPIã«ã¢ã¯ã»ã¹ããŠãåœæ¥ã«é¢é£ããæ¯æã詳现ãŠãŒã¶ãŒãéžæããå¿ èŠããããŸãã ã³ãŒã«ããã¯é¢æ°ãå¥ã®ã³ãŒã«ããã¯é¢æ°ã®å åŽã«ãããšããThe Pyramid Of Doomã®çŸè±¡ãããããã¹ãã®åºŠåãã¯ç¡éã«å¢å ããå¯èœæ§ããããŸãã åœç¶ã®ããšãªããããã¹ãŠã®æäœãå¥ã ã®é¢æ°ã«ã«ãã»ã«åããŠããåºåã§ã麺ããåŸãããŸãããçµæã¯åžžã«åãå ¥ãããããšã¯éããŸããã
ãžã§ãã¬ãŒã¿ãŒã§åãããšãå®è¡ã§ãããœãªã¥ãŒã·ã§ã³ããããŸãããžã§ãã¬ãŒã¿ãŒã®æ§æã¯ãããã«ç°ãªããŸã-function *ïŒã¢ã¹ã¿ãªã¹ã¯ä»ãïŒã ãžã§ãã¬ãŒã¿ã«ã¯ååãä»ããããšãååãä»ããªãããšãã§ããŸãã ã芧ã®ãšãããyieldããŒã¯ãŒãããããŸãã ãžã§ãã¬ãŒã¿ãäžæåæ¢ããyieldã¹ããŒãã¡ã³ãã䜿çšãããšãGetUserã¡ãœãããå®äºããã®ãåŸ ã€ããšãã§ããŸãã ããŒã¿ãåãåã£ãããããããŠãŒã¶ãŒã«å ¥åãããã®åŸãpaymentDetailsãååŸããã®ãšåãæ¹æ³ã§å®è¡ãç¶ç¶ãããŠãŒã¶ãŒã®ãã¹ãŠã®æ å ±ãæç»ã§ããŸãã

ãžã§ãã¬ãŒã¿ãŒãå®è£ ããå¯èœæ§ãèæ ®ããŠãã ãã-ã©ããã£ãŠããããæŽçããããšãã§ããŸãã ããã§ãåè¿°ã®èšèšã確èªããŸãã ã€ãã¬ãŒã¿ã§ç€ºãããããã«ãããã«ã¯æ°å€ã®ã€ãã¬ãŒã¿ããããŸãããã®ã€ãã¬ãŒã¿ã¯ã0ã3ã®å€ãè¿ãããããç¹°ãè¿ãåŠçããŸãã ã€ãŸãã次ã®æ¹æ³ã䜿çšã§ããŸãã
次ã®ïŒïŒã¡ãœãã
â¢ãžã§ãã¬ãŒã¿ãŒã«è»¢éãããå€ãåŒæ°ãšããŠåãããšãã§ããŸã
â¢æ»ãå€-2ã€ã®ããŒãæã€ãªããžã§ã¯ãïŒ
value-ãžã§ãã¬ãŒã¿ãŒããååŸããåŒã®äžéšã
done-ãžã§ãã¬ãŒã¿ãŒã®ç¶æ ã
次ã®ã¡ãœããã¯ãã€ãã¬ãŒã¿ãŒã®åæ§ã®ã¡ãœãããšéãã¯ãããŸãããå€ãååŸããŠå®äºã§ããŸãã2ã€ã®ãã©ã¡ãŒã¿ãŒãšããŠãå€ããžã§ãã¬ãŒã¿ãŒã«è»¢éãããžã§ãã¬ãŒã¿ãŒããå€ãååŸã§ããŸãã

次ã®è³ªåã¯ããã©ãŒãã³ã¹ã§ãã ç§ãã¡ã話ããããšãã©ãã ã䜿ãã®ãçã«ããªã£ãŠããŸããïŒ ã¬ããŒãã®æç¹ã§ã¯ããã¹ãããŒã«ã¯èªç±ã«äœ¿ãããã®ã§ã¯ãªãã£ãã®ã§ãèªåã§æžããã æ°ååã®å埩ã®çµæãããŸããŸãªãã¯ãããžãŒã®å¹³åå€ãéæããããšãã§ããŸããã Chromeã§ã¯ããããã¹ãšãžã§ãã¬ãŒã¿ãŒã¯ããã»ã©å€§ããªéãã¯ãªããã©ã¡ããã倧ããç°ãªããŸãã ã³ãŒã«ããã¯ãPromiseããŸãã¯ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠ1ã€ã®å埩ãå®äºããã®ã«ãããæéã¯ããªç§ã§èšç®ãããããšãèæ ®ãããšãå®éã«ã¯å€§ããªéãã¯ãããŸããã ãããããããããç¯çŽããããšã¯äŸ¡å€ããªããšæããŸãã ãããã£ãŠã奜ããªãã®ãèªç±ã«äœ¿çšã§ããŸãã

ææ°ã®JavaScriptã¬ããŒãã¯ãReactãªãã§ã¯ã§ããŸããã ç¹ã«ãReduxã«ã€ããŠèª¬æããŸãã
redux-saga
â¢ããã¯ã©ã€ãã©ãªã§ãã
â¢ããã¯ãžã§ãã¬ãŒã¿ãŒã§æžãããã©ã€ãã©ãªã§ãã
â¢ããã¯ãäžçŽãªæ©èœãèŠããªãããã«é ãã©ã€ãã©ãªã§ãã
â¢ããã¯ãåæã³ãŒããèšè¿°ã§ããã©ã€ãã©ãªã§ãã
é¢æ°åããã°ã©ãã³ã°ã«ã¯éåžžã«éèŠãªååããããŸãã ãå®éã®é¢æ°ãã䜿çšããå¿ èŠããããŸãã ç§ãã¡ã®é¢æ°ã¯ç°å¢ã«åœ±é¿ãäžããã¹ãã§ã¯ãããŸãã;ããã¯ç§ãã¡ãããã«æž¡ãåŒæ°ã§åäœããã¯ãã§ãã äœããã®åœ¢ã§ãã³ãŒã«ããã¯é¢æ°ã¯ãã°ãã°äžçŽãªé¢æ°ã«ãªããŸãããããã¯ãã¡ããé¿ããããã®ã§ãã ãããã£ãŠãredux-sagaã®äž»ãªç®çã¯ãåæïŒæ¬äŒŒåæïŒã³ãŒããèšè¿°ããæ©èœã§ãã

äžçªäžã®è¡ã¯ãåãæ¹æ³ã§ããžã§ãã¬ãŒã¿ãŒã䜿çšããŠãµã¬ã®å®è¡ãåæ¢ã§ããããšã§ãã ãµã¬ã¯ãå¥ã®ã¢ã¯ã·ã§ã³ãåŒãèµ·ããã¢ã¯ã·ã§ã³ã®äžçš®ã§ãããšèšããŸãã ãã£ã¹ãããã£ã䜿çšããŠåçãåŸ ã£ãåŸããªãã¥ãŒãµãŒã§ç®çã®ã€ãã³ããéå§ããå¿ èŠãªæ å ±ãéä¿¡ããŸãã

çµè«ã¯éåžžã«åçŽã§ãããã®çµæãéåæã¢ã¯ã·ã§ã³ãéåžžã«ç°¡åãã€è¿ éã«å®è¡ããŸããã å®éãæå°éã®ãµã¬ã¯æ¬¡ã®ããã«ãªããŸãããµã¬ãåŒã³åºããžã§ãã¬ãŒã¿ãŒããããtakeEveryãåŒã³åºããŸããããã¯ãã¬ãã¥ãŒãµãŒå ã§ãUSER_FETCH_REQUESTEDãã€ãã³ããçºçãããããšãã§ãããµã¬ã¡ãœããã®1ã€ã§ãã yieldã«ã¯ã¢ã¹ã¿ãªã¹ã¯ãä»ããŠããããšã«æ°ã¥ãããããããŸããã ããã¯ãžã§ãã¬ãŒã¿ãŒæäœã®å§ä»»ã§ããããžã§ãã¬ãŒã¿ãŒãå¥ã®ãžã§ãã¬ãŒã¿ãŒã«å§ä»»ã§ããŸãã
redux-sagaïŒããšãã
â¢Sagasã¯éåžžã®ã¢ã¯ã·ã§ã³ãšããŠå®£èšããããsagaMiddlewareãä»ããŠå®è£ ããå¿ èŠããããŸãã
â¢æããã«ãsagaMiddlewareèªäœã¯Reduxã®ã¹ãã¢ã®ããã«ãŠã§ã¢ä»¥å€ã®ãã®ã§ãã
ããã³ããšã³ãã«ã€ããŠè©±ããŸããããä»åºŠã¯ããã¯ãšã³ããã€ãŸãã³ã¢ã«ã€ããŠè©±ããŸãã ããã¯ãšã³ãã§å€ãã®ãã¬ãŒã ã¯ãŒã¯ã«åºäŒããŸããããç§ã«ãšã£ãŠæãèå³æ·±ãã®ã¯kraken.jsãškoa.jsã§ããã2çªç®ã®ãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠè©³ãã説æããŸãã
koa.js
äžèšã§èšãã°ïŒ
â¢ãµãŒããŒéçºçšã®node.js-frameworkã
â¢ES6ãžã§ãã¬ãŒã¿ãŒãES2016ã®éåææ©èœã䜿çšããnode.jsãã¬ãŒã ã¯ãŒã¯ã
â¢express.jsã«ãã£ãŠèšè¿°ãããnode.jsãã¬ãŒã ã¯ãŒã¯ã
express.jsããŒã ã®ä¿¡é Œæ§ãšäŒç€Ÿã®ãªãœãŒã¹ãèãããšããã®ãã¬ãŒã ã¯ãŒã¯ã¯ä¿¡é Œã§ããæ¥éã«éçºãããŠããŸãã çŸæç¹ã§ã¯ã圌ã®åšãã«å åºãªã³ãã¥ããã£ã圢æãããŠããã圌ã¯ããããã®ã©ã€ãã©ãªã§èã«èŠãããŠããŸã-ããã«ãŠã§ã¢koaã®äœããã®çš®é¡ã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããã®ã¯éåžžã«ç°¡åã§ãã
â¢ãæ°äžä»£ãã¬ãŒã ã¯ãŒã¯ã

ã³ã¢ãšã¯ïŒ å®éãããã¯ããã«ãŠã§ã¢ãšã³ãžã³ãæäŸãããã¬ãŒã ã¯ãŒã¯ã§ããããã®ã¢ãŒããã¯ãã£å³ã¯èª°ã«ã§ãããç¥ãããŠããçãããããé»è©±ã®ã²ãŒã ã«éåžžã«äŒŒãŠããŸãã ããã«ãããã«ãŠã§ã¢éã§é çªã«æž¡ãããç¶æ ããããããããããã®ç¶æ ã«åœ±é¿ãäžãããããŸãã¯åœ±é¿ãäžããŸããïŒåœ±é¿ãäžããªããã¬ãŒã®äŸã瀺ããŸãïŒã ãã®ããã«ãŠã§ã¢ã䜿çšããŸãã koa.jsã¯ããã«ãŠã§ã¢ãžã§ãã¬ãŒã¿ãŒãã¬ãŒã ã¯ãŒã¯ã§ããããšãæãåºããŠãã ããã ã€ãŸããã«ãŒãã£ã³ã°ãããŸããŸãªäŸ¿å©ãªHTTPã¡ãœãããã»ãã¥ãªãã£ã·ã¹ãã ãCSRFæ»æã«å¯Ÿããä¿è·ãã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ãããã³ãã¬ãŒããšã³ãžã³ãªã©ã«ã€ããŠè©±ããŠããå Žåãkoaã«ã¯ãã®ãããªãã®ã¯ãããŸããã koaã«ã¯ããã«ãŠã§ã¢çšã®ãšã³ãžã³ãããªãããããã®å€ãã¯koa.js.ããŒã èªèº«ã«ãã£ãŠäœæãããŠããŸãã

ããã¯ãkoa.jsã®æãåçŽãªã¢ããªã±ãŒã·ã§ã³ã®å€èŠ³ã§ãã ãã®ã³ã°ã®å®è£ ããããŸã-koa.jsã§ã®ããã«ãŠã§ã¢ã®æãåçŽãªå®è£ ã§ãã ããã¯ãè¿ãããåãšè¿ãããåŸã®äž¡æ¹ã§ç¶æ ãè¿ããžã§ãã¬ãŒã¿ã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«ãããæéãèšç®ã§ããŸãã ãããã¯å®£èšã®é åºã§å®è¡ãããããšã«æ³šæããŠãã ãããäžèšã§çºè¡šãããå 容ãæåã«åäœãéå§ããŸãã
koa.js
å©ç¹ïŒ
â¢co.jsã§ã©ãããããèšå€§ãªæ°ã®ã©ã€ãã©ãªã®ååšã
â¢ã¢ãžã¥ãŒã«æ§ãšæããã
â¢ããç解ããããã³ãŒããæžãèœåã
â¢ããå°ãªãã³ãŒããæžãèœåã
â¢é«ãã³ãã¥ããã£æŽ»åã
koa.jsã¯ãã»ãšãã©äœãååšããªã貧ãããã¬ãŒã ã¯ãŒã¯ã®ããã§ãã åæã«ãå€ãã®ã©ã€ãã©ãªããããã»ãšãã©ã®æšæºãµãŒãã¹æ©èœã¯ããã«ãŠã§ã¢ãšããŠæäŸãããŠããŸãã ã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ããå¿ èŠã§ã-ããã±ãŒãžãå·®ã蟌ãã§ããã«ãŠã§ã¢ã転éããã ãã§ãã èšå®ãå¿ èŠãªå Žåã¯ããã©ã¡ãŒã¿ãŒãæž¡ãã ãã§ãã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ããçºçããŸãã jwt-tokenã䜿çšããæ¿èªãå¿ èŠã§ã-åãããšïŒ3è¡ã®ã³ãŒããå¿ èŠã§ãã ããŒã¿ããŒã¹ã䜿çšããå¿ èŠãããå Žå-ãé¡ãããŸãã
ãã®ãããªã±ãŒã¹ã¯æ°å€ããããŸã-ãã¬ãŒã ã¯ãŒã¯ã®æäœã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããã²ãŒã ã®ããã«ãªããŸããç°ãªãããã±ãŒãžãè©Šãã ãã§ããã¹ãŠãæ©èœããŸãã 誰ãããã®ãããªã«ãã»ã«åæ©èœã楜ãã¿ã«ããŠããã®ã§ãä»ã§ã¯èªç±ã«äœ¿çšã§ããŸãã ãã¬ãŒã ã¯ãŒã¯å ã®æ©èœã®æ¬ åŠã®çµæãšããŠãããã¯ããç°¡åã«ãªããŸããããŸããåŸã§å®æããå¿ èŠãããæšæºã³ã³ããŒãã³ãããããŸããã ããã§ãããç解ããããã³ãŒããäœæã§ããŸãã ãžã§ãã¬ãŒã¿ãŒã䜿çšãããšãæ¬äŒŒåæã³ãŒããèšè¿°ã§ãããããã¢ããªã±ãŒã·ã§ã³å ã®äžæçã§äžèŠãªãã®ã®æ°ãæžããããšãã§ããŸãã ãã®çµæãããå°ãªãã³ãŒããèšè¿°ããæ©èœãç»å ŽããŸããã ç©æ¥µçãªã³ãã¥ããã£ãµããŒãããããå€ãã®ãã©ã°ã€ã³ãäºãã«ç«¶åãå§ããŠããŸãã æé«ã®åå©ãå€ãã¯æé€ãããäžè¬ã«ããã¡ãã䟿å©ã§ãã

ãã®è¡šã¯ãKoaãExpressãããã³Connectãã¬ãŒã ã¯ãŒã¯ã®é ä¿¡ã®æ¯èŒã瀺ããŠããŸãã ã芧ã®ãšãããkoaã«ã¯ããã«ãŠã§ã¢ã«ãŒãã«ãããããŸããã
co.jsèªäœã«ã€ããŠå°ã説æãã䟡å€ããããŸãã
Co.jsã¯ãžã§ãã¬ãŒã¿ãŒãšãããã¹ã®ã©ãããŒã§ãããéåææäœã®äœæ¥ãç°¡çŽ åã§ããŸãã coããJavaScriptã®ã³ã«ãŒãã³ããšããŠæå®ããæ¹ãæ£ç¢ºã§ãã ã³ã«ãŒãã³ã®èãæ¹ã¯æ°ãããã®ã§ã¯ãªããä»ã®ããã°ã©ãã³ã°èšèªã«ãéåžžã«é·ãéååšããŠããŸãã
äž»ãªã¢ã€ãã¢ã¯ãã¡ã€ã³ããã°ã©ã ããã³ã«ãŒãã³ã«å¶åŸ¡ã移ãããšã§ããã³ã«ãŒãã³ã¯ãå¶åŸ¡ãã¡ã€ã³ããã°ã©ã ã«æ»ãããšãã§ããŸãã å®éããã®ããã»ã¹ã®äžéšã¯JavaScriptã®ãžã§ãã¬ãŒã¿ãŒã«ãã£ãŠå®è£ ãããŸãã
JSéçºè ã®åé¡ã«éŠŽæã¿ã®ãããã®ãã¹ãŠãæäŸãããšãco.jsããžã§ãã¬ãŒã¿ãŒãå®è¡ãããããnextïŒïŒãžã§ãã¬ãŒã¿ãŒãé 次åŒã³åºãå¿ èŠããªããªããŸãã 次ã«ãcoã¯å¥ã®promiseãè¿ããŸããããã«ããããã®å®äºã远跡ãããšã©ãŒããã£ããã§ããŸãïŒããã«ã¯catchã¡ãœããã䜿çšã§ããŸãïŒã æãã¯ãŒã«ãªã®ã¯ãcoã§ãããã¹ã®é åïŒla Promise.allïŒã«å¯ŸããŠyieldãå®è¡ã§ããããšã§ãã coãçºé»æ©ã®ä»£è¡šå£ãšçŽ æŽãããä»äºãããŠããããšã¯æ³šç®ã«å€ããŸãã
koa.js
å§ããã®ã«åœ¹ç«ã€ããã€ãã®ããã±ãŒãžïŒ
â¢koa-cors-1è¡ã§ã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ããèš±å¯ããŸãã
â¢koa-route-æ¬æ Œçãªã«ãŒãã£ã³ã°ã
â¢koa-jwt-jwtããŒã¯ã³ã䜿çšããæ¿èªã®ãµãŒããŒå®è£ ã
â¢koa-bodyparse-çä¿¡ãªã¯ãšã¹ãæ¬æã®ããŒãµãŒã
â¢koa-send-éç管çã
äžèšã®äŸãšããŠãå®éã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããããã«ãŠã§ã¢ãããã€ããããŸãã koa-corsããã±ãŒãžã¯ã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ããèš±å¯ããkoa-routeã¯Expressãæã€ãã®ãšåæ§ã®ã«ãŒãã£ã³ã°ãæäŸããŸãã

koa.jsã®äž»ãªçæã¯ããã¬ãŒã ã¯ãŒã¯ãããåºãã«ãªã£ãŠãããšããäºå®ã®è£è¿ãã§ãããçžäºã«äŸåããããšãçŽæããªãããã±ãŒãžã®å質ãåžžã«ç£èŠããå¿ èŠãããããã°ãåãé€ãããšãå°é£ã«ãªãå Žåãããããšã§ãã 2çªç®ã®åé¡ã¯ãããŒã ã®éžæã§ããçŸæç¹ã§ã¯ãæ®å¿µãªãããkoa.jsã§äœæ¥ãã人ã¯å€ããããŸããã ãã®ããããããžã§ã¯ãã«æ°ãã人ã玹ä»ããæéãé·ããªããŸãã ãŸãããããžã§ã¯ããå°èŠæš¡ã®å Žåãæ¡ç®ãåããªãå¯èœæ§ããããŸãã ã€ãŸããkoa.jsãè³¢ã䜿çšããå¿ èŠããããŸãã
koa.js 2
æ°äžä»£ã®ãã¬ãŒã ã¯ãŒã¯ïŒ
Koa.js 2ã¯éåžžã«æ±ãã«ãããã¬ãŒã ã¯ãŒã¯ã§ãã ããã§ãªãä»æ§ã§ãæ©èœããŸãã ã€ãŸããECMAScript 7ãŸãã¯ECMAScript 2016ã§ãããšããéåæé¢æ°ã«é¢ããèšäºãèŠã€ããããšãã§ããŸããããããå®éã«ã¯ãBabelãGoogle Chromeãããã³Microsoft Edgeã¯éåæé¢æ°ããµããŒãããŠããã«ããããããããããã¯ååšããŸããã å€ãã®äººã¯éåææ©èœãECMAScript 7ïŒ2016ïŒã®å ¬åŒãªãªãŒã¹ã«å«ãŸããããšãæåŸ ããŠããŸããããæçµçã«ã¯ãã°ä¿®æ£ãš2ã€ã®æ°æ©èœãçºè¡šããŸããã äžæ¹ãkoa.js 2ã¯éåæé¢æ°ã§åäœããéçºè ã¯ãããã«ã€ããŠèšè¿°ããŸãã ãããŠããããã¯ãã¹ãŠæ°äžä»£ã®ãã¬ãŒã ã¯ãŒã¯ãšããŠäœçœ®ä»ããããŠããŸãã
éåæé¢æ°
埩ç¿
â¢éåæã¯çŽæã§ãã
â¢åŸ ã€ããšã¯çŽæã§ãã
éåæé¢æ°-AsyncãšAwaitã¯ã©ã¡ããçŽæã§ãã

ãã®ãããªã³ãŒãããããšããŸãããã éåæãåé€ããŠåŸ æ©ããé¢æ°ã®é£ã«ã¢ã¹ã¿ãªã¹ã¯ãå ¥ããŠãåŸæããåã«yieldã眮ããšããžã§ãã¬ãŒã¿ãŒãåŸãããŸãã éãã¯äœã§ããïŒ ãããŠãç§ãã¡ã¯éåžžã®Promiseã®åŸæãæåŸ ããŠããŸããéåæé¢æ°ããžã§ãã¬ãŒã¿ãŒã§ã©ããããå¿ èŠã¯ãããŸãããåã«å¿ èŠã§ã¯ãããŸããããã§ãããµãŒããŒãªã¯ãšã¹ããåä¿¡ããããã®éåžžã®æ°ããæ¹æ³ã䜿çšã§ããŸãã 次ã«ãçµæãåŸ ã€å¿ èŠããããŸããçµæãåŸããããããããç¶æ ã«ããŠãç¶æ ãè¿ããŸãã
éåæé¢æ°
ããšãã
â¢éåæé¢æ°ã¯ãžã§ãã¬ãŒã¿ãŒããã䟿å©ã§ãïŒã³ãŒããå°ãªãããžã§ãã¬ãŒã¿ãŒã®ãããã¹ãã©ããããå¿ èŠããããŸããïŒã
â¢éåæé¢æ°ã¯ãŸã æšæºã®äžéšã§ã¯ãªããéåæé¢æ°ãæšæºã®äžéšã«ãªããã©ããã¯æ確ã§ã¯ãããŸããã
éåæé¢æ°ã¯ãžã§ãã¬ãŒã¿ãŒããã確ãã«äŸ¿å©ã§ã;ãããã¯ããå°ãªãã³ãŒããæžãããšãå¯èœã«ããŸãã ãã®å Žåããã€ã³ãã£ã³ã°ã³ãŒããèšè¿°ããå¿ èŠã¯ãããŸãããçŽæãè¿ãã©ã€ãã©ãªïŒã»ãšãã©ãã¹ãŠã®ææ°ã®ã©ã€ãã©ãªïŒã䜿çšã§ããŸãã ããã«ãããå€ãã®æéãšãéãç¯çŽã§ããŸãã ãã€ãã¹-éåæé¢æ°-ã¯ãŸã ãã©ããä»æ§ã§ãã ãã®ãããæçµçã«ã¯ãWebRTCã®ç»é¢ãã£ããã£ãšåãããã«ãªããŸãããã®æ©èœã䜿çšããã¢ããªã±ãŒã·ã§ã³ãç»å ŽããçµæãšããŠæåŠãããŸããã

ãã®èšäºã§è©±ãããã¹ãŠã®ã¢ã©ã«ã¯éåžžã«åçŽã§ãããžã§ãã¬ãŒã¿ãŒãPromiseãŸãã¯Callbackã®ä»£ããã«ãªããšèšã£ãŠããã®ã§ã¯ãããŸããã éåæé¢æ°ããžã§ãã¬ãŒã¿ãŒãã³ãŒã«ããã¯ããããã¹ã眮ãæããããšãã§ãããšèšã£ãŠããã®ã§ã¯ãããŸããã ããããã³ãŒããçŸããæ§é åããããã®ã³ãŒããæžãããã®æ°ããããŒã«ããããŸãã ãããããããã®äœ¿çšã¯ããªãã®è£éã§ãã ç¹å®ã®ãããžã§ã¯ãã®åããŒã«ã®åçæ§ãšé©çšæ§ã®èŠ³ç¹ãã決å®ãã䟡å€ããããŸãã
䜿çšæžã¿ãªãœãŒã¹ã®ãªã¹ã
ããã§åããå³é¢ïŒ 1ã2ã3 ã
ã¹ããããã¯ããã§åããŸãã ã