[Golang] goenvを使って複数のバージョンのGolangを使う方法

[Golang] goenvを使って複数のバージョンのGolangを使う方法

2023-04-14 hit count image

goenvを使って1つのマシンで複数のバージョンのGolangを使う方法について説明します。.

概要

Golangで色んなプロジェクトを進める時、複数のバージョンのGolangを1つのマシン(PC)で使う時があります。

今回のブログポストでは1つのマシン(PC)で色んなバージョンのGolangを使うためgoenvをインストールして使う方法について説明します。

goenv

goenvPythonpyenvRubyrbenvのように1つのマシンで色んなバージョンのGolangを使うようにしてくれるGo Version Managementです。

今回のブログポストは、macOSgoenvをインストールして使う方法について説明します。macOSGolangをインストールする方法については下記のリンクを参考してください。

goenvのインストール

次のコマンドを実行してmacOSgoenvをインストールします。

brew install goenv

インストールが完了されたら、次のコマンドを実行します。

goenv --version

問題なくインストールされたら、下記のようにgoenvのバージョンを確認することができます。

goenv 2.0.6

goenvの設定

インストールが完了されたら、問題なくgoenvを使うため.zshrcファイルを開いて下記のように修正します。

...
# go
export GOROOT="$(brew --prefix golang)/libexec"
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"
alias go=~/.goenv/shims/go

goenv version

次のコマンドを実行すると、goenvで現在設定されたGolangバージョンを確認することができます。

goenv version

そしたら次のようにgoenvで現在設定されたGolangのバージョンを確認することができます。

system (set by /Users/dev-yakuza/.goenv/version)

goenv versions

次のコマンドを実行すると、goenvを使って現在マシンにインストールされたGolangのバージョンを確認することができますし、その中で現在選択さらたバージョンが何か確認することができます。

goenv versions

そしたら下記のようにgoenvでインストールしたGolangのバージョンと現在設定されたGolangバージョンを確認できます。

* system (set by /Users/dev-yakuza/.goenv/version)

現在はgoenvを使って他のバージョンのGolangをインストールしてないので基本バージョン(system)だけ表示されて、基本バージョンが設定されたことが確認できます。

goenv install –list

次のコマンドを実行すると、インストール可能なGolangのバージョンを確認することができます。

goenv install --list

そしたら、次のようにGolangバージョンを確認することができます。

...
1.19.5
1.19.6
1.20.0
1.20rc1
1.20rc2
1.20.1

goenv install

次はgoenvを使ってインストールしたいGolangのバージョンをインストールしてみましょう。今回のブログポストでは1.20.1バージョンをインストールしてみます。新しいGolangのバージョンをインストールするため次のコマンドを実行します。

goenv install 1.20.1

そしたら次のように新しいGolangのバージョンがインストールされることが確認できます。

Downloading go1.20.1.darwin-amd64.tar.gz...
-> go1.20.1.darwin-amd64.tar.gz
######################################################################################################################## 100.0%
Installing Go Darwin 64bit 1.20.1...
Installed Go Darwin 64bit 1.20.1 to /Users/dev-yakuza/.goenv/versions/1.20.1

インストールされたら、次のコマンドを実行してうまくインストールされたか確認します。

goenv versions

そしたら次のように1.20.1バージョンのGolangがインストールされたことが確認できます。

* system (set by /Users/dev-yakuza/.goenv/version)
  1.20.1

goenv rehash

rehashgoenvに新しくインストールされたGolangのバージョンを認識される時、使うコマンドです。したがって、新しいバージョンのGolangをインストールしたら、次のようにrehashコマンドを実行する必要があります。

goenv rehash

goenv global

新しくインストールした1.20.1バージョンのGolangをグローバル(Global)で使う方法について説明します。次のコマンドを実行すると新しいGolangのバージョンを基本バージョンで設定します。

goenv global 1.20.1

次のコマンドを実行すると、新しいバージョンのGolangがうまく設定されたか確認します。

go versions

そしたら、次のように新しいGolangのバージョンがうまく設定されたことが確認できます。

  system
* 1.20.1 (set by /Users/dev-yakuza/.goenv/version)

また、次のコマンドを実行すると現在設定されたGolangのバージョンを確認することができます。

goenv version

そしたら次のようにGolangのバージョンを確認することができます。

1.20.1 (set by /Users/dev-yakuza/.goenv/version)

もちろん、基本コマンドでもGolangのバージョンを確認することができます。

go version

そしたら次のようにGolangのバージョンを確認することができます。

go version go1.20.1 darwin/amd64

goenv globalで設定したバージョンは基本バージョンで設定されます。したがって、ターミナルを終了して再起動しても常に1.20.1バージョンのGolangが使うようになります。

goenv shell

goenv shellはこのコマンドを実行したターミナルだけで特定バージョンのGolangを使えるようにします。

goenv globalとの違いを確認するため、まず下記のコマンドを実行して他のGolangのバージョンをインストールします。

goenv install 1.19.6

インストールが完了されたら、次のコマンドを実行してターミナルだけそのバージョンを使えるようにします。

goenv shell 1.19.6

次は下記のコマンドを実行してGolangのバージョンがうまく変更されたか確認します。

goenv versions

そしたら、次のようにGolangのバージョンがうまく変更されたことが確認できます。

  system
* 1.19.6 (set by GOENV_VERSION environment variable)
  1.20.1

また、次のコマンドを実行すると現在設定されたGolangのバージョンが確認できます。

goenv version

そしたら、次のようにGolangのバージョンを確認できます。

1.19.6 (set by GOENV_VERSION environment variable)

もちろん、基本コマンドでもGolangのバージョンを確認することができます。

go version

そしたら次のようにGolangのバージョンが確認できます。

go version go1.19.6 darwin/amd64

goenv shellは当該コマンドを実行したターミナルが終了されると、設定したバージョンが初期化されて、基本のGolangのバージョンが再び設定されます。つまり、ターミナルを終了して再起動すると、上でgoenv globalで設定したバージョンがアクティブになります。

goenv local

goenv localコマンドを実行すると、コマンドを実行したプロジェクト(フォルダ)では常にそのバージョンが使うようにアンリます。goenv localは次のように使えます。

goenv local 1.19.6

コマンドを実行したら.go-versionファイルが生成されて、1.19.6のバージョンが記録されることが確認できます。

また、次のコマンドを実行するとGolangのバージョンが1.19.6でうまく変更されたことが確認できます。

goenv versions
goenv version
go version

.go-versionファイルがあるフォルダでターミナルを開くと、goenvが自動でそのバージョンを認識して当該バージョンのGolangを設定します。

.go-version

goenv localで確認しましたが、.go-versionファイルを使うとそれそれのプロジェクトに合うGolangのバージョンを管理することができます。他のメンバーとGolangでプロジェクトを進むなら、.go-versionファイルを生成してバージョンを記録しておくと役に立ちます。

.go-versionファイルに記録されたバージョンが現在のマシンにインストールされてない時があります。これを確認するため.go-versionファイルを次のように修正します。

1.18.10

そしてターミナルを終了した後、再起動すると次のようなエラーメッセージを確認することができます。

goenv: version '1.18.10' is not installed (set by /Users/dev-yakuza/projects/temp/test/.go-version)

.go-versionファイルに記録されたGolangバージョンがまだインストールされてないので、エラーが発生しました。

この場合、次のコマンドを実行して.go-versionファイルに記録されたバージョンをインストールします。

goenv install

そしたら次のように.go-versionファイルに記録されたGolangバージョンがインストールされることが確認できます。

Downloading go1.18.10.darwin-amd64.tar.gz...
-> go1.18.10.darwin-amd64.tar.gz
####################################################################################################################### 100.0%####################################################################################################################### 100.0%
Installing Go Darwin 64bit 1.18.10...
Installed Go Darwin 64bit 1.18.10 to /Users/dev-yakuza/.goenv/versions/1.18.10

また、次のコマンドを実行すると、Golangのバージョンがうまく変更できたことが確認できます。

goenv versions
goenv version
go version

これで、プロジェクトを共同で開発するメンバーと同じGolangのバージョンを使うようにすることができます。

完了

これで1つのマシンで複数のGolangプロジェクトを進む時、各プロジェクトに合うGolangのバージョンを管理するためgoenvをインストールして使う方法について見てみました。Golangのバージョンが違う複薄のプロジェクトを同時に開発している場合、goenvを活用してGolangのバージョンを管理してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts