🎃

GVM を使った Go の環境構築

3 min read

概要

以前 Go 言語を使った開発にアサインされることがありました。
その時に GVM を使って環境構築したら非常に簡単だったので紹介がてら残しておきます。

GVMについて

GVM は、Go Version Manager といい、Go 言語のバージョンを管理してくれるツールです。プロジェクトごとに使うバージョンが違ったり、以前にインストールしていたものが古くなったりするとバージョンを変えるのが大変です。
そんな時に、コマンドを叩くだけでバージョンの切り替えを可能にしてくれるのがこの GVM です。

こちらが公式のリポジトリです。

https://github.com/moovweb/gvm

セットアップ

僕は macOS なので、それに合わせて必要となる依存ライブラリをインストールしていきます。

※ 他の OS についても、 README に記載があるので、そちらを参照してください。

$ sw_vers -productName
Mac OS X

$ xcode-select --install
$ brew update

# Check whether formula is installed in your machine
$ brew list | grep mercurial

# If not, please install
$ brew install mercurial

GVM のインストール

# Install Go version manager
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
...

Installed GVM v1.0.22

Please restart your terminal session or to get started right away run
 `source /Users/username/.gvm/scripts/gvm`

$ source ~/.gvm/scripts/gvm

# Check
$ gvm version
Go Version Manager v1.0.22 installed at /Users/username/.gvm

実際に GVM から Go をインストールする

その前にインストールのオプションを確認しておきます。

$ gvm install -h
Usage: gvm install [version] [options]
    -s,  --source=SOURCE      Install Go from specified source.
    -n,  --name=NAME          Override the default name for this version.
    -pb, --with-protobuf      Install Go protocol buffers.
    -b,  --with-build-tools   Install package build tools.
    -B,  --binary             Only install from binary.
         --prefer-binary      Attempt a binary install, falling back to source.
    -h,  --help               Display this message.

となっています。

A Note on Compiling Go 1.5+
Go 1.5+ removed the C compilers from the toolchain and replaced them with one written in Go. Obviously, this creates a bootstrapping problem if you don't already have a working Go install. In order to compile Go 1.5+, make sure Go 1.4 is installed first.

公式のリポジトリにはこのように書かれており ver1.5 以上をインストールするためにはまず ver1.4 が必要と書かれています。

しかしこの対処法としては -B オプションを付けてソースコードからではなく、バイナリからインストールすることで回避します。

# Enter the version you want to install
$ gvm listall | grep 1.14
   go1.14
   go1.14beta1
   go1.14rc1
   go1.14.1
   go1.14.2
   go1.14.3

# Only install from binary
$ gvm install go1.14.3 -B

$ gvm list

gvm gos (installed)

=> go1.1 4.3
   system

# Setup default version in your machine
$ gvm use go1.14.3 --default

$ go version
go version go1.14.3 darwin/amd64

ここでは --default オプションを指定することで、シェルを再起動した際にも指定したバージョンが保持されるようにしています。

まとめ

これで GVM を使った Go の環境構築は以上です。
今後は GVM コマンドを叩くだけで、他のバージョンに簡単に変更ができるようになりました。

非常に便利なので Go を使って開発するチームやプロジェクトによって複数のバージョンを跨ぐような機会があれば導入しておくと開発が捗るのではないでしょうか。

参考にさせていただいたサイト

https://github.com/moovweb/gvm
https://nansystem.com/gvm-go-version-management/
https://qiita.com/reoring/items/7344399ca6db99d2746f