$30 off During Our Annual Pro Sale. View Details »
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
1
290
7 Principles of Rich Web Apps
Node学園付属小学校の基調講演で話した『リッチなウェブアプリケーションのための7つの原則』の話です。
Yosuke Furukawa
PRO
January 16, 2016
Tweet
Share
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
170
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
4.7k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.4k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
280
Removing Corepack
yosuke_furukawa
PRO
9
1.7k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
2.9k
Strip Types と Storage
yosuke_furukawa
PRO
4
450
Module Harmony について
yosuke_furukawa
PRO
3
1.8k
LTのやり方
yosuke_furukawa
PRO
16
2.8k
Other Decks in Programming
See All in Programming
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
210
FluorTracer / RayTracingCamp11
kugimasa
0
190
Level up your Gemini CLI - D&D Style!
palladius
1
170
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
6.2k
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
1.9k
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
480
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
260
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
180
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
150
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
920
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Why Our Code Smells
bkeepers
PRO
340
57k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
Designing for Performance
lara
610
69k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Music & Morning Musume
bryan
46
7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
690
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
We Have a Design System, Now What?
morganepeng
54
7.9k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Context Engineering - Making Every Token Count
addyosmani
9
460
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ͷ֦ு • Ϣʔβʔͷಈ͖༧ଌ