2017年10月12日木曜日

golang 純正のパッケージ管理ツール「dep」を使ってみた

概要

golang 純正のパッケージ管理ツールである dep を使ってみました
ruby で言うところの gem、python で言うところの pip という感じでしょうか

環境

  • macOS X 10.12.6
  • golang 1.9.1
  • dep devel

dep のインストール

  • brew install dep

で今回はインストールしました
homebrew が使えない場合は go get でもインストール可能です

  • go get -u github.com/golang/dep/cmd/dep

GOPATH 配下に作業ディレクトリを作成する

今回 GOPATH は /Users/hawksnowlog/go/ とします
この配下に作業ディレクトリを作成します

  • mkdir -p /Users/hawksnowlog/go/src/github.com/hawksnowlog/dep-test
  • cd /Users/hawksnowlog/go/src/github.com/hawksnowlog/dep-test

初期化

  • dep init

とすると dep 関連のファイルが自動で生成されます

  • Gopkg.lock
  • Gopkg.toml
  • vendor/

Gopkg.toml ファイルに依存パッケージを記載していきます

テスト用のコード

以下を使います
logrus というロギング用のライブラリを使っています

  • vim main.go
package main

import (
        log "github.com/Sirupsen/logrus"
)

func main() {
        log.WithFields(log.Fields{
                "key": "value",
        }).Info("logrus test")
}

依存パッケージを追加する

今回はとりあえず 1 つだけ追加してみます

  • dep ensure -add github.com/Sirupsen/logrus

Gopkg.toml に以下のように定義が追加されていると思います

  • cat Gopkg.toml
[[constraint]]
  name = "github.com/Sirupsen/logrus"
  version = "1.0.3"

パッケージをインストールする

  • dep ensure

と実行すると Gopkg.toml に記載されたパッケージが vendor/ 配下にインストールされます
確認は dep status で確認できます

  • dep status
PROJECT                     CONSTRAINT  VERSION        REVISION  LATEST   PKGS USED
github.com/Sirupsen/logrus  ^1.0.3      v1.0.3         f006c2a   f006c2a  1  
golang.org/x/crypto         *           branch master  9419663   9419663  1  
golang.org/x/sys            *           branch master  ebfc5b4   ebfc5b4  2  

簡単です

動作確認

  • go build
  • go install
  • dep-test

と実行すると以下のようにログが表示されると思います

INFO[0000] logrus test                                   key=value

追加してもコード内で使用されていないと vendor/ 配下には配置されない

試しに使っていないパッケージを追加してみます

  • dep ensure -add github.com/astaxie/beego

まず使っていないパッケージを追加しようとすると警告が出ます

"github.com/astaxie/beego" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/.
If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.

ただ、Gopkg.toml には記載されています

[[constraint]]
  name = "github.com/astaxie/beego"
  version = "1.9.0"

この状態でインストールして確認してみましょう

  • dep ensure
  • dep status

しても先ほどと結果は変わらないです
このように dep はコード内で使用しているパッケージだけを vendor` 配下にインストールしてくれるようです

ちなみに dep で追加したけど使用されていないパッケージは

  • /Users/hawksnowlog/go/pkg/dep/sources/https---github.com-astaxie-beego/

配下にあるようです

最後に

go 純正のパッケージ管理ツール dep を使ってみました
昔は toml ファイルではなく Json ファイルで管理していたようです
dep を使用するには golang のバージョンも 1.8 以上が必要になります

dep は import で参照しているライブラリを管理しているリポジトリにアクセスできる必要があります
今回は Github 上で公開されているライブラリだったので特に問題ないですが例えばプライベートなリポジトリや IP などでアクセス制限をしているライブラリに関しては dep を実行するサーバからもアクセスできる必要があるのでご注いください

参考サイト

0 件のコメント:

コメントを投稿