gvmを用いてRevelの開発環境を作成

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