バンドルサイズの監視とリグレッション検出

JavaScriptとCSSのバンドルサイズを経時的に監視してパフォーマンスリグレッションを検出。webpack-bundle-analyzer、source-map-explorer、サイズ追跡ダッシュボードの使用方法。

Tooling

詳細な説明

バンドルサイズの監視

パフォーマンスバジェットは制限を定義しますが、監視はその制限にどれだけ近づいているかを経時的に追跡します。監視なしでは、機能追加に伴いページウェイトが徐々に増加します — パフォーマンスリグレッションまたはバンドル肥大化と呼ばれる現象です。

よくある監視ツール

ツール 目的 出力
webpack-bundle-analyzer バンドル内容の可視化 インタラクティブツリーマップ
source-map-explorer ソースマップサイズの分析 ソースマップからのツリーマップ
size-limit CIでのサイズ追跡 CLI/CIレポート
bundlephobia npmパッケージサイズの確認 Webインターフェース
Import Cost (VS Code) インポートサイズのインライン表示 エディタヒント

注意すべき点

一般的なバンドルサイズリグレッション:

  1. ライブラリ全体の誤ったインポートimport _ from 'lodash'(70 KB)vs import debounce from 'lodash/debounce'(1 KB)
  2. 重複依存 — 推移的依存による同じライブラリの2つのバージョン
  3. デッドコード — フィーチャーフラグは削除されたが機能コードがバンドルに残る
  4. 不要なポリフィル — ターゲットブラウザがすべてサポートしている機能のcore-jsポリフィル
  5. 開発専用コード — プロダクションビルドに残ったロガー、デバッグツール

自動アラート

以下についてアラートを設定:

  • 単一PRでバンドルサイズが10 KB以上増加
  • リリースごとにバンドルサイズが5%以上増加
  • 新しいnpm依存の追加(正当化が必要)
  • 重複パッケージバージョンの検出

ユースケース

バンドルサイズ監視は、複数チームがコードに貢献する長寿命アプリケーションにとって重要です。50人の開発者がいるSaaS製品は、誰もトレンドに気づかないまま、1年でJSバンドルが200 KBから500 KBに成長する可能性があります。エンジニアリングリードへの週次バンドルサイズレポートが説明責任を生み出します。バンドルがバジェット制限に近づいたとき、チームはパフォーマンスが劣化する前に未使用コードの削除やリファクタリングを先回りして行えます。

試してみる — Performance Budget Calculator

フルツールを開く