キャッシュとは何か? なぜ「更新したのに反映されない」が起きるの? ── 2 回目が速い理由と、その副作用の直し方

こんな経験はないでしょうか。会社のホームページをやっと更新した ── なのに開いてみると、表示は古いままです。あるいは逆に、「サイトを直しました」と連絡をもらったのに、自分の画面では何も変わっていません。困って調べたりサポートに聞いたりすると、返ってくる答えは大抵これです。「キャッシュをクリアしてください」。言われた通りにすると、たしかに直ります。でも、いま自分が何を消して、なぜそれで直ったのかを説明できる人は、実は多くありません。

本記事は、この「キャッシュ」の正体を根本から解説します。先に全体の見取り図を 1 行で言うと ── キャッシュとは、同じページが 2 回目から速く開く理由そのものであり、「更新したのに反映されない」事件は、その速さと引き換えに起きる副作用です。つまりこの 2 つは、同じ仕組みの表と裏なのです。こんな心当たりがあれば、この先を読んでみましょう。

  • サイトを更新したのに古い表示のままで困ったことがある(自分の画面でも、閲覧者の画面でも)
  • キャッシュをクリアしてください」と言われるが、何をしているのか説明できない
  • 同じページが2 回目から明らかに速く開く理由を考えたことがない
  • キャッシュを消すとログアウトされてしまわないか、いつも不安になりながら消している

この記事では、初学者でもわかりやすいよう専門用語は多用しません。また、仕組みの解説で終わらず、「反映されない」をどの順で直すべきか・クリアすると何が起きるかという実用判断まで扱います。

疑問本記事の該当章
キャッシュって結局何なの?§1
キャッシュはどこにあるの?§2
古い表示はいつまで続くの?§3
なぜ「更新したのに反映されない」が起きる?§4
どうやって直せばいい?§5
クリアするとログアウトされる?FAQ Q1
💡 Tip

当サイトの総集編 URLを入力してから画面が表示されるまで では、「倉庫の中身が古いままで起きる事件は、それだけで記事 1 本になる」と予告しました。本記事がその 1 本です。

1. キャッシュの正体 ── 一度取り寄せた部品を手元で使い回す仕組み

1-1. ページ 1 枚は「取り寄せた大量の部品」で出来ている

あなたがページを 1 枚開くとき、届いているのは 1 個のファイルではありません。まず設計図(HTML)が届き、ブラウザはそれを読みながら、足りない部品 ── 画像、デザインの指示書(CSS)、動きの部品(JavaScript)── を 1 つずつサーバーへ取り寄せに行きます(この取り寄せの流れの全体像は→ URLを入力してから画面が表示されるまで)。ニュースサイト 1 ページで部品が数十個、というのは普通のことです。

ここで考えてみてください。明日もそのサイトを見るとき、サイトのロゴ画像は昨日と同じはずです。デザインの指示書も、ほとんどの場合は同じです。同じ荷物を毎日、世界の向こうから取り寄せ直すのは、明らかに無駄ではないでしょうか。

1-2. だから手元に倉庫を置く ── これがキャッシュ

そこでブラウザは、一度取り寄せた部品を手元の倉庫(あなたの PC の中の保管場所)にしばらく置いておきます。次に同じページを開いたとき、倉庫にある部品は取り寄せの作業を丸ごと省略して、倉庫から出すだけで済ませる ── この仕組みと倉庫の中身がキャッシュです。

「2 回目は速い」の体感の正体がこれです。1 回目は数十個の部品すべてを取り寄せるのに対し、2 回目は多くを倉庫から出すだけ。省略できた作業の数だけ、ページは速く開きます

1 回目の訪問と 2 回目の訪問の違い

 1 回目(全部品を取り寄せる)
  設計図 HTML  : あなた <──────── サーバー
  ロゴ画像    : あなた <──────── サーバー
  デザイン CSS : あなた <──────── サーバー              △ 部品の数だけ取り寄せる
  動きの JS   : あなた <──────── サーバー

 2 回目(倉庫から出すだけ)
  設計図 HTML  : あなた <──────── サーバー
  ロゴ画像    : あなた <── [手元の倉庫]
  デザイン CSS : あなた <── [手元の倉庫]                △ 取り寄せを丸ごと省略できる
  動きの JS   : あなた <── [手元の倉庫]

1-3. Cookie とは役割がまったく違う

削除ダイアログでいつも隣に並んでいるせいで混同されがちですが、Cookie とキャッシュは役割が別物です。Cookie は「あなたが誰か」をサイトに伝える会員証であり、キャッシュは「誰であっても同じ部品」の使い回しです。ロゴ画像はあなたでも他の誰かでも同じロゴなので倉庫で使い回せますが、会員証は使い回すものではありません。消したときの影響も対照的で、Cookie を消すとログアウトされ、キャッシュを消すと表示が一時的に遅くなります(FAQ Q1 でもう一度整理します)。

2. キャッシュはそこら中にある ── ブラウザの倉庫は「そのうちの 1 つ」でしかない

2-1. キャッシュは機能の名前ではなく「発想」の名前

実は「キャッシュ」は、ブラウザの特定の機能を指す名前ではありません。取り寄せ直す代わりに、手元に置いた控えを使い回す ── この発想の総称です。そして、この発想はコンピュータの世界のいたるところで使われています。

場所何の控えか当サイトの関連記事
ブラウザの倉庫ページの部品(画像・CSS・JS)── 本記事の主役本記事
電話帳のメモ「このサイトの住所(IP アドレス)はここ」という調べ物の答えDNSとは? §5
会社や通信網の共有倉庫社内・網内の皆がよく使う部品のまとめ置き──
配送網の倉庫(CDN)世界各地に分散して置かれた、サイト側の部品の控え今後の記事で取り扱い予定
CPU 内部の超高速メモ計算に使うデータの控え(L1/L2/L3 キャッシュ)再起動の記事の記憶の階層図

DNS の記事を読んだ方なら、「一度引いた電話番号はしばらくメモしておき、次からは聞きに行かない」という話を覚えているでしょう。あれもまったく同じ発想です。調べ物の答え(DNS)か、荷物そのもの(部品)かの違いだけで、「控えを使い回して取り寄せを省略する」構図は共通しています。

2-2. 層が多いほど速い ── しかし「古い控え」の置き場も増える

キャッシュの層がこれだけ重なっているおかげで、インターネットは今の速さで動いています。もし世界中の全アクセスが毎回すべての取り寄せをフルにやっていたら、回線もサーバーも到底持ちません。

ただし、ここで本記事の主題につながる重要な性質が生まれます。控えの置き場が多いということは、「古くなった控え」が残り得る場所も多いということです。あなたの倉庫は新しくしたのに、途中の共有倉庫に古い控えが残っている ── そんなことが起こり得るのです。この伏線は §4 で回収します。

💡 Tip

表の中の「サイト側」── 部品の大元を持っているサーバーとは結局何者なのか ── は、それだけで 1 本の記事になるテーマです。別の記事で扱う予定です。

3. いつまで使い回していいのか ── 賞味期限のラベルと、在庫確認の連絡

3-1. 荷物には賞味期限が貼ってある

倉庫の荷物を永遠に使い回したら、サイトがいくら更新されても、あなたの画面には一生届きません。かといって、毎回サーバーに「これ、まだ使えますか?」と聞いていたら、取り寄せを省略した意味が半減します。

この折り合いをつけるのが賞味期限のラベルです。サーバーは部品を渡すとき、「これは 1 時間使い回してよい」「これは 1 年もつ」といった期限を荷物に貼って渡します(技術的には Cache-Control という指定です ── 名前は覚えなくて構いません)。期限内の荷物について、ブラウザは倉庫から出すだけで、サーバーに聞きにすら行きません。これが最速のパターンです。

期限はサイト側が部品ごとに決めています。めったに変わらないロゴ画像には長い期限を、頻繁に変わるトップページの設計図(HTML)には短い期限を ── という使い分けが典型です。

3-2. 期限が切れても、すぐには捨てない ── 在庫確認の連絡

では期限が切れたら、荷物を捨てて丸ごと取り寄せ直すのかというと、実はもう一段賢い手が用意されています。在庫確認の電話です。

ブラウザはサーバーに「この荷物、まだ使えますか?」とだけ確認します。サーバー側で変わっていなければ、返事は「まだ大丈夫、そのまま使って」の一言だけ ── 荷物本体は送られてきません(技術的には 304 という短い応答です)。荷物が大きくても電話は一瞬なので、これも十分に速いのです。変わっていた場合だけ、新しい荷物が期限ラベル付きで届きます。

  1. 1期限内倉庫から出すだけ。サーバーに聞きにも行かない(最速)。
  2. 2期限切れ → 電話 →「まだ大丈夫」一言の返事だけで済み、荷物は届かない(十分速い)。
  3. 3期限切れ → 電話 →「変わりました」新しい荷物が届き、倉庫の控えを差し替える(1 回目と同じ)。

3-3. 電話帳のメモにも同じラベルが貼ってある

この「期限まで使い回し、切れたら取り直す」というルールに、既視感がないでしょうか。DNS の記事で見た TTL(電話帳のメモを何秒使い回してよいかの指定)と、まったく同じ発想です。「サイト引っ越し後の反映待ち」が実は世界中のメモの期限切れ待ちだった ── というあの話は、本記事の §4 で見る「更新したのに反映されない」の DNS 版だった、とも言えるのです。

4. 「更新したのに反映されない」の正体 ── 新しい荷物はあるはずだが

4-1. 誰も故障していないのに、古いままになる

ここまでの道具立てで、冒頭の事件を解くことができます。

あなたがサイトを更新した瞬間、サーバー側には確かに新しい部品があります。ところが閲覧者の手元の倉庫には、賞味期限がまだ切れていない古い部品が残っています。§3 で見たとおり、期限内の荷物についてブラウザはサーバーに聞きにすら行きません ── つまり、新しい荷物の存在に気づくチャンスすらないまま、古い部品を出し続けるのです。

「更新したのに反映されない」が起きているときの構図

  サーバー         手元の倉庫          画面
  [新しい部品] ×── [古い部品] ──>  古い表示のまま
      △             期限内
   もう存在する   「まだ使い回してよい」  誰も故障していない
                 ので聞きに行かない

これが事件の正体です。バグでも故障でもなく、全員がルール通りに動いた結果として古い表示が続きます。速さのために「期限内は聞きに行かない」と決めたことの、避けられない裏面なのです。

4-2. 「自分は直ったのに、他の人は古いまま」の理由

サイトの担当者を最も混乱させるのがこれです。自分の画面ではキャッシュをクリアして直った。それなのに、お客さんからは「まだ古いままですよ」と連絡が来る ──。

種明かしは単純で、倉庫は閲覧者ごとに 1 つずつあるからです。あなたが空にしたのは自分の倉庫だけで、お客さんの倉庫には古い部品が期限いっぱいまで残っています。あなたにできるのは自分の倉庫の掃除だけで、他人の倉庫には手が届きません(サイト側でできる対策は §5 の最後で触れます)。

4-3. 倉庫は 1 つではない ── どこに古い控えが残っているのか

さらに §2 の伏線を回収すると、あなたと部品の間には倉庫が何段もあり得ます。自分のブラウザの倉庫、会社のネットワークの共有倉庫、配送網(CDN)の倉庫、そして電話帳のメモ(DNS)── 古い控えがどの段に残っているかによって、直せる人が変わります。

⚠️ よくある落とし穴

「キャッシュをクリアしたのに直らない」ケースの多くは、古い控えが自分の倉庫ではなく途中の倉庫(会社の共有倉庫や配送網の倉庫)や電話帳のメモ(DNS)に残っている場合です。自分の倉庫を何度掃除しても、途中の倉庫は空になりません。サイトの引っ越し直後なら DNS のメモの期限切れ待ち(→ DNS 記事の「浸透待ち」の話)を疑ってみてください。

5. 直し方と付き合い方 ── いきなり全部消すのはもったいない

5-1. 軽い手から順に試す

「反映されない」と思ったとき、いきなりキャッシュクリアに行くのは実はもったいない手順です。影響の小さい順に、次の 3 段で試すのが鉄則です。

何をしているか影響範囲
1スーパーリロード(Windows: Ctrl+F5 / Mac: Cmd+Shift+R)そのページの部品だけ「期限を無視して取り寄せ直せ」と指示するそのページだけ。副作用ほぼ無し
2シークレットモードで同じページを開く空の倉庫で試す ── 直って見えるなら、原因は自分の倉庫だと確定する切り分けのみ。何も消さない
3キャッシュクリア全サイト分の倉庫を空にする最終手段。しばらく全サイトが遅くなる

手順 2 が地味に重要です。シークレットモードで開いても古いままなら、原因はあなたの倉庫ではありません(§4-3 の途中の倉庫や、そもそも更新が反映されていない可能性を疑うべきです)。切り分けをしてからクリアすれば、無駄に全倉庫を空にせずに済みます。

5-2. クリアしても、ログアウトはされない

キャッシュクリアをためらう理由の代表が「ログアウトされそうで怖い」ですが、ここは安心してください。§1-3 で見たとおり、キャッシュ(荷物の控え)と Cookie(会員証)は別の引き出しに入っています。キャッシュだけを消してもログイン状態は残ります。

ただし、ブラウザの削除ダイアログには「Cookie も一緒に消す」チェックボックスが並んでいることが多く、これに印を付けて消せば当然ログアウトされます。ダイアログの項目はおおむね 3 つの引き出しに対応しています ── 荷物の控え(キャッシュ)・会員証(Cookie)・行った場所のメモ(履歴)。どれを消すか選んでいるのだ、と分かっていれば怖くありません(FAQ Q5)。

クリアのデメリットは 1 つだけで、しばらくは全サイトが「1 回目の取り寄せ」に戻るので遅くなります。壊れるものはありません。

5-3. 作る側の半歩 ── 期限を待たずに届ける工夫

最後に、サイトを作る側の視点を半歩だけ。閲覧者の倉庫を掃除して回ることはできないので、更新を確実に届けたいサイトは「部品の名前自体を変えて、別の荷物として配る」という手を使います。logo.png を logo-v2.png にすれば、閲覧者の倉庫に控えは無いので必ず取り寄せが起きる ── という理屈です(キャッシュバスティングと呼ばれます)。「更新が反映されない」に悩まされない仕組みは、サイト側の設計で作れるのです。

まとめ ── 4 行エッセンス

  • キャッシュは手元の倉庫: 一度取り寄せた部品の控えを使い回して取り寄せの作業を省略する ── 「2 回目が速い」理由そのもの
  • 荷物には賞味期限: 期限内は聞きにも行かない(最速)。切れたら在庫確認の電話 ── 「まだ大丈夫」なら一言で済む
  • 事件の正体は期限内の古い控え: 新しい部品はもうサーバーにあるのに、期限内の倉庫は聞きに行かない ── 誰も故障していないのに古いまま
  • 直すのは軽い手から: スーパーリロード → シークレットで切り分け → クリア。クリアしてもログアウトはされない(会員証は別の引き出し)

これで、箱(HTTPS)・会員証(Cookie)・倉庫(キャッシュ)の 3 つが揃いました。リクエストの流れの全体像から読み直すなら総集編へ。

FAQ

Q1. キャッシュを消すとログアウトされますか? Cookie とは何が違うのですか?

A. キャッシュだけを消すなら、ログアウトはされません。キャッシュは「一度受け取った部品(画像など)の控え」で、ログイン状態を支えているのは Cookie(会員証)── 別の引き出しです(→ Cookie 記事)。ログアウトされるのは、削除ダイアログで Cookie も一緒に消したときだけです。キャッシュ削除の影響は「しばらく表示が遅くなる」だけで、壊れるものはありません。

Q2. キャッシュをクリアしたのに直りません。どうすればいいですか?

A. 古い控えが、あなたの倉庫ではない場所に残っているサインです。候補は 3 つ ── ① 会社のネットワーク等の共有倉庫(時間経過を待つか、ネットワーク管理者に相談)、② サイト側・配送網(CDN)の倉庫(サイト運営者しか消せません)、③ 電話帳のメモ = DNS のキャッシュ(サイト引っ越し直後に典型。→ DNS 記事の Tip 参照)。シークレットモードでも古いままなら、ほぼこのどれかです。スマホ回線と Wi-Fi で表示を見比べると、①か②の切り分けに役立ちます。

Q3. キャッシュは定期的に消したほうがいいですか?

A. いいえ、不要です。倉庫は賞味期限で自動的に管理されていて、期限切れの荷物は勝手に入れ替わりますし、容量が足りなくなれば古いものから自動で捨てられます。定期的に消すと、そのたびに全サイトが「1 回目の取り寄せ」に戻って遅くなるだけです。消すのは「表示がおかしいときの切り分け」という不具合対応の場面だけ、と覚えておけば十分です。

Q4. スマホでも同じことが起きますか?

A. 起きます。仕組みは PC とまったく同じで、スマホのブラウザにも倉庫があります。1 つだけ注意があるとすれば、アプリの中で開くブラウザ(SNS アプリでリンクを開いたときなど)は、通常のブラウザと別の倉庫を持っていることです。「Safari では直ったのにアプリから開くと古い」は、倉庫が別だからです。

Q5. 削除ダイアログの「キャッシュ」「Cookie」「履歴」は、それぞれ何が違うのですか?

A. 3 つの別々の引き出しです。キャッシュは部品の控え(消すと遅くなるだけ)、Cookie は会員証(消すとログアウトされ、設定も初期化される)、履歴は行った場所のメモ(消すとアドレスバーの候補などから過去の訪問が消える)。「サイトの表示がおかしい」ときに関係するのは基本的にキャッシュだけなので、目的に合った引き出しだけを選んで消すのが安全です。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です