見出し画像

Claude Code LSP完全ガイド——900倍速いコード検索を、たった3ステップで手に入れる

はじめに——あなたのClaude Codeは、まだ目隠しをしたまま動いている

Claude Codeを使っていて、こんな経験はありませんか。

「この関数、どこで定義されているんだろう」とAIに聞いたところ、数十秒かかってgrepで検索した挙げ句、関係のないファイルまで引っかかってきた。あるいは「このメソッドを呼び出している箇所をすべて教えて」と頼んだら、ファイルをひとつひとつ開いて調べ始めた——。

これは、Claude CodeのLSP機能が有効化されていない状態です。

LSP(Language Server Protocol)とは、IDEが「コードを理解する」ために使っているしくみです。VS CodeやIntelliJが「定義へ移動」「参照箇所を検索」「型エラーをリアルタイム表示」できるのは、このLSPがあるからです。

Claude CodeにLSPを組み込むと、AIも同じ能力を手に入れます。「`processPayment`はどこで定義されている?」という質問に、50ミリ秒で正確なファイルとその行番号を返してくれるようになります。LSPなしのgrep検索では同じことに30〜60秒かかっていました。約900倍の高速化です。

しかも設定は2分もあれば完了します。それなのに、あまりにも知られていません。

本記事では、Claude Code LSPとは何か、なぜ重要なのか、どうやって設定するのかを、IT中級者以上の方に向けて詳しく解説します。


LSPとは何か——IDEの「頭脳」をAIに移植する

Language Server Protocolの基本

Language Server Protocolは、Microsoftが2016年に策定したオープンな仕様です。「コードの静的解析機能」と「エディタ」を分離し、どんなエディタからでも同じ言語サーバーを利用できるようにする設計思想で作られています。

例えばPythonには`pyright`、Go言語には`gopls`、TypeScriptには`vtsls`(または`tsserver`)という専用の言語サーバーがあります。これらはコードを解析して、以下の情報を提供します。

  • 定義箇所の特定(Go to Definition):関数やクラスがどのファイルの何行目で定義されているか

  • 参照箇所の検索(Find References):ある関数を呼び出しているコードを一覧表示

  • ホバー情報(Hover):変数や関数の型情報・ドキュメントコメントを表示

  • リアルタイム診断(Diagnostics):型エラー、未定義変数、インポートミスをリアルタイムで検出

  • 補完候補の提供(Completion):文脈に応じたコード補完

VS CodeがPythonのコードを書いているときに赤い波線でエラーを示したり、関数名の上にカーソルを置くとドキュメントが表示されたりするのは、すべてこのしくみによるものです。

Claude CodeがLSPを使えるとどう変わるか

LSPなしの状態では、Claude Codeはコードをテキストとして扱います。関数の定義を探すときはgrepで文字列を検索し、参照箇所を調べるときはファイルを順番に読んでいきます。これは確かに機能しますが、大規模なコードベースでは途方もない時間がかかります。

LSPを有効化すると、Claude Codeは言語サーバーに直接問い合わせることができるようになります。

「`processOrder`はどこで定義されていますか?」
→ `goToDefinition`を呼び出す → `src/orders/processor.go:42`を即返答(約50ms)

「`validateUser`を呼び出している箇所をすべて教えてください」
→ `findReferences`を呼び出す → 全呼び出し箇所をリスト表示(約50ms)

また、ファイルを編集するたびに言語サーバーからリアルタイムで診断情報が届きます。型エラーがあれば、Claude Codeは同じターン内でそれを認識して修正まで行います。これは「編集してエラーに気づく」という従来の流れを根本から変えるものです。

なぜこの機能はデフォルトで無効なのか

Claude CodeのLSP対応は2025年12月、バージョン2.0.74で導入されました。まだ比較的新しい機能であり、当初は公式ドキュメントにも目立った記述がなく、GitHubのissueで発見されたという経緯があります。

現在はプラグインマーケットプレイスを通じて正式にサポートされていますが、有効化するには明示的な設定が必要です。何もしなければ、LSPは動きません。


LSPを有効化する手順——2分で完了するセットアップ

前提条件

  • Claude Codeがインストール済みであること(バージョン2.0.74以上)

  • 利用したい言語の言語サーバーがインストール済みであること(後述)

  • Node.js(npm)が使える環境であること

ステップ1:LSPツールを有効化する

Claude CodeのLSP機能は、環境変数で有効化します。

一時的に有効化する場合(試し使いに便利):

ENABLE_LSP_TOOL=1 claude

恒久的に有効化する場合(推奨):

シェルの設定ファイル(`~/.bashrc`、`~/.zshrc`など)に以下を追記します。

export ENABLE_LSP_TOOL=1

追記後、設定を反映させます。

source ~/.zshrc  # または source ~/.bashrc

ステップ2:プラグインマーケットプレイスを追加する

Claude Codeはプラグインをマーケットプレイスから取得します。LSP用のプラグインを提供しているコミュニティマーケットプレイスを追加します。

/marketplace add claude-code-lsps

このコマンドをClaude Codeのチャット画面で実行することで、`claude-code-lsps`というコミュニティマーケットプレイスが登録されます。

ステップ3:言語プラグインをインストールする

使いたい言語に応じてプラグインをインストールします。

Python(Pyright)

/plugin install pyright@claude-code-lsps

TypeScript / JavaScript(vtsls)

/plugin install vtsls@claude-code-lsps

Go(gopls)

/plugin install gopls@claude-code-lsps

Rust

/plugin install rust-analyzer@claude-code-lsps

Java(jdtls)

/plugin install jdtls@claude-code-lsps

複数の言語プラグインを同時にインストールしても問題ありません。Claude Codeが起動すると、有効化されているすべての言語サーバーが同時に立ち上がります。

ステップ4:動作確認

Claude Codeを起動し直して、以下のように話しかけてみてください。

このプロジェクトで `processOrder` 関数はどこで定義されていますか?

数秒以内に正確なファイルパスと行番号が返ってくれば、LSPが正しく動作しています。


内部動作を理解する——起動時に何が起きているのか

LSPを有効化すると、Claude Codeの内部動作がどう変わるのかを理解しておくと、トラブル対応や最適化に役立ちます。

起動時の言語サーバーの初期化

Claude Codeが起動すると、有効化されている言語サーバーがすべて同時に立ち上がります。特定のファイルを開くまで待機するのではなく、起動と同時に初期化が始まります。

2026年2月の実際のデバッグログによると、4つの言語サーバーを有効化した場合の初期化時間は以下の通りです。

  • gopls(Go):約0.5秒

  • vtsls(TypeScript):約0.5秒

  • pyright(Python):約0.6秒

  • jdtls(Java):約8.6秒

Javaの言語サーバー(jdtls)はJVM上で動作するため、起動に時間がかかります。しかしいったん起動してしまえば、その後のLSP操作はすべて約50msで応答します。

LSPリクエストの流れ

Claude Codeが「定義へ移動」を行う際の処理は以下のようになります。

  1. ユーザーまたはClaudeが関数定義の場所を知りたいと判断する

  2. Claude Codeが言語サーバーに`textDocument/definition`リクエストを送信する

  3. 言語サーバーがコードを解析して定義箇所を特定し、ファイルパスと行番号を返す

  4. Claude Codeがその情報を利用して回答する

この一連の処理が50ミリ秒前後で完了します。従来のgrep検索では、大規模なコードベースで30〜60秒かかることもありました。

診断情報のプッシュ配信

LSPの診断機能(Diagnostics)は、ファイルを編集するたびに言語サーバーからClaudeへ自動で情報が届く「プッシュ型」の仕組みになっています。

Claudeがファイルを編集すると、言語サーバーが即座に型チェックやインポートの解析を行い、エラーや警告を通知します。Claudeはこの診断情報を受け取り、エラーがあればそのターン内で修正を試みます。

これにより、以下のサイクルが自動化されます。

  1. Claudeがコードを変更する

  2. 言語サーバーが型エラーを検出して通知する

  3. Claudeがエラーを認識して修正する

  4. 再び診断を受け取り、エラーがなければ完了

人間が「変更→ビルド→エラー確認→修正」を繰り返していた作業が、Claudeとの1回のやり取りの中で完結するイメージです。


よくある失敗パターンと回避策

LSPを導入する際、いくつかの落とし穴があります。実際に詰まりやすいポイントをあらかじめ把握しておきましょう。

失敗パターン1:言語サーバー本体がインストールされていない

Claude CodeのLSPプラグインは、あくまでも「橋渡し役」です。実際にコードを解析するのは各言語の言語サーバー本体であり、それは別途インストールが必要です。

例えばGoの`gopls`プラグインをインストールしても、システムに`gopls`コマンド本体がなければ機能しません。

Goの場合

go install golang.org/x/tools/gopls@latest

Pythonの場合(pyrightはnpmパッケージ):

npm install -g pyright

TypeScriptの場合

npm install -g typescript typescript-language-server

プラグインのインストールと合わせて、言語サーバー本体もインストールしておきましょう。

失敗パターン2:環境変数が反映されていない

`export ENABLE_LSP_TOOL=1`を`.zshrc`や`.bashrc`に追記したにもかかわらず、LSPが動かないケースがあります。多くの場合、設定ファイルを再読み込みしていないことが原因です。

source ~/.zshrc

あるいは、ターミナルを完全に再起動してください。また、VS Codeのターミナルからシェルを起動している場合は、VS Code自体を再起動する必要があることもあります。

失敗パターン3:Javaサーバーの起動待ちで諦める

jdtls(Java)は起動に最大10秒程度かかります。起動直後にJavaのコードについて質問すると、LSPが応答しないように見えることがあります。

これはバグではなく仕様です。Claude Codeを起動した後、少し待ってから質問するか、まず軽い質問をして言語サーバーの初期化を待ちましょう。

失敗パターン4:プロジェクトルートが認識されていない

言語サーバーは、プロジェクトルート(`go.mod`、`package.json`、`pyproject.toml`などが置かれたディレクトリ)を基準にコードを解析します。Claude Codeを誤ったディレクトリで起動すると、言語サーバーがプロジェクト構造を正しく把握できず、定義検索などが失敗します。

必ずプロジェクトのルートディレクトリで`claude`コマンドを実行するようにしてください。


対応言語と言語サーバー一覧

現在Claude Code LSPが対応している言語と、推奨される言語サーバーをまとめます。

主要言語(安定版)

Python は`pyright`を推奨します。Microsoftが開発した高速な型チェッカーで、大規模プロジェクトでも安定して動作します。

TypeScript / JavaScript は`vtsls`(VS Code TypeScript Language Server)が推奨です。VS Codeと同じ実装が使われているため、最も信頼性が高いと言えます。

Go は`gopls`が公式の言語サーバーです。Googleが開発しており、Goのプロジェクトでは事実上の標準です。

Rust は`rust-analyzer`を使用します。Rustの型システムは複雑ですが、`rust-analyzer`はその複雑さに対応した精緻な解析を行います。

その他の対応言語

Java(jdtls)、C/C++(clangd)、C#(OmniSharp)、PHP、Kotlin、Ruby(Solargraph)、PowerShell、HTML/CSS なども対応しています。コミュニティによって対応言語は継続的に拡大されています。


実践シナリオ——LSP有効化前後の比較

シナリオ1:大規模リファクタリング

LSPなしの場合:「`getUserData`をすべて`fetchUserProfile`に変更したい」という依頼に対し、Claude Codeはgrepで文字列を検索し、ファイルを1つずつ開いて確認します。数十のファイルが存在する場合、この作業だけで数分かかることがあります。変更後の型エラーに気づくには、さらに時間が必要です。

LSPありの場合:`findReferences`で即座に全参照箇所を取得し、一括置換します。変更直後に言語サーバーから診断情報が届き、型エラーがあれば同じターンで修正します。全体の作業時間が大幅に短縮されます。

シナリオ2:未知のコードベースの調査

LSPなしの場合:「この`handleWebhook`関数は何をしているの?」という質問への回答は、関連するファイルをgrepで探しながら徐々に理解していく形になります。関数が複数のファイルにまたがって依存関係を持っている場合、全体像の把握に時間がかかります。

LSPありの場合:`goToDefinition`と`findReferences`を組み合わせることで、呼び出しグラフをすばやく構築できます。「この関数はどこから呼ばれていて、内部でどの関数を呼んでいるか」を数秒で把握し、的確な説明が可能になります。

シナリオ3:バグ調査

LSPなしの場合:型エラーや変数の未定義はClaude Code自身が気づきにくく、コードを書いた後でユーザーが手動でビルドして初めてエラーが発覚するケースがあります。

LSPありの場合:コードを編集した瞬間に診断情報が届くため、型エラーが発生するコードをClaudeが「提出」することがなくなります。エラーの発見と修正が同一のAIターン内で完結します。


cclspを使った代替セットアップ方法

公式マーケットプレイスを経由しない方法として、`cclsp`というOSSツールを使う選択肢もあります。

`cclsp`はMCP(Model Context Protocol)サーバーとして動作し、LSPの機能をClaude Codeに橋渡しします。対話式のセットアップウィザードが用意されており、言語の選択から設定ファイルの生成まで自動で行ってくれます。

npx cclsp setup

セットアップ後、`~/.claude/settings.json`(またはプロジェクトローカルの`.claude/settings.json`)にMCPサーバーの設定が追記されます。

この方法は、企業のネットワーク制限などでプラグインマーケットプレイスにアクセスできない環境や、より細かい設定をしたい場合に適しています。

また、ローカルに`marketplace.json`を作成することで、オフライン環境でもLSPサーバーの設定を管理することができます。


Q&A——導入前によくある疑問

Q. LSPを有効化するとClaude Codeが重くなりませんか?

言語サーバーはバックグラウンドで動作するため、Claude Code自体のレスポンスへの影響はほとんどありません。ただし、Java(jdtls)のようにJVMで動く言語サーバーはメモリを消費します。使わない言語のプラグインはインストールしないことをお勧めします。

Q. すべての言語サーバーを同時に有効化しても問題ありませんか?

技術的には可能です。ただし、起動時にすべての言語サーバーが同時に初期化されるため、メモリ使用量が増加します。実際に使う言語のみに絞るのが現実的です。

Q. LSPなしでもClaude Codeは十分使えますか?

小規模なプロジェクトや単一ファイルの作業であれば、LSPなしでも問題ありません。LSPの恩恵が最も大きいのは、複数ファイルにまたがる大規模なコードベースや、型安全性が重要なプロジェクトです。

Q. プロジェクトごとに設定を切り替えることはできますか?

はい、`.claude/settings.json`をプロジェクトのルートディレクトリに配置することで、プロジェクトごとに異なるLSP設定を持つことができます。特定のプロジェクトでだけ有効化したい場合に活用してください。


Claude CodeとLSPが変える、AIペアプログラミングの未来

LSPの有効化は、単なる「検索の高速化」ではありません。AIがコードを「読む」のではなく「理解する」ための変化です。

これまでのAIコーディング支援は、テキストの塊としてコードを扱うことしかできませんでした。LSPを介することで、Claude Codeはコードの構造、型情報、依存関係をリアルタイムで把握できるようになります。

これはちょうど、優れた人間のエンジニアが「コードを読んで理解する」ところを、AIが「IDEの知識を活用して理解する」ことに相当します。

今後、言語サーバー対応言語が増え、LSPの機能がさらに深く統合されていくにつれて、AIペアプログラマーとしてのClaude Codeの能力は飛躍的に向上していくでしょう。

まずは2分でセットアップを完了させて、その差を体感してみてください。


まとめ

本記事では、Claude CodeのLSP機能について以下の内容を解説しました。

LSPとはIDEがコードを理解するためのしくみであり、Claude Codeに組み込むことで定義検索・参照検索・リアルタイム診断が利用可能になります。設定は環境変数の追加、マーケットプレイスの登録、プラグインのインストールという3ステップで完了します。パフォーマンスの面では、従来のgrep検索と比較して約900倍の速度改善(50ms対45秒)が得られます。診断機能により、コード編集直後にエラーが検出され、同一ターン内での修正が可能になります。

Claude Codeを日常的に使っている方なら、今すぐ試す価値のある設定です。2分の投資で、AIとの開発体験が大きく変わります。

ぜひ試してみて、感想をコメントで聞かせてください。


参考リンク:

いいなと思ったら応援しよう!