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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
210
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.1k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.6k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
320
Removing Corepack
yosuke_furukawa
PRO
9
1.9k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3k
Strip Types と Storage
yosuke_furukawa
PRO
4
490
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
2.9k
Other Decks in Programming
See All in Programming
Nuxt Server Components
wattanx
0
240
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
590
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
230
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
820
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.3k
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
440
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
140
アーキテクチャモダナイゼーションとは何か
nwiizo
3
250
AI Assistants for YourAngular Solutions @Angular Graz, March 2026
manfredsteyer
PRO
0
150
モダンOBSプラグイン開発
umireon
0
200
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
690
事業会社でのセキュリティ長期インターンについて
masachikaura
0
220
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
170
Visualization
eitanlees
150
17k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
650
Paper Plane (Part 1)
katiecoart
PRO
0
6.4k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
260
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
Building Applications with DynamoDB
mza
96
7k
30 Presentation Tips
portentint
PRO
1
270
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
260
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ͷ֦ு • Ϣʔβʔͷಈ͖༧ଌ