æéãçµã€ã«ã€ããŠãæ©åšãå®äŸ¡ã«ãªããã¯ã©ã€ã¢ã³ããäœæ¥ã®å€§éšåãè¡ããæ å ±ã®åä¿¡ãæ å ±ã®ä¿åããŸãã¯å®å šã§å¶åŸ¡ãããç°å¢ã§å®è¡ããã³ãã³ããäžããããã ãã«ãµãŒããŒãšéä¿¡ãããšãã«ãçŸåšã®ã¢ãã«ã«ãªããŸããã
ããŠãèããŠã¿ããšãåœæã¯ãã¹ãŠã®ãŠãŒã¶ãŒãããŒããŠã§ã¢ã«ãã£ãŠçããå¶éãããŠãããããéçºã容æã§ããã
æ®å¿µãªããïŒéçºè ã«ãšã£ãŠïŒããã®ã¢ãã«ã«ãã£ãŠèª²ããããå¶éããšã³ããŠãŒã¶ãŒã«ã¯ãŸã£ããåãå ¥ããããŸããã å¿çæ§ãé«ããé«éã§çŸãããœãããŠã§ã¢ãå¿ èŠã§ããããã¯ãå°ããªã¢ã¯ã·ã§ã³ããªã¢ãŒããµãŒããŒãžã®èŠæ±å¿çã«ã€ãªããç¶æ³ã§ã¯ã»ãšãã©äžå¯èœã§ãã
Webã€ã³ã¿ãŒãã§ã€ã¹ã®é²å
Webéçºã§ãåæ§ã®é²åãèŠãããŸãã ç§ãã¡ã¯ãã©ãã€ã ã·ããã®ç¶æ ã«ãããããã«å ãžé²ãã»ã©ãå€ããã©ãã€ã ã§æžãããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠã¯é£ãããªããŸãã å¿çæ§ããªãã代æ¿ç©ãçšæããŠãããšãã«å°ã察話æ§ãæäŸãããã®ã䜿çšããã®ã¯ãªãã§ããïŒ
UIã¢ãŒããã¯ãã£ã¯èšèšãéåžžã«é£ããåé¡ã§ããã倧äŒæ¥ãé·å¹Žã«ããã£ãŠãœãªã¥ãŒã·ã§ã³ã«æ°çŸäžãã«ãæè³ããŠãããšããŠãããããè¡ãããã®ãæ£ããæ¹æ³ããããããŸããã å€ãã®JavaScriptãMVCããã¬ãŒã ã¯ãŒã¯ïŒããã¯ãµãŒããŒMVCãã¬ãŒã ã¯ãŒã¯ãšã»ãŒåããããæªãçšèªã§ãïŒãéå»æ°å¹Žã«ããã£ãŠç»å ŽããŠãããéå»50幎ã®UIã¢ãŒããã¯ãã£ã®ã¢ã€ãã¢ãWebã«é©çšããæ¹æ³ãæ ¹æ¬çã«ç°ãªã£ãŠããŸãã
ãã¬ãŒã ã¯ãŒã¯ã®éžæ
å€ãã®ãã¬ãŒã ã¯ãŒã¯ãè©ŠããŸããããç°¡æœã«ããããã«ãæãäžè¬çãª4ã€ã®ããã¯ããŒã³ãEmberãKnockoutãAngularã«ã€ããŠèª¬æããŸãã
å§ããåã«ããããã¯ãã¹ãŠã人æ°ã«å€ããæ¬åœã«çŽ æŽããããããžã§ã¯ãã ãšèšããããšæããŸãã éçºã«ã¯ããã¹ãŠã®ç¶æ³ãšåé¡ã«é©ãããéã®åŒŸäžžãã®ãããªãã®ã¯ãªãããããã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ããããé·æãšçæããããŸãã
ç§ãã¡ã®ç¶æ³
ç£æ¥çšRailsã¢ããªã±ãŒã·ã§ã³ã«ã¯ïŒçŽïŒ25äžè¡ã®ã³ãŒãããããŸãã Railsãã¹ã«æ²¿ã£ãŠã»ãšãã©ã®æéãéãããŸããããããããå€ãã®ããšãåŠã³ãŸããã ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãéçŸå®çãªéã®ããžãã¹ããžãã¯ãå«ãŸããŠããŸãã ãããã£ãŠãã¹ã±ãŒã©ããªãã£ãšæè»æ§ã¯ããã¬ãŒã ã¯ãŒã¯ãéžæããéã®æéãšãªã2ã€ã®éèŠãªåºæºã§ããã
Ember.js
ããã¥ã¡ã³ããšYehuda KatzïŒwycatsïŒã«ããEmber.jsã«ã€ããŠã®è©±ã«åºã¥ããŠãããã¯åºæ¬çã«ã¯ã©ã€ã¢ã³ãåŽã§Railsãå®è¡ããããšããè©Šã¿ã§ãã
Emberã¯çŸåšå©çšå¯èœãªæãéå¿çãªãã¬ãŒã ã¯ãŒã¯ã§ããããã®åŒ·ã¿ã¯æããã§ãã å Žåã«ãã£ãŠã¯éžæè¢ã奪ãããéåžžã«äŸ¿å©ã§ãã ç¹ã«ãã«ãŒãã£ã³ã°ãžã®ã¢ãããŒãïŒState Manager / StateManagerïŒãæ°ã«å ¥ã£ãŠããŸããä»ã®å®è£ ãããã¯ããã«åªããŠãããšæããŸãã
Emberã®åŒ±ç¹ã¯ããã®å©ç¹ã®çµæã§ãã ãšã³ããŒã®éããã©ããããªãå Žå-ããªãã®ããã«èŠåŽãæ¥ãã åé¡ãçºçããå Žåã¯ãéåžžã«è€éãªãã¬ãŒã ã¯ãŒã¯ãæ±ã£ãŠãããããã»ãšãã©ã®å Žåãåé¡ãè¿ éã«è§£æ±ºããããšã¯ã§ããŸããã Emberã¯ããŒãžã§ã³1.0ã«éããŸããããä»åŸæ°å¹Žéã§å€§å¹ ã«å€æŽãããäºå®ã§ãã ã³ãŒãã®ããããé¢ã§ãã®ãããªã¬ãã«ã®ååšãããã¬ãŒã ã¯ãŒã¯ã§ã¯ãæŽæ°ã¯é£ãããã¹ãã«ãªãå¯èœæ§ããããŸãïŒRailsã3çªç®ã®ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããã®ã«1幎以äžããããŸããïŒã
ç§ã«ãšã£ãŠæåŸã®ã¹ãããŒã¯ãEmberãããªãã®ã¢ãŒããã¯ãã£ãã³ã³ãããŒã«ããããšã§ããã ç§ãã¡ã¯èªåã§éžæããã®ã«ååãªã¹ãã«ãæã£ãŠããã®ã§ãç§ãã¡ã«éåžžã«å€ãã®å¶éã課ãããšã¯æªãéžæã ãšæããŸãã
Angular.js
Angularã¯ãHTMLãšJavaScriptãè€éãªã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã«é©ããéèŠãªèŠçŽ ãæããªãã¢ãããŒãã䜿çšããŸãã JavaScriptã®å Žåãå¿ èŠãªã®ã¯ç£èŠå¯èœãªãªããžã§ã¯ãã§ãã HTMLã®å Žåãæ¬ ããŠããéšåã¯äœããã®ãã³ãã¬ãŒãã§ãã ã©ã¡ããæ¡åŒµå¯èœãªèšèªã§ãããããAngularã¯ãã®ãããªæ©èœãè¿œå ããŸãã
ç§ã¯Angularã®å€§ãã¡ã³ã§ãã ãã¥ãŒãšããžãã¹ããžãã¯ã®éã®ééçãªåé¢ãæäŸããŸããããã¯ãçŸåšã®Webãæ¬åœã«å¿ èŠãšããåäœãšæ§é ãçµã¿åãããã³ã³ããŒãã³ãå®è£ ã§ãã ãŸããå€ãã®éçºè ãåé·ãšèããäŸåæ§æ³šå ¥ãã¬ãŒã ã¯ãŒã¯ãå«ãŸããŠããŸãããããã¯è¯ãã¢ã€ãã¢ã ãšæããŸãã
ç§ãåæããã®ããããå Žæã¯ããã³ãã¬ãŒãå®è£ ã®å®è£ æ¹æ³ã§ãã ç§ã¯2000幎ããWebéçºã«æºãã£ãŠããŸãããããã®éãWebãã¯ãããžãŒã®3ã€ã®éšåïŒã¹ã¿ã€ã«ãåäœãæ§é ïŒãåºå¥ããåŸåãçå®ã«ãããŸããã ç§ã¯ãã®åããèŠãŠïŒãããŠãã®äžéšã§ããïŒãHTMLã®æ¯ãèããJavaScriptã®HTMLã奚å±ããããšã¯æªãæ¹æ³ã ãšæããŸãã çµå±ã®ãšãããéãã¯äœã§ãã
onclick="foo();"
ãããŠ
ng-click="foo();"
Xcodeã®ãããªç°å¢ã§ã¯ãããã¥ãŒãã¯ç§ã«ãšã£ãŠã¯ã³ãŒãã§ã¯ãªãããã¶ã€ã³ãµãŒãã§ã¹ã§ããããããã®ã¹ã¿ã€ã«ã®ãã¥ãŒã§ã®ãã€ã³ãã£ã³ã°ã«åé¡ã¯ãããŸããã ããããç§ãã¡ã¯ç°ãªãæ¹æ³ã§ãŠã§ããæ§ç¯ããŠããã®ã§ãããã¯æªãéçºæ¹åã ãšæããŸãã
ç§ã¯ããã匱ç¹ã ãšã¯æããããããã¢ãããŒãã®éãã ãšèããŠããŸãã Angularã®åŒ±ç¹ã¯ããã ãšæããŸããé¢åãªAPIãWebæšæºãAngularãšã¯ç°ãªãæ¹åã«é²ããšããäºå®ããããŠæœè±¡åã¯éåžžã«è匱ã§ãã ãããã©ã®ããã«æ©èœããã©ãã§/ã©ã®ããã«æ»ããã«ã€ããŠã®æ·±ãç解ãå¿ èŠãªå ŽåãèŠå¶ãããAngularã®äžçã®å€ã«ããã®ã¯ååç°¡åã§ãã
ç§ã«ãšã£ãŠæ±ºå®çãªãã€ãã¹ç¹ã¯ããã¬ãŒã ã¯ãŒã¯å šäœã®äžã§æã䟡å€ã®ããæ©èœã§ãããšèããŠããç¬èªã®ãã£ã¬ã¯ãã£ããäœæããããšãã©ãã»ã©é£ãããã§ããã ç§ã®ãã£ãªã¢ã®äžã§ãèŠçã®ã¬ãã«ãæ¡å€§ããããšãããšãã«èŠãã¿ã®ã¬ãã«ã«è¿ã¥ããå¯äžã®ãã©ãããã©ãŒã ã¯ãASP.net WebFormsã®ãµãŒããŒã³ã³ãããŒã«ã§ãã ããã¯è§£æ±ºå¯èœãªåé¡ã§ãããAngularã2çªç®ãŸãã¯3çªç®ã®ããŒãžã§ã³ã«å°éããæç¹ã§ãããç§ã®éžæã ãšæããŸãã
Knockout.js
Knockoutã¯ãMicrosoft MVVMã«ãã³ããåŸãããã³ããšã³ãã¢ãããŒããæ¡çšããŠããŸãã ããŒã¿ãã€ã³ãã£ã³ã°çšã®åŒ·åãªèšèªãšãã¢ãã«ã衚瀺ããããã®htmlã®ãã€ã³ãã£ã³ã°ããããŸãã åºæ¬çãªã«ãŒã¿ãŒããããããã ãã§ãã Knockoutã¯ãããŒã¿ãã€ã³ãã£ã³ã°ã«é©ããã©ã€ãã©ãªãšããŠã®ããã¬ãŒã ã¯ãŒã¯ãã§ã¯ãããŸããã
Knockoutã®çæ³çãªäœ¿çšæ³ã¯ãããã€ããªãããã¢ããªã±ãŒã·ã§ã³ãäœæãããšããããŒãžã®ãªããŒãéã®ããåãã¯ãããããµãŒããŒã¯ã»ãšãã©ã®ããžãã¯ãä¿æããŠãããšãã ãšæããŸãã ãããããªãã®å Žåã§ãããªããããªãã¯ã¯ã©ã€ã¢ã³ãåŽã«ãããããªããŒãºããããç¶æ ãšåäœã®åé¢ã¯ããããããªããå¿ èŠãªãã®ã§ãã
Knockoutã®åŒ±ç¹ã¯ã倧éã®ã¯ã©ã€ã¢ã³ãããžãã¯ãå¿ èŠãªå Žåãããããœãªã¥ãŒã·ã§ã³ã®äžéšã«ãªãããšã§ãã
Backbone.js
ããã¯ããŒã³ã¯ããã®ã¿ã€ãã®æã人æ°ã®ããããã³ããšã³ãã©ã€ãã©ãªã§ãããæãã·ã³ãã«ã§ããããŸãã Backboneã®å²åŠã¯ãWebäžã§ããã³ããšã³ãã³ãŒããæ§é åããããã«å¿ èŠãªæå°éã®ãã®ãæäŸããããšã§ãã Backboneãç°¡åã«äœ¿çšã§ããããã«ãªããŸãïŒãããŠãã³ãŒãããŒã¹ãæåããæåŸãŸã§1æéã§èªãããšãã§ããŸãïŒã
é©åºŠãªããŒãºãããå ŽåïŒãŸãã¯æåã¯äžçšåºŠã§ãããåŸã ã«æé·ããå ŽåïŒã¯ãBackboneã䜿çšããŠãã ããã ããã¯ããŒã³ã¯ããã¬ãŒã ã¯ãŒã¯ãšãããããå²åŠã§ãã Backboneã«ã¯é©ãã»ã©æŽ»çºãªã³ãã¥ããã£ããããŸããã€ãŸããããŸããŸãªãµãŒãããŒãã£ã®æ¡åŒµæ©èœãã©ã€ãã©ãªããéžæããããšã§ããç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ãããããšãã§ããŸãã Backboneã¯éåžžã«JavaScriptããŒã¹ã§ããã€ãŸããèšè¿°ããŠããèšèªãç解ããŠããã°ãJavaScriptã¹ã¿ã€ã«ã®ãã¹ãŠãå®è¡ããããããã¬ãŒã ã¯ãŒã¯ãç解ã§ããŸãã
Backboneã®åŒ±ç¹ã¯ãããèªäœã§ã¯ããŸãäœãããªãããšã§ããäœã«æ¥ç¶ãããããããªãå Žåã¯ãèªåã§æªããµãŒãã¹ãè¡ãããšã«ãªããŸãã å€ãã®ãWebéçºè ãã¯Webãã¯ãããžãŒã®ç¥èãä¹ããããããã®ãJavaScriptæ§ããéªéã«ãªãå¯èœæ§ããããŸãããã®1ã€ã§ããã°ãBackboneã§ç°¡åã«è¿·åã«ãªããŸãã
Backbone.Marionette
Marionetteã¯ãBackboneãããããã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«æäœéå¿ èŠãªãã®ãæäŸãããšã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã¯å€§éã®å®åã³ãŒãã«ãªããšäž»åŒµããŠããŸãã Marionetteã¯ããããã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªãã¬ãŒã ã¯ãŒã¯ãæäŸãã倧éã®ã³ãŒããæŽçããæ¹æ³ã«é¢ããã¬ã€ãã³ã¹ãæäŸããŸãã
Marionetteãéžæããçç±ã¯ãã³ãŒããæŽçããã¢ãããŒãã§ãããå€ãã®ç¹ã§ç§ãã¡ã®ãã®ãšäžèŽããŠããŸãã æ確ã«å®çŸ©ãããã·ã³ãã«ãªã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãäºãã«éä¿¡ããå°ããªã³ãŒãã«å€§ããªã³ãŒããããã¯ãåé¢ããŸãã è¡šçŸã³ãŒããå¯èœãªéã宣èšçã«ããããã®ç®¡çãšã³ã³ãã¥ãŒãã£ã³ã°ã®åé¢ãããã³ã³ãŒã管ç-å¯èœãªéãé«ã¬ãã«ã ãŸãã倧èŠæš¡ã§è€éãªã³ãŒãããŒã¹ãæ±ã確ç«ããããã¿ãŒã³ã«åŸã£ãŠãã ããã
ããªãªãããã¯ãæ倧ã®ããã¯ããŒã³åé¡ã解決ããŸã-ãã¥ãŒå ã®ãã®ãã¹ãŠã®å®åã³ãŒãã ãŸããç¬èªã®ã³ã³ããŒãã³ãã¢ãŒããã¯ãã£ïŒAngularã§ã¯è€éãããŸãïŒãç°¡åã«æ§ç¯ããå¿ èŠãªãã¹ãŠã®æå°éã®æ§é ãååŸã§ããŸãïŒKnockoutãšã¯ç°ãªããŸãïŒã åªããã¢ãŒããã¯ãã£ãå®æãããŠã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§ç¯ããã«ã¯æéãããããŸãããç§ãã¡ã®èŠæ±ãšä»ã®ã©ã€ãã©ãªã®çŸç¶ãèãããšãããã¯è¯ã劥åã ãšæããŸãã
UIã¯è€éã§ãSilver Bulletã¯ãããŸãã
ããã¯ç¹å®ã®ç¶æ³ãšèŠç¹ã®è©äŸ¡ã§ãããç§ãã¡ã®è£œåãšéçºããŒã ã«ãšã£ãŠæå³ããããšä¿¡ããŠããŸãã åé ã§è¿°ã¹ãããã«ããããã®ãªãã·ã§ã³ã¯ãã¹ãŠç¬èªã®ç®çã«æé©ã§ãã ãXãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããŠããããæªãã®ã§ãããä»ã¯Yãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããã®ã§ãéæ³ã®éŠ¬ã«ä¹ã£ãŠæ¥åœããã®è¯ããã£ãŒã«ããæ ããŠããããã«æããŸããã
åäœè ã®ãããã»ããªãã°ã¹ã