Goのバージョン管理ツールに関する調査
いつも勉強やツール作ったりするとき、dockerでコンテナライズした環境で作業をしています。GoもNode.jsもそう。コンテナならホスト側の環境が汚れないので楽なんです。
だからホスト側の言語のバージョンは気にしてなかったのですが、最近確認したらGoが1.13でした。古いままなのはちょっと嫌だなと思い、Goのバージョン管理ツールを導入することにしました。
Goのバージョン管理ツール
ざっと調べたところ、 goenv
と gvm
という2つのバージョン管理ツールがありました。
GitHubのスターは今のところgvmの方が多いです。
goenv
goenv
はrbenvやpyenvのようなすでに完成されたバージョン管理ツールをモデルに、可能な限りシンプルにバージョン管理することを目的としているようです。
.bash_profile
などいじる必要はありますが、MacとLinux両方でも手軽にインストールできます。
Homebrewでもインストールが可能ですが、brewの場合はバージョンが少し古いです(2020/5/4時点で1.23)。
最新バージョンのGoを使いたい場合は下記コマンドで最新のgoenvを指定する必要があります。
brew install --HEAD goenv
gvm
Go Version Managerの略です。brewではインストールできませんがインストーラーが用意されていて、下記コマンドを実行するだけで導入できます。(OSや環境に合わせてmercurialなど別途インストールが必要です)
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
anyenv
anyenv
はGoだけじゃなく、NodeやRuby、Terraformなどの各種言語のバージョンを一元管理できるツールです。
インストールされている言語のバージョンをまとめて更新できるなど、多くの言語を扱っている場合は非常に便利。
anyenvはrbenvやpyenv、tfenvなどの各管理ツールをまとめているもので、Goの場合はgoenvが採用されています。
まとめ
シンプルに使いたい場合はbrewでチャチャっと導入できるgoenv、またはgvm。他の言語もまとめて管理したい場合はanyenvが良い。
私は今お世話になっているプロジェクトでanyenvを利用していますが、プライベートでは4つ、5つ以上の言語を使い分けることがあまりないため、goenvを使っていくことにしました。
コンテナはすぐに破棄できるので手軽ですが、デバッグが難しいというデメリットもあります。開発するアプリケーションや環境に応じて、ホスト側とコンテナ環境を使い分けていくのがいいですね。