2019.08.07 『Sendai Frontend Meetup #1』の登壇資料です。 https://sfeug.connpass.com/event/137013/
Next.jsではじめるPWA2019/08/07Sendai Frontend Meetup #1吉次 洋毅
View Slide
誰?● 吉次洋毅(ヨシツグヒロキ)● 1991年生まれ(27歳)● 経歴○ 某レストラン検索サイトでバックエンドエンジニアなど○ 某HR会社でエンジニアをしつつ○ フリーランスで受託開発&他社さんの開発やプロジェクトマネジメントのお手伝い● 趣味○ 一人旅 & 写真 & スーパー銭湯○ スマブラ(VIPボーダー周辺をウロウロ)○ 筋トレ@gyarasu
今日はNext.jsとPWAのお話
話すこと● ボイラープレートのご紹介● Next.jsでPWAをするためのはじめの一歩● Service Workerの導入でハマった話● Nuxt.js×PWAとの比較
ボイラープレートのご紹介https://github.com/gyarasu/nextjs-ts-pwa
Next.js×PWAはじめの一歩まずは公式をチェック! https://nextjs.org/features/progressive-web-apps
next-offlinehttps://github.com/hanford/next-offline
next-offlinehttps://github.com/hanford/next-offline中身はおなじみworkbox
next-offlineの使い方例nextの設定ファイルにworkboxのオプションを記述できる。(Runtime Cacheの例)
Next.js×PWAはじめの一歩まずは公式をチェック! https://nextjs.org/features/progressive-web-appsこれだけ!?
そうは問屋が卸さない
Service Worker導入で少しハマった。
結論● custom serverで/service-woker.jsをルーティングしてあげる必要がある(上の例はExpress.js)● now v2(https://zeit.co/now, Lambdaに簡単にデプロイするためのツール)前提であれば特に何もしなくて良いとREADMEに書いてあるが、デプロイしてないと確認できない(少なくともローカルで動作確認できない)
結論● custom serverで/service-woker.jsをルーティングしてあげる必要がある(上の例はExpress.js)● now v2(https://zeit.co/now, Lambdaに簡単にデプロイするためのツール)前提であれば特に何もしなくて良いとREADMEに書いてあるが、デプロイしてないと確認できない(少なくともローカルで動作確認できない)アクセスURL実際のファイルパス
結論● custom serverで/service-woker.jsをルーティングしてあげる必要がある(上の例はExpress.js)● now v2(https://zeit.co/now, Lambdaに簡単にデプロイするためのツール)前提であれば特に何もしなくて良いとREADMEに書いてあるが、デプロイしてないと確認できない(少なくともローカルで動作確認できない)これをもうちょい掘り下げてService Workerを理解する
Service Workerのscopeと生成先のパスデフォルトでは/.next/service-workerに生成される
Custom Serverでルーティングせず/staticに置くと?/static/service-worker.jsで参照することが可能 ↓しかし、SWがサイト全体をコントロールすることができない
Service Workerのscope● 基本的にはサイト全体(/)をコントロールしたい→scopeを/にする● 一方で、static配下に置いた場合のアクセスURLは/static/service-worker.js● Service Workerは自身が参照されるURLよりも上位の階層をコントロールできない
Service Workerを使うにはCustom Serverでルーティングを書く※now v2う場合は不要→https://github.com/hanford/next-offline#now-20
Nuxt.jsとの比較(Service Worker)Nuxtでは、@nuxt/pwaを使って簡単にPWA化できるhttps://pwa.nuxtjs.orgNuxt.js × @nuxt/pwa Next.js × next-offlinestatic/hoge.jsへのURL/hoge.js /static/hoge.jsPWAモジュールを導入した際のデフォルトのSW出力先パス/static/sw.js /.next/service-worker.jsSWのデフォルトscope / /『Nuxt.jsとNext.jsの静的アセット、Next.jsにおけるService Worker導入』https://scrapbox.io/gyarasu/Nuxt.js%E3%81%A8Next.js%E3%81%AE%E9%9D%99%E7%9A%84%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E3%80%81Next.js%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BService_Worker%E5%B0%8E%E5%85%A5
Nuxt.jsとの比較(その他)Nuxt.js × @nuxt/pwa Next.js × next-offlinemanifest.json manifest moduleが含まれていて、nuxt.config.jsに記述するmanifest.json手作りして/staticに配置→/pages/_document.jsxに参照するためのlinkタグを追加icon icon moduleが含まれていて512x512の画像を用意し、必要なサイズをnuxt.config.jsに記述するとビルド時に生成してくれる各サイズを自前で用意push通知 one signal moduleが含まれているswのimport scriptを作成してpushするためのスクリプトを記述
ボイラープレートでゆっくり見てください!
Pull Requestお待ちしてます!
終