背景
へっぽこプログラマーですが、なんとなくGo言語を勉強し始めたら、面白くてはまってしまったので、どこでも手軽にGoの開発環境が作れるようにDockerイメージを作ってみました。公式のgolangイメージもありますが、勉強もかねて1から作ってみたかったのと、vim-goなどのツールも入れて、コンテナ内で開発を完結できるようにしたかったので、自作しました。
前提条件
環境は下記の通りです。
項目 | 概要 |
---|---|
動作環境 | macOS Sierra |
Docker Version | 1.13.1 |
Base Image | ubuntu (latest, 16.04) |
CPU | amd64 |
Go Version | 1.7.5 |
Base Imageは筆者の好みでubuntu (latest ※執筆時点では16.04) を使用していますが、もう少し軽量なImageを使ってもいいかもしれません。
Dockerイメージ作成
Dockerfileは下記の通りです。
FROM ubuntu:latest
MAINTAINER hogehoge
ENV ARCH amd64
ENV GOVERSION 1.7.5
ENV HOME /root
ENV PATH $PATH:/usr/local/go/bin
ENV GOPATH $HOME/work
RUN apt-get update -y \
&& apt-get install vim curl git -y \
&& curl -s -o /tmp/go.tar.gz https://storage.googleapis.com/golang/go$GOVERSION.linux-$ARCH.tar.gz \
&& tar -C /usr/local -xzf /tmp/go.tar.gz \
&& rm /tmp/go.tar.gz \
&& curl -s -fLo /root/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim \
&& echo "let g:go_fmt_command = \"goimports\"" >> $HOME/.vimrc \
&& echo "filetype plugin indent on" >> $HOME/.vimrc \
&& git clone https://github.com/fatih/vim-go.git $HOME/.vim/pack/plugins/start/vim-go \
&& go get github.com/nsf/gocode \
github.com/alecthomas/gometalinter \
golang.org/x/tools/cmd/goimports \
golang.org/x/tools/cmd/guru \
golang.org/x/tools/cmd/gorename \
github.com/golang/lint/golint \
github.com/rogpeppe/godef \
github.com/kisielk/errcheck \
github.com/jstemmer/gotags \
github.com/klauspost/asmfmt/cmd/asmfmt \
github.com/fatih/motion \
github.com/zmb3/gogetdoc \
github.com/zmb3/gogetdoc \
github.com/josharian/impl
WORKDIR $HOME/work
下記の部分はCUIで環境構築する場合は、vimで:GoInstallBinaries
コマンドを叩くといい感じにインストールしてくれるのですが、Dockerfileでやるとイメージのビルド途中でユーザ入力が必要になり、どうもうまくいかなかったので一つ一つ地道にインストールしています。
&& go get github.com/nsf/gocode \
github.com/alecthomas/gometalinter \
.
.
.
github.com/josharian/impl
あとは上記のDockerfileのあるディレクトリで下記のコマンドを打ってイメージ作成して完了です。
$ docker build -t godev .
作成したイメージを利用
では、作成したイメージを使ってみましょう。
コンテナを立ち上げます。
$ docker run -it godev
シェルが立ち上げるので、vimで拡張子がgoのファイルの編集をしてみます。
$ vi main.go
Goのテンプレートが立ち上がります。インデントも自動です。Ctrl+x Ctrl+o
でコード補完も可能です。.vimrc
は最低限の設定しかしていませんので、必要に応じてカスタマイズしていただければ。
簡単ですがこれで最低限のGoの開発環境が整いました。あとは煮るなり焼くなりして必要に応じてカスタマイズしていければいいですね。
まとめ
Goの開発環境をどこでも手軽に作りたかったので、dockerで最低限の開発環境を作ってみました。これからどんどんGoで遊んでいきたいと思います。