news

開発でよく聞く「キャッシュ」とは

開発でよく聞く「キャッシュ」とは

こんばんは、システムの知恵袋の細谷です。

WEBの開発を行っているとよく問題が起こり「キャッシュが残っているせいで、、、」と説明を受けた方も多いかと思いますが、このキャッシュとは何でしょうか?

問題があるなら使わなければいいのに、なぜ今だに現役で動作しているのでしょうか?

 

キャッシュについての話題が社内で耳にするようになりましたので、用語集ばかりもあれなので今回は「キャッシュ」についてお話しましょう

◇キャッシュとは

正式には「ブラウザキャッシュ」といい、キャッシュ綴りは「cache」で貯蔵所という意味があります。

その名前の通り、ブラウザでのデータを保管しておく場所になります。

ただし、注意しなくてはいけないのはダウンロードしたファイルを保存する場所とは別になります。

 

◇ダウンロードファイルと一時ファイル

よくあるカン違いというより、そう見えてしまうからなのですが、皆さんがよく使う「ダウンロード」は「ファイルを保存する」というアクションになります。

通常のファイルはその瞬間しか使わないので、使い終わったら破棄します。編集時も同じで、元のファイルのコピーを作ってそこに手を加えています。

よく資料を作っていて、「保存を忘れて編集が内容がきえてしまったー」という話がありますが、これは編集中のファイルはあくまでコピーに手を加えているので、元のファイルには変更はしていないので、

画面だけ見ていると巻き戻ったように見えるわけです。

 

で、話を戻すと、ダウンロードフォルダは「保存したファイルを保管する場所」で、キャッシュは「一時的なファイルを保管する場所」になります。

 

◇キャッシュの用途と保管期限

ではキャッシュの目的ですが、「2回目以降早く表示するため」です。

webサイトの閲覧というのは、サイトを構成するファイルをもらって表示するというのが通常の流れですが、凝ったwebサイトは総じてファイルが多くなり合計ファイルサイズが大きくなります。もし、最初の表示に3秒かかったのであれば、本来なら2回目も3秒待たないといけません。

※6GBの素材を使ったサイトを閲覧するとき、下り2G/sの契約ならファイルをもらうまでには最速で3秒かかる計算になります。

 

しかしよく見るサイトで毎回3秒なんて待ちたくないですよね?、なので「最初の閲覧に使ったファイルを残しておけば」2回目はもらわなくても見れますね、どんなに回線が遅くても閲覧に必要なファイルがもう全部そろっているなら、表示するのに時間はかからないですよね。

この仕組みが「ブラウザキャッシュ」です。「素早く、通信量を抑えて利用する」為のシステムになります。

欠点として全部保存してたらすぐにHDDがパンパンになってしまいます。なので、使わないキャッシュファイルは削除されていきます。これをキャッシュの保管期限を言います。

指定がない場合は「ブラウザを閉じるまで」ですが、この指定はWebサイト側が行うため、サイトによっては「手動で削除するまで」というところもあります。

なので適切に設定しないと、「ファイルが残りすぎて、閲覧者のPCの容量が圧迫されたり等の現象が起きてしまいます。

かといって設定しないと、「ページが重すぎて通信エラーが起きる」という現象が起きてしまいます。

なので、「キャッシュが悪い」というよりは「狙った動きをさせるのが難しい」のですね

 

◇キャッシュの鮮度?

残したものを使うといいましたが、ではサーバー側のファイルが更新されたらどうでしょうか? 手元にあるのでいらないというわけにはいかないですよね?

これをチェックするために「ファイルの更新日時」を使用します。キャッシュよりサーバー上のファイルの方が新しければ「キャッシュを更新」します。

そうすることで常に新しいサイトを閲覧できるわけですね。

◇開発の問題

ではここまで聞くと「キャッシュに問題はないじゃん」となりますね、はいその通りです。

キャッシュが悪さをするのは実は運営・開発側の問題になります。

サイトの更新時に「古いファイルはリネームしてバックアップとして残しておいてー」という事を聞いたことは無いでしょうか?

 

これ、リネームしただけでは更新日時は変更されないのはご存知でしょうか?

例えばバレンタインデーなどのイベントで、一時的にトップの画像を差し替えるなどの対応の場合、前述のようなリネームで残すという事をすることが多いのですが、

古いファイルを再リネームして元に戻すと、サイトの閲覧者が持っているほうが新しいので「キャッシュは更新されない」という現象が起きます。

 

これが、「サーバー上のファイルは切り替わっているのに、閲覧すると更新前のファイルが表示される」というからくりになります。

このあたりは開発時のルールを明確にする必要がありますが、難しいようであれば

・サーバー上の公開しているファイルは必ずアップロード(上書き)する。

事を守ってもらえれば対応できます。バージョン管理ツールによってはこの更新日付も戻してくれるものもあるので注意してください。

 

以上です。ちなみになぜこのような状況になってしまったのかというと、

これですが日本人の「怠けるのはいけない」という意識から「同じファイル名だと分からないよね?日付があれば最新かどうかわかって一石二鳥?上書きもされないから古いのも残せて復旧できるから一石三鳥じゃないか」という事で広まった悪習になります。

 

また「悪いことしたら排斥する」という意識も相まって、「絶対に失敗できない」>「更新して消えるのが怖い」という意識になってしまったというのもありますので、運営や開発だけが一概に悪いとは言い切れませんが。。。私は開発者側なのでこう言うと責任転嫁になっちゃうんですよね。

 

まあこういった意識を変えていくのは今後の業界で必要かもしれませんね。

それでは本日はここまでとして失礼いたします。

 

 

資料作ってるとどうしても時間かかっちゃいますね。。。どうにかしないと。

(※ブログの作業は基本18時から始め1時間目標で作業しています。)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

かけるべき努力を欠くのは怠け者、かけなくていい努力を行うのは愚か者、(やるべきをやり、無駄はしない)

頑張ったと褒めるのは結果であり、過程を褒めるべきではない。(失敗するのは過程に問題があるから、しかし結果は正でも否でも利益になる)

努力をするのはより良き結果を導く過程であり。(過程がキレイなら結果につながるから、努力するのは過程)

より良き結果とは「思いやれる」ことである(一番大切なのは「相手と自分が満足する事」です。)

 

要するに「見せかけのなにかをするのではなく、お互いに満足できるように頑張ろう」という為の私の意識している指針です。

25年以上やっていても、もっと出来たはずというのが見つかるので、「満足」と思えることは少ないですね。