by @nyarla

開発環境は プロジェクト毎に Docker で管理してくと後々楽が出来る

と言う事に今更ながら気がついたんでメモ。

開発環境をプロジェクト毎に Docker 化する利点

開発環境をプロジェクト毎に Docker 化する欠点

自分の環境(NixOS)での利点

これは開発時に動かすソフトウェアにも依るんだけど、 NixOS だと開発時に必要となるソフトウェアを動作させる事に NixOS 特有の制約が掛かって来る場合があって、 そういうのを手軽に回避したい……という時なんかに Docker を使うとかなり便利だった。

で、具体的には最近だと elm で開発する時にそういう(NixOS 特有の)制約に引掛っていて、 elm を使う開発が面倒になりかかってたんだけど、これを Docker で回避したところ開発体験としてはかなり良い感じになった。

ちなみに自分の環境では Docker を使って開発環境を整える際に、

という感じのファイルを用意して、基本的には make 経由で docker-compose を実行させたりしています。 あと上記の三つのファイルは、今作ってるモノだと下記の様な感じになってます:

version: "3"
services:
  serve:
    build: .
    working_dir: /app
    ports:
      - "8080:8080"
    volumes:
      - ../:/app
    command:
      - sh
      - -c
      - "usermod -u 1000 -o node && groupmod -g 100 -o node && sudo -u node yarn install && sudo -u node yarn run serve"
  shell:
    build: .
    working_dir: /app
    ports:
      - "8080:8080"
    volumes:
      - ../:/app
    command:
      - sh
      - -c
      - "usermod -u 1000 -o node && groupmod -g 100 -o node && sudo -u node sh"
FROM node:current-alpine

ENV  NPM_CONFIG_PREFIX=/home/node/.npm-global

RUN apk add --no-cache \
			shadow sudo \
      unzip zip bzip2 gzip p7zip tar xz \
      gmp

CMD [ "sh" ]
.PHONY: serve shell

serve:
	@docker-compose -f etc/docker-compose.dev.yaml run --rm --service-ports serve

shell:
	@docker-compose -f etc/docker-compose.dev.yaml run --rm --service-ports shell

以上

という事で Docker で開発環境を用意すると結構便利だよーって話でした。はい。