目的
Goでモジュールを作成する際にはgo mod init
で任意の名称を指定することができます。
しかし AWS CodeCommit を利用時にはCodeCommitのホスト名(git-codecommit.${AWS_REGION}.amazonaws.com
)を使用する必要があります。
そこでCodeCommitを利用しつつ任意の名称でGoのライブラリを作成する方法を調査したのでそのやり方をまとめます。
経緯
こんな感じです。
- プロジェクトではCodeCommitを使わないといけない
-
モジュール名にCodeCommitのホスト名が含まれると、別リージョンにリストアした際にクライアント側からアクセスが出来なくなる- 所感にも記載しましたが、Gitのホスト名を置換する機能を使うと解決です
- モジュール名にCodeCommitのホスト名が含まれることに気持ち悪さを感じている
- Goでライブラリを作成しないといけなくなった!!!
絶対に達成しないといけないわけではなく完全に好みですね。
やり方
今回実現するのに、Gitのホスト名を置換してくれる機能を利用します。
ライブラリ側
特に気にせず好きなモジュール名にして構いませんが、ライブラリ名(mylibrary.git)だけはCodeCommitのリポジトリ名と一致させます。
$ go mod init hoge.example.com/mylibrary.git
クライアント側の事前準備
Gitの設定
Gitの設定にホスト名を置換するための設定を追加します。
設定のスコープは好みで構いませんが、特に理由が無ければglobal
で良いかと思います。
$ git config --global --add url."https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/mylibrary.git".insteadOf "https://hoge.example.com/mylibrary.git"
プロジェクトでホスト名を統一したほうが管理しやすいので、私は以下のようにしています。
$ git config --global --add url."https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/".insteadOf "https://hoge.example.com/"
Goの設定
Goの設定にホスト名を置換するための設定を追加しました。
go env -w GOPRIVATE="git-codecommit.*.amazonaws.com,hoge.example.com,direct"
クライアント側のソースコード
特に難しいことは無く、単純にimportすればOKです。
import (
"hoge.example.com/mylibrary.git"
)
func main() {
mylibrary.Fuga()
}
所感
当初はモジュール名にリージョン情報が含まれていると、リポジトリのバックアップ/リストア時にクライアントから参照できなくなることを懸念していました。
ですが、Gitのホスト名を置換する機能を使うと問題なく解決できるとわかったので、最終的には好みの問題ですね。
開発メンバ全員に設定してもらうひと手間はありますが、名前が分かりやすくなるので個人的には任意の名称を設定する方が好みです。
参考