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
56
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
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
150
モバイルアプリ開発概論2026
recruitengineers
PRO
6
670
LanceDB入門
mocobeta
9
600
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
330
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.5k
コーチングの奥義 何もしないテクニック
jinwatanabe
0
110
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
2
380
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
660
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
200
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
100
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
260
The Mindset for Success: Future Career Progression
greggifford
PRO
0
450
Balancing Empowerment & Direction
lara
6
1.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Deep Space Network (abreviated)
tonyrice
0
260
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
The SEO identity crisis: Don't let AI make you average
varn
0
530
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Evolving SEO for Evolving Search Engines
ryanjones
0
260
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 ݱঢ়ະରԠϒϥβଟ͍͕ࠓޙʹ͚ͯΥον͍ͯ͘͠ ͖
͋Γ͕ͱ͏͍͟͝·ͨ͠