LoginSignup
28
11

More than 5 years have passed since last update.

今更だけどGoのVendoringについて思いをはせる

Last updated at Posted at 2016-12-15

はじめに

GoはWebAPI的に使っているもののあまりディープな話はできないなと思い、Vendoringについて調べて書いておこうって感じです。
ほとんどPackageManagementTools · golang/go Wikiを見て書こうとしているのでご存知の方はスルー願います。
また多くのパッケージ管理ツールは今回初めて触っているので認識が間違っていましたら記事の編集リクエストお願いします:bow:

Vendoringについて

Go 1.5から試験的に導入された機能で1.6でデフォルトの機能となっています。
何らかの理由で1.5を利用しなければいけない場合はGO15VENDOREXPERIMENT=1と環境変数で設定する必要があります。
Goでは/vendorディレクトリを利用して依存性解決を行なっています。
Rubyで言うとこのBundlerやJSでいうところのYarn、PythonのPipを思い浮かべるとイメージしやすいかと思います。

パッケージ管理ツール

パッケージ管理ツールは思っていたより多く、記事記載時に500Starを超えているもので比較していきます。
表の「グローバル汚染なし」(?)はgo getによってGOPATH配下のグローバルな場所を利用していない場合は :white_check_mark: となります。これ本当はなんていうんだろう?

ツール名 Godep Glide Govendor gom manul
スター数(2016.12.14) 4,106 3,360 1,333 1,189 575
開発開始 2013.04.28 2014.06.06 2015.04.12 2013.09.08 2015.09.27
グローバル汚染なし :no_entry: :white_check_mark: :white_check_mark: :white_check_mark: :no_entry:
バージョン管理 Godeps/godeps.json glide.yaml vendor/vendor.json Gomfile git submodules
キャッシュ GOPATHからコピー :white_check_mark: :white_check_mark: :no_entry: :no_entry:
セマンティックバージョニング :no_entry: :white_check_mark: :white_check_mark: :no_entry: :no_entry:
グルーピング :no_entry: :no_entry: :no_entry: :white_check_mark: :no_entry:

Godep

Goが出て間もない頃から出ているので機能的にほかのツールに劣りますが、Go1.5未満でも動作するようです。

Glide

一番多機能だと感じました。
セマンティックバージョニングが強力でマイナーバージョンの変更のみやパッチバージョンの変更のみアップデートすることができます。
他にも機能はたくさんあるようですが、複雑さはなく非常に使いやすいと思いました。

Govendor

十分な機能を携えています。
GOPATHからとリモートネットワークを通じての両方でパッケージのインストールをできるのが特徴的だなと思いました。

gom

唯一グルーピングができます。
Bundlerのtest,development,stagingのように使えて用途によってはかなりコンパクトなパッケージ管理ができると思います。

manul

gitのサブモジュールを利用するという全く別のアプローチを採用しています。

終わりに

あまりGoを触れていないので間違っていたら恐縮ですが、この記事を見てパッケージ管理を再考するきっかけになっていただければと思います。良いGoライフを!!

28
11
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
28
11