パフォーマンス改善スキル
Webアプリケーションのパフォーマンスを計測・分析・改善するスキル。
パフォーマンス改善スキル
概要
Webアプリケーションのパフォーマンスを計測・分析・改善するスキル。
Core Web Vitals を中心に、ボトルネック特定から具体的な修正コードの提案まで行う。
発動条件
「遅い」「重い」「パフォーマンス」「表示速度」「Core Web Vitals」「LCP」「CLS」に関する相談を受けたとき。
改善サイクル
**計測 → 分析 → 改善 → 再計測** を必ず1セットで行う。
推測ではなくデータに基づいて判断する。
Core Web Vitals 基準値
| 指標 | 良好 | 改善が必要 | 不良 |
|------|------|-----------|------|
| LCP (Largest Contentful Paint) | ≤ 2.5s | ≤ 4.0s | > 4.0s |
| INP (Interaction to Next Paint) | ≤ 200ms | ≤ 500ms | > 500ms |
| CLS (Cumulative Layout Shift) | ≤ 0.1 | ≤ 0.25 | > 0.25 |
分析カテゴリ
1. レンダリング最適化
- ヒーロー画像: `` + 適切なフォーマット(WebP/AVIF)
- Web フォント: `font-display: swap` + プリロード
- サーバーレスポンス: TTFB 短縮(CDN、キャッシュ、DB最適化)
- レンダリングブロック CSS/JS の排除
- 画像/動画に `width` / `height` 属性を明示
- 動的コンテンツの挿入位置を固定
- Web フォントの FOUT/FOIT 対策
- `aspect-ratio` CSS プロパティの活用
2. JavaScript 最適化
- `import { specific } from 'lib'` でツリーシェイキング有効化
- 動的 import (`React.lazy`, `import()`) でコード分割
- `bundle-analyzer` で巨大依存を特定
- 軽量代替ライブラリの提案(moment→dayjs、lodash→lodash-es/個別import)
- 重い計算は `requestIdleCallback` / Web Worker に移す
- 長いタスクを `scheduler.yield()` で分割
- 不要な再レンダリングの排除(React Profiler で計測)
3. ネットワーク最適化
- クリティカルリソース: `preload` / `preconnect`
- 非クリティカル: `defer` / `async` / `loading="lazy"`
- 画像: レスポンシブ (`srcset` + `sizes`)、次世代フォーマット
- HTTP/2 or HTTP/3 の活用
- 静的アセット: `Cache-Control: public, max-age=31536000, immutable`
- HTML: `Cache-Control: no-cache`(常に再検証)
- API レスポンス: `stale-while-revalidate` パターン
- Service Worker によるオフラインキャッシュ
4. React 固有の最適化
5. サーバーサイド最適化
計測ツール・コマンド
```bash
Lighthouse CLI
npx lighthouse https://example.com --output=json --output-path=./report.json
バンドル分析(webpack)
npx webpack-bundle-analyzer stats.json
バンドル分析(Vite)
npx vite-bundle-visualizer
```
改善提案の出力ルール
出力フォーマット
1. **現状分析**(指標の現在値と問題点)
2. **ボトルネック一覧**(優先度順)
3. **改善施策**(施策ごとに影響度・コスト・コード例)
4. **計測方法**(改善後の確認手順)