Gopls: Go 用言語サーバー
gopls(「Go プリーズ」と発音)は、Go チームによって開発された Go の公式な言語サーバーです。これは、LSP互換のエディタに、多種多様なIDE 機能を提供します。
goplsと直接やり取りする必要はありません。エディタに自動的に統合されます。特定の機能と設定はエディタによって多少異なりますので、以下のエディタのドキュメントに進むことをお勧めします。また、各機能の gopls ドキュメントには、各クライアントエディタでサポートされているかどうかが記載されています。
このドキュメント(https://go.dokyumento.jp/gopls)では、gopls の最新リリースについて説明しています。開発中のリリースに関するドキュメントをプレビューするには、https://tip.golang.org/gopls を参照してください。
機能
Gopls は、ナビゲーション、補完、診断、分析、リファクタリングのための広範囲な標準 LSP 機能をサポートしており、他の言語サーバーにはない追加機能も多数備えています。
Gopls が提供できることの完全なドキュメントについては、機能のインデックスを参照してください。
エディタ
goplsを使い始めるには、お好みのエディタに LSP プラグインをインストールしてください。
このリストにないエディタでgoplsを使用している場合は、このドキュメントを更新する CL をお送りください。
インストール
goplsの最新の安定版リリースをインストールするには、次のコマンドを実行します。
go install golang.org/x/tools/gopls@latest
VS Code のような一部のエディタは、このステップを自動的に処理し、新しい安定版がリリースされたときに Gopls が確実に更新されるようにします。
更新後、Gopls の実行中のプロセスを再起動して効果を確認する必要がある場合があります。各クライアントには、サーバーを再起動するための独自の方法があります。(UNIX マシンでは、コマンドkillall goplsを使用できます。)
高度なインストール手順で詳細をご覧ください。
リリース
Gopls のリリースはセマンティック バージョニングに従い、主要な変更と新機能は新しいマイナー バージョン (つまり、v*.N.0の形式のバージョン) でのみ導入されます。それ以降のパッチ リリースには、厳選された修正または表面的な更新のみが含まれます。
Go リリース タイムラインに合わせるため、以下の表に従って、約3か月ごとに Gopls の新しいマイナー バージョンをリリースし、約1か月ごとにパッチ リリースを行うことを目指しています。
| 月 | バージョン |
|---|---|
| 1月 | v*.<N+0>.0 |
| 1月~3月 | v*.<N+0>.* |
| 4月 | v*.<N+1>.0 |
| 4月~6月 | v*.<N+1>.* |
| 7月 | v*.<N+2>.0 |
| 7月~9月 | v*.<N+2>.* |
| 10月 | v*.<N+3>.0 |
| 10月~12月 | v*.<N+3>.* |
このポリシーの詳細については、https://go.dokyumento.jp/issue/55267 を参照してください。
ワークスペースのセットアップ
goplsは Go モジュール、マルチモジュール、および GOPATH モードの両方をサポートしています。サポートされているワークスペース レイアウトについては、ワークスペース ドキュメントを参照してください。
設定
goplsを構成して、エディタの操作性を変更したり、追加のデバッグ情報を表示したりできます。構成オプションはエディタによって提供されますので、具体的な詳細についてはエディタの説明を参照してください。gopls設定の完全なリストは、設定ドキュメントにあります。
環境変数
goplsはエディタの環境を継承するため、設定する環境変数に注意してください。VS Code のような一部のエディタでは、ユーザーが一部の環境変数の値を部分的にオーバーライドすることができます。
サポートポリシー
Gopls は、Go ツールチームのエンジニアによってメンテナンスされており、Go と VS Code Go のイシュー トラッカーを積極的に監視しています。
サポートされている Go のバージョン
goplsはGo Release Policyに従っており、公式には最新の2つの主要な Go リリースのみをサポートしています。
gopls を使用する際には、注意すべき3つのバージョンがあります。
- gopls ビルド Go バージョン: gopls のビルドに使用される Go のバージョン。
- Go コマンド バージョン: ワークスペースに関する情報をロードするために gopls が実行する Go list コマンドのバージョン。
- 言語バージョン: 現在のファイルの Go.mod ファイルの Go ディレクティブにあるバージョンで、ファイルの Go 言語のセマンティクスを決定します。
2024 年 8 月に Go 1.23.0 および gopls@v0.17.0 がリリースされて以降、*gopls ビルド Go バージョン*としては最新の Go バージョンのみがサポートされます。ただし、Go 1.21 で追加された前方互換性のサポートにより、Go 1.21 以降を使用して gopls をインストールする限り、必要なツールチェーンのアップグレードは他の依存関係と同様に自動的に処理されます。
さらに、gopls@v0.17.0 以降、*go コマンド バージョン*は 4 つのバージョンから 3 つに狭まります。これは Go リリース ポリシーにより一貫しています。
Gopls は、その*言語バージョン*として**すべての** Go バージョンをサポートしており、言語バージョンに基づくコンパイラ エラーを提供し、その Go バージョンで利用可能な標準ライブラリ API に基づいて利用可能な標準ライブラリ シンボルをフィルタリングします。
古いバージョンの Go で gopls をビルドするサポートを維持することは、gopls メンテナーにとって大きな摩擦を引き起こし、他の改善を妨げていました。システムにサポートされているバージョンの Go をインストールできない場合でも、古いバージョンの gopls をインストールできます。次の表は、特定の Go バージョンをサポートする最終的な gopls バージョンを示しています。表にあるバージョンよりも新しい Go リリースは、どのバージョンの gopls でも使用できます。
| Go バージョン | サポート対象の最終 gopls バージョン (警告なし) |
|---|---|
| Go 1.12 | gopls@v0.7.5 |
| Go 1.15 | gopls@v0.9.5 |
| Go 1.17 | gopls@v0.11.0 |
| Go 1.18 | gopls@v0.14.2 |
| Go 1.20 | gopls@v0.15.3 |
サポートされているビルド システム
goplsは現在goコマンドのみをサポートしているため、異なるビルドシステムを使用している場合、goplsはうまく機能しません。Bazel は公式にはサポートされていませんが、適切に設定されたgo/packages driverを使用すれば機能する可能性があります。詳細については、bazelbuild/rules_go#512を参照してください。Bazel でgoplsを動作させるように設定するには、これらの手順に従ってください。
トラブルシューティング
goplsで問題が発生した場合は、トラブルシューティング ガイドに記載されている手順に従ってください。
追加情報
このドキュメントのソースファイルは、golang.org/x/tools/gopls/doc の下にあります。