こんにちは!Webブラウザの仕組みの裏側を覗く旅へようこそ。
私たちが普段何気なく使っているWebブラウザ。アドレスバーにURLを打ち込んで「Enter」を押した瞬間、画面が表示されるまでに、実はブラウザのなかで目にも止まらぬ大いなるドラマが繰り広げられています。
「ボタンを押したら、すぐにパッと画面が開いてほしい!」
これはサイトを作る側にとっても、見る側にとっても、永遠の願いですよね。
今回は、そんな願いを叶えるための秘密兵器「リソースヒント(`dns-prefetch`、`preconnect`、`prefetch`)」についてお話しします。難しそうなネットワーク用語が出てきますが、身近な「お買い物の準備」に例えて優しくほどいていきますので、どうぞリラックスしてついてきてくださいね。
—
1. そもそもブラウザって、裏側で何をしているの?
私たちがWebサイトを見るとき、ブラウザは遠く離れた「サーバー」というお店(倉庫)から、画像やテキスト、プログラムなどの「商品」をお取り寄せしています。
このお取り寄せのプロセスを分解すると、実はこんなにたくさんのステップを踏んでいます。
1. 「○○のお店(サーバー)の住所(IPアドレス)はどこだっけ?」と調べる(DNSルックアップ)
2. お店のドアをノックして、安全にお話しする準備をする(TCPハンドシェイク & TLSネゴシエーション)
3. 「この商品ファイルをください!」と注文する(リクエスト)
4. お店から商品が届く(レスポンス)
……どうでしょう? 画面が表示されるまでに、これだけのやり取りが水面下で行われているんです。
特に、初めてアクセスするサイトでは、1番と2番の「お店の場所を調べてドアをノックするまで」に、どうしてもコンマ数秒の待ち時間(レイテンシ)が発生してしまいます。人間にとっては一瞬ですが、せっかちなブラウザやユーザーにとっては、この「待ち時間」がじれったいものなのです。
そこで登場するのが、今回主役の「リソースヒント」です。
—
2. 例え話:大きなお買い物の前の「仕込み」
ここで少し、現実のお買い物を想像してみてください。
週末に大きなスーパーへ行くとき、家を出る前に「あ、今日の晩ご飯はカレーだから、カレールーとジャガイモを買うぞ」とリストを作ったり、車のエネキーを用意しておいたりしますよね。さらに、「あそこの交差点はいつも混むから、手前の裏道を通ろう」と下調べもするはずです。
Webブラウザにおけるリソースヒントも、まさにこれと同じです。
「このあと、あそこのサーバーから画像やデータをたくさんもらうから、今のうちに住所を調べて、ドアの鍵を開けて待っていて!」と、ブラウザにこっそり耳打ちしてあげる機能なのです。
それでは、代表的な3つのヒントを、具体的な使い方と一緒に見ていきましょう!
—
3. 3つのリソースヒントの使い分け
① `dns-prefetch`(DNSの事前解決)
- イメージ: お店の「住所」だけをあらかじめ電話帳で調べておくこと。
- 解説: 別のドメイン(例:外部の画像ストレージや広告、アナリティクスなど)にあるファイルをごっそり読み込むことが分かっているときに使います。「場所はあそこね」と頭に入れておく(名前解決だけを済ませる)ので、いざ接続するときの時間が少しだけ短縮されます。
② `preconnect`(DNS+TCP接続の事前確立)
- イメージ: お店の住所を調べて、実際に店まで行って「こんにちは!」とドアをノックし、いつでも商品を受け取れる状態にしておくこと。
- 解説: `dns-prefetch`よりも一歩踏み込みます。住所の調達だけでなく、サーバーとの回線つなぎ(ハンドシェイク)まで事前に終わらせておきます。次に紹介する「すごく大事な外部フォントやAPI」を読みに行く直前に使うと、絶大な効果を発揮します。ただし、ちょっと力仕事(ネットワーク負荷)なので、本当に必要な相手だけに絞るのが優しさです。
③ `prefetch`(将来使うファイルの事前ダウンロード)
- イメージ: 「どうせ次のコーナーで牛乳を買うだろうから、今のうちにカートに入れておこう」と先回りしてカゴに放り込んでおくこと。
- 解説: 今見ているページの読み込みが一段落した「暇な時間(アイドルタイム)」を使って、「ユーザーが次にクリックしそうなページ」のファイルや画像をこっそり裏でダウンロードしておく機能です。次にユーザーが移動したとき、まるで魔法のように一瞬でページが表示されます。
—
4. 実務でどう書くの?(実装のサンプルコード)
「理屈はわかったけれど、実際のコードはどう書くの?」
安心してください、とてもシンプルです。これらはすべて、HTMLの `
リソースヒントで快適なブラウジングを!
ブラウザの裏側で、健気に先回りして準備をしてくれています。
💡 ここでちょっとしたプロの視点(つまずきポイントのフォロー)
「じゃあ、思いつく限りのすべての外部サイトを `preconnect` すれば、世界一速いサイトになるのでは!?」
……実は、ここが初心者がハマりやすい罠なんです。
ネットワークの接続(ハンドシェイク)をあらかじめ行うということは、スマホなどの限られた回線や、ブラウザのCPUにそれだけ負荷をかけることになります。「まだ使うか分からないお店のドアを、片っ端から全部ノックして開けっ放しにする」ようなものなので、本当に必要な重要なサーバー(Googleフォントや決済システム、自社のCDNなど)に絞って、精鋭2〜3個くらいに留めておくのがプロの流儀です。大丈夫ですよ、欲張りすぎず、一番大切なパートナーだけを選んであげましょう。
—
5. おわりに
いかがでしたでしょうか?
リソースヒントは、目に見えないブラウザのネットワーク層にひと手間加えるだけの小さな呪文ですが、ユーザー体験(UX)を劇的に向上させる強力なテクニックです。
「ただ画面を表示させる」のではなく、「次にユーザーが何をしたいかを先回りして準備してあげる」。このホスピタリティこそが、優れたフロントエンド開発の醍醐味だと私は思っています。
まずはご自身のポートフォリオサイトやブログで、Googleフォントの読み込み部分などに `preconnect` を試してみてくださいね。きっと、ブラウザがいつもより少しだけ軽やかに動いてくれるはずですよ!

コメント