AgentSkillsCN

perf-analyze

对 Go 项目进行性能测量与分析——可通过“性能测量”、“基准测试”、“perf”、“性能评估”、“性能剖析”、“优化建议”、“性能分析”等指令触发。支持执行基准测试、开展性能剖析,并提供优化方案。

SKILL.md
--- frontmatter
name: perf-analyze
description: Go プロジェクトのパフォーマンスを計測・分析する。「パフォーマンス計測」「ベンチマーク」「perf」「性能測定」「プロファイリング」「最適化提案」「パフォーマンス分析」などで起動。ベンチマーク実行、プロファイリング、改善案の提示をサポート。
allowed-tools: [Read, Bash, Glob, Grep]
context: fork
agent: shiiman-go:performance-optimizer

Analyze-Perf

Go プロジェクトのパフォーマンスを計測・分析し、改善案を提示します。

引数

  • [パッケージパス]: 対象パッケージ(例: ./internal/handler)
  • --bench: ベンチマークのみ実行
  • --profile: プロファイリングを実行
  • --help: ヘルプを表示

実行フロー

code
1. 対象コードの特定
   ↓
2. ベースライン測定
   ↓
3. ボトルネック分析
   ↓
4. 改善案提示
   ↓
5. ユーザーと方針決定
   ↓
6. 修正実装
   ↓
7. 効果測定

実行手順

1. ベンチマーク実行

bash
# 基本的なベンチマーク
go test -bench=. -benchmem ./...

# 特定パッケージのベンチマーク
go test -bench=. -benchmem ./internal/handler

# 複数回実行して安定した結果を取得
go test -bench=. -benchmem -count=3 ./... | tee baseline.txt

2. プロファイリング

bash
# CPU プロファイル
go test -bench=. -cpuprofile=cpu.prof ./...
go tool pprof cpu.prof

# メモリプロファイル
go test -bench=. -memprofile=mem.prof ./...
go tool pprof mem.prof

# pprof コマンド
# top    - 実行時間が最も長い関数を表示
# list   - 特定関数のソースコード行ごとの分析
# web    - グラフ形式で可視化

3. 結果レポート

code
## パフォーマンス分析結果

### ベンチマーク結果
- BenchmarkXxx: {N} ns/op
- メモリアロケーション: {M} B/op
- アロケーション回数: {K} allocs/op

### 特定されたボトルネック
1. {関数名}: {問題の説明}
2. {関数名}: {問題の説明}

### 改善案
| 提案 | 内容 | 期待される改善 |
|------|------|---------------|
| 1 | {改善内容} | {効果} |
| 2 | {改善内容} | {効果} |

どの改善案を適用しますか?

改善案の観点

観点改善例
データ構造slice、map の適切な選択
アルゴリズム計算量の削減、キャッシング
並行処理goroutine、channel、ワーカープール
メモリ管理sync.Pool、スライスの事前確保
文字列操作strings.Builder の使用
PGOProfile-Guided Optimization(Go 1.22+)

期待される改善率の目安

最適化内容期待される改善率
スライスの事前確保メモリ 30-50% 削減
ポインタレシーバCPU 20-40% 高速化
strings.Builder文字列操作 2-5x 高速化
sync.Poolアロケーション 50-80% 削減
並行処理最適化スループット 2-10x 向上
PGO全体 2-14% 高速化

benchstat による比較

bash
# 最適化前
go test -bench=. -benchmem -count=3 ./... | tee before.txt

# 最適化後
go test -bench=. -benchmem -count=3 ./... | tee after.txt

# 比較
benchstat before.txt after.txt

重要な注意事項

  • ✅ 最適化前に必ずベンチマークで現状を測定
  • ✅ 修正前後のベンチマーク結果を比較して効果を確認
  • ✅ 実際にボトルネックとなっている箇所に集中
  • ❌ パフォーマンス向上のために可読性を大きく損なわない
  • ❌ 早すぎる最適化を避ける