Docker コンテナを開発環境として利用する

Goで遊んでわかった3つの魅力 | MMMブログ でも紹介があったとおり、社内では Slack に、#gopher チャンネルがあったり、投稿時に無理やり Go を入れたり、
(例: あり Go とう Go ざいます など)
ちょっとした盛り上がりを見せていたのだが、最近はちょっとその傾向も落ち着きつつある。

個人的にはその盛り上がり以降も、少しずつではあるが、Go言語を勉強したり、Go言語の記事に注目したりしていていた。
そんな中で、My Go IDE in a Container という記事を見つけた。
Go言語のIDE(統合開発環境)に Docker コンテナを使っちゃおう、というものだ。
さっそく試してみた。

使い方は簡単

【参考URL】
saturnism/go-ide: Example IDE in a Container

使い方はすごく簡単。
上記の参考URLの README のとおり、下記のコマンドを実行するだけ。
(/some/path の部分に自分の開発しているディレクトリを入れる)

1
$ docker run -v /some/path:/go/src -ti saturnism/go-ide

ただ、このまま使うと、日本語が文字化けするため、日本語が使えるように追加で設定を入れた Dockerfile を作成した。

mmmsasaki/go-ide

いつも docker コマンドのオプションとかの指定の仕方を忘れてしまうので、docker-compose を使って、予め設定しておき、docker-compose コマンドで Docker を起動することが多い。

同梱の docker-compose.yml の下記の設定を適切に変えれば、コンテナにローカルのディレクトリを /go/src にマウント出来る。

1
volumes:
  - /hogeproject:/go/src

設定後に、ビルドして。

1
$ docker-compose build

コンテナ内に入って作業する。

1
$ docker-compose run ide bash

saturnism/go-ide で使用している Go言語のバージョンが 1.5 で、1.6 のもので作りなおそうとしたが、一部エラーが出て、ちょっと時間がかかりそうだったので、今回は断念。今後時間を見つけて、作りなおそう思っている。

vim-go が便利

ちょっと使ってみて思ったのだが、vim-go がすごく便利だった。
機能もたくさんあって、まだまだ触ったばかりで全然使いこなせてないが…。
いいなー、と思った機能をちょっと紹介すると、こんな感じで。

改行されていない、インデントもされていないコードも、保存する際に go fmt を実行してくれるようで、開きなおすと見づらいコードも綺麗に。

コードの補完もいい感じに出してくれる。

例えば、fmt.Println の上で、gd と打つと、該当の定義にジャンプ出来たり。

他にも紹介しきれないぐらいたくさんあるので、詳細は下記のURLでご確認いただきたい。

fatih/vim-go: Go development plugin for Vim

コンテナを開発環境として使ってみた感想

開発環境を使いまわせる

これまで、弊社では Ruby on Rails の開発など、Docker を使って開発はしていた。
だが、エディタを含めた開発環境は、各自の Mac で自由に使っていて、基本的に Rails の動作確認を Docker で行っていた。
Docker のコンテナ内に入って開発、ということは基本的にやっていない。

vim の設定などを入れ込んだ開発環境を、Docker のコンテナイメージに閉じ込めておくことで、別のマシンで作業しないといけないときとか、クラウド上の Linux サーバーで作業したいときでも、開発に必要なものをインストールしたり、設定をし直したりする必要がない。

一度作ってしまえば、開発環境構築に時間をかけなくてもいいので(Docker が動く環境は作らないといけないけど)、かなり時間の節約になるのではないか、と思った。
また、Mac 側に必要なライブラリを入れたり、設定をしたりなど、汚さなくてもよくなる。
言語ごとに、個人で使う開発環境のコンテナを用意しておいてもいいかもしれないな、感じた。

チーム開発で、開発環境を共有するのもありかも

コンテナのイメージを共有することで開発環境も、統一出来て便利かもしれない。
「ボクの環境ではエラーになったんですが」とか「私の環境では設定が足りてないからエラーになってました」とかの議論をしなくていいかもしれないからだ。
ただし、チーム開発を行う際に、チームメンバーが、vim を使うことに抵抗がなければ…っていう条件はある。
Atom じゃないとダメ、Sublime Text じゃないと開発できない、っていう人もいると思うので、これに関しては議論の余地ありかな…。

なお、Dockerや仮想化を活用したチーム開発支援をご希望の企業様は、是非MMMにご相談下さいませ!

このエントリーをはてなブックマークに追加