VS Codeでの「gopls client: couldn't create connection to server」エラーの解決方法

intermediate💻 VS Code2026-06-04| VS Code(Go拡張機能)、Go (Golang) 1.18以降、Windows/macOS/Linux

Error Message

gopls client: couldn't create connection to server. Reason: Error: connect ECONNREFUSED 127.0.0.1:xxxxx
#golang#gopls#言語サーバー#lsp#go拡張機能

エラーメッセージコーディングを始めようとしたときに、オートコンプリートが機能せず、型のハイライトも表示されないのは非常にストレスが溜まるものです。VS Codeの右下に通知が表示され、Goの出力チャネルを確認すると、次のようなメッセージが表示されていることがあります。

gopls client: couldn't create connection to server. Reason: Error: connect ECONNREFUSED 127.0.0.1:xxxxx

簡単に言えば、Go拡張機能がローカルポートを介してバックグラウンドの言語サーバー(gopls)と通信しようとしたものの、システムによって拒否されたことを意味します。これは通常、サーバーがクラッシュしたか、起動していないか、あるいは誤ったチャネルで待機している場合に起こります。

主な原因多くの場合、この問題は以下の4つの理由のいずれかによって発生します。

  • ゾンビプロセス: 古いgoplsのインスタンスがメモリに残っており、ポートを占有して新しい接続をブロックしている。- 古いツール: goplsバイナリが現在のGoバージョンに対して古すぎる(例:Go 1.22を使用しているのに、2022年版のgoplsを使用している)。- 誤ったTCPモード: 設定によって、ローカルパイプを使用すべきところで、VS Codeがネットワーク接続を強制的に探してしまっている。- パスの混同: VS Codeが、存在しないフォルダや権限のないフォルダでgoまたはgoplsバイナリを探している。## 解決策 1:ツールの手動更新ほとんどの場合(約90%)、再インストールで問題が解決します。自動プロンプトが表示されるのを待たずに、手動でアップデートを強制しましょう。
  • Ctrl+Shift+P(Macの場合はCmd+Shift+P)でコマンドパレットを開きます。- 「Go: Install/Update Tools」と入力してEnterキーを押します。- リストからgoplsを選択し、OKをクリックします。インストールログを注意深く確認してください。もし「permission denied(権限拒否)」エラーで失敗する場合は、GOPATH/binフォルダが読み取り専用になっていないか確認してください。

解決策 2:接続モードのリセットECONNREFUSED 127.0.0.1エラーは、VS Codeがgoplsをリモートサービスとして実行しようとしていることを示唆している場合があります。特殊なネットワークデバッグを行っている場合を除き、これは設定ミスの可能性が高いです。

settings.jsonファイルを確認し、不要な場合は以下の行を削除してください。

"go.languageServerFlags": [
  "-mode=tcp",
  "-listen=127.0.0.1:xxxxx"
]

これらのフラグが存在すると、VS Codeはサーバーを自動起動しなくなります。代わりに、ユーザーがターミナルで手動起動することを期待します。これらを削除することで、拡張機能が再び起動を管理するようになります。

解決策 3:不要なプロセスの終了goplsが「ゴースト」プロセスになり、動作していないのにリソースを占有し続けることがあります。これにより、新しい正常なインスタンスの生成が妨げられます。

macOSまたはLinuxの場合:

ps aux | grep gopls
killall gopls

Windows(PowerShell)の場合:

Get-Process gopls -ErrorAction SilentlyContinue | Stop-Process -Force

これらを消去した後、VS Codeを再起動してください。すぐにクリーンな接続が試行されるはずです。

解決策 4:リモートおよびWSLパスの解決WSL、Docker、またはSSH経由でコーディングしている場合、拡張機能が別のマシンのGoを探している可能性があります。これは典型的な「パスの不一致」シナリオです。

  • ローカル(WindowsやMac)だけでなく、リモート環境内にGo拡張機能がインストールされていることを確認してください。- 統合ターミナルでwhich goを実行してください。何も返されない場合は、PATHが通っておらず、サーバーを起動できません。- 明示的に指定しましょう。リモートのsettings.jsonに以下の行を追加して、バイナリの正確な場所を指し示します。``` "go.alternateTools": { "go": "/usr/local/go/bin/go", "gopls": "/home/username/go/bin/gopls" }

## 結果の確認エラーが出なくなるのを待つだけでなく、サーバーの状態を確認して接続がアクティブであることを確かめましょう。
- 「**出力**」タブ(`Ctrl+``)を開きます。- 右側のドロップダウンメニューから「**gopls (server)**」を選択します。- 「`[Info] gopls v0.15.3 initialized`」のような行を探します。JSON-RPCの通信が流れていれば、復旧完了です。
## 今後の予防策突然のトラブルを防ぐために、環境を整理しておきましょう。`"go.toolsManagement.autoUpdate": true`を有効にして、ツールが古くならないようにします。また、Goのバージョンマネージャーは一つに絞るようにしてください。`brew`、`asdf`、手動インストールを混ぜると、複数の`gopls`バイナリが競合する原因になります。

Related Error Notes