テンプレートエンジンの話 #jjug

30
テンプレートエンジンの話

Upload: yusuke-yamamoto

Post on 18-Dec-2014

5.571 views

Category:

Documents


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: テンプレートエンジンの話 #jjug

テンプレートエンジンの話

Page 2: テンプレートエンジンの話 #jjug

@yusuke山本 裕介

Page 3: テンプレートエンジンの話 #jjug

Webアーキテクチャの変遷

Page 4: テンプレートエンジンの話 #jjug

古典的なHTTPサーバ

リクエスト

レスポンス HTML

リクエスト

レスポンス HTML

Page 5: テンプレートエンジンの話 #jjug
Page 6: テンプレートエンジンの話 #jjug

古典的Web• 利点• シンプルな仕組み

• 難点• コンテンツを全部毎回取得

(更新チェックのみの場合も)

Page 7: テンプレートエンジンの話 #jjug

AJAX

リクエスト

レスポンス HTML

リクエスト

レスポンス XML / JSON

Page 8: テンプレートエンジンの話 #jjug

AJAX• 利点• 動的なWebサイト

• 更新箇所のみサーバより取得: 高速

• 難点• URLが変わらない: ブックマーク、戻る不可

Page 9: テンプレートエンジンの話 #jjug

HashBang

リクエスト /#!yusuke

レスポンス HTML

リクエスト

レスポンス XML / JSON

Page 10: テンプレートエンジンの話 #jjug

HashBang• 利点• ブックマーク可• 難点• 初期ロード遅い(アンカー部分はサーバに伝わらない)

• 美しくないURL

Page 11: テンプレートエンジンの話 #jjug

モダンなアーキテクチャ

Page 12: テンプレートエンジンの話 #jjug
Page 13: テンプレートエンジンの話 #jjug

何が起きているか

Page 14: テンプレートエンジンの話 #jjug
Page 15: テンプレートエンジンの話 #jjug

GitHubのアーキテクチャ• onclickをフック

• onclickイベントでpushState

• URL書き換え

• 画面更新

Page 16: テンプレートエンジンの話 #jjug
Page 17: テンプレートエンジンの話 #jjug

HTML5のpushState• history.pushState(状態,タイトル,URL)

• 状態を保存、URL書き換えも可能

• popState

• windowオブジェクトのイベント

• 戻るボタンを押した際に発生、状態復帰

Page 18: テンプレートエンジンの話 #jjug

push/popStateが使えるかif (window.history.pushState){ // pushState対応ブラウザ} else { // pushState非対応ブラウザ}

IE 10+ / Firefox 21+ / Chrome 27+

Safari 5.1+ / Opera 15+ / IOS Safari 5.0+

Android Browser 2.2, 2.3, 4.2+

Page 19: テンプレートエンジンの話 #jjug

旧来Web AJAX HashBang pushState

初期 ロードパフォーマンス ○ ○ △ ○

更新

パフォーマンス △ ○ ○ ○ブックマーク ○ × ○ ○戻る ○ × × ○

Page 20: テンプレートエンジンの話 #jjug

Javaのテンプレートエンジン

• Velocity

• FreeMarker

• JSP

• JSF

• Scala Templates

Page 21: テンプレートエンジンの話 #jjug

テンプレートエンジン

• テンプレートに従って動的コンテンツ作成• メール文面• Webページ

• 帳票

Page 22: テンプレートエンジンの話 #jjug

HTML5時代のテンプレートエンジンの要件• サーバ・クライアント両方でレンダリング• テンプレートを使い回せる

Page 23: テンプレートエンジンの話 #jjug

mustacheという選択

http://mustache.github.io/

Page 24: テンプレートエンジンの話 #jjug

mustacheの良いところ• 多目的: Web、メール等々

• 場所を問わない• サーバサイド: Java / Ruby / Node..

• クライアント: JavaScript

Page 25: テンプレートエンジンの話 #jjug

mustacheの良いところ• エディタ、IDEサポート

• Vim

• Emacs

• Sublime Text 2

• IntelliJ IDEA

Page 26: テンプレートエンジンの話 #jjug

mustache Javaコード例

MustacheFactory mf = new DefaultMustacheFactory();Mustache mustache = mf.compile("template.mustache");mustache.execute(writer, context) .flush();

Page 28: テンプレートエンジンの話 #jjug

Mustacheプラグイン• Play Framework 1.x

• Play Framework 2.x

• Grails Mustache Pluginhttps://github.com/julienba/play2-mustache

http://www.playframework.com/modules/mustache

http://grails.org/plugin/mustache

Page 29: テンプレートエンジンの話 #jjug

demo!

Page 30: テンプレートエンジンの話 #jjug

の時間はなさそうなので機会があればJJUG CCCなどで?