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.3k
Introduction to Graph Drawing
likr
0
570
20190707Ionic_Meetup.pdf
likr
0
500
About the end of the web
likr
2
580
Other Decks in Technology
See All in Technology
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
270
enechainの内製セルフサービスプラットフォーム
hiyosi
0
120
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
250
module Synths; end
asonas
1
120
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
240
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
270
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
240
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
240
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
3
1.5k
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
250
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
190
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
360
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to Ace a Technical Interview
jacobian
281
24k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Unsuck your backbone
ammeep
672
58k
Optimizing for Happiness
mojombo
378
71k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
It's Worth the Effort
3n
188
29k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
520
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
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͕ϓϦϨϯμϦϯάαʔϏεΛ࣋ͬͯ΄͍͠