/note/tech

「LSP」によるAI Agentのトークン削減とコード理解精度向上

要約:

■ 1. LSP(Language Server Protocol)の概要

  • LSPは2016年にMicrosoft、Red Hat、Codenvyが共同開発したプロトコル
  • VS Code、Neovim、Emacsなど多くのエディタで採用されている成熟した技術
  • 「定義へジャンプ」「参照を検索」「コード補完」などのエディタ機能を実現する基盤
  • Claude Codeは2025年12月にLSPサポートを追加

■ 2. LSP登場の背景と解決策

  • LSP登場前の課題:
    • 言語解析ツールをエディタごとに専用プラグインとして開発する必要があった
    • 言語10種類×エディタ5種類で理論上50個のプラグインが必要になる非効率な状態だった
    • ツール間で品質にばらつきが生じていた
  • LSPによる解決:
    • エディタ(クライアント)と言語解析ツール(サーバー)の間に標準化された通信プロトコルを導入
    • 1つの言語サーバーをLSP対応の全エディタで動作させることが可能になった
    • JSON-RPC 2.0を使ったシンプルなメッセージ通信で実現

■ 3. LSPが提供する主な機能

  • Diagnostics(診断): エラーや警告を表示(赤い波線、黄色い波線)
  • Completion(補完): 入力候補を提示
  • Goto Definition: 定義箇所へのジャンプ
  • Find References: 参照箇所の検索
  • Hover: カーソル位置のドキュメント表示
  • Rename: 一括リネーム機能

■ 4. AI AgentにおけるLSPの必要性

  • 従来のAIエージェントの課題:
    • コードを「テキスト」として処理するため、構造や依存関係を正確に理解できない
    • テキスト検索では同名の別関数を誤って参照するリスクがある
    • import文を辿れず、対象ファイルの特定が困難
    • ファイル全体の読み込みが必要でトークン消費が大きい
  • LSPによる改善:
    • エディタと同等の「定義へジャンプ」機能をAIが利用可能になる
    • コードの意味的な構造を正確に把握できる
    • 必要な情報のみをピンポイントで取得しトークン消費を削減できる

■ 5. Claude CodeのLSPサポート

  • Python、TypeScript、Rust、Go、Java、C++など11の言語でLSPをサポート
  • 言語ごとに適切なLanguage Serverを利用(Python: Pyright、Rust: rust-analyzer等)
  • LSPサポートにより、クラス定義の場所やメソッド構成を正確に回答可能になった
  • 現時点ではLSPサポートは実験的段階であり、一部言語で動作が不安定な場合がある

■ 6. Claude CodeでのLSP有効化手順

  • Step 1: Claude Codeを起動し、/pluginコマンドを実行してプラグイン画面を開く
  • Step 2: 検索ボックスに「lsp」と入力し、対応言語のLSPプラグインを選択してインストール
    • Python: pyright-lsp
    • TypeScript/JavaScript: vtsls-lsp
    • Rust: rust-analyzer-lsp
    • Go: gopls-lsp
    • Java: jdtls-lsp
    • C/C++: clangd-lsp
  • Step 3: 各言語のLanguage Serverバイナリ(pyright、rust-analyzerなど)のシステムへのインストールが別途必要
    • プラグインが自動インストールを試みるが、失敗時は手動インストールが必要

■ 7. LSPがAI Agentにもたらす3つの価値

  • 正確な参照解決:
    • import文を辿って正しいファイルを特定
    • 変数のスコープを理解し、誤った候補を排除
  • コンテキスト理解の深化:
    • 型情報、関数シグネチャ、ドキュメントを取得
    • クラスの継承関係やインターフェース実装を把握
  • リファクタリング支援:
    • Rename機能で変数名変更時に全参照箇所を自動更新
    • 定義と参照の関係を正確に把握した安全な変更提案

■ 8. LSPの動作原理

  • 通信方式: 標準入出力(stdin/stdout)またはTCP/IPソケットを使用
  • メッセージフォーマット: JSON-RPC 2.0
  • 通信構造: ヘッダーで長さを指定し、本文にJSONメッセージを格納するシンプルな形式
  • 定義ジャンプのリクエスト例:
    • ファイルURIとカーソル位置(行番号・文字位置)をパラメータとして送信
    • レスポンスとして対象ファイルのURIと範囲(開始・終了位置)を返す

■ 9. LSPとMCP(Model Context Protocol)の関係

  • MCPはAnthropicが2024年11月に発表したLLM向け外部ツール連携の標準プロトコル
  • MCPの設計思想はLSPに強く影響を受けており、「LLMにとってのLSP」と表現されることもある
  • LSPとMCPの違い:
    • LSP: エディタとコード解析ツールの連携、プログラミング言語のコードが対象、2016年登場で成熟
    • MCP: LLMと外部ツール・データソースの連携、あらゆるデータ・機能が対象、2024年登場で発展途上
  • VS CodeのAgent modeではLSPとMCPの両方を活用する設計になっている

■ 10. AI Agent時代の開発ワークフローの変化

  • 従来のワークフロー:
    • コードを書く→エラーが出る→ブラウザでドキュメントを検索→Stack Overflowで解決策を探す→修正→テスト実行
  • AI Agent時代のワークフロー:
    • コードを書く→AI Agentに質問→LSPで正確な型情報とスタックトレースを解析、MCPでドキュメントやログを取得→修正案の提示→承認後に自動適用とテスト実行
  • 大規模コードベースでは、ファイル間の複雑な依存関係をAIが瞬時に理解できる点が特に有用