こんにちは。最近Lintツールにお熱なPockeです。
表題の通り、go get
とghq get
の際にアドレス形式の違いの悩みから人類を解放しました。
go get
とは
go get
はGo言語で記述されたソフトウェアをダウンロード/インストールする際に使用するコマンドです。
例えば、pecoというソフトウェアをインストールする際には以下のようにして使います。
$ go get github.com/peco/peco
この際、引数に与えるアドレスにはhttps://
などのスキーマを含んではいけません。
スキーマを含んでいると、以下のようにエラーが発生してしまいます。
$ go get https://github.com/peco/peco package https:/github.com/peco/peco: "https://" not allowed in import path
ghq get
とは
ghq
は、Go言語のパッケージ管理方法にinspireされて作られた汎用的なレポジトリ管理ツールです。
- ghq: リモートリポジトリのローカルクローンをシンプルに管理する - 詩と創作・思索のひろば
- ghqを使ったローカルリポジトリの統一的・効率的な管理について - Kentaro Kuribayashi's blog
例えば以下のようにすることで、ghq
を使用してpeco
のレポジトリを取得することが可能です。
$ ghq get https://github.com/peco/peco
ただし、ghq
ではスキーマを省略することが出来ません。
省略した場合、以下のようにエラーが発生してしまいます。
$ ghq get https://github.com/peco/peco error Not a valid repository: https://github.com/github.com/peco/peco
Problem
上記の通り、ghq
とgo
ではアドレスの指定方法が異なります。
そのため、アドレスの形式を間違えてレポジトリの取得に失敗することが多々あります。
また、go get
で使用される形式ではブラウザから直接URLをコピペした際にうまく動かないため、不便なケースが存在します。
Solution
そこで、CLIツールを作成して対応しました。
get
というコマンドです。
Installation
Go言語で書かれているため、go get
を使用してインストールすることが可能です。
$ go get github.com/pocke/get
Usage
get
コマンドをどのように使用するか、先ほどのpeco
の例で確認してみましょう。
$ get ghq https://github.com/peco/peco $ get ghq github.com/peco/peco $ get ghq peco/peco $ get go https://github.com/peco/peco $ get go github.com/peco/peco $ get go peco/peco
上記の例はいずれもghq get
もしくはgo get
でpecoを取得します。
get ghq ADDR
のように第一引数に使用するコマンド、第二引数にレポジトリのアドレスを渡して使用します。
この例でわかる通り、引数に渡すアドレスの形式は問いません。
get go
にスキーマ付きのアドレスを渡すことも出来ますし、その反対にget ghq
にスキーマ無しのアドレスを渡すことも可能です。
また、通常通りget go
にスキーマ無しのアドレスを渡しても正常に動作します。
get
コマンドが内部でアドレスを適切な形に変換するため、このように任意の形式でアドレスを指定することが出来るようになっています。
まとめ
get
コマンドを使用することで、アドレス形式の違いに混乱することを防ぐことが可能です。
このような混乱をした経験のある方は、get
コマンドを使用してみてはいかがでしょうか?