プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

Dockerを使用したHaskellの環境構築手順【Haskell, Docker, docker-compose】

Dockerを使用したHaskellの環境構築手順について

HaskellWindowsMacの上に構築することも可能ですが、Dockerコンテナの上で実行することで完全な再現性が得られます。 加えてHaskell自体にもバージョンが存在するため、それらを容易に切り替えるとなおよいでしょう。

Docker for Desktopのインストール

前提条件として、Docker for Desktopのインストールが求められます。

  • MacOSへのインストールの場合は、こちらを確認してください。

https://minegishirei.hatenablog.com/entry/2023/09/03/143528

  • Windowsへのインストールはこちらからも可能です。

https://minegishirei.hatenablog.com/entry/2023/09/04/115946

Haskellのインストール

インストールのコマンド

以下のコマンドを順に実行していけばDockerによる環境構築は完了です。

git clone https://github.com/minegishirei/Haskell.git
cd Haskell
docker-compose build
docker-compose run haskell bash

実行

codeディレクトリの中に簡単なHello worldプログラムを用意しました。 以下のコマンドを実行して確認してみてください。

ghc helloworld.hs
./helloworld

Haskell Docker環境の解説

まずはプロジェクトのディレクトリ構成です。

.
├── Dockerfile
├── README.md
├── code
│   ├── helloworld
│   │   └── main.hs
│   └── random
│       └── main.hs
├── docker-compose.yml
└── restart.sh

Dockerfiledocker-compose.ymlファイルが確認できると思いますが、これらのファイルの中にHaskellのインストール設定が存在します。

また、codeディレクトリが存在しますが、このディレクトリの中でHaskellコードを管理しています。

Dockerfile

Dockerfileの中身は以下の通りです。

FROM haskell:9.6
WORKDIR /code
RUN cabal update && cabal install --lib random

ベースとなるイメージはhaskell:9.6を使用し、その中で外部ライブラリをインストールしています。

インストールマネージャーはcabalを使用していることに注意してください。 上記の例だと、randomライブラリをインストールしてます。

docker-comopse.yml

docker-compose.ymlファイルの中身は以下の通りです。

version: '3'
services:
  haskell:
    tty: true
    build: .
    volumes:
      - ./code:/code

大したことはしてませんが、volumesオプションにて、ローカルにあるcodeディレクトリをコンテナ内部にある/codeディレクトリへマウントしています。 これにより、

  • ローカルで作成されたファイルがコンテナ内部から確認可能。
  • コンテナ内部で生成されたファイル(コンパイル済みのバイナリファイルなど)をローカルから確認可能。

という状態になります。

page:https://minegishirei.hatenablog.com/entry/2023/11/21/085934