🐡

goenv: ローカルのGoバージョンを柔軟に切り替えるツールの導入

2024/02/12に公開

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