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
20180827_PWA.pdf
Search
ozaki25
August 27, 2018
Technology
54
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20180827_PWA.pdf
ozaki25
August 27, 2018
More Decks by ozaki25
See All by ozaki25
20210526_a11y.pdf
ozaki25
0
210
20210525_react_next.pdf
ozaki25
0
160
Webフロントエンドはなぜ複雑なのか
ozaki25
1
150
utility first css
ozaki25
0
120
20201225_how_to_learn_technology.pdf
ozaki25
0
190
20201124_blitz.pdf
ozaki25
0
110
20200727_liff_app.pdf
ozaki25
1
680
20200721_web_vitals.pdf
ozaki25
0
130
20200624_web_otp_api.pdf
ozaki25
1
150
Other Decks in Technology
See All in Technology
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
310
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
3.1k
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
310
Making sense of Google’s agentic dev tools
glaforge
1
280
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.6k
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
320
シンガポールで登壇してきます
yama3133
0
240
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
240
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
210
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.2k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
The Limits of Empathy - UXLibs8
cassininazir
1
500
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
For a Future-Friendly Web
brad_frost
183
10k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Skip the Path - Find Your Career Trail
mkilby
1
170
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Transcript
1SPHSFTTJWF8FC"QQT
"HFOEB ֓ཁฤ ٕज़ฤ ·ͱΊ
֓ཁฤ
1SPHSFTTJWF8FC"QQTͱ w (PPHMFͷఏএ͢Δ࣍ੈͷ8FCΞϓϦͷ͜ͱ w ΑΓྑ͍ϢʔβମݧΛఏڙ͢ΔͨΊͷࢦඪ w '8͕ଘࡏ͢ΔΑ͏ͳͷͰͳ͍ w (PPHMF͕νΣοΫϦετΛެ։͍ͯ͠Δ͕ɺͦΕΒࣗલͰ ࣮͢Δඞཁ͕͋Δ
PWA Check List - https://developers.google.com/web/progressive-web-apps/checklist
ैདྷͷ8FCͱԿ͕ҧ͏ʁ w ϒϥβ"1*ͷൃలʹΑΓैདྷͷ8FCͰͰ͖ͳ͔ͬͨ͜ͱ͕Ͱ͖ ΔΑ͏ʹͳͬͨ w ϓογϡ௨ w ΦϑϥΠϯͰͷར༻ w ϗʔϜεΫϦʔϯͷΞΠίϯ͔Βىಈ
=> ϚαϓΰϣίϤϷͽͭ͡ͽͣ͡͵ͩ;͢WebͽΘݢᚆ
ͳͥࠓ18"ʁ w J04͕͔Β18"ͷίΞٕज़Ͱ͋Δ4FSWJDF8PSLFSʹରԠ w 4FSWJDF8PSLFSʹରԠ͢ΔϒϥβͷγΣΞ͕େ෯ʹ֦େ https://caniuse.com/#search=serviceworker
ઌਐࣄྫ w ܦిࢠ൛ IUUQTIBDLOJLLFJDPNCMPHOJLLFJGFBUVSFEBUHPPHMFJP w 4VVNP w 5XJUUFS-JUF w
5SJWBHP
ҰํੈͷதͰ w 18"ͱ͍͏୯ޠ͕όζϫʔυԽ w 18"ԽϗʔϜεΫϦʔϯʹՃͰ͖Δ͜ͱ w ʮ18"ͰԿ͔Ͱ͖ͳ͍͔ʁʯͱతͱखஈ͕ٯస w %FW0QT
"HJMFʑͱಉ͡ಓΛḷΓͭͭ͋Δ
18"ͱͷ͖߹͍ํ w 18"಄ͷഎܠʹ͋Δٕज़ཁૉΛཧղ͢Δ͜ͱ w ͦΕΒͷٕज़ཁૉͰԿΛ࣮ݱͰ͖Δ͔ཧղ͢Δ͜ͱ w ͦΕΒΛ౿·্͑ͨͰϢʔβମݧͷ্ʹͭͳ͕ΔػೳΛݟۃ Ί࠾༻Ͱ͖Δ͜ͱ
18"ͱͷ͖߹͍ํ w 18"಄ͷഎܠʹ͋Δٕज़ཁૉΛਖ਼͘͠ཧղ͢Δ͜ͱ 4FSWJDF8PSLFS 8FC"QQ.BOJGFTU 1VTI"1*ʑ w ͦΕΒͷٕज़ཁૉͰԿΛ࣮ݱͰ͖Δ͔ཧղ͢Δ͜ͱ ϓογϡ௨ɺϗʔϜεΫϦʔϯՃɺΦϑϥΠϯରԠʑ w
ͦΕΒΛ౿·্͑ͨͰϢʔβମݧͷ্ʹͭͳ͕ΔػೳΛݟۃ Ί࠾༻Ͱ͖Δ͜ͱ ࢦ͖͢ͱ͜Ζ͜͜ 18"Λ࡞Γ͍ͨͷͰͳ͘ 69্ͷखஈͷҰ͕ͭ18"
ٕज़ฤ
18"ΛऔΓרٕ͘ज़ w 4FSWJDF8PSLFS w $BDIF"1* w 8FC"QQ.BOJGFTU w ͦͷଞ
4FSWJDF8PSLFS w όοΫάϥϯυͰಈ࡞͢ΔϓϩάϥϚϒϧͳϩʔΧϧϓϩΩγ w ϦΫΤετϨεϙϯεͷΓऔΓʹհೖͰ͖Δ
4FSWJDF8PSLFS <!-- index.html --> <script> if ('serviceWorker' in navigator) {
navigator.serviceWorker.register(‘/sw.js') .then(registration => { console.log('registration successful'); }).catch(() => { console.log('registration failed'); }); } </script> // sw.js self.addEventListener('install', event => { console.log('install service worker'); }); self.addEventListener('activate', event => { console.log('activate service worker'); }); self.addEventListener('fetch', event => { console.log('intercept fetch request'); }); 4FSWJDF8PSLFSͷొॲཧ
$BDIF"1* w ίϯςϯπΛ$BDIFʹอଘ͢Δ͜ͱ͕Ͱ͖Δ
$BDIF"1* const CACHE_NAME = ‘pwa-sample-v1'; const urlsToCache = [ '/assets/css/styles.css',
'/assets/js/main.js', ]; self.addEventListener('install', event => { event.waitUntil( caches .open(CACHE_NAME) .then(cache => cache.addAll(urlsToCache)) .catch(console.log) ); }); self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(res => { if (res) { console.log('exist in cache'); // cacheʹ͋ͬͨΒͦΕΛฦ͢ return res; } else { console.log('not exist in cache'); // cacheʹͳ͚Ε௨৴ͯͦ͠ͷ݁ՌΛฦ͢ return fetch(event.request); } }) ); }); ىಈ࣌ʹ$BDIFʹอଘ $BDIFʹ͋Ε௨৴͠ͳ͍
8FC"QQ.BOJGFTU w NBOJGFTUϑΝΠϧΛ༻ҙ͢Δ͜ͱͰΠϯετʔϧͰ͖ΔΑ͏ʹ ͳΔ w εϓϥογϡը໘ΞΠίϯͷઃఆͰ͖Δ w ϒϥβͷόʔͳ͠Ͱશը໘දࣔͰ͖Δ w 1$ͰσεΫτοϓΞϓϦͱͯ͠ΠϯετʔϧͰ͖Δ
8FC"QQ.BOJGFTU NBOJGFTUϑΝΠϧΛ࡞ͬͯIUNMͰಡΈࠐΉ͚ͩ // manifest.json { "name": “React Handson",
"short_name": "ReactHandson", "start_url": "/", "display": “standalone", "orientation": "any", "background_color": "#f5fcff", "theme_color": "#222222", "icons": [ { "src": "/assets/img/icon_072.png", "sizes": "72x72", "type": "image/png" } ] } <!— index.html —> <link rel="manifest" href=“/manifest.json">
8FC"QQ.BOJGFTU Πϯετʔϧϓϩϯϓτͷ੍ޚ // main.js let deferredPrompt; const button
= document.getElementById('install-button'); // Chrome͕ग़͢ϓϩϯϓτΛࢭ͠ୀආ͓ͯ͘͠ addEventListener('beforeinstallprompt', function(e) { e.preventDefault(); deferredPrompt = e; button.disabled = false; return false; }); // ϘλϯΛΫϦοΫͨ͠Βୀආ͓͍ͯͨ͠ϓϩϯϓτදࣔॲཧΛ࣮ߦ button.addEventListener('click', function() { if(deferredPrompt !== undefined) { deferredPrompt.prompt(); deferredPrompt = null; } });
ͦͷଞ w 1VTI"1* w ϓογϡ௨ w #BDLHSPVOE4ZOD"1* w όοΫάϥϯυಉظ w
8FC"VUIFOUJDBUJPO"1* w ೝূͷࣗಈԽ w 1BZNFOU3FRVFTU"1* w ܾࡁը໘ͷڞ௨6* w *NBHF$BQUVSF"1* w ΧϝϥͷΞΫηε w 8FC4IBSF"1* w 4/4γΣΞͷڞ௨6*
18"ؔ࿈πʔϧ w 18"#VJMEFS w .JDSPTPGU w طଘαΠτΛΠϯϓοτʹNBOJGFTUTXKTͷܗΛੜ w 8PSLCPY w
(PPHMF w $BDIFཧΛ༰қʹ͢ΔϥΠϒϥϦ w ࠾༻ࣄྫΛΑ͘ฉ͘
·ͱΊ
18"ͷ͍͍ͱ͜Ζ w ωΠςΟϒPS8FCΛݕ౼͢Δࡍͷબࢶ͕֦େͨ͠ w ఏڙ͍ͨ͠αʔϏεͷੑ࣭ʹΑͬͯΞϓϦͱ8FCͷ͍͍ͱ͜ औΓ͕Ͱ͖Δ w Ұ෦ͷػೳ͚ͩͰϢʔβମݧͷ্ʹͭͳ͛Δ͜ͱ͕Ͱ͖Δ
18"ͷ՝ w ར༻Մೳͳϒϥβ੍͕ݶ͞Εͨػೳ͕ଟ w ຊͰJ04Ͱ͑Δ͔Ͳ͏͔ͷӨڹ͕େ͖͍ w ·ͩϊϋ͕গͳ͍ͷͰϋϚΓͲ͜Ζଟ͍ w Ωϟογϡઓུ w
J04ͰͷΔϘλϯ w ϓογϡ௨ڐՄͷλΠϛϯά
·ͱΊ w "1*ͷൃలʹΑΓ8FCͰͰ͖Δ͜ͱ͕֦େͨ͠ w ͦΕΒΛ׆༻ͯ͠ϢʔβମݧΛ্ͤͨ͞ΞϓϦ͕18" w Կ͕Ͱ͖Δ͔ཧղ͠దʹ͍͚Δ͜ͱ͕େ w ݱঢ়ະରԠϒϥβଟ͍͕ࠓޙʹ͚ͯΥον͍ͯ͘͠ ͖
͋Γ͕ͱ͏͍͟͝·ͨ͠