ホウボウのイラスト

Claude Code の LSP サポート

Claude Code のバージョン 2.0.74 から LSP(Language Server Protocol)サポートが追加されました。LSP サポートにより、Claude Code はコードベースに対してシンボルの定義検索、参照検索、ホバー情報の取得などの操作が可能になります。この記事では Claude Code の LSP サポートの概要と使用方法を紹介します。

コーディングエージェントが LSP(Language Server Protocol)を扱えるようになることで、エージェントがより効率的にタスクを遂行できるようになります。文字列でコードベース全体を検索するのではなく、LSP を通じてコードの構造やシンボル情報にアクセスできるため、正確な情報を迅速に取得・編集できるためトークンと時間を大きく節約できます。このことはコーディングエージェントにセマンティックなコード検索・編集ツールを提供する Serena を試したことがある方には特に理解しやすいでしょう。

Claude Code の v2.0.74 から LSP サポートが追加されました。LSP サポートは Claude Code のプラグイン機能の一部として提供されています。LSP 機能を有効化することで、Claude Code はコードベースに対して以下のような操作が可能になります。

  • goToDefinition: シンボルが定義されている場所を検索
  • findReferences: シンボルへのすべての参照を検索
  • hover: シンボルのホバー情報(ドキュメント、型情報)を取得
  • documentSymbol: ドキュメント内のすべてのシンボル(関数、クラス、変数)を取得
  • workspaceSymbol: ワークスペース全体でシンボルを検索
  • goToImplementation: インターフェースや抽象メソッドの実装を検索
  • prepareCallHierarchy: 指定位置の呼び出し階層アイテム(関数/メソッド)を取得
  • incomingCalls: 指定位置の関数を呼び出しているすべての関数/メソッドを検索
  • outgoingCalls: 指定位置の関数が呼び出しているすべての関数/メソッドを検索

この記事では Claude Code の LSP サポートの概要と使用方法を紹介します。

LSP 機能を有効化する

LSP 機能を有効化するには、Claude Code を起動して /plugin コマンドを実行して対話形式でプラグインを有効化します。プラグインをインストールするためには対象のプラグインを提供しているマーケットプレイスの追加が必要です。LSP プラグインは Claude Code 公式のマーケットプレイス(claude-plugins-official)で提供されています。公式マーケットプレイスは何も設定しなくてもデフォルトで利用できるはずです。「Marketplaces」タブで公式マーケットプレイスが有効化されていることを確認してください。

次に「Discover」タブに移動すると、利用可能なプラグインの一覧が表示されます。検索ボックスに「LSP」と入力して検索すると、LSP プラグインの一覧が言語別に表示されます。利用可能な言語は以下の通りです。

  • C/C++
  • C#
  • Go
  • Java
  • Lua
  • PHP
  • Python
  • Rust
  • Swift

使用したい言語の LSP プラグインを Space キーで選択して i キーを押すとインストールが開始されます。

インストール済のプラグインは「Installed」タブで確認できます。

さらに LSP プラグインの言語に対応する LSP サーバーをインストールする必要があります。例えば TypeScript の LSP 機能を利用したい場合は、typescript-language-server をインストールします。

npm install -g typescript-language-server typescript

Warning

実際に TypeScript LSP プラグインを有効にして TypeScript のコードベースで試してみましたが、現時点では正しく動作しないようです。LSP サーバーのプラグインには .lsp.json という設定ファイルが必要なようですが、現時点では README.md しか提供されていないようです。今後のアップデートに期待しましょう。

自作の LSP サーバーを使用する

Claude Code 公式マーケットプレイスでサポートされていない言語の LSP サーバーを使用したい場合は、自作のプラグインを作成して LSP プラグインを提供できます。プラグインを作成するためには新しいディレクトリを作成し、/.claude-plugin サブディレクトリを作成します。

mkdir -p my-lsp-plugin/.claude-plugin

.claude-plugin/plugin.json ファイルを作成し、以下のように記述します。

.claude-plugin/plugin.json
{
  "name": "my-typescript-lsp-plugin",
  "description": "TypeScript/JavaScript language server for Claude Code, providing code intelligence features like go-to-definition, find references, and error checking.",
  "version": "1.0.0",
  "author": {
    "name": "Your Name"
  }
}

プラグインに LSP サポートを追加するために、プラグインディレクトリのルートに .lsp.json ファイルを作成し、以下のように記述します。TypeScript の LSP サーバーを使用する例です。

.lsp.json
{
  "typescript": {
    "command": "typescript-language-server",
    "args": ["--stdio"],
    "extensionToLanguage": {
      ".ts": "typescript",
      ".tsx": "typescript"
    }
  }
}

作成したプラグインをテストするには --plugin-dir オプションを使用して Claude Code を起動します。

claude --plugin-dir ./my-lsp-plugin

/plugin コマンドを実行してプラグインが正しく認識されていることを確認します。--plugin-dir で指定したプラグインは inline マーケットプレイスとして認識されます。

Warning

v2.0.74 ではプラグインと LSP サーバーの競合が発生する問題があるため、正しく動作しないようです。 https://github.com/anthropics/claude-code/issues/13952

上記の問題を回避して LSP 機能をテストするには、Claude Code のバージョンを v2.0.67 に落として環境変数 ENABLE_LSP_TOOLtrue に設定して起動します。

ENABLE_LSP_TOOL=true npx @anthropic-ai/[email protected] --plugin-dir ./my-lsp-plugin

Claude Code が LSP 機能を使用する場合には LSP(...) ツールが利用されます。ここでは <Button> コンポーネントをリネームする作業をするため、findReferences コマンドを使用して Button シンボルが定義されている箇所を検索しています。

まとめ

  • Claude Code の v2.0.74 から LSP サポートが追加された
  • LSP 機能を有効化するには公式マーケットプレイスから対応する言語の LSP プラグインをインストールする
  • 自作の LSP サーバーを使用するにはプラグインを作成して .lsp.json ファイルを追加する
  • LSP 機能は v2.0.74 でプラグインと競合する問題があるため、v2.0.67 を使用して環境変数 ENABLE_LSP_TOOLtrue に設定して起動することで回避できる

参考

記事の理解度チェック

以下の問題に答えて、記事の理解を深めましょう。

Claude Code の LSP サポートで利用できる操作として、正しくないものはどれですか?

  • goToDefinition: シンボルが定義されている場所を検索

    もう一度考えてみましょう

  • findReferences: シンボルへのすべての参照を検索

    もう一度考えてみましょう

  • autoComplete: コード補完の候補を取得

    正解!

    Claude Code の LSP サポートで提供されている操作には autoComplete は含まれていません。記事で紹介されている操作は goToDefinition、findReferences、hover、documentSymbol、workspaceSymbol、goToImplementation、prepareCallHierarchy、incomingCalls、outgoingCalls です。

  • hover: シンボルのホバー情報(ドキュメント、型情報)を取得

    もう一度考えてみましょう

自作の LSP プラグインを作成する際にプラグインのルートに追加する必要がある設定ファイルはどれですか?

  • .lsp.json

    正解!

  • .lsp.yaml

    もう一度考えてみましょう

  • /lsp ディレクトリ

    もう一度考えてみましょう

  • lsp.config.js

    もう一度考えてみましょう