Help us understand the problem. What is going on with this article?

依存関係管理ツール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]

topgate
Google技術を中心に取り扱う技術者集団
https://www.topgate.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした