> Source: https://www.ymotongpoo.com/works/goblog-ja/gopls-vscode-go/


# VS Code Go拡張機能でgoplsがデフォルトで有効に

[Gopls on by default in the VS Code Go extension](https://go.dev/blog/gopls-vscode-go) by Go tools team

VS Code Go拡張機能が、より堅牢なIDE機能とGoモジュールへのより良いサポートを提供するため、
[goplsという言語サーバー](https://github.com/golang/tools/blob/master/gopls/README.md)をデフォルトで
有効にするようになったことを発表できてうれしく思います。

![gopls-vscode-go_features](./gopls-vscode-go_features.gif)

_(`gopls` は、賢い自動補完、シグネチャヘルプ、リファクタリング、ワークスペースのシンボル検索といったIDE機能を提供します。)_

[Goモジュール](https://go.dev/blog/using-go-modules)が2年前にリリースされたとき、それはGo開発者向けツールの様相をすっかり変えてしまいました。
`goimports` や `godef` のようなツールは、それまでコードが `$GOPATH` に保存されていることを前提としていました。
Goチームがこれらのツールをモジュールに対応させるために書き直し始めたとき、私たちはこのギャップを埋めるための
より体系的なアプローチが必要だとすぐに気づきました。

その結果、私たちは単一のGo[言語サーバー](https://microsoft.github.io/language-server-protocol/)である
`gopls` の開発に着手しました。これは自動補完、フォーマット、診断といったIDE機能を、互換性のある任意の
エディタのフロントエンドに提供します。この永続的かつ統一されたサーバーは、以前のコマンドラインツール群の
集合体から見ると[根本的な転換](https://www.youtube.com/watch?v=EFJfdWzBHwE&t=1s)です。

`gopls` の開発に加えて、私たちはエディタ用ツールの安定したエコシステムを作るための他の方法も模索してきました。
昨年、Goチームは[VS Code用のGo拡張機能](https://go.dev/blog/vscode-go)の責任を引き継ぎました。この作業の一環として、
`gopls` の自動更新、`gopls` の設定の整理と明確化、トラブルシューティングのワークフローの改善、アンケートを
通じたフィードバックの収集などを行い、拡張機能と言語サーバーとの統合を円滑にしました。また、Go拡張機能の
安定性、パフォーマンス、ユーザー体験の改善に貢献してくれた、活発なユーザーとコントリビューターのコミュニティを
育て続けています。

## 発表

1月28日は、`gopls` とVS Code Goの両方の歩みにおいて大きな節目となりました。この日、`gopls` がVS Code用の
Go拡張機能でデフォルトで有効になったのです。

この切り替えに先立ち、私たちはパフォーマンスと安定性の向上に重点を置きながら、`gopls` の設計、機能セット、
ユーザー体験の反復に長い時間を費やしてきました。`gopls` は1年以上前から、Vim、Emacsをはじめとする
ほとんどのエディタのプラグインでデフォルトとなっています。これまでに24回の `gopls` のリリースを行っており、
そのたびに継続的にフィードバックを寄せ、問題を報告してくださったユーザーの皆さんに深く感謝しています。

私たちは新規ユーザー向けの体験を洗練させることにも時間を費やしてきました。`gopls` を使ったVS Code Goが
わかりやすいエラーメッセージとともに直感的に使えるものであってほしいと願っていますが、もし疑問点があったり
設定を調整する必要があったりする場合は、[更新されたドキュメント](https://github.com/golang/vscode-go/blob/master/README.md)
で答えを見つけられます。また、使い始めるのに役立つ[スクリーンキャスト](https://www.youtube.com/watch?v=1MXIGYrMk80)や、
見つけにくい機能を紹介する[アニメーション](https://github.com/golang/vscode-go/blob/master/docs/features.md)も
用意しました。

`gopls` はGoのコードを扱う最良の方法であり、特にGoモジュールを使う場合はなおさらです。モジュールがデフォルトで
有効になるGo 1.16の登場も控えている中、VS Code Goのユーザーは最初から最良の体験を得られるようになります。

とはいえ、この切り替えは `gopls` が完成したことを意味するわけではありません。私たちはバグ修正、新機能の追加、
全体的な安定性の向上に引き続き取り組んでいきます。次に力を入れる領域は、[複数のモジュールを扱う](https://github.com/golang/tools/blob/master/gopls/doc/workspace.md)
際のユーザー体験の改善です。より多くのユーザーからのフィードバックが、私たちの次のステップの指針となる
でしょう。

## では、何をすればよいか

VS Codeを使っている場合、特に何もする必要はありません。次のVS Code Goのアップデートを受け取ると、`gopls` は
自動的に有効になります。

他のエディタを使っている場合は、すでに `gopls` を使っている可能性が高いでしょう。もしまだ使っていない場合は、
[`gopls` のユーザーガイド](https://github.com/golang/tools/blob/master/gopls/README.md)を参照して、お使いの
エディタで `gopls` を有効にする方法を確認してください。Language Server Protocolのおかげで、`gopls` は
どのエディタに対しても同じ機能を提供し続けられます。

`gopls` がうまく動作しない場合は、[詳細なトラブルシューティングガイド](https://github.com/golang/vscode-go/blob/master/docs/troubleshooting.md)
を参照した上でissueを立ててください。必要であれば、[VS Codeで `gopls` を無効化する](https://github.com/golang/vscode-go/blob/master/docs/settings.md#gouselanguageserver)
こともいつでも可能です。

## お礼

既存のユーザーの皆さんには、私たちがキャッシュ層を3度も書き直す間、辛抱強くお付き合いいただいたことに感謝します。
新しいユーザーの皆さんについては、これから寄せていただく体験談やフィードバックを楽しみにしています。

最後になりますが、Goツールコミュニティの貴重な貢献に触れずしてGoツールについて語ることはできません。長い議論、
詳細なバグ報告、統合テスト、そして何より素晴らしい貢献をありがとうございます。もっとも刺激的な `gopls` の
機能の数々は、情熱あるオープンソースのコントリビューターの皆さんから生まれています。その努力と献身に感謝します。

## もっと詳しく知りたい方へ

`gopls` とVS Code Goを使い始める方法については、[スクリーンキャスト](https://www.youtube.com/watch?v=1MXIGYrMk80)を
ご覧ください。また、追加情報については[VS Code GoのREADME](https://github.com/golang/vscode-go/blob/master/README.md)を
参照してください。

`gopls` についてさらに詳しく読みたい方は、[`gopls` のREADME](https://github.com/golang/tools/blob/master/gopls/README.md)を
ご覧ください。

By Go tools team

