
1ã¯ããã«
ãã®èšäºã§ã¯ã3ã€ã®äžè¬çãªMV * Webéçºãã¬ãŒã ã¯ãŒã¯ãAngularJSãBackboneãããã³Emberãæ¯èŒããŸãã ãããžã§ã¯ãã«é©åãªãã¬ãŒã ã¯ãŒã¯ãéžæãããšãäºå®ã©ããã«ã¿ã¹ã¯ãå®äºããå°æ¥ã³ãŒããç¶æããèœåã«åçã«åœ±é¿ããŸãã ä¿¡é Œæ§ã®é«ãå®çžŸã®ãããã¬ãŒã ã¯ãŒã¯ãå¿ èŠã§ããããããå¶éããããããŸããã ãŠã§ãã¯æ¥éã«é²åããŠãããå€ãæè¡ã¯éå»ã®ãã®ã§ãã ãããã詳现ã«æ¯èŒããŠã¿ãŸãããã
2ãã¬ãŒã ã¯ãŒã¯ãç¥ã
åé¡ã®ãã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯å ±éã®æ©èœããããŸããã³ãŒãã¯ãªãŒãã³ã§ãMITã©ã€ã»ã³ã¹ã®äžã§ãªãªãŒã¹ãããMV *ãã¶ã€ã³ãã¿ãŒã³ã䜿çšããŠ1ããŒãžã®ã¢ããªã±ãŒã·ã§ã³ãäœæããåé¡ã解決ããŸãã 誰ãããã¥ãŒãã€ãã³ããããŒã¿ã¢ãã«ããã¹ã®æŠå¿µãæã£ãŠããŸãã
AngularJSã¯ãGetAngularã®ãã倧ããªåçšè£œåã®äžéšãšããŠ2009幎ã«çãŸããŸããã ãã®åŸããã«ãGetAngularã®åµèšãšã³ãžãã¢ã®1人ã§ããMisco Heveryã¯ã17000è¡ã®ã³ãŒãã§æ§æãããããã3é±éã§6ãæ以å ã«å®äºãã1,000è¡ã®ã³ãŒãã«åãŸããã®è£œåã䜿çšããŠWebã¢ããªã±ãŒã·ã§ã³ãåäœæã§ããŸããã Googleã¯ãã®äºå®ã«æéãåããAngularJSãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ã¹ãã³ãµãŒã«ãªããŸããã ãã®æ©èœã«ã¯ãåæ¹åã®ããŒã¿ãã€ã³ãã£ã³ã°ãäŸåæ§æ³šå ¥ããã¹ãããããã³ãŒãããã£ã¬ã¯ãã£ãä»ãã®HTMLæ¡åŒµããããŸãã
Backbone.jsã¯2010幎ã«çãŸãã軜éã®MVCãã¬ãŒã ã¯ãŒã¯ã§ããExtJSã®ãããªéããã¬ãŒã ã¯ãŒã¯ã®ä»£æ¿ãšããŠäººæ°ãéããŠããŸãã
Emberã¯2007幎ããæ¥ãŠããŸãã ããã¯SproutCore MVCãã¬ãŒã ã¯ãŒã¯ãšããŠå§ãŸããæåã«SproutItã次ã«Appleã«ãã£ãŠéçºãããŸããã 2011幎ã圌ã¯ãjQueryããã³Ruby on Railsãããžã§ã¯ãã®äž»èŠããã°ã©ããŒã®1人ã§ããYehuda Katzã«ãã£ãŠãã©ãŒã¯ãããŸããã
3ã³ãã¥ããã£
ã³ãã¥ããã£ã¯ããã¬ãŒã ã¯ãŒã¯ãéžæããããã®éèŠãªèŠçŽ ã®1ã€ã§ãã ããå€ãã®ã³ãã¥ããã£-質åãžã®ããå€ãã®åçããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãYouTubeã®ãã¥ãŒããªã¢ã«... 2014幎4æã«é¢é£ãããã¬ãŒããäœæããŸããã Angularã¯æããã«åã¡ãŸã-ããã¯GitHubã§6çªç®ã«äººæ°ã®ãããããžã§ã¯ãã§ãããEmberãšBackboneã®åèšãããStackOverflowã§ããå€ãã®è³ªåããããŸãïŒ

çŸåšã®ææšã«å ããŠãGoogleãã¬ã³ãã䜿çšããŠãã¬ãŒã ã¯ãŒã¯ã®æé·çã調ã¹ãããšãã§ããŸãã

4ãã¬ãŒã ã¯ãŒã¯ãµã€ãº
ããŒãžã®èªã¿èŸŒã¿æéã¯ããµã€ããæåãããããã«éèŠã§ãã ãŠãŒã¶ãŒã¯èŸæ±åŒ·ããªãã®ã§ãã§ããã ãããŠã³ããŒããé«éåããå¿ èŠããããŸãã ããã«ã¯ããã¬ãŒã ã¯ãŒã¯ã®ãµã€ãºãšèµ·åã«ãããæéãšãã2ã€ã®èŠå ã圱é¿ããŸãã
gzipã¢ãŒã«ã€ãå ã®çž®å°ããŒãžã§ã³ãæ¯èŒããŸãã ãããããã¬ãŒã ã¯ãŒã¯èªäœã®ãµã€ãºãæ¯èŒããã ãã§ã¯äžååã§ãã ããšãã°ãBackbone.jsã¯ãµã€ãºãå°ããã«ãããããããUnderscore.jsïŒ5kbïŒãšjQueryïŒ32kbïŒãŸãã¯ZeptoïŒ9.1kbïŒãå¿ èŠã§ãã

5ãã¿ãŒã³
AngularãšEmberã«ã¯ãã³ãã¬ãŒããšã³ãžã³ãå«ãŸããŠããŸãã Backboneã¯ãéçºè ã®è£éã«ä»»ããŸãã ãã¿ãŒã³ããã¹ãããæè¯ã®æ¹æ³ã¯ããµã³ãã«ã³ãŒããååŸããããšã§ãã ãªã¹ããHTMLã§ãã©ãŒãããããäŸãåãäžããŸãã
5.1 AngularJS
Angularã®ãã³ãã¬ãŒãã¯ããã€ã³ãã£ã³ã°åŒãå«ãHTMLã§ãã åŒã¯äºéäžæ¬åŒ§ã§å²ãŸããŠããŸãïŒ
<ul> <li ng-repeat="framework in frameworks" title="{{framework.description}}"> {{framework.name}} </li> </ul>
5.2 Backbone.js
Backboneã¯è€æ°ã®ãã³ãã¬ãŒããšã³ãžã³ãšçµ±åã§ããŸãããããã©ã«ãã§ã¯Underscoreã䜿çšãããŸãã ããããããã䜿çšãããã³ãã¬ãŒãã®åŠçã¯ããªãåå§çã§ãããJSã«ã³ãŒããè¿œå ããå¿ èŠããããŸãã
<ul> <% _.each(frameworks, function(framework) { %> <li title="<%- framework.description %>"> <%- framework.name %> </li> <% }); %> </ul>
5.3 Ember.js
Emberã¯çŸåšã人æ°ã®ããMoustacheãšã³ãžã³ã®æ¡åŒµæ©èœã§ããHandlebarsã䜿çšããŠããŸãã HTMLBarsãšåŒã°ããHandlebarsã®æ°ããããŒãžã§ã³ãéçºãããŠããŸãã Handlebarsã¯DOMãç解ããŠããŸãã-æååã§ã®ã¿æ©èœããŸãã HTMLBarsã¯DOMãç解ããŸãã
<ul> {{#each frameworks}} <li {{bind-attr title=description}}> {{name}} </li> {{/each}} </ul>
6 AngularJS
6.1å©ç¹
Angularã¯å€ãã®æ°ããæŠå¿µããããããŸããã åæ¹åã®ããŒã¿ãã€ã³ãã£ã³ã°ã«ãããã³ãŒããæå°åãããŸãã jQueryã§æ¬¡ã®äŸãã芧ãã ããã
$('#greet-form input.user-name').on('value', function() { $('#greet-form div.user-name').text('Hello ' + this.val() + '!'); });
åæ¹åãã€ã³ãã£ã³ã°ã®ããããã®ãããªã³ãŒããèšè¿°ããå¿ èŠã¯ãããŸããã ãã³ãã¬ãŒãã§æã宣èšããã ãã§ãïŒ
<input ng-model="user.name" type="text" /> , {{user.name}}!
çŽæã¯è§åºŠã§éèŠãªåœ¹å²ãæãããŸãã JSã¯ã·ã³ã°ã«ã¹ã¬ããã§ã€ãã³ããã«ãªèšèªã§ãããããéåæã¢ãŒãã§ã¯å€ãã®ããšãèµ·ãããŸãã éåæJSã³ãŒãã¯æ¥éã«æé·ãããã¹ããããã³ãŒã«ããã¯ããã¹ãã²ããã£ã«å€ãããŸãã 圌ã¯ããããã©ãããã³ãŒãããŸãã¯ãã³ãŒã«ããã¯ã®ããå°çããšåŒã°ããŸãã
Angularã«ã¯æ倧ã®ã³ãã¥ããã£ãããã ãã§ãªããGoogleã«ãã£ãŠãµããŒãããã³å®£äŒãããŠããŸãã ãªãŒãã³ãœãŒã¹ã«ããã誰ãããã¬ãŒã ã¯ãŒã¯ã®éçºã«åå ã§ããŸãã ããã¯ã Angular 2.0èšèšããã¥ã¡ã³ãã眮ãããŠããå Žæã§ããã誰ãããããã«ã€ããŠç¥ããã³ã¡ã³ãããããšãã§ããŸãã
Angularã¯ãã¢ããªã±ãŒã·ã§ã³ãããã€ãã®ã¿ã€ãã®ãããã¯ã«åå²ããŸãïŒã³ã³ãããŒã©ãŒããã£ã¬ã¯ãã£ãããã¡ã¯ããªãŒããã£ã«ã¿ãŒããµãŒãã¹ããã¥ãŒã 次ã«ããããã¯ã¢ãžã¥ãŒã«ã«åå²ãããŸãã ãã¹ãŠã®ãããã¯ã«ã¯ç¬èªã®åœ¹å²ããããŸãã ã¿ã€ãã¯UIãã³ã³ãããŒã©ãŒãæ±ããã€ã³ã¿ãŒãã§ãŒã¹ããžãã¯ããµãŒãã¹ã¯ããã¯ãšã³ããšéä¿¡ãããã£ã¬ã¯ãã£ãã¯ã³ã³ããŒãã³ãã®äœæãšHTMLã®æ¡åŒµãå¯èœã«ããŸãã
ãAngularã¯ãã¹ã容ææ§ã念é ã«çœ®ããŠæžãããŠããŸãã- ãŠããããã¹ãã¬ã€ãããã®ãã®åŒçšã¯å€ããèªã£ãŠããŸãã å®éãAngularã¯ãšã³ãã£ãã£ã®åé¢ããŠãããã®åé¢ãéèŠããŠããã$ httpã$ timeoutãªã©ã®çµã¿èŸŒã¿ãµãŒãã¹ãæäœããããã®åŒ·åãªããŒã«ãæäŸããŸãã
6.2æ¬ ç¹
å€ãã®å ŽåãAngularã¯APIãã£ã¬ã¯ãã£ãã®è€éãã«ã€ããŠæ¹å€ãããŠããŸãã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ã®æŠå¿µã¯éçºè ã«ãšã£ãŠç¹ã«æ··ä¹±ãæãããããããã«ãé¢æ°ã®ã³ã³ãã€ã«ããªã³ã¯åããã³ãªã³ã¯åŸã®é¢æ°ãããŸããŸãªçš®é¡ã®å¯èŠæ§é åãèšå®ãã£ã¬ã¯ãã£ããªã©ããããŸãã
ã¹ã³ãŒãéå±€ã¯ãããã¿ã€ãç¶æ¿ã䜿çšããŸãããããã¯JavaãšCïŒã®çµéšããã人ã«ãšã£ãŠã¯å°é£ã§ãã
è§åºŠåŒã¯ãçš®ã§åºã䜿çšãããŠããŸãã ãã®èšèªã¯éåžžã«åŒ·åã§ãæã«ã¯å€ãããããšããããŸãã è€éãªããžãã¯ãäœæãããã³ãã¬ãŒãå ã§å²ãåœãŠæäœãšããŸããŸãªèšç®ãå®è¡ã§ããŸãã ãã³ãã¬ãŒãã«ããžãã¯ãé 眮ãããšããã¹ããå°é£ã«ãªããŸãã èšç®çã«ãªãŒããŒããŒãããããã³ãã¬ãŒãã®æ¬¡ã®äŸãèããŠã¿ãŸãããã
<button ng-click="(oldPassword && checkComplexity(newPassword) && oldPassword != newPassword) ? (changePassword(oldPassword, newPassword) && (oldPassword=(newPassword=''))) : (errorMessage=' , : ' + passwordRequirements)"></button>
å€ãã®å Žåããã£ã¬ã¯ãã£ããŸãã¯é¢æ°ã®ååãééããã®ã¯ç°¡åã§ããããã®ãšã©ãŒãèŠã€ããã®ã¯å°é£ã§ãã
ãããŒãã£ãã§ãã¯ãã®éââæ³ãæäŸãããã€ãžã§ã¹ããµã€ã¯ã«ããéçºè ãé©ãããŸãã Angular以å€ã®ã³ã³ããã¹ãã§äœæ¥äžã«$ digestïŒïŒãåŒã³åºãã®ãå¿ããã¡ã§ãã 誀ã£ãŠç¡éã®æ¶åãµã€ã¯ã«ãäœããªãããã«æ³šæããå¿ èŠããããŸãã å€ãã®ã€ã³ã¿ã©ã¯ãã£ãæ©èœãããããŒãžã§ã¯ãAngularã®é床ãäœäžãå§ããŸãã 1ããŒãžã§2000ãè¶ ãããªã³ã¯ã䜿çšããªãã§ãã ããã
7 Backbone.js
7.1å©ç¹
ããã¯ããŒã³ã¯è»œéã§ãããå€ãã®ã¡ã¢ãªãæ¶è²»ããŸããã åŠç¿æ²ç·ã¯ç·åœ¢ã§ãããç解ããã¹ãæŠå¿µïŒã¢ãã«/ã³ã¬ã¯ã·ã§ã³ããã¥ãŒããã¹ïŒã¯ã»ãšãã©ãããŸããã åªããããã¥ã¡ã³ããããã³ã³ãŒãã¯ç°¡åã§ãã ååã«ææžåãããŠãããã¬ãŒã ã¯ãŒã¯ã®ã³ãŒãå šäœã調ã¹ãŠã1æéãããç解ããããšãã§ããŸãã
ããã«åºã¥ããŠããã¬ãŒã ã¯ãŒã¯ãæ§ç¯ã§ããŸãã æ¢è£œã®äŸïŒBackbone UIãChaplinãGeppettoãMarionetteãLayoutManagerãThoraxãVertebraeã AngularãšEmberã®å Žåãéçºè ãçšæãããã®ãšäžç·ã«æ®ããå¿ èŠããããŸãã Angular 2.0ã¯ãããä¿®æ£ããããšãçŽæããŸããããŸã ããã«å¿ããå¿ èŠããããŸãã
7.2æ¬ ç¹
ããã¯ããŒã³ã¯æ§é ãæäŸããŸããã ããã¯ãæ§é ãäœæããããã®ç°¡åãªããŒã«ã®ã»ããã«ããããå€ãã®ç©ºã®ã¹ããŒã¹ãåããå¿ èŠããããŸãã ãã¡ããããããã®å Žæã®å€ãã¯ãµãŒãããŒãã£ã®ãã©ã°ã€ã³ã§æºããããŠããŸãããããã¯ããããéžæãããšãã«å€ãã®æ±ºå®ãè¡ãå¿ èŠãããããšãæå³ããŸãã ããšãã°ãBackbone.DocumentModelãBackBone.NestedTypesãBackbone.SchemaãBackbone-Nestedãbackbone-nestifyãªã©ã䜿çšããŠããã¹ããããã¢ãã«ãäœæã§ããŸãã æé©ãªãœãªã¥ãŒã·ã§ã³ãéžæããã«ã¯æéãããããŸãããã¬ãŒã ã¯ãŒã¯ã®æ¬è³ªã¯æéãç¯çŽããããšã§ãã
åæ¹åã®ããŒã¿æ¥ç¶ã¯ãµããŒããããŠããŸãããã€ãŸããã¢ãã«ãå€æŽããããšãã«ãã¥ãŒãæŽæ°ãããã¥ãŒãå€æŽããããšãã«ã¢ãã«ãæŽæ°ããããã«ãå€ãã®è£å©ã³ãŒããèšè¿°ããå¿ èŠããããŸãã
Backboneã®ãã¥ãŒã¯DOMãçŽæ¥æäœããããããã¹ããé£ãããåå©çšãå°é£ã§ãã
8 Ember.js
8.1å©ç¹
Ember.jsã¯ããèšå®ã§ã¯ãªãåæãã®ååã«åºã¥ããŠåäœããŸãã Emberã¯è£å©ã³ãŒããæžãå¿ èŠã¯ãããŸãã;äŸãã°ããªãœãŒã¹ã決å®ãããšãã«ãã¹åãšã³ã³ãããŒã©ãŒãèªåçã«æ±ºå®ãããªã©ã圌ã¯å€ãã®ããšãæšæž¬ã§ããŸãã 圌ã¯ããªãœãŒã¹ãå®çŸ©ããªãå ŽåããªãœãŒã¹ã®ã³ã³ãããŒã©ãŒãèªåçã«äœæããæ¹æ³ãç¥ã£ãŠããŸãã
åªãããã¹ãã³ãã©ãšããšã³ããŒããŒã¿ãšåŒã°ãããªãã·ã§ã³ã®ããŒã¿ã¬ã€ã€ãŒãå«ãŸããŠããŸãã ä»ã®2ã€ã®ãã¬ãŒã ã¯ãŒã¯ãšã¯ç°ãªããEmberã«ã¯ãRuby-on-Railsããã¯ãšã³ããŸãã¯RESTful JSONãåããä»»æã®APIãšããŸãçµ±åã§ããããŒã¿ãæäœããããã®ã¢ãžã¥ãŒã«ãããã«ãããŸãã
Emberãéçºããéãã¹ããŒãã«æ³šæãæãããŸããã ã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®ããŒããšå®è¡ã¯é«éã«ãªããŸãã
8.2çæ
APIã¯æŽ»æ³ãåããŠãããããå€ãã³ã³ãã³ããæ©èœããªããªã£ãäŸãå«ãŸããŠããŸãã Ember Data ChangelogãèŠããšãç§ãäœãæå³ããŠããã®ãç解ã§ããŸãã StackOverflowã®è³ªåã«å¯Ÿããå€ãã®åçã¯ããã¯ãé¢ä¿ãããŸããã
ãã³ãã«ããŒã¯å€ãã®ã¿ã°
, HTML, CSS jQuery UI Sortable.
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .
DOMãæ±æããŸã
, HTML, CSS jQuery UI Sortable.
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .
, HTML, CSS jQuery UI Sortable.
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .
, HTML, CSS jQuery UI Sortable.
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .
, HTML, CSS jQuery UI Sortable.
9
. Ember MVC , Ruby, Python, Java, C# -. .
Backbone . , , .
Angular HTML, -. Google, , , .