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強制なしでは、このリグレッションは気づかれずにリリースされます。