SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Advanced Tech Night No.06
Java開発者が今から学ぶべき、JavaScriptによるWeb開発




                                   2013/03/15
                         Acroquest Technology
                      村田 賢一郎(@muraken720)
目次

1.   はじめに
2.   少し昔話を・・・
3.   AjaxによるクライアントWebアプリケーション
4.   JavaScript MVCフレームワークの登場
5.   Backbone.jsとは?
6.   Backbone.jsの特長
7.   アプリケーションを作ってみよう!
8.   まとめ

                                                                             2
           Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. はじめに

自己紹介 =
  氏名: ‘村田 賢一郎’
  twitter: ‘@muraken720’
  所属: ‘Acroquest Technology Co.,Ltd.’
  仕事:
      ‘ライフライン系ネットワーク集中監視システム開発’
      ‘フレームワーク開発’
  言語: ‘Java & JavaScript’
  興味:
      ‘node.js’
      ‘CoffeeScript’
      ‘機関車トーマス!’
                                                                             3
           Copyright © Acroquest Technology Co., Ltd. All rights reserved.
宣伝です。




連載をさせて頂いてます!
  http://appkitbox.com/knowledge

                                                                                  4
                Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2. 少し昔話を・・・
   JavaによるWebアプリケーション開発の歴史
      1. Servletの登場
               Servlet内にHTMLタグをゴリゴリ書くとか、さぁ大変!
      2. JSPの登場
               今度はJSP内にアプリケーションロジックを書いくとか、もう大変!


     Struts, SpringMVCなどのMVCフレームワークの登場

Client Side        Server Side

     HTML                                         Action                      Logic    Dao
     CSS
      JS             Template                                                 Entity

                                                                                             5
                     Copyright © Acroquest Technology Co., Ltd. All rights reserved.
3. AjaxによるクライアントWebアプリケーション
   クライアント側の技術の発展で、アーキテクチャの重心
    がクライアント側にシフト
             Ajaxによる非同期通信。さらにCommet、WebSocketに発展!
             JSONによるデータ通信量の削減
             HTML5 / CSS3 / JavaScript
             モバイルアプリケーション
Client Side                                         Server Side

              Controller                                      API                      Logic    Dao
                                          重心

     View              Model                                                           Entity


          クライアント側でできる処理は、クライアントでやる
                                                                                                      6
                           Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4. JavaScript MVCフレームワークの登場
 クライアント側でJavaScriptでゴリゴリ書くようになると
  直ぐにスパゲティコードになってしまう。

      JavaScript MVCフレームワークの登場




                                                                            7
          Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5. Backbone.jsとは?

 1. JavaScript MVC Framework
 2. DocumentCloudが公開しているOSS。
    http://backbonejs.org/
 3. 開発者: Jeremy Ashkenas氏
    他にも以下を開発
      • Underscore.js
      • CoffeeScript
 4. 豊富な採用事例
   ① LinkedIn
   ② Foursquare
   ③ 37Singals 他

                                                                                   8
                 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6. Backbone.jsの特長①




          1. Architecture




                                                                            9
          Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6-1. アプリケーションにアーキテクチャ(背骨)を作る
 一定のパターンで開発できる分かりやすいアーキテクチャ
hashChange
/ pushState                                                      操作
              Backbone                                                             Backbone
               Router                                                               Model
                                                                        trigger

                       制御
                                      Backbone                            Backbone              参照
    HTML
                                        View                               Events
              DOM Event                                      通知


                                                                         trigger

                View                                                               Backbone
       描画
              Template            render
                                                                                   Collection
                                                                 操作

                                                                                                10
                Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6. Backbone.jsの特長②③

                        2. Simple




                 3. Lightweight
                                                                            11
          Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6-2. Simpleで柔軟性に富む

1. フレームワークというよりライブラリ感覚で使える
2. 他ライブラリとの併用が可能
3. プレゼンテーション機能がないため、お気に入りのライブラ
   リを利用可能
  Unerscore.jsのtemplate以外にも、Handlebars, Hogan.js,
   Mustacheなど
4. バインディング機能のような高度な機能がない分、ライブラ
   リの見通しがよく、開発者が細かい制御が可能




                                                                               12
             Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6-3. Lightweightなフレームワーク

1. Backbone.js(5.6k)+Underscore.js(4k)
   Ember.js(42k)
   AngularJS(29k)                                         Ember.js

   Spine(8.1k)                                          AngularJS

                                 Backbone.js+Underscore.
                                            js
1. 依存ライブラリ:
                                                             Spine.js
   Underscore.js
   JQuery or Zepto.js                                                     0     10   20   30   40    50

   json2.js



                                                                                                 13
               Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7. アプリケーションを作ってみよう!

 Message List アプリケーション




 jQuery Mobile + Backbone.js


                                                                               14
             Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7. サンプルアプリケーションの構成
                                                                            Header



                                                                         Message入力部



                                                                         MessageList部




                                                                            Footer
                                                                                 15
       Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7. サンプルアプリケーションの構成


                                                                         AppView




                                                                               16
       Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7. サンプルアプリケーションの構成




                                                                         MessageListView




                                                                                      17
       Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-1. Modelはデータと固有メソッドを持つ


// Model
  app.Message = Backbone.Model.extend({

    defaluts: {
                                             validateメソッドをオーバーライドするこ
      "content": ""                          とで、バリデーション処理を実装できる。
    }
                                             Modelにアプリケーションに必要なメソッ
                                             ドを定義する。
  });
                                             デフォルトではサーバサイドとRESTful
                                             な同期を行う。



                                                                               18
             Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-2. CollectionはModelを保持するDataStore


// Collection

  app.MessageList = Backbone.Collection.extend({
    model: app.Message
  });
                                                      Collectionに格納するModelを定義。

                                                      デフォルトではサーバサイドと
                                                      RESTfulな同期を行う。

                                                      Underscore.jsによる便利なメソッド
                                                      を多数持つ。

                                                                                  19
                Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-3. CollectionとModelの使い方



this.messageList = new app.MessageList();

var message = new app.Message();
message.set({"content": text});
                                                                     Collectionにaddするとaddイ
this.messageList.add(message);                                       ベントが発生する。

                                                                     Viewではこのイベントの通知
                                                                     を受けて描画処理を行うよう
                                                                     にする。


                                                                                      20
             Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-4. ViewにCollectionのEventをバインドする
app.MessageListView = Backbone.View.extend({

  el: "#msglist",                                                                     CollectionにModelが
                                                                                      addされたら、renderメ
  template: _.template($("#li-template").html()),
                                                                                      ソッドを呼び出すように
                                                                                      定義。
  initialize:function (messageList) {
    this.collection = messageList;
    this.collection.bind("add", this.render, this);
  },

  render:function (msg) {                                                             Viewの描画処理。
    $(this.el).append(this.template(msg.toJSON()));                                   jQuery Mobileを使用し
    $(this.el).listview('refresh');                                                   ているため、ライブラリ
  }                                                                                   に必要な処理をしてい
});                                                                                   る。


                                                                                                   21
                    Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-5. ViewにUIのEventをバインドする
app.AppView = Backbone.View.extend({
   el: "#index",

   events: {                                                            Viewのeventsプロパティを使
     "click #addbtn": "onAdd"                                           うとUIイベントを固有のメソッド
   },                                                                   に関連付けることができる。

   onAdd:function () {
     var text = this.$("#msg").val();

      var message = new app.Message();
      message.set({"content": text});
      this.messageList.add(message);

      this.$("#msg").val("");
  }
});
                                                                                       22
                    Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-6. (補足)Backbone.Events
  Eventsが提供するイベントの監視設定と解除、イベントの発火を
   利用することにより、コンポーネント間の依存関係を疎結合にす
   ることができます。




                                                                             23
           Copyright © Acroquest Technology Co., Ltd. All rights reserved.
7-7. (補足)Model/CollectionのRESTful JSON API
  Backbone.jsは、ajaxを利用したRESTful JSONインタ
   フェースによるサーバ側への永続化機能を標準で備え
   ている。




                                                                              24
            Copyright © Acroquest Technology Co., Ltd. All rights reserved.
8. まとめ

1. Backbone.jsを使うことにより、アプリケーションにMVC
   アーキテクチャを導入できる。
2. Model, Collection, Viewとそれぞれの役割をもった機
   能に分割できる。
3. Eventsによりお互いを疎結合にしやすい。
4. 機能を小さく分割することで、再利用や並行開発が可
   能となる。
5. 大規模なアプリケーションの開発に効果を発揮する。



                                                                            25
          Copyright © Acroquest Technology Co., Ltd. All rights reserved.
ご清聴、ありがとうございました。




            Infrastructures Evolution

                                                                    26
  Copyright © Acroquest Technology Co., Ltd. All rights reserved.

Más contenido relacionado

La actualidad más candente

メディア芸術基礎 II jQuery入門
メディア芸術基礎 II jQuery入門メディア芸術基礎 II jQuery入門
メディア芸術基礎 II jQuery入門
Atsushi Tadokoro
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
Osamu Monoe
 

La actualidad más candente (20)

実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
2時間で学ぶjQuery
2時間で学ぶjQuery2時間で学ぶjQuery
2時間で学ぶjQuery
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
メディア芸術基礎 II jQuery入門
メディア芸術基礎 II jQuery入門メディア芸術基礎 II jQuery入門
メディア芸術基礎 II jQuery入門
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
 
いまさらJavaScript
いまさらJavaScriptいまさらJavaScript
いまさらJavaScript
 
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
 
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことJavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
The master plan of scaling a web application
The master plan ofscaling a web applicationThe master plan ofscaling a web application
The master plan of scaling a web application
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
 

Destacado

Destacado (12)

BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてBACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発について
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 
BACKBONE.JSでMVC始めませんか?
BACKBONE.JSでMVC始めませんか?BACKBONE.JSでMVC始めませんか?
BACKBONE.JSでMVC始めませんか?
 
Rendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.jsRendr入門: サーバサイドで(も)動かす、Backbone.js
Rendr入門: サーバサイドで(も)動かす、Backbone.js
 
re:Titanium 今ここでもう一度、はじめての Titanium #2
re:Titanium 今ここでもう一度、はじめての Titanium #2re:Titanium 今ここでもう一度、はじめての Titanium #2
re:Titanium 今ここでもう一度、はじめての Titanium #2
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js
 
Vue.js ハンズオン資料
Vue.js ハンズオン資料Vue.js ハンズオン資料
Vue.js ハンズオン資料
 
俺的フロントエンド開発
俺的フロントエンド開発俺的フロントエンド開発
俺的フロントエンド開発
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 

Similar a Backbone.js入門

マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
Akira Inoue
 
19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」
Developers Summit
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー
Akira Inoue
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
 
Google Compute EngineとPipe API
Google Compute EngineとPipe APIGoogle Compute EngineとPipe API
Google Compute EngineとPipe API
maruyama097
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
maruyama097
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 

Similar a Backbone.js入門 (20)

Spine入門
Spine入門Spine入門
Spine入門
 
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
 
Ajn24
Ajn24Ajn24
Ajn24
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
Springの今
Springの今Springの今
Springの今
 
Mvc conf session_3_takehara
Mvc conf session_3_takeharaMvc conf session_3_takehara
Mvc conf session_3_takehara
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
SimpleModeler
SimpleModelerSimpleModeler
SimpleModeler
 
Ajn24
Ajn24Ajn24
Ajn24
 
19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」19-D-2_業務システム特化型RIA「Nexaweb」
19-D-2_業務システム特化型RIA「Nexaweb」
 
最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー最新 ASP.NET Web 開発オーバービュー
最新 ASP.NET Web 開発オーバービュー
 
ゲームだけじゃないHTML5
ゲームだけじゃないHTML5ゲームだけじゃないHTML5
ゲームだけじゃないHTML5
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Google Compute EngineとPipe API
Google Compute EngineとPipe APIGoogle Compute EngineとPipe API
Google Compute EngineとPipe API
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
 

Más de AdvancedTechNight

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3D
AdvancedTechNight
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界
AdvancedTechNight
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
AdvancedTechNight
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
AdvancedTechNight
 
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPIStormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
AdvancedTechNight
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
AdvancedTechNight
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMR
AdvancedTechNight
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
AdvancedTechNight
 

Más de AdvancedTechNight (20)

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3D
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptTypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
 
three.jsで作る3Dの世界
three.jsで作る3Dの世界three.jsで作る3Dの世界
three.jsで作る3Dの世界
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPIStormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
 
Twitterのリアルタイム分散処理システム「Storm」入門 demo
Twitterのリアルタイム分散処理システム「Storm」入門 demoTwitterのリアルタイム分散処理システム「Storm」入門 demo
Twitterのリアルタイム分散処理システム「Storm」入門 demo
 
Twitterのリアルタイム分散処理システム「Storm」入門
Twitterのリアルタイム分散処理システム「Storm」入門Twitterのリアルタイム分散処理システム「Storm」入門
Twitterのリアルタイム分散処理システム「Storm」入門
 
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバック
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMR
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 

Backbone.js入門

  • 1. Advanced Tech Night No.06 Java開発者が今から学ぶべき、JavaScriptによるWeb開発 2013/03/15 Acroquest Technology 村田 賢一郎(@muraken720)
  • 2. 目次 1. はじめに 2. 少し昔話を・・・ 3. AjaxによるクライアントWebアプリケーション 4. JavaScript MVCフレームワークの登場 5. Backbone.jsとは? 6. Backbone.jsの特長 7. アプリケーションを作ってみよう! 8. まとめ 2 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 3. 1. はじめに 自己紹介 = 氏名: ‘村田 賢一郎’ twitter: ‘@muraken720’ 所属: ‘Acroquest Technology Co.,Ltd.’ 仕事: ‘ライフライン系ネットワーク集中監視システム開発’ ‘フレームワーク開発’ 言語: ‘Java & JavaScript’ 興味: ‘node.js’ ‘CoffeeScript’ ‘機関車トーマス!’ 3 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 4. 宣伝です。 連載をさせて頂いてます! http://appkitbox.com/knowledge 4 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 5. 2. 少し昔話を・・・  JavaによるWebアプリケーション開発の歴史 1. Servletの登場  Servlet内にHTMLタグをゴリゴリ書くとか、さぁ大変! 2. JSPの登場  今度はJSP内にアプリケーションロジックを書いくとか、もう大変! Struts, SpringMVCなどのMVCフレームワークの登場 Client Side Server Side HTML Action Logic Dao CSS JS Template Entity 5 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 6. 3. AjaxによるクライアントWebアプリケーション  クライアント側の技術の発展で、アーキテクチャの重心 がクライアント側にシフト  Ajaxによる非同期通信。さらにCommet、WebSocketに発展!  JSONによるデータ通信量の削減  HTML5 / CSS3 / JavaScript  モバイルアプリケーション Client Side Server Side Controller API Logic Dao 重心 View Model Entity クライアント側でできる処理は、クライアントでやる 6 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 7. 4. JavaScript MVCフレームワークの登場  クライアント側でJavaScriptでゴリゴリ書くようになると 直ぐにスパゲティコードになってしまう。 JavaScript MVCフレームワークの登場 7 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 8. 5. Backbone.jsとは? 1. JavaScript MVC Framework 2. DocumentCloudが公開しているOSS。  http://backbonejs.org/ 3. 開発者: Jeremy Ashkenas氏  他にも以下を開発 • Underscore.js • CoffeeScript 4. 豊富な採用事例 ① LinkedIn ② Foursquare ③ 37Singals 他 8 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 9. 6. Backbone.jsの特長① 1. Architecture 9 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 10. 6-1. アプリケーションにアーキテクチャ(背骨)を作る  一定のパターンで開発できる分かりやすいアーキテクチャ hashChange / pushState 操作 Backbone Backbone Router Model trigger 制御 Backbone Backbone 参照 HTML View Events DOM Event 通知 trigger View Backbone 描画 Template render Collection 操作 10 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 11. 6. Backbone.jsの特長②③ 2. Simple 3. Lightweight 11 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 12. 6-2. Simpleで柔軟性に富む 1. フレームワークというよりライブラリ感覚で使える 2. 他ライブラリとの併用が可能 3. プレゼンテーション機能がないため、お気に入りのライブラ リを利用可能  Unerscore.jsのtemplate以外にも、Handlebars, Hogan.js, Mustacheなど 4. バインディング機能のような高度な機能がない分、ライブラ リの見通しがよく、開発者が細かい制御が可能 12 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 13. 6-3. Lightweightなフレームワーク 1. Backbone.js(5.6k)+Underscore.js(4k)  Ember.js(42k)  AngularJS(29k) Ember.js  Spine(8.1k) AngularJS Backbone.js+Underscore. js 1. 依存ライブラリ: Spine.js  Underscore.js  JQuery or Zepto.js 0 10 20 30 40 50  json2.js 13 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 14. 7. アプリケーションを作ってみよう!  Message List アプリケーション  jQuery Mobile + Backbone.js 14 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 15. 7. サンプルアプリケーションの構成 Header Message入力部 MessageList部 Footer 15 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 16. 7. サンプルアプリケーションの構成 AppView 16 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 17. 7. サンプルアプリケーションの構成 MessageListView 17 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 18. 7-1. Modelはデータと固有メソッドを持つ // Model app.Message = Backbone.Model.extend({ defaluts: { validateメソッドをオーバーライドするこ "content": "" とで、バリデーション処理を実装できる。 } Modelにアプリケーションに必要なメソッ ドを定義する。 }); デフォルトではサーバサイドとRESTful な同期を行う。 18 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 19. 7-2. CollectionはModelを保持するDataStore // Collection app.MessageList = Backbone.Collection.extend({ model: app.Message }); Collectionに格納するModelを定義。 デフォルトではサーバサイドと RESTfulな同期を行う。 Underscore.jsによる便利なメソッド を多数持つ。 19 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 20. 7-3. CollectionとModelの使い方 this.messageList = new app.MessageList(); var message = new app.Message(); message.set({"content": text}); Collectionにaddするとaddイ this.messageList.add(message); ベントが発生する。 Viewではこのイベントの通知 を受けて描画処理を行うよう にする。 20 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 21. 7-4. ViewにCollectionのEventをバインドする app.MessageListView = Backbone.View.extend({ el: "#msglist", CollectionにModelが addされたら、renderメ template: _.template($("#li-template").html()), ソッドを呼び出すように 定義。 initialize:function (messageList) { this.collection = messageList; this.collection.bind("add", this.render, this); }, render:function (msg) { Viewの描画処理。 $(this.el).append(this.template(msg.toJSON())); jQuery Mobileを使用し $(this.el).listview('refresh'); ているため、ライブラリ } に必要な処理をしてい }); る。 21 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 22. 7-5. ViewにUIのEventをバインドする app.AppView = Backbone.View.extend({ el: "#index", events: { Viewのeventsプロパティを使 "click #addbtn": "onAdd" うとUIイベントを固有のメソッド }, に関連付けることができる。 onAdd:function () { var text = this.$("#msg").val(); var message = new app.Message(); message.set({"content": text}); this.messageList.add(message); this.$("#msg").val(""); } }); 22 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 23. 7-6. (補足)Backbone.Events  Eventsが提供するイベントの監視設定と解除、イベントの発火を 利用することにより、コンポーネント間の依存関係を疎結合にす ることができます。 23 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 24. 7-7. (補足)Model/CollectionのRESTful JSON API  Backbone.jsは、ajaxを利用したRESTful JSONインタ フェースによるサーバ側への永続化機能を標準で備え ている。 24 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 25. 8. まとめ 1. Backbone.jsを使うことにより、アプリケーションにMVC アーキテクチャを導入できる。 2. Model, Collection, Viewとそれぞれの役割をもった機 能に分割できる。 3. Eventsによりお互いを疎結合にしやすい。 4. 機能を小さく分割することで、再利用や並行開発が可 能となる。 5. 大規模なアプリケーションの開発に効果を発揮する。 25 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 26. ご清聴、ありがとうございました。 Infrastructures Evolution 26 Copyright © Acroquest Technology Co., Ltd. All rights reserved.