RevelのGOPATH問題
Goのフレームワーク Revel を用いた開発では作成するアプリケーションを$GOPATH上に配置しなくてはいけない。 好きなファイルパス上でアプリケーションを開発したい場合、都度$GOPATHを切り替えないといけないのはちょっと面倒くさい。そこで gvm(Go Version Manager) のpkgset機能を用いて簡単に$GOPATHを管理し好きなディレクトリで開発できるようにする。
gvmはRubyのRVMと同様のもので複数のGoのバージョンのインストールや切り替えを手軽にできるようにするツール。
ちなみにMacでのみ動作を確認。
gvmのインストール
以下のコマンドを実行するだけ。
$ bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
Goのインストール
インストール可能なGoのバージョンを確認するには以下のコマンドで。
$ gvm listall
gvm gos (available)
go1
go1.0.1
go1.0.2
go1.0.3
go1.1
go1.1.1
go1.1.2
go1.1rc2
go1.1rc3
go1.2
go1.2rc2
go1.2rc3
go1.2rc4
go1.2rc5
release
release.r56
release.r57
release.r57.1
release.r57.2
release.r58
release.r58.1
release.r58.2
release.r59
release.r60
release.r60.1
release.r60.2
release.r60.3
指定したバージョンのGoをインストールする。 今回は今現在(2014/2/24)の最新の安定版v1.2をインストールすることにする。
$ gvm install go1.2
現在インストールされているGoのバージョンを確認するには以下のコマンドで。
$ gvm list
gvm gos (installed)
=> go1.2
使用するGoのバージョンを設定するのは以下のコマンドで。 上でインストールしたGoのバージョンを指定する。
$ gvm use go1.2
Now using version go1.2
pkgsetの作成
以下のように普通に名前を付けてpkgsetを作成しそれを使用するように設定すると…
$ gvm pkgset create sample_app
$ gvm pkgset use sample_app
以下のように$GOPATHは以下のように設定されてしまう。
$ echo $GOPATH
/Users/minoru/.gvm/pkgsets/go1.2/sample_app:/Users/minoru/.gvm/pkgsets/go1.2/global
この状態でRevelアプリケーションを作成してしまうと…
$ go get github.com/robfig/revel
$ revel new sample_app
~
~ revel! http://robfig.github.com/revel
~
Your application is ready:
/Users/minoru/.gvm/pkgsets/go1.2/sample_app/src/sample_app
You can run it with:
revel run sample_app
のようになってしまい好きな場所でアプリケーションを作成できない。
そこでローカルにpkgsetを作成する。まず好きなディレクトリに移動する。
$ cd ~/Projects/sample_app
そこでpkgsetを作成する。今度は名前を指定せずに--localオプションを付けて作成する。
$ gvm pkgset create --local
そうすると今いるディレクトリに.gvm_localというディレクトリが作成され、以下のようにローカルパスで書かれたpkgsetが作られる。
$ gvm pkgset list
gvm go package sets (go1.2)
L /Users/minoru/tmp/sample_app
global
=> sample_app
そのローカルpkgsetを使用するように設定する。
$ gvm pkgset use --local
Now using version go1.2 in local package set
Local GOPATH is now /Users/minoru/tmp/sample_app/.gvm_local
こうすると今いるディレクトリ$GOPATHに設定される。
$ echo $GOPATH
/Users/minoru/tmp/sample_app:/Users/minoru/tmp/sample_app/.gvm_local/pkgsets/go1.2/local:/Users/minoru/.gvm/pkgsets/go1.2/global
この状態でRevelアプリケーションを作成すると、今いるディレクトリにアプリケーションが作成されるようになる。
$ go get github.com/robfig/revel
$ revel new sample_app
~
~ revel! http://robfig.github.com/revel
~
Your application is ready:
/Users/minoru/tmp/sample_app/src/sample_app
You can run it with:
revel run sample_app
$ tree
.
└── src
└── sample_app
├── app
│ ├── controllers
│ │ └── app.go
│ ├── init.go
│ └── views
│ ├── App
│ │ └── Index.html
│ ├── debug.html
│ ├── errors
│ │ ├── 404.html
│ │ └── 500.html
│ ├── flash.html
│ ├── footer.html
│ └── header.html
├── conf
│ ├── app.conf
│ └── routes
├── messages
│ └── sample.en
├── public
│ ├── css
│ │ └── bootstrap.css
│ ├── img
│ │ ├── favicon.png
│ │ ├── glyphicons-halflings-white.png
│ │ └── glyphicons-halflings.png
│ └── js
│ └── jquery-1.9.1.min.js
└── tests
└── apptest.go
これでgvmの$GOPATH管理機能を使いつつ好きなディレクトリでRevelアプリを開発できるようになった。
めでたしめでたし。
Comments
comments powered by Disqus