0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIエージェントがVS Codeのデバッガを操作できる拡張機能「VS Code Debug Bridge」

0
Posted at

はじめに

AIエージェント(Claude、Cursor、Codex CLIなど)にコードを書かせる場面が増えてきました。しかし、デバッグはまだ人間が手動で行うことがほとんどです。

「ブレークポイントを貼って、変数を確認して、ステップ実行して……」という作業をAIにもやらせたい。そう思って VS Code Debug Bridge を作りました。

この拡張機能は、VS Codeのデバッガを MCP (Model Context Protocol) サーバーとして公開し、AIエージェントがHTTP経由でデバッグセッションを制御できるようにするものです。

何ができるのか

一言でいうと、AIエージェントがVS Codeのデバッガをプログラム的に操作できるようになります。

具体的には:

  • デバッグセッションの開始・停止
  • ブレークポイントの設定
  • ステップ実行(ステップオーバー、ステップイン、ステップアウト)
  • コールスタックの取得
  • 変数の参照
  • 式の評価(evaluate)

これらすべてが、AIエージェントからのMCPツール呼び出しで実行できます。

アーキテクチャ

AIエージェント (Claude, Cursor, Codex CLI など)
    │
    │  HTTP (Streamable HTTP MCP)
    ▼
VS Code Debug Bridge (この拡張機能)
    │
    │  VS Code Debug API → DAP (Debug Adapter Protocol)
    ▼
デバッグアダプタ (Python / Node.js / Go / Rust / ...)
    │
    ▼
デバッグ対象プロセス

ポイントは以下の3つです。

  1. MCPプロトコルを使っているので、MCP対応のAIツールならどれでも接続できる
  2. DAPを中継しているので、VS Codeで使えるデバッガなら何でも対応(Python, JavaScript, Go, Rust, C++, ...)
  3. VS Code拡張機能として動くので、別プロセスのCLIツールを起動する必要がない

セットアップ

1. 拡張機能のインストール

マケプレに公開するのは面倒なのでやっていません。クローンしてvsixをビルドしてください。

2. AIツール側のMCP設定

プロジェクトの .mcp.json に以下を追加します。

{
  "mcpServers": {
    "vscode-debug": {
      "type": "http",
      "url": "http://127.0.0.1:6589/mcp"
    }
  }
}

VS Codeを開くと拡張機能が自動で起動し、MCPサーバーが http://127.0.0.1:6589/mcp で待ち受けます。

提供するMCPツール

拡張機能は3つのMCPツールを公開します。

ツール 説明
start_debug デバッグセッションを開始する。launch.json の設定名、またはインラインの設定オブジェクトを指定
execute_command アクティブなデバッグセッションにDAPリクエストを送信する
stop_debug デバッグセッションを停止する

execute_command が中核で、DAP (Debug Adapter Protocol) のあらゆるコマンドをそのまま実行し、生のJSONレスポンスを返します。近頃のエージェントならDAPコマンドを余裕で扱える、という前提で、コマンドを中継するだけのシンプルな思想にしています。

よく使うDAPコマンド

コマンド 説明 引数
threads スレッド一覧を取得 -
stackTrace コールスタックを取得 threadId
scopes スコープ一覧(Local, Globalなど)を取得 frameId
variables 変数の値を取得 variablesReference
evaluate 式を評価 expression, frameId
next ステップオーバー threadId
stepIn ステップイン threadId
stepOut ステップアウト threadId
continue 実行を再開 threadId
pause 実行を一時停止 threadId
setBreakpoints ブレークポイントを設定 source, breakpoints

実際の使い方:AIエージェントによるデバッグフロー

以下は、AIエージェントがPythonファイルをデバッグする典型的な流れです。

ステップ1:デバッグセッションを開始

start_debug({ configName: "Python: main.py" })
// → "Debug session started."

launch.json に定義済みの設定名を指定するか、インライン設定を渡します。

// インライン設定の例
start_debug({
  config: {
    type: "debugpy",
    request: "launch",
    program: "${workspaceFolder}/main.py",
    stopOnEntry: true
  }
})

ステップ2:スレッドとスタックを確認

execute_command({ command: "threads" })
// → { threads: [{ id: 1, name: "MainThread" }] }

execute_command({ command: "stackTrace", args: { threadId: 1 } })
// → { stackFrames: [{ id: 0, name: "main", source: {...}, line: 42, ... }] }

ステップ3:変数を調べる

execute_command({ command: "scopes", args: { frameId: 0 } })
// → { scopes: [{ name: "Locals", variablesReference: 1, ... }] }

execute_command({ command: "variables", args: { variablesReference: 1 } })
// → { variables: [{ name: "fib", value: "[0, 1, 1, 2, 3, ...]", ... }] }

ステップ4:式を評価する

execute_command({
  command: "evaluate",
  args: { expression: "len(fib)", frameId: 0 }
})
// → { result: "10", type: "int" }

ステップ5:ステップ実行

execute_command({ command: "next", args: { threadId: 1 } })      // ステップオーバー
execute_command({ command: "stepIn", args: { threadId: 1 } })     // ステップイン
execute_command({ command: "continue", args: { threadId: 1 } })   // 続行

ステップ6:デバッグ終了

stop_debug()
// → "Debug session stopped."

ユースケース

1. AIエージェントによる自律的バグ修正

AIがテスト失敗を検知 → ブレークポイントを設定 → 変数の状態を確認 → 原因を特定 → 修正コードを生成、という流れを自動化できます。

2. 対話的デバッグアシスタント

「この変数の中身を見て」「次の行まで進めて」といった自然言語の指示で、AIがデバッガを操作してくれます。

3. デバッグログの自動収集

特定の条件でブレークポイントを設定し、変数の値を網羅的に収集して、問題の再現条件を自動で絞り込むといった使い方も考えられます。

おわりに

VS Code Debug Bridgeは、AIエージェントとデバッガの間のギャップを埋める拡張機能です。

AIにコードを書かせるだけでなく、デバッグまで任せられるようになれば、開発の自動化がもう一段階進むと考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?