この記事の要約

Webシステムのキャッシュとは、一度見たデータを一時的に手元に保存しておく仕組みです。銀行の通帳のように手元の情報をすぐ確認できるため、表示が速くなりサーバーの負担も減ります。ただし常に最新とは限らず、あえて使わない設計が向くシステムもあります。

Webシステムを利用していると耳にすることの多いキャッシュ

「Webサイトを更新したのに、古い画面が表示される」
「変更したはずの内容が反映されない」
といったときに、「キャッシュが残っているのでは?」と言われることがあります。
しかし、そもそもキャッシュとは何なのでしょうか。

本コラムでは、身近な例えを交えながら「キャッシュとは何か」をわかりやすく解説します。

1.キャッシュとは銀行の通帳のようなもの

Webシステムにおいてのキャッシュとは、一度見たデータを一時的に手元に保存しておく仕組みのことを指します。

これを身近な「銀行」と「通帳」で例えてみましょう。

「これまでの口座の残高や取引履歴(ウェブサイトの情報)」を確認したいとき、毎回わざわざ「銀行の窓口(Webサーバー)」まで行くのは大変ですよね。窓口が混んでいれば待たされますし、移動にも時間がかかります。
そこで役に立つのが、手元にある「通帳(キャッシュ)」です。
一度銀行に行って通帳に記帳してしまえば、次からは銀行まで行かなくても、手元の通帳を開くだけでいつでもすぐに記帳内容を確認できます。

ウェブサイトを表示するときも、これと同じようなことが行われています。
・初めて見るページ: 「Webサーバー(銀行の窓口)」まで時間をかけてデータを取りに行く
・2回目に見るページ: Webサーバーには行かず、「キャッシュ(通帳)」のデータをサッと表示する

これがキャッシュの基本的なメカニズムです。

2.なぜキャッシュという仕組みがあるのか

では、なぜウェブの世界ではわざわざ「キャッシュ」という仕組みを取り入れているのでしょうか。キャッシュが「ある状態」と「ない状態」を前章の通帳のたとえで比べてみましょう。

キャッシュがある時とない時

キャッシュがない状態

「残高はいくらだったかな」と思ったとき、毎回わざわざ銀行の窓口まで確認しに行く状態です。通帳はないので、もう一度さっきの残高を確認したい時も、窓口の列に並ばなければなりません。
これではあなた(ユーザー)は時間がかかってイライラしますし、銀行(Webサーバー)も大混雑してパンクしてしまいます。

キャッシュがある状態

銀行で通帳に最新の情報を記帳して、通帳を手元に持っている状態です。
もう一度「残高はいくらだったかな?」と思ったら、わざわざ銀行に行かなくても、手元の通帳を見るだけですぐに記帳内容を確認できます。
これで、あなた(ユーザー)は素早く残高が見れますし、銀行(Webサーバー)も混雑せずにすみます。

なお、通帳に記帳されている情報が、必ずしも「今この瞬間の口座残高」とは限らないように、キャッシュに保存されている情報も、常に最新とは限らないことに注意が必要です。

キャッシュを使う2つのメリット

キャッシュという仕組みがあるおかげで、ウェブサイトは以下のようなメリットを得ています。

表示スピードが速くなる(ユーザーのメリット)

遠くにあるWebサーバーにデータをいちいち取りに行かないため、スマホやPCの画面に情報が素早く表示されます。

Webサーバーの負担を減らせる(サイト運営者のメリット)

世界中からのアクセスに対して、Webサーバーが毎回全て応答する必要がなくなります。結果として、アクセスが集中してもサイトが重くなったりダウンしたりするのを防げます。

3.キャッシュはブラウザ以外にも使われている

ここまで「キャッシュ」というと、Webブラウザに保存されているものをイメージしてきました。
しかし、「キャッシュ=ブラウザに保存されているもの」だけではありません。

Webシステムでは、利用者の手元だけでなく、Webサイトへ情報が届くまでの途中や、システム側にもキャッシュが存在します。

ここでも、銀行と通帳のたとえを使って考えてみましょう。

・利用者の手元(通帳):ブラウザキャッシュ

あなた自身のスマホやパソコン(ブラウザ)に保存されるキャッシュです。
自分が2回目に同じページを開くときに、最速で表示してくれます。
前章で説明した手元の通帳に近いものです。

・Webサイトまでの途中(ATM):CDN(Content Delivery Network)

銀行(Webサーバー)まで行かなくても、駅前やコンビニのATMで記帳ができるのと似たような仕組みです。
インターネットの途中の経路に「キャッシュを配信する専用サービス(CDN)」を設置しておくことで、データを素早く受け取ることができます。

・システム側(銀行):サーバーキャッシュ

銀行が、よく使われる情報をすぐ取り出せるように手元に置いておくような仕組みです。
Webシステムがデータベースから何度も同じデータを取得する場合、そのデータを一時的に保存しておけば、毎回データベースに問い合わせなくても済みます。

このように、キャッシュは3ステップで保存されることが多く、それぞれが連携してウェブサイトを高速に動かしているのです。

4.キャッシュを使わないこともある

キャッシュを使わないケース

ここまでキャッシュのメリットをお伝えしてきましたが、実はすべてのWebシステムで「キャッシュが必ず必要か」というと、そんなことはありません。

使う人が限られており、扱うデータの量もそれほど多くなければ、キャッシュを使わなくても十分な速さで動きます。

あえてキャッシュを使わない(毎回最新のデータを読み込む)パターンには、例えば以下のようなケースが挙げられます。

最新の情報を表示する必要があったり、サーバーに大きな負荷がかからないシステムでは高速化よりも、キャッシュを使わないメリットを優先した方が良い場合もあります。

キャッシュを使わない設計のメリット

キャッシュを使わない仕組みにすると、次のようなメリットがあります。

・いつ見ても最新の情報が表示される

「古いデータが表示されてしまう」というトラブルが起きません。

・不具合が起きにくい

キャッシュの制御は複雑でバグの温床になりやすい領域です。
情報の不整合や同期の失敗など、不具合が起きやすい部分が減ります。

・エラーの原因を調べやすい

問題が発生したときに確認する場所が少なくなるため、原因を見つけやすくなります。

・セキュリティの事故が減る

Aさんのマイページや個人情報を、誤ってBさんにキャッシュから返してしまう情報流出バグを防げます。

キャッシュは必要になってから追加できる

キャッシュは、最初から絶対に作り込んでおかなくてはならないものではありません。
まずはシンプルにシステムを構築し、将来的に「ユーザーが増えて重くなってきた」「扱うデータ量が増えた」というタイミングで、後から必要な場所にだけキャッシュを追加することも可能です。

Webシステムには、キャッシュを利用する設計もあれば、あえてキャッシュを保存しない設計もあります。
そして、利用状況や処理内容に応じて、必要になった段階でキャッシュを追加することもできます。

「キャッシュを使うのが当たり前」ではなく、システムに必要なものを、必要な場所に使う。
Webシステムを設計するうえで大切な考え方の一つです。

まとめ

今回は、Webシステムにおける「キャッシュ」について解説しました。

キャッシュは、表示スピードの向上やサーバー負荷の軽減に大きく貢献してくれます。
しかし、必ずしもすべてのシステムに最初から追加するものでもありません。
大切なのはシステムの規模や目的に合わせて「あえてキャッシュを使わない」という選択肢も含め、必要な場所に必要な仕組みを取り入れることです。

株式会社パパグラムでは、お客様の業務やシステムの利用状況に合わせて、必要な機能や仕組みを検討し、Webシステムの開発・改修を行っています。
システムに関するお悩み・ご相談がございましたら、ぜひお気軽にお問い合わせください

また、次回のコラムは、みなさんがよく耳にする「キャッシュクリア」です。
古いデータが表示されたり、画面が崩れたりしている時に「キャッシュを消してください」と言われるけど、どうやって消せばいいの?そもそも何が消えてるの?という疑問をわかりやすく解説します。
次回もぜひ読んでください。