はじめに
1個だけの外部ライブラリに依存している(超かんたんな)自作ライブラリgithub.com/kwmt/combineを例に、dep
コマンドを使ってみた内容をメモしておこうと思います。
基本的な使い方
インストールと初期化
dep
のインストールは、プロジェクトルートに移動して、go getします。
$ cd $GOPATH/src/github.com/kwmt/combine
$ go get -u github.com/golang/dep/...
次のコマンドで初期化します。
$ dep init
でgithubログインを促されましたが、manifest.json
とlock.json
が作成されます。1
このとき、すでに依存ライブラリを見つけてくれていて、下記のように依存ライブラリが記述されています。2
{
"dependencies": {
"github.com/kwmt/go-utils": {
"branch": "master"
}
}
}
{
"memo": "",
"projects": [
{
"name": "github.com/kwmt/go-utils",
"branch": "master",
"revision": "7431874e8437574169c0fb50e811d790fc1ed2ab",
"packages": [
"."
]
}
]
}
依存ライブラリのダウンロード
ここまでではまだ依存ライブラリはダウンロードされてないので、
$ dep ensure -update
とします。するとvendor
ディレクトリが作成されて、そのなかに依存ライブラリがダウンロードされます
$ ls vendor/github.com/kwmt/
go-utils
状態を確認
dep status
コマンドは、プロジェクトの依存関係の状態を見ることが出来ます。
$ dep status
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/kwmt/go-utils branch master branch master 7431874 7431874 1
おまけ
-v
オプションで詳細なログを出力
$ dep init -v
dep: Finding dependencies for "github.com/kwmt/combine"...
dep: Found 1 dependencies.
dep: Building dependency graph...
dep: Package "github.com/kwmt/combine", analyzing...
dep: Package "github.com/kwmt/combine" has import "github.com/kwmt/go-utils", analyzing...
dep: Analyzing transitive imports...
dep: Analyzing "github.com/kwmt/go-utils"...
dep: Writing manifest and lock files.
$ dep ensure -update -v
Root project is "github.com/kwmt/combine"
1 transitively valid internal packages
1 external packages imported from 1 projects
✓ select (root)
| ? attempt github.com/kwmt/go-utils with 1 pkgs; 1 versions to try
| | try github.com/kwmt/go-utils@master
| ✓ select github.com/kwmt/go-utils@master w/1 pkgs
✓ found solution with 1 packages from 1 projects
Solver wall times by segment:
b-list-pkgs: 136.094407ms
b-source-exists: 84.013757ms
b-gmal: 1.874825ms
select-root: 90.984µs
new-atom: 57.145µs
select-atom: 36.776µs
other: 22.698µs
satisfy: 14.206µs
b-list-versions: 5.215µs
TOTAL: 222.210013ms
wercker.yml
wercker.ymlでの依存ライブラリダウンロードはこんな感じでよさそう
build:
steps:
- setup-go-workspace
# Gets the dependencies
- script:
name: go get
code: |
go get -u github.com/golang/dep/...
dep ensure -update -v
github.com/sdboyer/gps
depのソースを軽く見ていたら、依存解決のメインはgithub.com/sdboyer/gpsというライブラリでやってるみたいですね。
注意
READMEにもありますが、manifest.json
とlock.json
ファイルのフォーマットはまだ確定ではなく、変更される可能性があるとのこと。