はじめに

「エラーが出たけど、原因がわからない」「スタックトレースを見ても、どこから手をつければいいかわからない」。開発者なら誰もが経験するこの状況に、Claude Codeは強力な解決策を提供します。

Claude Code公式ドキュメントでは、デバッグと問題解決を主要なユースケースの一つとして挙げています。

Debug and fix issues: Describe a bug or paste an error message. Claude Code will analyze your codebase, identify the problem, and implement a fix.

本記事では、バグ報告からClaude Codeを使って効率的に原因特定・修正を行う実践的なテクニックを解説します。この記事を読むことで、以下のことができるようになります。

  • エラーメッセージやスタックトレースをClaude Codeと効果的に共有する
  • 複雑なバグの根本原因を特定する
  • 修正提案を安全に適用し、動作確認を行う
  • 再発防止のためのテストを追加する
  • デバッグワークフロー全体を自動化・効率化する

実行環境

  • オペレーティングシステム: macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上、Windows 10以上(WSL 1/2またはGit for Windows)
  • ハードウェア: 4GB以上のRAM
  • Node.js 18以上(npmインストールの場合のみ必要)
  • インターネット接続(認証およびAI処理に必要)
  • シェル環境: Bash、Zsh、またはFish推奨

前提条件

  • コマンドライン操作の基礎知識
  • Gitの基本操作(clone、commit、push等)
  • プログラミングの基礎知識(言語は問わない)
  • Claude.aiまたはAnthropic Consoleアカウント
  • Claude Codeのインストールと認証が完了していること

バグ修正ワークフローの全体像

Claude Codeを使ったバグ修正の全体的なワークフローを確認しましょう。

flowchart TD
    A[バグ報告/エラー発生] --> B[エラー情報の収集]
    B --> C[Claude Codeにエラーを共有]
    C --> D[原因の分析と特定]
    D --> E[修正方針の提案]
    E --> F{提案を承認?}
    F -->|Yes| G[修正を適用]
    F -->|No| H[別のアプローチを検討]
    H --> D
    G --> I[動作確認]
    I --> J{修正成功?}
    J -->|Yes| K[再発防止テストを追加]
    J -->|No| D
    K --> L[コミット]

このワークフローの特徴は、Claude Codeがバグ修正の各フェーズで具体的な支援を提供できる点です。単にエラーを解析するだけでなく、修正後のテスト追加まで一貫してサポートします。

エラーメッセージの共有と分析

バグ修正の第一歩は、Claude Codeにエラー情報を正確に伝えることです。

基本的なエラー共有

最もシンプルな方法は、エラーメッセージを直接伝えることです。公式ドキュメントでは以下のような依頼方法が示されています。

1
> I'm seeing an error when I run npm test

Claude Codeはテストコマンドを実行し、エラーの詳細を取得して分析します。日本語で依頼する場合は、以下のように表現できます。

1
> npm test を実行するとエラーが出る。原因を調べて修正して。

スタックトレースの共有

より複雑なエラーの場合、スタックトレースを共有することで精度の高い分析が可能になります。

1
2
3
4
5
6
> 以下のエラーが発生しています。原因を特定して修正方法を教えて。
>
> TypeError: Cannot read properties of undefined (reading 'map')
>     at UserList (src/components/UserList.tsx:15:23)
>     at renderWithHooks (node_modules/react-dom/...)
>     at mountIndeterminateComponent (node_modules/react-dom/...)

Claude Codeは、スタックトレースの各行を分析し、エラーの発生箇所と原因を特定します。

エラー情報のパイプ入力

ログファイルやコマンド出力を直接パイプで渡すことも可能です。

1
npm test 2>&1 | claude -p "このテストエラーの原因を分析して修正方法を提案して"

大量のログから特定のエラーを抽出して分析する場合に便利です。

1
cat app.log | claude -p "このログからエラーを特定して、原因を分析して"

画像によるエラー共有

ブラウザのコンソールエラーやGUIアプリケーションのエラーダイアログなど、テキストでコピーしづらいエラーは、スクリーンショットで共有できます。

1
2
> [エラー画面のスクリーンショットをドラッグ&ドロップ]
> このエラーの原因を調べて

Claude Codeは画像内のエラーメッセージを読み取り、分析を行います。

原因特定の実践テクニック

エラー情報を共有したら、Claude Codeと協力して根本原因を特定します。

再現手順の確認

バグを確実に修正するには、まず再現手順を明確にする必要があります。

1
2
> このバグの再現手順を教えて。
> また、再現させるためのテストコードを書いて。

Claude Codeは、コードベースを分析して再現手順を推測し、テストコードを生成します。

関連コードの調査

エラーが発生している箇所だけでなく、関連するコードも調査することで根本原因を特定できます。

1
2
> @src/components/UserList.tsx で発生しているエラーについて、
> このコンポーネントを呼び出している箇所と、データを渡している箇所を調べて。

@記法でファイルを参照することで、Claude Codeは確実にそのファイルを分析対象とします。

debuggerサブエージェントの活用

Claude Codeには、デバッグに特化したビルトインのサブエージェント機能があります。公式ドキュメントでは、debuggerサブエージェントの例が以下のように説明されています。

1
> have the debugger subagent investigate why users can't log in

debuggerサブエージェントは、エラーの根本原因分析に特化しており、以下のようなプロセスで問題を調査します。

  1. エラーメッセージとスタックトレースの取得
  2. 再現手順の特定
  3. 障害箇所の分離
  4. 最小限の修正の実装
  5. 解決策の検証

日本語で明示的に依頼する場合は、以下のように表現できます。

1
> debuggerサブエージェントを使って、ログインできない問題を調査して

git履歴を活用した原因調査

バグが最近発生した場合、最近の変更が原因である可能性が高いです。

1
2
> このバグが発生し始めた時期を特定して。
> git logを確認して、関連する変更を探して。

Claude Codeは、git loggit diffを活用して、バグの原因となった変更を特定します。

拡張思考モードによる深い分析

複雑なバグには、Claude Codeの拡張思考モード(Extended Thinking)が有効です。ultrathinkキーワードを使用することで、より深い分析が可能になります。

1
2
> ultrathink: この断続的に発生するメモリリークの原因を調査して。
> 複数の仮説を立てて、それぞれ検証して。

拡張思考モードでは、Claude Codeがより多くの時間をかけて複数のアプローチを検討し、エッジケースを分析します。

修正提案の適用

原因が特定できたら、修正を適用します。

修正方針の確認

修正を適用する前に、方針を確認することをお勧めします。

1
2
> このバグを修正する方法をいくつか提案して。
> それぞれのメリット・デメリットを説明して。

Claude Codeは、複数の修正アプローチを提案し、それぞれの影響を説明します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
⏺ 修正方法の提案:

1. nullチェックの追加
   - メリット: 最小限の変更で済む
   - デメリット: 根本的な解決ではなく、データが欠落する問題は残る

2. デフォルト値の設定
   - メリット: UIが壊れない、ユーザー体験を維持できる
   - デメリット: デフォルト値が適切かどうかの判断が必要

3. データ取得ロジックの修正
   - メリット: 根本的な解決
   - デメリット: 影響範囲が広く、テストが必要

推奨: オプション3が最も根本的な解決です。

段階的な修正の適用

大きな修正は、段階的に適用することでリスクを最小化できます。

1
2
> まず最小限の修正として、nullチェックを追加して。
> その後、動作確認ができたら、根本的な修正を行って。

Plan Modeでの安全な分析

本番環境に影響を与えかねない重要なバグの場合、Plan Modeを使用して安全に分析できます。

1
> /config

または、Shift+Tabを2回押してPlan Modeに切り替えます。Plan Modeでは、Claude Codeは読み取り専用で動作し、ファイルを変更しません。

1
2
> [Plan Mode] この本番環境で発生しているデータ不整合の原因を分析して。
> 修正計画を立てて。

分析が完了し、修正計画に納得したら、通常モードに戻って修正を適用します。

修正の承認フロー

Claude Codeはファイルを編集する前に必ず承認を求めます。このワークフローにより、意図しない変更を防ぎます。

1
2
3
4
5
6
7
8
9
⏺ 以下の変更を提案します:

src/components/UserList.tsx
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- return users.map(user => <UserCard key={user.id} user={user} />);
+ return users?.map(user => <UserCard key={user.id} user={user} />) ?? [];
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

この変更を適用しますか?

承認すると変更が適用され、拒否すると別のアプローチを検討できます。

動作確認と検証

修正を適用したら、必ず動作確認を行います。

テストの実行

1
> 修正が正しく動作するか、テストを実行して確認して

Claude Codeは、関連するテストを特定して実行し、結果を報告します。

手動での動作確認

自動テストでカバーできない部分は、手動での確認が必要です。

1
> この修正を手動で確認するための手順を教えて

Claude Codeは、修正箇所に応じた確認手順を提案します。

エッジケースの検証

修正が他のケースに影響を与えていないか確認します。

1
2
> この修正によって影響を受ける可能性のあるエッジケースを列挙して。
> それぞれのケースについて、テストまたは手動確認の方法を教えて。

再発防止のためのテスト追加

バグを修正したら、再発を防ぐためのテストを追加します。

回帰テストの作成

1
2
> このバグが再発しないように、回帰テストを作成して。
> 修正前の状態でテストが失敗し、修正後に成功することを確認して。

Claude Codeは、バグの再現条件をテストケースとして実装します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
⏺ 回帰テストを作成しました:

src/__tests__/UserList.test.tsx
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
describe('UserList', () => {
  it('should handle undefined users gracefully', () => {
    // このテストは修正前は失敗し、修正後は成功する
    render(<UserList users={undefined} />);
    expect(screen.queryAllByRole('article')).toHaveLength(0);
  });

  it('should handle empty array', () => {
    render(<UserList users={[]} />);
    expect(screen.queryAllByRole('article')).toHaveLength(0);
  });

  it('should render users when provided', () => {
    const users = [{ id: 1, name: 'Test User' }];
    render(<UserList users={users} />);
    expect(screen.getByText('Test User')).toBeInTheDocument();
  });
});
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

境界値テストの追加

バグの原因が境界条件にある場合、境界値テストを追加します。

1
2
> このバグに関連する境界値テストを追加して。
> 特に、null、undefined、空配列、大量データのケースをカバーして。

テストカバレッジの確認

修正箇所が十分にテストされているか確認します。

1
2
> 今回修正した箇所のテストカバレッジを確認して。
> カバレッジが不足している部分があれば、テストを追加して。

デバッグワークフローの効率化

繰り返し発生するデバッグ作業を効率化するテクニックを紹介します。

カスタムスラッシュコマンドの作成

頻繁に行うデバッグ作業をカスタムスラッシュコマンドとして定義できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mkdir -p .claude/commands
cat > .claude/commands/debug-error.md << 'EOF'
以下のエラーを分析して修正してください: $ARGUMENTS

手順:
1. エラーメッセージとスタックトレースを分析
2. 関連するコードを調査
3. 根本原因を特定
4. 修正を実装
5. テストを実行して動作確認
6. 回帰テストを追加
7. 変更内容をサマリーとして報告
EOF

使用方法:

1
> /debug-error TypeError: Cannot read properties of undefined

CLAUDE.mdへのデバッグガイドライン追加

プロジェクト固有のデバッグ手順をCLAUDE.mdに記載しておくと、Claude Codeが自動的に参照します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# デバッグガイドライン

## ログの確認
- アプリケーションログ: logs/app.log
- エラーログ: logs/error.log

## よくあるエラーと対処法
- "Connection refused": データベースが起動しているか確認
- "ENOENT": ファイルパスの存在を確認

## テスト実行
- 単体テスト: npm test
- 統合テスト: npm run test:integration
- E2Eテスト: npm run test:e2e

デバッグ専用サブエージェントの作成

プロジェクト固有のデバッグ手順を組み込んだカスタムサブエージェントを作成できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mkdir -p .claude/agents
cat > .claude/agents/project-debugger.md << 'EOF'
---
name: project-debugger
description: プロジェクト固有のデバッグ専門家。エラー発生時に自動的に使用される。
tools: Read, Edit, Bash, Grep, Glob
---

あなたはこのプロジェクトのデバッグ専門家です。

デバッグ手順:
1. エラーメッセージとスタックトレースを取得
2. logs/error.log を確認
3. 関連する最近のgit commitを調査
4. 根本原因を特定
5. 最小限の修正を実装
6. npm test で動作確認
7. 回帰テストを追加

報告形式:
- 根本原因の説明
- 診断を裏付ける証拠
- 具体的なコード修正
- テスト方法
- 再発防止の推奨事項
EOF

使用方法:

1
> project-debuggerサブエージェントを使って、このAPIエラーを調査して

複数のClaude Codeインスタンスによる並列デバッグ

複雑なバグの場合、複数のアプローチを並行して試すことが有効です。Git worktreesを使用して並列作業が可能です。

1
2
3
4
5
6
7
8
# worktreeを作成
git worktree add ../project-debug-approach-a -b debug/approach-a
git worktree add ../project-debug-approach-b -b debug/approach-b

# 各worktreeでClaude Codeを起動
cd ../project-debug-approach-a && claude
# 別のターミナルで
cd ../project-debug-approach-b && claude

一方のアプローチでnullチェックによる修正を試し、もう一方でデータ取得ロジックの修正を試すといった使い方ができます。

実践例: 本番環境で発生したバグの修正

ここまでのテクニックを組み合わせた実践例を紹介します。

シナリオ

本番環境で「ユーザー一覧ページが真っ白になる」というバグ報告が来ました。

Step 1: エラー情報の収集

1
2
> 本番環境でユーザー一覧ページが真っ白になるバグが報告されている。
> まずは関連するエラーログを確認して。

Step 2: 原因の分析

1
2
3
4
5
6
7
8
⏺ ログを確認しました:

logs/error.log:
[2026-01-08 10:23:45] TypeError: Cannot read properties of undefined (reading 'map')
    at UserList (src/components/UserList.tsx:15:23)

これは、usersが undefined の状態で map() を呼び出しているために発生しています。
APIからのレスポンスが空または失敗した場合に発生する可能性があります。

Step 3: 再現条件の特定

1
2
> このバグの再現条件を特定して。
> APIの失敗ケースをシミュレートする方法も教えて。

Step 4: 修正の実装

1
2
3
4
> 以下の方針で修正して:
> 1. usersのnullチェックを追加
> 2. API失敗時のエラーハンドリングを改善
> 3. ローディング状態とエラー状態のUIを追加

Step 5: テストの追加と確認

1
2
3
4
> 修正後、以下を実行して:
> 1. 関連するテストを実行
> 2. 新しいエッジケースの回帰テストを追加
> 3. カバレッジを確認

Step 6: コミットとPR作成

1
2
> 修正内容をコミットして、PRを作成して。
> PRの説明には、バグの原因と修正内容を記載して。

ベストプラクティス

Claude Codeでバグを効率的に修正するためのベストプラクティスをまとめます。

エラー情報は詳細に共有する

  • 完全なエラーメッセージとスタックトレースを共有する
  • 再現手順を明確にする
  • 環境情報(OS、バージョン等)を伝える

段階的に修正する

  • 一度に大きな変更を行わない
  • 各修正後にテストを実行する
  • 問題が解決しない場合は、変更を元に戻して別のアプローチを試す

根本原因を解決する

  • 症状だけでなく、根本原因を特定する
  • 同様のバグが他の箇所で発生していないか確認する
  • 再発防止のテストを必ず追加する

Plan Modeを活用する

  • 重要な修正の前にPlan Modeで分析する
  • 影響範囲を把握してから修正を適用する

コンテキストを維持する

  • 長いデバッグセッションでは/clearでコンテキストをリセットする
  • 関連する修正は同じセッションで行う
  • 複雑な調査には/resumeで前回のセッションを継続する

まとめ

Claude Codeは、バグ修正のあらゆるフェーズで強力な支援を提供します。エラーメッセージの共有から原因特定、修正の実装、テストの追加まで、一貫したワークフローで効率的にバグを解決できます。

特に重要なポイントは以下の通りです。

  • エラー情報を正確に共有することで、精度の高い分析が可能になる
  • debuggerサブエージェントや拡張思考モードを活用して、複雑なバグの根本原因を特定する
  • Plan Modeを使用して、安全に分析を行う
  • 回帰テストを追加して、再発を防止する
  • カスタムスラッシュコマンドやサブエージェントで、デバッグワークフローを効率化する

Claude Codeをデバッグパートナーとして活用することで、バグ修正にかかる時間を大幅に短縮し、コード品質の向上に集中できるようになります。

参考リンク