mcpField
P
performance-budget-setter

performance-budget-setter

github.com/patricio0312revテスト・品質63216 回インストール41 週間前に更新
リポジトリ

performance-budget-setter について

performance-budget-setterは、Webサイトの性能予算を設定し、維持するチーム向けのスキルです。CIでの検査、実ユーザー・合成モニタリング、予算超過時の対応を扱います。

主な機能

  1. 01アセットサイズと遅延の予算設定
  2. 02CI/CDでの予算チェック自動化
  3. 03実ユーザー・合成モニタリングの計画
  4. 04予算超過時の対応策策定
  5. 05コード、API、データベースの最適化案

活用シーン

  1. 01Webサイトのリリースに性能基準を設ける
  2. 02プルリクエストのマージ前にバンドルサイズを確認する
  3. 03Core Web Vitalsを監視し予算超過に対応する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/patricio0312rev/skills --skill performance-budget-setter

インストール後、Claude Code で/performance-budget-setterを入力して読み込まれたか確認します。

詳細

パフォーマンス予算の設定

パフォーマンス予算を設定して適用し、ユーザー体験の高速性を維持します。

パフォーマンス予算テンプレート

# Performance Budget: E-Commerce Website

## Bundle Size Budget

| Asset Type             | Budget     | Current    | Status |
| ---------------------- | ---------- | ---------- | ------ |
| Initial JS             | 200 KB     | 185 KB     | ✅     |
| Initial CSS            | 50 KB      | 48 KB      | ✅     |
| Vendor JS              | 150 KB     | 145 KB     | ✅     |
| Fonts                  | 100 KB     | 95 KB      | ✅     |
| Images (above fold)    | 300 KB     | 320 KB     | ❌     |
| **Total Initial Load** | **800 KB** | **793 KB** | ✅     |

## API Latency Budget

| Endpoint       | p50    | p95    | p99     |
| -------------- | ------ | ------ | ------- |
| GET /products  | <100ms | <300ms | <500ms  |
| POST /checkout | <200ms | <500ms | <1000ms |
| GET /search    | <150ms | <400ms | <800ms  |

## Database Query Budget

| Query Type       | Budget | Current |
| ---------------- | ------ | ------- |
| Simple reads     | <50ms  | 42ms    |
| Complex joins    | <200ms | 185ms   |
| Aggregations     | <500ms | 450ms   |
| Queries per page | <20    | 18      |

## Core Web Vitals

| Metric                         | Good   | Poor   | Target |
| ------------------------------ | ------ | ------ | ------ |
| LCP (Largest Contentful Paint) | <2.5s  | >4.0s  | <2.0s  |
| FID (First Input Delay)        | <100ms | >300ms | <50ms  |
| CLS (Cumulative Layout Shift)  | <0.1   | >0.25  | <0.05  |

## Page-Specific Budgets

### Homepage

- Time to Interactive: <3s
- Total Blocking Time: <300ms
- Speed Index: <3s

### Product Page

- Time to Interactive: <4s
- Images loaded: <2s
- Reviews section: <1s

### Checkout

- Time to Interactive: <3s
- Payment processing: <2s
- Zero layout shifts

## Third-Party Scripts

| Service     | Budget     | Purpose          |
| ----------- | ---------- | ---------------- |
| Analytics   | 30 KB      | Google Analytics |
| Chat Widget | 50 KB      | Customer support |
| Payment     | 100 KB     | Stripe           |
| **Total**   | **180 KB** |                  |

適用戦略

1. CI/CD との統合
# .github/workflows/performance-budget.yml
name: Performance Budget Check

on: [pull_request]

jobs:
  budget-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Build production bundle
        run: npm run build

      - name: Check bundle size
        run: |
          npx bundlesize

      - name: Lighthouse CI
        run: |
          npm install -g @lhci/cli
          lhci autorun
2. Webpack バンドルアナライザー
// webpack.config.js
const BundleAnalyzerPlugin =
  require("webpack-bundle-analyzer").BundleAnalyzerPlugin;

module.exports = {
  plugins: [
    new BundleAnalyzerPlugin({
      analyzerMode: process.env.ANALYZE ? "server" : "disabled",
    }),
  ],
  performance: {
    hints: "error",
    maxAssetSize: 200000, // 200 KB
    maxEntrypointSize: 400000, // 400 KB
  },
};
3. package.json の設定
{
  "bundlesize": [
    {
      "path": "./dist/js/main.*.js",
      "maxSize": "200 KB"
    },
    {
      "path": "./dist/css/main.*.css",
      "maxSize": "50 KB"
    },
    {
      "path": "./dist/js/vendor.*.js",
      "maxSize": "150 KB"
    }
  ]
}

モニタリング計画

リアルユーザーモニタリング(RUM)
// Track Core Web Vitals
import { getCLS, getFID, getFCP, getLCP, getTTFB } from "web-vitals";

function sendToAnalytics(metric) {
  const body = JSON.stringify(metric);

  if (navigator.sendBeacon) {
    navigator.sendBeacon("/analytics", body);
  } else {
    fetch("/analytics", { body, method: "POST", keepalive: true });
  }
}

getCLS(sendToAnalytics);
getFID(sendToAnalytics);
getLCP(sendToAnalytics);
合成モニタリング
# Lighthouse CI
lhci autorun --config=.lighthouserc.json

# WebPageTest API
curl "https://www.webpagetest.org/runtest.php?url=https://example.com&k=API_KEY"
パフォーマンスダッシュボード
**Daily Metrics:**

- Bundle size trend
- API latency percentiles
- Core Web Vitals scores
- Page load times

**Alerts:**

- Bundle size exceeds budget by 10%
- LCP >2.5s for >5% of users
- API p95 >500ms
- Any metric exceeds budget

最適化戦略

バンドルサイズを削減する
// Code splitting
const ProductPage = lazy(() => import("./ProductPage"));

// Tree shaking
import { specific } from "library"; // ✅
import * as library from "library"; // ❌

// Dynamic imports
if (featureFlag) {
  const module = await import("./feature");
}
API 呼び出しを最適化する
// Parallel requests
const [user, orders] = await Promise.all([fetchUser(id), fetchOrders(id)]);

// Caching
const cachedData = await redis.get(key);
if (cachedData) return cachedData;

// Pagination
const products = await db.products
  .find()
  .limit(20)
  .skip((page - 1) * 20);
データベースクエリを最適化する
-- Add indexes
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at);

-- Limit columns
SELECT id, name FROM products; -- ✅
SELECT * FROM products;        -- ❌

-- Use EXPLAIN
EXPLAIN ANALYZE SELECT ...;

予算超過への対応

予算を超過した場合
  1. 直ちに:

    • PR のマージをブロックする
    • Slack でチームに通知する
    • チケットを作成する
  2. 24 時間以内:

    • 原因を調査する
    • 最適化の機会を特定する
    • 修正案または予算の引き上げを提案する
  3. 判断:

    • コードを修正する(推奨)
    • 予算を引き上げる(理由の提示が必要)
予算引き上げ申請テンプレート
## Budget Increase Request

**Component:** Main JS bundle
**Current Budget:** 200 KB
**Requested Budget:** 250 KB
**Reason:** Added critical feature X

**Impact Analysis:**

- Load time increase: +0.5s
- User impact: Medium
- Revenue impact: Unknown

**Alternatives Considered:**

1. Code splitting: Reduces to 210 KB (preferred)
2. Remove feature Y: Reduces to 195 KB (rejected)
3. Lazy loading: Complex, 3 weeks effort

**Recommendation:** Implement code splitting

ベストプラクティス

  1. 現実的な予算を設定する:ユーザーデータに基づきます
  2. CI で適用する:チェックを自動化します
  3. 継続的にモニタリングする:RUM と合成モニタリングを併用します
  4. 四半期ごとに見直す:必要に応じて調整します
  5. UX を優先する:ユーザー中心の指標を使用します
  6. 例外を記録する:予算を引き上げた理由を記録します
  7. 成果を称える:予算内に収まったときに称えます

出力チェックリスト

  • バンドルサイズの予算を定義済み
  • API レイテンシの目標を設定済み
  • データベースクエリの予算を設定済み
  • Core Web Vitals の目標を設定済み
  • ページごとの予算を設定済み
  • CI/CD での適用を設定済み
  • モニタリングダッシュボードを用意済み
  • アラートのしきい値を設定済み
  • 予算超過への対応プロセスを整備済み
  • 定期的な見直しスケジュールを設定済み

コメント