Goでdirenvを使って環境変数を管理する

環境ごとに環境変数を管理する場合にdirenvを使う。 github.com

まずは準備。

// direnvをクローン
$ git clone git@github.com:direnv/direnv.git

// テスト用ディレクトリを作成
$ mkdir go_test1
$ cd ..
$ mkdir go_test2
$ cd ..

go_test1 ディレクトリに環境変数を設定する。

$ cd ~/.go/go_test1

// 環境変数を定義
$ cat << EOC > ~/.go/go_test1/.envrc
export PATH=~/.go/go_test1/bin:$PATH
export GOPATH=~/.go/go_test1
export GOROOT=~/.goenv/versions/1.10.0/
EOC

// 反映
$ direnv allow

すると

$ go env

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/acquapazza/.go/go_test1"
GORACE=""
GOROOT="/Users/acquapazza/.goenv/versions/1.10.0"
GOTOOLDIR="/Users/acquapazza/.goenv/versions/1.10.0/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/83/z4bx6l3943q230cjlwgj94lw0000gn/T/go-build290636774=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

go_test2 ディレクトリに環境変数を設定する。

$ cd ~/.go/go_test2

// 環境変数を定義
$ cat << EOC > ~/.go/go_test2/.envrc
export PATH=~/.go/go_test2/bin:$PATH
export GOPATH=~/.go/go_test2
export GOROOT=~/.goenv/versions/1.9.2/
EOC

// 反映
$ direnv allow

すると

$ go env

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/acquapazza/.go/go_test2"
GORACE=""
GOROOT="/Users/acquapazza/.goenv/versions/1.9.2"
GOTOOLDIR="/Users/acquapazza/.goenv/versions/1.9.2/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/83/z4bx6l3943q230cjlwgj94lw0000gn/T/go-build290636774=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

go_test1go_test2環境変数を分けて管理することができました。