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
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
人間はどの意思決定を手放せるのか
kawasima
14
7k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
610
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
1
110
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
150
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
160
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.3k
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
1
150
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
0
140
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
630
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
品質と信頼性を地続きにする
grimoh
0
460
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.3k
Accessibility Awareness
sabderemane
1
210
4 Signs Your Business is Dying
shpigford
187
23k
For a Future-Friendly Web
brad_frost
183
10k
Agile that works and the tools we love
rasmusluckow
331
22k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
WENDY [Excerpt]
tessaabrams
14
39k
Making the Leap to Tech Lead
cromwellryan
135
10k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
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 ݱঢ়ະରԠϒϥβଟ͍͕ࠓޙʹ͚ͯΥον͍ͯ͘͠ ͖
͋Γ͕ͱ͏͍͟͝·ͨ͠