PWA デプロイ即反映 — Service Worker 自動 reload レシピ
PWA のスマホ側で新版が反映されない問題を、SW の VERSION+postMessage+updateViaCache=none+版タグ表示 の3点セットで「デプロイ即・全tab自動 reload」に変える完全レシピ。Next.js/Vite/Vanilla 共通
約7,600トークンの節約 (API料金換算で約11円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「PWA デプロイ即反映 — Service Worker 自動 reload レシピ」は、Web開発カテゴリのAI指示書(MDファイル)です。PWA のスマホ側で新版が反映されない問題を、SW の VERSION+postMessage+updateViaCache=none+版タグ表示 の3点セットで「デプロイ即・全tab自動 reload」に変える完全レシピ。Next.js/Vite/Vanilla 共通この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約7,600トークン(API料金換算で約11円)・95%のトークンを節約できます。
- カテゴリ
- Web開発
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約8,000トークン
- この巻物使用時
- 約400トークン
- 節約量
- 約7,600トークン (約11円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/pwa-service-worker-reload/raw を読み込んで、この指示書どおりに実装して"
中身
PWA デプロイ即反映(Service Worker 自動 reload)— 完全再現指示書
Next.js / Vite / Vanilla の PWA で、コードを更新して server が新版を配信していても、 スマホ側は Service Worker と Chrome HTTP キャッシュで 古い bundle を掴んだまま になる問題を、 「デプロイ即・全 tab 自動 reload」に変える完全レシピ。
何が起きる問題か
- server は新版を返している (HTML bundle 差し替え済み)
- SW が古い bundle を cache から返している / Chrome の HTTP キャッシュが古い .js を返す
- クライアントは 1 週間前の UI が表示されたまま
- ユーザーに「PWA を削除して入れ直して」と言うのは苦しい
3 点セット(これで解決)
1. Service Worker に VERSION 定数 + activate で全 tab に postMessage
public/sw.js:
const VERSION = 'vN-YYYY-MM-DD'; // deploy ごとに bump
self.addEventListener('install', (e) => {
self.skipWaiting();
});
self.addEventListener('activate', (e) => {
e.waitUntil((async () => {
await self.clients.claim();
const tabs = await self.clients.matchAll({ type: 'window' });
for (const t of tabs) {
try { t.postMessage({ type: 'sw-updated', version: VERSION }); } catch {}
}
})());
});
// network-first passthrough — server が生きてる時は常に fresh を fetch
self.addEventListener('fetch', (event) => {
event.respondWith(fetch(event.request).catch(() => new Response('offline', { status: 503 })));
});
2. クライアント側: SW register 時に updateViaCache='none' + message listener で自動 reload
React 例 (Vite / Next.js どちらでも同じ):
useEffect(() => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js', {
scope: '/',
updateViaCache: 'none', // SW 自体のキャッシュを回避
}).then((reg) => {
reg.update().catch(() => {});
navigator.serviceWorker.addEventListener('message', (e) => {
if (e.data?.type === 'sw-updated') {
window.location.reload();
}
});
}).catch(() => {});
}
}, []);
3. UI に版番号タグを表示(人間が新旧を目視判別)
タイトルバー / ヘッダに版番号を出す:
<h1>アプリ名 <span className="text-[9px] text-zinc-600 ml-1">v3-08-04</span></h1>
デプロイフロー
大きな UI 変更をした時:
sw.jsのVERSION定数を bump ('v3-08-04'→'v4-08-05')- UI 側のタグも合わせて更新
- デプロイ
- 開いてる全 PWA が SW update → activate → 全 tab に postMessage → 自動 reload
検証
デプロイ後、実機の PWA を開いて:
- 版番号タグが新しくなっているか目視確認
- なっていなければキャッシュクリア (最初の 1 回だけ、以後は自動)
Why これで解決するのか
updateViaCache: 'none'は SW 本体の fetch を必ずネットワークにする → 新 VERSION 検知が早いskipWaiting()+clients.claim()で「次の tab close まで待たずに」新 SW が activate- postMessage →
location.reload()で開いてる tab を強制更新 - ネットワークファースト fetch で JS/HTML bundle も新版を掴む
やらないこと
caches.open()で pre-cache しない (キャッシュ管理コスト >>> 帯域節約)- Chrome の HTTP キャッシュヘッダ (
Cache-Control) だけに頼らない (SW を挟む以上 SW 側の制御が必要) - サービス側で「更新あります」バナーを出す UX は 1 tap 追加になり離脱するので、自動 reload の方が良い
適用範囲
- Next.js App Router / Pages Router いずれも
- Vite + React / Vue
- Vanilla HTML PWA
- Cordova / Capacitor 系にも Web View 部分は同じ
よくある質問
+「PWA デプロイ即反映 — Service Worker 自動 reload レシピ」とは何ですか?
PWA のスマホ側で新版が反映されない問題を、SW の VERSION+postMessage+updateViaCache=none+版タグ表示 の3点セットで「デプロイ即・全tab自動 reload」に変える完全レシピ。Next.js/Vite/Vanilla 共通
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約8,000トークンかかりますが、この巻物を使えば約400トークンで済みます。差し引き約7,600トークン(API料金換算で約11円)・95%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
Next.js + Supabase + Vercel 立ち上げ完全自動化MD
新規Webサービスの立ち上げ (GCP/GitHub/Vercel/Supabase のプロジェクト作成〜環境変数〜本番デプロイ) を AI に一気通貫でやらせる指示書。人間の作業はログイン1回だけ。
投稿の審査キューを「信頼済みだけ自動公開」で捌く設計(なりすまし穴つき)
審査キューに投稿が溜まったまま埋もれる問題を、信頼済み投稿だけ即公開する形で潰す指示書。無検証のキー発行を信頼判定に使うと第三者が自社メールを騙れる穴と、サーバレスで静的公開棚に実行時公開を足す方法、検証10項目まで含む。
DB型サイトを「一覧だけ会員限定・個別ページは残す」に切り替える指示書(Next.js App Router)
自社DBで集客していたサイトが競合のリスト抜き取りに気づいた時の改修手順。名前が並ぶバルクな一覧だけを会員限定にし、個別ページはtitle/H1とCTAを残す。ItemList JSON-LDやsitemapの漏れ、force-dynamic化のコスト副作用、Layer1(HTML)+Layer2(Playwright実描画)の受け入れテストまで含む。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア