昨今、IDEでもAI系のプラグインが隆盛である。
Clineはもとより、GitHub Copilotなどがそれに該当する。
これらのIDE向けプラグインでは、ファーストサポートにVSCodeがまず選ばれることが多い。
自分はAndroid開発を昔していた流れで、GoやTypeScript系のWeb開発でもJetbrains系IDEをわりと惰性で使ってきたところがある。ただAI系の新機能のペースに追いつくことにも興味はあるので、いよいよIDE移行しないとだめかなあ、と徐々にVSCodeの肌感を得ようとしている。
今回はその中で、Go言語系の開発で詰まったとこのメモ。
Goのモノレポ構造
以下のような複数のgo.modをもつリポジトリを開発する。
Jetbrainsではgoファイルごとに勝手に近い親のgo.modを判定し、そこをルートとして認識してくれていた。
逆に、VSCodeはモジュールのImportエラーを起こしてしまう。
これを解決したい。
.
└── prj
├── project1
│ └── go.mod
└── project2
└── go.mod
以下の3パターンの方法を見つけた。
Bが一番それっぽい気がしている。
A. go.modがあるフォルダごとに作業環境を開く
一番愚直なパターン。
なんかスマートではない。
B. go workによる設定
Go workspaces (go work) は Go 1.18 で導入された機能で、複数のモジュールを含むプロジェクトを効率的に管理するための仕組みらしい(いままで使ってなかった)。
主な特徴と利点:
- 複数モジュールの管理
- プロジェクトのルートディレクトリに配置する
まさに今回の要件向けの機能らしい。
go work use ./prj/project1 ./prj/project2
go 1.23
use (
./prj/project1
./prj/project2
)
C. VSCodeの個別settings.jsonによる設定
VSCodeのworkspace機能を使う場合、go.modがある傘下プロジェクトの各所に .vscode/settings.json
を置くことでもエラー表示を消すことができた。
{
"go.goroot": "/Users/xxxxx/.goenv/versions/1.23.1",
"go.buildTags": "goexperiment.rangefunc" // add this line
}