schemaspyを使ってRailsのDBの資料が簡単に作れたのでネタにしてみます。
用意するもの docker-compose 環境なんですが、これは Mac上で Graphviz が落ちるというのを回避するためにやっています。
まず docker-compose.yml を用意
version: '3' volumes: pgdata: services: db: image: "mdillon/postgis:9.6" volumes: - pgdata:/var/lib/postgresql/data - .:/mydata ports: - "5432:5432" schemaspy: image: "schemaspy/schemaspy:snapshot" volumes: - ./schemaspy:/output depends_on: - db
自分の場合だいたいpostgisを使っているのでimageはpostgisです。
事前準備はこんな感じ。
pg_dump -Fp -O hogehoge > hogehoge.sql docker-compose pull docker-compose up -d db
postgresqlが立ち上がったのでimportします。
docker-compose exec db /bin/bash su - postgres createuser -s foo createdb -O foo bar psql -U foo bar < /mydata/hogehoge.sql
インポートするときは /mydata にデータがあるようにしてるので注意してください。
あとは schemaspy の volumes に schemaspy というディレクトリを指定してるので、先に作ってから出力します。
ちなみに現状の schemaspy:snapshot は -o オプションが指定されてるので変更はできません。
mkdir schemaspy docker-compose run schemaspy -t pgsql -host db -db qq -schemas "public" -u qq -charset utf-8 -rails -I "spatial_ref_sys|geography_columns|geometry_columns|raster_columns|raster_overviews"
これで schemaspy/index.html を開けばOK。
なかでは relation の項目でこんな図ができたりします。
オプションの -rails で spam_id を spams などにリレーションを貼ってくれるようになります。
あと、 -I オプションで除外できるテーブルを指定できるので postgis のやつらを除外すれば rails のみの構成になります。
注意としては schemaspy は github で開発が継続されてから公式ドキュメントが追いついてないのでソースコード読んだほうが機能が見つけやすいです(ぉ
あと、schemaspy で検索すると sourceforge の方がまっさきに出てくるので渋い気持ちになります。
おまけ
snapshot ではなく schemaspy 6.0.0rc2 を動かしてみたいと思って試しに作った Dockerfile も置いておきますね。
FROM openjdk:8-slim RUN apt-get update && apt-get install -y --no-install-recommends \ graphviz \ && rm -rf /var/lib/apt/lists/* RUN mkdir /usr/src/app COPY postgresql-42.1.4.jar /usr/src/app COPY schemaspy-6.0.0-rc2.jar /usr/src/app
jar は各自拾ってきましょう。