コーディングTips

キャッシュとは?CSSを直したのに表示が変わらない理由と、消し方・防ぎ方

公開 約4分で読めます

TL;DRこの記事の要点

  • キャッシュは、一度読みこんだファイルを取っておいて次から速く出す仕組み
  • CSSを直したのに変わらないときは、まずスーパーリロード(MacはCommand+Shift+R)
  • ファイルの後ろの番号(?ver=)を更新日時にすると、更新したときだけ新しく読みにいく
目次6項目
  1. キャッシュとは?一度読んだファイルを取っておく仕組み
  2. どんなときに出てくる?
  3. 直したのに変わらないときの、読みこみ直し方
  4. 自分のサイトでは、ファイルの後ろの番号で防いでいます
  5. キャッシュでハマった例
  6. 迷ったときの確認ポイント

CSSを直して保存したのに、ブラウザで見ると前の見た目のまま。
自分もこれで、よく悩みます。
たいていの原因はキャッシュです。
キャッシュとは何か、どう読みこみ直すか、自分のサイトでどう防いでいるかをまとめます。

先に結論です。
キャッシュは、一度読みこんだファイルを取っておいて、次から速く出す仕組みです。
取っておいたファイルが古いと、直した後も古い見た目が出ます。
まずはスーパーリロード(MacならCommand+Shift+R)で読みこみ直してみてください。
これで飛ばせるのは、主にブラウザのキャッシュです。

直したのに変わらないの、なんで?

ブラウザが、前に読んだ古いCSSを使ってるからだよ。

キャッシュとは?一度読んだファイルを取っておく仕組み

MDNのHTTPキャッシュの解説では、キャッシュはレスポンスを保存して、次のリクエストで使い回す仕組みとして説明されています。
サーバーまで取りに行かずに済むので、表示が速くなります。
サーバー側の負担も減ります。

たとえば、自分のサイトのCSS(style.css)は、サーバーからこう返ってきます。

cache-control: max-age=31536000, public

max-age=31536000は秒数で、だいたい1年です。
「約1年間は、取っておいたものを新しいものとして使っていいよ」という意味になります。
publicは、ブラウザだけでなく、CDNなどの共有キャッシュにも保存していい、という指定です。
CSSは毎回変わるものではないので、こうしておくと2回目からの表示が速くなります。

どんなときに出てくる?

  • CSSや画像を直したのに、ブラウザの表示が変わらない
  • サイトが遅いとき、高速化の方法として「キャッシュを効かせる」と言われる
  • WordPressのキャッシュ系プラグインや、サーバーのキャッシュ機能の設定

キャッシュがある場所は、ブラウザだけではありません。
MDNでは、ブラウザが持つ「プライベートキャッシュ」と、プロキシやCDNなどで複数の人が共有する「共有キャッシュ」に分けて説明されています。
サーバーやプラグインのキャッシュは、また別の仕組みです。

直したのに変わらないときの、読みこみ直し方

まずはブラウザのキャッシュを飛ばして、読みこみ直します。
これを「スーパーリロード」と呼ぶことが多いです。

  • Mac: Command+Shift+R
  • Windows: Ctrl+F5(またはCtrl+Shift+R)

それでも変わらなかったら?

ブラウザ以外のキャッシュか、そもそもファイルが上がってないかを疑うよ。

スーパーリロードで直らないときの確認は、最後の「迷ったときの確認ポイント」にまとめています。

自分のサイトでは、ファイルの後ろの番号で防いでいます

CSSを更新すると、番号が自動で変わる

自分のサイトのページを開くと、CSSはこう読みこまれています。

style.css?ver=1791938099

後ろの?ver=の数字は、style.cssを最後に更新した日時です。
WordPressのテーマで、CSSを読みこむときに、ファイルの更新日時を番号として付けるようにしています。
この数字なら、10月14日の9時34分に更新したという意味です。

CSSを直すと、更新日時が変わるので、この番号も変わります。
URLが変わると、ブラウザは別のファイルとして扱い、新しく読みにいきます。
MDNでは、こうしてURLを変えて古いキャッシュを使わせない方法を「キャッシュバスティング」と呼んでいます。

1年取っておくのに、直したらすぐ変わるんだ。

番号が変わったら、別のファイルになるからね。

番号が変わらないときもある

番号が変わるのは、サーバーのstyle.cssが更新されたときだけです。
直したファイルがサーバーに上がっていなければ、番号は前のままです。
なので今でも、変わらないときはまずスーパーリロードして、それでもだめならファイルが上がっているかを見ます。

キャッシュでハマった例

CSSが効かないとき、原因はキャッシュだけとは限りません。
自分の場合、前のテーマ(Cocoon)の頃は、キャッシュではなく、CSSの強さ(詳細度)で負けていたこともありました。

スーパーリロードしても変わらないなら、ブラウザの開発者ツールで、そのCSSが打ち消し線になっていないかも見てみてください。

迷ったときの確認ポイント

  1. スーパーリロード(MacはCommand+Shift+R)で、ブラウザのキャッシュを飛ばす
  2. ページのソース(Chromeなら右クリック→「ページのソースを表示」)で、CSSの?ver=の番号が新しくなっているかを見る
  3. そのCSSのURLを開いて、直した行が入っているかを見る(入っていなければ、アップロード漏れか、サーバー・CDN側のキャッシュを疑う)
  4. WordPressのキャッシュ系プラグインや、サーバー・CDNのキャッシュを使っているなら、そっちも消す
  5. それでもだめなら、キャッシュではなくCSSの書き方(詳細度など)を疑う

あわせて知っておきたい用語

スーパーリロード
キャッシュを使わずに、ページを読みこみ直す操作。MacはCommand+Shift+R。
CDN
世界中のサーバーにファイルのコピーを置いて、近い場所から届ける仕組み。共有キャッシュの一つ。
子テーマ
親テーマとは別に、変えたいところだけを書いておくテーマ。詳しくはこちら。
詳細度
CSSのルールがぶつかったとき、どれを優先するかを決める強さ。キャッシュではなくこれが原因で効かないこともある。

この記事が参考になったら、応援クリックをお願いします

Cat's Handこの記事を書いた人

Web制作歴10年以上。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。