PWAとVue.jsでNEMウォレットアプリを作ろう!環境構築 〜 PWAアプリの起動

どうも、shoheiです。

NEMウォレットアプリの完成を目指してPWAアプリの作り方を連載していきます。

今回は「PWAアプリの環境構築」から「PWAアプリを端末へインストールして起動する」ところまでをご紹介します。

開発環境

  • macOS High Sierra 10.13.4
  • Google Chrome
  • vue-pwa-boilerplate 2.1.0
  • Vue.js
  • TypeScript

PWAとは

PWA(Progressive Web Application)はカンタンに言うと「Webをネイティブアプリのように扱えるWebアプリケーション」です。PWA化されたWebを「ホーム画面に追加」することで、Android/iOSのネイティブアプリのようになります。

今までAndroid/iOSアプリを開発する場合はそれぞれ異なるプログラミング言語と開発環境下で開発する必要があり、開発コストが2倍かかっていました。PWAとしてWebアプリケーションを開発すれば、Android/iOS/Web全てのアプリケーションを開発することができ、開発コストを抑えることができます。

Service Worker

ServiceWorkerはPWA化するために必要なスクリプトです。

Service Worker とは
Service Worker はブラウザが Web ページとは別にバックグラウンドで実行するスクリプトで、Web ページやユーザのインタラクションを必要としない機能を Web にもたらします。すでに現在、プッシュ通知やバックグラウンド同期が提供されています。さらに将来は定期的な同期、ジオフェンシングなども導入されるでしょう。このチュートリアルで説明する機能は、ネットワークリクエストへの介入や処理機能と、レスポンスをプログラムから操作できるキャッシュ機能です。

引用元

PWAの条件

WebアプリをPWA化するためには以下の条件を満たさなければいけません。

  • httpsであること
  • ブラウザがPWAに対応していること
    ※対応状況

PWAとVue.jsの環境構築

vue-pwa-boilerplate

vue-pwa-boilerplateを使い環境構築していきます。

vue-pwa-boilerplateはVue.jsでPWAで開発するためのひな形であり、必要な環境が揃っています。

npmを使ってvue-cliをインストールします(npmがインストールされていない場合は先にnpmをインストールしてください)。

npm run devで以下のような画面が立ち上げればインストール成功です。
pwa_vuejs_nem_wallet

うむ、ええ感じや。

Workboxプラグイン

PWA化するためにはビルドが必要です。npmでビルドします。

ビルドするとdistフォルダが生成されます。

distフォルダは実行ファイル群のようなもので、ホスティングサーバーへdeployする場合はこのdistフォルダをdeployします。

既にSWPrecacheWebpackPluginが導入されているためこのままでも良いのですが、今後考えるとWorkboxだ!という記事を見たのでWorkboxを導入します(とりあえず乗っかるミーハーです)。

WorkboxはPWA化に必要なService Workerをいい感じに作ってくれるプラグインです。ページやファイルなどのキャッシュの生存期間などを指定することができます。

Workboxをインストールします。

コード変更

インストールできたらコードを変更していきます。

build/webpack.prod.conf.js

主な?パラメータの概要は以下の通り。

・ skipWaiting
ページ更新時にServiceWorkerをinstalling状態からすぐにactive状態に移行させたい場合はtrueにする

・ clientsClaim
ServiceWorkerがactive状態になった時にすぐにクライアント制御を開始する場合はtrueにする

・ runtimeCaching
キャッシュ戦略、対象ファイルのキャッシュ設定する場合は追加する

今回はskipWaitingとclientsClaimを true にし、runtimeCachingは なし とします。
もう一度npm run buildでビルドして完了です。

ServiceWorkerを確認

ServiceWorkerの状態を確認します。

開発環境下でServiceWorkerの挙動を確認する場合はWeb Service for Chromeを使用します。
※ npm run devでは確認できません。

Web Service for Chromeを立ち上げCHOOSE FOLDERを選択しdistフォルダを指定します。Web Server URL(s)にアクセスすると、先ほど作成したページが開かれます。
pwa_vuejs_nem_wallet

Chromeの「検証」からApplication項目のService Workersを選択すると、Service Workerの状態が確認できます。

statusがactivated and is runningとなっていればOKです。ServiceWorkerが正常に動いています。

GitHubの利用

ここまで作ったアプリをGitHubへアップロードしましょう!

GitHubにはGitHub Pagesというホスティングサービスがあり、アップロードするとWebページとして公開できるめちゃくちゃ便利なサービスです。

Publish Repositoryを作成

GitHub Desktopを使います。GitHubのアカウントを作成後、GitHub Desktopをインストールしてください。

インストールできたらGitHub Desktopを立ち上げ、repositoryを作成します。
pwa_vuejs_nem_wallet

対象フォルダを先ほど作ったeasy-walletを指定します。
pwa_vuejs_nem_wallet

ローカル上にeasy-walletのrepositoryが作成されます。これをPublish Repositoryとして作成しましょう。

Keep this code privateのチェックを外し、Publish Repositoryを選択してください。
pwa_vuejs_nem_wallet

Publish Repositoryの作成完了です。

GitHubにアクセスするとソースコードがアップロードされています。
https://github.com/hukusuke1007/easy-wallet

GitHub Pages

さて、先ほどアップロードしたアプリをGitHub Pagesを使って公開しましょう!!

GitHub Pagesのパスを合わせる

っといきたいところですが、このまま公開しても閲覧することができません。Vue-cliのパス設定がGitHub Pagesと合っていないめ404エラーとなってしまいます。

そこで、Vue-cliのパス設定のコードを変更します。

config/index.js

GitHub Pagesが指定するフォルダ名がdocsのためdistからdocsへ変更とパスも変更しています。

static/manifest.json

iconsの src 二箇所と start_url を以下のように変更します。

なお、json内でコメントアウトすると有効にならないのでコメントアウトはしないようにしてください。

変更しましたらもう一度 npm run build でビルドします。

ビルドが完了しましたらGitHubへPushして完了です。

GitHub Pagesを有効にする

GitHub Pagesを有効にします。GitHub内のSettingを選択します。

GitHub Pages項目まで進み、Select sourceを「master branch/docs folder」にしてSaveします。

SaveするとGitHub Pagesが有効になり、アクセスできるURLが表示されます。
pwa_vuejs_nem_wallet

こんな感じのURLができあがります。
https://hukusuke1007.github.io/easy-wallet/

さぁぁぁぁぁぁああ!アクセスしましょう!

pwa_vuejs_nem_wallet

無事、GitHub Pagesで公開することができました!!

PWAアプリを起動

GitHub PagesのURLをスマフォのブラウザで開きます。ブラウザのメニューにある「ホーム画面に追加」を選択し、アプリを追加します。

pwa_vuejs_nem_wallet

pwa_vuejs_nem_wallet

pwa_vuejs_nem_wallet

pwa_vuejs_nem_wallet

インストールされました。
そして待望の起動……..

pwa_vuejs_nem_wallet


きたぁぁぁあああ!!

ネイティブアプリのように起動しました!!

これでPWA化完了です。お疲れ様でした!

次回はこの環境にTypeScriptを導入していきたいと思います。

GitHub

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*

Translate »