こんにちは。最近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コマンドを使用してみてはいかがでしょうか?