post Image
Golangのbundleコマンド

Golangのbundleコマンドに関する困惑をTwitterで見かけた.おそらくRubyのbundlerと名前が衝突するためだろう.

ただこのコマンドはおそらく多くのひとは今後使うことはないため気にする必要はない.これはGo1.6でHTTP/2をぶっ込むときにx/toolsに入れられたパワー系コマンドである(もともとはRuss Cox氏が作っていた).インストールしているのはおそらくこの対応の経緯を追っていた人だと思う(ちなみに僕はこれをインストールしたのを忘れていてRubyのbundleを実行したつもりがGolangのほうを実行してしまったことがある).

bundleコマンドとは何か?

bundleはパッケージを別パッケージとして1つのファイルにするコマンド.以下のように使われる.

$ bundle golang.org/x/net/http2 net/http http2

上記のコマンドを実行するとgolang.org/x/net/http2パッケージをnet/httpパッケージの中にhttp2というprefixをつけて1つのファイルとしてぶっ込むことができる.

なぜbundleコマンドが必要だったか?

上でも述べたがこのコマンドはGo1.6のHTTP/2対応にてx/toolsに導入された.Go1.6のHTTP/2対応の目標は「APIの変更なしに」すぐ使えることだった.

単純に考えればgolang.org/x/net/http2をvendoringすれば良さそうだが,これをすると

  • x/net/http2 -> net/http (Handlerを実装するのに必要)
  • net/http -> x/net/http2(APIを変更しないために必要)

でimport cycleが発生してしまう.この問題を解決しつつ目標を達成するための選択肢がbundleコマンドだった.というのが経緯になる.より詳しくは“http -> http2 -> http import cycle”を見ると良い(bundleはテストを無視するため現在でもメインの開発はgolang.org/x/net/http2で行われ定期的に標準パッケージの方にbundleされている).

どのようにインストールするのか?

(追記)

x/toolsにはgurugorenameなどGopherに必要なツールがたくさん揃っている.基本的にこれらは必要なものをそれぞれインストールするのがプラクティスになっている.例えばbundleコマンドは以下のようにインストールする.

$ go get golang.org/x/tools/cmd/bundle

このプラクティスに従っていれば無意識のうちに名前被り問題が発生することはない.が以下のような横着をしてx/toolsの全てのコマンドをインストールすると気づかないうちに問題が発生してしまうかもしれない.

$ go get golang.org/x/tools/...

x/toolsは必要なものを一つずつインストールしましょう.

まとめ

使われどころを知ればおそらく多くのひとにとって必要無いことがわかるのではないでしょうか.使われることも少ないので特に衝突などは考慮していなかったのだと思います.


『 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

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