📚 この記事は「Claude Code 完全攻略シリーズ」の Episode 21 です。
- Claude Codeはコードベース全体を解析してパフォーマンスのボトルネックを自動特定できる
- N+1クエリ・不要な再レンダリング・メモリリークなど典型的な問題をプロンプト一つで検出
- SES現場で「性能改善タスク」を受けたときの実践ワークフローを紹介
「本番環境でページの表示が遅いとクレームが来た…」「プロファイラの結果は見たけど、どこから手をつければいいかわからない…」——SES現場でパフォーマンス改善を任された経験のあるエンジニアなら、この悩みに共感するのではないでしょうか。
Claude Codeを活用すれば、コードベース全体を俯瞰してボトルネックを特定し、具体的な改善コードまで提案してもらえます。本記事では、バックエンドからフロントエンドまで、パフォーマンス最適化にClaude Codeを活用する実践テクニックを解説します。
- Claude Codeでパフォーマンスボトルネックを自動検出する方法
- SQLクエリ・API応答速度のチューニングテクニック
- フロントエンドの描画パフォーマンス改善
- メモリリーク・リソース効率の最適化
- SES現場でのパフォーマンス改善ワークフロー
なぜClaude Codeがパフォーマンス最適化に強いのか
従来のパフォーマンス改善の課題
パフォーマンス最適化は、多くのエンジニアにとって「難しい」タスクの代名詞です。
| 課題 | 具体例 | 影響 |
|---|---|---|
| ボトルネックの特定が困難 | プロファイラの出力が膨大で読み切れない | 的外れな最適化に時間を浪費 |
| 知識の属人化 | SQLチューニングの経験者が限られる | 特定メンバーに依存 |
| 影響範囲の把握不足 | 最適化したら別の箇所が壊れた | 回帰バグの発生 |
| 計測→改善→検証のサイクルが遅い | 手動でベンチマークを繰り返す | 改善速度が出ない |
Claude Codeの強み
Claude Codeがパフォーマンス最適化で力を発揮する理由は、コードベース全体を理解した上で分析できる点にあります。
プロファイリング結果・エラーログ
↓
Claude Codeが関連コードを横断的に解析
↓
ボトルネックの原因と改善案を提示
↓
修正コードの生成 + テストで検証
単にコードを見るだけでなく、データの流れ・依存関係・呼び出し頻度まで考慮した分析ができるため、経験豊富なシニアエンジニアのようなパフォーマンスレビューが可能です。
バックエンドのパフォーマンス最適化
N+1クエリの検出と解消
SES現場で最も頻繁に遭遇するパフォーマンス問題の一つが、N+1クエリです。Claude Codeを使えば、コードベース全体からN+1クエリを自動検出できます。
# N+1クエリの検出を依頼
> このプロジェクトのORMコードを分析して、N+1クエリが
発生している箇所をすべてリストアップして。
各箇所について修正方法も提案して。
Claude Codeは、ORMの呼び出しパターンを解析し、ループ内でクエリが発行される箇所を特定します。たとえば、以下のような問題コードを検出します。
# ❌ N+1クエリ — ユーザーごとに注文を個別取得
users = User.objects.all()
for user in users:
orders = Order.objects.filter(user=user) # N回のクエリ
print(f"{user.name}: {orders.count()}件")
そして、以下のような改善案を提示します。
# ✅ 修正後 — prefetch_relatedで一括取得
users = User.objects.prefetch_related('orders').all()
for user in users:
print(f"{user.name}: {user.orders.count()}件")
SQLクエリのチューニング
スロークエリログをClaude Codeに渡すことで、具体的な改善提案を得られます。
# スロークエリの分析を依頼
> 以下のスロークエリログを分析して、インデックス追加や
クエリ書き換えの改善案を出して。
実行計画(EXPLAIN)の結果も考慮して。
[スロークエリログを貼り付け]
Claude Codeは以下のような分析を行います。
- テーブルスキャンの検出とインデックス追加提案
- サブクエリのJOINへの書き換え
- 不要なカラム取得(
SELECT *)の最適化 - 複合インデックスの適切な設計
-- ❌ 最適化前: フルテーブルスキャン
SELECT * FROM orders
WHERE created_at > '2026-01-01'
AND status = 'completed'
ORDER BY total_amount DESC;
-- ✅ 最適化後: 複合インデックス活用
-- インデックス追加: CREATE INDEX idx_orders_status_created
-- ON orders(status, created_at, total_amount);
SELECT id, user_id, total_amount, created_at
FROM orders
WHERE status = 'completed'
AND created_at > '2026-01-01'
ORDER BY total_amount DESC;
APIレスポンス時間の改善
APIのレスポンスが遅い場合、Claude Codeにエンドポイントのコードを分析してもらうことで、ボトルネックを特定できます。
# API全体のパフォーマンス分析
> /api/v1/ 配下のエンドポイントを分析して、
レスポンス時間を改善できる箇所を特定して。
キャッシュの導入、クエリの最適化、
非同期処理への切り替えなど、具体的な提案をして。
よくある改善パターンとして、Claude Codeは以下を提案します。
- キャッシュ層の導入:頻繁にアクセスされるデータにRedisキャッシュを追加
- バッチ処理化:複数のAPI呼び出しを1回にまとめる
- 非同期処理:重い処理をバックグラウンドジョブに移行
- ページネーション:大量データの一括返却を分割
フロントエンドのパフォーマンス最適化
React/Vueの再レンダリング最適化
フロントエンドフレームワークで最も多いパフォーマンス問題は、不要な再レンダリングです。
# Reactコンポーネントのレンダリング最適化
> src/components/ 配下のReactコンポーネントを分析して、
不要な再レンダリングが発生している箇所を特定して。
React.memo、useMemo、useCallbackの適切な使用箇所を提案して。
Claude Codeは、コンポーネントツリーを解析し、以下のような問題を検出します。
// ❌ 毎回新しいオブジェクトを生成 → 子コンポーネントが毎回再レンダリング
function ParentComponent() {
const [count, setCount] = useState(0);
return (
<ChildComponent
style={{ color: 'blue', fontSize: 14 }}
onClick={() => console.log('clicked')}
/>
);
}
// ✅ メモ化で不要な再レンダリングを防止
function ParentComponent() {
const [count, setCount] = useState(0);
const style = useMemo(() => ({ color: 'blue', fontSize: 14 }), []);
const handleClick = useCallback(() => console.log('clicked'), []);
return <ChildComponent style={style} onClick={handleClick} />;
}
バンドルサイズの最適化
バンドルサイズの肥大化は、ページ読み込み速度に直接影響します。
# バンドルサイズの分析と最適化
> package.jsonとwebpack/vite設定を分析して、
バンドルサイズを削減する方法を提案して。
Tree-shaking、コード分割、動的インポートの
適用箇所も具体的に示して。
Claude Codeは以下のような改善を提案します。
- 動的インポートによるコード分割
- 重いライブラリの軽量代替(moment.js → date-fns、lodash → lodash-es)
- 未使用のエクスポートの特定と削除
- 画像・アセットの最適化
// ❌ バンドル全体にlodashが含まれる
import _ from 'lodash';
const result = _.debounce(fn, 300);
// ✅ 必要な関数だけインポート
import debounce from 'lodash/debounce';
const result = debounce(fn, 300);
Core Web Vitalsの改善
Googleのランキング要因であるCore Web Vitalsの改善にも、Claude Codeを活用できます。
# Core Web Vitals改善の分析
> Lighthouse/PageSpeed Insightsの結果が以下です。
LCP: 4.2s, FID: 180ms, CLS: 0.25
コードベースを分析して、各指標を改善する
具体的な修正を提案して。
| 指標 | 改善テクニック | Claude Codeの対応 |
|---|---|---|
| LCP(最大描画時間) | 画像の遅延読み込み、プリロード | 画像タグの分析とloading="lazy"追加 |
| FID(初回入力遅延) | メインスレッドのブロック解消 | 重い処理のWeb Worker移行を提案 |
| CLS(レイアウトシフト) | サイズ指定の追加 | width/height属性の欠落を検出 |
メモリリークの検出と修正
メモリリークの自動検出
長時間稼働するアプリケーションでのメモリリークは、発見が困難な問題です。Claude Codeを使って、コードレベルでメモリリークの可能性がある箇所を事前に検出できます。
# メモリリークの可能性があるコードを検出
> このプロジェクトでメモリリークを引き起こす可能性が
あるパターンを検出して。
イベントリスナーの未解除、クロージャによる参照保持、
キャッシュの無制限増加などを確認して。
Claude Codeが検出する典型的なメモリリークパターンは以下の通りです。
// ❌ メモリリーク: イベントリスナーが解除されない
class DataFetcher {
constructor() {
window.addEventListener('resize', this.handleResize);
}
handleResize = () => {
// 処理
};
// destroyメソッドがない → リスナーが残り続ける
}
// ✅ 修正: クリーンアップを実装
class DataFetcher {
constructor() {
window.addEventListener('resize', this.handleResize);
}
handleResize = () => {
// 処理
};
destroy() {
window.removeEventListener('resize', this.handleResize);
}
}
Node.jsアプリケーションのメモリ最適化
SES現場で多いNode.jsアプリケーションのメモリ問題にも対応できます。
# Node.jsのメモリ使用量最適化
> このExpressアプリのメモリ使用量が時間とともに
増加しています。ヒープダンプの分析結果は以下です。
メモリリークの原因を特定して修正案を出して。
[ヒープダンプの要約を貼り付け]
SES現場でのパフォーマンス改善ワークフロー
Step 1: 現状計測をClaude Codeで自動化
# パフォーマンスベースラインの計測スクリプト生成
> このプロジェクトのパフォーマンスベースラインを
計測するスクリプトを作って。
API応答時間、DBクエリ実行時間、メモリ使用量を
定期的に記録する仕組みにして。
Step 2: ボトルネックの優先順位付け
# 改善インパクトの大きい箇所を優先順位付け
> パフォーマンスプロファイルの結果を基に、
改善の優先順位をつけて。
ユーザー影響度×改善の容易さでマトリクスを作って。
Claude Codeは以下のようなマトリクスを生成します。
| 問題 | ユーザー影響 | 改善の容易さ | 優先度 |
|---|---|---|---|
| N+1クエリ(一覧API) | 高 | 高 | ★★★ 最優先 |
| 画像未最適化 | 中 | 高 | ★★☆ |
| バンドルサイズ肥大 | 中 | 中 | ★★☆ |
| メモリリーク | 高 | 低 | ★☆☆ |
Step 3: 改善の実装と検証
# 改善の実装と前後比較
> 優先度★★★の N+1クエリを修正して。
修正前後のクエリ数とレスポンス時間の
比較ができるテストも追加して。
Step 4: レポート作成
SES現場では、改善結果をクライアントに報告する必要があります。Claude Codeにレポートの作成も依頼できます。
# パフォーマンス改善レポートの作成
> 今回のパフォーマンス改善の結果をまとめて。
改善前後の数値比較、実施した対策、
今後の推奨事項を含むレポートを作成して。
実践プロンプトテンプレート集
データベースパフォーマンス分析
> プロジェクト内のORMクエリを全て分析して、以下を報告して:
1. N+1クエリの箇所と修正方法
2. インデックスが不足しているテーブル
3. 不要なJOINやサブクエリ
4. トランザクション範囲の最適化余地
フロントエンドパフォーマンス分析
> フロントエンドコードを分析して、以下を改善して:
1. 不要な再レンダリングの除去
2. バンドルサイズの削減(動的インポートの適用)
3. 画像の遅延読み込み対応
4. CSS/JSの読み込み順序最適化
総合パフォーマンス監査
> このプロジェクト全体のパフォーマンス監査を実施して。
バックエンド・フロントエンド・インフラの各レイヤーで
改善できる箇所を洗い出し、優先順位付きで報告して。
各項目に具体的な修正コードも含めて。
まとめ
Claude Codeを活用したパフォーマンス最適化のポイントを振り返ります。
- ボトルネック特定の自動化:コードベース全体を解析し、N+1クエリやメモリリークなどの典型的な問題を自動検出
- 具体的な改善コードの提示:問題の指摘だけでなく、修正後のコードまで生成
- 影響範囲の把握:変更が他の箇所に与える影響を事前に分析
- 計測→改善→検証のサイクル高速化:ベンチマークスクリプトの生成からレポート作成まで一貫してサポート
SES現場でパフォーマンス改善を任されたとき、Claude Codeは「頼れるシニアエンジニア」のように、的確な分析と改善提案をしてくれます。ぜひ次のプロジェクトで活用してみてください。
