LoginSignup
10
9

More than 5 years have passed since last update.

Goのvendoringを試してみる

Posted at

環境

OS X 10.9.5

ゴール

GoのVendoring機能を使ってGojiのサンプルを動かす

入れたもの

  • Go1.6
  • glide 0.8.3

glideって?

パッケージ管理をしてくれるツールです。
プロジェクト単位でパッケージを管理できるようになります。
(なぜGoでパッケージ管理が重要(面倒)になっているかは割愛・・・!)

ただ注意点があります。
GO15VENDOREXPERIMENTが1になっている必要があります。
もしなっていない場合は↓で

$ export GO15VENDOREXPERIMENT=1

手順

  • glideインストール
  • サンプルプロジェクト作成
  • glide create
  • main処理作成
  • パッケージダウンロード
  • ビルド
  • 起動!!

glideインストール

# Homebrewでインストール
$ brew install glide

# 確認
$ glide -v
glide version 0.8.3

この時Homebrewが古いとglideも古いバージョンが入ります。
glideのバージョンが古いと用意されていないコマンドがあったりするので、
一度Homebrewをアップデートしてからがいいと思います。

サンプルプロジェクト作成

# /tmp下にvendor-testというディレクトリで作業
$ cd /tmp && mkdir vendor-test

glide create

# 移動
$ cd /tmp/vendor-test

# srcディレクトリ作成
$ mkdir -p src/v1 && cd src/v1

# initialize
$ glide create

createすると直下にglide.yamlというファイルができます。
中見るとパッケージ等なにも記述されていません。
(まだmain処理がないので当たり前っちゃ当たり前ですが)

main処理作成

Gojiのサンプル拝借します!ありがとうGOji!!

# main.goにサンプル貼付けます
vim main.go

貼付けると↓こんな感じになります。

main.go
package main

import (
        "fmt"
        "net/http"

        "github.com/zenazn/goji"
        "github.com/zenazn/goji/web"
)

func hello(c web.C, w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, %s!", c.URLParams["name"])
}

func main() {
        goji.Get("/hello/:name", hello)
        goji.Serve()
}

パッケージダウンロード

GOPATHが設定されていないと怒られます。
export GOPATH=/tmp/vendor-test
を設定してください。

# パッケージインストール
$ glide get github.com/zenazn/goji
[INFO] Preparing to install 1 package.
[INFO] Importing github.com/zenazn/goji
[INFO] Walking the dependency tree to calculate versions
[INFO] Fetching updates for github.com/zenazn/goji.
[INFO] Scanning github.com/zenazn/goji for dependencies.
[INFO] ==> Unknown github.com/goji/param (github.com/goji/param)
[INFO] Fetching updates for github.com/goji/param.
[INFO] Scanning github.com/goji/param for dependencies.
[INFO] Project relies on 2 dependencies.
[INFO] Writing glide.lock file

# treeで見てみる
$ tree
.
├── glide.lock
├── glide.yaml
├── main.go 
└── vendor
    └── github.com
        ├── goji
      ・
      ・
      ・

vendorディレクトリができてる!
そしてその中にGojiのソースがIN!

ビルド

# ビルド
$ go build

# tree
$ tree
├── glide.lock
├── glide.yaml
├── main.go
├── v1
└── vendor
    └── github.com
        ├── goji

v1ってものが作られた!

起動

# 上で作られたv1を実行します
$ ./v1
2016/02/11 14:03:39.657003 Starting Goji on [::]:8000

おぉー起動したー!

実際にアクセスしてみる。
ブラウザからlocalhost:8000にアクセスすると・・・

404 page not found

って表示されるので動いている!

先ほど起動したターミナルを見てみると・・・

2016/02/11 14:05:04.275370 [] Started GET "/" from [::1]:50897
2016/02/11 14:05:04.283113 [] Returning 404 in 27.408µs
2016/02/11 14:05:04.577383 [] Started GET "/favicon.ico" from [::1]:50897
2016/02/11 14:05:04.577419 [] Returning 404 in 10.605µs

って表示されている。
ゴ〜〜〜〜ル!

まとめ

glideとvendoring機能を試してみましたが、
結構シンプルにパッケージ管理ができていいなぁと思いました。

ただ・・・
vendoring機能の仕様?でディレクトリ構成によって
vendor下を見に行ってくれなかったです。
(今回でいうとsrc/の下にv1というディレクトリを置く事によって
見にいくようになりました)

というわけで、
まだまだ詳しく調べる必要があるなぁという結果になりました。
(英語ばっかりで読むのに時間かかるんだもん ← 雑魚感)

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9