質問: ### 前提・実現したいこと macOSで`Go 1.7`+`ATOMエディタ`+`go-plus`+`project-manager`を使い、 Go開発を行う際、プロジェクト別にGOPATH, GOBIN, PATHを設定したい。 記載のものは全てインストール済だが、どうにもProject別にGOPATH、GOBINの変更ができない状態。 ATOMエディタで`$HOME/godev/projectA/`の中では、環境変数を次のようにしたい。 ---------------------------------------------------- ``` export GOPATH=/home/moonphase/go:/home/moonphase/godev/projectA/go export GOBIN=/home/moonphase/go/bin:/home/moonphase/godev/projectA/go/bin export PATH=...(内容省略):/home/moonphase/go/bin:/home/moonphase/godev/projectA/go/bin ``` `$HOME/godev/projectB/`の中では、環境変数を次のようにしたい。 ------------------------------------------- ``` export GOPATH=/home/moonphase/go:/home/moonphase/godev/projectB/go export GOBIN=/home/moonphase/go/bin:/home/moonphase/godev/projectB/go/bin export PATH=...(内容省略):/home/moonphase/go/bin:/home/moonphase/godev/projectB/go/bin ``` その他実現したいこと詳細 ------------- ATOMプラグイン、`project-manager`を利用して、`script`や`atom-runner`でそれぞれプロジェクト別に`go run`した時に上記環境変数が効いている状態にしたい。 ATOMエディタでは `projectA`、`projectB`を開いている。それぞれを行ったり来たりするが、そのタイミングで切り替えたい。 具体的な操作と期待する動作 -------------- `projectA/main.go`を開いたタイミングで先に書いたprojectA用の環境変数が設定され、`go run`できること。 そのまま`projectB/main.go`を開くと、先に書いたprojectB用の環境変数が設定され、`go run`できること。 現在のGo言語開発環境のディレクトリ構成 --------------------- ``` $HOME/godev/projectA/ +- go/ +- bin/ $HOME/godev/projectB/ +- go/ +- bin/ ``` 現在の`$HOME/.bash_profile`の内容 ---------------------------- ``` export GOPATH=$HOME/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOPATH/bin ``` 試したこと ------ ### 1. ATOMプラグイン`atomenv`でやってみたこと ATOMプラグイン`atomenv`はATOMコマンド`atomenv:load`を実行してもプロジェクト配下の`.atomenv.cson`を読み込んでくれない。 ### 2. ATOMプラグイン`env-from-shell`でやってみたこと `env-from-shell`の設定で`Variables`に`PATH, GOPATH, GOBIN`を指定。 projectAを開いた状態で`env-from-shell:copy`を実行しても環境変数は設定されない。 ### 3. ATOMプラグイン`000-project-shell-env`でやってみたこと `projectA`の環境変数は設定されたが、プロジェクトを`projectB`に切り替えても環境変数に変更なし。また、`$HOME/.atom/project.cson`から`projectA`の設定を消しても毎回なぜか`projectA`, `projectB`がATOM上に表示される。 `projectA`のフォルダを削除すると、勝手に一つ上のディレクトリ`godev`がプロジェクトに表示された。 どこかに`projectA`の設定が残ってる? それとも自動でプロジェクトが読み込まれてる? 動作が謎。 一旦全てのプロジェクト情報を削除し、ATOMエディタを再起動。 `projectA`だけが見える状態で、ここからプロジェクトを開くで`ProjectB`を開くと新しいATOMの画面が起動し、`projectB`の環境変数と共に起動。 元々の`projectA`も期待する環境変数となっている。 複数のプロジェクトが設定されている状態でこのプラグインを使うと予期しない動作になるのか? 少しやりたいことに近づいたが、一つのATOMウインドウで環境変数を切り替えることはできないのか・・・ その他補足情報 -------- `direnv`を導入済で、bashで `cd $HOME/godev/projectA`すると期待する環境変数が設定されている。 一番連携したいのは`direnv` ------------------ `direnv`と連携できるならそれが設定が集約できるので一番望ましいが設定方法が不明。 似たような解決方法でもいいのでアドバイスいただけますか。
回答: > > 3. ATOMプラグイン`000-project-shell-env`でやってみたこと > > > これもなんだか不安定、ATOMを起動したタイミングでプロジェクトが開いても、環境変数が設定されていない場合がある。 その後色々格闘したり調べたり、ある程度見えてきた。 結論:一つのATOMウインドウで複数のプロジェクト毎の環境変数は扱えない ### .bashrcの設定 これがいいっぽい。GOBINは設定するのやめた。 ``` export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin ``` ### projectAの設定 ``` $ cd $HOME/godev/projectA $ direnv edit . 以下の内容にする export GOPATH=$PWD:$GOPATH export PATH=$PWD/bin:$PATH ``` ### projectBの設定 ``` $ cd $HOME/godev/projectB $ direnv edit . 以下の内容にする export GOPATH=$PWD:$GOPATH export PATH=$PWD/bin:$PATH ``` ### `projectA`と`projectB`を開く(それぞれ別窓) 以下のように実行することで、カレントをプロジェクトとしてATOMを起動する。 ``` $ cd $HOME/godev/projectA $ atom . $ cd $HOME/godev/projectB $ atom . ``` これでそれぞれのATOMで別環境変数が設定されて動作する。 一旦これで良しとします。