サービスワーカーのライフサイクル
サービスワーカーが経る install → activate → 稼働(fetch)の各段階。旧タブがすべて閉じるまで新版が引き継がれない「waiting」という仕組みを意図的に持つ。扱いが難しく、「PWA が更新されない」の定番原因である。
段階は、install(リソースのキャッシュなどの準備)、activate(古いキャッシュの掃除と制御の引き継ぎ)、そして稼働してネットワークリクエストを横取りする fetch だ。難所は、新しいサービスワーカーをデプロイするとインストールはされるもののwaiting 状態で止まり、旧版が制御しているタブがすべて閉じられるまで有効にならないこと。動作中のアプリの足元でコードを差し替えないための仕様だが、そのせいでユーザーはタブを全部閉じるまで古い版を見続けることが多い。制御手段は、新版をすぐ有効にする skipWaiting() と、開いているタブを掌握する clients.claim() で、多くは「新しい版があります。再読み込みしますか?」という通知と組み合わせる。PWA の確実な更新とオフライン対応には、この理解が欠かせない。Cache Storage API や Broadcast Channel とも関連する。