Goのバージョン管理ツールに関する調査

いつも勉強やツール作ったりするとき、dockerでコンテナライズした環境で作業をしています。GoもNode.jsもそう。コンテナならホスト側の環境が汚れないので楽なんです。

だからホスト側の言語のバージョンは気にしてなかったのですが、最近確認したらGoが1.13でした。古いままなのはちょっと嫌だなと思い、Goのバージョン管理ツールを導入することにしました。

Goのバージョン管理ツール

ざっと調べたところ、 goenvgvm という2つのバージョン管理ツールがありました。

GitHubのスターは今のところgvmの方が多いです。

goenv

goenv はrbenvやpyenvのようなすでに完成されたバージョン管理ツールをモデルに、可能な限りシンプルにバージョン管理することを目的としているようです。

.bash_profile などいじる必要はありますが、MacとLinux両方でも手軽にインストールできます。

Homebrewでもインストールが可能ですが、brewの場合はバージョンが少し古いです(2020/5/4時点で1.23)。

最新バージョンのGoを使いたい場合は下記コマンドで最新のgoenvを指定する必要があります。

brew install --HEAD goenv

goenvのGitHubリポジトリ

gvm

Go Version Managerの略です。brewではインストールできませんがインストーラーが用意されていて、下記コマンドを実行するだけで導入できます。(OSや環境に合わせてmercurialなど別途インストールが必要です)

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

gvmのGitHubリポジトリ

anyenv

anyenv はGoだけじゃなく、NodeやRuby、Terraformなどの各種言語のバージョンを一元管理できるツールです。

インストールされている言語のバージョンをまとめて更新できるなど、多くの言語を扱っている場合は非常に便利。

anyenvはrbenvやpyenv、tfenvなどの各管理ツールをまとめているもので、Goの場合はgoenvが採用されています。

anyenvのGitHubリポジトリ

まとめ

シンプルに使いたい場合はbrewでチャチャっと導入できるgoenv、またはgvm。他の言語もまとめて管理したい場合はanyenvが良い。

私は今お世話になっているプロジェクトでanyenvを利用していますが、プライベートでは4つ、5つ以上の言語を使い分けることがあまりないため、goenvを使っていくことにしました。

コンテナはすぐに破棄できるので手軽ですが、デバッグが難しいというデメリットもあります。開発するアプリケーションや環境に応じて、ホスト側とコンテナ環境を使い分けていくのがいいですね。