600 文字
3 分
【Golang】GitHub上のprivateリポジトリをimportする
Go言語で書いたコードをprivateリポジトリに置いてて、そのコードを他のリポジトリから呼び出すためのメモです。
やりたいこと
GitHubのprivateリポジトリにGo言語で書いたライブラリを置いていました。
このライブラリのリポジトリを、publicに変えることなくprivateのままimportして使いたいのです。
単純にimportしようとしたらエラーになる
こんな感じでprivateリポジトリのライブラリをimportしようとしたら
package main
import ( "github.com/<ユーザ名>/golang-lib")
...こんなエラーが表示されてビルドに失敗しました。
$ go build ../src/main.go [master]go: finding module for package github.com/<ユーザ名>/golang-lib../src/main.go:7:2: cannot find module providing package github.com/<ユーザ名>/golang-lib: module github.com/<ユーザ名>/golang-lib: git ls-remote -q origin in /home/user/go/pkg/mod/cache/vcs/588e0f756a53aa1a73372233db9fe1a5389215117dfbe15996c0de76f955b419: exit status 128: fatal: could not read Username for 'https://github.com': terminal prompts disabledConfirm the import path was entered correctly.If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.解決方法
エラーメッセージの「privateリポジトリの場合はここを見な!」みたいなメッセージとともに表示された以下のリンクを覗いてみます。
Frequently Asked Questions (FAQ) - The Go Programming Language
ここでは解決方法として、
~/.netrcにGitHubのアカウント名とAPIのアクセストークンを書いて認証を突破する方法- GitHubに登録してるsshの鍵を利用して認証を突破する方法
の2つが紹介されていました。
今回は後者の方法を試してみます。
なお、当然ながらこの方法の場合、事前にGitHubに鍵を登録しておく必要があります。
~/.gitconfigに以下の設定を追加します。
[url "ssh://git@github.com/"] insteadOf = https://github.com/これで再度ビルドしてみます。
$ go build ../src/main.gogo: downloading github.com/<ユーザ名>/golang-lib v0.0.0-20201229201758-0ee219d61b2f../src/main.go:7:2: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: verifying module: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: reading https://sum.golang.org/lookup/github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: 410 Gone server response: not found: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/588e0f756a53aa1a73372233db9fe1a5389215117dfbe15996c0de76f955b419: exit status 128: fatal: could not read Username for 'https://github.com': terminal prompts disabled何やらさっきとは違うエラーが表示されてまたビルドがコケました。
エラーメッセージでいろいろと調べてみると、どうやらGo言語のバージョン1.3以降はGOPRIVATEという環境変数を設定する必要がありそうです。
なので、↓のような感じで、参照したいprivateリポジトリのパスを設定してやります。
export GOPRIVATE="github.com/<ユーザ名>/golang-lib"これで無事にビルドが成功しました。
参考: