Moon.jsã©ã€ãã©ãª
Moon.jsã¯ãé«éã§æ©èœçãªã€ã³ã¿ãŒãã§ã€ã¹ãéçºããããã®æå°éã®JavaScriptã©ã€ãã©ãªã§ãããµã€ãºãæ¯èŒçå°ãããããããªãã³ã³ãã¯ããªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããã©ã€ãã©ãªã¯éåžžã«é«æ§èœã§ã
Moon.jsã¯ãã€ã³ã¿ãŒãã§ã€ã¹èšèšã«ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãããŒããæ¡çšããŠããŸãããã³ãã¬ãŒãã¯ãã³ã³ããŒãã³ãã®äœæã«äœ¿çšãããŸãããã®ã©ã€ãã©ãªã¯Vue.jsãšéåžžã«ãã䌌ãŠããŸãã
Moon.jsã®åŒ·ã¿
- Moon.jsã¯ã³ã³ãã¯ããªãµã€ãºã§ãïŒçž®å°ããã³å§çž®ãããšçŽ2 KBã«ãªããŸãïŒãããã¯ãReactãAngularãªã©ã®ä»ã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã®ãµã€ãºãããå°ããã§ãã
- ãã®ã©ã€ãã©ãªã¯ãé«éãªã¬ã³ããªã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ãç¹åŸŽã§ãã
- Moon.jsã¯ãæ©èœéçºææ³ã«åºã¥ãã©ã€ãã©ãªã§ããããã䜿çšããå Žåãããããããã©ã€ããŒãã«åºã¥ããã€ã³ã¿ãŒãã§ãŒã¹èšèšãžã®ã¢ãããŒãã䜿çšãããŸãã
ä»äºã®å§ãŸã
Moon.jsã©ã€ãã©ãªã¯ã2ã€ã®æ¹æ³ã§ãããžã§ã¯ãã«å«ããããšãã§ããŸãã1ã€ç®ã¯ãNPMããã€ã³ã¹ããŒã«ããããšã§ãã2ã€ç®ã¯ã䜿çšããäºå®ã®ããŒãžã«çŽæ¥æ¥ç¶ããããšã§ãã
ã©ã€ãã©ãªã®NPMããŒãžã§ã³ã䜿çšããå Žåã¯ãæåã«ããã±ãŒãž
moon-cli
ãã³ãã³ãã©ã€ã³ããŒã«ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
$ npm i moon-cli -g
ãã®äŸã§ã¯ããã®ããŒã«ã¯ã°ããŒãã«ã«ã€ã³ã¹ããŒã«ãããŠãããä»»æã®ãã£ã¬ã¯ããªããåŒã³åºãããšãã§ããŸãã
Moon.jsã«åºã¥ããŠãããžã§ã¯ããäœæããã«ã¯ã次ã®ã³ãã³ããå®è¡ã§ããŸãã
$ moon create moon-prj
ãã®ã³ãã³ãã¯ããã©ã«ããŒã«æ°ãããããžã§ã¯ããäœæããŸã
moon-prj
ããããžã§ã¯ãã®äœæãå®äºãããšãå°æ¥ã®ã¢ããªã±ãŒã·ã§ã³ã®åºç€ãèªç±ã«äœ¿çšã§ããããã«ãªããŸãã
Moon.jsã䜿çšããããã®2çªç®ã®ãªãã·ã§ã³ã¯ãMoon.jsã䜿çšããäºå®ã®ããŒãžã«æ¥ç¶ããããšã§ããã©ã€ãã©ãªã«ã¯ã
moon-browser
æ¥ç¶å
ã®ããŒãžã§ãã®æ©èœãçŽæ¥äœ¿çšã§ããã¢ãžã¥ãŒã«ããããŸãã
ãããã£ãŠãã©ã€ãã©ãªãããŒãžã«æ¥ç¶ããã«ã¯ã次ã®2ã€ã®ã¿ã°ãããŒãžã«å«ããå¿ èŠããããŸãã
<script src="https://unpkg.com/moon"></script>
<script src="https://unpkg.com/moon-browser"></script>
ã芧ã®ãšããã察å¿ããã¹ã¯ãªããã¯unpkgCDNããããŒããããŸããæåã®ã¿ã°ã¯ã¡ã€ã³ã©ã€ãã©ãªãã€ã³ããŒãããŸãã2çªç®ã¯ã©ã€ãã©ãª
moon-browser
ã§ãã圌女ã¯ãMoon.jsãã³ãã¬ãŒããã³ã³ãã€ã«ãããã©ãŠã¶ãŒã§ã®è¡šç€ºã«é©ãã圢åŒã«å€æãã責任ããããŸãã
ããã§ãããŒãžã§Moon.jsæ§æã䜿çšããã«ã¯
<script>
ãå±æ§ãtype
ãšããŠèšå®ããããšãå¿ããã«ãã¿ã°ã«ããããå«ããå¿
èŠããããŸãtext/moon
ã
<!-- -->
<script src="./main-script.js" type="text/moon"></script>
<!-- , -->
<script type="text/moon">
...
</script>
Moon.jsã¢ããªã±ãŒã·ã§ã³ãããŒãžã«æ¥ç¶ãã
Moon.jsã¯ãåäžããŒãžã¢ããªã±ãŒã·ã§ã³ã®äœæã«äœ¿çšãããä»ã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãšåæ§ã«ãç¹å®ã®ããŒãžèŠçŽ ã«æ¥ç¶ããŸããéåžžãèŠçŽ ã¯Moon.jsã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã®åœ¹å²ãæãããŸã
<div>
ã
<div id="root"></div>
Moon.jsã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãèŠçŽ ã§ããåæ§ã®èŠçŽ ã¯
index.html
ããããžã§ã¯ããžã®ãšã³ããªãã€ã³ãã§ãããã¡ã€ã«ã®ã³ãŒãã«é
眮ãããŸãã
ãã©ã€ããŒã¯ãMoon.jsã¢ããªã±ãŒã·ã§ã³ããã®èŠçŽ ã«æ¥ç¶ããããã«äœ¿çšãããŸã
view
ïŒä»¥äžã§ã¯ããã©ã€ããŒã«ã€ããŠè©³ãã説æããŸãïŒã
Moon.use({
view: Moon.view.driver("#root")
})
ãã®æ§æã¯ãã¢ããªã±ãŒã·ã§ã³ãèå¥åãæã€èŠçŽ ã«æ¥ç¶ããå¿ èŠãããããšãã©ã€ãã©ãªã«éç¥ããŸã
root
ãå¿
èŠã«å¿ããŠãDOMãæäœããããã«èšèšããããã©ãŠã¶APIã䜿çšããŠãã©ã€ãã©ãªã«åæ§ã®èŠçŽ ãæå®ã§ããŸãã
Moon.use({
view: Moon.view.driver(document.getElementById("root"))
})
次ã«ãMoon.jsã§ããŒã¿æäœãã©ã®ããã«ç·šæãããŠããããããã³ãã®ã©ã€ãã©ãªã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãèšè¿°ããããã®æ§æ
Moon.jsã€ã³ã¿ãŒãã§ãŒã¹ã説æããããã«ããã®åé¡ã解決ããããã«ç¹å¥ã«éçºãããMoon View LanguageïŒMVLïŒããã°ã©ãã³ã°èšèªã䜿çšãããŸããJSXã«äŒŒãŠããŸãããã®èšèªã¯ãèŠçŽ ãèšè¿°ãããããã®é¢ä¿ãã«ã¹ã¿ãã€ãºããããã«äœ¿çšãããŸãã次ã«äŸã瀺ããŸãã
<script type="text/moon">
function aView(data) {
return (
<div>Hi from Moon</div>
)
}
</script>
èŠçŽ ã®ã¬ã³ããªã³ã°ãæ åœããMoon.jsã®ãã®éšåãã
<div>
HTMLã«äŒŒãæ§ææ§é ã䜿çšããŠããããšã¯ç°¡åã«ããããŸãããã ãããããã®æ§é ã¯JavaScriptã³ãŒãã§äœ¿çšãããŸããMoon.jsã¯ãã®ãããªæ§æãéåžžã®JavaScriptã«ã³ã³ãã€ã«ããããããã©ãŠã¶ãŒã¯ãã®ãããªJavaScriptã³ãŒããå®è¡ã§ããŸããããå¿
é ã§ã¯ãããŸããã
ããŒã¿ã®æäœ
Moon.jsã¯ããã©ã€ããŒã®æŠå¿µã䜿çšããŠãèŠçŽ ã®èŠèŠçè¡šçŸãå¶åŸ¡ããããŒã¿ãæäœããŸããããã§ã¯ãããŒã¿ãæäœã§ããããã«ãããã©ã€ããŒãèŠãŠãããŸãã次ã®ã»ã¯ã·ã§ã³ã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãæäœããããã®ãã©ã€ããŒã«ã€ããŠèª¬æããŸãã
ããŒã¿ãã©ã€ãã¯ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ãä¿åããå¿ èŠãªå Žæã§ããŒã¿ã䜿çšã§ããããã«ãã圹å²ãæãããŸããã€ãŸãããã®ãã©ã€ããŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ã°ããŒãã«ç¶æ ãæ ŒçŽããŸãã
APIã䜿çšããŠãMoon.jsã¢ããªã±ãŒã·ã§ã³ã®åæããŒã¿ãèšå®ã§ããŸã
Moon.use
ã
Moon.use({
data: Moon.data.driver
})
察å¿ããé¢æ°ããç¶æ ãè¿ãããšã«ãããç¶æ ã«æ°ããããŒã¿ãæžã蟌ãããšãã§ããŸãã
Moon.run(({ data }) => {
console.log(data) // undefined
return {
data: "Nnamdi"
}
})
API
Moon.run
ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åãæ
åœããŸãããã®APIã«æž¡ãããã³ãŒã«ããã¯ã¯ãã°ããŒãã«ããŒã¿ãžã®åç
§ãåŒæ°ãšããŠåãåããŸãdata
ããã®é¢æ°ãåŒã³åºããæç¹ã§data
ã¯ãŸã äœããªãã®ã§ãconsole.log
ãã®äŸã®ã³ãã³ãã¯ãåºåããŸãundefined
ãå€ããã®
ããããã£
data
ãæã€ãªããžã§ã¯ããã³ãŒã«ããã¯ããè¿ããŸãNnamdi
ããã®ãªããžã§ã¯ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ°ããç¶æ
ãè¡šãããã®ããŒã¿ã¯ããåŒã³åºãä»ã®é¢æ°ã§äœ¿çšã§ããŸãdata
ã
Moon.jsã§ããŒã¿ãæäœããããã®ã¡ã«ããºã ã調ã¹ãŸãããããã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã®æäœã«ã€ããŠè©³ãã説æããŸãããã
ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®æäœ
Moon.jsã«ã¯ã
view
èŠçŽ ãäœæããŠDOMã«ããŠã³ãããããã®ãã©ã€ããŒããããŸãã
以äžã§ç¹°ãè¿ãããã³ãŒãã¹ããããããã§ã«èª¿ã¹ãŸãããããã§ã¯ã
<div>
ããŒã¹ã®Moon.jsèŠçŽ ãèŠçŽ ã«æ¥ç¶ãããŠããŸãã
Moon.use({
view: Moon.view.driver("#root")
})
ããã¯ãèŠçŽ ãããŠã³ããããå Žæã§ããé¢æ°ã¯ãå€ãèŠçŽ ã眮ãæããããšãã§ããèŠçŽ ãè¿ãããšãã§ããããã«ãªããŸããããããã¯
view
ã察å¿ããããŒã¿ãæžã蟌ãŸããããããã£ãå«ããªããžã§ã¯ãã®åœ¢åŒã§è¡šãããšãã§ããŸããã©ã€ãã©ãªã¯ãview
é¢æ°ã«ãã£ãŠè¿ããããªããžã§ã¯ãããããããã£å€ãååŸããèå¥åãèŠçŽ ã«æ¥ç¶ãããŠããèŠçŽ ã«æžã蟌ã¿ãŸãroot
ã
Moon.jsã¯ãä»®æ³DOMã®æŠå¿µãšãå€ãã€ã³ã¿ãŒãã§ã€ã¹ããŒãžã§ã³ãšæ°ããã€ã³ã¿ãŒãã§ã€ã¹ããŒãžã§ã³ãæ¯èŒããããã®åŒ·åãªã¢ã«ãŽãªãºã ã䜿çšããŠããŸããããã«ãããã©ã€ãã©ãªã¯DOMããã€æŽæ°ããããããã³DOMã®ã©ã®éšåãæŽæ°ããå¿ èŠããããã決å®ã§ããŸãã
function handleClick() {
return {};
}
Moon.run(() => ({
view: <button @click=handleClick>Click Me!</button>
}));
ããã§æž¡ã
Moon.run
ããã³ãŒã«ããã¯ã¯ããã¿ã³ãDOMã«åºåããŠããŸããããã¯ãé¢æ°ãããããã£ãæã€ãªããžã§ã¯ããè¿ãããã«çºçããŸãview
ããã®ããããã£ã«å²ãåœãŠãããå€ã¯DOMã«å
¥ããŸãã
ãã¿ã³ã«ã¯ã
click
é¢æ°ã§è¡šãããã€ãã³ããã³ãã©ãŒããããŸãhandleClick
ããã®é¢æ°ã¯ç©ºã®ãªããžã§ã¯ããè¿ãããããåŒã³åºããŠãDOMã¯å€æŽãããŸããã
èŠçŽ ã®äœæ
Moon.jsã¯ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãäœæããããã®ãã«ããŒé¢æ°ã®å€§èŠæš¡ãªã»ãããéçºè ã«æäŸããŸãããã®çµæãMoon.jsã€ã³ã¿ãŒãã§ãŒã¹èšè¿°èšèªã§ã¯ãªãã察å¿ããé¢æ°ã䜿çšããŠèŠçŽ ãäœæã§ããããšãããããŸããã
const { div, text, node, p } = Moon.view.m
Moon.jsã¯ãäœæããèŠçŽ ã®ååãšååãäžèŽããé¢æ°ããšã¯ã¹ããŒãããŸãããããã£ãŠããã®é¢æ°ã
div
䜿çšãããšãã¢ã€ãã ãäœæã§ããŸã<div>
ããã®é¢æ°text
ã¯ããã¹ãããŒããäœæããŸãããã®é¢æ°ãnode
䜿çšãããšãã«ã¹ã¿ã èŠçŽ ãäœæã§ããŸãããã®é¢æ°p
ã¯èŠçŽ ãäœæããŸã<p>
ãã芧ã®ãšããããããã®é¢æ°ã®ååã¯ãã®ç®çãæ確ã«ç€ºããŠããŸãã
èŠçŽ ãäœæããŸããã
<div>
ïŒ
const Div = div({});
ããããã£ãæã€ãªããžã§ã¯ãã察å¿ããé¢æ°ã«æž¡ãããšã«ãããèŠçŽ ã«å±æ§ãå²ãåœãŠãããšãã§ããŸãã
const Div = div({
class: "DivClass"
});
ããã§ã¯ãå€ãæžã蟌ãå¿ èŠããã
<div>
å±æ§ã®èŠçŽ ã«ã€ããŠèª¬æããŸããã
ããã¹ãèŠçŽ ãäœæããæ¹æ³ã¯æ¬¡ã®ãšããã§ããclass
DivClass
const Text = text({ data: "A text node" });
data
é¢æ°text
ã«æž¡ããããªããžã§ã¯ã
ã®ããããã£ã«ã¯ãèŠçŽ ã®ããã¹ããå«ãŸããŠããŸãã
ã«ã¹ã¿ã èŠçŽ ãäœæããŸãããïŒ
const CustomEl = node("custom-el");
ãã®èŠçŽ ã«ä»»æã®å±æ§ãå²ãåœãŠãã«ã¯ã次ã®ããã«ããŸãã
CustomEl({ "attr": "attr-value"})
éçº
ã·ã³ãã«ã䜿çšããæ§æã䜿çšããŠãã€ãã³ããã³ãã©ãŒãèŠçŽ ã«ã¢ã¿ããã§ããŸã
@
ã
function handleClick() {
return {};
}
Moon.run(() => ({
view: <button @click=handleClick>Click Me!</button>
}));
ãã®çµæãããã¹ãä»ãã®ãã¿ã³ãããŒãž
Click Me
ã«è¡šç€ºãããã¯ãªãã¯ãããšé¢æ°ãåŒã³åºããhandleClick
ãŸãã
ã³ã³ããŒãã³ã
Moon.jsã§ã¯ãé¢æ°ã¯ã³ã³ããŒãã³ãã§ããããã¯ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®èª¬æã§æ©èœã«ã€ããŠèšåã§ããããšãæå³ããŸããé¢æ°ãè¿ããã®ã¯èŠçŽ ã«å«ãŸããŸãã
次ã®ãããªé¢æ°ããããšããŸãã
function aView({ data }) {
return <div>A View</div>
}
ãã®é¢æ°ã¯ã
aView
ã¬ã³ããªã³ã°å¯èœãªèŠçŽ ãè¿ããŸãã
Moon.run(() => {
view: <div><aView /></div>
})
ãã®äŸã§ã¯ãé¢æ°åãèŠçŽ åãšããŠäœ¿çšãããŠããŸãããã®ã³ãŒããå®è¡ããçµæãé¢æ°ãè¿ããã®ãã¿ã°ã«é 眮ãããããšãããããŸãã
<div>
ãããããã¹ãŠãDOMã«ããå Žåã次ã®ãããªããŒã¯ã¢ããããããŸãã
<div>
<div>A View</div>
</div>
Moon.jsã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ã®éçº
ä»ã話ããããã¹ãŠããŸãšããããã«ãMoon.jsã§ç°¡åãªTODOã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããããã§ã¯ãMoon.jsã®éçºè ã«ãã£ãŠäœæããã察å¿ããäŸã䜿çšããŸãã
æ°ããã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ãç¿åŸããéã«ã¯ã圌ãã®å©ããåããŠå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããããšããå§ãããŸããããã«ãããåŠç¿ãã¹ããŒãã¢ããããåŠç¿ããããŒã«ã®æ©èœãç解ããã®ã«åœ¹ç«ã¡ãŸããæåã¯ãããã®åºç€ã«ã€ããŠè©±ããŸãããæéãçµã€ã«ã€ããŠãããè€éãªã¡ã«ããºã ã®ç解ãåŸãããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã¯æ¬¡ã®ããã«ãªããŸãã
ã¢ããªã±ãŒã·ã§ã³
ããŒãžãã®ããŒãžã«ã¯ãã¿ã€ãã«ããã£ãŒã«ãããã¿ã³ãããã³To Doãªã¹ããããããã£ãŒã«ãã«èª¬æãå ¥åããŠãã¿ã³ãã¯ãªãã¯ãããšæŽæ°ã§ããŸãã
ãã¡ã€ã«ãäœæããããšããå§ããŸããã
index.html
ãããã§ã¯ãMoon.jsãããŒãžã«çŽæ¥æ¥ç¶ããŸãã
<html>
<body>
<div id="root"></div>
</body>
<script src="https://unpkg.com/moon"></script>
<script src="https://unpkg.com/moon-browser"></script>
<!-- , -->
<script type="text/moon">
function viewTodos({data, view}) {
return (
<div>
<input type="text" value=data.todo @input=updateTodo/>
<button @click=createTodo>Create</button>
<ul children=(data.todos.map(todo =>
<li>{todo}</li>
))/>
</div>
)
}
function updateTodo({ data, view }) {
const dataNew = { ...data, todo: view.target.value };
return {
data: dataNew,
view: <viewTodos data=dataNew/>
}
}
function createTodo({ data }) {
const dataNew = {
todo: "",
todos: [...data.todos, data.todo]
};
return {
data: dataNew,
view: <viewTodos data=dataNew/>
}
}
<!-- data view -->
Moon.use({
data: Moon.data.driver,
view: Moon.view.driver("#root")
})
<!-- -->
Moon.run(() => {
data: [],
view: <viewTodos data=[]>
})
</script>
</html>
ãã®æ©èœ
viewTodos
ã¯ãæ°ããã±ãŒã¹ã«é¢ããæ
å ±ãå
¥åãããããããªã¹ãã«è¡šç€ºããããã«å¿
èŠãªé
ç®ã衚瀺ããŸãããã®åŒæ°ã¯ãdata
ãšview
ã
ãã®é¢æ°
createTodo
ã¯æ°ããã±ãŒã¹ãäœæããdata
ãããè¿ããªããžã§ã¯ãã®ããããã£ã«è¿ããŸãã
ãã®é¢æ°
updateTodo
ã¯ãæ°ããã±ãŒã¹ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã«æžã蟌ã¿ãŸãã
ã€ãã³ããã³ãã©ã«æ³šæããŠ
@click
ãš@input
ããã®é¢æ°ã§ãviewTodos
ã@input
é©åãªãã£ãŒã«ãã«ã±ãŒã¹ã説æããããã¹ããå
¥åãããšãã€ãã³ããããªã¬ãŒãããŸãããã®ã€ãã³ããåŠçããããšãé¢æ°ãåŒã³åºããupdateTodo
ãŸããåŒæ°view
ãã®é¢æ°ã§ã¯ãçºçããã€ãã³ããè¡šããŸããããã䜿çšããŠãDOMã«ã¢ã¯ã»ã¹ãããã£ãŒã«ãã«å
¥åãããããŒã¿ãååŸããŸãã次ã«ããã®ããŒã¿ã¯ããããã£ãšããŠç¶æ
ã«å
¥ããŸãtodo
ããã¿ã³ãã¯ãªãã¯ãããšã
ã€ãã³ã
@click
ãåŒã³åºãããŸããæ°ããããããšãªã¹ããèšé²ããŸãããã®é¢æ°ã¯ããã®åé¡ã解決ããããã«äœ¿çšãããŸãcreateTodo
ããã®é¢æ°ã¯ãç¶æ
ããããã£ã«ã¢ã¯ã»ã¹ãtodo
ãŠæ°ããããŒã¿ãããããã£ã«æžã蟌ã¿ãŸãtodos
ããã®åŸãview
è¿ããããªããžã§ã¯ãã®ããããã£ã§<viewTodos>
ã察å¿ããé¢æ°ã«ãã£ãŠè¡šãããèŠçŽ ãè¿ããŸãããã®èŠçŽ ã«ã¯data
ãå€ãæžã蟌ãŸãdataNew
ãŸãã
ãã
viewTodos
ã«ãããDOMãåã¬ã³ããªã³ã°ããã³æŽæ°ãããŸããããŒãžã«è¡šç€ºãããããããšãªã¹ãã«æ°ããã¿ã¹ã¯ãè¿œå ãããŸãã
ãã®ã¢ããªããã©ãŠã¶ã§å®è¡ããŠãè©ŠããŠã¿ãŠãã ããã
çµæ
Moon.jsã®åºæ¬ã«ã€ããŠèª¬æããŸãããã€ãŸããNPMããã€ã³ã¹ããŒã«ããŠããŒãžã«çŽæ¥æ¥ç¶ããããšã§ã©ã€ãã©ãªã䜿çšã§ãããšããããšã話ããŸããã次ã«ãã©ã€ãã©ãªã®å éšã¡ã«ããºã ã«ã€ããŠèª¬æããŸãããããŒã¿ã®æäœãã€ãã³ãã®åŠçãã³ã³ããŒãã³ãã®éçºã§ãã
Moon.jsã¯çŽ æŽãããã©ã€ãã©ãªã®ããã§ãããããŠãä»ã®å©ç¹ã«ã€ããŠã¯èšããªããŠããã³ã³ãã¯ããªãµã€ãºãªã®ã§æ°ã«å ¥ã£ãŠããŸãã
Moon.jsã䜿çšããããšããããŸããïŒ