Skip to content
Latchkey

gvm vs asdf: Go バージョンの管理

gvm は GOPATH と pkgset を扱う Go 専用のバージョンマネージャ。asdf はプラグイン経由で Go を他の多数の言語と並べて管理します。

gvm は Go のみに注力し、複数の Go バージョンをインストールし、GOPATH を管理し、modules 以前の時代に依存関係を分離する pkgset を提供します。asdf はプラグインと共有の .tool-versions ファイルで Go を管理し、Node、Python などと統一します。Go modules が標準となった今、gvm の追加機構の多くは重要性が下がり、asdf(または公式ツールチェーン)がほとんどのニーズをカバーします。

gvmasdf
スコープGo のみポリグロット
GOPATH / pkgset組み込み不要 (modules)
設定ファイルgvm 固有.tool-versions
メンテナンス活発でない活発
最適な用途レガシーな Go ワークフロー多言語リポジトリ

CI では

CI では、Go は通常 setup-go か、単一バージョンを固定する asdf でインストールされます。gvm の GOPATH と pkgset の機能は modules によりほぼ廃れています。asdf は Go を他のランタイムと一緒に1つのファイルに固定しておくため、ポリグロットなパイプラインではより整理されます。gvm が適合するのは古い Go ワークフローを保守する場合のみです。

高速化

go.sum をキーに、Go のインストールと module の cache を保存しましょう。どちらも CI runner 上で動作し、より高速なマネージド runner は Go のインストール、build、test の手順を短縮します。

結論

GOPATH や pkgset に依存するレガシーな Go プロジェクトを保守するなら gvm。modules ベースのモダンなリポジトリで Go を他の言語と並べて管理するなら asdf(または CI では setup-go)。今日の多くのチームには asdf か公式ツールチェーンがよりシンプルな選択です。

関連ガイド