キャッシュとは何か|ADSL時代から光回線まで
インターネットがまだ今ほど速くなかったころ、ホームページを作る人間にとって「表示速度」はかなり切実な問題でした。
今なら、画像が数枚貼ってあるページでも、光回線やスマートフォンの高速回線で何となく開けてしまいます。しかし、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は、毎回ゼロから始まっているように見えて、実はあちこちで過去を利用しています。その過去をうまく使えば、ページは速くなる。その過去を放置すれば、古いページが未来の邪魔をする。
キャッシュとは、インターネットにおける「記憶」の技術です。
そしてサイト運営とは、その記憶をいつ使い、いつ忘れさせるかを決める作業でもあるのです。