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
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
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
9
3.7k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.1k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
230
Removing Corepack
yosuke_furukawa
PRO
9
1.6k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
2.8k
Strip Types と Storage
yosuke_furukawa
PRO
4
410
Module Harmony について
yosuke_furukawa
PRO
3
1.7k
LTのやり方
yosuke_furukawa
PRO
16
2.6k
AppRouter Panel Talk
yosuke_furukawa
PRO
3
810
Other Decks in Programming
See All in Programming
CursorはMCPを使った方が良いぞ
taigakono
1
180
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
240
Select API from Kotlin Coroutine
jmatsu
1
190
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
20
3.6k
技術同人誌をMCP Serverにしてみた
74th
1
360
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
100
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
220
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
150
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
250
Team operations that are not burdened by SRE
kazatohiei
1
210
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Code Review Best Practice
trishagee
68
18k
Statistics for Hackers
jakevdp
799
220k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
GraphQLとの向き合い方2022年版
quramy
48
14k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
How to train your dragon (web standard)
notwaldorf
93
6.1k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Building an army of robots
kneath
306
45k
Designing for humans not robots
tammielis
253
25k
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ͷ֦ு • Ϣʔβʔͷಈ͖༧ଌ