Java
Mac
oracle
ER図
SchemaSpy

MacでスタイリッシュなER図を作成する(Oracle)

「Schema Spy」とは?

Java製のER図生成ツールです。
JDBCドライバを使うことで、OracleやSQL Server、MySQLやPostgreSQLなど様々なDBからER図を生成することができます。
ER図の他にテーブルや制約の定義などもセットで図化されます。

全体的にスタイリッシュなデザインなので、生成したあとはニヤニヤできます。

環境

  • OS:macOS High Sierra 10.13.3
  • Schema Spy:v6.0.0 RC2
  • Java:Version 8 Update 161
  • Graphviz:2.40.1
  • DB:Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

セットアップ

Schema Spyのダウンロード

以下のURLからダウンロードします。
https://github.com/schemaspy/schemaspy#schemaspy-v600-rc2

現行版の5.0.0はスタイリッシュではないので、SchemaSpy v6.0.0 RC2をダウンロードします。

Java 8のインストール

Schema Spyの動作にはJavaが必要なので、インストールします。
すでにインストールしている場合は飛ばしてください。

以下のURLから[Mac OS X]をクリックし、インストーラをダウンロードします。
https://java.com/en/download/manual.jsp

.dmgファイルを実行してインストールします。

Graphvizのインストール

「Graphviz」とは、dot言語というフォーマットで書かれたテキストファイルをグラフへ変換し、画像として出力するツールです。
Schema SpyではER図の出力に使用しています。

Macの場合、Homebrewからインストールします。

$ brew install graphviz --with-librsvg --with-pango

brew install graphviz のみだと生成時に「-Tcmapx' failed with return code 139」エラーが発生してER図が生成されません。
https://github.com/schemaspy/schemaspy/issues/33

JDBCドライバのダウンロード

「JDBCドライバ」とは、JavaアプリからDBを操作するためのミドルウェアです。
「JDBC」は「Java Database Connectivity」の略です。

ベンダごとにドライバが異なり、通常は各ベンダから配布されています。
Oracleも公式サイトで配布しており、バージョンに応じたJDBCドライバをダウンロードします。
http://www.oracle.com/technetwork/jp/database/features/jdbc/index-099275-ja.html

私の場合、Oracleがインストールされている環境にJDBCドライバが含まれていたので、そちらを使用しました。

テーブル定義・ER図の生成

ここまで来たら準備完了です。
以下のコマンドを実行すると、テーブル定義やER図が生成されます。
テーブルや列数によりますが、生成には数十秒~数分かかります。

# java -jar {schemaspy.jarのパス} -t {DBタイプ} -dp {JDBCドライバのパス} -db {DB名} -host {ホスト名} -port {ポート番号} [-s {スキーマ名}] -u {ユーザー名} [-p {パスワード}] -o {出力先パス} -gv {GraphVizのフォルダパス} -cat %
$ java -jar schemaspy-6.0.0-rc2.jar -t orathin -dp ./drivers/ojdbc14.jar -db testdb -host 192.168.10.1 -port 1521 -s TESTSCHEMA -u testuser -p testpass -o ./output -gv /usr/local/Cellar/graphviz/2.40.1 -cat %

DBタイプは「orathin」を指定します。
Oracleのポート番号は「1521」がデフォルトです。

Oracleの場合、スキーマ名を省略するとエラーになりました。
スキーマ名は大文字・小文字を区別するので注意してください。

-cat % を付けないと「ERROR - Catalog name can't be null」エラーが発生して生成できません。
https://github.com/schemaspy/schemaspy/issues/160

テーブル定義・ER図の参照

テーブル定義などはHTML形式で出力されます。
出力先パスの直下にある「index.html」をWebブラウザで開くだけで参照できます。

参考リンク