ER図をテキストベースで作成できるerdをDocker化した

インフラ

こんにちは。仁科(@nishina555)です。

先日、MacでER図をテキストベースで書きたいと思いerdというツールをインストールしました。
しかし、ローカルにインストールするのが少々面倒だったのでDocker化しました。

Dockerfileの作成手順について興味があるかたは以下の記事も参考にしてみてください。

また、ローカルで簡単に画像ファイルを作成できるようにラッパースクリプトも併せて作成したので、今回使いかたを共有したいと思います。

erdの利用方法について

本家はこちらになります。

例えば、以下のようなsimple.erというファイルを準備します。

[Person]
*name
height
weight
+birth_location_id

[Location]
*id
city
state
country

Person *--1 Location

次のようなコマンドを実行します。

$ stack exec erd -- -i simple.er -o simple.png

すると次のような画像が作成されます。

erdをDocker化

erdを実行できる環境をDocker化しました。
Dockerfileをビルドし、ビルドしたイメージからコンテナを作成することでDocker上でerdを実行できます。
イメージのビルドからローカルに画像ファイルをコピーする手順は以下のようになります。

$ git clone https://github.com/nishina555/erd.git
$ cd erd
$ docker build . -t erd
$ docker run -it --name erd_container erd /bin/bash
[root@5c54b1666c3a /]# cd erd
[root@5c54b1666c3a erd]# stack exec erd -- -i examples/simple.er -o simple.png
# コンテナからログアウト
$ docker cp erd_container:/erd/simple.png simple.png

実行コマンドのラッパースクリプト

上記のコマンドをみてわかるように、Dockerにログインしたり、画像ファイルをローカルにコピーしたり色々と面倒です。
なので、実行コマンドのラッパースクリプト(generate.sh)を作成しました。
以下のようにすればローカルのerファイルから画像ファイルを作成できます。(erファイルはあらかじめ作成する必要があります。)

$ docker build . -t erd
$  ./generate.sh simple.er simple.png

簡単にgenerate.shがやっていることを説明すると以下のようになります。

  • erdというイメージからコンテナを作成する
  • ローカルのerファイルをコンテナにコピーする
  • コンテナ上でerファイルから画像ファイルに変換する
  • コンテナ上の画像ファイルをローカルにコピーする
  • コンテナを破棄する

最後に

今回のDockerfileは本家をForkしたこちらに置いてあります。