2025年09月05日         
            
            やってみよう!Elixir / Phoenix 関数型プログラミングの基礎①
                  webアプリ開発
                
            
          目次
              開発環境構築手順(Dockerコンテナの構築)
作業ディレクトリの作成
次のコマンドを実行してください。
~$ mkdir -p ~/projects/phx_sample
~$ cd ~/projects/phx_samplemkdirに-pをつけると親ディレクトリも一緒に作成します。ホームディレクトリの下にサブディレクトリprojectsが作られ、さらにその下にphx_sampleが作られます。作業ディレクトリ(phx_sample)に移動してvs codeを開きましょう。
コンテナの構築、起動、停止
Dockerfileの作成
作業ディレクトリの下にDockerfileという名のファイルを新規作成し、次の内容を書き込んでください。
FROM elixir:1.18.4
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NOWARNINGS yes
RUN apt-get update && apt-get -y install apt-file && apt-file update
RUN apt-get -y upgrade
RUN apt-get -y install bash git vim sudo curl inotify-tools cmake erlang-dev \
  ca-certificates gnupg postgresql-client libpq-dev
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | \
  gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
ENV NODE_MAJOR=22
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" > /etc/apt/sources.list.d/nodesource.list
RUN apt-get update && apt-get -y install nodejs
RUN apt-get -y install build-essential libcairo2-dev libpango1.0-dev \
  libjpeg-dev libgif-dev librsvg2-dev
RUN npm install -g vega vega-lite canvas
RUN echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID devel
RUN useradd -u $UID -g devel -m devel
RUN echo "devel ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
COPY --chown=devel:devel . /app
USER devel
WORKDIR /app
RUN mix local.hex --force
RUN mix local.rebar --force
compose.ymlの作成
続いて、作業ディレクトリの下にcompose.ymlという名のファイルを新規作成し、次の内容を書き込んでください。
services:
  app:
    build: .
    volumes:
      - .:/app:cached
    working_dir: /app
    ports:
      - "4000:4000"
    depends_on:
    - db
    tty: true
  db:
    image: postgres:15.8
    volumes:
      - pg:/var/lib/postgresql/data:cached
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: phx_sample_dev
    ports:
      - "5432:5432"
volumes:
  pg:
compose.ymlは、コンテナ群をどのように起動するかを記述したyaml形式の設定ファイルです。
compose.ymlでは、個々のコンテナにサービスという名前を与えます。上記のcompose.ymlでは、appという名前のサービスが定義されています。
コンテナの構築
次のコマンドを実行してください。
cd ~/projects/phx_sample
docker compose build
コンテナの起動
次のコマンドを実行してコンテナを起動してください。
docker compose up -d
起動中のコンテナのリスト確認
docker compose ps
Dockerコンテナの中に入る
次のコマンドを実行すると起動中のコンテナの中に入ることができます。
docker compose exec app bash
コンテナの停止
Dockerコンテナからexitコマンドを実行してコンテナを抜けてください。
次のコマンドを実行して起動中のコンテナを停止してください。
docker compose stop