【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)