Small Changes

新しいプロジェクトでとりあえずER図を出力したいときにSchemaspyが便利だった話



新しいプロジェクトはDocker + Rails + PostgreSQLで開発しており、 「rails er図」で調べると大体rails-ERDが候補で上がってきます。

プロジェクトには導入されていないので、個人的に毎回追加してbundle installするのも面倒だなーと思っていたら Schemaspyを見つけました。

Schemaspyで生成されるサンプルドキュメントはこちらで確認できます。

SchemaspyコンテナからER図を生成

SchemaspyはDockerイメージが提供されているため、今回の方法を使えば既存のプロジェクトに影響を与えることなくER図を生成できます。

イメージはこんな感じです。

Schemaspyコンテナを起動して、プロジェクトのDBコンテナを読み取ってER図を生成。

Schemaspyコンテナの/outputに出力されます。

Schemaspyコンテナの/outputはホストの/schemaにマウントさせるので、ホスト側のschema/index.htmlをブラウザで開いてER図を確認できるようになります。

特にプロジェクト側に何かを追加する必要はないので、プロジェクトに手を加えずにER図を出力することができます。

手順

docker pullでschemaspyのイメージを取得。

docker pull schemaspy/schemaspy:snapshot

docker-compose up等でプロジェクトのdbコンテナを起動しておきます。

Schemaspyを使ってER図を生成します。

今回対象のDBはpostgreSQLになります。

docker run -v "$PWD/schema:/output" --net="host" -u root:root schemaspy/schemaspy:snapshot -t pgsql -host localhost:5432 -db app_development -u root -p app_dev_password -connprops useSSL\\\\=false -all

# 上記コマンドの説明
docker run -v "[ホスト側のディレクトリ]:/output" --net="host" -u root:root schemaspy/schemaspy:snapshot -t [データベースの種類] -host localhost:[DBの接続ポート] -db [DB] -u [DBのユーザー名] -p [DBのパスワード] -connprops useSSL\\\\=false -all

ホスト側の$PWD/schemaに出力されるので、

ホスト側のschema/index.htmlをブラウザで開いてER図確認します。

出力する際にGraphvizがないために下記のエラーがでますが、GraphvizがなくてもとりあえずER図は確認できました。

ERROR - dot -Tpng:cairo clients.2degrees.dot -oclients.2degrees.png -Tcmapx: in label of node inspections
ERROR - dot -Tpng:cairo clients.2degrees.dot -oclients.2degrees.png -Tcmapx: Warning: cell size too small for content

参考

References