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
そろそろ真面目に Webフロントエンド開発をやる
Search
Yosuke Onoue
January 14, 2017
Technology
1.2k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
そろそろ真面目に Webフロントエンド開発をやる
Yosuke Onoue
January 14, 2017
More Decks by Yosuke Onoue
See All by Yosuke Onoue
ネットワーク可視化の世界
likr
8
7.1k
Think About Front-end Web Development with Rust
likr
2
590
Yewにおけるoff-the-main-thread
likr
1
860
行政事業レビューデータの可視化 / Visualization of Japan's National Budget with JUDGIT!
likr
1
280
モダンJavaScript再入門 / Re-introduction to Modern JavaScript
likr
24
12k
Web-based Data Visualization with Rust and WebAssembly
likr
4
6.2k
Introduction to Graph Drawing
likr
0
560
20190707Ionic_Meetup.pdf
likr
0
500
About the end of the web
likr
2
580
Other Decks in Technology
See All in Technology
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
400
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
240
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
25k
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
0
590
ホームラボ紹介
y_sera15
0
200
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
140
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
440
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
220
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
330
JavaScript 研修 (2026)
recruitengineers
PRO
2
620
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Ruling the World: When Life Gets Gamed
codingconduct
0
300
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
A designer walks into a library…
pauljervisheath
211
24k
Why Our Code Smells
bkeepers
PRO
340
58k
Agile that works and the tools we love
rasmusluckow
331
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Transcript
ͦΖͦΖਅ໘ʹ WebϑϩϯτΤϯυ։ൃΛΔ ͓ͷ͏͑ (@_likr) 2017/01/14 ؔϑϩϯτΤϯυUG ৽๊ෛձ
ࣗݾհ • ͓ͷ͏͑ (@_likr) • ژେֶ ֶࡍ༥߹༥߹ڭҭݚڀਪਐηϯλʔ ࡦͷͨΊͷՊֶϢχοτ ಛఆॿڭ •
ng-kyotoΦʔΨφΠβʔ • ՄࢹԽͷݚڀͱ͔ͬͯΔ • ͭͬͨ͘ https://egrid.jp/ • ࠓͷඪɿϚαΧϦΛ͛ͳ͍
SPAͬͯຊʹҙຯ͋Μͷʁ
2017ͷWebαΠτʹඞཁͳͷʁ • ϑϩϯτΤϯυϑϨʔϜϫʔΫ • AngularɺReactɺ… • τϥϯεύΠϥ • BabelɺTypeScriptɺ… •
Ϗϧυπʔϧ • webpackɺ…
2017ͷWebαΠτʹඞཁͳͷʁ • ϑϩϯτΤϯυϑϨʔϜϫʔΫ • AngularɺReactɺ… • τϥϯεύΠϥ • BabelɺTypeScriptɺ… •
Ϗϧυπʔϧ • webpackɺ… ͏ेීٴٕͨ͠ज़ɺඞཁʹԠ͓ͯ͡͏
ྑ͍WebαΠτͷࢦ • Progressive Web App Checklist • https://developers.google.com/web/progressive- web-apps/checklist •
ϕʔεϥΠϯ • HTTPSɺϨεϙϯγϒɺΦϑϥΠϯɺϗʔϜը໘ ՃɺճઢରԠɺΫϩεϒϥβରԠɺεϜʔζͳ ϖʔδભҠɺϖʔδຖͷURL • ൣత • ΠϯσοΫεՄೳɺUXɺύϑΥʔϚϯεɺ௨
SPAͷಘҙɾෆಘҙ 41"ඇ41" ͲͬͪͰΔ 41"͕ಘҙ 41"͕ۤख )5514 Ϩεϙϯγϒ ϗʔϜը໘Ճ ճઢରԠ ΫϩεϒϥβରԠ
ϖʔδຖͷ63- 69 ύϑΥʔϚϯε ௨ ΦϑϥΠϯ εϜʔζͳϖʔδભҠ ΠϯσοΫεՄೳ 4&0ɺ0(1ରԠ
SPAͰͳͯ͘PWAΛࢦͦ͏ • PWA2017ݱࡏͷྑ͍WebαΠτͷઃܭࢦ • SPAతͰͳͯ͘खஈ • PWAΛ࣮ݱ͢ΔͨΊʹSPA͕ۙಓ • ΦϑϥΠϯ •
εϜʔζͳϖʔδભҠ • SPA͕ۤखͳͱ͜ΖΛͲ͏ิ͏͔ʁ • ΠϯσοΫεՄೳ
Progressive Web Apps
Progressive Web Apps • https://developers.google.com/web/progressive- web-apps/ • WebαΠτͱωΠςΟϒΞϓϦͷ ͍͍ͱ͜औΓΛͨ͠WebΞϓϦ •
Progressive Enhancement • ߴ͍ϢʔβϏϦςΟͷ࣮ݱ • ϏδωεϑϨϯυϦʔ
PWAͰͰ͖Δ͜ͱ • ΦϑϥΠϯԽ • Πϯλʔωοτଓͳ͠Ͱͷར༻ • දࣔͷߴԽ • Push௨ •
ΞϓϦͷ࠶๚Λଅਐ • App Install Banner • ϗʔϜը໘ͷγϣʔτΧοτՃ • ঃʑʹΞϓϦͷΑ͏ʹͳΔʂ
Service Worker • Webϖʔδ(ϝΠϯεϨουɺUIεϨου)ͱ ಠཱͯ͠εΫϦϓτΛಈ࡞ͤ͞ΔΈ • ωοτϫʔΫϦΫΤετΛϑοΫ • ΩϟογϡΛͬͯϨεϙϯε •
ϦΫΤετΛमਖ਼ • αʔόʔPushΛड͚ͯ௨Λදࣔ • postMessageͰϝΠϯεϨουͱ௨৴ • HTTPSͰͷΈಈ࡞ (localhostΛআ͘)
ͳͥΦϑϥΠϯWebΞϓϦʁ • ϞόΠϧڥͷରԠ • ௨৴ͷෆ҆ఆ͞ • ௨৴ͷޮԽ • ޫෆมʂ(30ສkm/s) •
ՐͱٿͰ௨৴ͨ͠Βʁ (࠷ۙ࣌7500ສkm) • ΦϑϥΠϯɾϑΝʔετͷࢥͱ࣮ફ by നੴढ़ฏ http://www.slideshare.net/shumpei/thought-and- practice-of-offline-first
sw-precache • https://github.com/GoogleChrome/sw-precache • JavaScript·ͨઃఆϑΝΠϧ͔Β Service WorkerίʔυΛੜ • Α͘͏Fetchઓུ͕࣮ࡁΈ •
networkFirst • cacheFirst • fastest • cacheOnly • networkOnly
sw—precache-webpack-plugin const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin') module.exports = { plugins: [
new SWPrecacheWebpackPlugin({ maximumFileSizeToCacheInBytes: 10000000, staticFileGlobs: [ 'public/index.html', 'public/bundle.js', 'public/manifest.json' ], stripPrefix: 'public/', navigateFallback: '/index.html', runtimeCaching: [ { urlPattern: /https:\/\/public-api\.wordpress\.com\/rest\/v1\.1\/sites\/ylikr\. handler: 'networkFirst', options: { cache: { name: 'posts' } } } ] }) ] }
HTTPS • HTTP௨৴ΛSSL/TLSͰ҉߸Խ • ηΩϡΞͳWeb • HTTP/2ɺServiceWorkerʹඞཁ • Let’s Encrypt
• ແྉͷSSL/TLSূ໌ॻ • MozillaΒ͕εϙϯαʔ • FirebaseͰϗεςΟϯά
ύϑΥʔϚϯε
Rail Performance Model • https://developers.google.com/web/fundamentals/ performance/rail • Response • Ϣʔβૢ࡞ʹରͯ͠100msҎʹԠ
• Animation • 10ms / ϑϨʔϜ • Idle • ΞΠυϧ࣌ؒΛ͘͢Δ • Loading • 1000msҎʹॳظը໘දࣔ
Rail Performance Model • https://developers.google.com/web/fundamentals/ performance/rail • Response • Ϣʔβૢ࡞ʹରͯ͠100msҎʹԠ
• Animation • 10ms / ϑϨʔϜ • Idle • ΞΠυϧ࣌ؒΛ͘͢Δ • Loading • 1000msҎʹॳظը໘දࣔ
ॳظϩʔσΟϯάͷߴԽ • ϨεϙϯεΛ͘͢Δ • ྑ͍ੑೳͷαʔόΛ͏ • HTTP/2 • ௨৴ྔΛݮΒ͢ •
minify • ௨৴ΛݮΒ͢ • Ωϟογϡ • ΦϑϥΠϯԽ • CDNͷར༻
bundleαΠζΛখ͘͢͞Δ • bundleׂ • ڞ௨෦ + ϖʔδຖ • ϥΠϒϥϦ֎෦Խ •
scriptλάͰಡΈࠐΜͩεΫϦϓτΛ CommonJSελΠϧͰ༻͢Δ • CDNར༻ module.exports = { externals: { 'react': 'React', 'react-dom': 'ReactDOM', 'react-router': 'ReactRouter' } } <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/2.8.1/ReactRouter.min.js"></script>
ΠϯσοΫεՄೳ
ΠϯσοΫεͱιʔγϟϧڞ༗ • GoogleͷΫϩʔϥ • JavaScriptΛॲཧ͢Δ • XHRॲཧ͠ͳ͍(?) • ιʔγϟϧڞ༗ •
TwitterɺFacebookɺ… • OGP • JavaScriptΛॲཧ͠ͳ͍
WebαΠτͷछྨͱߋ৽ස • ੩తWebαΠτɺݸਓπʔϧɺήʔϜ • ΞϓϦ = ίϯςϯπ • ։ൃऀ͕ίϯςϯπΛߋ৽ •
CMSɺϒϩά • ΞϓϦͱίϯςϯπͷ • ཧऀ͕ίϯςϯπΛߋ৽ • SNSɺϢʔβࢀՃίϯςϯπ • Ϣʔβ͕ίϯςϯπΛߋ৽ SPAͰΠϯσοΫεՄೳ (ϖʔδຖͷมߋෆՄ) Ϋϩʔϥରࡦ͕ඞཁ ΦϑϥΠϯԽͷ͕ඞཁ
Ϋϩʔϥରࡦ • Server Side Rendering • ॳظඳըΛαʔόଆͰॲཧ • ॳظϩʔσΟϯάͷߴԽ •
UniversalΛҙࣝͨ͠ίʔσΟϯά • ϓϦϨϯμϦϯά • Ϋϩʔϥʹରͯ͠ϨϯμϦϯάࡁΈͷHTMLΛԠ • Ϣʔβʹ௨ৗͷSPAͱͯ͠ಈ࡞ • ϓϦϨϯμϦϯάͷͨΊͷϛυϧΣΞ͕ඞཁ
Prerender.io • https://prerender.io/ • PhantomJSͰϓϦϨϯμϦϯά • Headless WebKit • ϛυϧΣΞ
• Ϋϩʔϥ͔Ͳ͏͔Λஅ͠ϓϦϨϯμϦϯάͱ ௨ৗͷϨεϙϯεʹৼΓ͚Δ • nginxɺapacheɺexpressɺrails • 250ϖʔδ·Ͱແྉ
σϞ
ϒϩά • https://blog.likr-lab.com/ • PWA ChecklistͷϕʔεϥΠϯେମकͬͨ
γεςϜߏ • ϑϩϯτΤϯυ • ReactɺReact Helmet • ServiceWorkerɺAppManifest • όοΫΤϯυ
• wordpress.com API • ͘͞ΒVPS • nginx • hosting • prerender.io • Let’s Encrypt
·ͱΊ
·ͱΊ • 2017ʹ࡞ΔWebαΠτPWAΛࢦͦ͏ • TodoMVCͷ࣍ʹϒϩά͍͔͕ʁ • WebϑϩϯτΤϯυ։ൃʹඞཁͳͷ͕Θ͔Δ • ر •
Firebase͕ϓϦϨϯμϦϯάαʔϏεΛ࣋ͬͯ΄͍͠