はじめに
Macデビューしたのに当たって、Goの開発環境構築を"goenv"を使って行ったので、そのまとめです。
goenvとは?
goenvは、pyenvから複製されたGo用のバージョン管理ツールです。
プロジェクトに応じて、GoのVersionを変更がある場合などに、Versionを切り替えて開発をすることができます。
goenvのインストール
まずはgoenv
をインストールする前にhomebrewをアップデートします。
$ brew update
アップデートが終了したら、次にgoenv
をインストールしていきますが、最新のgoのVersionをインストールしたい場合は、HEAD
をオプションにつけた方が良いです。
(ちなみに後からでもgoenvのリポジトリを最新にすることは可能です。)
$ brew install --HEAD goenv
goenv
がインストールできたら、~/.bash_profile
に下記の設定を追加します。
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
これでTerminalからgoenv
がコールできるようになっているはずなので、Version
を確認します。
設定が有効になっていない場合があるので、その場合はShellの再起動を行って設定を有効にします。
$ exec $SHELL
ここまで実行したら、goenvのVersionを確認します。
$ goenv --version
goenv 2.0.0beta11
Version情報が表示されれば、goenvの準備は完了です。
Goのインストール
次にgoをインストールしていきます。
今回は、私事で1.13.0で開発をする必要があるため、このVersionをインストールしていきます。
まずは対象のVersionがリポジトリで管理されているかを調べます。
$ goenv install -l
.
.
.
1.13.0
1.13beta1
1.13rc1
.
.
インストールする対象のVersionが見つかったら、goenv
を介してgoをインストールします。
と言っても、ここまで来てしまえば、後は対象のVersionを指定するだけで、インストールが始まります。
$ goenv install 1.13.0
Goの環境設定
最後に使用するGoの設定を行います。
今回は先ほどインストールした1.13.0を使用するので、それを設定していきます。
まずは先ほど、インストールしたVersionがLOCAL環境に存在しているか確認します。
$ goenv versions
1.13.0
上記のように表示されればOKです。ですが、このままではLOCAL環境でGoを使うことができないので、対象となるVersionを指定して、Goを使える状態にしていきます。
まずは全体に適用するGoのVersionを指定します。
$ goenv global 1.13.0
文字通り、goenv global
を指定することで、対象のVersionを設定することができます。
初回の設定では、$GOPATH
,$GOROOT
の設定が出来ていないので、設定を追加します。
...
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"
上記を追加したら、.bash_profileを再度読み込みます。
$ source .bash_profile
最後にGoのVersionが確認できれば、インストールは終了です。
$ go version
go version go1.13 darwin/amd64
【おまけ】VSCodeとGo拡張設定
ついでにVSCodeの設定も行っていきます。
必要になるのは言わずもがな、Go言語拡張。
これがないと、ほぼ何もできません。
今回使用しているgoenv
のVersionが2.0.0beta11
なのですが、下記記事にあるように、2.0.0beta6の段階で仕様変更があったようです。
そのため、今回の設定では、GOROOTを見つけられず下記のようなErrorが出力されます。
この状態では、当然なからGOROOTを見つけられていないので、コード補完等も全く機能しません。
このままでは、非常に不便なので、作業フォルダに存在する.vscode/settings.json
に設定を追加します。
{
"go.goroot": "~/.goenv/versions/1.13.0"
}
上記のように明示的に$GOROOTのパスを宣言することで、コード補完がされるようになります。
後はVSCodeを再起動して、再度作業ディレクトリを開きコード補完がされていることを確認します。