SchemaSpyを使うとDBからデータを吸い上げてテーブルの相関をビジュアライズしてくれます。
本来ER図からDDLを生成出来るようにしておくべきで、出来れば使わない方がいいチート系のツールですがCIサイクルに取り入れて前向きなチェック用途で使われるこも多いかと思います。
参画したプロジェクトやサポートに行ったプロジェクトでER図を見せてもらおうとしたら「メンテされてないと思うので不正確ですが」とか前置きされると「え・・・あー、じゃあ参考までに頂けますか?」みたいな感じで取りあえず貰ったりします。
こういったプロジェクトでDB構成がどうなっているのか正確に現状把握したい場合は、DBからER図をリバース生成して、最新の状況を「正」として見た方が間違いが無い可能性が高いです。足りない情報はメンテされていない設計書を見て補完する、とかで対応。
やっぱり漏れを発見したら、本来のER図を修正なり指摘してあげるとかすれば、困っている人達から有難がられたりするボーナスも付いてきます。
以下の記事で入れたPostgreSQL公式サンプルデータ「dvdrental」のER図をSchemaSpyを使って作ります。
目次
SchemaSpyとは
Java製のER図自動生成ツール。
構築環境
- Windows 10
- JDK 8以上
- CentOS 7にdvdrentalが入ったPostgreSQL 11がある状態
- PostgreSQLは外部ホストからdevelユーザ、devel#123パスワードで接続出来る状態
schemaspyをダウンロード
公式からjarファイルをダウンロード。
今回はschemaspy-6.0.0.jarをC:\toolsに配置。
http://schemaspy.org/
graphvizをインストール
ShemaSpyはダイアグラム画像を生成する為に「Graphviz」を使用します。Doxygenなんかでも使うアレですね。
Graphvizをダウンロードしてインストールします。2.3.8のmsiを使ってWindows10にインストール。
(schemaspy6.1.0からはvizjsで代替する為、Graphvisのインストールは不要になるとのことです)
https://schemaspy.readthedocs.io/en/latest/installation.html
Graphvizは自身にPATHを通してくれないので「C:\Program Files (x86)\Graphviz2.38\bin」にPATHを通しておきます。これでSchemaspyがGraphvizのdot.exeを使えるようになります。
ちょっと面倒ですが、6.1.0が出るまでの辛抱ですね。
PostgreSQLのJDBCドライバをダウンロード
PostgreSQLにJDBC接続する為のドライバをダウンロード。
「PostgreSQL JDBC 4.2 Driver, 42.2.6」を同じくC:\toolsに配置。
https://jdbc.postgresql.org/download.html
ER図を作成
C:\toolsから以下のコマンドを実行。
java -jar schemaspy-6.0.0.jar -t pgsql -dp .\postgresql-42.2.6.jar -db dvdrental -host 192.168.0.4 -port 5432 -s public -u devel -p devel#123 -o .\ER
C:\tools>java -jar schemaspy-6.0.0.jar -t pgsql -dp .\postgresql-42.2.6.jar -db dvdrental -host 192.168.0.4 -port 5432 -s public -u devel -p devel#123 -o .\ER
____ _ ____
/ ___| ___| |__ ___ _ __ ___ __ _/ ___| _ __ _ _
\___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | |
___) | (__| | | | __/ | | | | | (_| |___) | |_) | |_| |
|____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, |
|_| |___/
6.0.0
SchemaSpy generates an HTML representation of a database schema's relationships.
SchemaSpy comes with ABSOLUTELY NO WARRANTY.
SchemaSpy is free software and can be redistributed under the conditions of LGPL version 3 or later.
http://www.gnu.org/licenses/
INFO - Starting Main v6.0.0 on phemt with PID 12056 (C:\tools\schemaspy-6.0.0.jar started by naka in C:\tools)
INFO - The following profiles are active: default
INFO - Started Main in 1.655 seconds (JVM running for 2.31)
INFO - Configuration file not found
INFO - Starting schema analysis
INFO - Connected to PostgreSQL - 11.4
INFO - Gathering schema details
Gathering schema details.........................(0sec)
Connecting relationships.........................(0sec)
Writing/graphing summary.INFO - Gathered schema details in 0 seconds
INFO - Writing/graphing summary
..............(2sec)
Writing/diagramming detailsINFO - Completed summary in 2 seconds
INFO - Writing/diagramming details
......................(7sec)
Wrote relationship details of 22 tables/views to directory '.\ER' in 11 seconds.
View the results by opening .\ER\index.html
INFO - Wrote table details in 7 seconds
INFO - Wrote relationship details of 22 tables/views to directory '.\ER' in 11 seconds.
INFO - View the results by opening .\ER\index.html
C:\tools\ERにHTML資源がアウトプットされます。
(*)ここで以下のような接続エラーが出る場合は外部ホストからPotgreSQLに接続できる設定が出来ていません。
WARN - Connection Failure
postgresql.conf、pg_hba.confを確認して外部から接続出来るようにし、PostgreSQLを再起動。
postgresql.conf
#listen_addresses = 'localhost' # what IP address(es) to listen on;
listen_addresses = '0.0.0.0' # what IP address(es) to listen on;
pg_hba.conf
# "local" is for Unix domain socket connections only
host all devel 192.168.0.0/24 md5
local all all peer
動作確認
C:\tools\ER\index.htmlをダブルクリック。
上メニューからRelationshipsを選択して全体のER図が表示されることを確認します。
プロジェクト分析ツールの一環として
ドキュメントが整備されていなくてもDBのリレーションが一瞬で分かるようになりました。
DBはこれでざっくり把握して、プログラムの方はDoxygenでクラス図、呼び出し関連を把握、とかすると新規参画したプロジェクト成果物の把握が早まると思います。