依存関係管理ツールdep(golang)

  • 14
    Like
  • 0
    Comment

皆さんこんにちは、Janです。最近シンプルなGo言語にハマって学び始めました。初めてのブログでGoのパッケージ管理ツールについて説明します。

dep とは

npmのようなパッケージ管理・依存関係管理ツールです。

dep と go getの違い

depgo getは類似のことをやっていますが、違う目的で使用されています。

ではそれらの違いを見てみましょう。

  • go get
    • 自分のgoプロジェクトに外部パッケージを取得することで作業できるようになり、それ全てが$GOPATH/src/github.com/の下にダウンロードかつインストールされて共有で使用できるようになります。
  • dep
    • 自分のコードに依存関係を使いたいなら、それをダウンロードして使用することができます。
      ワークフローとして,コードにインポートを追加して、dep ensureコマンドで実行することによってGopkg.toml,Gopkg.lock,vendorが更新されます。vendorディレクトリ下にダウンロードされ、同じプロジェクトの皆んなで安全に確保された同じ依存関係のバージョンが使用できるようになります。

depの使い方

depのインストール

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

depコマンドの説明

$ dep help
dep is a tool for managing dependencies for Go projects

Usage: dep <command>

Commands:

  init    Initialize a new project with manifest and lock files
  status  Report the status of the project's dependencies
  ensure  Ensure a dependency is safely vendored in the project
  prune   Prune the vendor tree of unused packages

Examples:
  dep init                          set up a new project
  dep ensure                        install the project's dependencies
  dep ensure -update                update the locked versions of all dependencies
  dep ensure github.com/pkg/errors  add a dependency to the project

Use "dep help [command]" for more information about a command.

上記英語の説明文を日本語に翻訳したらもっとわかりやすいかもしれません。

$ dep help
depはGoプロジェクトを管理するための一つのツールです。

使い方:dep <コマンド>

コマンド:

  init    プロジェクトを初期化し、マニフェストファイル「Gopkg.toml」とロックファイル「Gopkg.lock」ファイルが生成されます。

  status  プロジェクトの依存関係のステータス(状況)を報告します。

  ensure  依存関係がプロジェクトで安全に確保されているかを確認します。
  prune   未使用のパッケージの依存関係を削除します。

例:
  dep init                          新しいプロジェクトをセットアップ
  dep ensure                        プロジェクトの依存関係をインストール
  dep ensure -update                全ての依存関係のバージョンを更新
  dep ensure github.com/pkg/errors  プロジェクトに依存関係を追加

新しいプロジェクトを作成

$ mkdir $GOPATH/src/github.com/trydep

プロジェクトを初期化

  • 新しく作成したプロジェクトtrydep内で実行するコマンドです。
$ dep init

dep initコマンドで実行することによってプロジェクト内にGopkg.tomlマニフェストファイルとGopkg.lockロックファイルとvendorディレクトリが生成されます。

  • Gopkg.toml

    • このファイルが編集することができ、アプリケーションの直接的な依存関係のリストとそれらをどこで取得するかが含まれています。
  • Gopkg.lock

    • このファイルはマニフェストから生成され、アプリケーションのコードを解析します。アプリケーションの直接的と遷移的な依存関係のリストが含まれています。ロックファイルの各依存関係には、どのリビジョンを使用すべきかを明確に示すための特定のSHAがあります。
  • vendor

    • 全てのパッケージがこのディレクトリ下にインストールされます。

golangのColor(カラー)パッケージをインストール

  • 新しいmain.goファイルを作成してその中にcolorパッケージをインポートしてみましょう。
package main

import "github.com/fatih/color"

func main() {
    color.Red("赤")
    color.Cyan("青緑")
    color.Blue("青")
    color.Magenta("紫")
}
  • まだgithub.com/fatih/colorパッケージをインストールしていないので、赤い波線が表示されると思います。では、早速インストールしましょう。

パッケージのインストール

$ dep ensure
  • dep ensureコマンドを実行するとインポートしたいパッケージがvendorディレクトリ下にインストールされ、Gopkg.tomlファイルとGopkg.lockファイル内にリストが追加されます。ご確認ください。

参考URL

[1]Go dependency management tool, sdboyer, (最終閲覧日:2017年9月13日)
[https://github.com/golang/dep]
[2]dep Coming to Unify Package Management in Go, Tony Wong, (最終閲覧日:2017年9月13日)
[http://engineering.pivotal.io/post/go-dep-intro/]
[3]Go開発環境構築(VSCode, gvm, delve, dep)からHello Worldするまで, B.C.Rikko, (最終閲覧日:2017年9月13日)
[http://kuroeveryday.blogspot.jp/2017/08/golang-hello-world.html]
[4]初窥dep, Tony Bai, (最終閲覧日:2017年9月13日)
[http://tonybai.com/2017/06/08/first-glimpse-of-dep/]
[5]Color package for Go (golang), fatih, (最終閲覧日:2017年9月13日)
[https://github.com/fatih/color]