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-lsp | PATHに必要なバイナリclangd |
| C# | プラグインcsharp-lsp | PATHに必要なバイナリcsharp-ls |
| Go | プラグインgopls-lsp | PATHに必要なバイナリgopls |
| Java | プラグインjdtls-lsp | PATHに必要なバイナリjdtls |
| Kotlin | プラグインkotlin-lsp | PATHに必要なバイナリkotlin-lsp |
| Liquid | プラグインliquid-lsp | PATHに必要なバイナリshopify(Shopify CLI) |
| Lua | プラグインlua-lsp | PATHに必要なバイナリlua-language-server |
| PHP | プラグインphp-lsp | PATHに必要なバイナリintelephense |
| Python | プラグインpyright-lsp | PATHに必要なバイナリpyright-langserver |
| Ruby | プラグインruby-lsp | PATHに必要なバイナリruby-lsp |
| Rust | プラグインrust-analyzer-lsp | PATHに必要なバイナリrust-analyzer |
| Swift | プラグインswift-lsp | PATHに必要なバイナリsourcekit-lsp |
| TypeScript / JavaScript | プラグインtypescript-lsp | PATHに必要なバイナリ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.jsonNeverを選んだプラグインを戻したいときは、一覧に出た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
前提を確かめる
言語サーバーのバイナリが
PATHにあり、対応するプラグインが未インストールであることを見ます。which typescript-language-serverのように、使っているバイナリ名で試します。 - 2
新しいセッションで編集させる
そのバイナリに対応する拡張子のファイルを、Claudeに編集させます。
- 3
ダイアログを見る
LSP plugin recommendationが出れば、復活しています。
ダイアログは1セッションにつき1回なので、出なかったときにすぐキーの消し忘れを疑わず、前提の2点を先に見直します。
Yes, installを選んだあとに確認すること
Yes, installは、プラグインをユーザーアカウント向けにインストールします。チームで揃えたい場合は、各自がこのダイアログで入れるのを待たず、プラグインのインストールと言語サーバーの導入をオンボーディング手順に書いておく方法があります。
インストール直後は<plugin> installed · restart to applyと表示されるだけで、言語サーバーはまだ動いていません。動作確認は次の順で進めます。
- 新しいセッションを始める
- プラグインの拡張子に合うファイルを、Claudeに編集させる(型エラーをわざと入れさせて直させると分かりやすい)
- 編集の下に
Found N new diagnostic issues in M files (ctrl+o to expand)と出れば、サーバーは起動している。中身を読むにはCtrl+Oを押す - 出ないときは
/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で、そのプラグインの提案は止まります。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。