Edited at

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

More than 1 year has passed since last update.

皆さんこんにちは、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ファイル内にリストが追加されます。


現在プロジェクトの状態確認

$ dep status

PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/aziz819/jankenGame * branch master 62ab977 62ab977 1
github.com/fatih/color * v1.5.0 570b54c 507f605 1
github.com/mattn/go-colorable * v0.0.9 167de6b 167de6b 1
github.com/mattn/go-isatty * v0.0.2 fc9e8d8 0360b2a 1
golang.org/x/crypto * branch master 91a49db 91a49db 1
golang.org/x/sys * branch master 062cd7e f6cff07 2


  • 最後にdep statusコマンドを実行することで、使う目的のパッケージなどが足りていないかどうかとプロジェクトの依存関係の状態が確認できます。ご確認ください。


参考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]