isomorphic architecture & interface

36
Isomorphic Architecture & Interface 2015/4/30 #isomorphic_meetup

Upload: jxck-

Post on 29-Jul-2015

2.873 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Isomorphic Architecture & Interface

IsomorphicArchitecture

&Interface2015/4/30 #isomorphic_meetup

Page 2: Isomorphic Architecture & Interface

Jack

● id: Jxck● github: Jxck● twitter: @jxck_● about: http://jxck.io● blog: http://jxck.hatenablog.com● podcast: http://mozaic.fm● Love: music

Page 3: Isomorphic Architecture & Interface

最近ぼんやり思ってるけど

固まりきってない話です

Page 4: Isomorphic Architecture & Interface

やみくもに

isomorphic isomorphic

 言ってませんか?

Page 5: Isomorphic Architecture & Interface

● ロジックの共有

● ブラウザ無しでテスト(大事)

● npm でモジュール管理

● アプリが両方で動く

よく言われる isomorphic

Page 6: Isomorphic Architecture & Interface

● logic の共有

○ あれ? validation しか共有できない。。

● browser 無しでテスト

○ でも結局ブラウザでしか動かさない。。

● npm でモジュール管理

○ それ babelify しただけちゃうん?

● アプリが両方で動く

○ いや、やりたいこと違うんだけど。。

やみくも isomorphic

Page 7: Isomorphic Architecture & Interface

何があり

何が無いか

Page 8: Isomorphic Architecture & Interface

● 部品

○ V-DOM○ browserify

● module○ ES6○ npm

● WHATWG APIs○ fetch○ URL○ Promise○ Stream○ etc

あるもの

Page 9: Isomorphic Architecture & Interface

● i8c なコードを生かすアーキテクチャ

● それを支える共通インタフェース

無いもの

Page 10: Isomorphic Architecture & Interface

アーキテクチャ

Page 11: Isomorphic Architecture & Interface

~2013

i8c とは View(DOM) に依存しないことだった

だいたいの話

C

V M

FrontEnd BackEnd

C

V M

対象外?

Page 12: Isomorphic Architecture & Interface

2014

Nginx で終端+lua で色々いじり放題

micro services 的な

CV M

CV M

CV M

C

V M

FrontEnd BackEnd

Nginx lua m

odule

Page 13: Isomorphic Architecture & Interface

2014末

V-DOM により Rendering が View から切り離された。

だいたいの話ですって

Rendering 本当の対象外

CV M

CV M

CV M

C

V M

FrontEnd BackEnd

Nginx lua m

odule

Page 14: Isomorphic Architecture & Interface

2015

SW によりフロントにも Proxy Layer が入った。

まあ、考え方の一つとして

C

V M

FrontEnd BackEnd

C

V MN

ginx lua module

Service W

orkerRendering

Page 15: Isomorphic Architecture & Interface

2016

Nginx に JS モジュールが入る?http://nginx.com/blog/nginx-open-source-reflecting-back-and-looking-ahead/

予定です

CV M

CV M

CV M

C

V M

FrontEnd BackEnd

Service W

orker

Nginx JS

module

Rendering

Page 16: Isomorphic Architecture & Interface

i8c

Proxy のレイヤは何をするか

CV M

CV M

CV M

C

V M

FrontEnd BackEndMiddle Proxy

Nginx + JS

SW

この三つのレイヤが全て JS

Rendering

Page 17: Isomorphic Architecture & Interface

● Nginx は何をしていただろうか?

● SW は何ができるだろうか?

Proxy の役目

Page 18: Isomorphic Architecture & Interface

● Reverse○ SSL 終端

○ IP フィルタ

○ ルーティング

● Forward○ 圧縮

○ ヘッダ追加

○ コネクション保持

Nginx ができること

Page 19: Isomorphic Architecture & Interface

● プロトコルをオブジェクトに

● 変なのをフィルタリング

● 共通処理の代替

アプリが見える世界を奇麗にし、考えること

を減らす。

Nginx がしてきたこと

Page 20: Isomorphic Architecture & Interface

● 外界との中継

○ fetch/onfetch○ websocket○ onpush

● DOM 以外へのアクセス

○ storage○ cache○ UI との messaging

ServiceWorker ができること

Page 21: Isomorphic Architecture & Interface

● ネットワークアクセス

○ WebScoket か XHR か Push を吸収

○ イベントに変えてしまう

● ストレージアクセス

○ localStorage, IndexedDB を吸収

○ イベントに変えてしまう

● イベントでの抽象化

○ 余計な責務を UI 層から減らす

○ API が変わっても影響が閉じる

ServiceWorker が引き受けるもの

Page 22: Isomorphic Architecture & Interface

● プロトコルをオブジェクトに

● 変なのをフィルタリング

● 共通処理の代替

アプリが見える世界を奇麗にし、考えること

を減らす。

Nginx と同じ事ができるのでは?

Page 23: Isomorphic Architecture & Interface

i8c

アプリから見える世界を奇麗にするために汚れ仕事を受け入れるレイヤ

CV M

CV M

CV M

C

V M

FrontEnd BackEndMiddle Proxy

Nginx + JS

SW

Protocol JS

Rendering

JS

3 つ目のレイヤとつなぎ

Page 24: Isomorphic Architecture & Interface

インタフェース

Page 25: Isomorphic Architecture & Interface

i8c

ここを繋ぐ決まりが無い

CV M

CV M

CV M

C

V M

FrontEnd BackEndMiddle Proxy

Nginx + JS

SW

Protocol JS

Rendering

JS

3 つ目のレイヤとつなぎ

Page 26: Isomorphic Architecture & Interface

● 歴史的には

○ Request と Response を渡す

● 例

○ CGI○ Servlet○ Rack○ PSGI○ WSGI○ Connect?○ etc

ここのインタフェースこの部分の総称ってある?

Page 27: Isomorphic Architecture & Interface

● Connect○ ミドルウェアが多い、枯れてる。

● でも Node 前提

○ 手前に Nginx 立てないの?

○ http module 依存

● WhatWG が定義した

○ fetch の仕様の一部

○ Request/Response class● じゃあこれを返せばいいじゃん

○ 同期ではね

同期の場合

Page 28: Isomorphic Architecture & Interface

● 繋ぎっぱなし/Push○ WebSocket○ HTTP2○ SSE○ Coment

● その上のプロトコル○ MQTT○ JSON-LD○ msgpk-rpc○ grpc

● どうするか

非同期の場合

Page 29: Isomorphic Architecture & Interface

● Stream○ Node ではおなじみ

○ WHATWG Streams 定義中

● 全て Stream に抽象化しよう

○ 非同期に最適

○ その上に色々すればいい

全てのものは Stream だ

Stream

Page 30: Isomorphic Architecture & Interface

// 同期の場合

// WHATWG Request class

// WHATWG Response class

function (request, response) {

};

// 非同期の場合

// WHATWG ReadableStream class

// WHATWG WritableStream class

function (readable, writable) {

};

本当に欲しいインタフェース

Page 31: Isomorphic Architecture & Interface

結果

FrontEnd BackEndMiddle Proxy

ProtocolJS JS

Req / Res

Readable / Writetable

Req / Res

Readable / Writetable

Page 32: Isomorphic Architecture & Interface

● middleware○ connect middle の発展系

○ whatwg transform stream で流れを変える

● container○ FW から面倒/共通な部分を引きはがす

○ MV* はお前が思う最強のでやればいい

● mindset○ どっちで動くか?という考えからの脱却

○ インタフェースに依存する

○ やみくもにリソースを消費しない

エコシステム

Page 33: Isomorphic Architecture & Interface

● 今○ 部品は揃った

○ 各々がやみくもに進んでる

● 提案○ 枠組みを整えよう

○ 再利用/共有可能なモジュールを作ろう

● 理想○ 車輪に載って FW が作れる

○ エコシステムの加速

i8c を加速する

Page 34: Isomorphic Architecture & Interface

● 効率よく○ Web アプリはエコシステムで作るもの

○ 一人で全部を作る必要は無い

○ みんなで同じものを作る必要は無い

○ 本当に大事なアイデアに注力したい

● コアは?○ Node/IO.js のコアも歩み寄って欲しい

○ module さえあれば i8c で no-browserify

● 進捗○ やっと URL がパースできはじめた。。

○ https://github.com/Jxck/URL

やみくもな i8c から脱却しよう

Page 35: Isomorphic Architecture & Interface

thanks :)Extend the Web Forward

Page 36: Isomorphic Architecture & Interface

Jack