Claude Media
Claude CodeのLSPプラグイン推奨ダイアログを止める・戻す方法

Claude CodeのLSPプラグイン推奨ダイアログを止める・戻す方法

Claude Codeが編集中に出すLSP plugin recommendationダイアログの4つの選択肢と、5回無視で止まる仕様、~/.claude.jsonの3つのキーを消して復活させる手順を解説します。

Claude CodeのLSPプラグイン推奨ダイアログを止める・戻す方法

Claudeにファイルを編集させたら、突然「LSP plugin recommendation」というダイアログが出た。そんな経験があるなら、原因は自分のマシンに言語サーバーのバイナリがあることです。逆に、最近ダイアログが一切出なくなったなら、どこかで止める選択をしたか、気づかないうちに無視を重ねた可能性があります。

このダイアログは4つの選択肢で挙動が変わり、止まった状態は~/.claude.jsonに残ります。出る条件、各選択肢の効果、止める方法、そして止めた状態から戻す手順を順に見ます。

LSPプラグイン推奨ダイアログとは何か

LSP plugin recommendationは、言語サーバーのバイナリがすでにPATHにあり、そのバイナリを使うプラグインが未インストールのときに、Claude Codeがプラグインの導入を提案するダイアログです。コードインテリジェンスプラグインの仕組み自体はコードインテリジェンス(LSP)活用ガイドで扱っています。

推奨は、Claudeがファイルを編集したタイミングで出ることがあります。表示されるかどうかと、どのプラグインが提案されるかは、次の条件で決まります。

条件内容
プラグインが一致する内容追加済みのマーケットプレイス、またはClaude Codeが登録した公式マーケットプレイスに、そのファイル拡張子向けのコードインテリジェンスプラグインがあり、プラグインのバイナリが入っている
公式が優先される内容複数のマーケットプレイスが同じ拡張子向けのプラグインを出していると、公式マーケットプレイスのものが提案される
セッションにつき1回内容1つのセッションで最大1回。最初に一致したファイルの編集時に出る
クラウドセッションでは出ない内容claude --cloudで始めたセッションなど、ターミナルがクラウドセッションにつながっているときは出ない

言い換えると、バイナリがなければ出ません。プラグインを入れ済みでも出ません。「TypeScriptのバイナリはあるのにプラグインがない」という状態が、いちばん出やすい組み合わせです。

どのバイナリがどのプラグインを呼ぶか

公式マーケットプレイスが載せているコードインテリジェンスプラグインと、推奨のきっかけになるバイナリの対応は次のとおりです。

言語プラグインPATHに必要なバイナリ
C/C++プラグインclangd-lspPATHに必要なバイナリclangd
C#プラグインcsharp-lspPATHに必要なバイナリcsharp-ls
Goプラグインgopls-lspPATHに必要なバイナリgopls
Javaプラグインjdtls-lspPATHに必要なバイナリjdtls
Kotlinプラグインkotlin-lspPATHに必要なバイナリkotlin-lsp
Liquidプラグインliquid-lspPATHに必要なバイナリshopify(Shopify CLI)
Luaプラグインlua-lspPATHに必要なバイナリlua-language-server
PHPプラグインphp-lspPATHに必要なバイナリintelephense
Pythonプラグインpyright-lspPATHに必要なバイナリpyright-langserver
Rubyプラグインruby-lspPATHに必要なバイナリruby-lsp
Rustプラグインrust-analyzer-lspPATHに必要なバイナリrust-analyzer
Swiftプラグインswift-lspPATHに必要なバイナリsourcekit-lsp
TypeScript / JavaScriptプラグインtypescript-lspPATHに必要なバイナリtypescript-language-server

liquid-lspだけはShopifyが保守していて、ほかはAnthropicの保守です。たとえばgoplsをGo開発用に入れているだけの人でも、Goのファイルを編集した最初のセッションでgopls-lspが提案される可能性があります。

v2.1.251からは、プラグインやLSPの導入提案は、入力中の文を送信するか消すまで表示を待ちます。プロンプトを送るEnterが、そのままダイアログへの返答になることはなくなりました。

4つの選択肢は何が違うか

ダイアログは、プラグイン名を示したうえで次の4択を出します。

まとめ

ダイアログの4択

  • Yes, install

    ユーザーアカウントにプラグインをインストールし、<plugin> installed · restart to applyと表示します。言語サーバーは新しいセッションから読み込まれます。

  • No, not now

    ダイアログを閉じるだけです。後のセッションで同じプラグインがまた提案されます。Escキーも同じ扱いです。

  • Never for this plugin

    そのプラグインの推奨だけを止めます。別のプラグインの推奨は出続けます。

  • Disable all LSP recommendations

    全言語の推奨を止めます。

どれも選ばずに放置すると無視として数えられ、その回数はセッションをまたいで残ります。

数字

止まる条件の数字

  • 自動で閉じるまで

    30秒

    選ばないと無視として数える

  • 止まる無視回数

    5回

    全体停止を選んだのと同じ状態

止める操作をしていなくても止まる点が落とし穴です。ダイアログが出た瞬間に別の作業へ気を取られ、放置したまま次のセッションへ移る。そうした見過ごしが重なると、いつのまにか出なくなります。

ダイアログを止める方法

止めたい理由で、選ぶ操作が変わります。対象はプラグイン1つか、全言語か、今回だけか、という違いです。

  • そのプラグインだけ二度と提案されたくない: Never for this plugin
  • 言語を問わず全部止めたい: Disable all LSP recommendations
  • 今回は見送るだけ: No, not now(またはEsc)

ダイアログは「バイナリがあり、プラグインが未導入」のときに出ます。Yes, installでプラグインを入れれば、そのプラグインについては条件が成立せず、提案は出なくなります。コードインテリジェンスが欲しくてバイナリを入れた人は、これが最も手数の少ない収まり方です。

プラグインは要らないがバイナリは別の用途で入れている場合は、Never for this pluginか全体停止を選ぶことになります。無視を5回重ねても止まりますが、意図が残らないので、あとから「なぜ出ないのか」を追いにくくなります。

止まったダイアログを復活させる手順

設定は~/.claude.jsonにあります。Claude Code自身が書き込むファイルで、通常は手で編集しません。ここに残るキーが今回の対象です。

止まった理由消すキー
Disable all LSP recommendationsを選んだ、または5回無視した消すキーlspRecommendationDisabledとlspRecommendationIgnoredCount
Never for this pluginを選んだ消すキーlspRecommendationNeverPluginsの一覧から、そのプラグインのname@marketplace

どの経路で止まったかを見分ける

3つのキーは読み取りだけならいつでも見られます。次のコマンドで、どれが残っているかが分かります。

jq '{lspRecommendationDisabled,
     lspRecommendationIgnoredCount,
     lspRecommendationNeverPlugins}' ~/.claude.json

全体停止で止まっているファイルでは、たとえば次のように出ます。Neverを選んだプラグインがあれば、一覧にそのIDが入ります。

{
  "lspRecommendationDisabled": true,
  "lspRecommendationIgnoredCount": 5,
  "lspRecommendationNeverPlugins": [
    "typescript-lsp@claude-plugins-official",
    "gopls-lsp@claude-plugins-official"
  ]
}

キーが一度も作られていない環境では、3つともnullと表示されます。5回の無視で止まった場合も、消すキーは上の表の2つです。

jqで安全に消す

手で編集してもよいのですが、JSONの括弧やカンマを壊しやすいので、jqで削除します。先にバックアップを取ってから実行します。

cp ~/.claude.json ~/.claude.json.bak
jq 'del(.lspRecommendationDisabled,
        .lspRecommendationIgnoredCount)' \
  ~/.claude.json > /tmp/claude.json.new \
  && mv /tmp/claude.json.new ~/.claude.json

Neverを選んだプラグインを戻したいときは、一覧に出たIDのうち、再び提案してほしいものだけを外します。次のコマンドは、指定したIDを一覧から除く例です。IDは自分の環境の表示に置き換えます。

jq '.lspRecommendationNeverPlugins -=
      ["typescript-lsp@claude-plugins-official"]' \
  ~/.claude.json > /tmp/claude.json.new \
  && mv /tmp/claude.json.new ~/.claude.json

上のサンプルのファイルに適用すると、typescript-lspだけが一覧から消え、gopls-lspは残ります。

注意点が1つあります。lspRecommendationNeverPluginsキー自体が無いファイルにこのコマンドを流すと、jqはnullと配列は引き算できないというエラーで止まります。Neverを一度も選んでいないなら、このコマンドは不要です。

~/.claude.jsonには認証状態やMCPサーバーの設定も入っています。編集前に自分でコピーを取っておくと、書き換えを失敗しても元に戻せます。ファイルが壊れた場合は、起動時の復旧ダイアログで設定を初期化する前に、Claude Codeが元のファイルをバックアップします(v2.1.199で修正された挙動です)。~/.claude/backupsには、書き換え前の版が直近5世代分と、解析できなかった版が残ります。

復活したかを確かめる

手順

復活の確認

  1. 1

    前提を確かめる

    言語サーバーのバイナリがPATHにあり、対応するプラグインが未インストールであることを見ます。which typescript-language-serverのように、使っているバイナリ名で試します。

  2. 2

    新しいセッションで編集させる

    そのバイナリに対応する拡張子のファイルを、Claudeに編集させます。

  3. 3

    ダイアログを見る

    LSP plugin recommendationが出れば、復活しています。

ダイアログは1セッションにつき1回なので、出なかったときにすぐキーの消し忘れを疑わず、前提の2点を先に見直します。

Yes, installを選んだあとに確認すること

Yes, installは、プラグインをユーザーアカウント向けにインストールします。チームで揃えたい場合は、各自がこのダイアログで入れるのを待たず、プラグインのインストールと言語サーバーの導入をオンボーディング手順に書いておく方法があります。

インストール直後は<plugin> installed · restart to applyと表示されるだけで、言語サーバーはまだ動いていません。動作確認は次の順で進めます。

  1. 新しいセッションを始める
  2. プラグインの拡張子に合うファイルを、Claudeに編集させる(型エラーをわざと入れさせて直させると分かりやすい)
  3. 編集の下にFound N new diagnostic issues in M files (ctrl+o to expand)と出れば、サーバーは起動している。中身を読むにはCtrl+Oを押す
  4. 出ないときは/pluginのErrorsタブで、Executable not found in $PATHの行がないか見る

プラグインを手でインストールするなら、ダイアログを待たずに/plugin install typescript-lsp@claude-plugins-officialのように入力できます。name@marketplaceの形式は、lspRecommendationNeverPluginsに並ぶIDと同じです。

入れる前に中身を見たいときは、/pluginのDiscoverとBrowse画面でプラグインのLSPサーバーなどの構成要素を確認できます(v2.1.145以降)。インストール済みのプラグインなら、claude plugin details <name>が構成要素の一覧と、見積もりのトークンコストを表示します。ダイアログの4択で迷うなら、この2つを先に見てからYes, installを選ぶ手があります。

判断を保留したいだけなら、放置ではなくNo, not nowかEscを押す方が、無視の回数を増やさずに済みます。

出ないときの切り分け

ダイアログが出ない理由は、止まっている以外にもあります。症状から原因を引くと次のようになります。

状況原因見る場所
プラグインを入れた覚えがある原因前提が「プラグイン未インストール」なので出ない見る場所/plugin
whichでバイナリが見つからない原因推奨はバイナリが入っていることが条件見る場所claudeを起動したシェルのPATH
claude --cloudなどで接続している原因クラウドセッションでは出ない見る場所接続先
同じセッションで一度出た原因1セッション1回見る場所次のセッション
対応する拡張子のプラグインがない原因どのマーケットプレイスにも提案対象がない見る場所追加済みのマーケットプレイス

プラグインを入れたのに言語サーバーが動かないときは、ダイアログではなく別の問題です。/pluginのErrorsタブにExecutable not found in $PATH: "<binary>"が出ていれば、バイナリの導入から見直します。claude --debugのログにはLSP server <name> failed to start: <reason>と出ます。具体的な切り分けは「No LSP server available」の原因と直し方にまとめています。

メモリ消費が気になる場合は、rust-analyzerやpyrightのようにプロジェクト全体をインデックスする言語サーバーが原因になりえます。そのときは/plugin disable <plugin>でプラグインを止め、Claudeの組み込み検索ツールに任せる手があります。

推奨を自分で仕込みたいとき

このダイアログは、PATHにあるバイナリを手がかりにClaude Code側が提案するしくみです。チームで入れてほしいプラグインを最初から案内したい場合は、別の手段になります。SessionStartフックでプラグインの推奨を出す方法はSessionStartフックによるプラグイン推奨で扱っています。

また、公式の13言語にない言語のために自分でLSPサーバーを組み込むなら、.lsp.jsonを書くプラグインを作る経路があります。その手順はプラグインに独自のLSPサーバーを組み込むが詳しいです。

まとめ

ダイアログが出なくなったら、まずjqで3つのキーを見て、全体停止・5回無視・Neverのどれかを特定します。戻すのは該当キーを消すだけで、Neverの一覧に残ったIDは、再び提案してほしいものだけ外します。コードインテリジェンスが目的なら、次に出たときのYes, installで、そのプラグインの提案は止まります。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. code.claude.com/docs/en/plugins/code-intelligence
  2. code.claude.com/docs/en/plugins/troubleshooting
  3. code.claude.com/docs/en/settings
  4. code.claude.com/docs/en/changelog
この記事を共有:XはてブLinkedIn