09 Jan 2018

テキストベースの ER 図作成環境の準備

ER 図をテキストベースで作成する方法を調べていたところ、BurntSushi/erd という Haskell 製のツールがあった。Docker を使ってこのツールの環境を整えたのでやったことをメモしておく。

Dockerfile

以下の Dockerfile を準備した。Docker の環境は整っている前提。

FROM haskell:8

RUN apt-get update && apt-get install -y graphviz
RUN cabal update && cabal install graphviz parsec
RUN git clone https://github.com/BurntSushi/erd.git
WORKDIR /erd
RUN cabal configure
RUN cabal build
RUN cp dist/build/erd/erd /usr/bin

ENTRYPOINT [ "erd" ]
CMD [ "--help" ]
  • 最近はあまりアクティブでないプロジェクトなので、README 通りの方法では導入できなかったし、p-r も溜まっている
  • Dockerfile を追加する p-r が出ていたのでそちらをベースにした
  • CMD でヘルプメッセージを表示
  • ENTRYPOINT でコンテナの erd コマンドをホスト側から呼び出せるようにしている

どこかのディレクトリに上記の Docker ファイルを準備して docker run すればよい。

使い方の例

# 入力ファイルを指定
# `docker run -v` で同期したディレクトリを `erd -i` オプションに渡しているが、他に良い方法はある?
$ docker run --rm -v $(pwd):/tmp erd -i /tmp/sample.er > result.pdf
# 出力フォーマットの変更
$ docker run --rm -v $(pwd):/tmp erd -i /tmp/sample.er -f png > result.png

er ファイルと生成される図の例

# Entities are declared in '[' ... ']'. All attributes after the entity header
# up until the end of the file (or the next entity declaration) correspond
# to this entity.
[Person]
*name
height
weight
+birth_location_id

[Location]
*id
city
state
country

# Each relationship must be between exactly two entities, which need not
# be distinct. Each entity in the relationship has exactly one of four
# possible cardinalities:
#
# Cardinality    Syntax
# 0 or 1         0
# exactly 1      1
# 0 or more      *
# 1 or more      +
Person *--1 Location

このファイルから以下の図を生成できる。

docker run --rm -v $(pwd):/tmp erd -i /tmp/simple.er -f png > erd_sample.png

WEB+DB PRESS Vol.98
WEB+DB PRESS Vol.98
posted with amazlet at 18.01.09
丸山 晋平 前佛 雅人 横田 真俊 小原 薫 小笠原 空宙 高橋 征義 牧 大輔 大沢 和宏(Yappo) 久田 真寛 のざき ひろふみ うらがみ 池田 拓司 ひげぽん 遠藤 雅伸 海野 弘成 はまちや2 竹原 日高 正博
技術評論社
売り上げランキング: 39,429