goenv を使うべきか gvm を使うべきか


調べるとすぐにわかると思うのですが、Go の環境管理(?)ツールとしては goenvgvm の二つがメジャーでして、この二つの比較というのが誰もが通る道になると思います。ただ、総合的にみると goenv が使いやすいと個人的には思いますし、実際に使っている方も多い印象です。

goenv

Goenv のメリットは他言語の *env ツールとインタフェイスが同じにできてある点です。なので他言語で慣れている方にとっては使い方がすぐに覚えられて、扱いやすいでしょう。あとは anyenv に組み込まれているのはこちらなので、anyenv を使う場合には無条件でこちらを使うことになると思います。

goenv install 1.11.1
goenv local 1.11.1

さらに、Homebrew でのインストールに対応しているので、MacOS ユーザとしては嬉しいところです。ただ、残念なことに brew install goenv しても、古いバージョンしか落ちてきません。😅

見たところ Goenv 自体はメンテを続けているものの、2018年12月のリリースを最後に beta リリースばかりが続いている状態です。古いバージョンでは Go 1.14.4 までしか扱うことができませんので、今日日使いものにならないでしょう。

Homebrew を使わないインストール方法も(もちろん)用意されていますので、MacOS であるかに関わらずこちらの方法でインストールすることをおすすめします。

goenv/INSTALL.md at master · syndbg/goenv

もしくは、以下の記事で紹介されているように --HEAD フラグ付きで brew install することでも対応が可能です。(定期的なバージョンアップが必要なツールにはなるので、Homebrew でパッケージ管理するに越したことはないのかな、という気はしました。)

brew uninstall goenv && brew install --HEAD goenv

【解消済み】goenvで最新のgoのバージョンが表示されない問題 - ポンコツエンジニアのごじゃっぺ開発日記。

gvm

GitHub のスター数で見ると断然 gvm の方が多いです。ただ goenv も十分多いですので、そこまで気にしなくて良いのかなという印象です。

  • gvm : 6.3k
  • goenv: 1k

使い方は goenv と比較すれば独特ですので、Usage を見ながら使うことになると思います。ただ、機能自体は一般的な **env ツールと変わらないので、使い方に困るレベルではないと思います。

gvm install go1.4
gvm use go1.4

インストール方法がこの bash スクリプトを実行することしか対応しておらず、これに関してはちょっと不親切かなと思いました。(profile をいじっているせいか、手持ちの PC の一つではインストールが失敗してしまいました…。)

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

https://github.com/moovweb/gvm#installing

余談:各ツールの Go の最新リリースへの追従

リリースされたばかりのバージョンだったりすると、gvm であれ goenv であれば対応されていないことがあります。対応されるのを待つというのもいいのですが、プルリクエストを出せばしれっとマージしてもらえるので、早く使えるようになって欲しい場合には、過去のプルリクエストをもとに出してみるのをオススメします。

(さらに余談になってしまいますが)実際に過去のプルリクエストの変更を見てもらえるとわかるのですが、難易度のごくごく低いタスクになりますので、学生の方などで「OSS にコントリビュートしてみたい!」という方にもオススメです。