
ãããã
ãã®èšäºã¯ãã³ã³ãããŒã«ããã«ã§äºåå®çŸ©ããããã©ã¡ãŒã¿ãŒã«åŸã£ãŠå
žåçãª
ã©ã³ãã£ã³ã°ããŒãžãæ§ç¯ããã·ã¹ãã ã®ã¢ããªã±ãŒã·ã§ã³ã§ããéçºçµéšã«åºã¥ããŠããŸãã ãã®èšäºã§ã¯ãMithrilãã¢ããªã±ãŒã·ã§ã³éçºã«éžã°ããçç±ããã®ç¹æ§ãå©ç¹ãããã³ãã®çŽ æŽãããããŒã«ã䜿çšããéã®èœãšãç©Žã«ã€ããŠèª¬æããŸãã
ãã®èšäºã«èå³ãããã®ã¯èª°ã§ããïŒ
ãã®èšäºã¯ãå
±éã®ã·ã§ã«ãããŒããããŠããªããç°¡åã§å®çšçãªã¢ãŒããã¯ãã£ãåãã䟿å©ãªãµããŒãããŒã«ãå¿
èŠãšããç¹å®ã®åé¡ã解決ããããã®ãã€ã¯ããã¬ãŒã ã¯ãŒã¯ã®äœ¿çšãæ€èšãã人ã«ãšã£ãŠèå³æ·±ããã®ã§ãã ããã«ããµã€ãºãå°ããã«ããããããããŒã«ãšããŠã®ãã¹ãªã«ã¯é«ãããã©ãŒãã³ã¹ãçºæ®ããŸããããã¯ãé©åãªéçºããŒã«ãéžæããéã®éèŠãªèŠçŽ ã§ããããŸãã é¢çœãïŒ
ãªãMitrhilãªã®ã 䜿çšããåæ©
ãã¹ãªã«èªäœã«ã€ããŠç°¡åã«èª¬æããŸã-å
容ãšå
容
Mithrilã¯MVCãã€ã¯ããã¬ãŒã ã¯ãŒã¯ã§ããããã®è¡šç€ºã¢ãã«ã¯ä»®æ³DOMã«åºã¥ããŠããã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ããŸãã¯ã³ã³ãã¯ãã ãè€éãªãŠã£ãžã§ããã¬ã³ããªã³ã°ããžãã¯ãè¿œå ããŸãã ãã¹ãªã«ã«ã¯ãå®å
šãªãã¬ãŒã ã¯ãŒã¯ãšåŒã¶ã®ã«å¿
èŠãªãã®ããã¹ãŠæã£ãŠããŸãã ã³ã³ãããŒã©ãŒãã¢ãã«ããŒã¿ã®ãã€ã³ãã£ã³ã°ãæäœããæ段ãã¬ã³ããªã³ã°ãæäœããããã®å®å
šãªã·ã¹ãã ãªã©ãããžãã¯ãæäœããã·ã¹ãã ããããŸãã ãŸããäœã¬ãã«ã§ãã³ã³ãã³ãã®åæç»ã®æéãšã¿ã€ãïŒè€éãªéåææäœãªã©ïŒãæ£ç¢ºã«å¶åŸ¡ããã³ã³ãã¯ãã«è¿œå ã§ãããŠãŒãã£ãªãã£ãæäŸããŸãã
- ã«ãŒã¿ãŒ -ã³ã³ããŒãã³ããããŒãžãšããŠãã©ãŠã¶ã®ç¹å®ã®ã¢ãã¬ã¹ã«ãã€ã³ãã§ããŸãã
- WebãµãŒãã¹ -httpïŒsïŒçµç±ã§ãªã³ã©ã€ã³ããŒã¿ãªã¯ãšã¹ããæäœã§ããããã«ããã¡ãœããããã¬ãŒã ã¯ãŒã¯æ©èœã®é©å¿åäœãçµã¿èŸŒãŸããŠããŸãã
ããããã¹ãŠã®ã³ã³ããŒãã³ããšã³ã³ããŒãã³ãã䜿çšãããšãã³ãŒãã®äœæäžã«ããŒãºã®90ïŒ
ãã«ããŒããã¢ããªã±ãŒã·ã§ã³ãmithrilã§éçºã§ããŸãã
ãªããã¹ãªã«ãéžãã ã®ã§ããïŒ
ã¢ãŒããã¯ãã£ã®éçºäžãã·ã¹ãã èªäœã«ããŒã¿ã®è² è·ãæå°éã§ããããã¹ãŠãå
žåçãªãã®ã§ããããã¹ãŠã®èŠæ±ãåŠçãã³ãã¬ãŒãã®åœ¢åŒã§ã®è¿œå ã®ãªãŒããŒã¬ã€ãåºåãããã³å¿çãåŸ
æ©ããŠããã¯ã©ã€ã¢ã³ããèæ
®ããŠãã¯ã©ã€ã¢ã³ããšãµãŒããŒçµç¹ã®éã§éžæããŸãã-ãªããªããç§ãã¡ã®æ代ã«ã¯ãã³ã³ãã³ãã®ããŠã³ããŒãé床ãšãç¬æã®ãèªã¿ããããéåžžã«éèŠã§ãããæ©åšã«äœåãªè² è·ããããããã§ãã
ãã®ãããããã«ãµãŒããŒå®è£
ãªãã·ã§ã³ãç Žæ£ããå°éã®è¡æ¶²ïŒããã³äœåãªäœ¿çšæžã¿ç¥çµçŽ°èïŒã§ããŸããŸãªã¿ã¹ã¯ã解決ã§ããã¯ã©ã€ã¢ã³ãåŽããŒã«ã®ãªãã·ã§ã³ãæ€èšãå§ããŸããã
- ããŒã«ã®ããã©ãŒãã³ã¹ã
- 䟿å©ãªããŒã¿ç·šæã
- æç»ã®ç®¡çãšé床ã
- ãã©ãŠã¶ãµããŒãïŒIE9以éãã¢ãã€ã«ãã©ãŠã¶ã
- åé·ãªãé©çšããããçžäºäœçšã®ãªã䟿å©ã§å®çšçãªããžãã¯ç®¡ç
- éå°ãªæ©èœæ§ã䌎ããªããããŒã«ã®æ倧ã®ã³ã³ãã¯ããã
- åã®å£°æããæ¥ã-楜åšã®æ倧ãããã©ãã
- ããŒã«ã«æ
£ããŠããªãæ°ããéçºè
ã®éçºãžã®è¿
éãªæ¥ç¶ã
- SEOãèæ
®ããŠãå°æ¥çã«é©å¿ããèœåã
- ã³ã³ããŒãã³ãã«äŸåããªãéçº-ã¢ããªã·ãã¯ãœãªã¥ãŒã·ã§ã³ãå¿
èŠãšããŸããã
æ€èšäžã®ããŒã«ã®äžã§ã
Angular ã
Angular Light ã
Backbone ã
Knockout ã
Reactãªã©ã®å€ãã®ã©ã€ãã©ãªã調ã¹ãŸããã ãŸããæ¢è£œã®ãã¬ãŒã ã¯ãŒã¯ãšè€éãªããŒã«ã ãã§ãªããåå¥ã®ãã³ãã¬ãŒãã·ã¹ãã ãããŒã¿ã©ã€ãã©ãªãªã©ãæ€èšããŸããã
ä»ã®ããŒã«ããµããã«ãããçç±
åæäžã«ãããã®ãªãã·ã§ã³ããã¹ãŠç Žæ£ãããã®ã¯ãªãã§ããïŒ ä»¥äžã¯ããããã®ããŒã«ãéžæã«é¢é£ããªãã£ããªã¹ãã®ç°¡åãªæŠèŠã§ãã
Angularãš
Reactã¯åé·æ§ããããããããã«ã¯é©ã
ãŠããŸãããæ©èœãšçµç¹ã®99ïŒ
ãããã»ã¹ã§å¿
èŠãªãããã§ãã
ããã¯ããŒã³ -é床ã«åé·ãªããžãã¯ã®ããã«æé€ãããŸããããããã¯é ãæ代ã®ã¢ã¿ããºã ã§ããããã®éçºã«ããããã¹ãŠã®ã³ã³ãã³ãã®ã»ãŒçŽæ¥çãªå¶åŸ¡ãããã³äžè¬çã«æé»çãªããžãã¯æ§é ã®éžæãå¯èœã«ãªããŸããã
Knockoutã¯åªããã©ã€ãã©ãªã§ãããåã蟌ãŸããäžé£ã®æäœã«ã¯å€§ããããŸãããããã®å€ãããããæåã¯ãã³ãã¬ãŒãã§ã¬ã³ããªã³ã°ããããã®å€§éã®ã³ãŒãçšã«èšèšãããŠããŸãïŒããžãã¯ããã³ã¢ãã«ã®ããŒã¿ã«é¢é£ïŒã Backboneãšåæ§ã«ããžãã¯ã®å¶åŸ¡ã¯éåžžã«å
·äœçã§ãããããŒã¿ãšãã€ã³ãã£ã³ã°ãé©åã«æäœã§ããŸãã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®æ©èœã¯åé·ã§ããããã®ãªãã·ã§ã³ãæŸæ£ããããšã決å®ãããŸããã
Angular Lightã¯ããã³ãã¬ãŒãããé
延ããã£ã¬ã¯ãã£ãããã³ã³ã³ããŒãã³ããå«ãã宣èšãããåæ§ã®ããžãã¯ãæã€ãè§åºŠã®ãã€ã¯ãã¢ããã°ã§ãã è§åºŠããã®ãã£ã¬ã¯ãã£ãã®å
ã®ããžãã¯ãšåäœãããå€ãã¯æ®ã£ãŠããŸããããç°¡çŽ åãããŠããŸããé¡äŒŒãããã³ãã¬ãŒãã·ã¹ãã ãããªãŒãšãã£ã¬ã¯ãã£ãã®åæåãã¿ã°ãã¯ã©ã¹ãå±æ§ãããã³$ã¹ã³ãŒããã€ã³ãã£ã³ã°ã®é¡äŒŒæ§ã«ãã£ãŠæ¯èŒããã·ã¹ãã ã§ãã åªããããŒã«-ããããããªãå
·äœçã§æè»æ§ã®äœãã³ã³ããŒãã³ãæ§ç¯ããžãã¯ãåããŠããããã®æ£ç¢ºãªåäœãç解ããããšãæåã¯å°é£ã§ããã ãã®ãªãã·ã§ã³ã¯ãæåŸãŸã§ã¹ãã¢ã®ãŸãŸã§æ©èœããŠããŸããã
ãã¹ãªã«
mithrilãããŒã«ã®éžæãç®ã®åœããã«ãããšããããã¯ãã§ã«å®å
šãªæ©èœãåããã¢ããªã±ãŒã·ã§ã³ãæžãããã®äžé£ã®ããŒã«ã®éåžžã«æçããæåãããããžã§ã¯ãã§ããã ãã®ããŒã«ã«ã¯ãããã¯ããŒã³ãããã¯ã¢ãŠããªã©ã®ã¢ã¿ããºã ãé床ã®ãã³ãã¬ãŒãããžãã¯ã¯ãããŸããã§ãããå®éããã¹ãªã«ã¯DOMèŠçŽ ã®å°ããªã©ãããŒã§ããããã®ã»ãšãã©ã¯DOMã¡ãœããã«çŽæ¥çµã³ä»ããããä»®æ³DOMã®åœ¢ã§å°ããªç ç³ãè¿œå ããããªããžã§ã¯ãã«æ¥ç¶ãããŠããŸããã³ã³ãããŒã©ãŒããžãã¯ã åæã«ãããŒã¿ãã€ã³ãã£ã³ã°ãšéå°ãªéšåã®ã»ãšãã©ãããžãã¯ããé€å€ãããŸãããããã«ãããå®è£
ã®æè»æ§ãæ倧éã«é«ãŸããŸããã 圌ã¯ã容éã®ããæ¡åŒµå¯èœãªã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«å¿
èŠãªãã¹ãŠã®ããããªãºã ãšå®çšæ§ãåéããŸããã Angular Lightãšã¯ç°ãªããããéæãªã³ã³ããŒãã³ãããžãã¯ããããããå®çšçã§çµ±äžãããŠããŸããããã«ãããã³ãŒãã®ä¿å®ã容æã«ãªããã¢ãŒããã¯ãã£ã®åŸ®åŠãªåé¡ãçªç¶çºçããããšãèããªããªããŸããã
çŸããããã-ç ç³ã䟿å©ãããŠãŒãã£ãªãã£
æ¢å®ã§ã¯ãmithrilã§ã®ã³ã³ããŒãã³ãã®éçºã¯ãéçºã®å©äŸ¿æ§ãé«ããããã«ã絶察ã«äœãèŠå®ããªãããã»ã¹ã§ããããŸããŸãªããŒã«ãã©ã€ãã©ãªã奜ã¿ã«åãããŠäœ¿çšââã§ããŸãããmithrilã§ã¢ããªã±ãŒã·ã§ã³ã®éçºãéå§ãããã¹ãŠã®äººã«åœ¹ç«ã€åºç€ããããšæããŸãã
äžè¬çãªãã³ãããã³ãã¬ãŒããã¯ã©ã¹ãããã³OOP
ãã¿ãŒã³ããã©ã«ãã§ã¯ãReactã®ããã«Mithrilã§ã¯ãDOMèŠçŽ ã¯ãšãªãæ§ç¯ããããã®åçŽåã·ã¹ãã ã«ããããããããã³ãã¬ãŒãããŒãã®èšè¿°ãæŽçããã®ã¯ããªãäžäŸ¿ã§ãã
ãã®æ©èœã¯ãéåžžã®HTMLã®äœ¿çšã«æ
£ããŠããããã¹ãªã«ãã£ã¹ãã¬ã€ã¢ãŒããã¯ãã£ã®è€éãã«ç
©ããããããªãå Žåã«ç¹ã«æããããŸãã ããã«ã¯ç¹å¥ãªãã©ã³ã¹ãã©ãŒããŒããã
ãŸã-MSX ãããã³ãã®ã·ã§ã«
-Babelã³ã³ãã€ã©ãŒã«å¯Ÿããç§ã®æèŠã§ã¯æã䟿å©ãª
babel-plugin-mjsxãªã©ã§ãã
ããã«ãããReact JSXã§ããç¥ã£ãŠããåæ§ã®èšèšã䜿çšã§ããŸãã
<div class="container-class"> <h1 withattr="attr" onclick={ (event) => { /.../ } }>Header</h1> </div>
ç§ã®æèŠã§ã¯ããã®ãªãã·ã§ã³ïŒMSXïŒã¯ãã®ãããã§éåžžã«äŸ¿å©ã§ãã
gulp + browserify + babelify + msx ã
以äžã«äœ¿çšäŸã瀺ããŸãã
ã¯ã©ã¹ãšOOP2015幎ãES6ïŒ
ãŸãã¯ãã®æ¡åŒµãã©ããã·ã¥ã¬ãŒããŒãžã§ã³ES2015â ES7â ïŒããã³ES5ã«å€æããBabelã
Typescriptãªã©ã®ESLã³ã³ãã€ã©ãç¹ã«äººæ°ãåãå§ããŸãããå€ãã¯ãã¯ã©ã¹ããã³ã¬ãŒã¿ã®ãµããŒããªã©ãæ倧éã®æ©èœã䜿ãå§ããããšèããŠããŸããããã®ä»ã ãã§ã«ååšãããã¬ãŒã ã¯ãŒã¯ïŒããšãã°ã
Angular 2.0 ïŒã¯æ°ããçŸå®ã«é©å¿ãå§ããããšãã°
Aureliaã®ããã«ç»å ŽããŸããããããã£ãŠããã¹ãŠã®æ©èœã®äœ¿çšãããã³ãããã®æ©èœçšã®ããŒã«ã®æè»æ§ã¯ãå€ãã®éçºã®éèŠãªèŠçŽ ã«ãªããŸãã
ããã©ã«ãã§ã¯ãMithrilã¯ãã¢ãŒããã¯ãã£å
ã®ç¬ç«ããã³ã³ããŒãã³ãã§ããéåžžã®ãªããžã§ã¯ãå
ã«ç·šæãããŸããã¯ã©ã¹ãšããŠäœ¿çšããçµç¹ã®ç¹å¥ãªæ©èœã¯ãåãããããªãºã ã®çç±ã§å®è£
ãããŸããããããã¯ããªããžã§ã¯ãéçºãæ¡åŒµãŸãã¯é©å¿ã§ããªãããšãæå³ãããã®ã§ã¯ãããŸãã楜åšã
æãåçŽãªå Žåãã³ã³ããŒãã³ããªããžã§ã¯ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšããŠäœ¿çšããå¿
èŠããããŸã-ããšãã°ã次ã®ããã«ïŒ
class Component { constructor(opts) { this.opts = opts; this.controller = this.controller.bind(this); this.view = this.view.bind(this); } controller(props) { return { paramOne: this.opts.paramOne }; } view(ctrl, props, children) { return ( <button onclick={this.method} attr={ctrl.paramOne} /> ); } }; /* - */ m.mount(document.body, new Component({ paramOne: 'Hello!' }));
ããã¯ãMithrilã§ã¯ã©ã¹ã䜿çšããæãç°¡åãªæ¹æ³ã§ãããããã§ãçæ³çãªãªãã·ã§ã³ã§ã¯ãããŸãããããšãã°ãããã€ãã®æ©èœãèæ
®ãã䟡å€ããããŸããããšãã°ããã¹ãŠã®ããŒã¿ãã€ã³ã¹ã¿ã³ã¹ã«çµ¶å¯Ÿã«ä¿åããããããã
ãã¥ãŒã«ä¿åãããŠãããšä»®å®ãããšãå¹»æ³çãªãªã¹ã¯ã¯ãããŸããåŸç¶ã®åæç»äžã«ããŒã¿ã«å¥ããåãã-ãã®ãããããžãã¯ãšããŒã¿ã¯å¥ã
ã«ä¿æããæ¹ãããã åæã«ãã³ã³ãããŒã©ãŒã«ããŒã¿ãä¿åããŠæäœããããšãæåã®æ¹æ³ã§ã¯ãããŸãããããŒã¿ãã³ã³ããŒãã³ãéå±€ã®å¥¥æ·±ãã«è»¢éããå¿
èŠãããå Žåã¯ãäŸåããªãŒå
šäœãäœæããå¿
èŠããããŸãã
ããšãã°ãFlux Storeã¢ããªã±ãŒã·ã§ã³ãŸãã¯äœ¿çšããããã®ä»ã®ã¹ãã¬ãŒãžãæ§ç¯ãããšãã«äœ¿çšã§ããŸã-ãããŠãã³ã³ããŒãã³ãå
ã§é©å¿ããããšãã¢ã¯ãã£ãåãããã¿ãã®ã€ã³ããã¯ã¹ã®ããã«ãã€ã³ã¹ã¿ã³ã¹å
ã®ããŒã¿ã¹ãã¬ãŒãžãåŠçãããã³æœè±¡ã€ãã³ãæäœã®æ確ãªéå±€ãã§ããŸãããªã© Reactã®ããã«ãcomponentWillMountãcomponentDidMountãªã©ã䜿çšããŠã
ã¢ã¯ã·ã§ã³ã¢ã¯ã·ã§ã³ãã¬ã³ããªã³ã°ãã¬ã³ããªã³ã°ãããã«ã¯ã©ã€ãã«ãŒãã®å³èçãªå€èŠ³ã«ãã€ã³ãããããšãã§ããŸãã
建ç¯äžã®ç¹åŸŽãèœãšãç©Žãå人çãªã¡ã¢
æç»
Mithrilã¯Virtual DOMã«åºã¥ããŠãããããã¯ãã®é床ãšããã©ãŒãã³ã¹ãæäŸããç¹åŸŽçãªæ©èœã®1ã€ã§ãããæå°éã®ãã¬ãŒã ã¯ãŒã¯ã§ããããšãèæ
®ããŠ-ã¬ã³ããªã³ã°ã·ã¹ãã ã«ã¯ããã€ãã®æ©èœããããŸãã ã ããšãã°ãMithrilã§ã¯ãããšãã°Reactã§ã§ããããã«ãåäžã®ããŒããŸãã¯ã³ã³ããŒãã³ãã®åæç»ãä»ã®ãã¹ãŠã®ã³ã³ããŒãã³ããšã¯å¥åã«å¶åŸ¡ããããšã¯ã§ããŸããã ãããŠãããã¯ç解ã«ããã€ãã®å°é£ã課ããŸãããããã£ãŠãMithrilã§ã®åæç»ã®ä»çµã¿ãç解ããããšã¯äŸ¡å€ããããŸãã
ãŠãŒã¶ãŒã¢ã¯ã»ã¹ã§äœ¿çšå¯èœãªåæç»ã«ã¯2ã€ã®ã¿ã€ãããããŸãã
m.startComputation / m.endComputation-åæç»æã«ç¶æ
ãæŽçããããšãå¯èœã«ããã¡ãœãã-æåéã-ãããã¯VDOMããªãŒã®æåã®ã¹ãããã·ã§ããã®ã»ã°ã¡ã³ãã瀺ãã2çªç®ã®ã¹ãããã·ã§ããã¯äž¡æ¹ã®ã¹ãããã·ã§ãããæ¯èŒãããå€æŽãèŠã€ãã£ãåŸããããã圢æããããŒã¿ããã€ã³ãããšã«å€æŽããŸãã ããã¯ãããšãã°ãéåæããŒã¿ãããŒãããå Žåã«åœ¹ç«ã¡ãŸãããã®å Žåãæäœãéå§ããåã«æåã®ã¹ãããã·ã§ãããååŸããçµæãååŸããåŸã«æåŸã®ã¹ãããã·ã§ãããååŸããŸãã æ©èœã®ãã¡ãã¡ãœããã¯ç¹å®ã®ã³ã³ããŒãã³ãã§åŒã³åºãããå Žåã§ãããªãŒå
šäœãã°ããŒãã«ã«æ¯èŒãããããåæç»ãããªãŒå
ã®ä»ã®ã³ã³ããŒãã³ãã«åœ±é¿ãäžããªãããã«éçºæã«æ³šæããå¿
èŠããããŸãã ç°¡åãªäœ¿çšäŸã次ã«ç€ºããŸãã
function asyncGetAndRedraw() { m.startComputation(); SomeAsyncOperation({ ...args }).then(function promised(data) { setTarget = data; m.endComputation(); }); };
m.redrawã¯ããŒãã¬ã³ããªã³ã°çšã®ã¡ãœããã§ãããã®ã¡ãœãããåŒã³åºãããå Žåãæ¯èŒã¯è¡ãããŸãããã¡ãœããã¯ã³ã³ããŒãã³ãã®ããªãŒå
šäœãå®å
šã«åæç»ããŸããåæç»ãããšãã¯ã³ã³ããŒãã³ãã®æ¢åã®ç¶æ
ãèæ
®ããªãããããã®ã¡ãœããã«ã¯æ³šæãå¿
èŠã§ãã
ã³ã³ããŒãã³ãã§ãã¬ãŒã³HTMLã䜿çšãã
ããªãå±éºã§æšå¥šãããªãæäœã§ããããã³ãã¬ãŒãã®çŽç²ãªHTMLã®è¡ãæ¿å
¥ããå¿
èŠãããå Žåãããã
m.trustã¡ãœãããããã«åœ¹ç«ã¡ãŸãã䜿çšæ¹æ³ã
次ã«ç€ºããŸãã
m.render("body", [ m("div", m.trust("<p>Clean Html</p>")) ]);
çµè«ãšããŠ
ãã®çãèšäºã§ã¯ãWebã¢ããªã±ãŒã·ã§ã³ãéçºããéã«Mithrilãã€ã¯ããã¬ãŒã ã¯ãŒã¯ã«é¢å¿ã®ãããã®ããã®å©ç¹ãä»ã®ããŒã«ãšã®æ¯èŒåæïŒå人ã®è©äŸ¡ãšããŒãºïŒãããã³äžè¬çãªäººã
ã«ãããã®ãã¬ãŒã ã¯ãŒã¯ã®äœ¿çšã«é¢ããããã€ãã®ç ç³ãšã¡ã¢ã調ã¹ãŸããã äžèšã®ããšãããMithrilã¯ãããã©ãŒãã³ã¹ãšçžãŸã£ãŠãéçºã«ãããŠæ倧ã®å¹çãšç°¡æœããå¿
èŠãšããã³ã³ãã¯ãã§å€§å®¹éã®Webã¢ããªã±ãŒã·ã§ã³ïŒãŠã£ãžã§ãããªã©ïŒãæžãããšãäž»ãªç®çãšããŠããããšã匷調ãã䟡å€ããããšæããŸãã ãã ããã¢ãŒããã¯ãã£ãæ
éã«æ€èšããå Žåã¯ãå®è£
ãã¡ãœãããããã³ããã€ãã®ã¹ãŒããŒã¯ã©ã¹ãšãã³ã¬ãŒã¿ãã·ã§ã«ãšããŠè¿œå ããŸã-ãã®ããŒã«ã¯ã倧èŠæš¡ãªãããžã§ã¯ããWebã¢ããªã±ãŒã·ã§ã³ã倱æãããŸããã ãã®èšäºã«ã¯ããã¹ãªã«ã®äœ¿çšã«é¢ããç§ã®æèŠãšèŠè§£ãèšèŒãããŠããŸã-ãã®ã·ã¹ãã ã®äœ¿çšçµéšãããå ŽåããŸãã¯èªåã§çºèŠãã埮åŠãªç¹ãããå Žå-ãã¹ãªã«ã«ã€ããŠç¥ãããšã¯éåžžã«èå³æ·±ãããšã§ãã ãã®èšäºãèå³æ·±ããèªãã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãªãã·ã§ãã«
å
¬åŒãµã€ããGithubãã¬ãŒã ã¯ãŒã¯ããŒãžãã¹ãªã«ã®äœ¿çšã«é¢ããæçšãªèšäº