ねこじゃすり
猫を魅了する魔法の装備品!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
スポンサーリンク
目次
Go言語のパッケージ管理の課題
Go言語は基本的に「go get ~
」でインストールしたパッケージはすべて環境変数$GOPATH
配下にインストールされます。
また、Go1.8からは環境変数$GOPATH
を設定していない場合は、$HOME/go
を利用するようになっています。
そして、Goをビルドするときには、常に環境変数$GOPATH
またはこのディレクトリを見るので、同じモジュールでもビルドするプログラムによってバージョンを変える、といった事は標準の機能では実現出来ません。
これは結構深刻な問題で同一言語で複数システムを開発しているとバージョンが異なるモジュールを使うことはほぼ確実にありえます。
Go言語のパッケージ管理システム
その問題を解決してくれるのが「glide」と呼ばれるパッケージ管理ツールです。
glideはvendoringという管理方式を持っています。
これは自分が依存している外部モジュールも自分自身が管理する、という方式の事を指します。
NodejsのnpmやPHPのComposerを例に挙げると、あちらは自分自身が依存している外部モジュールについては参照情報のみを管理し、実態は外部から取得を行います。なので、結局は外部に依存しているという状態になります。
ここの境目がvendoringか否かになってきます。
glideについてもHomebrewでインストール可能ですので早速使えるようにしてみましょう。
手順
インストール
以下のコマンドを実行します。
1 |
brew install glide |
インストールはこれだけで完了です。
確認
以下のコマンドを実行してみましょう。
1 |
glide --version |
正常にインストールが完了しています。
バージョン定義ファイルの作成
Go言語で開発する上で意識する必要のあるディレクトリ構成が2つあります。
- ワークスペース → GOPATHに指定するGo言語共通のディレクトリ
- プロジェクト → Go言語で実際に開発するディレクトリ
今回は以下のディレクトリ構成で説明をします。
- ワークスペース →
/Users/{ユーザー名}/tmp/work/go
- プロジェクト →
/Users/{ユーザー名}/tmp/work/go/src/sample
まずはプロジェクト内で以下のコマンドを実行し、バージョン定義ファイルを作成してみましょう。
1 |
glide init |
そうすると、glide.ymlというファイルが作成されます。
中身は最低限の記述しかされていません。
依存パッケージの追加
次に依存するパッケージを追加してみましょう
今回はコチラ のモジュールを利用してみましょう。
プロジェクト内で以下のコマンドを実行してください。
1 |
glide get github.com/sirupsen/logrus |
エラー:Could not find any of /Users/{ユーザー名}/go/src.
実行時に、以下のようなエラーが出る人がいるかもしれません。
これは環境変数$GOPATH
の指定がないのでデフォルトの/Users/{ユーザー}/go/srcにインストールしようとするのですが、そんなディレクトリは存在しないよ!というエラーです。
そのディレクトリを作れば解決なのですが、利用するモジュールはプロジェクト単位で管理したいので、以下の記事で導入したdirenvを使って環境変数$GOPATH
を指定しましょう。
プロジェクト内で以下のコマンドを実行し、
1 |
direnv edit . |
以下の記述を追記します。
基本的にはワークスペースを指定してください。
1 |
export GOPATH="/Users/{ユーザー名}/tmp/work/go/" |
ここで以下のエラーが出た場合はエラーメッセージの通りに以下のコマンドを実行します。
1 |
direnv allow |
そうすると.envrc
が正常に読み込まれると思います。
Without src, cannot continue.
こちらのエラーが出る場合はディレクトリ階層に問題があります。
先ほどdirenvにて環境変数$GOPATH
に指定したワークスペースの階層に「src」ディレクトリが存在していないのが原因です。
なので、srcディレクトリを作成する必要があります。
確認
もう一度実行してみましょう。
正常にインストールされるとglide.ymlに記述が加わり、glide.lockというファイルが作成されます。
また、vendorディレクトリが自動で生成されその中にモジュールがインストールされている事がわかります。
ソースからの利用
あとはコーディング時にimport
して利用するだけです。
今回はsample.go
という簡単なファイルを作成しドキュメント通り以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 |
package main import ( log "github.com/sirupsen/logrus" ) func main() { log.WithFields(log.Fields{ "animal": "walrus", }).Info("A walrus appears") } |
そして、以下のコマンドで実行します。
1 |
go run sample.go |
正常にimportされていそうですね。出力されました。
最終的なディレクトリ
ワークスペース配下のディレクトリ構成はこんな感じです。
あとがき
少しディレクトリ構成に癖がありますが、ルールさえ分かってしまえば他の言語と大差なく作業を進める事が可能になります。
ぜひ、glideを使いこなしてGo言語を実装してみてください。