Go言語 / golang 入門 必見!! パッケージ管理ツール Glideの使用方法を詳しく解説

f:id:nasust:20161122141513p:plain The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) CC3.0

こんにちはnasustです。今回はGo言語 / golangのパッケージ管理で一番人気のあるGlideの使用方法を解説します。またGlideを使用したプロジェクトのサンプルを使用して解説します。



Glideとは

GitHub - Masterminds/glide: Package Management for Golang

glideとは、goのプロジェクトに依存するパッケージを管理するツールです。依存するパッケージはvendorディレクトリにインストールされます。プロジェクトのソースとvendorディレクトリに分けることによりgithubのプロジェクトに依存パッケージを含めない様に出来ます。

依存パッケージは、yamlで記述して管理します。依存パッケージのバージョンを指定することができるので、バージョンアップによるビルドの失敗を防げます。

インストール方法

MacまたはLinuxにインストールする場合は以下の通りです。

curl https://glide.sh/get | sh

homebrewでインストールする場合は以下の通りです。

$ brew install glide

使い方

$ glide create                            # 新しいワークスペースを開始します
$ glide get github.com/Masterminds/cookoo # パッケージを入手してglide.yamlに追加する
$ glide install                           # パッケージと依存関係をインストールする
$ glide up                                # パッケージの最新バージョンへのアップデート

ビルドは通常のgo buildを使用します。

glide.yaml

glide createを実行するとglide.yamlが作成されます。 今回はサンプル用のプロジェクトのglide.yamlを参考に解説します。 サンプル用のプロジェクトはGitHub - nasust/go-cli-tweet: Glide Sample Projectにあります。

package: github.com/nasust/go-cli-tweet
homepage: https://github.com/nasust/go-cli-tweet
license: MIT
owners:
- name: nasust
  email: nasust@gmail.com
  homepage: http://nasust.hatenablog.com
import:
- package: github.com/ChimeraCoder/anaconda
- package: github.com/urfave/cli
  version: ^1.19
- package: github.com/ChimeraCoder/tokenbucket

package

プロジェクトのパッケージを指定します。

homepage

プロジェクトのホームページのURLを指定します。

license

ライセンスの種類を書きます。

owners

プロジェクトのオーナー情報を書きます.

  • name ・・・名前を書きます
  • email ・・・ emailアドレスを書きます
  • homepage ・・・オーナーのホームページのURLを書きます。

import

プロジェクトの依存パッケージを書きます。

  • package・・・パッケージのパスを書きます
  • version・・・パッケージのバージョンを指定します。^はインストールするバージョンの範囲を指定しています。

依存パッケージのバージョンコントロール

サンプルのyamlのように^1.19という書き方で、1.19以上、2.0未満までのパッケージをインストールするという指定が出来ます。

書き方は以下の通りです。

演算子

単純な範囲は > 1.2.3の形式です。これはGlideに 1.2.3の後の最新バージョンを使用するように指示します。 Glideは以下の演算子をサポートしています:

  • =:等しい
  • =:等しくない
  • >:より大きい
  • <:より小さい
  • >=:より大きいか等しい
  • <=:以下

これらを組み合わせることができます。 ,は、and演算子であり、 ||は、or演算子です。 or演算子は、演算子のグループと演算子を検査させます。たとえば、 ">= 1.2, < 3.0.0 || >= 4.2.3"となります。

範囲指定

範囲を処理するための複数のショートカットがあり、最初はハイフン範囲です。これらは次のようになります。

  • 1.2 - 1.4.5>= 1.2、<= 1.4.5に相当します
  • 2.3.4 - 4.5>= 2.3.4、<= 4.5に相当します

ワイルドカード

xX*ワイルドカードとして使うことができます。これはすべての比較演算子で有効です。 `= ‘演算子で使用すると、パッチレベルの比較に戻ります(下のチルダを参照)。例えば、

  • 1.2.x>= 1.2.0、<1.3.0と等価です
  • >= 1.2.x>= 1.2.0に相当します
  • <= 2.x<3と等価です
  • *>= 0.0.0と等価です

^

^は、大まかなバージョン変更と比較できます。メジャーバージョンアップでAPIが大きく変化する場合などで便利です。

  • ^1.2.3> = 1.2.3 <2.0.0と等価です
  • ^1.2.x> = 1.2.0 <2.0.0と等価です
  • ^2.3> = 2.3 < 3と等価です
  • ^2.x> = 2.0.0 < 3と等価です

は、マイナーバージョンが指定した範囲でバージョンコントールできます

  • 〜1.2.3> = 1.2.3、<1.3.0と等価です
  • 〜1> = 1、<2と等価です
  • 〜2.3> = 2.3、<2.4に相当します
  • 〜1.2.x> = 1.2.0、<1.3.0と等価です
  • 〜1.x> = 1、<2と等価です

glide install

サンプルのプロジェクトでglide installを実行するとvendorディレクトリに依存パッケージがインストールされます。

[INFO]Downloading dependencies. Please wait...
[INFO]--> Found desired version locally github.com/azr/backoff 53511d3c733003985b0b76f733df1f4d0095ee6a!

〜〜〜〜〜
[INFO]--> Setting version for github.com/garyburd/go-oauth to 18d3217f4d38f106335b3a2b2a08ce1c9299d009.
[INFO]--> Setting version for github.com/urfave/cli to 0bdeddeeb0f650497d603c4ad7b20cfe685682f6.
[INFO]Exporting resolved dependencies...
[INFO]--> Exporting github.com/azr/backoff
[INFO]--> Exporting github.com/ChimeraCoder/tokenbucket
[INFO]--> Exporting github.com/urfave/cli
[INFO]--> Exporting github.com/dustin/gojson
[INFO]--> Exporting github.com/ChimeraCoder/anaconda
[INFO]--> Exporting github.com/garyburd/go-oauth
[INFO]--> Exporting github.com/dustin/go-jsonpointer
[INFO]Replacing existing vendor dependencies

インストールすると指定したパッケージに依存したパッケージもインストールされます。vendor以下のディレクトリは下記の様になります。

go-cli-tweet
    `-- vendor
        `-- github.com
            |-- ChimeraCoder
            |   |-- anaconda
            |   |   `-- json
            |   |       |-- account
            |   |       |-- direct_messages
            |   |       |-- favorites
            |   |       |-- followers
            |   |       |-- friends
            |   |       |-- search
            |   |       |-- statuses
            |   |       `-- users
            |   `-- tokenbucket
            |-- azr
            |   `-- backoff
            |-- dustin
            |   |-- go-jsonpointer
            |   |   |-- ptrtool
            |   |   `-- testdata
            |   `-- gojson
            |       `-- testdata
            |-- garyburd
            |   `-- go-oauth
            |       |-- examples
            |       |   |-- appengine
            |       |   |-- discogs
            |       |   |-- dropbox
            |       |   |-- quickbooks
            |       |   |-- session
            |       |   |-- smugmug
            |       |   |-- twitter
            |       |   |-- twitteroob
            |       |   `-- yelp
            |       `-- oauth
            `-- urfave
                `-- cli
                    |-- altsrc
                    `-- autocomplete

go build

go installで依存パッケージがインストールしたら、go buildで実行ファイルが出来ます。 サンプルのプロジェクトはTwitterにツイートするコマンドです。 実行すると以下のように表示されます。

$ ./go-cli-tweet -h
NAME:
   GoTweet - glide sample project: simple tweet command

USAGE:
   go-cli-tweet [global options] command [command options] [arguments...]

VERSION:
   0.0.0

COMMANDS:
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --ck value     Consumer Key
   --cs value     Consumer Secret
   --at value     Access Token
   --as value     Access Token Secret
   -m value       teet message
   --help, -h     show help
   --version, -v  print the version

サンプルGlideプロジェクト

GitHub - nasust/go-cli-tweet: Glide Sample Project

まとめ

glide.yamlを記述するだけで、vendorの問題を解決して依存パッケージのバージョン管理が出来るので楽です。


Go言語 / golang 入門 目次に戻る

広告を非表示にする