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

はじめに

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ライフを!!


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。