gvmでバージョン管理

プロジェクトごとにgoのバージョンを切り替えたい時、gvm(Go Version Manager)が便利です。

ここでは「Macにgvmをインストールする方法」「gvmの使い方」を紹介します。

目次

利用準備

Macのみの準備

MacOSXの要件に記載されいている通り、以下コマンドを実行します。

xcode-select --install
brew update
brew install mercurial

gvmのインストール

シェルにzshを利用しています。

$ echo $SHELL
/bin/zsh

zshの場合、以下のようにインストールできます。

$ zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Cloning from https://github.com/moovweb/gvm.git to /Users/user_name/.gvm
No existing Go versions detected
Installed GVM v1.0.22

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

~/.zshrc の最後の行に以下行が追記されました。

[[ -s "/Users/user_name/.gvm/scripts/gvm" ]] && source "/Users/user_name/.gvm/scripts/gvm"

ターミナルを再起動すると gvmコマンド を利用できるようになります。

$ gvm help
Usage: gvm [command]

Description:
  GVM is the Go Version Manager

Commands:
  version    - print the gvm version number
  get        - gets the latest code (for debugging)
  use        - select a go version to use (--default to set permanently)
  diff       - view changes to Go root
  help       - display this usage text
  implode    - completely remove gvm
  install    - install go versions
  uninstall  - uninstall go versions
  cross      - install go cross compilers
  linkthis   - link this directory into GOPATH
  list       - list installed go versions
  listall    - list available versions
  alias      - manage go version aliases
  pkgset     - manage go packages sets
  pkgenv     - edit the environment for a package set

gvmの使い方

インストールできるバージョンを確認

gvm listall でインストールできるバージョンを確認できます。

$ gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   go1.1
   go1.1rc2
   go1.1rc3
   :

バージョン指定でgoをインストール

M1 Mac を利用してるのですが、以下コマンドを実行したところ、ERRORになりました。

$ gvm install go1.16.15 -B
Installing go1.16.15 from binary source
ERROR: Binary Go unavailable for this platform
$ 
$ gvm install go1.17.5 -B 
Installing go1.17.5 from binary source
ERROR: Binary Go unavailable for this platform

こちら を参考に、以下のようにしたら成功しました。

$ brew install go
==> Downloading https://ghcr.io/v2/homebrew/core/go/manifests/1.18
######################################################################## 100.0%
    :
$ 
$ gvm install go1.16.15   
Installing go1.16.15...
 * Compiling...
go1.16.15 successfully installed!
$ 
$ gvm use go1.16.15 --default
Now using version go1.16.15
$ 
$ go version          
go version go1.16.15 darwin/arm64

その後、brewでインストールしたgoをuninstallしても、別バージョンのgoをインストールすることができました。

$ brew uninstall go          
Uninstalling /opt/homebrew/Cellar/go/1.18... (11,947 files, 595.3MB)
$ 
$ gvm install go1.17.5   
Installing go1.17.5...
 * Compiling...
go1.17.5 successfully installed!

1.16.15 と 1.17.5 をインストールしましたが、以下のように、バージョンごとにフォルダが生成されていました。

$ ls ~/.gvm/gos 
go1.16.15       go1.17.5

利用するgoのバージョンを切り替え

現在、go1.16.15 を利用しています。

$ gvm list

gvm gos (installed)

=> go1.16.15
   go1.17.5
$ 
$ echo $GOPATH
/Users/user_name/.gvm/pkgsets/go1.16.15/global
$ 
$ echo $GOROOT
/Users/user_name/.gvm/gos/go1.16.15
$ 
$ go version
go version go1.16.15 darwin/arm64
$
$ which go
/Users/user_name/.gvm/gos/go1.16.15/bin/go

1.17.5 に切り替えてみます。

$ gvm use go1.17.5 --default 
Now using version go1.17.5
$ 
$ gvm list                  

gvm gos (installed)

   go1.16.15
=> go1.17.5

$ 
$ echo $GOPATH
/Users/user_name/.gvm/pkgsets/go1.17.5/global
$ 
$ echo $GOROOT
/Users/user_name/.gvm/gos/go1.17.5
$ 
$ go version
go version go1.17.5 darwin/arm64
$ 
$ which go
/Users/user_name/.gvm/gos/go1.17.5/bin/go

参考

よかったらシェアしてね!
目次