ローカルネットワーク内でPWAを動かす(javascript)

JavaScript

ローカルネットワーク内完結でPWAをAndroidで試そうと思って躓いたので備忘録。

まず最初にPWAの要であるServiceWorkerを動かすための条件を確認します。
①httpsであること
②localhostであること

①または②のどちらかが必要になります。
セキュリティ上の理由からhttpsであることが大前提のようで、開発を意識してlocalhostは特別に許可されている感じ。

httpsで試す


最初にhttpsを試しました。どこかにデプロイしてしまえば楽なのですが、今回は外部のネットワークにはつながない想定なのでNG。じゃあどうするかというと、オレオレ証明(Self-Signed Certificates)でなんちゃってhttpsサーバーを立ててみました。
条件は満たしたのでいけると思ったのですが、結果から言うとオレオレ証明では禁止されています。
Androidに証明書を転送して、Androidの設定 ⇀ セキュリティとロック画面 ⇀ 暗号化と認証情報 ⇀ ストレージからのインストール を行って証明書を登録してもダメでした。

localhostで試す

httpsがダメだったのでlocalhostで試します。
ざっくり以下の方法で通します。

  • AndroidのUSBデバッグを有効化する
  • PCに接続する
  • Chromeからデバイスにアクセスする
  • port fowardingする
  • AndroidのChromeからlocalhostにアクセスする。

注意する点はhttp://localhost*** という感じでhttpでアクセスします。
httpsでlocalhostにアクセスしても前述のオレオレ証明制限に当たってしまうため、ServiceWorkerを動かせません。

PCからデバッグする方法はこちらが詳しいです。

Remote debug Android devices  |  DevTools  |  Chrome for Developers
RemotedebuglivecontentonanAndroiddevicefromaWindows,Mac,orLinuxcomputer.

最終的に
chrome://inspect/#devices
にアクセスしてデバイスが表示されていればOK。

デバッグ画面に入るとDevicesの一番上にPort fowardingがあるので押しましょう。
PC側でホストしているポートをfowadingします。

ここまで行けばAndroidからlocalhostにアクセスすればPCでホストされているlocalhostにアクセスされます。
localhostでさえあればPWAとしてServiceWorkerが利用できるので、あとはお好きなように!

コメント