goenv: ローカルのGoバージョンを柔軟に切り替えるツールの導入
tfenvの導入記事でも書いたが、個人的にはすべてのプログラミング言語のローカルバージョンはxenvを導入した方がよいと考えているので、Goについてもgoenvを導入する。
(ちなみにxenv以外にバージョン管理ツールとしてgvmのようなxvmシリーズもある)
インストール
goenvの導入はMacのhomebrewユーザの場合、以下のコマンドを発行するだけでよい。
$ brew install goenv
なお、tfenvはtfenv list-remote
を実行すると、常に最新の利用可能なバージョンを表示してくれるのに対して、goenvはbrew upgrade goenv
でバージョンアップを行わないと、利用可能なGoバージョンが古いままの状態となるため、利用の際は常にbrew upgradeを実行する必要がある。
(goenvはpyenvのクローンとGithubのREADME.mdに書いているが、最近シリコン搭載Macに両方をインストールしたところ、pyenvの導入だけRosetta関連で結構ハマったことからも、xenvは微妙に挙動が異なることを留意する必要がある)
goenvのインストールが完了したら、goenvにパスを通す必要がある。
Bashを使用している場合、以下の手順で設定を行う。
(シリコン搭載Mac使い始めたので、いい加減zsh使った方がいいような気がする此の頃)
$ vi ~/.bash_profile
...
# 以下の設定を追加
export GOENV_ROOT=$HOME/.goenv
export PATH=$GOENV_ROOT/bin:$PATH
eval "$(goenv init -)"
# 設定の変更をロード
$ source ~/.bash_profile
インストール可能なGoバージョンをリスト表示するコマンドは以下になる。
$ goenv install -l
...
1.20.13
1.21.0
1.21.1
1.21.2
1.21.3
1.21.4
1.21.5
1.21.6
1.21.7
1.22.0
現時点では1.22.0バージョンが最新なので、このバージョンを以下のコマンドでインストールしてみる。
$ goenv install 1.22.0
$ goenv global 1.22.0
$ go version
go version go1.22.0 darwin/amd64
インストール済みのGoバージョンの一覧は以下のコマンドで確認できる。
$ goenv versions
上記の手順でローカルのGoのバージョンは1.22.0となるが、xenvは大抵特定のディレクトリ配下で別のバージョンに切り替える機能を持つ。
特定のディレクトリ(プロジェクト)配下で別のGoバージョンを使用したい場合は以下のようにgoenv localコマンドを実行する。
# 検証用に別のGoバージョンをインストール
$ goenv install 1.21.5
# globalで使用されているバージョンは1.22.0
$ cd /tmp/
$ go version
go version go1.22.0 darwin/amd64
# 以下のコマンドを実行すると.go-versionファイルが生成され、コマンドを実行したディレクトリ配下のGoバージョンが切り替わる
$ goenv local 1.21.5
$ cat .go-version
1.21.5
$ go version
go version go1.21.5 darwin/amd64
# .go-versionファイルを削除するとglobalのバージョンに戻る
$ rm .go-version
$ go version
go version go1.22.0 darwin/amd64
おわり
今調べてみるとgoenvには知らないコマンドが大量にあったが、xenvは最低限バージョンの切り替えさえ出来るようになれば十分なので、ドキュメントをしっかり読んでいない。
それでも上記のコマンドだけで、Goの開発環境をかなり改善できる。
Discussion