詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

シェルスクリプトで Go の簡易ベンダリング

Heroku で Go がサポートされたのは良いニュースだったけど godep を使わなきゃいけないのが気に入らないところで、Go で Heroku に乗せたい Web アプリケーションを作る時は Docker を使う ことにした(参考)。その際にも Docker コンテナ中で go get をいちいち待つのはストレスなのでベンダリングはしておいたほうがよい。そこで簡単なベンダリングスクリプトを書いた。Go 1.5 で試験的に導入されたベンダリングには特に対応していない。

https://gist.github.com/motemen/bb1fca4a92a29bad78dc

このスクリプトは

  • プロジェクトの依存しているサードパーティーライブラリを特定のパス以下にコピーできる
  • 上記のパスを GOPATH に含めて go コマンドを実行できる
  • リビジョンロッキングは行わない

なので、複数人開発には向かないと思う。

使い方は簡単で、プロジェクトのトップで

% go-vendor.sh save

とすれば _vendor/src 以下に(既存の GOPATH から)ソースコードをコピーして、

% go-vendor.sh go build

として _vendorGOPATH に含めつつ go コマンドを実行する。ディレクトリ名が _ ではじまっているので ./... などとしてもソースコードとしては判定されない。

ちなみに依存ライブラリの列挙は go list で行っており、まさにこれはスイスアーミーナイフですのでおすすめの逸品です。

はてなで一緒に働きませんか?