【Go】direnvとglideで開発環境構築してパッケージ管理
はじめに
開発始めようとして以下が問題があったので整理しておく。
前提条件としては以下
・複数人での開発で各々のPCで開発を想定
・コードはgitで管理
で、サードパーティのパッケージをどう管理するかとういのが問題点でした。
そのままやると$GOPATH以下に全て入ってしまい管理できない
go getするシェルスクリプトを共有してもできなくはないけど、ちょっときついかな。。。
で、探した結果以下のツールを使えばよいみたいでした
・direnv : ディレクトリごとに環境変数を切り替えられる
・glide : 必要なパッケージをyaml形式の設定ファイルを管理できる
両方ともhomebrewでインストールできた
direnvを使う
インストール
$ brew install direnv
~/.bashrcに以下を追加(エディタはなんでもOK)
export EDITOR=vi eval "$(direnv hook bash)"
ちなみに上記の設定がないと後で以下のエラーで怒られる
$ direnv edit . direnv: $EDITOR not found. The file /path/to/project/.envrc does not exist. direnv: error exit status 1
環境変数設定
$ cd /path/to/project $ direnv edit . 〜指定したエディタで.envrcが開かれるので以下を追記 export GOPATH=`pwd` export GO15VENDOREXPERIMENT=1 $ direnv allow # .envrc編集後にエラーが出たらこれを
ここまででディレクトリごとに$GOPATHが設定できるようになった
glideを使う
ちなみに最終的なディレクトリ構成
(これが頭に入ってなくてやってたので上手くいかなかった)
$ tree /path/to/project/ -L 3 /path/to/project/ └── src ├── glide.lock ├── glide.yaml ├─app │ └── main.go └── vendor ├── github.com └── golang.org
インストール
$ brew install glide
アプリを作る(今回はWebフレームワークEchoのHello worldで)
vi src/app/main.go
package main import ( "net/http" "github.com/labstack/echo" ) func main() { e := echo.New() e.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") }) e.Logger.Fatal(e.Start(":1323")) }
glideを使う
$ cd src $ glide create $ glide up
ここまでで
glide.lock、glide.yamlが生成されるのでこれを共有。
vendorが作られてパッケージが入るのでこちらは管理対象外とする(各々でglide up)