SlideShare a Scribd company logo
1 of 36
Download to read offline
Isomorphic
Architecture
&
Interface
2015/4/30 #isomorphic_meetup
Jack
● id: Jxck
● github: Jxck
● twitter: @jxck_
● about: http://jxck.io
● blog: http://jxck.hatenablog.com
● podcast: http://mozaic.fm
● Love: music
最近ぼんやり思ってるけど
固まりきってない話です
やみくもに
isomorphic isomorphic
 言ってませんか?
● ロジックの共有
● ブラウザ無しでテスト(大事)
● npm でモジュール管理
● アプリが両方で動く
よく言われる isomorphic
● logic の共有
○ あれ? validation しか共有できない。。
● browser 無しでテスト
○ でも結局ブラウザでしか動かさない。。
● npm でモジュール管理
○ それ babelify しただけちゃうん?
● アプリが両方で動く
○ いや、やりたいこと違うんだけど。。
やみくも isomorphic
何があり
何が無いか
● 部品
○ V-DOM
○ browserify
● module
○ ES6
○ npm
● WHATWG APIs
○ fetch
○ URL
○ Promise
○ Stream
○ etc
あるもの
● i8c なコードを生かすアーキテクチャ
● それを支える共通インタフェース
無いもの
アーキテクチャ
~2013
i8c とは View(DOM) に依存しないことだった
だいたいの話
C
V M
FrontEnd BackEnd
C
V M
対
象
外
?
2014
Nginx で終端
+lua で色々いじり放題
micro services 的な
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEnd
Nginxluamodule
2014末
V-DOM により
Rendering が View から切り離された。
だいたいの話ですって
Rendering 本当の対象外
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEnd
Nginxluamodule
2015
SW によりフロントにも Proxy Layer が入った。
まあ、考え方の一つとして
C
V M
FrontEnd BackEnd
C
V M
Nginxluamodule
ServiceWorker
Rendering
2016
Nginx に JS モジュールが入る?
http://nginx.com/blog/nginx-open-source-reflecting-back-and-looking-ahead/
予定です
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEnd
ServiceWorker
NginxJSmoduleRendering
i8c
Proxy のレイヤは何をするか
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEndMiddle Proxy
Nginx+JS
SW
この三つのレイヤが全て JS
Rendering
● Nginx は何をしていただろうか?
● SW は何ができるだろうか?
Proxy の役目
● Reverse
○ SSL 終端
○ IP フィルタ
○ ルーティング
● Forward
○ 圧縮
○ ヘッダ追加
○ コネクション保持
Nginx ができること
● プロトコルをオブジェクトに
● 変なのをフィルタリング
● 共通処理の代替
アプリが見える世界を奇麗にし、考えること
を減らす。
Nginx がしてきたこと
● 外界との中継
○ fetch/onfetch
○ websocket
○ onpush
● DOM 以外へのアクセス
○ storage
○ cache
○ UI との messaging
ServiceWorker ができること
● ネットワークアクセス
○ WebScoket か XHR か Push を吸収
○ イベントに変えてしまう
● ストレージアクセス
○ localStorage, IndexedDB を吸収
○ イベントに変えてしまう
● イベントでの抽象化
○ 余計な責務を UI 層から減らす
○ API が変わっても影響が閉じる
ServiceWorker が引き受けるもの
● プロトコルをオブジェクトに
● 変なのをフィルタリング
● 共通処理の代替
アプリが見える世界を奇麗にし、考えること
を減らす。
Nginx と同じ事ができるのでは?
i8c
アプリから見える世界を奇麗にするために
汚れ仕事を受け入れるレイヤ
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEndMiddle Proxy
Nginx+JS
SW
Protocol JS
Rendering
JS
3 つ目のレイヤとつなぎ
インタフェース
i8c
ここを繋ぐ決まりが無い
C
V M
C
V M
C
V M
C
V M
FrontEnd BackEndMiddle Proxy
Nginx+JS
SW
Protocol JS
Rendering
JS
3 つ目のレイヤとつなぎ
● 歴史的には
○ Request と Response を渡す
● 例
○ CGI
○ Servlet
○ Rack
○ PSGI
○ WSGI
○ Connect?
○ etc
ここのインタフェース
この部分の総称ってある?
● Connect
○ ミドルウェアが多い、枯れてる。
● でも Node 前提
○ 手前に Nginx 立てないの?
○ http module 依存
● WhatWG が定義した
○ fetch の仕様の一部
○ Request/Response class
● じゃあこれを返せばいいじゃん
○ 同期ではね
同期の場合
● 繋ぎっぱなし/Push
○ WebSocket
○ HTTP2
○ SSE
○ Coment
● その上のプロトコル
○ MQTT
○ JSON-LD
○ msgpk-rpc
○ grpc
● どうするか
非同期の場合
● Stream
○ Node ではおなじみ
○ WHATWG Streams 定義中
● 全て Stream に抽象化しよう
○ 非同期に最適
○ その上に色々すればいい
全てのものは Stream だ
Stream
// 同期の場合
// WHATWG Request class
// WHATWG Response class
function (request, response) {
};
// 非同期の場合
// WHATWG ReadableStream class
// WHATWG WritableStream class
function (readable, writable) {
};
本当に欲しいインタフェース
結果
FrontEnd BackEndMiddle Proxy
ProtocolJS JS
Req / Res
Readable /
Writetable
Req / Res
Readable /
Writetable
● middleware
○ connect middle の発展系
○ whatwg transform stream で流れを変える
● container
○ FW から面倒/共通な部分を引きはがす
○ MV* はお前が思う最強のでやればいい
● mindset
○ どっちで動くか?という考えからの脱却
○ インタフェースに依存する
○ やみくもにリソースを消費しない
エコシステム
● 今
○ 部品は揃った
○ 各々がやみくもに進んでる
● 提案
○ 枠組みを整えよう
○ 再利用/共有可能なモジュールを作ろう
● 理想
○ 車輪に載って FW が作れる
○ エコシステムの加速
i8c を加速する
● 効率よく
○ Web アプリはエコシステムで作るもの
○ 一人で全部を作る必要は無い
○ みんなで同じものを作る必要は無い
○ 本当に大事なアイデアに注力したい
● コアは?
○ Node/IO.js のコアも歩み寄って欲しい
○ module さえあれば i8c で no-browserify
● 進捗
○ やっと URL がパースできはじめた。。
○ https://github.com/Jxck/URL
やみくもな i8c から脱却しよう
thanks :)
Extend the Web Forward
Jack

More Related Content

What's hot

RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
Sea Mountain
 
120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs
Takayoshi Tanaka
 
Linux ユーザーからみた tizen
Linux ユーザーからみた tizenLinux ユーザーからみた tizen
Linux ユーザーからみた tizen
Naruto TAKAHASHI
 
Language toolを使ってみる
Language toolを使ってみるLanguage toolを使ってみる
Language toolを使ってみる
Takatsugu Nokubi
 

What's hot (20)

これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
 
XAML Standard
XAML StandardXAML Standard
XAML Standard
 
RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
 
120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs
 
Groovy joint
Groovy jointGroovy joint
Groovy joint
 
TypeScript + Express
TypeScript + ExpressTypeScript + Express
TypeScript + Express
 
PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境 PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境
 
30days Album の裏側 + 表側
30days Album の裏側 + 表側30days Album の裏側 + 表側
30days Album の裏側 + 表側
 
BluemixのNext DevOpsサービス「ToolChain」について
BluemixのNext DevOpsサービス「ToolChain」についてBluemixのNext DevOpsサービス「ToolChain」について
BluemixのNext DevOpsサービス「ToolChain」について
 
NuxtでChrome拡張作ってみた
NuxtでChrome拡張作ってみたNuxtでChrome拡張作ってみた
NuxtでChrome拡張作ってみた
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
 
New Relic with PHP
New Relic with PHPNew Relic with PHP
New Relic with PHP
 
Nuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなしNuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなし
 
Ohotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみようOhotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみよう
 
LT_Gitのfast fowardと継続的デリバリー
LT_Gitのfast fowardと継続的デリバリーLT_Gitのfast fowardと継続的デリバリー
LT_Gitのfast fowardと継続的デリバリー
 
Linux ユーザーからみた tizen
Linux ユーザーからみた tizenLinux ユーザーからみた tizen
Linux ユーザーからみた tizen
 
「かいろ」せいちょうものがたり
「かいろ」せいちょうものがたり「かいろ」せいちょうものがたり
「かいろ」せいちょうものがたり
 
Language toolを使ってみる
Language toolを使ってみるLanguage toolを使ってみる
Language toolを使ってみる
 
Kotlin界のsealed classはJava界でも『sealed』なのか
Kotlin界のsealed classはJava界でも『sealed』なのかKotlin界のsealed classはJava界でも『sealed』なのか
Kotlin界のsealed classはJava界でも『sealed』なのか
 
今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!
 

Similar to Isomorphic Architecture & Interface

Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方
Takahiro Fujiwara
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
Kouji Hosoda
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発
Y OCHI
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
Kentarou Mukunasi
 

Similar to Isomorphic Architecture & Interface (20)

Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
Walking front end
Walking front endWalking front end
Walking front end
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Chrome Packaged Apps
Chrome Packaged AppsChrome Packaged Apps
Chrome Packaged Apps
 
エンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったことエンジニアが Webを学ぶために やっててよかったこと
エンジニアが Webを学ぶために やっててよかったこと
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発
 
Introduction to NetOpsCoding
Introduction to NetOpsCodingIntroduction to NetOpsCoding
Introduction to NetOpsCoding
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Logcatの話
Logcatの話Logcatの話
Logcatの話
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
 
HTML5-pronama-study
HTML5-pronama-studyHTML5-pronama-study
HTML5-pronama-study
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 

More from Jxck Jxck

Gtug girls meetup web socket handson
Gtug girls meetup   web socket handsonGtug girls meetup   web socket handson
Gtug girls meetup web socket handson
Jxck Jxck
 
Nodefest2011-Live
Nodefest2011-LiveNodefest2011-Live
Nodefest2011-Live
Jxck Jxck
 

More from Jxck Jxck (20)

Http2 on go1.6rc2
Http2 on go1.6rc2Http2 on go1.6rc2
Http2 on go1.6rc2
 
ORTC SVC SimulCast
ORTC SVC SimulCastORTC SVC SimulCast
ORTC SVC SimulCast
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
 
Extensible web #html5j
Extensible web #html5jExtensible web #html5j
Extensible web #html5j
 
Extensible web
Extensible webExtensible web
Extensible web
 
HTTP2Study chronicle #http2conf
HTTP2Study chronicle #http2confHTTP2Study chronicle #http2conf
HTTP2Study chronicle #http2conf
 
mozaicfm-ep8 #altJS @ll-diver
mozaicfm-ep8 #altJS @ll-divermozaicfm-ep8 #altJS @ll-diver
mozaicfm-ep8 #altJS @ll-diver
 
Updates of socket.io@1.0
Updates of socket.io@1.0Updates of socket.io@1.0
Updates of socket.io@1.0
 
Why HTML Form dose not support PUT & DELETE ?
Why HTML Form dose not support PUT & DELETE ?Why HTML Form dose not support PUT & DELETE ?
Why HTML Form dose not support PUT & DELETE ?
 
Next generation web talk @cross2014
Next generation web talk @cross2014Next generation web talk @cross2014
Next generation web talk @cross2014
 
HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30
 
Network server in go #gocon 2013-11-14
Network server in go  #gocon 2013-11-14Network server in go  #gocon 2013-11-14
Network server in go #gocon 2013-11-14
 
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
 
Http2.0 Guide 2013-08-14 #http2study
Http2.0 Guide 2013-08-14 #http2studyHttp2.0 Guide 2013-08-14 #http2study
Http2.0 Guide 2013-08-14 #http2study
 
Gtug girls meetup web socket handson
Gtug girls meetup   web socket handsonGtug girls meetup   web socket handson
Gtug girls meetup web socket handson
 
Next generation web talk @cross2013
Next generation web talk @cross2013Next generation web talk @cross2013
Next generation web talk @cross2013
 
Nodefest2011-Live
Nodefest2011-LiveNodefest2011-Live
Nodefest2011-Live
 
Test it in Node.js
Test it in Node.jsTest it in Node.js
Test it in Node.js
 
Real Time App with Node.js
Real Time App with Node.jsReal Time App with Node.js
Real Time App with Node.js
 

Recently uploaded

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Isomorphic Architecture & Interface