LoginSignup
1
2

More than 3 years have passed since last update.

Docker で PureScript の開発環境を構築

Last updated at Posted at 2020-11-17

はじめに

先日、Docker コンテナ上で spago repl を動かすことができたので、今回は spago init で作成したプロジェクトのビルド、実行を確認する
Docker コンテナ上で PureScript を動かす - Qiita

検証環境

Windows10 Home Edition
VirtualBox 6.1.16
docker-machine.exe version 0.16.1, build cce350d7

# Docker Host OS (CoreOS)
$ uname -a
Linux default 4.14.154-boot2docker #1 SMP Thu Nov 14 19:19:08 UTC 2019 x86_64 GNU/Linux

Docker version 19.03.5, build 633a0ea838
docker-compose version 1.26.0, build d4451659

ディレクトリ構成

purescript フォルダの中に docker-compose.ymlDockerfile と空フォルダの myapp を準備する

purescript
├── docker-compose.yml
├── Dockerfile
└── myapp

docker-compose.yml

docker-compose.yml
version: "3.7"
services:
  purescript:
    build:
      context: .
      dockerfile: Dockerfile
      target: "purescript"
    image: takaya030/purescript
    command: "true"
  app:
    build:
      context: .
      dockerfile: Dockerfile
      target: "pure-app"
    image: takaya030/pure-app
    volumes:
      - ./myapp:/home/pureuser/myapp
    working_dir: /home/pureuser/myapp
    command: "spago run"

Dockerfile

Dockerfile
FROM node:12 as purescript
LABEL maintainer "takaya030"

# install purescript
RUN npm install --global --unsafe-perm purescript spago

# add user
RUN userdel node && \
    useradd -m -s /bin/bash pureuser

WORKDIR /home/pureuser
USER pureuser

RUN mkdir tmp && cd tmp && spago init

CMD cd tmp && spago repl

#=========================================
FROM purescript as pure-app

COPY ./myapp /home/pureuser/myapp
WORKDIR /home/pureuser/myapp

CMD ["spago","run"]

イメージのビルド

$ cd purescript
$ docker-compose build purescript
$ docker-compose build app

イメージの確認

$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
takaya030/pure-app     latest              c018082fc97b        27 hours ago        1.08GB
takaya030/purescript   latest              fb50aeb56d04        2 days ago          1.08GB
node                   12                  1f560ce4ce7e        5 weeks ago         918MB

プロジェクトの作成

下記のコマンドを実行すると myapp フォルダ以下に初期プロジェクトが作成される

$ docker-compose run --rm app spago init

プロジェクトのファイル構成

$ ls -l myapp
total 4
-rwxrwxrwx    1 docker   staff         2903 Nov 16 09:53 packages.dhall
-rwxrwxrwx    1 docker   staff          231 Nov 16 09:53 spago.dhall
drwxrwxrwx    1 docker   staff            0 Nov 16 09:57 src
drwxrwxrwx    1 docker   staff            0 Nov 16 09:53 test

ビルド

自分の環境ではサンプルプログラムの絵文字が文字化けするため、以下のように変更した

myapp/src/Main.purs
module Main where

import Prelude

import Effect (Effect)
import Effect.Console (log)

main :: Effect Unit
main = do
  log "Hello, PureScript"

下記コマンドでビルド

$ docker-compose run --rm app spago build

[info] Build succeeded.

実行

ビルドが成功したら下記コマンドで実行する

$ docker-compose run --rm app spago run

Hello, PureScript

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2