トラブルシュート

Service Workerのせいで古い内容が表示され続けるときの対処

中身を更新して再アップしたのに、相手の画面では古いまま。更新したはずなのに反映されない原因として見落とされがちなのがService Worker(SW)のキャッシュです。SWの仕組みと、古い内容が居座る理由、確実にリセットする手順を整理します。

Service Workerとは何をしているのか

Service Worker(SW)は、ページとネットワークの間で動く常駐スクリプトです。一度登録されると、ページを閉じても残り、リクエストを横取りしてキャッシュから応答できます。オフライン対応や高速表示のために使われます。

便利な反面、SWがキャッシュした古いHTMLやJS・CSSを返し続けると、サーバ側のファイルを差し替えても画面に反映されない、という現象が起きます。リロードしても直らないのが厄介な点です。

PWAテンプレートやフレームワークの生成物には、最初からSWが組み込まれていることがあります。意図せず登録されているケースを疑うことが第一歩です。

古い内容が残る典型パターン

SWがあるのに更新戦略が「キャッシュ優先」になっていると、新しいファイルを取りに行く前にキャッシュを返してしまいます。結果、何度リロードしても古い表示が続きます。

通常のリロード(F5)ではSW自体は更新されにくく、ブラウザのタブをすべて閉じるまで古いSWが居座ることもあります。これが「自分の環境だけ直らない」混乱を生みます。

強制リロード(スーパーリロード)で一時的に直っても、SWの登録が残っていれば次回また古いキャッシュが返るため、根本対処にはなりません。

症状別チェック表

Service Workerのせいで古い内容が表示され続けるは、症状を分けずに直そうとすると原因探しが長引きます。まず「自分だけで起きるのか」「全員で起きるのか」「特定ブラウザだけか」「差し替え後だけか」を切り分けます。

確認順序を固定すると、相対パス、ファイル名、キャッシュ、認証、外部読み込みのどこで止まっているかが見えます。修正後はローカル確認だけで終わらせず、実際の共有URLで再表示して、相手と同じ条件で直ったことを確認します。

  • 自分だけ表示されない: キャッシュ、ログイン状態、ブラウザ拡張、端末幅を確認する
  • 全員で表示されない: ファイル構成、相対パス、大文字小文字、アップロード漏れを見る
  • 一部だけ崩れる: CSS/画像/JSごとに読み込みエラーを分ける
  • 差し替え後だけ古い: URL、キャッシュ、更新対象ファイルの取り違えを確認する

確実にリセットする手順

SWが原因かどうかを確認し、登録を解除すれば確実に最新を表示できます。開発者ツールから操作します。

  1. 開発者ツールを開き、Applicationタブの Service Workers を表示する
  2. 対象オリジンに登録されたSWがあるか確認する
  3. 「Update on reload」にチェックを入れるか「Unregister」で登録を解除する
  4. 同じくApplicationタブの Storage から該当キャッシュ(Cache Storage)を削除する
  5. タブを一度すべて閉じてから開き直し、最新が表示されるか確認する
  6. 再発する場合は、SWの更新戦略を network-first などに見直す

そもそもSWを入れるべきかの判断

頻繁に中身を差し替える確認・レビュー用のページでは、SWのキャッシュは更新事故の原因になりやすく、メリットよりデメリットが上回ることがあります。オフライン対応が必須でないなら、SWを外す選択も現実的です。

どうしてもSWを使う場合は、HTMLはキャッシュせずネットワーク優先にする、バージョン番号でキャッシュ名を切り替えるなど、更新が確実に届く設計にしておくと事故が減ります。

「自分では更新したのに相手に届かない」という相談の多くは、相手側に残った古いSWが原因です。配布前にSWの有無を点検しておくと安心です。

確認共有の場面での回避

ギガサイト便は同じURLのままファイルを差し替えられるため、リンクを送り直さずに中身だけ更新できます。ただし相手のブラウザにSWが残っていると、URLが同じでも古い表示が返る可能性があります。共有するHTMLにSWが含まれていないかを事前に確認しておくのが確実です。

更新が反映されないと相手から言われたら、まずSWの登録解除とキャッシュ削除を案内すると切り分けが早く進みます。アクセスログでいつ閲覧されたかを確認すれば、差し替え前後どちらを見ているかの推測にも役立ちます。

よくある質問

強制リロードすればSW問題は解決しますか

一時的に最新が表示されることはありますが、SWの登録自体が残っていれば次回また古いキャッシュが返ります。根本解決には開発者ツールでの登録解除とキャッシュ削除が必要です。

自分の画面では新しいのに相手は古いままなのはなぜですか

SWは各ブラウザ・各端末ごとに登録され、キャッシュもそれぞれに残ります。あなたが解除済みでも相手の環境に古いSWが残っていれば、相手だけ古い表示になります。

SWが登録されているかどうかをどう確認しますか

開発者ツールのApplicationタブにあるService Workersの項目で、現在のオリジンに登録されたSWが一覧表示されます。そこからUnregisterで解除できます。

確認用ページでSWは外すべきですか

頻繁に差し替えるレビュー用途では、SWのキャッシュが更新事故を招きやすいため、オフライン対応が不要なら外すのが無難です。使うなら少なくともHTMLはネットワーク優先にしておくと安全です。

原因が分からないときはどこから確認すべきですか?

まず自分だけの問題か全員の問題かを分けます。次にシークレットウィンドウ、別ブラウザ、スマホで確認し、ファイル構成・相対パス・キャッシュ・認証設定を順に見ます。

関連記事

トラブルシュート

公開後にJavaScriptが動かないときの原因と直し方

ローカルでは動いていたボタンやアニメーションが公開後に反応しなくなった方向け。JavaScriptが止まる主な原因をファイルパスや読み込み順の観点で切り分け、自分で直せるかどうかを判断できます。

5分で読める
トラブルシュート

公開後に動画が再生されないときの対処

デモページや資料に埋め込んだ動画が公開後に再生されなくなった方向け。動画ファイルの添付漏れ・パスのズレ・ブラウザの自動再生制限を症状ごとに切り分け、自分でできる確認と対処を把握できます。

4分で読める
トラブルシュート

公開したHTMLのフォームが送信できないときの対処

問い合わせフォームやアンケートの送信ボタンが押せない・エラーになる方向け。静的ファイル公開ではフォームの動作に制約がある理由を理解し、外部サービス連携などの現実的な解決策を選べるようになります。

5分で読める
トラブルシュート

iframeが表示されないときの原因と対処

地図や外部コンテンツをiframeで埋め込んだのに公開後に枠が空白になった方向け。表示許可・HTTPSとHTTPの混在・相対パスのズレを症状ごとに切り分け、適切な対処を選べるようになります。

4分で読める
トラブルシュート

外部CDNのCSS・JSが読み込めないときの対処

CDNからCSSやJSを読み込む構成にしたらデザインが崩れて機能が動かなくなった方向け。URLの誤りやHTTPSの混在・バージョン指定の問題を原因ごとに整理し、確認と修正の手順を把握できます。

5分で読める
「トラブルシュート」の記事をもっと見る →