C# LSP vs JetBrains MCP トークン効率分析 — Claude Codeで最適なツール選択戦略
- ゲーム開発者のAI活用術:2,165メッセージの記録から見る実戦データ(47日間の記録)
- Claude Opus 4.5 → 4.6 移行期 - ゲーム開発者が体感した性能、トークン、ワークフローの変化
- AGENTS.mdは本当に役に立つのか? — コーディングエージェントのコンテキストファイルの有効性を検証した論文分析
- Claudeメモリ無料開放と/simplify、/batch — そしてCLAUDE.mdの隠れたコスト
- WindowsでClaude Codeをインストールする完全ガイド — 実践トラブルシューティング付き
- ゲームプランナーのためのClaude Code完全活用ガイド — 仕様書からバランシングまで
- macOSでClaude Code C# LSPを完全セットアップするガイド — csharp-lsのインストールからトラブルシューティングまで
- C# LSP vs JetBrains MCP トークン効率分析 — Claude Codeで最適なツール選択戦略
- LSPはMCPより平均3.1倍少ないトークンで、より高品質な情報を提供する
- LSPとMCPの機能は重複ゼロ — 競争ではなく補完関係なので両方使うのが最適戦略
- ハイブリッド戦略(LSP優先+MCP補助)でセッションあたり約60%以上のトークンを節約できる
はじめに
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-lsp | Claude Code内蔵 |
| JetBrains MCP | Rider MCPプラグイン |
3. テスト方法
同一ファイルに対して両ツールで同一の操作7つを実行し、レスポンスサイズを比較した。
トークン推定基準:英語/コード混在テキストで約4文字 = 1トークン
| Test ID | タスク | LSP Operation | MCP Operation |
|---|---|---|---|
| T1 | クラス情報照会(EditorStartup) | hover | get_symbol_info |
| T2 | ファイル内テキスト検索(”SessionState”) | Grep | search_in_files_by_text |
| T3 | プロジェクト全体参照検索(”EditorStartup”) | findReferences | search_in_files_by_text |
| T4 | ファイル構造一覧 | documentSymbol | 該当機能なし |
| T5 | 外部API情報照会(Canvas) | hover | get_symbol_info |
| T6 | 定義へ移動(Shader.Find) | goToDefinition | get_symbol_info |
| T7 | エラー/警告診断 | 該当機能なし | get_file_problems |
4. 計測結果
| テスト | LSP (chars) | MCP (chars) | LSP効率倍率 | 勝者 | 備考 |
|---|---|---|---|---|---|
| T1: クラス情報 | 280 | 22 | 情報量圧倒 | LSP | MCPは{"documentation":""}(空値)を返却 |
| T2: ファイル内検索 | 180 | 448 | 2.5倍 | LSP | 同一4件だがMCPはJSONオーバーヘッドが重い |
| T3: プロジェクト検索 | 110 | 520 | 4.7倍 | LSP | LSPは実参照2件のみ、MCPは文字列含む5件 |
| T4: ファイル構造 | 280 | - | - | LSP専用 | MCPにこの機能自体がない |
| T5: 外部型情報 | 120 | 22 | 情報量圧倒 | LSP | MCPは再び空値、LSPはシグネチャ+説明 |
| T6: 定義へ移動 | 125 | 22 | - | 引き分け | 両方とも外部ライブラリで失敗 |
| 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 テキスト検索
"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-lsp | JetBrains MCP | 説明 |
|---|---|---|---|
| 型/ドキュメント照会 | O(詳細) | △(空値が多い) | LSPはAPIドキュメントまで、MCPはUnityで空値が多い |
| 定義へ移動 | O | X | MCPにない機能 |
| 参照検索(セマンティック) | O | X | MCPはテキスト検索のみ |
| ファイル構造表示 | O | X | クラス/メソッドリストを一目で |
| 呼び出し関係追跡 | O | X | この関数を誰が呼び出すか / この関数が何を呼び出すか |
| 実装クラス検索 | O | X | インターフェース → 実装クラス |
| プロジェクトシンボル検索 | O | X | 名前でクラス/メソッドを検索 |
| テキスト検索 | X | O | ログ文字列、コメント等のテキスト検索 |
| 正規表現検索 | X | O | パターンベース検索 |
| エラー/警告診断 | X | O | Riderのコードインスペクション |
| リネームリファクタリング | X | O | YAML、文字列まで安全に変更 |
| コードフォーマット | X | O | Riderコードスタイル自動適用 |
| ファイル読み書き | X | O | Read/Editツールでも可能 |
| ディレクトリ探索 | X | O | フォルダ構造表示 |
| 実行構成 | X | O | IDEでビルド/テスト実行 |
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セットアップガイドを先に参照しよう。








