Agenda
• What's Isomorphic?
• Client/Server Survival Guide
• Meet the Pioneers
• From Rendr
• To React
Slide 14
Slide 14 text
60年代〜 メ イ ン フ レ ー ム の 時代
Client
(ダ ム 端末)
Server
(Host)
Front
end
Back
end
(表示の み)
IBM S/360〜390, z Systems
富⼠通・ ⽇⽴ Mシ リ ー ズ
NEC ACOS
BUNCH
IBM 3270, 5250
(DEC VT100)
Slide 15
Slide 15 text
90年頃〜 C/Sシ ス テ ム
Client
(Windows)
Server
Unix
WindowsNT
Oracle
SQL-Server
Front
end
Back
end
(RDBMSの み)
Visual Basic
Delphi
Slide 16
Slide 16 text
90年代前半〜 3層C/Sシ ス テ ム
Client
(Windows)
Server
(UNIX)
TPモ ニ タ
TUXEDO
Encina
CICS
OpenTP1
Front
end
Back
end
Visual Basic
Delphi
CORBA
Orbix
VisiBroker
M3 (WLE)
TPBroker
Slide 17
Slide 17 text
90年代半ば〜 World Wide Web
Client
(ブ ラ ウ ザ )
Server
Front
end
Back
end
(表示の み)
Perl (CGI)
Java (Servlet/JSP)
Netscape Navigator
Internet Explorer
Slide 18
Slide 18 text
00年頃〜 J2EE (Java2 Enterprise Edition)
Client
(ブ ラ ウ ザ )
Server
Back
end
(表示の み)
Servlet + JSP
Server
Front
end
EJB
RMI over IIOP
Slide 19
Slide 19 text
00年代前半〜 Ajax
Client
(ブ ラ ウ ザ )
Server
Front
end
Back
end
JavaScript
Dojo
Prototype
YUI
jQuery
…
Front
end
PHP
Python
Ruby
…
Slide 20
Slide 20 text
00年代半は〜 RIA (Rich Internet Application)
Client
(ブ ラ ウ ザ +プ ラ グ イ ン )
Server
Back
end
Flash/Flex
Silverlight
Curl
Front
end
Slide 21
Slide 21 text
00年代末〜 ス マ ホ
Client Server
Back
end
iOS
Android
Front
end
Slide 22
Slide 22 text
10年代前半〜 SPA (Single Page Application)
Client
(ブ ラ ウ ザ )
Server
Back
end
Backbone
Ember
Angular
React
Front
end
Slide 23
Slide 23 text
Back, Back Forth and Forth
Client Server
Back
end
Front
end
Client Server
Back
end
Front
end
Client Server
Back
end
Front
end
Slide 24
Slide 24 text
Agenda
• What's Isomorphic?
• Client/Server Survival Guide
• Meet the Pioneers
• From Rendr
• To React
Rendr
Client Server (RoR)
Back
end
Server (JS)
Front
end
初回表示
Server (RoR)
Back
end
そ の 後
Server (JS)
Front
end
Slide 46
Slide 46 text
初期表示の 改善
Client Server
HTML
JSの
実⾏開始
レ ン ダ リ ン グ
GET /index.html
GET /js/main.js
GET /api/bar
index.html
main.js
JSON
遅
延
レ ン ダ リ ン グ
操作
Slide 47
Slide 47 text
SEOの 改善
Crawler Server
HTML
GET /index.html
index.html
ク ロ ー ル
可能
レ ン ダ リ ン グ
Slide 48
Slide 48 text
Browser
DOM操作
イ ベ ン ト
'pushstate'
Backboneの 基本要素
Router
View Model Sync
B
r
o
w
s
e
r
B
a
c
k
e
n
d
Slide 49
Slide 49 text
Server
GET /users/1
Backboneの Isomorphic化
Router
Model Sync
B
r
o
w
s
e
r
B
a
c
k
e
n
d
HTML
View
Controller
Handlebars
New!
Slide 50
Slide 50 text
不⼀致
Client
Backboneの Isomorphic化 (Client-side)
View Model
S
e
r
v
e
r
モ デ ル が 空
B
r
o
w
s
e
r
HTML
Handlebars
Slide 51
Slide 51 text
Server
Backboneの Isomorphic化 (Server-side)
View Model
B
r
o
w
s
e
r
Handlebars
HTML
JSON
モ デ ル の 状態を
シ リ ア ラ イ ズ し て
HTMLに 埋め 込む Dehydrate
状態
Slide 52
Slide 52 text
Client
Backboneの Isomorphic化 (Client-side)
View Model
S
e
r
v
e
r
(Re)Hydrate
Handlebars
B
r
o
w
s
e
r
HTML
JSON
画面と モ デ ル の
内容が 一致
イ ベ ン ト
ハ ン ド ラ
登録
状態
何サ ー バ ?
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
こ れ
フ ロ ン ト エ ン ド
サ ー バ
不評
Slide 55
Slide 55 text
何サ ー バ ?
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
レ ン ダ リ ン グ
サ ー バ
バ ッ ク エ ン ド (の )
フ ロ ン ト エ ン ド
Slide 56
Slide 56 text
何サ ー バ ?
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
レ ン ダ リ ン グ
サ ー バ
バ ッ ク エ ン ド (の )
フ ロ ン ト エ ン ド
プ ロ キ シ
サ ー バ
オ ー ケ ス ト レ ー シ ョ ン
サ ー バ
? !?
Slide 57
Slide 57 text
レ ン ダ リ ン グ サ ー バ ?
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
レ ン ダ リ ン グ の み
ク ラ イ ア ン ト が
直接バ ッ ク エ ン ド に
ア ク セ ス す る なら …
こ れはRendr
で はあ り ま せ ん
Slide 58
Slide 58 text
Rendrの 場合
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
Proxy
ク ラ イ ア ン ト は
バ ッ ク エ ン ド に
直接ア ク セ ス し ない !
レ ン ダ リ ン グ だ け じ ゃ ない !
Proxyの た め の
Expressミ ド ル ウ ェ ア を
提供
Slide 59
Slide 59 text
フ ロ ン ト エ ン ド で セ ッ シ ョ ン 管理
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
Proxy
HTTP
Session
ス テ ー ト レ ス !
Slide 60
Slide 60 text
ldjson
csv
APIの 変換
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
Gate-
way
External
Systems
ldjson
CSV
デ ー タ 形式を 変換
file
upload
Slide 61
Slide 61 text
Server (JS)
Orchestration (API Gateway Pattern)
Client Server (any)
Back
end
Front
end
Server (any)
Back
end
Server (any)
Back
end
Front
end
Orche-
stration
Experienced-based API Resource-based API
http://thenextweb.com/dd/2013/12/17/future-api-design-orchestration-layer/
http://microservices.io/patterns/apigateway.htm
Slide 62
Slide 62 text
Rendr的なIsomorphicの 可能性
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
ス テ ー ト レ ス
疎結合
セ ッ シ ョ ン
管理
API Gateway/
Orchestration
Microservices
Slide 63
Slide 63 text
タ イ ミ ン グ 重要
Rendr公開
Slide 64
Slide 64 text
Agenda
• What's Isomorphic?
• Client/Server Survival Guide
• Meet the Pioneers
• From Rendr
• To React
Client
DOM更新
イ ベ ン ト
'pushstate'
Flux的ア プ リ の 基本要素 (Client-side)
Router
React
Views
Store Dispatcher
B
r
o
w
s
e
r
B
a
c
k
e
n
d
Action
Creator
Fetcher
Server
GET /user/1
HTML
Fluxibleの Fetchr (サ ー バ サ イ ド )
B
r
o
w
s
e
r
B
a
c
k
e
n
d
Service
Server側の み
(NOT Isomorphic)
Serviceを
直接呼び 出す
New!
Router
React
Views
Store Dispatchr
Action
Creator
Fetchr
Slide 81
Slide 81 text
GET /api/users/2
Client
DOM更新
/users/2
Fluxibleの Fetchr (ク ラ イ ア ン ト サ イ ド )
B
r
o
w
s
e
r
S
e
r
v
e
r
フ ロ ン ト エ ン ド の
APIを 呼び 出す
Router
React
Views
Store Dispatchr
Action
Creator
Fetchr
Slide 82
Slide 82 text
Server
Fluxibleの Fetchr (サ ー バ サ イ ド )
B
r
o
w
s
e
r
B
a
c
k
e
n
d
Action
Creator
Fetchr
Service
Expressの
ミ ド ル ウ ェ ア を 提供
GET /api/users/2
Router
React
Views
Store Dispatchr
Slide 83
Slide 83 text
Fluxibleの Fetchr (全体像)
Router
View
Store Dispatchr
B
r
o
w
s
e
r
B
a
c
k
e
n
d
Action
Creator
Fetchr Service
Router
View
Store Dispatchr
Action
Creator
Fetchr
Client Server
GET /users/1
HTML
GET /api/users/2
Slide 84
Slide 84 text
Fluxibleの Service
Rendr的な構成
Serviceか ら バ ッ ク エ ン ド APIを 呼び 出す
Client Server (any)
Back
end
Server (JS)
Front
end
Front
end
Service
Fetchr
Back
end
Slide 85
Slide 85 text
Fluxibleの Service
Client Server (JS)
Back
end
Front
end
Front
end
Service
Fetchr
Serviceに ロ ジ ッ ク /デ ー タ ア ク セ ス を 実装
シ ン プ ル な構成