<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pwa on デジタルアーカイブシステムの技術ブログ</title><link>https://tech.ldas.jp/ja/tags/pwa/</link><description>Recent content in Pwa on デジタルアーカイブシステムの技術ブログ</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 26 Apr 2026 10:00:00 +0900</lastBuildDate><atom:link href="https://tech.ldas.jp/ja/tags/pwa/index.xml" rel="self" type="application/rss+xml"/><item><title>フレームワーク移行後も退役してくれない旧 Service Worker を kill-switch SW で撤去する</title><link>https://tech.ldas.jp/ja/posts/service-worker-kill-switch-after-pwa-migration/</link><pubDate>Sun, 26 Apr 2026 10:00:00 +0900</pubDate><guid>https://tech.ldas.jp/ja/posts/service-worker-kill-switch-after-pwa-migration/</guid><description>&lt;h2 id="症状">症状&lt;/h2>
&lt;p>あるサイトを Vue 2 / Nuxt 2 の SPA から、Service Worker を持たない別フレームワーク（移行先のフレームワーク）に載せ替えました。デプロイ自体は成功し、CDN のキャッシュも purge 済み。新しい URL を直接踏むと、新しい HTML が返ってきます。&lt;/p>
&lt;p>ところが、運用を始めてしばらくすると次のような非対称な見え方の報告が上がってきました。&lt;/p>
&lt;div class="table-wrapper">
 &lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>アクセス経路&lt;/th>
 &lt;th>表示される内容&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>旧サイトを過去に開いたことのある PC のブラウザ&lt;/td>
 &lt;td>&lt;strong>旧 HTML（移行前のもの）&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>同じブラウザのシークレットウィンドウ&lt;/td>
 &lt;td>新 HTML&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>別の端末・別のブラウザ&lt;/td>
 &lt;td>新 HTML&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>別ドメインから同じバックエンドを叩く検証環境&lt;/td>
 &lt;td>新 HTML&lt;/td>
 &lt;/tr>
 &lt;/tbody>
 &lt;/table>
&lt;/div>
&lt;p>サーバ側のログを見ても、リピーターからのリクエストが極端に少ない。返事の中身がブラウザのどこかで「先回り」されています。これは典型的に &lt;strong>Service Worker（以下 SW）の cache-first&lt;/strong> が効いている挙動でした。&lt;/p>
&lt;h2 id="原因">原因&lt;/h2>
&lt;p>旧サイトは &lt;code>@nuxtjs/pwa&lt;/code> を有効にしていたため、&lt;code>/sw.js&lt;/code> に &lt;strong>workbox 製の SW が register 済み&lt;/strong>でした。&lt;code>@nuxtjs/pwa&lt;/code> のナビゲーションリクエストの既定戦略は &lt;strong>NetworkFirst&lt;/strong>（オフライン時のみキャッシュにフォールバック）ですが、ビルド成果物（&lt;code>/_nuxt/*&lt;/code> 配下のハッシュ付き JS / CSS / 画像など）は &lt;strong>precache に積まれて CacheFirst&lt;/strong> で配信されます。SW がインストールされた瞬間に、これらが &lt;strong>Cache Storage に焼き付き&lt;/strong>ます。&lt;/p>
&lt;p>ナビゲーションが NetworkFirst でも、&lt;strong>ネットワークタイムアウトや一時的な失敗&lt;/strong> が起きると即座に旧 HTML が返る経路があり、加えて precache されたバンドルは古いものが返り続けます。結果として:&lt;/p></description></item></channel></rss>