LoginSignup
1
0

More than 1 year has passed since last update.

Docker を利用した Goをインストールしない Go開発環境構築

Last updated at Posted at 2020-12-07

Go言語(go, golang)をインストールすることなく、Go言語の開発環境を構築する方法です。
簡単に言うと、使い捨ての Docker コンテナ上で go コマンドを実行します。
golang インストールは不要ですが、基本的に GOPATH=~/go 以下にプロジェクトのソースディレクトリがある事を前提とします。
※ Docker を利用するので Docker のインストールは必要です。

動作確認環境: macOS Catalina 10.15.8

Atom + go-plus で開発していますが、保存時のテスト実行等も問題なく動作しているようです。

サンプルは go mod init ${PWD:$(echo “$GPATH/src”|wc -c)} を実行する例です。

プライベートリポジトリなしの場合

docker run --rm -v "$PWD":"${PWD:$#HOME}" -w "${PWD:$#HOME}" golang:1.14.12 go mod init ${PWD:$(echo “$GPATH/src”|wc -c)}

プライベートリポジトリを含む場合

プライベートリポジトリが https://private-repo の場合に対応しています。

docker run —rm -v "$HOME/.ssh":"/root/.ssh":ro -v “$PWD”:”${PWD:$#HOME}” -w “${PWD:$#HOME}” --env GOPRIVATE="private-repo" golang:1.14.12 /bin/sh -c "git config --global url.ssh://git@private-repo.insteadOf https://private-repo && go mod init ${PWD:$(echo “$GPATH/src”|wc -c)}"

git config で特定のリポジトリに対して go get を ssh 接続に切り替えるため、コンテナで go コマンドを含む複数コマンド実行が必要なので、/bin/sh-c オプションを利用しています。

エイリアスを登録して利用

1行で書けますが非常に長いので、実際に利用する時は関数を用意してエイリアスを登録して利用しています。

~/.zshrc
alias go='golang'
alias goinit='golang mod init ${PWD:$(echo “$GPATH/src”|wc -c)}"'

golang() {
  USE_PRIVATE_REPO="git config --global url.ssh://git@private-repo.insteadOf https://private-repo"
  WORKDIR=$(echo "${PWD}" | awk '{print substr($0, index($0, "/go/"))}')
  docker run --rm                   \
  -v "${HOME}/.ssh":"/root/.ssh":ro \
  -v "${PWD}":"${WORKDIR}"          \
  -w "${WORKDIR}"                   \
  --env GOPRIVATE="private-repo"    \
  golang:1.14.12 /bin/sh -c "${USE_PRIVATE_REPO} && go $*"
}
source ~/.zshrc
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0