
ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ãJavaScriptã®ES6ï¼ES2015ï¼ã¢ã¸ã¥ã¼ã«ã使ãã使ç¨ããæ¹æ³ã解説ãã¾ãã
JavaScriptã¢ã¸ã¥ã¼ã«ã使ãå§ããããã«å¿ è¦ãªå ¨ã¦ã®æ å ±ãæä¾ãã¾ãã
ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã®æ´å²
JavaScriptã«ã¯é·ãéãã¢ã¸ã¥ã¼ã«ã·ã¹ãã ãããã¾ããã§ããã
以åã®ã¢ããªã±ã¼ã·ã§ã³ã¯åç´ã§å°è¦æ¨¡ã§ãããã³ã¼ããåç´ã§ããã
ããããã¢ããªã±ã¼ã·ã§ã³ãæ¹åããã¦è¥å¤§åããã«ã¤ãã¦ãã³ã¼ãã大ãããªãã管çããããã«è¤æ°ã®ãã¡ã¤ã«ã«åå²ããå¿ è¦æ§ãçãã¾ããã
ããã§ãã¢ã¸ã¥ã¼ã«ã®æ¦å¿µãçã¾ãã¾ããã
ãã®æ¦å¿µã¯ãå¤ãã®ããã°ã©ãã³ã°è¨èªã§ã¯åºæ¬çãªé¨åã§ãããJavaScriptã«ã¯åå¨ãã¾ããã§ããã
JavaScriptã§æ¸ããããã®ã¯ããã©ã«ãã§ã°ãã¼ãã«ã§ãããè¨èªã®åææ®µéã§ã¯å¤§ããªåé¡ã§ã¯ããã¾ããã§ããããéçºè ãJavaScriptã§æ¬æ ¼çãªã¢ããªã±ã¼ã·ã§ã³ãæ¸ãå§ããã¨ãå®éã®åé¡ã«ç´é¢ãã¾ããã
ãã®çµæãããã¤ãã®ãµã¼ããã¼ãã£ã½ãªã¥ã¼ã·ã§ã³ã使ãããAMDãCommonJSãããã³UMDã®3ã¤ã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ãä½ããã¾ããã
æã人æ°ããã£ãã®ã¯CommonJSã§ãNode.jsã®ä½æè ãæåã«ããã©ã«ãã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã¨ãã¦æ¡ç¨ãã¾ããã
ããããCommonJSã¯JavaScriptèªä½ã®ããã©ã«ãã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã§ã¯ããã¾ããã
ES6ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã¯ãCommonJSã¨é常ã«ä¼¼ãæ§æãæã¡ã¾ãããé常ã«ç°ãªãæ¹æ³ã§æ©è½ãã¾ãã
CommonJSã®åæã¯ãæ°ç¾ã®ã¢ã¸ã¥ã¼ã«ãå«ãå¤§è¦æ¨¡ãªã¢ããªã±ã¼ã·ã§ã³ã®ããã©ã¼ãã³ã¹ã®åé¡ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
ES6ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã¯ã2015å¹´ã«JavaScriptã®å ¬å¼æ¨æºã¨ãã¦ãªãªã¼ã¹ããã¾ããã
ES6æ¨æºãå°å ¥ãããåã¯ããµã¼ãã¼ãµã¤ãJavaScriptã§ã½ã¼ã¹ã³ã¼ããæ´çããããã®ãã¤ãã£ãå®è£ ã¯ããã¾ããã§ããã
2019å¹´ã«æ°ããã¢ã¸ã¥ã¼ã«ã·ã¹ãã ãNode.jsã«ç§»æ¤ããã¾ããã
ç¾å¨ããã¹ã¦ã®ä¸»è¦ãªãã©ã¦ã¶ã¨Node.jsã§ãµãã¼ãããã¦ãã¾ãããå¤ããã¼ã¸ã§ã³ã®ãã©ã¦ã¶ã§ã¯ãµãã¼ãããã¦ããªãå ´åãããã¾ãã
ãã®è¨äºã§ã¯ãES6ã¢ã¸ã¥ã¼ã«ã«ã¤ãã¦è©³ãã説æãã¾ãã
ES6 moduleã¨ã¯ï¼ãªãå¿ è¦ï¼
JavaScriptã®éå»ã«ã¯ãå¥ã®JavaScriptãã¡ã¤ã«ããç´æ¥åç §ãããã¨ãã§ãã¾ããã§ããã
ä»ã®ãã¡ã¤ã«ã®é¢æ°ã使ç¨ããã«ã¯ãDOMå ã«æ¢ã«ãã¼ãããã¦ãããã¨ãåæã¨ãã¦ãã¾ããã
ä¾ãã°ãä¸è¨ã®ããã«ãã¦å¿ è¦ãªã¹ã¯ãªããããã¼ããã¦ãã¾ããã
<script src="https://code.jquery.com/jquery-3.1.1.js"></script> <script src="dist/test.js"></script> <script src="dist/app.js"></script>
ããã«ã¯ãã°ãã¼ãã«å¤æ°ã§ã®åå空éã®æ±æããä¾åé¢ä¿ã䏿ã§ããã¨ãã£ãæ¬ ç¹ãããã¾ãã
ES6ã¢ã¸ã¥ã¼ã«ã¯ãã³ã¼ããæ´çãã¦åé¢ããããã«å°å ¥ããã¾ããã

ããã«ãããå¤§è¦æ¨¡ãªã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ããããã®ãã¼ã¿ã®æ§æè¦ç´ ã¨ãã¦ä½¿ç¨ã§ãã¾ãã
ã¢ã¸ã¥ã¼ã«ã使ç¨ããã¨ã大ããªã¹ã¯ãªãããå°ããªã¢ã¸ã¥ã¼ã«ã«åå²ããä»ã®ãã¡ã¤ã«ã§ã使ç¨ã§ããããã«ãªãã¾ãã
éçºè ã¯å¿ è¦ã«å¿ãã¦ã¹ã¯ãªãããå ±æã§ããããã«ãªãã¾ãã
ã¤ã³ãã¼ããããã¨ã§å¥ã®ãã¡ã¤ã«ã®ã³ã³ãã³ãã使ç¨ãããã¨ãã§ããã¨ã¯ã¹ãã¼ããããã¨ã§èªèº«ã®ã³ã³ãã³ããã¤ã³ãã¼ããããã¨ãã§ãã¾ãã
ããã«ãããã³ã¼ããã¼ã¹ã®ä¿å®æ§ãåä¸ãã¾ãã
JavaScriptã«ããã¦ã大ããªãã¡ã¤ã«ã¯ç¬èªã®ç®çãæã¤å°ããªã³ã³ãã¼ãã³ãã«åå²ãããå¿ è¦ãããã¾ãã
ããã«ãããæè»æ§ã¨é©å¿æ§ãåä¸ãã¾ãããåã¢ããªã±ã¼ã·ã§ã³é¨åãç¬èªã®æ¥ç¶æ¹æ³ãå¿ è¦ã¨ãããã¨ãæå³ãã¾ãã
æ å ±ã®åãæ¸¡ãã¯ã主ã«ãimportãã¨ãexportãã®2ã¤ã®ãã¼ã¯ã¼ãã使ç¨ãã¦å¦çããã¾ãã
ãããã®JavaScriptã¢ã¸ã¥ã¼ã«ã¯ãä½ããã®æ¹æ³ã§æ¥ç¶ããã¦ããªãéããã¢ããªã±ã¼ã·ã§ã³ã®ä»ã®é¨åããåé¢ããã¾ãã
ESã¢ã¸ã¥ã¼ã«ã§ã¯ãã¤ã³ãã¼ãã¯éçã§ãããè§£ææã«å®è¡ããã¾ãã
ãããã£ã¦ãã¤ã³ãã¼ãæ§æãã³ã¼ãã®éä¸ã§ä½¿ç¨ãããã¨ã¯ã§ãã¾ããã
ããã«ãããã¨ã©ã¼ãäºåã«ææ¡ã§ãããã¨ããéçºè ãã¼ã«ãæå¹ãªã³ã¼ããæ¸ããã¨ã§ãããé©åã«ãµãã¼ããã¦ããã¾ãã
ã§ãããå®è¡æã«ã¢ã¸ã¥ã¼ã«ãåçã«ã¤ã³ãã¼ãããå¿ è¦ãããå ´åãããã¾ãã
解決çã¯ãã¡ããããã¾ãã
åçimport()颿°ã§ãã
ããã¯ç¹å¥ãªã¦ã¼ã¹ã±ã¼ã¹ã¨ãã¦æ±ãå¿ è¦ãããããããã®è¨äºã§ã¯åãä¸ãã¾ããã®ã§ãäºæ¿ä¸ããã
ES moduleã¨ã¯ä½ãã«ã¤ãã¦èª¬æãã¾ããã
ããã§ã¯ãã¾ããã©ã¦ã¶ã§ES6 moduleã使ç¨ãã¦ããæ¹æ³ãè¦ã¦ããã¾ãããã
ãã©ã¦ã¶ã§ES6 module
ES6 moduleã¯ä¸è¨ã使ç¨ãã¾ãã
ã» export
主ã«ã颿°ãã¯ã©ã¹ãªã©ãã¨ã¯ã¹ãã¼ããã¾ãã
ã» import
moduleãã¨ã¯ã¹ãã¼ãããããmoduleãã¤ã³ãã¼ãã§ããããã«ãã¾ãã
ã¤ã¾ããES6 moduleã¯ãã®importã¨exportãã¼ã¯ã¼ãã«ä¾åãã¦ãã¾ãã
æåã«ãJavaScriptãã¡ã¤ã«ãmoduleã«å¤æããæ¹æ³ãç¥ããã¨ãä¸å¯æ¬ ã§ãã
ä¾ãè¦ã¦ããã¾ãããã
ã¾ããmoduleã使ç¨ããã«ã¯ãtype屿§ã使ç¨ãã¦ã¹ã¯ãªãããã¢ã¸ã¥ã¼ã«ã§ãããã¨ãæå®ããå¿
è¦ãããã¾ãã
<!-- index.html --> <!DOCTYPE html> <html lang="ja"> <head> <title>modules test</title> <script type="module" src="./module-main.js"></script> </head> <body></body> </html>
ãã®type="module"屿§ã使ç¨ãã¦ãé常㮠JavaScriptãã¡ã¤ã«ã ES moduleãã¡ã¤ã«ã«å¤æãã¾ãã
ã¾ããã³ã³ãã¥ã¼ã¿ã¼ã¯ãã¢ã¸ã¥ã¼ã«<script>ãåç
§ããããã«ä½¿ç¨ããã¿ã°ã®æ°ã«é¢ä¿ãªããã¢ã¸ã¥ã¼ã«ã1度ã ãå®è¡ãã¾ãã
// func.js export const Greeting = (user) => { console.log(`Hi!! ${user}`); };
// module-main.js import { Greeting } from "./func.js"; Greeting("Taro"); // output: Hi!! Taro
func.jsãã¡ã¤ã«ãexportãã¼ã¯ã¼ãã使ç¨ãã¦ãã¾ãã
Greeting()ã¨ããååã®é¢æ°ãexportãã¦ãã¾ãã
module-main.jsã§Greeting()颿°ãimportãã¼ã¯ã¼ãã使ç¨ãã¦ãã¾ãã
ãã®å¾ãTaroã¨ããå
¥åã§ãã®é¢æ°ãå®è¡ããã¨ãconsole.logãHi!! Taroã¨åºåããã¾ãã
module-main.jsãã¡ã¤ã«ã§ã¯Greeting()颿°ãå®ç¾©ãã¦ããªããã¨ããããã¾ãããfunc.jsãã¡ã¤ã«ããmodule-main.jsãã¡ã¤ã«ã«ã¤ã³ãã¼ãããã¦ããã®ã§ãã¢ã¯ã»ã¹ãã¦ä½¿ç¨ãå¯è½ã¨ãªã£ã¦ãã¾ãã
ES6 moduleãã¤ã³ãã¼ãããã³ã¨ã¯ã¹ãã¼ãããã«ã¯ããã¾ãã¾ãªæ¹æ³ãããã¾ãã
ã¨ã¯ã¹ãã¼ãã«ã¯ãååä»ãã¨defaultãã¼ã¯ã¼ãã®2ã¤ã®ç¨®é¡ããããããããä½¿ãæ¹ã®ç¨éãç°ãªãã¾ãã
å¿ è¦ã«å¿ãã¦ä½¿ç¨ãå¯è½ã§ãã
ES6 ã¢ã¸ã¥ã¼ã«ãURLããèªã¿è¾¼ããã¨ãã§ãã¾ã
ä¸è¨ã§ã確èªãã¦ã¿ã¦ä¸ããã
See the Pen JavaScript ES6 module export by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
See the Pen JavaScript ES6 module import by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ES moduleã¯ãhttp://ãhttps://ã®URLãéãã¦ã®ã¿åä½ããfile://ã®ãããªãã¼ã«ã«ãªURLã§ã¯åä½ãã¾ããã
ãã®ããããã©ã¦ã¶ã¯CORSããªã·ã¼ã¨ã©ã¼ãçºçããã¾ãã
HTMLãã¡ã¤ã«ã«2ã¤ã®ES moduleãå«ã¾ãã¦ããå ´åãããã¥ã¡ã³ããèªã¿è¾¼ãéã«ã¯http://ã¹ãã¼ã ã使ç¨ããå¿
è¦ãããã¾ãã
http://ã¹ãã¼ã ã使ç¨ãã¦HTMLããã¥ã¡ã³ããèªã¿è¾¼ã2ã¤ã®ä¸è¬çãªæ¹æ³ã¯ã
ä¸è¨ã®éãã§ãã
ã»ãã¼ã«ã«ãµã¼ãã¼ã使ç¨ãã
ã»Module Bundlerã使ç¨ãã
VS Codeã¨ãã£ã¿ã使ç¨ãã¦ããå ´åãæ¡å¼µæ©è½ã®Live Serverãã¤ã³ã¹ãã¼ã«ããHTMLãã¡ã¤ã«ãéããã¨ãã§ãã¾ãã
ãã ããInternet Explorer 11ã§ã¯ES moduleããµãã¼ãããã¦ããªãããããã³ãã©ã¼ã使ç¨ããå¿ è¦ãããã¾ãã
以ä¸ã®ããã«ãES moduleã¯ãã¼ã«ã«URLã§åä½ããªããããhttp://ã¹ãã¼ã ã使ç¨ãã¦ããã¥ã¡ã³ããèªã¿è¾¼ãå¿
è¦ãããã¾ãã
ãã¼ã«ã«ãµã¼ãã¼ã使ç¨ãããããã³ãã©ã¼ã使ç¨ãããã¨ãä¸è¬çãªè§£æ±ºçã¨ãªãã¾ãã
ãã ããInternet Explorer 11ã§ã¯ãã³ãã©ã¼ãå¿ è¦ã¨ãªããããæ³¨æãå¿ è¦ã§ãã
ååä»ãã¨ã¯ã¹ãã¼ã
ååä»ãã¨ã¯ã¹ãã¼ãã§ã¯2ã¤ã®æ¹æ³ã§ä½æã§ãã¾ãã
åå¥ã¾ãã¯ä¸é¨ã«ã¾ã¨ãã¦ã¤ã³ã©ã¤ã³åãã¾ãã
ã» åå¥ã®ã¨ã¯ã¹ãã¼ã
// func.js export const Greeting = (user) => { document.body.innerHTML = (`Hi!! ${user}`); }; export const name = "Hanako,"; export const age = 30;
ããã¯ãåè¿°ã§å¦ãã æ¹æ³ã§ãã
以åã¨åæ§ã«ã¤ã³ãã¼ããã¾ãã
// module-main.js import { Greeting, name, age } from "./func.js"; Greeting("Taro, " + name + age);
ã» ä¸é¨ã«ã¾ã¨ãã¦ã¨ã¯ã¹ãã¼ã
ã¤ã³ãã¼ããããã®ãããããããå ´åã¯ããã¹ã¦ããªãã¸ã§ã¯ãã¨ãã¦ã¤ã³ãã¼ãã§ãã¾ãã
// func.js const Greeting = (user) => { document.body.innerHTML = (`Hi!! ${user}`); }; let person = "Taro, "; let personArray = ["dev.K", "Hanako", "Michael"]; // ãªã¹ãã«ãã䏿¬ã§ã¨ã¯ã¹ãã¼ã export { Greeting, person, personArray };
// module-main.js import { Greeting,person,personArray } from "./func.js"; Greeting("Hello, " + person + personArray);
import {...}ã®ããã«ä¸æ¬å¼§ã§ã¤ã³ãã¼ãããããã®ã§ãªã¹ããç¶ãããããã¤ã³ãã¼ãã§ãã¾ãã
See the Pen JavaScript ES6 module ã¾ã¨ãã¦export by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
See the Pen JavaScript ES6 module ã¾ã¨ãã¦import by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ååä»ãã¨ã¯ã¹ãã¼ãã®å ´åã¯ãå¥ã®ååã使ç¨ãã¦ãã¯ã©ã¹ã夿°ãªã©ãã¤ã³ãã¼ããããã¨ãã§ãã¾ãã
ãã¨ãã°ãasãã¼ã¯ã¼ãã使ç¨ãã¦ã person夿°ãå¥ã®ååuserã§ã¤ã³ãã¼ãå¯è½ã§ãã
// func.js const Greeting = (user) => { document.body.innerHTML = (`Hi!! ${user}`); }; let person = "Taro"; export { Greeting, person };
// module-main.js import { Greeting, person as user } from "./func.js"; Greeting("Taro"); // Hi!! Taro console.log(user); // Taro
åå空éã®ã¤ã³ãã¼ã
JavaScriptããã³TypeScriptã³ã¼ããmoduleã«ç·¨æãã¦ããå ´åãããæç¹ã§ãimportãã¨ãexportãã®å½åæ¹æ³ãæ¤è¨ããå¿ è¦ãããã¾ãã
ååã«å«ã¾ããæ å ±ãå°ãªãããã¾ãã¯å¤ãããã¨ãããã¨ã§ãã
åè ã¯ååã®ç«¶åã«ã¤ãªãããå¾è ã¯é常ã«é·ãååã«ã¤ãªããã¾ãã
åå空éã¤ã³ãã¼ãã¯ãããæ¯æ´ããããã«è¨è¨ããã¦ãã¾ãããååä»ãã¤ã³ãã¼ãã¨æ¯è¼ããã¨ããã¤ãã®æ¬ ç¹ãããã¾ãã
åã¤ã³ãã¼ãã®ååãæå®ããã«ãç¹å®ã®ã¢ã¸ã¥ã¼ã«ãããã¹ã¦ã®ã¨ã¯ã¹ãã¼ãå¯è½ãªã¢ã¤ãã ãã¤ã³ãã¼ããããã¨ãã¾ãã
ãã®ãããªå ´åã¯ã*æ§æã使ç¨ãã¦ãã¢ã¸ã¥ã¼ã« ãªãã¸ã§ã¯ããä»ãã¦ã¢ã¤ãã ãåãè¾¼ã¿ã¾ãã
ä¸è¨ã§ã¯ãåå空éãã¤ã³ãã¼ããã¾ãã
// func.js const Greeting = (user) => { document.body.innerHTML = (`Hi!! ${user}`); }; let person = "Hanako"; export { Greeting, person };
// module-main.js import * as func from "./func.js" func.Greeting("Taro"); // Hi!! Taro const div = document.createElement("div"); document.body.appendChild(div); div.innerHTML = (func.person) //Hanako
See the Pen JavaScript ES6 module åå空éã®import by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
See the Pen JavaScript ES6 module åå空éã®importèªã¿è¾¼ã¿å´ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ã¤ã³ãã¼ãå¾ã¯ãã¤ã³ãã¼ãããã¢ã¤ãã ããã®ã¾ã¾ä½¿ç¨ã§ãã¾ãã
ãã ããã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ãã®ååã使ç¨ãã¦ã¢ã¯ã»ã¹ããå¿ è¦ãããã¾ãã
export default
defaultãã¼ã¯ã¼ãã使ç¨ãã¦ãä»»æã®ã¨ã¯ã¹ãã¼ããããã©ã«ãã®ãã®ã«ãããã¨ãã§ãã¾ãã
é常ãéçºè ã¯ã³ã¼ããã¯ãªã¼ã³ã«ä¿ã¤ããã«moduleå ã«åä¸ã®ã¨ã¯ã¹ãã¼ããä¿æãã¾ãã
ãã®ãããªå ´åãåä¸ã®ã¨ã¯ã¹ãã¼ããããå ´åã¯ãdefaultã®ã¨ã¯ã¹ãã¼ãã使ç¨ã§ãã¾ãã
ã¤ã¾ããããã©ã«ãã®ã¨ã¯ã¹ãã¼ãã¯éçºè ãã³ã¼ããå¿å(ç¡å)ã§ã¨ã¯ã¹ãã¼ãããããã«ä½¿ç¨ããææ³ã§ãã
defaultã®ã¨ã¯ã¹ãã¼ããããå ´åã§ã¯ã䏿¬å¼§{ }ã使ç¨ããã«ç´æ¥ã¤ã³ãã¼ããã¾ãã
// func.js const Greeting = (user) => { document.body.innerHTML = (`Hi!! ${user}`); }; export default Greeting
// module-main.js // 䏿¬å¼§{}ã¯ä½¿ç¨ããªã import Greeting from "./func.js"; Greeting("Taro"); // output: Hi!! Taro
ä¸è¨ã®ããã«ãGreeting()ãã¤ã³ãã¼ãããéã«ã { Greeting }ã§ã¯ãªããç´æ¥Greetingã使ç¨ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
See the Pen JavaScript ES6 module default export by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
See the Pen JavaScript ES6 module export default ãèªã¿è¾¼ã¿ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
default ã¨ã¯ã¹ãã¼ãã§ã¯1ã¤ã®ãã¡ã¤ã«ã«å«ãããã¨ãã§ããæ¢å®ã®ã¨ã¯ã¹ãã¼ãã¯1ã¤ã ãã§ãã
ååä»ãã¨ã¯ã¹ãã¼ãããããããå¶éããã¾ãã
moduleã®ååããååä»ãã¨ã¯ã¹ãã¼ãã§ãããdefaultã¨ã¯ã¹ãã¼ãã§ãããã«åºã¥ãã¦ã2ã¤ã®æ¹æ³ã§moduleããã¡ã¤ã«ã«ã¤ã³ãã¼ãã§ãã¾ãã
ååä»ãã¨ã¯ã¹ãã¼ãã¯ã䏿¬å¼§{}ã使ç¨ãã¦æ§ç¯ãããï¼ã¤ã®æ¹æ³ããããã§ã¨ã¯ã¹ãã¼ããã¾ãã
defaultã®ã¨ã¯ã¹ãã¼ãã¯ããã§ã¯ããã¾ããã
ã¾ãã¯ãä¸è¨ã®ã³ã¼ããæ¬¡ã®ããã«æ¸ãæãããã¨ãã§ãã¾ãã
// func.js export default `Hi!! ${user}`;
ããã©ã«ãã®ã¨ã¯ã¹ãã¼ãææ³ã使ç¨ãã¦ã颿°ã夿°ãæååãã¯ã©ã¹ãã¾ãã¯ãªãã¸ã§ã¯ããªãã©ã«ãå ±æã§ãããã¨ã«æ³¨æãã¦ãã ããã
ãã ããexport defaultãã¼ã¯ã¼ãã varãletãconstãã¼ã¯ã¼ãã®åã«ä»ãããã¨ã¯ã§ãã¾ããã
// func.js export default const ⦠// âï¸
Node.jsã§ES6 module
Node.jsã¯v16以éãESMï¼ECMAScript Modulesï¼ã®ãµãã¼ããããã©ã«ãã§æä¾ãã¦ãã¾ãã
ESã¢ã¸ã¥ã¼ã«ã¯ç¾å¨å®å®ãã¦ãããæ¬çªç°å¢ã§ä½¿ç¨ããæºåãã§ãã¦ããã¨èãããã¦ãã¾ãããCommonJSã¢ã¸ã¥ã¼ã«ã¨ES6ã¢ã¸ã¥ã¼ã«ã®ä¸¡æ¹ã«ç°ãªãã¢ã¸ã¥ã¼ã«èªã¿è¾¼ã¿ã¡ã«ããºã ããããããæ··ä¹±ããå ´åãããã¾ãã
ES6ãæ°ããNode.jsããã¸ã§ã¯ãã§ä½¿ç¨ããã®ã¯é常ã«ç°¡åã§ãã
2ã¤ã®ãªãã·ã§ã³ãããã¾ãã
1ã¤ã¯ããã¡ã¤ã«ã®æ¡å¼µåã.mjsã«å¤æ´ãããã¨ã§ãã
ESã¢ã¸ã¥ã¼ã«ã§ã¯ããã¡ã¤ã«ã¤ã³ãã¼ãæã«å¸¸ã«æ¡å¼µåãæå®ããå¿ è¦ããããããããã¯éè¦ã§ãã
Node.jsã¯ãã¡ã¤ã«æ¡å¼µåã«ãã£ã¦CommonJSã¢ã¸ã¥ã¼ã«ã¨ESã¢ã¸ã¥ã¼ã«ãåºå¥ããããã.jsã®æ¡å¼µåã¯CommonJSã¢ã¸ã¥ã¼ã«ã¨ãã¦æ±ããã.mjsã®æ¡å¼µåã¯ESã¢ã¸ã¥ã¼ã«ã¨ãã¦æ±ããã¾ãã
2ã¤ç®ã®æ¹æ³ã¯ããpackages.jsonããã¡ã¤ã«ãä¿®æ£ãã¦ã"type": "module"ãå«ãããã¨ã§ãã
{
"name": "my-package",
"type": "module",
"dependencies": {
"..."
}
}
ããã«ãããNode.jsã¯ESã¢ã¸ã¥ã¼ã«ã¨ãã¦æ±ããã¨ãã§ãã¾ãã
ããã±ã¼ã¸ä½æè ã¯ãã¢ã¸ã¥ã¼ã«ã®ç¨®é¡ã«é¢ä¿ãªãããpackages.jsonããã¡ã¤ã«ã«ãã®ãã£ã¼ã«ãã常ã«å«ã¾ãã¦ãããã¨ã確èªããå¿ è¦ãããã¾ãã
ãããã£ã¦ãNode.jsã§ESã¢ã¸ã¥ã¼ã«ã使ç¨ããå ´åããããã®ãªãã·ã§ã³ãæ¤è¨ãã¦ãããã«å¿ãã¦è¨å®ã夿´ããå¿ è¦ãããã¾ãã
ããã«ãããESã¢ã¸ã¥ã¼ã«ã®å©ç¹ãæå¤§éã«æ´»ç¨ããNode.jsã¢ããªã±ã¼ã·ã§ã³ãããã¢ãã³ã§å¹ççã«ãããã¨ãã§ãã¾ãã
注æãã¹ãéè¦ãªæ©è½
ã» å³æ ¼ã¢ã¼ã
ããã©ã«ãã§ã¯ãã¢ã¸ã¥ã¼ã«ã¯å¸¸ã«use strictã使ç¨ãã¾ãã
宣è¨ããã¦ããªã夿°ã«å²ãå½ã¦ãã¨ãã¨ã©ã¼ãçºçãã¾ãã®ã§æ³¨æãã¦ä¸ããã
<script type="module"> x = 10; {/* error */} </script>
ã» ã¹ã³ã¼ã
ã¢ã¸ã¥ã¼ã«ã¯ãä»ã®ã¢ã¸ã¥ã¼ã«ã®æä¸ä½ã®å¤æ°ã¨é¢æ°ã«ã¢ã¯ã»ã¹ã§ãã¾ããã
ããã¯ã¢ã¸ã¥ã¼ã«ã®ã¹ã³ã¼ãåé¡ã§ãã
<script type="module"> {/*personã¯ãã®ã¢ã¸ã¥ã¼ã«å ã®ã¿ã¨ãªã */} let person = "Taro"; </script> <script type="module"> console.log(person); {/* Error: person is not defined */} </script>
ã» thisã¯å®ç¾©ããã¾ããã
ã¤ã¾ãã¢ã¸ã¥ã¼ã«ã§ã¯ããããã¬ãã«ã§ã¯thisã¯undefined(æªå®ç¾©)ã§ãã
<script> alert(this); {/* global object */} </script> <script type="module"> alert(this); {/* undefined */} </script>
ES6 moduleã®å©ç¹
ã» ä¿å®æ§
ã³ã¼ããåå²ããã¦æ´çããã¦ããã°ãä¿å®ã容æã«ãªãã¾ãã
ã¾ããmoduleã¯å¸¸ã«ç¬ç«ãã¦æ¹åã§ããããã«ãå¯è½ãªéãç¬ç«ããããã¨ãç®æãã¦ãã¾ãã
ã¾ããmoduleã夿´ãã¦ããã³ã¼ããã¼ã¹ããã¾ã夿´ããå¿ è¦ã¯ããã¾ããã
ã» åå©ç¨æ§
moduleã®å©ããåãã¦ãã³ã¼ããä½åº¦ãåå©ç¨ãå¯è½ã§ãã
ãã¡ã¤ã«ããexportããã ãã§ãããã¸ã§ã¯ãå ¨ä½ã®ä»ã®ãã¹ã¦ã®ãã¡ã¤ã«ãimportãã¦ä½¿ç¨ã§ãã¾ãã
ã» å ±ææ§
moduleã¯ç¬ç«ããã¦ä»ã®éçºè ã¨å ±æã§ããããã«ãããã¨ãç®çã¨ãã¦ãã¾ããããã¸ã§ã¯ãã«importãã¦ä½¿ç¨ãããã¨ãã§ãã¾ãã
ããã®æå¤§ã®ä¾ã®1ã¤ãnpmã¨ãªãã¾ãã
npmã®å©ããåãã¦ãä»ã®éçºè ãå ±æããããã±ã¼ã¸ã§ãããã¢ã¸ã¥ã¼ã«ã«å¿ è¦ãªãã¹ã¦ã®ãã¡ã¤ã«ãå«ãããã±ã¼ã¸ãã¤ã³ãã¼ããã¦ãããã¸ã§ã¯ãã§ä½¿ç¨ãå ±æãå¯è½ã§ãã
æå¾ã«
JavaScriptã§ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ãé¸ã¶éã«ã¯ãCommonJSã¨ES6ã¢ã¸ã¥ã¼ã«ã®ã©ã¡ããé¸ã¶ã¹ããè¿·ããã¨ãããããããã¾ããããããããã®ç¶æ³ã«å¿ãã¦ä½¿ãåãããã¨ã大åã§ãã
æ°ããããã¸ã§ã¯ããéå§ããå ´åã¯ãES6ã¢ã¸ã¥ã¼ã«ã使ç¨ãããã¨ããããããã¾ãã
ES6ã¢ã¸ã¥ã¼ã«ã¯ãé«éã§ãããã¢ã¸ã¥ã¼ã«ã1åããåæåãããªããããããã©ã¼ãã³ã¹ãåä¸ãã¾ãã
ã¾ããããªã¼ã·ã§ã¤ãã³ã°ããµãã¼ããã¦ãããããæçµåºåã®ã³ã¼ããå°ãããªãã¾ãã
ããã«ãã³ã¼ããããã¯ãªã¼ã³ã§ä½¿ããããããææ°ã®JavaScriptæ©è½ã§ãããã¾ãã
䏿¹ãæ¢åã®ããã¸ã§ã¯ãã«CommonJSã使ã£ã¦ããå ´åã¯ãå¼ãç¶ãããã使ããã¨ãã§ãã¾ãã
CommonJSã¯ãNode.jsã«çµã¿è¾¼ã¾ãã¦ãããæ¢ã«å¤ãã®ããã¸ã§ã¯ãã§ä½¿ããã¦ãããããã¨ã³ã·ã¹ãã ã«ããã¦åºãåãå ¥ãããã¦ãã¾ãã
ã©ã¡ããé¸ãã§ããééãã§ã¯ããã¾ããã
JavaScriptã®ã¨ã³ã·ã¹ãã ã¯ã夿§æ§ãåãå ¥ãããã¨ãã§ãããããããããã®ç¶æ³ã«å¿ãã¦ä½¿ãåãããã¨ã大åã§ãã
ããããæ°ããããã¸ã§ã¯ããå§ããå ´åã«ã¯ãES6ã¢ã¸ã¥ã¼ã«ã使ããã¨ããå§ããã¾ãã
以ä¸ãç§ã®ã¢ããã¤ã¹ã§ãã
æå¾ã¾ã§èªãã§é ããããã¨ããããã¾ãã
ãã®è¨äºãå½¹ã«ç«ã£ãå ´åã¯ãä»ã®äººã«ãå ±æãã¦ããã ããã¨å¹¸ãã§ãã