開発環境もDocker化する時代
最近docker buildを速くするコツという記事を書いて研究会のGW合宿でも発表したのだけど、Scrapboxの開発者である@shokaiさんから開発用docker-composeを作ればええやんけと指摘を受けた そもそもの問題として、WebアプリケーションのランタイムをDocker(docker-compose)で構築することによってらくらくデプロイができるようになったのだが、ローカルでの開発はmacに環境構築しないといけないという問題があった
実はなかったとかそういうオチないよね?
ミドルウェアのレベルで環境が必要なものはdocker-composeによってピアコンテナにすればいいけど、railsやらexpressが依存する環境をmacに構築するのはプロジェクトによってはかなり骨が折れる
僕がいま取り組んでいるロイロノート・スクールのDocker化プロジェクトでその問題に直面していた
アプリケーション自体は素直(というわけでもないのだが)なrailsプロジェクトなのだが、画像処理なんかのライブラリが依存するネイティブライブラリが多く、まともにmac上に環境構築ができないという状態になっていた
Docker化することでランタイムの環境構築は解決したのだが、やはりローカルでの実行が問題になっていた
テストを実行するにも1行の変更をチェックするのにもdocker buildを走らせていたのでは効率がわるい
しかし、Gemfile.lock, yarn.lockの更新処理をmac上で行わない方針を解決するのが大変になった
最初はlockファイルを生成する一時的なコンテナを作ったりしていたが、上述のshokaiさんの助言によって解決した
やることは単純である。
code:Dockerfile
COPY . /workspace
↑こういうDockerfileで作っていたとして
code:docker-compose.local.yml
app:
volumes:
- .:/workspace
すでに作ったdocker-compose.ymlをコピペして、↑こういう記述を加えるだけである
なんとも豪快である
それでこれで立ち上げる
code:bash
$ docker-compose run app /bin/bash
これでmac側のプロジェクトがマウントされたappコンテナでbashが起動される
こうすることで、bundle installもyarn installも果てはgitもコンテナ内で行えるようになる
ソースコードはmac側のエディタで編集できるので問題ない
これで、mac側で実行するコマンドは実質的にdocker関連のものだけでよくなる
このメリットは図り知れず、複数人で開発環境を共有する手間が一発で解決されてしまう
Dockerの海に潜れば潜るほどその凄さに惚れ惚れしてしまう