第2の人生の構築ログ

自分の好きなことをやりつつ、インカムもしっかりと。実現していく過程での記録など。読書、IT系、旅行、お金に関係する話などの話題。

Bitbucket / Github の private リポジトリを Go Get する

f:id:dr_taka_n:20190811113122p:plain:w300

go get というのは、go 言語のパッケージマネージャのようなものです。外部ライブラリを導入したい時には go get を使って Github、Bitbucket といったリポジトリからライブラリをローカル環境にダウンロードしてきてくれます。

通常、go get で指定されるリポジトリは Public な状態ですので、別段意識せずにそのままパスを指定して実行していますが、そのリポジトリが Private な環境の場合にどうするか、というのがこの記事でのお話です。

個人的に進めていて、(まだ)公開できないプロジェクトなどは、リポジトリを Private にして管理しています。Bitbucket が早くから Private リポジトリを無料で使えておりましたので、リポジトリは主に Bitbucket を使っています。ここでは Bitbucket の例を記載しますが、基本は Github も同じはずです。

前提としては以下の通りです。

  • 対象となるリポジトリは bitbucket.org/drtaka/myproj で公開範囲は Private
  • 既に git プロトコルでアクセス可能な設定が行われている (SSH の鍵は設定済み)

上記の状態で、例えば clone が問題なく実行できるものとします。

$ git clone git@bitbucket.org:drtaka/myproj.git

ちなみに、go get のコマンドですが、これは裏側では普通に git を使っておりますので、go get の設定を触るのではなく、git の設定で対応します。

まず、このリポジトリに対して何も考えずに go get を行ってみます。
以下のように 403 エラーが返ると思います。Forbidden、「閲覧禁止」ですね。アクセス許可がないということです。

$ go get bitbucket.org/drtaka/myproj
go: missing Mercurial command. See https://golang.org/s/gogetcmd
package bitbucket.org/drtaka/myproj: https://api.bitbucket.org/2.0/repositories/drtaka/myproj?fields=scm: 403 Forbidden

さて、どう対処するかですが、ヒントが上記のエラーに隠されています。 403 エラーの出ている行を読むと、https プロトコルでアクセスしています。

go get を使った場合には、githttps プロトコルを使ってアクセスしているんですね。

既に SSH を使った git プロトコルではアクセスできている訳ですので、go get を使った時にも git プロトコルでアクセスするようにします。

(これは1つの解法です。環境によってはこれにより別の仕組みに影響が出るかもしれません。その場合には、https プロトコルでアクセスするための設定を考える必要があります。)

git の設定を変更します。

$ git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"

Github の場合は、以下で大丈夫だと思います。

$ git config --global url."git@github.com:".insteadOf "https://github.com/"

上記のコマンドを発行すると git の設定ファイル $HOME/.gitconfig が変更されています。以下の設定が追加されているはずです。

[url "git@bitbucket.org:"]
        insteadOf = https://bitbucket.org/

では、改めて go get してみます。

$ go get -v bitbucket.org/drtaka/myproj
go: finding bitbucket.org/drtaka/myproj latest
go: extracting bitbucket.org/drtaka/myproj v0.0.0-20190810080409-7a4acdc67b28

うまくいったようです。

$ ll $GOPATH/pkg/mod/bitbucket.org/drtaka
total 0
dr-x------  7 hoge  staff  224  8 11 11:00 myproj@v0.0.0-20190810080409-7a4acdc67b28

ちなみに試している go のバージョンは、1.12.4 です。

$ go version
go version go1.12.4 darwin/amd64

以上です。

【追記】2020/05/10

$ go version
go version go1.13.8 darwin/amd64

上記環境にて、ここまでの設定だけでは Go Get できない状況(410 Gone エラー)となっていましたので、続編書いています。

www.morelife.work


The Go gopher was designed by Renée French.