Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
7 Principles of Rich Web Apps
Search
Yosuke Furukawa
PRO
January 16, 2016
Programming
300
1
Share
7 Principles of Rich Web Apps
Node学園付属小学校の基調講演で話した『リッチなウェブアプリケーションのための7つの原則』の話です。
Yosuke Furukawa
PRO
January 16, 2016
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
220
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.1k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.7k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
330
Removing Corepack
yosuke_furukawa
PRO
9
1.9k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
500
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
2.9k
Other Decks in Programming
See All in Programming
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
Making the RBS Parser Faster
soutaro
0
720
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
450
開発とはなにか、Essenceカーネルで見えるもの
ukin0k0
0
180
Cloudflare で始める Data Platform
ta93abe
0
170
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
390
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.7k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
0
150
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
350
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
150
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
180
🦞OpenClaw works with AWS
licux
1
370
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
300
The SEO Collaboration Effect
kristinabergwall1
1
450
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
300
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Design in an AI World
tapps
1
210
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
140
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
220
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
910
Transcript
7 principles of Rich Web Applications @yosuke_furukawa
Twitter: @yosuke_furukawa Github: yosuke-furukawa
Node.jsຊϢʔβʔάϧʔϓද io.js Evangelist / io.js Collaborator
WebApps 2016
7 principles of Rich Web Applications • socket.io ͷ࡞ऀ •
Guillermo Rauch ࢯఏএ • ༁ • http://yosuke-furukawa.hatenablog.com/entry/2014/11/14/141415
7 principles of Rich Web Applications • αʔόʔͰϖʔδΛϨϯμϦϯά͢Δ • ϢʔβʔͷೖྗʹਝʹԠ͢Δ
• σʔλͷมߋʹԠ͢Δ • αʔόʔͱͷσʔλަΛίϯτϩʔϧ͢Δ • historyΛյ͢ͳɺhistoryΛ֦ு͠Ζ • ίʔυͷߋ৽Λαʔόʔ͔ΒPush͢Δ • ৼΔ͍Λ༧ଌ͢Δ
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ • server side web apps vs single page
apps • ͜͏͍͏ରཱߏͰޠΒΕͯ͘Δ͜ͱ͕ଟ͍ • Α͋͘Δͷ “SEO” ͷͨΊʹαʔόʔαΠυϨ ϯμϦϯάͨ͠ํ͕͍͍ͱ͍͏ͷɻ • UXͱੑೳΛ࠷దʹ͢Δʹ྆ํΔͷ͕Ұ൪ྑ͍
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ • Ͳ͜·Ͱ͘ͳͬͯϨΠςϯγ(ߦ͔ͬͯΒ ؼͬͯ͘Δ·Ͱͷ࣌ؒ)ͱ͍͏ͷ͕͋Δ • Boston <=> Stanford ؒͳΒݱ࣌Ͱ
50ms • SPAॳظϖʔδͷϩʔυʹ͓͍ͯෆར
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ • SPAॳظϖʔδͷϩʔυʹ͓͍ͯෆར • ߦ͔ͬͯΒؼͬͯ͘Δ·Ͱͷ͕͔͔࣌ؒΔɻ • JSONΛड͚औͬͯϖʔδΛߏ͠ɺimage audioͳͲͷใΛΒ͏ɻɻɻ
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ • ͡Ό͋Ͳ͏͢Δ͔ʁ • ॳظϖʔδͷϩʔυͰαʔόʔαΠυϨϯμϦ ϯά • ͦͷޙͷߋ৽SPAͰΔ •
ϋΠϒϦουͷΞϓϩʔνͰϨΠςϯγΛ࠷খݶ ʹͯ͠ɺUXੑೳ࠷దԽ͢Δɻ
αʔόʔͰϖʔδΛϨϯμϦ ϯά͢Δ • ํ๏ʁ • isomorphic web application • universal
web apps ͰޠΒΕͯΔ • fluxibleWeb Application Frameworkͷ࣮ ͋Δɻ
ϢʔβʔͷೖྗʹਝʹԠ͢ Δ • Googleͷྫ
ϢʔβʔͷೖྗʹਝʹԠ͢ Δ • CloudUpͷྫ
ϢʔβʔͷೖྗʹਝʹԠ͢ Δ • ͲΜͳʹϨΠςϯγΛԼ͛ͯݶք͕͋Δ • ޫͷʹউͯͳ͍ • Ұ୴ΫϥΠΞϯτଆͰԠ͍ͯ͠ΔࣄΛද͢
ϢʔβʔͷೖྗʹਝʹԠ͢ Δ • ͲΜͳʹϨΠςϯγΛԼ͛ͯݶք͕͋Δ • ޫͷʹউͯͳ͍ • Ұ୴ΫϥΠΞϯτଆͰԠ͍ͯ͠ΔࣄΛද͢ • ʢ͝·͔͢ͱݴ͏ʣ
ϢʔβʔͷೖྗʹਝʹԠ͢ Δ • ͳΜΒ͔ͷԠΛࣔͯ͋͛͠Δɻ • ࠷ۙͰRAILͱ͍͏ݴ༿͋Γɺݪଇʹैͬ ͯ։ൃ͢Δࣄ͕ॏཁɻ
σʔλͷมߋʹԠ͢Δ
σʔλͷมߋʹԠ͢Δ • ߋ৽ॲཧΛߦΘ࣮ͯ͘ࡍʹσʔλΛಉظ͢ Δɻ • มߋ͕ൃੜͨ͠ΒͦͷσʔλΛมߋ͢Δɻ
σʔλͷมߋʹԠ͢Δ • ํ๏ • WebSocketͷσʔλߋ৽ݕͷΈΛ ݕ౼͢Δ
αʔόʔͱͷσʔλަΛίϯ τϩʔϧ͢Δɻ • ͖ͬ͞ͷͭʹࣅͯΔ͚Ͳͪΐͬͱҧ͏ɻ • σʔλͷߋ৽ͷࣦഊΛϋϯυϦϯά͢Δɻ • ੲPOSTʹࣦഊ͢Δͱ͜͏͍͏Τϥʔϝοηʔδ ͕ग़ͯͨɻ
αʔόʔͱͷσʔλަΛίϯ τϩʔϧ͢Δɻ • ࠓͰXHR͋Δ͠ɺWebSocketͳͲ͋ ΔɻJavaScriptͰͳΜͰϋϯυϦϯάͰ͖Δ ࣌ʹͳ͍ͬͯΔɻ • ະདྷͰServiceWorker͕͋ΓɺΦϑϥΠϯʹ ͳͬͯߋ৽͢Δ͜ͱ͕Ͱ͖Δɻ
αʔόʔͱͷσʔλަΛίϯ τϩʔϧ͢Δɻ • ํ๏ • ServiceWorker ʹΑΔόοΫάϥϯυͰͷ σʔλަ • WebSocketΛͬͨσʔλ௨৴ɾϦτϥΠ
historyΛյ͢ͳhistoryΛ֦ு ͠Α͏
historyΛյ͢ͳhistoryΛ֦ு ͠Α͏
historyΛյ͢ͳhistoryΛ֦ு ͠Α͏
historyΛյ͢ͳhistoryΛ֦ு ͠Α͏ • ํ๏ • historyͷ֦ுΛݕ౼͢Δ • history.pushState/popState/replaceState • localStorageͷݕ౼ͳͲ
ίʔυͷߋ৽Λpush͠Α͏ • Demo • http://gaearon.github.io/react-hot-loader/
ίʔυͷߋ৽Λpush͠Α͏ • ํ๏ • react hot loaderͳͲͷhot loaderͷݕ౼ • Server
push websocket ʹΑΔίʔυม ߋͷ࣮ࢪ
ৼΔ͍Λ༧ଌ͠Α͏ • ϨΠςϯγʔͷนΛ͑Ζ
ৼΔ͍Λ༧ଌ͠Α͏ • Ϣʔβʔͷಈ͖Λ༧ଌ͢Δɻ • Google Map ͷઌಡΈͷΑ͏ͳߟ͑ • ํ๏·ཱͩ֬͞Ε͍ͯͳ͍ɻɻ
·ͱΊ • αʔόʔͰϖʔδΛϨϯμϦϯά͢Δ • ϢʔβʔͷೖྗʹਝʹԠ͢Δ • σʔλͷมߋʹԠ͢Δ • αʔόʔͱͷσʔλަΛίϯτϩʔϧ͢Δ •
historyΛյ͢ͳɺhistoryΛ֦ு͠Ζ • ίʔυͷߋ৽Λαʔόʔ͔ΒPush͢Δ • ৼΔ͍Λ༧ଌ͢Δ
JavaScriptͷςΫϊϩδʔͰ΄ ΅࣮ݱͰ͖Δɻ • fluxibleͳͲͷisomorphic web application framework ͷݕ౼ • RAILͳͲͷํ๏
• WebSocket ͷػߏ • ServiceWorker ͰͷωοτϫʔΫ֦ு • historyͷ֦ு • Ϣʔβʔͷಈ͖༧ଌ