はじめに
「アプリが遅いのはわかるけど、どこが原因かわからない」
「プロファイリングツールの使い方がわからない」
「N+1クエリ問題を修正したいけど、どこで発生しているか見つけられない」
パフォーマンス改善はエンジニアが最も頭を悩ませる作業の一つです。Claude Codeを使えば、プロファイリングの実行から問題の特定・改善策の実装まで自律的にサポートします。
目次
- パフォーマンス診断の基本アプローチ
- バックエンドのボトルネック検出
- データベースクエリの最適化
- フロントエンドのパフォーマンス改善
- メモリ使用量の最適化
- キャッシュ戦略の実装
- 負荷テストの実施
- まとめ
1. パフォーマンス診断の基本アプローチ
計測なしに最適化しない原則
> このアプリケーションが遅いという報告があります。
まず何を計測すべきか、どのプロファイリングツールを使うか
提案してください。その後、実際に計測を実行してください。
Claude Codeが技術スタックを確認して適切なプロファイリングツールを選択します。
プロファイリングの実行
> Pythonのcodeモジュールとline_profilerを使って
このAPIエンドポイントのプロファイリングを実行してください。
どの関数が最も時間を消費しているか特定してください。
2. バックエンドのボトルネック検出
遅いAPIエンドポイントの特定
> アクセスログを分析して、レスポンスタイムが500ms以上の
エンドポイントをリストアップしてください。
それぞれの遅延原因を調査して改善策を提案してください。
[ログファイルのパスを指定]
非効率なアルゴリズムの検出
> src/utils/以下のコードを分析して、
時間計算量や空間計算量が改善できる箇所を特定してください。
特にO(n²)以上の計算量の処理を見つけて、
より効率的なアルゴリズムに置き換えてください。
3. データベースクエリの最適化
N+1クエリの検出と修正
> このコードでN+1クエリが発生していないか確認してください。
問題があれば、EAGERローディングを使って修正してください。
使用ORM:SQLAlchemy(またはPrisma / ActiveRecord等)
[対象のコードを貼り付け]
スロークエリの最適化
> 以下のSQLクエリの実行計画(EXPLAIN ANALYZE)を確認して、
インデックスの追加または書き換えで最適化してください。
[SQLクエリを貼り付け]
インデックス設計の見直し
> このテーブルのクエリパターンを分析して、
最適なインデックス設計を提案してください。
よく実行されるクエリ:
1. WHERE user_id = ? AND status = 'active' ORDER BY created_at DESC
2. WHERE email = ? (ログイン時)
3. WHERE category_id IN (?) AND price BETWEEN ? AND ?
4. フロントエンドのパフォーマンス改善
Lighthouseスコアの改善
> このWebアプリのLighthouseスコアを改善してください。
現在のスコア:
- Performance: 45
- Accessibility: 72
- Best Practices: 83
- SEO: 89
特にPerformanceを80以上に改善することを優先してください。
改善できる項目を分析して、効果の大きいものから実装してください。
バンドルサイズの削減
> webpack-bundle-analyzerを実行して、
バンドルサイズが大きい原因を特定してください。
改善策:
- 使っていないライブラリの削除
- dynamic importによるコード分割
- tree-shakingの最適化
- 重複しているライブラリの統合
画像の最適化
> このプロジェクトの画像最適化を実施してください。
対象:public/images/ 以下のすべての画像
方針:
- JPEGはWebPに変換(サポートされない場合のfallback付き)
- 適切なサイズにリサイズ(表示サイズに合わせる)
- lazy loadingの設定
- width/heightの明示的な指定
5. メモリ使用量の最適化
メモリリークの検出
> Node.jsアプリケーションのメモリ使用量が時間とともに増加しています。
メモリリークを検出するためのヒープスナップショットを
取得して分析してください。
問題が特定できたら修正を実装してください。
Pythonのメモリ最適化
> このデータ処理スクリプトのメモリ使用量を削減してください。
現状:100万件のデータ処理で8GBのメモリを使用している
目標:2GB以下に削減
方針:
- ジェネレーターの活用
- chunked処理
- 不要な中間変数の削除
- Pandasのdtype最適化
6. キャッシュ戦略の実装
Redisを使ったキャッシュ実装
> このAPIエンドポイントにRedisキャッシュを実装してください。
キャッシュ戦略:
- 商品一覧:TTL 5分(在庫は変動するため)
- 商品詳細:TTL 1時間
- ユーザープロフィール:TTL 30分・更新時に無効化
- 検索結果:TTL 10分
キャッシュキーの命名規則も設計してください。
7. 負荷テストの実施
k6を使った負荷テスト
> k6を使ってこのAPIの負荷テストを作成してください。
シナリオ:
- 通常時:50ユーザーが同時アクセス
- ピーク時:500ユーザーが同時アクセス
- スパイク:突然1000ユーザーに増加
合格基準:
- p95レスポンスタイム < 500ms
- エラー率 < 1%
- スループット > 1000リクエスト/秒
8. まとめ
パフォーマンス最適化の基本原則:
- 計測なしに最適化しない(推測ではなくデータで判断)
- 最もインパクトの大きい問題から取り組む
- 改善後に再計測して効果を確認する
Claude Codeが特に効果的な最適化作業:
- N+1クエリの自動検出と修正
- スロークエリのEXPLAIN分析とインデックス提案
- フロントエンドバンドルサイズの削減
- キャッシュ戦略の設計と実装
次回の第26回:React・Next.jsを開発する方法では、コンポーネント生成からビルド最適化まで解説します。
よくある質問(FAQ)
Q. どこから最適化を始めればいいですか?
A. 「このアプリが遅いです。何を計測すれば原因がわかりますか?」とClaude Codeに相談することで、技術スタックに合った計測方法を提案してくれます。推測で最適化するのではなく、まず計測することが重要です。
この記事はClaude Code入門シリーズ(第3部)の第25回です。← 第24回:CLIツール作成 | 第26回:React・Next.js開発 →
ご質問はお問い合わせページからお気軽にどうぞ。