0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

Claude CodeやCursorなどのAIコーディングエージェントが注目を集める中、最近になってAI Agent領域でも活用され始めた技術があります。それがLSP(Language Server Protocol)です。

LSPは2016年にMicrosoft、Red Hat、Codenvyによって共同開発され、すでにVS Code、Neovim、Emacsなど多くのエディタで採用されている成熟したプロトコルです。普段何気なく使っている「定義へジャンプ」「参照を検索」「コード補完」といった機能は、実はこのLSPによって実現されています。

そして今、Claude Codeが2025年12月にLSPサポートを追加したことで、AI Agentがコードの構造を正確に把握できるようになりました。この記事では、LSPとは何か、そしてなぜAI Agentにとって重要なのかを、できるだけわかりやすく解説していきます。

LSPとは何か

問題の背景

LSPが登場する前、状況はかなり厄介でした。

たとえば、Pythonの言語解析ツールを作った場合、それをVS Code、Vim、Emacs、Sublime Textなど各エディタで動かすには、エディタごとに専用のプラグインを開発する必要がありました。言語が10種類、エディタが5種類あれば、理論上は50個のプラグインが必要になってしまいます。

この状況は開発者にとって非効率的で、各ツールの品質にもばらつきが生じていました。

LSPによる解決

LSPは、エディタ(クライアント)と言語解析ツール(サーバー)の間に標準化された通信プロトコルを導入しました。これにより、1つの言語サーバーを作れば、LSPに対応している全てのエディタで動作するようになったのです。

仕組みはシンプルで、JSON-RPC 2.0という軽量なプロトコルを使ってメッセージをやり取りします。エディタ側が「この変数の定義はどこ?」と尋ねれば、言語サーバーが「ファイルAの50行目です」と答える、というイメージです。

LSPが提供する主な機能

LSPは以下のような機能を標準化しています。実はこれらの機能、みなさん毎日使っているはずです。

機能 説明 エディタでの操作例
Diagnostics(診断) エラーや警告を表示 赤い波線、黄色い波線
Completion(補完) 入力候補を提示 console.と打つと.log()が出てくる
Goto Definition 定義箇所へジャンプ 関数名を右クリック→「定義へ移動」
Find References 参照箇所を検索 変数がどこで使われているか一覧表示
Hover ドキュメント表示 関数にカーソルを合わせると説明が出る
Rename 一括リネーム 変数名を変えると全ての箇所が変わる

これらの機能がどのエディタでも同じように使えるのは、LSPが共通仕様を定義しているからです。

なぜAI AgentにLSPが必要なのか

AI Agentが抱える「コード理解」の課題

ここからが本題です。AI Agentがコードを扱う際、実は大きな課題がありました。

従来のコーディングAIエージェントは、コードを「テキスト」として処理します。つまり、コードの構造や依存関係を正確に理解できていないことが多かったのです。たとえば、以下のようなリクエストを考えてみてください。

# utils.py
def calculate_total(items):
    return sum(item.price for item in items)

# main.py
from utils import calculate_total

total = calculate_total(cart_items)

calculate_total関数の定義を見せて」と聞いた時、AIがテキスト検索だけで対応すると:

  • 同じ名前の別の関数を見つけてしまう
  • import文を辿れず、どのファイルの関数か特定できない
  • 型情報や引数の詳細が不正確

また、テキスト検索ではファイル全体を読み込む必要があり、トークン消費が大きくなります。

しかし、LSPがあれば、エディタと同じように「定義へジャンプ」ができます。AIはコードの意味的な構造を正確に把握でき、必要な情報だけをピンポイントで取得できるため、トークン消費も大幅に削減できます。

Claude CodeのLSPサポート

Claude CodeがLSPサポートを追加したことで、この問題が大きく改善されました。

実際の動作を見てみると、以下のような変化が起きています:

Before(LSPなし)

User: "AuthServiceクラスの定義を教えて"
Claude: "テキスト検索で見つけた候補は3つあります...どれですか?"

After(LSPあり)

User: "AuthServiceクラスの定義を教えて"
Claude: "auth/services.pyの42行目で定義されています。
        このクラスはJWT認証を担当し、login()とverify_token()メソッドを持っています"

Claude Codeは、11の言語(Python、TypeScript、Rust、Go、Java、C++など)でLSPをサポートしており、言語ごとに適切なLanguage Server(例:PythonならPyright、Rustならrust-analyzer)を利用できます。

Claude CodeでLSPを有効にする

Claude CodeでLSP機能を使うには、プラグインをインストールする必要があります。手順は以下の通りです。

Step 1: プラグイン画面を開く

Claude Codeを起動し、/plugin コマンドを実行します。「Discover」タブでインストール可能なプラグインの一覧が表示されます。

Step 2: LSPプラグインを検索

検索ボックスに「lsp」と入力すると、言語別のLSPプラグインが表示されます。

対応言語には以下のようなものがあります(公式マーケットプレイス):

  • Python: pyright-lsp
  • TypeScript/JavaScript: vtsls-lsp
  • Rust: rust-analyzer-lsp
  • Go: gopls-lsp
  • Java: jdtls-lsp
  • C/C++: clangd-lsp

使いたい言語のプラグインをSpaceキーで選択し、iキーでインストールします。

Step 3: インストール確認

「Installed」タブに移動すると、インストール済みのプラグインが表示されます。

なお、プラグインとは別に、各言語のLanguage Serverバイナリ(pyrightrust-analyzerなど)がシステムにインストールされている必要があります。多くの場合、プラグインが自動でインストールを試みますが、失敗した場合は手動でインストールしてください。

# Pythonの場合
pip install pyright

# Rustの場合
rustup component add rust-analyzer

LSPが有効になると、Claude Codeは以下のような操作が可能になります。

なお、現時点ではLSPサポートはまだ実験的な段階です。プラグイン経由での起動が必要だったり、一部の言語で動作が不安定だったりする場合があります。急ぎでなければ、正式サポートを待つのも一つの選択肢です。

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

LSPによって、AI Agentは以下の能力を獲得します:

  1. 正確な参照解決

    • import文を辿って正しいファイルを特定
    • 変数のスコープを理解し、誤った候補を排除
  2. コンテキスト理解の深化

    • 型情報、関数シグネチャ、ドキュメントを取得
    • クラスの継承関係やインターフェース実装を把握
  3. リファクタリング支援

    • Rename機能で変数名を変更すると全ての参照箇所を自動更新
    • 定義と参照の関係を正確に把握し、安全な変更を提案

これらはすべて、LSPが提供する標準機能です。AI Agentがこれを活用することで、まるで熟練エンジニアのようにコードベースを理解できるようになります。

LSPの動作原理

もう少し技術的な話をします。LSPは内部的にどう動いているのでしょうか。

通信フロー

LSPの通信は、HTTP/2のような複雑なプロトコルではなく、標準入出力(stdin/stdout)またはTCP/IPソケットを使ったシンプルな構造です。メッセージフォーマットはJSON-RPC 2.0です。

Content-Length: 123\r\n
\r\n
{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{...}}

ヘッダーで長さを指定し、本文にJSONメッセージを載せる。これだけです。

典型的なやり取り

実際のシーケンスを見てみましょう。エディタ起動時から定義ジャンプまでの流れです:

各メッセージには以下のような情報が含まれます:

定義ジャンプリクエスト例

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "textDocument/definition",
  "params": {
    "textDocument": { "uri": "file:///path/to/main.py" },
    "position": { "line": 10, "character": 15 }
  }
}

レスポンス例

{
  "jsonrpc": "2.0",
  "id": 42,
  "result": {
    "uri": "file:///path/to/utils.py",
    "range": {
      "start": { "line": 42, "character": 0 },
      "end": { "line": 42, "character": 25 }
    }
  }
}

この形式であれば、どの言語、どのエディタでも共通して扱えます。

LSPとMCP(Model Context Protocol)の関係

AI Agent領域では、もう1つ注目すべきプロトコルがあります。それがMCP(Model Context Protocol)です。

MCPとは

MCPは、Anthropicが2024年11月に発表した、LLMが外部ツールやデータソースにアクセスするための標準プロトコルです。Claude Desktop、Cursor、VS CodeのAgent modeなどが対応しています。

興味深いのは、MCPの設計思想がLSPに強く影響を受けている点です。公式ドキュメントでも、MCPはLSPと比較されることが多く、「LLMにとってのLSP」と表現されることもあります。

LSPとMCPの違い

観点 LSP MCP
目的 エディタとコード解析ツールの連携 LLMと外部ツール/データソースの連携
対象 プログラミング言語のコード あらゆる種類のデータ・機能
提供機能 定義ジャンプ、補完、診断など データベースクエリ、API呼び出し、ファイル操作など
成熟度 2016年登場、成熟 2024年登場、発展途上

LSPがコードの理解に特化しているのに対し、MCPはより広範な外部連携をカバーします。実際、VS CodeのAgent modeでは、LSPとMCPの両方を活用する設計になっています。

VS Codeの公式ブログでは、MCPについて次のように述べられています:

"LSPの背後にあるアイデアが、新しいプロトコルであるMCPにインスピレーションを与えた。MCPはアプリケーションがLLMにコンテキストを提供する方法を標準化する"

つまり、LSPの成功モデルを、AI Agentの世界に応用したのがMCPと言えます。

AI Agentがもたらす開発体験の変化

LSPとMCPの組み合わせによって、開発体験はどう変わっていくのでしょうか。

従来のワークフロー

1. エディタでコードを書く
2. エラーが出る
3. ブラウザでドキュメントを検索
4. Stack Overflowで解決策を探す
5. 修正を試す
6. テストを実行

AI Agent時代のワークフロー

1. エディタでコードを書く
2. AI Agentに「このエラーの原因は?」と聞く
   → LSPで正確な型情報とスタックトレースを解析
   → MCPでドキュメントやログを取得
3. AI Agentが修正案を提示(コンテキストを完全に理解した上で)
4. 承認すれば自動適用、テストも実行

実際に使ってみると、この差は想像以上に大きいです。特に大規模なコードベースでは、AIが「このファイルのこの関数が、あのファイルのこのクラスに依存していて...」といった複雑な関係を瞬時に理解してくれるのは、かなり便利です。

まとめ

LSPは、一見すると地味な技術かもしれません。エディタの裏側でひっそりと動いていて、ユーザーが直接意識することは少ないでしょう。

しかし、AI Agent時代においては、この「縁の下の力持ち」が非常に重要な役割を果たしています。テキストとしてのコードではなく、構造と意味を持つコードとして理解する――この能力があるかないかで、AIの有用性は大きく変わります。

Claude Code、Cursor、そしてVS CodeのAgent mode。これらのツールが示しているのは、LSPのような成熟したプロトコルと、MCPのような新しいプロトコルを組み合わせることで、AIがより「賢く」「正確に」開発を支援できる未来です。

個人的には、LSPが登場してから約10年が経ち、今度はそれがAI分野で再評価されているのが面白いと感じています。良い設計は時代を超えて価値を持つ、という証明かもしれません。

もしこの記事を読んで、普段何気なく使っている「定義へジャンプ」機能の裏側に興味が湧いたなら、ぜひLSPの仕様書を覗いてみてください。

参考リンク

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?