Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20180827_PWA.pdf
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ozaki25
August 27, 2018
Technology
57
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
690
20200721_web_vitals.pdf
ozaki25
0
130
20200624_web_otp_api.pdf
ozaki25
1
150
Other Decks in Technology
See All in Technology
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
180
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
290
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
160
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
310
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
910
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
840
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
120
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1k
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Building the Perfect Custom Keyboard
takai
2
900
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
A Modern Web Designer's Workflow
chriscoyier
699
190k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Skip the Path - Find Your Career Trail
mkilby
1
260
Google's AI Overviews - The New Search
badams
0
1.6k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Crafting Experiences
bethany
1
380
Amusing Abliteration
ianozsvald
1
340
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 ݱঢ়ະରԠϒϥβଟ͍͕ࠓޙʹ͚ͯΥον͍ͯ͘͠ ͖
͋Γ͕ͱ͏͍͟͝·ͨ͠