
Googleが推奨しているPWA(Progressive Web Apps)をWordPressに対応させています。
今までは理解がなかったので、お手軽にプラグインを使っていました。
しかし、WordPressはプラグインが少ないほうが良いという意見もあり、私もそれに賛同しています。
今回、とても良いサイトを参考にやってみたことをまとめます。
やることは?
サイトのSSL化
PWAに対応するには、サイトのURLが「https://~」になっていることが必須です。
私は「エックスサーバー
」を使っているので、Webサイトの常時SSL化(X Serverマニュアル)を参考に実装しました。
アイコン画像の準備
アプリのアイコン画像として正方形の画像を用意します。
サイズは、1辺が「192px」と「512px」の2つが必須。
ちなみに、私が使っていたプラグインは「144px」「96px」「48px」もありました。
アイコン画像をWordPressにアップロードして、そのURLを控えておきましょう。
Webアプリマニフェストの作成
アプリの設定をjsonファイルで記述します。
ファイル名は任意なものの「manifest.json」とするのが一般的で、アップロードはサイトの一番上の(WordPressをインストールした)ディレクトリに保存します。
ちなみに、将棋教室の「manifest.json」はこんな風に書きました。
{"name": "オンライン将棋教室 香","short_name": "オン香","icons": [{"src": "【512x512のアイコン画像がアップロードされているパス】","type": "image/png","sizes": "512x512"},{"src": "【192x192のアイコン画像がアップロードされているパス】","type": "image/png","sizes": "192x192"}],"start_url": "/?source=pwa","scope": "/","display": "fullscreen","background_color": "#f6cc82","description": "自宅で、気軽に、公認の将棋指導員の、マンツーマンレッスンが受けられる、インターネット上の将棋教室です。","theme_color": "#f6cc82","orientation": "any"}
詳細はGoogle Developersの記事をご覧ください。
「start_url」を「/?source=pwa」と書いてあるのがなるほどの記述で、アプリからのアクセスを計ることができます。
計測しなくて良ければ、単に「/」だけ記述すれば良いでしょう。
サービスワーカーの作成
サービスワーカーを作ることで、オフライン時の挙動が設定できます。
ファイル名は任意で良く、JavaScriptで記述します。
「manifest.json」と同じく、サイトの一番上の(WordPressをインストールした)ディレクトリにアップロードします。
Google Developersの記事や参考にしたサイトにしたがって、次のように書いてみました。
const CACHE_NAME = '2022-04-01';const OFFLINE_URL = 'https://xn--eckl3qmbc2cv902cnwa746d81h183l.com/';const urlsToCache = ['https://xn--eckl3qmbc2cv902cnwa746d81h183l.com/'];const neverCacheUrls = /\/wp-admin|\/wp-login|preview=true|\/cart|ajax|login/;self.addEventListener('install', (event) => {event.waitUntil(caches.open(CACHE_NAME).then((cache) => {return cache.addAll(urlsToCache);}));});self.addEventListener('activate', (event) => {event.waitUntil(caches.keys().then((keys) =>Promise.all(keys.map((key) => {if (CACHE_NAME !== key) {return caches.delete(key);}}))).then(() => {self.clients.claim();}));});self.addEventListener('fetch', (e) => {if (!e.request.url.match(/^(http|https):\/\//i)) {return;}if (new URL(e.request.url).origin !== location.origin) {return;}if (neverCacheUrls.test(e.request.url)) {return;}if (neverCacheUrls.test(e.request.referrer)) {return;}if (e.request.referrer.match(/^(wp-admin):\/\//i)) {return;}if (e.request.method !== 'GET') {e.respondWith(fetch(e.request).catch(() => {return caches.match(OFFLINE_URL);}));return;}if (e.request.mode === 'navigate' && navigator.onLine) {e.respondWith(fetch(e.request).then((response) => {return caches.open(CACHE_NAME).then((cache) => {cache.put(e.request, response.clone());return response;});}));return;}e.respondWith(caches.match(e.request).then((response) => {return (response ||fetch(e.request).then((response) => {return caches.open(CACHE_NAME).then((cache) => {cache.put(e.request, response.clone());return response;});}));}).catch(() => {return caches.match(OFFLINE_URL);}));});
上3行の変数に代入する値を変えれば、どのサイトでも使えます。
WordPressのヘッダーを編集
アップロードした「manifest.json」と「サービスワーカー」を読み込むように、WordPressのヘッダー(header.php)を編集します。
<head>~</head>の間に次のコードを記述します。
※「サービスワーカー」のファイル名は「sw.js」にしてあります。
<link rel="manifest" href="https://xn--eckl3qmbc2cv902cnwa746d81h183l.com/manifest.json"><meta name="theme-color" content="#f6cc82"><meta name="apple-mobile-web-app-title" content="オンライン将棋教室 香"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="default"><script>if ('serviceWorker' in navigator) {window.addEventListener('load', function () {navigator.serviceWorker.register('/sw.js').then(function (registration) {console.log('ServiceWorker registration successful with scope: ', registration.scope);},function (err) {console.log('ServiceWorker registration failed: ', err);});});}</script>
正しく設置されたかチェックするには?
Androidスマホでアクセスするか、Googleデベロッパーツールで確認できます。
「Google Chorme」のデベロッパーツールを使った例を紹介します。
step
1テストしたいWebページを開く
step
2デベロッパーツールを開く
右上のメニューから、「その他ツール」⇒「デベロッパーツール」で開けます。ショートカットキーなら「Ctrl + Shift + I」です。

step
3Lighthouseを選ぶ
「>>」をクリックすると隠れた部分が出てくるので、「Lighthouse」をクリックします。

step
4レポートを作成する
「Progressive Web App」にチェックが入っていることを確認して、「Generate report」をクリックします。

step
5結果を確認する
「INSTALLABLE」と表示されていればPWA化に成功です。

運用上の注意
サイトのデザインを変えた場合、サービスワーカーのJavaScript内に記述した「CACHE_NAME」の値を変えます。
これを変えないと、デザイン変更前のキャッシュが読み込まれてしまうため。
この投稿の例では日付を用いましたが、「ver1.01」のような運用方法もあるようです。
まとめ
WordPressをプラグインなしでPWAに対応させるには、アイコン画像と「manifest.json」と「sw.js」を作り、アップロードして、それらを読み込むコードを記述します。
最初の手間は多いものの、1回やってしまえば終わる話なので、今回ようやく重い腰を上げて設定しました。
プラグインを減らしつつPWA化できて満足です。