記事

C# LSP vs JetBrains MCP トークン効率分析 — Claude Codeで最適なツール選択戦略

C# LSP vs JetBrains MCP トークン効率分析 — Claude Codeで最適なツール選択戦略
前提知識 — 先にこちらをご確認ください
TL;DR — 要点まとめ
  • LSPはMCPより平均3.1倍少ないトークンで、より高品質な情報を提供する
  • LSPとMCPの機能は重複ゼロ — 競争ではなく補完関係なので両方使うのが最適戦略
  • ハイブリッド戦略(LSP優先+MCP補助)でセッションあたり約60%以上のトークンを節約できる
Visitors

はじめに

Claude CodeでC#プロジェクトを扱う際に使えるツールは大きく2つある:csharp-ls(LSP)JetBrains Rider MCP。どちらもコード分析を支援するが、動作方式と効率は大きく異なる。

本レポートは同一のUnityプロジェクトファイルに対して同じ7つのタスクを両ツールで実行し、レスポンスサイズと情報品質を実測した結果だ。「同じ作業をする時、どちらのツールがより効率的か?」にデータで答える。

なぜ重要なのか?

Claude Codeのような AIコーディングツールはトークン(テキストの断片) を消費して動作する。同じ情報を得るのにトークンを少なく使うほど:

  • レスポンスが速くなり
  • コストが減り
  • 長い会話でもコンテキストを失わない(コンテキストウィンドウ節約)

1. エグゼクティブサマリー

指標
平均トークン削減率3.1倍(LSP対MCP比)
LSP情報品質A+(型情報 + APIドキュメントまで含む)
MCP固有機能3つ(エラー診断 / リファクタリング / コードフォーマット)
最適戦略両方使う(LSP優先、必要な時だけMCP)

2. テスト環境

項目
プロジェクトpsv-client (Unity 2022.3.31)
分析対象ファイルAssets/App/Editor/EditorStartup.cs(56行)
csharp-lspClaude Code内蔵
JetBrains MCPRider MCPプラグイン

3. テスト方法

同一ファイルに対して両ツールで同一の操作7つを実行し、レスポンスサイズを比較した。

トークン推定基準:英語/コード混在テキストで約4文字 = 1トークン

Test IDタスクLSP OperationMCP Operation
T1クラス情報照会(EditorStartup)hoverget_symbol_info
T2ファイル内テキスト検索(”SessionState”)Grepsearch_in_files_by_text
T3プロジェクト全体参照検索(”EditorStartup”)findReferencessearch_in_files_by_text
T4ファイル構造一覧documentSymbol該当機能なし
T5外部API情報照会(Canvas)hoverget_symbol_info
T6定義へ移動(Shader.Find)goToDefinitionget_symbol_info
T7エラー/警告診断該当機能なしget_file_problems

4. 計測結果

テストLSP (chars)MCP (chars)LSP効率倍率勝者備考
T1: クラス情報28022情報量圧倒LSPMCPは{"documentation":""}(空値)を返却
T2: ファイル内検索1804482.5倍LSP同一4件だがMCPはJSONオーバーヘッドが重い
T3: プロジェクト検索1105204.7倍LSPLSPは実参照2件のみ、MCPは文字列含む5件
T4: ファイル構造280--LSP専用MCPにこの機能自体がない
T5: 外部型情報12022情報量圧倒LSPMCPは再び空値、LSPはシグネチャ+説明
T6: 定義へ移動12522-引き分け両方とも外部ライブラリで失敗
T7: エラー診断-55-MCP専用LSPにこの機能自体がない

注意点: T1、T5でMCPレスポンスがより小さく見えるが、内容は{"documentation":""}(空値)。小さいから良いのではなく、有用な情報があるかが核心。


5. ビジュアル比較

5.1 レスポンスサイズ比較(文字数)

レスポンスサイズ比較

ファイル検索(T2)で2.5倍、プロジェクト検索(T3)で4.7倍の差がある。LSPがはるかに軽い。


5.2 トークン消費量比較

トークン消費量比較

同じ作業でもLSPは平均3.1倍少ないトークンを使う。会話が長くなるほどこの差が累積する。


5.3 情報品質スコア(レーダーチャート)

情報品質レーダー

2つのツールの強みが完全に異なる領域にある:

  • LSPが得意なこと:型情報、コード検索、ファイル構造把握
  • MCPが得意なこと:エラー診断、リファクタリング

重複部分がほぼないため互いに代替ではなく補完関係


5.4 テスト勝敗分布

テスト勝敗分布

7つのテストのうち:

  • LSP勝利:4件(57%)— 日常的なコード探索の大部分
  • LSP専用:1件(14%)— ファイル構造表示
  • MCP専用:1件(14%)— エラー診断
  • 引き分け:1件(14%)— 外部ライブラリの限界

5.5 機能サポート現況

機能サポートマトリックス

点線を基準に:

  • 上部7個 = LSPのみ可能(コード分析領域)
  • 下部8個 = MCPのみ可能(IDE機能領域)

2つのツールの機能が一つも重複しない — これがハイブリッドを使うべき理由。


5.6 セッション別トークン節約効果

トークン節約効果

実際の作業シナリオ別推定:

  • ライトセッション(照会10回、検索5回):63%節約
  • 通常セッション(照会30回、検索15回、リファクタリング3回):62%節約
  • ヘビーセッション(照会80回、検索40回、リファクタリング10回):61%節約

どの場合でも約60%以上のトークンを節約できる。


5.7 セマンティック検索 vs テキスト検索

セマンティックvsテキスト検索

"EditorStartup" を検索した時に最大の違いが現れる:

ツール結果数何を見つけたか
LSP(セマンティック検索)2件クラス宣言とコンストラクタ — 実際のコード参照のみ
MCP(テキスト検索)5件上記2件 + 文字列"EditorStartup.Reloading" + ログメッセージ等 偽結果3件含む

なぜ重要か? AIに偽の結果を見せると誤った判断を下す可能性がある。LSPは「コードとしての参照」だけを選び出し、MCPはテキストに書いてあれば全て取得する。


5.8 品質調整済み効率比較

品質調整済み効率

「トークン1個あたりどれだけ有用な情報を得たか?」を計算したグラフ。

  • T1(クラス情報)、T5(外部型)でMCPはレスポンスが小さいが内容が空で実質効率ゼロ
  • LSPは全テストで高い情報密度を維持

6. 情報品質詳細分析

トークン対比情報品質

テストLSP情報品質MCP情報品質実質比較
T1: クラス情報10点(シグネチャ + APIドキュメント)0点(空値)LSP圧倒的勝利
T2: ファイル検索9点(きれいなフォーマット)8点(同じデータ、ノイジーなフォーマット)LSP 2.5倍優位
T3: プロジェクト検索10点(実参照のみ)6点(偽結果含む)LSP 7.7倍優位
T5: 外部型10点(戻り値型 + 説明)0点(空値)LSP圧倒的勝利
T7: エラー診断該当なし10点(Riderインスペクション)MCP独占機能

キーインサイト:「コードを理解する検索」vs「文字を探す検索」

LSPのfindReferencesコードの意味を理解して検索する:

  • class EditorStartup 宣言 → 検出
  • new EditorStartup() コンストラクタ呼び出し → 検出
  • "EditorStartup.Reloading" 文字列内のテキスト → 無視(コード参照ではないため)

MCPのsearch_in_files_by_text文字そのまま検索する:

  • 上記3つ全て検出 + ログメッセージまで = ノイズ含む

7. 機能サポート比較表

機能csharp-lspJetBrains MCP説明
型/ドキュメント照会O(詳細)△(空値が多い)LSPはAPIドキュメントまで、MCPはUnityで空値が多い
定義へ移動OXMCPにない機能
参照検索(セマンティック)OXMCPはテキスト検索のみ
ファイル構造表示OXクラス/メソッドリストを一目で
呼び出し関係追跡OXこの関数を誰が呼び出すか / この関数が何を呼び出すか
実装クラス検索OXインターフェース → 実装クラス
プロジェクトシンボル検索OX名前でクラス/メソッドを検索
テキスト検索XOログ文字列、コメント等のテキスト検索
正規表現検索XOパターンベース検索
エラー/警告診断XORiderのコードインスペクション
リネームリファクタリングXOYAML、文字列まで安全に変更
コードフォーマットXORiderコードスタイル自動適用
ファイル読み書きXORead/Editツールでも可能
ディレクトリ探索XOフォルダ構造表示
実行構成XOIDEでビルド/テスト実行

LSP 7個 vs MCP 8個 — 重複機能0個。 競争ではなく協力関係。


8. 最適戦略:こう使えばいい

基本:csharp-lsp優先(トークン節約)

コードを調べたり分析する時は常にLSPから使う

コマンドいつ使うか
hover「この変数/クラスは何?」という時
findReferences「これをどこで使っている?」という時
documentSymbol「このファイル構造はどうなっている?」という時
goToDefinition「この関数の元コードを見よう」という時
goToImplementation「このインターフェースを実装したクラスは?」という時
callHierarchy「この関数を誰が呼び出している?」という時
workspaceSymbol「PlayerManagerというクラスはどこにある?」という時

これだけで平均3.1倍のトークン節約

補助:JetBrains MCP(固有機能が必要な時だけ)

コマンドいつ使うか
get_file_problemsコード修正後「エラーないか?」確認する時
rename_refactoring変数/クラス名を安全に変える時
reformat_fileコードスタイルを整理する時
search_in_files_by_textログメッセージやコメントで特定文字列を探す時
execute_terminal_commandビルドやテストを実行する時

これらの機能はMCPのみ対応 — LSPでは代替不可。


9. セッション別予想トークン節約量

作業強度MCPのみ使用ハイブリッド(LSP+MCP)節約率
ライトセッション(照会10回、検索5回)~1,750トークン~650トークン63%
通常セッション(照会30回、検索15回、リファクタリング3回)~5,800トークン~2,200トークン62%
ヘビーセッション(照会80回、検索40回、リファクタリング10回)~15,200トークン~5,900トークン61%

リファクタリングは常にMCP使用。節約分は照会と参照検索をLSPにルーティングした結果。


10. クイックリファレンスカード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌─────────────────────────────────────────────────────┐
│  タスク別最適ツール選択ガイド                           │
├─────────────────────────────────────────────────────┤
│                                                     │
│  csharp-lsp 使用(トークン節約)                      │
│  ├─ hover(型/ドキュメント照会)                       │
│  ├─ findReferences(セマンティック参照検索)             │
│  ├─ documentSymbol(ファイル構造把握)                  │
│  ├─ goToDefinition / goToImplementation              │
│  └─ callHierarchy(呼び出し関係)                      │
│                                                     │
│  JetBrains MCP 使用(固有機能)                       │
│  ├─ get_file_problems(エラー/警告診断)                │
│  ├─ rename_refactoring(安全なリネーム)                │
│  ├─ reformat_file(コードフォーマット)                  │
│  └─ テキストベース検索(ログ文字列等)                    │
│                                                     │
│  どちらでもOK                                        │
│  ├─ ファイル読み取り(Read ≈ get_file_text_by_path)    │
│  └─ ファイル修正(Edit ≈ replace_text_in_file)        │
│                                                     │
└─────────────────────────────────────────────────────┘

おわりに

csharp-lsとJetBrains MCPは競争関係ではなく完璧な補完関係だ。機能が一つも重複しないため、片方だけ使うと半分の能力しか活用できない。

LSPをデフォルトで使い、MCPは必要な時だけ補助的に使用すれば、トークン60%以上を節約しながら全機能を活用できる。csharp-lsのインストールがまだならmacOSでのC# LSPセットアップガイドを先に参照しよう。

この記事は著者の CC BY 4.0 ライセンスの下で提供されています。