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
ただしく学ぼうPWA
Search
ikasoumen
March 29, 2018
Technology
710
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ただしく学ぼうPWA
ikasoumen
March 29, 2018
More Decks by ikasoumen
See All by ikasoumen
Sharing type definitions between TypeScript And Dart
ikasoumen
0
920
pixiv chatstory の PWA としての取り組み
ikasoumen
5
6.4k
Ionic 4 の話
ikasoumen
0
140
Angular + Ionicを使って iOSエンジニアにもやさしいPWA開発をした話
ikasoumen
0
940
Other Decks in Technology
See All in Technology
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
130
自主式軟體工廠
philipz
0
230
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
510
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
0
280
FOSS4Gを活用した自治体業務DXの試み
470715
0
100
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
230
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
140
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
360
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
310
3つのアプローチで目指す チームを強くするAI駆動開発
thkt
0
120
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
140
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Deep Space Network (abreviated)
tonyrice
0
360
Amusing Abliteration
ianozsvald
1
330
Writing Fast Ruby
sferik
630
63k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
ֶͨͩ͘͠΅͏18" ikasoumen 2018/03/29 ԬPWAษڧձ #01
w JLBTPVNFO w UXJUUFS!@JLBTPVNFO w ϐΫγϒԬΦϑΟε w ͓ֆ͔͖ͱ8FCٕज़͕͖ͳΤϯδχΞͰ͢ ࣗݾհ 2
Google Pixel By Victor Stuber www.VictorStuber.com × PWA (C)KAGEROU PROJECTʗ1st
PLACEʗEDWORD RECORDSʗpixiv
w ʮωΟςΟϒΞϓϦ͕ஔ͖ΘΔ͔ʜʯ w ʮͳΜ͔ΦϑϥΠϯͰ͑Δͬͯฉ͖·ͨ͠ʂʯ w ʮ͋ΕͰ͠ΐɺϗʔϜը໘ʹՃͰ͖ΔͭͰ͠ΐʁʯ w ʮ 6*͕ͻͲ͍͔Β 18"͕དྷΔͬͯݴ͍ͬͯΔΤϯδχΞ
ࠓ͙ࣙ͢ΊΖʯ 18"ͱ࣮ࡍͲ͏͍͏ͷͳͷ͔ɺ ೝ͕ࣝ;Θͬͱ͍ͯ͠Δ 18"ͬͯͪΌΜͱͬͯΔʁ 4
w 18"ͷ࡞ΓํͱɺͰ͖Δ͜ͱΛͪΌΜͱΖ͏ w ֤ϒϥβͷಈ w ࣮ࡍʹ·ͬͨ͜ͱ ࠓ͢͜ͱ 5
18"1SPHSFTTJWF8FC"QQ 6 ϓϩάϨογϒɾΤϯϋϯεϝϯτ ϓϩάϨογϒΤϯϋϯεϝϯτɺ֩ͱͳΔίϯςϯπΛ࠷ ॏཁࢹ͢ΔΣϒσβΠϯઓུͰ͋Δɻ ͜ͷઓུͰɺΤϯυϢʔβʔͷϒϥβʔΠϯλʔωοτ ଓʹ߹ΘͤͯɺϓϨθϯςʔγϣϯ໘ػೳ໘Ͱඍົʹҟͳ Δ༰ٕज़తʹࠔͳ༰Λίϯςϯπʹ࣍Ճ͍ͯ͘͠ɻ w IUUQTKBXJLJQFEJBPSHXJLJϓϩάϨογϒΤϯϋϯεϝϯτ
w ཁ͢Δʹ w ݹ͍ϒϥβͰجຊͱͳΔίϯςϯπΛݟΒΕΔ w ৽͍͠ϒϥβͰ͋ΕΑΓྑ͍ମݧ͕ಘΒΕΔ w طଘͷ8FCαΠταʔϏεΛஔ͖͑Δ·ͬͨ͘৽͍͠ Կ͔ɺͱ͍͏Θ͚Ͱͳ͍ 18"1SPHSFTTJWF8FC"QQ
7
w ʮ3FBDUͱ͔CBCFMͱ͔Θͳ͍ͱಋೖͰ͖ͳ͍ΜͰ͠ΐ ͏ʁʯ w ʮ࠷ۙͷ+BWB4DSJQUࣄΘ͔ΒΜʜɻʯ w ͦΜͳ͜ͱͳ͍Αʂ w ͪΖΜ࠷৽ͷ+BWB4DSJQUͰͷ։ൃελΠϧ͕ಋೖ͞Εͯ Δͱ։ൃʹศརͳ෦͋Δ
w Ͱ)5.-Ͱͪΐͬͱ֎෦ϑΝΠϧΛಡΈࠐΉͱ͜Ζ͔Β ಋೖͰ͖Δ Α͋͘Γͦ͏ͳ18"ͷΠϝʔδ 8
18"ͷ࡞Γํ
w ͋ͳͨͷ8FCαΠτΛ18"Խ͢ΔେࣄͳϝϯόʔͰ͢ 4FSWJDF8PSLFS 8FC"QQ.BOJGFTU ొਓ 10
w ௨ৗͷ+BWB4DSJQUͱҟͳΔϥΠϑαΠΫϧͰಈ࡞͢Δε ΫϦϓτ w 8FCαΠτʹΞΫηε͞ΕΔλΠϛϯάͰΠϯετʔϧ ͞ΕΔ w 8FCαΠτʹΞΫηεதͰͳ࣮ͯ͘ߦͰ͖Δ w ఆظతʹ4FSWJTF8PSLFSࣗମͷߋ৽͕νΣοΫ͞Εɺߋ
৽͕͋ΕΞοϓσʔτ͞ΕΔ ొਓ4FSWJDF8PSLFS 11
ª 12 ྫ // sw.js self.addEventListener('install', (event) => { //
install࣌ʹߦΘΕΔॲཧ… }); self.addEventListener('fetch', (event) => { // fetch࣌ʹߦΘΕΔॲཧ… }); w 4FSWJDF8PSLFSࣗମͷϥΠ ϑαΠΫϧʹ߹Θͤͯɺ Πϕϯτ͕ఆٛ͞Ε͍ͯΔ
ª 13 Πϯετʔϧ if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(function(registration)
{ // ొޭ࣌ͷॲཧ }).catch(function(err) { // ొࣦഊ࣌ͷॲཧ }); } w +BWB4DSJQUଆͰӈͷॲཧΛ ݺΜͰɺ4FSWJDF8PSLFSΛ 8FCαΠτʹΠϯετʔϧ ͢Δ
w 4FSWJDF8PSLFSεΫϦϓτ͕ɺΠϯετʔϧ͍ͨ͠ 8FCαΠτͱಉ͡υϝΠϯͰఏڙ͞Ε͍ͯΔ w )5514ͰαΠτ͕ఏڙ͞Ε͍ͯΔ 4FSWJDF8PSLFSͷ੍ 14
w 4FSWJDF8PSLFSΛΠϯετʔϧͨ͠8FCαΠτʹ ࠶ΞΫηε͢ΔͳͲͷλΠϛϯάͰɺ4FSWJDF8PSLFS͕ ߋ৽͞Ε͍ͯͳ͍͔όοΫάϥϯυͰνΣοΫ͞ΕΔɻ w ࠷৽൛͕͋ͬͨ߹ʹɺجຊతʹ࣍ͷΞΫηε͔Βͦͷ 4FSWJDF8PSLFSΛ͏ɻ͙͢ʹ͏͜ͱͰ͖Δɻ 4FSWJTF8PSLFSͷΞοϓσʔτ 15
w JOTUBMM w 4FSWJDF8PSLFS͕Πϯετʔϧ͞ΕΔͱൃՐ w ΦϑϥΠϯରԠʹඞཁͳΞηοτΛΩϟογϡ͢Δࡍʹ Α͘͏ w IUUQTEFWFMPQFSTHPPHMFDPNXFCGVOEBNFOUBMT QSJNFSTTFSWJDFXPSLFST
IMKBTFSWJDF@XPSLFS@ ϥΠϑαΠΫϧΠϕϯτJOTUBMM 16
w BDUJWBUF w 4FSWJDF8PSLFS͕ߋ৽͞Εɺ༗ޮʹͳΔͱൃՐ w ҎલΠϯετʔϧͨ͠ΩϟογϡΛআ͢ΔࡍʹΑ͘ ͏ w IUUQTEFWFMPQFSTHPPHMFDPNXFCGVOEBNFOUBMT QSJNFSTTFSWJDFXPSLFST
IMKBVQEBUFBTFSWJDF XPSLFS ϥΠϑαΠΫϧΠϕϯτBDUJWBUF 17
w GFUDI w Πϯετʔϧ͞Εͨ8FCαΠτ͕ߦ͏શͯͷϦΫΤετʹ ରͯ͠ൃՐ w ֎෦ͷϦΫΤετͱϨεϙϯεʹԿ͔ॲཧΛ͔͚ΒΕΔ w ಛఆ63-ͷϦΫΤετͱϨεϙϯεΛΩϟογϡ͢Δࡍʹ Α͘͏
w IUUQTEFWFMPQFSTHPPHMFDPNXFCGVOEBNFOUBMT QSJNFSTTFSWJDFXPSLFST IMKB@ ϥΠϑαΠΫϧΠϕϯτGFUDI 18
w QVTI$ISPNF 'JSFGPYPOMZ w ֎෦͔ΒϓογϡϝοηʔδΛड͚ͨ࣌ʹൃՐ w TZOD 0OFP⒎#BDLHSPVOETZOD $ISPNFPOMZ w
όοΫάϥϯυͰͳΜΒ͔ͷॲཧΛߦ͏ΠϕϯτΛొͰ͖Δ w ྫ͑Կ͔ͷૹ৴͕௨৴ڥ͕ѱࣦͯ͘ഊͨ͠ͷͰɺޙ͔ΒόοΫάϥ ϯυͰϦτϥΠ͢Δ w TZOD 1FSJPEJD#BDLHSPVOETZOD JO%FTJHO w ॲཧΛొͯ͠ఆظతʹ࣮ߦ͢Δɻ w ྫ͑ఆظతͳهࣄϝʔϧͷߋ৽νΣοΫ௨ w ଞʹHFPGFODJOHͱ͔͍Ζ͍ΖఏҊ͞Ε͍ͯΔ ͦͷଞͷΠϕϯτ 19
w 8FCαΠτΛΞϓϦέʔγϣϯͱͯ͠ѻ͏࣌ͷઃఆΛهड़ Ͱ͖ΔɺKTPOܗࣜͷϑΝΠϧ ొਓ8FC"QQ.BOJGFTU 20
ª 21 ྫ //manifest.json { "name": "pixiv chatstory", "short_name": "chatstory",
"start_url": ".", "display": "standalone", "orientation": "portrait", "icons": [{ "src": "assets/imgs/logo.png", "sizes": "512x512", "type": "image/png" }], "background_color": "#FFFFFF", "theme_color": "#FFFFFF" } w lEJTQMBZzϓϩύςΟͰϒϥ βͷϔομʔΛඇදࣔʹ ͢ΔʜͳͲͷઃఆΛ͢Δɻ w ͋ͱIUNMଆͰ NBOJGFTUKTPOΛಡΈࠐΉ w MJOLSFMNBOJGFTU ISFGNBOJGFTUKTPO
͜ΕͰ18"ʹͳΓ·ͨ͠ʂ
4FSWJDF8PSLFSΛ༻ҙͯ͠+4͔ΒಡΈࠐΉ 8FC"QQ.BOJGFTUΛ༻ҙͯ͠IUNM͔ΒಡΈࠐΉ Ͷɺ؆୯Ͱ͠ΐ͏ʁ ·ͱΊΔͱ 23
ओཁϒϥβͷ࣮ঢ়گͱ ಈ ݄൛
w 4FSWJDF8PSLFS⭕ w EFTLUPQͰNPCJMFͰ͑Δɻ w 0OF0⒎#BDLHSPVOE4ZOD͕།Ұ͑Δɻ w 8FC"QQ.BOJGFTU⭕ w "OESPJEͷϗʔϜը໘ʹΠϯετʔϧͰ͖Δɻ
w ·ͰʹEFTLUPQͰ18"ΛΠϯετʔϧͰ͖ΔΑ͏ʹ͢ ΔΒ͍͠ɻ w 1VTI"1*⭕ w /PUJpDBUJPO"1*⭕ $ISPNF 25
w 4FSWJDF8PSLFS⭕ w 8FC"QQ.BOJGFTU❌ w 'JSFGPY04͕ੜ͖͍ͯΕରԠ͞ΕͨΜͩΖ͏͔ w 1VTI"1*⭕ w /PUJpDBUJPO"1*⭕
'JSF'PY 26
w 4FSWJDF8PSLFS❌ w ࣍ͷόʔδϣϯͰདྷΔͧʂ w 8FC"QQ.BOJGFTU❌ w ࣍ͷόʔδϣϯͰདྷΔͧʂ w 1VTI"1*❌
w ͪͳΈʹEFTLUPQͷTBGBSJͰϓογϡ௨͕ૹΕΔͭ "QQMF1VTI/PUJpDBUJPOTFSWJDFΛͬͨผͰ͢ w /PUJpDBUJPO"1*⭕ 4BGBSJ NBDJ04 27
w 4FSWJDF8PSLFS❌ w ࣍ͷόʔδϣϯͰདྷΔͧʂ w 8FC"QQ.BOJGFTU❌ w কདྷతʹ8JOEPXT"QQ4UPSFʹฒͿΑ͏ʹ͢ΔΒ͍͠ w 1VTI"1*❌
w ࣍ͷόʔδϣϯͰདྷΔͧʂ w /PUJpDBUJPO"1*⭕ &EHF 28
࣮ࡍʹӡ༻ͯ͠Δ͜ͱ ٧·ͬͨ͜ͱ
w QJYJWDIBUTUPSZ+BWB4DSJQUͷϑΝΠϧΛׂͯ͠৴ͯ͠ ͍Δ w NBJOKTͱɺ࠷ॳͷը໘ʹඞཁͳҎ֎ɺը໘ભҠͨ࣌͠ ʹಡΈࠐΉ w σϓϩΠ͢ΔͱׂϑΝΠϧ͕ߋ৽͞Ε໊ͯલ͕มΘΔ w ΞϓϦ͕ੜ͖͍ͯΔؒɺNBJOKT͕Ϧϩʔυ͞Εͳ͍ͷͰɺ
ׂϑΝΠϧ͕ࢀরͰ͖ͳ͘ͳΔ w 18"ಛʹੜଘظ͕͍ؒͷͰɺٱ͠ͿΓʹΞϓϦΛ։͘ͱ Α͘ࢭ·ͬͯͨ 18"ੜଘ͕͍࣌ؒ 30
ª 31 8PSLCPY const fileManifest = [ { "url": "build/
0.8ffe61fe0eafb69265e2.chunk.js", "revision": "0871a6351e2bb4f7fcab7b904ca634b6" }, // // ……… // { "url": "build/ 12.8e85e96102ac9de0a826.chunk.js", "revision": "c95d8d7a1a3d94bbee1b864c578cdd44" }, ]; const workboxSW = new self.WorkboxSW(); workboxSW.precache(fileManifest); w XFCQBDLΛ௨ͯ͠4FSWJDF 8PSLFSͷKTϑΝΠϧΛࣗಈ ੜͰ͖Δ w ׂͨ͠KTϑΝΠϧΛJOTUBMM ࣌ʹΩϟογϡ͢ΔΑ͏ʹ͠ ͨ w NBJOKTͷߋ৽αΠΫϧͱ 4FSWJDF8PSLFSͷߋ৽αΠΫ ϧ͕ҧ͏ͷͰͨ·ʹ͜ͷઓུ ࣦഊ͢Δ͕ɺ͍ͩͿϚγ
w ࣍ճىಈ࣌࠷ޙʹډͨ63-͔ΒΞϓϦΛ࠶։͠Α͏ͱ ͢Δ w Πϯετʔϧͯ͠ͳ͍ͱ౸ୡͰ͖ͳ͍63-ϦϥΠτ͠ ͳ͍खൈ͖Λͯͨ͠Βɺී௨ʹʹͳͬͨ w ͪΌΜͱ41"ʹ͠·͠ΐ͏ɻQJYJWDIBUTUPSZ'JSFCBTF )PTUJOHʹϦϥΠτͯ͠Β͍ͬͯ·͢ɻ "OESPJEʹΠϯετʔϧͨ͠18"͕Ωϧ͞ΕΔͱʜ
32
w ϦϦʔεॳɺ18"൛"OESPJEʹΠϯετʔϧ͠ͳ͍ ͱ͑ͳ͔ͬͨ w ʮ1$Ͱॻ͖͍ͨʂʯͱ͍͏ϥΠλʔ͞Μ͔Βͷ͕ɻ w ָউͩͱࢥ͕ͬͯͨɺࠓ·ͰϢʔβʔʹ63-Λݟ͍ͤͯ ͳ͔ͬͨฐ͕ʜ w ࠓ·Ͱ͋Γ͑ͳ͔ͬͨը໘ભҠͷରԠ
w 6*ϑϨʔϜϫʔΫ͕Έཱ͍ͯͯͨมͳ63-Λഉআ w ݟੵΓͱൺ͔ͯͳΓΔ͜ͱ͕͋ͬͨ 1$൛ରԠʹ͍ͭͯ 33
·ͱΊ
w ΦϑϥΠϯରԠͯ͠18"Խ͢Δ͘Β͍ͳΒ ͦΜͳʹ͘͠ͳ͍ɻ w ֤ϒϥβ͕͔ͳΓαϙʔτΛ࢝Ί͍ͯΔɻ w ΈΜͳͥͻࢼͯ͠ΈΑ͏ʂ ࠓͷ·ͱΊ 35
͓ΘΓ