インターネットがまだ今ほど速くなかったころ、ホームページを作る人間にとって「表示速度」はかなり切実な問題でした。

今なら、画像が数枚貼ってあるページでも、光回線やスマートフォンの高速回線で何となく開けてしまいます。しかし、ADSLが主流だったころ、あるいはそれ以前のダイヤルアップ接続のころには、ページが重いことは、そのまま読者を失うことにつながりました。

画像がなかなか出てこない。
ページの下半分がいつまでも白い。
戻るボタンを押すかどうか、読者が数秒で判断する。

そういう時代に、個人でホームページやブログを作っていた人間にとって、キャッシュは単なる技術用語ではありませんでした。読者を待たせないための工夫であり、自分のサイトを少しでも「まともに読める場所」にするための知恵でした。

キャッシュとは、一度読み込んだものを保存して再利用する仕組みである

キャッシュとは、簡単に言えば、一度読み込んだものを保存しておき、次に必要になったときに再利用する仕組みです。

HTTPキャッシュについて、MDN Web Docsは「リクエストに関連付けられたレスポンスを保存し、後続のリクエストで再利用するもの」と説明しています。ブラウザ自身がページや画像などを保存しておけば、毎回サーバーまで取りに行かなくて済みます。結果として、表示は速くなり、サーバーの負担も軽くなります。

この「毎回ゼロからやらない」という発想が、キャッシュの中心にあります。

一度見た画像は、もう一度使えばいい。
一度作ったページは、しばらく保存しておけばいい。
毎回データベースを読んで、テンプレートを処理して、HTMLを作り直さなくてもいい。

キャッシュとは、コンピュータの世界における「段取り」のようなものです。料理で言えば、毎回だしを一から取るのではなく、必要な分だけ冷蔵庫に用意しておく。授業で言えば、毎回ゼロからプリントを作るのではなく、よく使う教材を整えておく。そうすれば、次の動作が速くなる。

この発想は、昔のブログシステムではかなり重要でした。

Movable TypeとWordPressで違っていた表示の仕組み

2000年代前半、日本でも個人サイトやブログが広がっていきました。

Movable Typeは2001年に公開され、WordPressは2003年に始まったブログ・CMSです。Movable Typeは静的HTMLを生成する方式が強く、記事を投稿するとHTMLファイルを作っておく。読む人が来たときには、その完成済みのHTMLを渡す。これは、広い意味では「先に作っておく」発想に近いものでした。

一方、WordPressはPHPとデータベースを使って、アクセス時にページを組み立てる動的な仕組みとして広がっていきました。

この違いは、当時の体感としてはかなり大きかったはずです。

静的HTMLなら、表示は速い。
しかし、再構築や管理の手間がある。
動的CMSなら、更新や管理はしやすい。
しかし、アクセスのたびにサーバーが働く。

そこでWordPressでは、ページキャッシュ系のプラグインやサーバー側のキャッシュ設定が重要になっていきました。

WordPressは便利だけれど、アクセスのたびにPHPが動き、データベースを読みに行く。その処理を毎回やると重い。だから、一度生成したページをキャッシュとして保存しておき、次の読者にはその保存済みページを見せる。これによって、WordPressでも静的HTMLに近い速さを出そうとしたわけです。

ADSL時代には「とにかくキャッシュしろ」が正義だった

ADSL時代のサイト運営者が「とにかくキャッシュしろ」と考えたのは、かなり自然なことでした。

当時は、ネット回線だけでなく、サーバーも今ほど強くありませんでした。レンタルサーバーの性能も限られていたし、画像の容量にも神経を使った。今なら何気なく貼ってしまう写真も、昔は横幅を縮め、JPEGの圧縮率を調整し、数十KB単位で軽量化していました。

その時代のキャッシュは、ほとんど正義でした。

ブラウザに保存させる。
サーバー側でも保存する。
CSSや画像はできるだけ再利用させる。
HTMLも生成済みにしておく。

読者にとっては速くなる。
サーバーにとっては楽になる。
運営者にとっては落ちにくくなる。

だから、「キャッシュしまくれ」という感覚があったのです。

キャッシュの副作用は、古いページが残ることである

ただし、キャッシュには副作用があります。

それは、古いものが残るということです。

キャッシュは「前に作ったものを再利用する」仕組みです。だから、ページを修正したのに、古いページが表示されることがあります。本文を直したのに、外から見ると直っていない。フッターを変更したのに、以前のリンクが残っている。トップページを書き換えたのに、古い説明文が出てくる。

これは、キャッシュが壊れているというより、キャッシュが真面目に働いているから起きます。

キャッシュは「前のものを使えば速い」と考えている。ところが、運営者は「いや、もう新しくしたから古いものは出すな」と思っている。このズレが起きるわけです。

昔は、表示速度のためにキャッシュを強くすることが大事でした。

しかし今は、サイト運営においてもう一つ別の感覚が必要になっています。

それは、いつキャッシュを捨てるかです。

キャッシュは作るだけでなく、消すことまで含めて管理する

キャッシュは作るだけではなく、消すことも含めて管理しなければなりません。

記事を更新したら、古いキャッシュを削除する。
トップページを変えたら、新しいトップページでキャッシュを作り直す。
デザインを変えたら、CSSや画像の古いキャッシュが残っていないか確認する。
Googleに見せる前に、古いページを見せていないか確認する。

特に、AdSense審査やSearch Consoleの確認では、この問題が表に出ます。

自分の管理画面では直っているのに、外から見ると古いページが残っている。自分のブラウザでは新しく見えるのに、別の端末では古く見える。これは、WordPress本体、サーバーキャッシュ、ブラウザキャッシュがそれぞれ別の場所で働いているからです。

キャッシュは一つではありません。

ブラウザのキャッシュがあります。
サーバー側のキャッシュがあります。
WordPressプラグインのキャッシュがあります。
CDNを使っていれば、CDN側のキャッシュもあります。

つまり、Webページは、単純に「サーバーにある最新ファイルをそのまま見ている」わけではありません。途中のいろいろな場所に、一時保存されたコピーが存在しています。

光回線の時代に、キャッシュは不要になったのか

では、光回線が普及した今、キャッシュは昔ほど重要ではなくなったのでしょうか。

答えは、半分はその通りで、半分は違います。

たしかに、昔のように「読者の回線が遅いから、とにかく画像を軽くしないとページが開かない」という切迫感は薄れました。

日本では2000年代にADSLが急速に広がり、その後FTTH、つまり光回線への移行が進みました。総務省の情報通信白書でも、2000年代後半にADSLからFTTHへの乗り換えが進み、2008年にはFTTHがDSLを総契約数で上回ったと説明されています。

しかし、だからといってキャッシュが不要になったわけではありません。

理由は三つあります。

スマートフォン時代にも、キャッシュは重要である

第一に、スマートフォン時代になったからです。

光回線の自宅PCだけでなく、スマホのモバイル回線で読む人が増えました。場所によっては通信が不安定です。地下、建物の中、移動中、混雑した時間帯。回線が速い時代になっても、読者の状況はいつも理想的ではありません。

第二に、Webページそのものが重くなったからです。

昔のホームページはHTMLと小さな画像が中心でした。今は、画像、CSS、JavaScript、広告、アクセス解析、フォント、SNS埋め込みなど、読み込むものが増えています。回線が速くなった分、ページも重くなった。だから、キャッシュの役割は形を変えて残っています。

第三に、検索エンジンや広告審査において、表示速度や安定性が無視できないからです。

ページが遅い。表示が崩れる。更新したはずの内容が古いまま出る。こうした状態は、読者にとってもGoogleにとっても良い状態ではありません。

つまり、昔のキャッシュは「遅い回線を補うための技術」でした。

今のキャッシュは、それに加えて、複雑になったWebを安定して見せるための技術になっています。

現代のキャッシュ管理で大切なのは、古いキャッシュを捨てること

ただし、現代のキャッシュ管理で大切なのは、昔のように単純に「たくさん保存する」ことではありません。

大事なのは、新しい情報に更新されたとき、古いキャッシュをきちんと捨てることです。

昔の感覚で言えば、キャッシュは冷蔵庫の作り置きのようなものでした。すぐに出せるから便利です。しかし、古くなった作り置きをいつまでも出してはいけない。料理なら味が落ちるだけですが、Webページではもっと厄介です。古い店名、古い説明、古いリンク、仮の文章、修正前の内容が、そのまま読者やGoogleに見えてしまいます。

キャッシュは、速くする技術であると同時に、間違ったものを残してしまう技術でもある。

ここが面白いところです。

便利な技術は、たいてい二面性を持っています。

覚えてくれるから便利なのに、忘れてくれないから困る。
速くしてくれるから助かるのに、古いものを出すから混乱する。

これは、クッキーにも少し似ています。クッキーはキャッシュとは別の仕組みですが、「ブラウザ側に何かを覚えさせる」という点では近い発想を持っています。キャッシュはページや画像を覚える。クッキーはユーザーや状態を覚える。どちらも、毎回ゼロからやらないための仕組みです。

キャッシュは、インターネットにおける記憶の技術である

初期のWebでは、こうした「覚えておく」技術が、ただ便利なものとして見えていました。

毎回名前を入力しなくていい。前に見た画像をまた読み込まなくていい。買い物かごの中身が消えない。ページが速く開く。

しかし、Webが社会のインフラになるにつれて、「覚えておくこと」の意味は重くなりました。

便利さだけでなく、更新のズレ、プライバシー、広告、追跡、審査、セキュリティと結びつくようになったからです。

キャッシュの歴史は、単にWeb技術の歴史ではありません。

それは、インターネットが「個人が作った軽いホームページの集まり」だった時代から、「検索エンジン、広告、CMS、スマートフォン、クラウド、CDNが絡み合う社会インフラ」へ変わっていく過程でもあります。

昔は、ページを作って、FTPで上げて、ブラウザで見て、表示が速いかどうかを確認していました。

今は、WordPressで更新し、サーバーキャッシュを消し、ブラウザキャッシュを疑い、Search Consoleで確認し、AdSense審査で古い残骸が見えていないかまで気にする。

やっていることは複雑になりました。

けれど、根本にある問いは昔とあまり変わっていません。

読者に、ちゃんと見えるか。
待たせすぎていないか。
古いものを見せていないか。
自分が置いた内容が、意図した通りに届いているか。

キャッシュとは、その問いの裏側にある仕組みです。

普段、読者はキャッシュを意識しません。

ページが速く開けば、それでいい。
表示が古ければ、何かおかしいと思う。
それだけです。

しかし、サイトを作る側に回ると、キャッシュは急に顔を出します。

「直したはずなのに直っていない」
「自分の画面と他人の画面が違う」
「Googleにはどちらが見えているのか」

そのとき初めて、Webページとは単純な一枚紙ではなく、あちこちに保存されたコピーの組み合わせなのだとわかります。

ADSL時代にキャッシュを学んだ人は、その感覚を身体で知っています。ページは軽くしなければならなかった。読者を待たせてはいけなかった。サーバーに無駄な仕事をさせてはいけなかった。

そして今、もう一つの感覚が必要になっています。

キャッシュは、作るだけでは足りない。
必要なときに、消せなければならない。

速く見せるための技術から、正しく見せるための技術へ。キャッシュの意味は、時代とともに少し変わりました。

けれど根本は同じです。

Webは、毎回ゼロから始まっているように見えて、実はあちこちで過去を利用しています。その過去をうまく使えば、ページは速くなる。その過去を放置すれば、古いページが未来の邪魔をする。

キャッシュとは、インターネットにおける「記憶」の技術です。

そしてサイト運営とは、その記憶をいつ使い、いつ忘れさせるかを決める作業でもあるのです。

参考