JavaScriptã§ãã«ã¹ã¿ãã¯ãæ§ç¯ããïŒåºæ¬
JavaScriptã®äžçã§ã¯ããããããç¹å®ã®åé¡ã解決ããäžé£ã®å°ããªããã±ãŒãžã䜿çšããŠããã¯ãããžãŒã¹ã¿ãã¯ãæ§ç¯ããã®ãéåžžã«ç°¡åã§ãã ãããŠãããã¯è¯ãããšã§ãããäžæ¹ã§ãããªãã«ã¯æ¬åœã«éžæè¢ããããŸãã-JavaScriptã§å¹ åºãã¿ã¹ã¯ãå®è¡ãããã¬ãŒã ã¯ãŒã¯ã¯äžè¬çã§ã¯ãããŸããã
ãã®äžé£ã®èšäºã§ã¯ãJSã¹ã¿ãã¯ã®æ§ç¯ã«ãããå®éã®çµéšãå ±æããããšæããŸãã
- èšäº1ïŒåºæ¬
- èšäº2ïŒãµãŒããŒ
- èšäº3ïŒã¯ã©ã€ã¢ã³ã
.NETãããã«ã¹ã¿ãã¯JavaScriptã«åãæ¿ããŸããã Nodeã®åºæ¬ããã¹ã¿ãŒããåŸã¯ãåºæ¬çãªæè¡ã¹ã¿ãã¯ãšã³ãŒãã®ç·šææ¹æ³ãæ§ç¯ããããã«å€ãã®æéãè²»ããå¿ èŠããããŸããã æ®å¿µãªãããJSã«ã¯ããšã©ãŒåŠçãããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ãã³ãŒãç·šæãæ¿èªãªã©ãã»ãšãã©ã®ãããžã§ã¯ãã®äž»èŠãªã¿ã¹ã¯ã解決ããæ¹æ³ã確èªã§ãããšã³ããŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³ã®äŸã¯å€ããããŸããã
åºæ¬æè¡ã®äœ¿çšäŸãåžžã«æå ã«çšæããããã«ãJSã®ãã«ã¹ã¿ãã¯ã¢ããªã±ãŒã·ã§ã³ã®äŸã§ããContoso ExpressãäœæããŸããã ç§ãã¡ã®ããŒã ã§ã¯ããã®ãããžã§ã¯ããä»ã®ãããžã§ã¯ãã®éå§ãã³ãã¬ãŒããšããŠäœ¿çšããŠãããããä»åŸãµããŒãããã³æŽæ°ãããŸãã
GithubïŒcontosoãšã¯ã¹ãã¬ã¹
Contoso Expressã¯ã.NET Webãããžã§ã¯ãã®éçºã®åºæ¬ãåŠã¶ããã®Microsoftã®æåãªãã¥ãŒããªã¢ã«ã®ãªã¡ã€ã¯ã§ãã
ã¹ã¿ãã¯ã®å€ãã®éšåã«ã€ããŠã1ã€ã®éžæè¢ã«ãšã©ãŸãããšã¯å°é£ã§ãã ãã®ãããäžéšã®ãã¯ãããžãŒã«ã¯ä»£æ¿ã®å®è£ ããããŸãã Contoso Expressãªããžããªã®ALTãã©ã³ããã芧ãã ããã
ãããã®èšäºã¯ãåºæ¬ããã§ã«ç¥ã£ãŠãã人åãã§ããããããã®åéã§ç¥èãè£å ããå¿ èŠãããå Žåã¯ã è¿œå ãªãœãŒã¹ã®ãªã¹ãã§å¿ èŠãªãã®ãæ¢ããŠãã ããã
ããå§ããŸãããïŒ
ãªãjavascript
å€ãã®çç±ããããŸãããããã«ç§ã®ããããªã¹ãããããŸãïŒ
ã·ã³ãã«ã ïŒåºæ¬çã«ãããŒãã©ã€ãã©ãªã«ã¯ãç解ããããçŽæçãªæ¹æ³ã§åäœããã·ã³ãã«ãªAPIããããŸãã 1ã€ã®ã©ã€ãã©ãªã§æ©èœããªãã£ãå ŽåãååãšããŠãé©åãªä»£æ¿åãèŠã€ããã®ã¯ç°¡åã§ãã
å¶åŸ¡ ïŒããã°ã©ããŒèªèº«ããç¹å®ã®ã¿ã¹ã¯çšã®å°ããªã¢ãžã¥ãŒã«ãéžæããŠçµã¿åãããããšã«ããããããžã§ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§ç¯ããŸãã ãã£ãšæéãããããŸãããçµæã«ã¯äŸ¡å€ããããŸãã äžåºŠç解ãããšãåŸãããçµéšã¯å°æ¥ç°¡åã«é©çšã§ããŸãã
æ±çšæ§ ïŒJavaScriptã¯æåã¯ã¯ã©ã€ã¢ã³ãã§ã®ã¿æ©èœããŸããã æåã«ãNodeãšäžç·ã«ãµãŒããŒã«ç§»åããæè¿ã§ã¯ãã¹ã¯ãããïŒEletctronïŒãšã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«äœæã§ããããã«ãªããŸããã ããã«ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããã€ããªããã¢ããªã±ãŒã·ã§ã³ïŒãã©ãŠã¶ã®ã©ãããŒã䜿çšããïŒCordovaïŒïŒãŸãã¯ãã€ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ãåããã¢ããªã±ãŒã·ã§ã³ïŒReactNativeãNativeScriptïŒã®ãªãã·ã§ã³ããããŸãã Nodeã«ã¯èšå€§ãªæ°ã®ã©ã€ãã©ãªããããä»ã®ãã¯ãããžãŒãããŒã¿ããŒã¹ãã¯ã©ãŠããã¯ãããžãŒãããŸããŸãªãã©ãŒãããããããã³ã«ãšç°¡åã«çµ±åã§ããŸãã
ç°¡åãªå±é ïŒããŒãã¯ãLinuxãšWindowsã®äž¡æ¹ã®ãµãŒããŒã«ç°¡åã«å±éã§ããŸãã .NETã§ã®é·å¹Žã®äœæ¥ã®åŸãå±éã¯æ¯åç§ã«ãšã£ãŠäžå¿«ãªãã¹ãã§ãããNodeã§ã¯ããã®ããã»ã¹ã¯ããã«æ¥œãããã®ã§ãã è©ŠããŠã¿ãã ãã§ãã
ããã©ãŒãã³ã¹ ïŒããŒãã¯éåæã§ããããã¡ã€ã«æ ¡æ£ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ãªã©ã®é·æéã®æäœäžã«å®è¡ããã»ã¹ããããã¯ããŸããã ããã«ãããã·ã³ã°ã«ã¹ã¬ããïŒã·ã³ã°ã«ã¹ã¬ããç°å¢ïŒã䜿çšãããšãã«ãé«ã¬ãã«ã®ããã©ãŒãã³ã¹ãå®çŸã§ããŸãã äžæ¹ãJavaScriptã§ã®èšç®ã¯ãéçã«åä»ããããèšèªãããé ããªããŸãã ã»ãšãã©ã®ãããžã§ã¯ãã§ã¯ãããã¯åé¡ã§ã¯ãããŸããã ããŒã¿å€æã ãã§ãªãèšç®ãå¿ èŠãªå Žåã¯ãå¥ã®ãµãŒãã¹ã«å¥ã®ãµãŒãã¹ãäœæããããšããå§ãããŸãã
ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã®1ã€ã®èšèª ïŒããã¯äŸ¿å©ã§ããã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§ã³ãŒããç°¡åã«è»¢éã§ããéçºãšä¿å®ã容æã«ãªãããã§ãã
- JavaScriptèšèª ïŒJavaScriptã¯éåžžã«æè»ã§äœ¿ãããããES6ã®ææ°ããŒãžã§ã³ã§ã¯å€ãã®èšèªã®æ¬ é¥ãä¿®æ£ãããŠãããTypeScriptã䜿çšããŠãªãã·ã§ã³ã§ã¿ã€ãã³ã°ãè¿œå ã§ããŸãã
ãããŠãããã¯å®å šãªãªã¹ãã§ã¯ãããŸããã
JSèšèªãªãã·ã§ã³
ææ°ã®JavaScriptã¯ãããã€ãã®æ¹æ³ã§äœæã§ããŸãã
- ES5
- ES6 / ES7次
- JSã§ã³ã³ãã€ã«ãããèšèªïŒTypeScriptãªã©ïŒ
JavaScriptæšæº
ES5ã¯JavaScriptã®2009ããŒãžã§ã³ã§ããã¹ãŠã®ææ°ã®ãã©ãŠã¶ãŒãšããŒãã§å®å šã«ãµããŒããããŠããŸãã
ES6ã¯æè¿æ¿èªãããèšèªã®æŽæ°ã§ãã ãã¹ãŠã®JSãšã³ãžã³ã®æšæºãµããŒãã®éçºã¯ãŸã éçºäžã§ãã
- ES7 / Next -JSã®æ°æ©èœã¯ãŸã æ¿èªãããŠããŸããã
ES6ãµããŒãã®çŸåšã®ã¹ããŒã¿ã¹ã¯ã次ã®Webãµã€ãã§ã芧ããã ããŸãã
ã«ã³ã¬ãã¯ã¹ES6 ã
ãããã£ãŠãè¿ãå°æ¥ããã¹ãŠã®ãã©ãŠã¶ã§ãµããŒããããŠããªããããES6ã§ã¯ã©ã€ã¢ã³ãéšåãããã«éçºããããšã¯ã§ããŸããã
Nodeã«ã¯ãV8ãšã³ãžã³ã䜿çšãããŸããçŸåšã®å®å®ããLTSããŒãžã§ã³ïŒ4.xïŒã¯ããã¹ãŠã®æ°ããES6æ©èœããµããŒãããŠããŸããã
LTSïŒé·æãµããŒãïŒã¯ãå®çšŒåã§ã®äœ¿çšãæšå¥šãããNodeJã®ããŒãžã§ã³ã§ãã 次ã®LTSããŒãã¯2016幎10æã«äºå®ãããŠããããã§ã«ã»ãšãã©ã®ES6æ©èœããµããŒãããŠããŸãã
ãã©ã³ã¹ãã€ãªã³ã°
ES6 / ES7æ©èœã䜿çšããããã«ãES6ã§èšè¿°ãããã³ãŒããES5ã«å€æãããã©ã³ã¹ãã€ã©ãŒãããã€ããããŸãã
ã³ã³ãã€ã«ãšã³ã³ãã€ã«ã®éãã«æ³šæããŠãã ããïŒ here ã
Babelã¯ãES6 / Next to ES5ã§æã人æ°ã®ãããã©ã³ã¹ããŒã¿ãŒã§ãã
TypeScript
TypeScriptã¯ãéçåä»ãã®å¯èœæ§ãè¿œå ããJavaScriptæ¡åŒµèšèªã§ãã TypeScriptã®åã¯ãã³ãŒãã®æ£ç¢ºããè¿œå ã®ãªãã¡ã¯ã¿ãªã³ã°ããã³èªåãã³ããæ€èšŒããããã«äœ¿çšãããŸãã TypeScriptãJSã«çœ®ãæãããããšããã¹ãŠã®åå®çŸ©ãçç¥ãããŸãã
TypeScriptã¯å€ãã®ES6 / ESNextæ©èœããµããŒãããŠãããïŒBabelã®ä»£ããã«ïŒãã©ã³ã¹ãã€ã©ãŒãšããŠäœ¿çšã§ããŸãã
ãŸããTypeScriptã«ã¯ãJSã«ã¯ãªãè¿œå ã®æ§æèŠçŽ ããããŸã-ã¯ã©ã¹ãªã©ã®åæåãç¶æ¿ãå€æ æ§ã ãããã¯ãè£å©JSã³ãŒãã䜿çšããŠJSã«ãã©ã³ã¹ããŒãºãããŸãã
ãã¹ãŠã®TypeScriptæ©èœãåçã«åœ¹ç«ã€ããã§ã¯ãããŸãããäž»ãªã«ããŽãªããªã¹ãããŸãã
ES6 / ESNext -TS ãã©ã³ã¹ãã¬ãŒã·ã§ã³ã¯ãã®ç¹ã§åªããåããããŸãããããã€ãã®ç¹ã§ããã«ããå£ããŸããããšãã°ãTypeScriptã®async / awaitã¯ãES6ããŒãžã§ã³ã«ãã©ã³ã¹ããŒãºããå Žåã«ã®ã¿äœ¿çšå¯èœã§ãã ããã«ã€ããŠã¯ã次ã®èšäºã§è©³ãã説æããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ã®éçãªåæå®ã¯ TSã䜿çšããäž»ãªçç±ã§ããTSã®åã¯ãªãã·ã§ã³ã§ããåãæå®ãããŠããªãå Žåãåã¯anyã§ããã€ãŸãããã®åããä»»æã®ãã£ãŒã«ããèªã¿æžãã§ãããããæ¢åã®JSã³ãŒããTSã«å€æããŸããã¯ããã«ç°¡åã§ãã©ãã«ã§ãåãè¿œå ããå¿ èŠã¯ãããŸãããããããçã«ããªã£ãŠããå Žåã«ã®ã¿ã ãã®å ŽåãTSã§ã¿ã€ããèšè¿°ããªããŠããã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã§ãã£ãŠããäºçŽ°ãªã¿ã€ããã¹ãæ€åºããã®ã«åœ¹ç«ã€è¿œå ã®ãã§ãã¯ããããããããŸãã ããã«ãã³ãŒãå ã®ãã³ãã¯é©åã«æ©èœãããããã¢ãžã¥ãŒã«ã«å«ãŸããã¡ãœãããšãããã«å«ãŸããã·ã°ããã£ãå床確èªããå¿ èŠã¯ãããŸããã
ãµãŒãããŒãã£ã©ã€ãã©ãªã®å ¥å -TSã䜿çšãããšããµãŒãããŒãã£ã©ã€ãã©ãªã®æ§é ïŒlodash go expressãªã©ïŒãèšè¿°ã§ããŸããããã«ãããæ£ãããã©ã¡ãŒã¿ãŒã§ã¡ãœãããåŒã³åºãããšãå¶åŸ¡ã§ããããã¥ã¡ã³ãã䜿çšããã«ã¡ãœãããšãã®çœ²åã衚瀺ã§ããŸãã æ®å¿µãªããããã®ãããªèšè¿°ã®å質ã«ã¯å€ãã®å ŽåæãŸããªããã®ãå€ããèšè¿°ã«å¿ èŠãªçœ²åããªãå Žåã¯ãæåã§è¿œå ããå¿ èŠããããŸãã ãµãŒãããŒãã£ã®èª¬æã䜿çšããªãã»ããç°¡åãªå ŽåããããŸãïŒã¿ã€ããanyãã®ããã«ã©ã€ãã©ãªãæäœããŸãïŒã åé¡ã¯ãTSå ã®ã©ã€ãã©ãªãŒã®èª¬æãšã©ã€ãã©ãªãŒèªäœããå€ãã®å Žåç°ãªã人ã ã«ãã£ãŠæžãããŠããããšã§ãã ãããããTSã®äººæ°ãé«ãŸããšç¶æ³ã¯æ¹åããŸãã
- JSã«ãªãTSæ©èœ -äžå¿ èŠã«äœ¿çšããããTSã«çŽæ¥èšè¿°ããããã¬ãŒã ã¯ãŒã¯ïŒAngular2ãªã©ïŒã䜿çšãããããªãå Žåã¯ãå§ãããŸããã ãããã®æ©èœã䜿çšãããšãTS <-> JSã®å€æãéåžžã«é£ãããªããŸããTSã®ç°ãªãããŒãžã§ã³éã§å€æŽãããããšããããããŸãã
äœãéžã¶ã
ES6ãšTypeScriptãéžæããããšããå§ãããŸãã ES6ã«ã¯ãéçºãããç°¡åã§æ¥œããããå€ãã®äŸ¿å©ãªã¢ããªã³ããããåæã»ããã¢ããã«ããå€ãã®æéãè²»ãã䟡å€ããããŸãã ç§ã®ãããžã§ã¯ãã§ã¯ãèšå®ãšçµ±åã«ããã«å€ãã®åŽåãå¿ èŠã§ãããéçºããã»ã¹ãéåžžã«çå£ã«æ¹åãããããTypeScriptã«åãæ¿ããŸããã ã©ã¡ããéžãã§ããäž¡æ¹ã§äœæ¥ããŠæ å ±ã«åºã¥ããéžæããããšããã§ãããã
éçºç°å¢
WebStormã¯ãå€ãã®çµã¿èŸŒã¿æ©èœãåããã¹ããŒããªéçºç°å¢ã§ãã TypeScriptã®è¯å¥œãªãµããŒãã ææã ãããžã§ã¯ãwikiããŒãžã§contoso Expressã®æ§æã®è©³çŽ°ã WebStormã¯ç§ãã¡ã®ããŒã ã®ã¡ã€ã³IDEã§ãã
Visual Studio Codeã¯ãMicrosoftã®ç¡æã®ç°å¢ã§ãã TypeScriptã®æé«ã®ãµããŒããæè¿ç»å ŽããŸãããããªãã¿ã®ããæ©èœã¯ãããŸããã ããŒã¹ãéããå®å šã«äœæãããJavaScriptãã©ã°ã€ã³ããµããŒãããŸãã
ãã®ä»-AtomãSublimeãBracketsãªã©ãä»ã®JavaScript IDEã䜿çšã§ããŸãã TypeScriptã¯ã©ãã§ãå€ããå°ãªãããµããŒããããŠããŸãã
npmããã±ãŒãžãéžæããŸã
npmã®æäœã¯éåžžã«ç°¡åã§ãã ã€ã³ã¹ããŒã«ãç°¡åã§ãããã±ãŒãžãå ¬éããã ãã§ãã ãã®çµæãnpmïŒçŸåš330.000+ïŒã«ã¯å€ãã®ããã±ãŒãžããããŸãã
é©åãªããã±ãŒãžãéžæããããšã¯éåžžã«å°é£ã§ãã ã©ã®ãããªãªã¯ãšã¹ãã§ããnpmjs.comã«ã¯å€ãã®ããã±ãŒãžããããŸãããåé¡ã解決ããããã®åºæ¬çãªããã±ãŒãžãæäŸããããšããäºå®ã¯ãããŸããã
ããã±ãŒãžãéžæãããšãã¯ãããŠã³ããŒãæ°ïŒäººæ°ïŒãšããã±ãŒãžã®æŽæ°é »åºŠïŒgithubãªããžããªã«ã³ãããïŒã«æ³šæããå¿ èŠããããŸãã å¿ èŠãªããã±ãŒãžãèŠã€ãã£ãããã€ã³ã¿ãŒãããã§æ å ±ãæ€çŽ¢ã§ãããããåæ§ã®ã¿ã¹ã¯ãå®è¡ããä»ã®ããã±ãŒãžãèŠã€ããããšãã§ããŸãã
npm npms.ioã§ä»£æ¿æ€çŽ¢ãè¡ããµã€ããããã人æ°ããµããŒãã®èŠåæ§ãªã©ã®ç¹æ§ãããã«èšç®ããŸããã
ä»åŸã®èšäºã§ã¯ãåºæ¬çãªéçºã¿ã¹ã¯ã®åºæ¬çãªããã±ãŒãžãªãã·ã§ã³ã«ã€ããŠèª¬æããŸãã ããã±ãŒãžåãåŒçšç¬Šã§å²ãŸããŠããå ŽåïŒãbluebirdããªã©ïŒãããã¯ããã±ãŒãžãnpmã«ç»é²ãããŠããååãæå³ãã httpsïŒ//www.npmjs.com/package/ { package_name }ã§è¡šç€ºã§ããŸãïŒã€ãŸããã±ãŒã¹https://www.npmjs.com/package/bluebird ïŒã
ããŒã¿ããŒã¹
SQLãŸãã¯NoSQLïŒ
ç¹å®ã®ç¶æ³ã«å¿ããŠããã®è³ªåã«æ確ã«çããããšã¯ã§ããŸããã SQL / NoSqlã®æãäžè¬çãªãªãã·ã§ã³ã¯ãPostgreSQL / MongoDbã§ãã JSONãã£ãŒã«ããæè¿PostgreSQLã«è¿œå ãããããšã«ãããSQL / NoSqlã®äžçã®ãã¹ããçµã¿åãããéåžžã«é åçãªãªãã·ã§ã³ã«ãªããŸããã ããããããã«ãããããããMongoDbã¯äŸç¶ãšããŠNodeã§æã人æ°ã®ããããŒã¿ããŒã¹ã§ãããç¹ã«SQLããŒã¿ããŒã¹ã®çµéšããªã人ã«ãšã£ãŠã¯äœæ¥ãç°¡åã«ãªããŸãã
ããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹
ããŒã¿ããŒã¹ãæäœããå ŽåãããŒã¿ããŒã¹ãã©ã€ããŒãŸãã¯äœããã®é«ã¬ãã«ã®ORMæœè±¡åã䜿çšããŠãã¢ã¯ã»ã¹ãçŽæ¥äœ¿çšã§ããŸãã ããŒã¿ããŒã¹ãšã®å¯Ÿè©±ãããŸããªãå Žåã¯ãçŽæ¥ã¢ã¯ã»ã¹ãŸãã¯KnexïŒSQLããŒã¿ããŒã¹çšïŒãªã©ã®äœã¬ãã«ã®æœè±¡åã䜿çšããã®ãæåã§ãã
ORM
Sequelizeã¯ãSQLããŒã¿ããŒã¹ã§æã人æ°ã®ããORMã§ãã ããŒã¿ããŒã¹ã¹ããŒãã«å¯Ÿããé«åºŠãªæœè±¡åãæäŸããåºæ¬çãªSQLãã€ã¢ã¬ã¯ãïŒPostgreSQLãMySQLãSQLiteããã³MSSQLïŒããµããŒãããŸãã Contoso Expressã«ãã£ãŠäœ¿çšãããŸãã
Knexã¯äœã¬ãã«ã®æœè±¡åã§ãã æ¬æ ŒçãªORMãããã¯ãšãªãã¶ã€ãã«äŒŒãŠããŸãã ããå€ãã®æ¹èšããµããŒãããçââæãããSQLããã詳现ã«å¶åŸ¡ã§ããŸãã ããŒã¿ããŒã¹ã¹ããŒããšãã®ç§»è¡ãæ§ç¯ããããã®é¢æ°ããããŸãã
Bookshelfã¯ãKnexããŒã¹ã®ãã1ã€ã®äººæ°ã®ããORMã§ãããæœè±¡åã®ã¬ãã«ã¯Sequelizeãããäœããå€ãã®ãã®ãæåã§å®çŸ©ããå¿ èŠããããŸãã
Mongoose -JSã§æã人æ°ã®ããMongoDBããŒã¿ããŒã¹ã§æã人æ°ã®ããORM
çŽæ¥æ¥ç¶
ãã¹ãŠã®äž»èŠãªããŒã¿ããŒã¹ã«ã¯ãçŽæ¥æ¥ç¶ã®ããã®è¯è³ªã®ãã©ã€ããŒããããŸãã Postgresã®å ŽåããpgããŸãã¯ãpg-promiseãããã±ãŒãžã䜿çšããŸãã
次ã¯äœã§ãã
次ã®èšäºã§ã¯ããµãŒããŒäžã§JSãæäœããããšã«ã€ããŠèª¬æããŸãã ããå®çšçã§ãWebãã¬ãŒã ã¯ãŒã¯ã®éžæããããžã§ã¯ãæ§é ã®ç·šæãæ§æã®æäœãæ¿èªããã®ã³ã°ããšã©ãŒåŠçãªã©ãã«ããŒããŸãã
ç¹ã«ããããžã§ã¯ãContoso Expressã®ã³ãŒãã«çŽæ¥ã³ã¡ã³ãããå¯ããã ããã
æåŸãŸã§èªãã§ãããã¿ããªã«æè¬ããŸãïŒ ã楜ãã¿ã«ïŒ