Slide 1

Slide 1 text

Ճ଎͢ΔϑϩϯτΤϯυͱPWA @mizchi Developers Summit 2018

Slide 2

Slide 2 text

ࣗݾ঺հ • ஛അޫଠ࿠ / mizchi • node.js / ϑϩϯτΤϯυΤϯδχΞ • ϑϦʔϥϯε • ϦΫϧʔτςΫϊϩδʔζ༷ • freeeגࣜձ༷ࣾ • etc...

Slide 3

Slide 3 text

ʮReactͷਓʯ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ܦྺ • େֶ࣌୅: WebSocket Ͱ MMORPG ΛҰਓͰ࣮૷ • 2012~ ήʔϜܥ: HTML5 / Unity / Flash • 2013~ EdTechܥ: ڭࢣ޲͚ڭࡐΦʔαϦϯάπʔϧ • 2014~ Qiita: ϓϩάϥϚࢧԉπʔϧ • 2017~ ϑϦʔϥϯε

Slide 6

Slide 6 text

ࠓ೔ͷ಺༰ • PWAʹ͍ͭͯ • ϑϩϯτΤϯυͷߴ଎Խʹ͍ͭͯ • ύϥμΠϜ͕೗ԿʹมΘΔ͔

Slide 7

Slide 7 text

࿩͞ͳ͍͜ͱ • ࣮૷ͷৄࡉ • ࡉ͔͍࢓༷

Slide 8

Slide 8 text

CAUTION!!! ࣗ෼ͷ܏޲ʹ͍ͭͯ • ϑϩϯτΤϯυͱ͍͍ͭͭJSத৺ɺಛʹSPAภॏ • ͍ΘΏΔʮWeb੍࡞ʯͱ͸ແԑ • PWAͷղऍʹ͍ͭͯɺGoogleͱ͸ҧ͏ղऍΛ͍ͯ͠Δ͔΋

Slide 9

Slide 9 text

ࠓ೔ݺ͹ΕͨίϯςΩετ

Slide 10

Slide 10 text

dev.to ͱ͍͏αΠτ͕ੌ͍ • ւ֎ͷ qiita Έ͍ͨͳ΢ΣϒαΠτ • ҟৗͳϨεϙϯε଎౓ • ҙ֎ͱγϯϓϧͳઃܭ

Slide 11

Slide 11 text

ʮͳͥ dev.to ͕ʙʯཁ໿ • ʮࠓʯͷύϑΥνϡͷৗࣝͰɺਅͬ౰ʹ࡞Δͱ͜Μͳʹ଎͍ • ͳͥࣗ෼͕Ͱ͖ͳ͔ͬͨͷ͔ɺչ͍͠ • (ٕज़తͳৄࡉ͸ޙड़)

Slide 12

Slide 12 text

ࠃ಺ͷࣄྫ: https://r.nikkei.com ೔ܦిࢠ൛Λ଎͘͢Δ / nikkei-inside-frontend

Slide 13

Slide 13 text

PWAͱ͸Կ͔

Slide 14

Slide 14 text

᷿ͷPWA • Google ͷਪਐ͢Δ࣍ੈ୅ͷϑϩϯτΤϯυ؀ڥ • ͿͬͪΌ͚ʮHTML5ʯ ͷϦϒϥϯσΟϯάײ ΈΜͳຊ౰ʹཧղͯ͠·͔͢ʁʁʁ

Slide 15

Slide 15 text

ຊ࣭Λݟ·͠ΐ͏

Slide 16

Slide 16 text

ڱٛͷPWA • Ϟμϯͳϒϥ΢βΛ࢖͏Ϣʔβʔʹ͸ɺΑΓྑ͍ମݧΛɺͱ͍ ͏ʮํ޲ੑʯ • ServiceWorker Λ࢖ͬͯϞόΠϧΞϓϦͷମݧʹ௥͍ͭͨ͘ Ίͷʮ࣮૷ʯ

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

ϨΨγʔͷڥք • ServiceWorker ͕࣮૷͞Ε͍ͯΔ͔൱͔ • ϨΨγʔ = IE, Safari ! • Ϟμϯ = ͦΕҎ֎

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

ServiceWorker ͱ͸ • όοΫάϥ΢ϯυͰಈ͘ϩʔΧϧϓϩΩγ • ͋ΒΏΔϨεϙϯεΛॻ͖׵͑Մೳ • HTML5 Application Cache ͷϦϒʔτ

Slide 21

Slide 21 text

஫ҙ!!!! ͔͜͜Βઌ͸ैདྷͷϦΫΤετ&ϨεϙϯεϞσϧͷৗ͕ࣝ௨༻͠ ·ͤΜ ઌೖ؍ΛऔΓআ͍͍ͯͩ͘͞

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ServiceWorkerͷىಈ // client / SWىಈ navigator.serviceWorker.register('/sw.js', {scope: '/'}) // sw.js self.addEventListener('fetch', event => { // logging ͢Δ͚ͩ console.log(event.request.url); });

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Service Worker Ͱग़དྷΔ͜ͱ • ͋ΒΏΔʢຊ౰ʹશͯͷ)Ϩεϙϯεͷಈతͳॻ͖׵͑ • ΦϑϥΠϯΩϟογϡ • όοΫάϥ΢ϯυॲཧ • ϓογϡ௨஌

Slide 26

Slide 26 text

Service Worker Ͱग़དྷͳ͍͜ͱ • ৗறϓϩηε • Workerͷੜଘ࣌ؒ͸ϦΫΤετ։͔࢝Β15~30ඵఔ౓ • ϝϞϦ࢖༻ྔ΋੍ݶ • Web Budget API (΍΍͍͜͠ͷͰࠓճ͸ׂѪ)

Slide 27

Slide 27 text

ʮWebͷৗࣝʯͷҰͭͷస׵఺ • αʔόʔʹ௚௨ => Ϩεϙϯε͸ಈతʹॻ͖׵ΘΔ • history.pushState ҎདྷͷϥΠϑαΠΫϧͷେ͖ͳมԽ(ޙ ड़)

Slide 28

Slide 28 text

history.pushState

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

history.pushState ͸Կ͔ͩͬͨ • ಉҰυϝΠϯ಺෦ͰಈతʹURLΛॻ͖׵͑Δٕज़ • ಉҰϖʔδ಺ͷϥΠϑαΠΫϧͷԆ௕ • Single Page Application ͷجૅٕज़ͷҰͭ

Slide 32

Slide 32 text

PWA: ΦϑϥΠϯԽͷྫ

Slide 33

Slide 33 text

Offline Cache ͷίʔυྫ // sw.js self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(response => { return response || fetch(event.request); }) ); });

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Կ͕ى͍ͬͯ͜Δ͔ • Ұճ໨ͷϦΫΤετͰ͸ΩϟογϡΛஷΊΔ • ೋճ໨͔Β͸ΩϟογϡΛ࢖ͬͯىಈ • html,js,css Λʮαʔόʔʹ౸ୡ͢ΔલʹʯϓϩΩγग़དྷΔ

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

ΞϓϦέʔγϣϯͱͯ͠ͷPWA • ΦϑϥΠϯΩϟογϡͰىಈ͠ɺαʔόʔʹґଘ͠ͳ͍ܗଶ • ͍͔ͭ͘ͷ؀ڥͰ͸ΞϓϦͱͯ͠ొ࿥Ͱ͖Δ • Android: Add to Homescreen • Windows Store

Slide 39

Slide 39 text

࠷ۙͷχϡʔε • ϚΠΫϩιϑτɺProgressive Web AppsʢPWAʣΛ Windows 10ͷσεΫτοϓͰ࣮ߦՄೳʹɻWindows 10͸ WindowsɺLinuxɺPWAରԠͷϓϥοτϑΥʔϜ΁ http:// www.publickey1.jp/blog/18/ progressivewebappspwawindows10windows10windowsl inuxpwa.html

Slide 40

Slide 40 text

ؔ࿈ٕज़: Web Packaging • ΢ΣϒϖʔδΛҰͭͷόΠφϦʹͯ͠഑෍͢Δٕज़ • ࢓༷: https://github.com/WICG/webpackage • AMP ΋ Web Packaging ରԠͰ࠶ߏங͞ΕΔํ޲ੑ • https://amphtml.wordpress.com/2018/01/09/ improving-urls-for-amp-pages/

Slide 41

Slide 41 text

ΞϓϦέʔγϣϯԽ: ڝ߹͢Δٕज़ • Electron • PC൛ Chrome ͕ Add to homescreen ʹରԠ༧ఆ • React Native • Webٕज़ͷ Mobile App ։ൃ؀ڥͱ͍͏఺Ͱڝ߹

Slide 42

Slide 42 text

ͳͥΦϑϥΠϯԽ͕େࣄ͔ • Googleͷݴ͍෼: ·ͩΠϯλʔωοτ͕ශऑͳ؀ڥ͕ଟ͍ • ޫ͕஗͍ / ࠃ಺: 20ms~50ms, ΞϝϦΧ: 100ms~ • UXΛಥ͖٧ΊΔͨΊʹޫ଎Λ௒͑Δ

Slide 43

Slide 43 text

࣮ྫ: dev.to

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

dev.to ͷ࢓૊Έ • ॳճϦΫΤετΛ CDN Ͱ cache • ϦϯΫཁૉͷΦϯϚ΢εͰɺભҠઌΛࣄલʹ fetch & cache • ࣮ࡍͷϨεϙϯε͸SWͷCache͔Βฦ٫ ࢀߟ: https://dev.to/ben/making-devto-insanely- fast

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

dev.to ͔Βֶ΂Δ͜ͱ • ଎͕͞࠷ॳ͔Βઃܭʹ૊Έࠐ·Ε͍ͯΔ • ϒϥ΢β͸ CDN ͱ OfflineCache ͔͠૬खΛ͠ͳ͍ • ߋ৽࣌ͷ cache ͷഁغઓུΛ٧ΊΔ • ଎౓͸࠷ߴͷUX(͋Δ͍͸ͦͷ౔୆)

Slide 48

Slide 48 text

ServiceWorker: ಁաతͳߴ଎Խ૚ • ͋͘·ͰطଘͷWebৼΔ෣͍ΛकΓͭͭߴ଎Խ • SWͷਅͷϙςϯγϟϧΛ׆͔͖͠Δͷ͸ɺIE͕ࢮΜͩޙ • ͋Δ͍͸։ൃऀπʔϧͳΒࠓ͙͢

Slide 49

Slide 49 text

PWAͱ͸Կ͔: ·ͱΊ • Service Worker Λ଎౓ͷͨΊʹಁաతͳ૚ͱͯ͠࢖͏ • IE͕ࢮ͵·Ͱͷ௨ա఺ • Push௨஌͸΋͏ͪΐͬͱޙ͔΋Ͷ

Slide 50

Slide 50 text

ݱ࣮

Slide 51

Slide 51 text

ຊ౰ʹ PWA ͷ࣌୅͕དྷΔͷ͔ • Mobile vs Web ͷ୅ཧઓ૪ͷؾ഑ • Internet Explorer !!!!! • Push Notification ໰୊

Slide 52

Slide 52 text

IE໰୊: αϙʔτظݶ • Windows10 IE11: 2025/10/14 • Windows10 ʹ͸ Edge ౥ࡌࡁΈ • Edge Λ࢖͑ͱݴ͑ΔՄೳੑʁ • Windows7(8) IE11: 2020/01/14

Slide 53

Slide 53 text

IE໰୊: ߈ུํ๏ • Mobile First Index • ࠓޙ͸ϞόΠϧ൛΢ΣϒαΠτͰΫϩʔϥʹIndex͞ΕΔ • ੈքతʹ͸σεΫτοϓγΣΞ͸௿Լؾຯ => ϞόΠϧΛλʔήοτʹ͢Δ = IEΛ౗͢ํศ

Slide 54

Slide 54 text

ʮPWA͸ಁաతͳΩϟογϡ૚ʯ • SWಡΈࠐΈલͰ΋ • SW͕ͳͯ͘΋ • SWಡΈࠐΈࡁΈͰ΋ ಉ͡ಈ͖Λ͢Δ͸ͣ

Slide 55

Slide 55 text

ݱ৔ʹ͍Ζ͍Ζͳཁٻ͕͋ΔͷͰ ൑அ͸օ͞Μ͓·͔ͤ͠·͢

Slide 56

Slide 56 text

Push Notification ໰୊ • ݱࡏਐߦܗͰେྔͷϔΠτΛങͬͯΔ ͜Ε

Slide 57

Slide 57 text

Push Notification ͷίʔυྫ self.addEventListener('push', event => { event.waitUntil( self.registration.showNotification('λΠτϧ', { body: 'ຊจ' }) ); });

Slide 58

Slide 58 text

Push Notification ໰୊ • pushͱpush notification͸ґଘ͢Δ͚Ͳҧ͏΋ͷ • push௨஌ͷෆධͰόοΫάϥ΢ϯυॲཧ͕௵͞ΕΔͷ͸…

Slide 59

Slide 59 text

໰୊: Push ͱ Apple • Safari TP11 ͷ SW ʹ onfetch ͸͋ͬͯ΋ onpush ͸ ͳ͍ • AppStore Notification Center ͱͷམͱ͠ॴ͕ඞཁ

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

PWAͷߴ଎ԽΛݟͭΊͳ͓͢

Slide 62

Slide 62 text

ύϑΥʔϚϯενϡʔχϯάͱ͸ • ࢧ഑తͳϒϩοΩϯάཁૉΛ୳͢ • ௵͢ • ܁Γฦ͢ ʮਪଌ͢ΔͳɺܭଌͤΑʯ

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

ࢦඪͷऔΓํ • DevTools • Lighthouse • Puppeteer

Slide 65

Slide 65 text

DevToolsͷ਺஋ΛಡΉ

Slide 66

Slide 66 text

Lighthouse • Google ͷ ύϑΥʔϚϯεϝτϦΫεπʔϧ • ύϑΥʔϚϯε • SEO • ΞΫηγϏϦςΟ • PWA Support

Slide 67

Slide 67 text

ͨͩߴ଎ͳΞϓϦΛ࡞Δ $ npm install -g preact-cli $ preact create simple myapp // deploy it

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

ڏແ͸଎͍ • ͲΜͳ΋ͷ΋࡞ͬͨͱ͖͸଎͍ • ͦΕΛҡ࣋͢Δͷ͸೉͍͠ • ʮॏ͞ʯͱ͸ʮػೳͷॏΈʯͰ͋Δ

Slide 70

Slide 70 text

͋ͳͨͷ΢ΣϒΛ஗͘͢Δ΋ͷ • ॏ͍SQL • ղ૾౓ͷߴ͍ը૾ • ޿ࠂʹΑΔϒϩοΩϯά • ୯ແཧղʹΑΔॳظԽύεͷෳࡶԽ

Slide 71

Slide 71 text

ʮ଎౓ʯʹ΋͍Ζ͍Ζ͋Δ • ΠϯλϥΫγϣϯ: 16ms~ • ωοτϫʔΫ: 100ms~ • ϓϩτλΠϐϯά: 1ϲ݄~ • ػೳ௥Ճ: 1िؒ~ • ϓϩμΫτͷϥΠϑαΠΫϧ: 1೥~ • ্৔: 3೥~

Slide 72

Slide 72 text

͋ͳͨʹඞཁͳʮ଎౓ʯ͸ͳΜͰ͢ ͔ʁ

Slide 73

Slide 73 text

͓ΘΓ