CI/CDでのパフォーマンスバジェットの強制

パフォーマンスバジェットをCI/CDパイプラインに統合してリグレッションを自動検出。bundlesize、size-limit、Lighthouse CI、カスタムwebpackプラグインの設定でウェイト制限を強制する方法。

Tooling

詳細な説明

CI/CDにおけるパフォーマンスバジェット

パフォーマンスバジェットは強制されなければ意味がありません。自動化なしでは、締切のプレッシャーの下でバジェットは無視されます。バジェットチェックをCI/CDパイプラインに統合することで、パフォーマンスリグレッションを失敗テストと同じくらい可視化します。

CI/CD統合オプション

ツール チェック対象 統合方法
size-limit JSバンドルサイズ npmスクリプト、GitHub Actions
bundlesize 任意のファイルサイズ npmスクリプト、GitHub Status API
Lighthouse CI フルページ指標 GitHub Actions、Jenkins
webpack-bundle-analyzer バンドル構成 ビジュアル、手動レビュー

size-limitの設定

{
  "size-limit": [
    { "path": "dist/js/*.js", "limit": "200 KB" },
    { "path": "dist/css/*.css", "limit": "50 KB" }
  ]
}

ファイルが制限を超えると、どのファイルがバジェットオーバーかを示す明確なエラーメッセージでビルドが失敗します。

PRコメントのサイズ差分

size-limitなどのツールはプルリクエストにサイズ差分コメントを直接投稿できます。これによりレビューアーはすべてのコード変更のパフォーマンス影響を即座に把握できます。

定着させるために

  • まず警告のみで開始し、チームが調整した後にエラーにアップグレード
  • バンドルサイズチェックをすべての機能の「完了」の定義に含める
  • 勝利を祝う — チームがバンドルサイズを削減した時に追跡・共有する

ユースケース

CI/CDで強制されるパフォーマンスバジェットは、頻繁にリリースするチーム(毎日または毎週のデプロイ)に不可欠です。ReactアプリケーションチームがJSバジェット200 KBでsize-limitを追加するとします。開発者が新しいチャートライブラリを追加してバンドルが250 KBに膨らむと、CIチェックが失敗し、より軽い代替を見つけるかチャートを遅延読み込みルートにコード分割するよう促します。CI強制なしでは、このリグレッションは気づかれずにリリースされます。

試してみる — Performance Budget Calculator

フルツールを開く