【PWA】ランタイムキャッシュを実装するには?動かないときにチェックするところは?

Vue.js

PWAでのランタイムキャッシュに関することをまとめておきます。

スポンサーリンク

ランタイムキャッシュとは?

動的にアクセスされたリソースをキャッシュさせることをいいます。

例えば、APIで取得したjsonを保存しておき、オフラインでも見れるようにするといったことができます。

chrome devtool
キャッシュを参照させることで、パケットやローディングタイムを削減できます。
スポンサーリンク

@vue/cli-plugin-pwaならかんたんに実装できる!

Vueで作成したプロジェクトであれば、@vue/cli-plugin-pwaというパッケージを追加することで、かんたんにランタイムキャッシュを実装できます。

https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa

通常はservice-workerを手動で実装する必要がありますが、このパッケージを入れてしまえばイチコロです!

手順

さっそくランタイムキャッシュを実装する手順を紹介。

@vue/cli-plugin-pwaをインストール

npmなどで @vue/cli-plugin-pwaをインストールします。

npm install "@vue/cli-plugin-pwa"

PWA対応だけではなく、プレキャッシュやランタイムキャッシュ(APIキャッシュ)も容易に実装できます。

プレキャッシュは自動的に有効になる

@vue/cli-plugin-pwaをインストールすれば、自動的にプレキャッシュは有効になります。

jsやcss、画像ファイルなどのアセットは、初回アクセス時に自動的にキャッシュされるようになります。

ランタイムキャッシュを有効にする

この記事の本題であるランタイムキャッシュ。

@vue/cli-plugin-pwaなら、vue.config.jsに以下を追加するだけでOKです。

module.exports = {
pwa: {
    name: 'PWAアプリケーション名',
    themeColor: 'テーマカラー(#aabbccなどで指定する)',
    manifestOptions: {

        background_color: "#adcdff"
    },
    workboxPluginMode: 'GenerateSW',
    workboxOptions: {
        runtimeCaching: [{
            // キャッシュするファイルのURLを正規表現で指定する
            urlPattern: new RegExp( "https://hoge.com/.*"),
            handler: 'CacheFirst',
        }]
    }
},
}

ビルドする

npm run buildを実行し、ビルドします。

すると、service-worker.jsが自動的に作成され、ランタイムキャッシュが有効になります。

あとはサーバーにアップすれば、キャッシュが動作するようになります。

動かないときのチェックポイント

ここまで実装方法を記してみましたが、うまくいかないときのチェックポイントをまとめておきます。

チェック① service-worker.jsにランタイムキャッシュの部分が出力されているか?

まずはここをチェックしましょう。

buildすると、distフォルダにservice-worker.jsというファイルが出力されます。これにランタイムキャッシュの部分が正しく出力されているか確認します。

registerRouteという記載があれば、正しく出力されています。

出力されていない場合は、vue.config.jsを確認し、記述があっているか確認してください。

チェック② URLパターンがあっているか?

問題なくランタイムキャッシュさせるコードが出力されている場合は、内容があっているか確認します。urlPatternが正しいかチェックします。

urlPattern: new RegExp("https://korekore.com/hoge/.*")

urlPatternにはRegExpを使うことができます。

  • HTTPSであること
  • ホストは自由に指定できる(PWAをホストするサーバーとは別のホストでも動作します)
  • Javascriptの正規表現で指定すること

チェック③ ホスティング環境が対応しているか?

ホスティング環境にも制限があります。

  • httpsに完全対応していること
  • 完全な証明書でホストされていること(自己署名証明書では動作しない)
  • なので、テスト環境ではうまく動作しないことがある
  • サーバーのトップディレクトリに配置すること(設定のいかんによってはサブディレクトリでも可能だが、通常はトップディレクトリに配置する必要あり)
  • ポートは自由(1200や8080でホストしてもOK。ただしHTTPSに対応していること)

いろいろと制限があるので、ひとつひとつ確認していく必要があります。

axiosでは動かない?→動きます

axiosでは動かず、fetchをつかってAPIにアクセスしなければならないという話がありますが、これは違います。

axiosでもまったく問題なくキャッシュされます。特殊な仕込みは不要です。

参考

ページにたどり着きにくいので、参考になるドキュメントもメモしておきます。

PWAに関するconfig

Workbox - Chrome for Developers
Production-ready service worker libraries and tooling.

ランタイムキャッシュに関するオプション

API Reference - Chrome for Developers
Reference for Workbox types.

コメント

タイトルとURLをコピーしました