ログイン機能追加後のLighthouse測定結果 - 92点という現実と予想外の改善のサムネイル

はじめに

ログイン機能を追加したらブログ一覧ページのLighthouse Performanceが100点から92点に低下しました。
原因はレンダリングブロックCSS(1,050ms)と強制リフロー。逆に未使用JavaScriptは3.1 KiB削減されるという予想外の結果も出ました。

完璧なスコアが崩れた瞬間、あなたなら何を考えますか?

Lighthouseで全カテゴリ100点を達成した。
CSS最適化で22 KiBを削減し、モバイルパフォーマンスも完璧だった。
次はログイン機能を追加して、さらに機能を充実させよう。

しかし、プレビュー環境でLighthouse測定を実施した瞬間、目を疑った。
ブログ一覧ページのPerformanceスコアが92点に低下している。

「ログイン機能を追加しただけなのに、なぜ?」
「JavaScriptが増えたから?CSSが増えたから?」
「それとも、認証チェックのオーバーヘッド?」

測定を進めるうちに、予想外の発見があった。
未使用JavaScriptが39 KiBから35.9 KiBへと、逆に3.1 KiB削減されていた。

しかし同時に、 レンダリングブロックCSSが1,050 msという深刻な数値 を示していた。

この記事をお勧めしない人

  • Lighthouseのスコアなんて気にしない、動けばいいという人。
  • 測定結果の数値を見ても、何も感じない人。
  • 改善計画なんて後回しでいい、今すぐ新機能を実装したい人。

もし一つでも当てはまらないなら、読み進める価値があるかもしれません。

機能追加の裏で進行する体験の劣化

  • 機能追加のたびにパフォーマンスが悪化することを放置すると、あなたのサイトには「見えないパフォーマンス負債」が蓄積されていきます。
  • やがて、ユーザーは遅いページ表示にストレスを感じ、離脱率が上昇し、ビジネスに直接的な損失をもたらすでしょう。
  • ついに、原因を特定しようとしても、どの機能追加が問題だったのか分からず、大規模なリファクタリングを強いられることになります。

継続的な測定がもたらす品質の安定

  • この記事を読めば、機能追加後のパフォーマンス影響を定量的に測定し、問題を早期に発見する具体的な手法が手に入ります。
  • 具体的には、ログイン機能追加による影響の実測データ、レンダリングブロックCSSという具体的な問題、そして予想外のJavaScript削減という発見を手に入れられます。
  • この方法は、机上の空論ではありません。まさに このブログ自身で実践し、92点という現実と向き合った一次情報 です。
  • この情報は、単なる測定結果ではなく、AIと協業しながら継続的にパフォーマンスを監視し、 問題を可視化して改善につなげる 未来の開発現場から得られた実践知です。

私も同じでした

筆者も過去に、機能追加のたびにパフォーマンスが悪化し、原因特定に苦労した経験があります。
このブログを「AIによる実装」と「人間による設計」で作り上げる過程で、継続的な測定と影響評価の重要性を痛感しました。
この記事で、機能追加前後のパフォーマンス変化を可視化し、問題を早期に発見する方法、そして 予想外の改善も含めた包括的な分析手法 を持ち帰れるように書きました。
さらに深掘りして、レンダリングブロックCSSの根本原因や、ページごとに異なるパフォーマンスが示す設計の課題を知りたい方は、その詳細な実装方法を確認できます。

背景:影響調査計画の策定

前回の記事「ログイン機能追加後のLighthouse影響調査計画」では、体系的な測定計画を立案しました:

  • 測定対象 : ブログ一覧ページ、ブログ記事詳細ページ
  • 評価基準 : Performance 95点以上、その他100点
  • 測定環境 : Cloudflare Pages プレビュー環境
  • 測定ツール : PageSpeed Insights

今回は、この計画に基づいて実際に測定を実施し、結果を分析します。

測定結果のハイライト

私はログイン機能追加後のLighthouse測定を実行し、以下の結果を得ました:

指標 測定結果 評価
ブログ一覧ページ Performance 92点 ❌ 基準(95点)を3点下回る
ブログ記事詳細ページ Performance 94点 ❌ 基準(95点)を1点下回る
未使用JavaScript 35.9 KiB -3.1 KiB改善(予想外)
レンダリングブロックCSS 1,050 ms ❌ 両ページ共通の課題

予想外の発見 : ログイン機能を追加したのに、JavaScriptが3.1 KiB削減されました。
最大の課題 : レンダリングブロックCSSが1,050 msという深刻な数値を示しています。

AIが見逃す測定の本質

ここで重要な警告があります。

AIに「ログイン機能を追加したら92点になった。改善して」と頼むと、高確率で以下のような提案が返ってきます:

  • 「JavaScriptを削減しましょう」
  • 「CSSを圧縮しましょう」
  • 「画像を最適化しましょう」

しかし、これらは 測定データを見ずに提案する対症療法 です。実際には、JavaScriptは削減されており(-3.1 KiB)、問題はレンダリングブロックCSS(1,050 ms)という別の場所にあります。

根本原因は、 AIが表面的なスコアしか見ず、パフォーマンス指標の内訳を分析しない ことにありました。人間は「なぜ92点なのか」「どの指標が悪化したのか」を定量的に分析し、真の問題を特定する必要があります。

ここから先は、AIが絶対に教えてくれない 「測定データから問題を特定する分析手法」 の全貌と、具体的な測定データ、そしてレンダリングブロックCSSという真の原因を、すべて公開します。

この分析手法をコピーすれば、AIの表面的な提案を回避し、 データに基づいた的確な改善 を実現できます。私が2日間かけて検証した測定データと分析手法を、ここで全て公開します。

詳細な測定データと分析

では、実際にどのような測定を行い、どのようにデータを分析したのか。具体的な測定結果、ページごとの比較、そしてレンダリングブロックCSSという根本原因の特定プロセスを、すべて公開します。

この測定データは、ClaudeMix本番環境で実際に取得した一次情報です。同じ測定手法を使えば、あなたのプロジェクトでも再現可能です。

ブログ一覧ページ(Mobile)

測定日時 : 2026-01-13 22:21
URL: https://claude-lighthouse-impact-ass.claudemix.pages.dev/blog

ブログ一覧ページのスコア

カテゴリ 測定値 基準値 差分 評価
Performance 92点 100点 -8点 ❌ 要改善
Accessibility 100点 100点 ±0点 維持
Best Practices 100点 100点 ±0点 維持
SEO 100点 100点 ±0点 維持

ブログ一覧ページのパフォーマンス指標

指標 測定値
クリティカルパスの最大待ち時間 366 ms
レンダリングブロック合計 10.4 KiB、1,050 ms
強制リフロー 84 ms

ブログ一覧ページの未使用リソース

リソース 測定値 基準値 変化量 評価
未使用JavaScript 35.9 KiB 39 KiB -3.1 KiB 改善!

ブログ記事詳細ページ(Mobile)

測定日時 : 2026-01-13 22:28(再測定)
URL: https://claude-lighthouse-impact-ass.claudemix.pages.dev/blog/welcome

ブログ記事詳細ページのスコア

カテゴリ 測定値 基準値 差分 評価
Performance 94点 100点 -6点 ⚠️ 要改善
Accessibility 100点 100点 ±0点 維持
Best Practices 100点 100点 ±0点 維持
SEO 100点 100点 ±0点 維持

※ 初回測定(タイポURL /blog/welcom)でSEO 82点、Best Practices 96点だったが、正しいURLで再測定したところ両方とも100点に戻った

ブログ記事詳細ページのパフォーマンス指標

指標 測定値 評価
FCP (First Contentful Paint) 2.5秒 ⚠️ 改善の余地
LCP (Largest Contentful Paint) 2.5秒 ⚠️ 改善の余地
TBT (Total Blocking Time) 0ミリ秒 完璧
CLS (Cumulative Layout Shift) 0.001 優秀
Speed Index 2.7秒 ⚠️ 改善の余地

レンダリングブロックCSS(ブログ一覧と同じ問題)

URL サイズ 継続時間
/assets/entry-CsOEOGy4.css 6.3 KiB 150 ms
/assets/blog-bXPeX5g8.css 2.2 KiB 450 ms
/assets/layer2-common-NqDfPqty.css 1.9 KiB 450 ms
合計 10.4 KiB 1,050 ms

ブログ記事詳細ページの未使用リソース

リソース 測定値 基準値 変化量 評価
未使用JavaScript 38.1 KiB 39 KiB -0.9 KiB 改善

影響分析

ポジティブな影響

1. 予想外のJavaScript削減

39 KiB → 35.9 KiB(-3.1 KiB、約8%削減)

驚くべき発見 : ログイン機能を追加したのに、JavaScriptが減少した。

推測される理由 :

  • コード分割が改善された可能性
  • Remix/Viteの共有バンドル戦略が最適化された
  • 不要なコンポーネントの遅延読み込みが機能している

2. SEO、Best Practices、Accessibilityは100点を維持

  • 両方のページでSEO 100点
  • 両方のページでBest Practices 100点
  • 両方のページでAccessibility 100点
  • アクセシビリティの配慮が継続されている

⚠️ ネガティブな影響

1. 両方のページでPerformanceスコアが低下

ブログ一覧ページ :

100点 → 92点(-8点)
評価基準(95点以上)を3点下回る ❌

ブログ記事詳細ページ :

100点 → 94点(-6点)
評価基準(95点以上)を1点下回る ❌

2. レンダリングブロックCSS(最大の問題)

合計: 10.4 KiB、1,050 ms

詳細:
- /assets/blog-BlFJldfD.css: 2.2 KiB、450 ms
- /assets/layer2-common-NqDfPqty.css: 1.9 KiB、450 ms
- /assets/entry-CsOEOGy4.css: 6.3 KiB、150 ms

分析 : CSSの読み込みで1秒以上ブロック。ログイン機能追加により、entry-CsOEOGy4.cssのサイズが増加した可能性。

3. 強制リフロー(84 ms)

  • JavaScriptによるDOM操作が強制リフローを引き起こしている
  • ログインボタンやナビゲーション分岐の実装が影響している可能性

興味深い発見

両方のページで共通する問題

ページ Performance 共通問題
ブログ一覧 92点 レンダリングブロックCSS(1,050 ms)、強制リフロー(84 ms)
ブログ記事詳細 94点 レンダリングブロックCSS(1,050 ms)

重要な発見 : 両方のページで レンダリングブロックCSSが1,050 ms という同じ問題が発生している。

なぜスコアに2点の差があるのか?

  1. 強制リフローの有無

    • ブログ一覧: 84 ms の強制リフロー(フィルター機能、Load Moreボタンの影響)
    • ブログ記事詳細: 強制リフローなし
  2. FCP/LCPの差

    • ブログ一覧: データなし(測定時は良好と推測)
    • ブログ記事詳細: FCP 2.5s、LCP 2.5s(改善の余地)
  3. CSSファイルの構成は異なる

    • ブログ一覧: blog-BlFJldfD.css(2.2 KiB)
    • ブログ記事詳細: blog-bXPeX5g8.css(2.2 KiB)
    • 共通: entry-CsOEOGy4.css(6.3 KiB)、layer2-common-NqDfPqty.css(1.9 KiB)

未使用JavaScript削減の謎

予想 : ログイン機能追加でJavaScriptが増加するはず
現実 : 逆に3.1 KiB削減された

仮説 :

  • Remix/Viteの自動最適化が効いている
  • ログイン機能のコード分割が適切に行われている
  • 以前のバンドルに含まれていた不要なコードが削除された

評価基準との照合

項目 目標値 ブログ一覧 ブログ記事詳細 判定
Performanceスコア ≥ 95点 92点 94点 ❌ 両方とも不合格
その他スコア = 100点 100点 100点 両方とも合格
JavaScript増加 ≤ +5 KiB -3.1 KiB -0.9 KiB 合格(むしろ改善)
CSS増加 ≤ +2 KiB 不明 不明 -

総合判定 : ⚠️ 両ページでPerformance改善が必要

共通課題 : レンダリングブロックCSS(1,050 ms)が両ページのパフォーマンス低下の主因

今後の改善計画

優先度1: 両ページのPerformance改善(レンダリングブロックCSS対策)

目標 :

  • ブログ一覧ページ: 92点 → 95点以上
  • ブログ記事詳細ページ: 94点 → 95点以上

共通問題 : レンダリングブロックCSS(1,050 ms)

改善策 :

  1. クリティカルCSSのインライン化

    • ファーストビューに必要な最小限のCSSをHTMLに埋め込む
    • 残りのCSSは非同期読み込み
    • 効果: 両ページで1秒以上の改善が見込まれる
  2. CSSのプリロード設定

    • <link rel="preload"> でCSSを事前読み込み
    • レンダリングをブロックしない
    • Remixのlinks関数で実装可能
  3. 強制リフローの最適化(ブログ一覧ページのみ)

  • DOM操作のタイミングを最適化
  • バッチ処理でレイアウト再計算を削減
  • フィルター機能とLoad Moreボタンの処理を見直し

優先度2: セキュリティヘッダーの追加(将来的な改善)

現状 : SEO、Best Practices、Accessibilityは全て100点を維持

将来的な改善 : Cloudflare Pagesでセキュリティヘッダーを追加

  • CSP(Content Security Policy)
  • HSTS(HTTP Strict Transport Security)
  • COOP(Cross-Origin-Opener-Policy)
  • XFO(X-Frame-Options)
  • Trusted Types

※ 現時点では緊急性は低いが、Best Practicesをさらに強化するための施策

今回の学びと感想

Lighthouse測定を通じて、最も重要だと感じたのは 「予想と現実のギャップから学ぶ」 という姿勢でした。

予想外の発見

ログイン機能を追加すれば、JavaScriptが増えてパフォーマンスが悪化すると予想していました。

しかし、実際には:

  • JavaScriptが3.1 KiB削減された
  • 両方のページでレンダリングブロックCSSが同じ問題を抱えている
  • ブログ一覧92点、ブログ記事詳細94点の両方が基準(95点)を下回る

この「予想外の改善」は、Remix/Viteの自動最適化やコード分割が効いている証拠です。

レンダリングブロックCSSという共通の課題

同じログイン機能を追加したのに、両方のページで レンダリングブロックCSSが1,050 ms という共通の問題が発生している。

これは、 サイト全体のCSS配信戦略の見直しが必要 であることを示しています。

ページ個別の最適化ではなく、CSS配信の全体最適化が必要 という教訓を得ました。

レンダリングブロックCSSという壁

レンダリングブロックCSSは、以前の最適化では解決できなかった問題です。

CSSファイルを分割しても、読み込み順序や方法を最適化しなければ、パフォーマンスは改善しません。

今回の測定で、次の改善ターゲットが明確になりました。

継続的な測定の重要性

機能追加のたびに測定を実施することで、問題を早期に発見できます。

今回の測定では、以下を可視化できました:

  • ブログ一覧ページのPerformanceが92点に低下
  • レンダリングブロックCSSが1,050 ms
  • 未使用JavaScriptが3.1 KiB削減

測定せずに進めていたら、これらの問題は見過ごされていたでしょう。

まとめ

ログイン機能追加後のLighthouse測定を実施し、以下の結果を得ました:

最終結果のサマリー

  1. ブログ一覧ページ : Performance 92点(-8点) ❌
  2. ブログ記事詳細ページ : Performance 94点(-6点) ❌
  3. 未使用JavaScript: 35.9 KiB(-3.1 KiB)
  4. レンダリングブロックCSS: 1,050 ms(両ページ共通) ❌

重要な発見事項

  • 予想外の改善 : JavaScriptが3.1 KiB削減
  • 両ページに共通の課題 : レンダリングブロックCSS 1,050 ms
  • 明確な問題 : サイト全体のCSS配信戦略の見直しが必要

今後の対応

  1. レンダリングブロックCSS対策(クリティカルCSS、プリロード)
  2. 強制リフローの最適化
  3. SEOとBest Practicesの再確認
  4. 改善後の再測定

次回記事 : Lighthouse 99点で止めた理由 - 100点を追わないパフォーマンス最適化戦略

同じような課題で悩んだ方はいませんか?
もっと良い改善方法があれば教えてください!

あなたのリポジトリへの適用

どちらを採用しますか?(1つ選択)

PERFORMANCE|パフォーマンス改善

ログイン追加後のレンダリングブロックCSSと強制リフローを解消する

調査:

  1. レンダリングブロックCSS(1,050ms)の発生箇所と原因を特定せよ
  2. 強制リフローが発生しているコンポーネントまたはスタイル定義を特定せよ
  3. ログインページと非ログインページで異なるパフォーマンス特性が出ている箇所を確認せよ

この内容をClaude Codeに貼り付けて実行します

SEPARATION|責務を分離

ログインページと非ログインページのLighthouse測定を分けて管理する

調査:

  1. 現在のLighthouse測定がページ別に分けて記録されているか確認せよ
  2. ログインページ固有のパフォーマンス問題(認証JS追加等)が非ログインページの評価に混入していないか確認せよ
  3. ページ別のパフォーマンス目標値が設計書に定義されているか確認せよ

この内容をClaude Codeに貼り付けて実行します

外部コードのローカル実行にはリスクがあります。ブラウザ環境での実行を推奨します。