Web アプリケーションでありながら ネイティブアプリケーションのような動作をさせることができる PWA(Progressive Web Apps)が最近注目されています。
Vue-cli のプロジェクト作成コマンド「vue create xxxx」でも「PWA にする?」のように聞かれるので、PWA プロジェクトを簡単に作成できるようです。
今回は vue create で PWA プロジェクトと そうでないプロジェクトを作って、その差分を確認してみたいと思います。
私自身、PWA についてほぼ知らないので差分についての解説はできません。ちょっと観察してみただけです。
プロジェクトを作成する
PWA じゃないプロジェクトを作る
まず、 PWA ではないプロジェクトを作成します。vue create 時の設定は次のようにしました。
C:\yyama>vue create non-pwa-project Vue CLI v3.0.5 ? Please pick a preset: Manually select features ? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection? Check the features needed for your project: (*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support ( ) Router ( ) Vuex (*) CSS Pre-processors (*) Linter / Formatter ( ) Unit Testing ( ) E2E Testing
出来上がったプロジェクトのフォルダ/ファイル構成はこうです。
C:.
│ .browserslistrc
│ .eslintrc.js
│ .gitignore
│ babel.config.js
│ package-lock.json
│ package.json
│ postcss.config.js
│ README.md
│
├─public
│ favicon.ico
│ index.html
│
└─src
│ App.vue
│ main.js
│
├─assets
│ logo.png
│
└─components
HelloWorld.vue
PWA プロジェクトを作成
次に、 PWA プロジェクトを作成してみたいと思います。次のような設定で vue create してみました。
C:\yyama>vue create pwa-project Vue CLI v3.0.5 ? Please pick a preset: Manually select features ? Check the features needed for your project: (*) Babel ( ) TypeScript (*) Progressive Web App (PWA) Support ( ) Router ( ) Vuex (*) CSS Pre-processors (*) Linter / Formatter ( ) Unit Testing ( ) E2E Testing
PWA サポートにチェックを入れて作成しました。
作られたプロジェクトのフォルダ/ファイル構成はこうなりました。
C:.
│ .browserslistrc
│ .eslintrc.js
│ .gitignore
│ babel.config.js
│ package-lock.json
│ package.json
│ postcss.config.js
│ README.md
│ vue
│
├─node_modules
├─public
│ │ favicon.ico
│ │ index.html
│ │ manifest.json
│ │ robots.txt
│ │
│ └─img
│ └─icons
│ android-chrome-192x192.png
│ android-chrome-512x512.png
│ apple-touch-icon-120x120.png
│ apple-touch-icon-152x152.png
│ apple-touch-icon-180x180.png
│ apple-touch-icon-60x60.png
│ apple-touch-icon-76x76.png
│ apple-touch-icon.png
│ favicon-16x16.png
│ favicon-32x32.png
│ msapplication-icon-144x144.png
│ mstile-150x150.png
│ safari-pinned-tab.svg
│
└─src
│ App.vue
│ main.js
│ registerServiceWorker.js
│
├─assets
│ logo.png
│
└─components
HelloWorld.vue
比較してみる
フォルダ/ファイルを比較した結果です。
***** PWA
│ README.md
│ vue
│
***** NON PWA
│ README.md
│
*****
***** PWA
├─public
│ │ favicon.ico
│ │ index.html
│ │ manifest.json
│ │ robots.txt
│ │
│ └─img
│ └─icons
│ android-chrome-192x192.png
│ android-chrome-512x512.png
│ apple-touch-icon-120x120.png
│ apple-touch-icon-152x152.png
│ apple-touch-icon-180x180.png
│ apple-touch-icon-60x60.png
│ apple-touch-icon-76x76.png
│ apple-touch-icon.png
│ favicon-16x16.png
│ favicon-32x32.png
│ msapplication-icon-144x144.png
│ mstile-150x150.png
│ safari-pinned-tab.svg
│
***** NON PWA
├─public
│ favicon.ico
│ index.html
│
*****
***** PWA
│ main.js
│ registerServiceWorker.js
│
***** NON PWA
│ main.js
│
*****PWA プロジェクトはいくつかファイルが多いのに気づきます。
まず、プロジェクトフォルダ直下に vue というファイルがあります。中身は空っぽです。
あと、public フォルダに manifest.json 、robots.txt があります。
icon にはAndroid、iPhone、safari など各ブラウザ用のアイコンが格納されています。
src フォルダ配下には register-service-worker というファイルがありました。
これらのファイルが PWA アプリケーションには必要になるということが理解できたと思います。
(前述のとおり、何のためのファイルなのかは、知りませんw。今後勉強していきたいと思います。)
まとめ
vue-cli を使用すれば、PWA 対応プロジェクトも簡単に作成することができます。
今後は作る Web アプリは特に事情がなければ PWA 対応で作って生きたいと思います。
それでは!
- 作者: 川口和也,喜多啓介,野田陽平,手島拓也,片山真也
- 出版社/メーカー: 技術評論社
- 発売日: 2018/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 渡邊達明
- 出版社/メーカー: インプレスR&D
- 発売日: 2018/10/05
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
- 作者: 花谷拓磨
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2018/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る