【入門編】 Paint Timing API (FCP/LCP) – Webブラウザの仕組み実践ガイド

こんにちは。Webという広大な世界へようこそ。

ブラウザの裏側で何が起きているのか、気になり始めたあなたは、もう立派な「エンジニアの卵」です。今日は、Webサイトが画面に表示されるまでの「魔法のような瞬間」を、数字で捉えるPaint Timing APIという技術についてお話ししましょう。

「ページを開いてから、いつ最初の文字が出るのか?」「一番大きな画像はいつ表示されるのか?」——これを知ることは、料理を待つお客さんに「あと何分で届きますよ」と優しく声をかける店員さんになることと同じくらい、ユーザーへの思いやりなんです。

—

1. ブラウザは「凄腕の料理人」だと思ってみてください

Webページが表示されるまでの工程は、レストランのキッチンに似ています。

1. HTMLのパース(下ごしらえ): サーバーから届いた材料(HTML)をチェックし、「お皿(DOM)の上に何を並べるか」というレシピを組み立てます。
2. CSSOMツリー構築(盛り付けの設計): 「文字は青く、画像は右に」といった装飾の指示書(CSS)を読み込みます。
3. レンダリング(調理・盛り付け): いよいよお皿の上に具材を配置していきます。

このとき、「最初の一口(FCP)」と「メインディッシュ(LCP)」がいつ完成したかを記録するのが、Paint Timing APIの役割です。

FCP (First Contentful Paint)

ブラウザが「お、なんか出てきたぞ!」とユーザーに初めて見せる瞬間です。真っ白な画面から、ロゴやテキストがポツンと現れたときのことですね。

LCP (Largest Contentful Paint)

「お、これがメインだな!」とユーザーが感じる、一番大きな画像やテキストの塊が表示された瞬間です。ここが遅いと、「このサイト、重いな」とユーザーは離脱してしまいます。

—

2. なぜ「数字」で測る必要があるのか?

「なんとなく遅い気がする」という主観は、開発現場では通用しません。ブラウザ自身が「今だ!」と記録した正確なタイムスタンプを知ることで、私たちは「どこで時間がかかっているのか」を客観的に判断できます。

例えば、HTMLの読み込みは早いのに、大きなヒーロー画像がなかなか表示されないなら、「画像のサイズが大きすぎるのかも?」「サーバーからの転送を優先させるべきかな?」といった具体的な改善策が見えてくるはずです。

—

3. 実践!ブラウザに「いつ表示されたか」教えてもらおう

難しい設定は必要ありません。ブラウザは標準でこの情報を記録しています。以下のコードを、お使いのブラウザのコンソール(F12キーで開けます)に貼り付けてみてください。

// パフォーマンス計測のための観察者を準備します
const observer = new PerformanceObserver((list) => {
const entries = list.getEntries();

entries.forEach((entry) => {
// entry.name には ‘first-contentful-paint’ などが入ります
// entry.startTime には、ページ読み込み開始からの経過時間がミリ秒で入ります
console.log(`${entry.name} が発生しました: ${entry.startTime.toFixed(2)}ミリ秒`);
});
});

// FCPとLCPの情報を監視するように設定します
observer.observe({ type: ‘paint’, buffered: true });
observer.observe({ type: ‘largest-contentful-paint’, buffered: true });

// ※これを実行した後、ページを再読み込みすると結果がログに流れます!

このコードのポイント

  • PerformanceObserver: ブラウザの「出来事」をずっと見守ってくれる監視員のような存在です。
  • buffered: true: これを指定することで、このコードを読み込む前にすでに発生してしまった出来事も「さかのぼって」教えてくれます。親切ですよね。

—

4. 最後に:数字は「道具」であって「目的」ではない

初学者のうちは、「指標の数値を良くしなきゃ!」と焦ってしまうかもしれません。でも、忘れないでください。一番大切なのは、画面の向こう側にいるユーザーの体験です。

LCPの数字が1ミリ秒速くなることよりも、「ユーザーが情報を求めて訪れたときに、スムーズに読み始められること」の方がずっと価値があります。このAPIは、あくまであなたがユーザーの体験をより良くするための「スコープ(望遠鏡)」です。

まずは自分の作ったページや、大好きなWebサイトでこの数値を眺めてみてください。「なぜここで時間がかかっているんだろう?」と想像するだけで、あなたのエンジニアとしての視点は格段に深まります。

大丈夫、一つずつ理解していけば、必ず見える景色が変わってきますよ。また分からないことがあれば、いつでも聞きに来てくださいね。

コメント

タイトルとURLをコピーしました