optimizing-code について
動作を変えずにソフトウェアの性能を改善するコーディングスキルです。変更の前後でベンチマークとプロファイリングを行い、一般的な最適化領域を検討します。
主な機能
- 01最適化前のベンチマーク
- 02プロファイリングによるボトルネック特定
- 03変更後の効果測定
- 04アルゴリズムとデータ構造の指針
- 05キャッシュ・データベース・メモリの手法
活用シーン
- 01遅いクリティカルパスの特定
- 02コード変更による性能向上の検証
- 03高コストなデータベースクエリの削減
- 04大容量ファイル処理のメモリ使用量削減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dralgorhythm/ claude-agentic-framework --skill optimizing-codeインストール後、Claude Code で/optimizing-codeを入力して読み込まれたか確認します。
詳細
コードの最適化
最適化の心得
最適化では、動作を変えずにパフォーマンスを改善します。必ず前後で測定してください。
基本ルール
- まず測定する:ベンチマークなしで最適化しないでください
- 推測する前にプロファイルする:実際のボトルネックを特定してください
- 適切な対象を最適化する:クリティカルパスに注力してください
- 最適化後に測定する:最適化が効果を発揮したことを確認してください
ワークフロー
- ベンチマーク:パフォーマンス指標のベースラインを確立します
- プロファイル:実際のボトルネックを特定します
- 仮説を立てる:どの最適化が効果的でしょうか?
- 実装する:変更を加えます
- 測定する:改善を確認します
- 記録する:最適化の内容と結果を記録します
よくある最適化
アルゴリズムの計算量
- O(n²) を O(n log n) または O(n) に置き換えます
- 適切なデータ構造を使用します(検索には Set、キーと値の組には Map)
キャッシュ
// Memoization
const cache = new Map<string, Result>();
function expensiveCalculation(input: string): Result {
if (cache.has(input)) {
return cache.get(input)!;
}
const result = /* expensive work */;
cache.set(input, result);
return result;
}
データベースクエリ
- 頻繁にクエリされる列にインデックスを追加します
- N+1 クエリを避けます(イーガーローディングを使用します)
- 大きな結果セットにはページネーションを使用します
メモリ
- ループ内で不要なオブジェクトを作成しないようにします
- 大きなファイルにはストリーミングを使用します
- 使用後は参照を解放します
プロファイリングツール
# Node.js
node --prof app.js
node --prof-process isolate-*.log
# Python
python -m cProfile -s cumtime script.py
# Go
go test -bench=. -cpuprofile=cpu.prof
go tool pprof cpu.prof
避けるべきアンチパターン
- 早すぎる最適化(ベンチマークなし)
- マイクロ最適化(影響がわずか)
- 実行頻度の低いパスの最適化
- わずかな効果のために可読性を犠牲にする
コメント
Markdown 対応