fotowaチームでエンジニアをしているnagamotoです。 最近開発環境構築にDockerを導入しました。 その際の話をしたいと思います。
Dockerによる開発環境構築に踏み出すまで
背景
fotowaのアプリケーションは少なくともRails、PostgreSQL、Redisのサーバを必要とします。特別多いわけではないですが、環境構築にまずまずの手間がかかります。
また、開発端末はMacに統一されているわけではなく、Windowsを選ぶことも可能で、実際にWindowsを利用する人もいます。 そしてWindows端末で開発環境を整えるノウハウは溜まっておらず、各人のスキルに依存していました。
こうした背景から、開発環境構築へのDocker導入を検討し始めました。
メリットとデメリット
導入を決定する前に、Dockerのことを調べると、以下のようなメリット・デメリットが見えてきました。
メリット
- 一度Dockerによるレシピを作成してしまえば、少数のDockerコマンド実行のみで、開発環境構築が終わる
- 使用するのみであれば仮想環境等の知識を必要としない
- Docker動作環境であれば、それぞれの環境の差分を吸収できる
- 開発環境をコードで見える化、管理することができる
デメリット
- Dockerの学習コストがかかる
- 開発環境構築のレシピ(Dockerfile)を作成する必要がある
- Webで探せる情報が十分とは言えない
個人的にDockerに興味を持っていたのもありますが、 メリットの方が上回ると考え、Docker導入を決定しました。
そして先日、自身と新しくチームに加わったメンバにおいては、Dockerで開発環境構築を実行するまでに至りました。
導入した感想
想定していたメリットではありますが、少数のコマンド実行で開発環境構築が終わるのは、新しく加わるメンバにとっては、アプリケーションコードに集中することができて、非常に大きなメリットだと感じました。 また、環境の差分がなくなることで、ノウハウを共有しやすく、教える側も教わる側もやりやすかったです。
また、公式imageを利用することで、PostgreSQL等のインストールやバージョン管理が簡単になり、ホストマシンの環境が汚れないことは非常に大きなメリットでした。
ただし、Docker自体が安定しているとは言い難い部分もあり、同じくWindows10のほぼ同じ環境でも、異なる挙動をしたり、そもそものDocker動作環境を整えることに手間がかかったことは想定外でした。 具体的には、以下ようなことが起こりました。
- dockerが管理者権限でしか実行できない
- 仮想環境用のメモリ確保に失敗する
- Kitematic(dockerのGUIツール)が起動できない
まとめ
- 何度も環境構築を行う場合は非常に便利
- 環境が共有できると情報共有も捗る
- Docker学習・導入コストは小さくはない
今後も少しずつDockerの学習を重ねて、開発環境の改善をしていきたいと思います。
ピクスタではエンジニア募集中です! recruit.pixta.co.jp