2014年7月22日火曜日

SchemaSpyを使ってSQL Serverからテーブル定義書とER図の自動出力(Windows)

記念すべき初投稿です。

ということで、早速ですが、タイトル通りSchemaSpyを使ったテーブル定義書の出力について、いろいろはまったのとWindows+SqlServerの組み合わせでの解説が意外となかったので、個人的にメモをします。

SchemaSpyとは


Javaで作成されている、データベースを解析して、設定したコメントや、外部キー設定などから、テーブル定義、ER図をhtml形式で出力してくれるツール。
コマンドベースなので設定さえしてしまえば後は、自動実行といったことが可能です。

本家サイト
出力サンプル(本家)

必要な作業

  1. Javaのインストール
  2. Graphivizのインストール
  3. SchemaSpy実行ファイルの準備
  4. SQL Server JDBCドライバの準備
  5. コマンドの実行

なお、私の動作環境はWindows Server 2008 R2、SQL Server 2008 R2です。(SQL Server 2005でも動作しました。)


設定手順


1.Javaのインストール


Javaをインストールして、パスを設定します。本家サイトでは"Java 5 or higher"となっています。私の環境では2014年7月17日時点最新のJava Version 7 Update 56をインストールしました。

2.Graphvizのインストール


ER図の出力に必要なGraphvizをインストールします。なくてもSchemaSpy自体は動作するのですが、ER図が出力されないので、魅力半減です。インストールするだけで小難しい設定は不要なので迷わずインストールすることをお勧めします。

以下のサイトからダウンロードしてインストールします。
Graphviz

私の環境ではバージョン2.38をインストールしました。古いバージョンだとうまく出力されない場合があるようです。また、インストール後、Windows環境変数のPathにGraphvizインストールフォルダのbinに対してパスが設定されているか確認します。
(パスが通ってない場合は手動で追加)


3.SchemaSpy実行ファイルの準備


上述、本家サイトの左メニューを選択して最新のschemaSpy_5.0.0.jarをダウンロードするだけです。


っと、いいたい所なんですが、うまく動きません。(一番はまりました)

実行可能ファイルの更新は2010年からとまっており、SQL Server 2008には対応してないようです。
また、SQL Server 2005でも同様で、コメントが出力されなかったり、ER図が出力されなかったりしました。

ただし、ソースファイル自体は更新され続けています。ソースはSubversionで以下で取得できます。

svn checkout svn://svn.code.sf.net/p/schemaspy/code/trunk schemaspy-code

あとはEclipseなんかで開いて実行可能Jarファイル作成すればOKです!
(このために10年ぶりにEclipseさわりました。。)


4.SQL Server JDBCドライバの準備


データベースへ接続するためのJDBCドライバを準備します。これはJarファイルをダウンロードするだけです。

jtds-1.3.1-dist.zip


※SQL Server 2012に接続する場合は別のドライバが必要みたいです(未確認)

5.コマンドの実行


ここまでで準備はできたので、あとは適当なフォルダを作成して、SchemaSpy本体Jarファイルと、JDBCドライバJarファイルを保存し、同ディレクトリにてコマンドプロンプトから実行するだけです。

java -jar schemaspy.jar -s dbo -dp jtds-1.3.0.jar -t mssql05-jtds  -db <dbName> -host "<hostName>" -o "<出力先ディレクトリ>" -u <ユーザー名> -p <パスワード> -charset utf-8 -port 1433 -norows


私は以下のようにバッチファイルを作成して実行しています。
java -jar schemaspy.jar  ^
-s dbo ^
-dp jtds-1.3.0.jar ^
-t mssql05-jtds  ^
-db  ^
-host ""  ^
-o "<出力先ディレクトリ>"  ^
-u <ユーザー名>  ^
-p <パスワード>  ^
-charset utf-8   ^
-port 1433 ^
-norows
細かい内容は本家サイトに書いてありますが、注意点は"-s"の部分です。
本家の説明では特に必要といった記述はありませんでしたが、ないと動作しませんでした。
また"-t"の部分は、データベースの種類を指定する場所ですが、SQL Server 2008でも"mssql05-jtds"でいいようです。



使用してみた感想


会社ではさらにこれをJenkinsに登録しています。作業の流れ的には

  1. Visual Studioのデータベースプロジェクトでスキーマ修正、コミット
  2. Jenkinsでプロジェクトビルド、テストサーバーにデータベースの変更を反映
  3. データベースの変更完了後、SchemaSpy+Jenkinsにて定義書自動出力
といったことをやっています。何もしなくても常に仕様書が最新に保たれてる状態なので、とても気分がよく、どや感が半端ないです。

あとER図がとても見やすいです。(最初は.netで自分で作ろうかとも考えてたんですが、SchemaSpyのER図見た瞬間やめました。)
また、全体だけではなく、それぞれのテーブルを中心としたER図を見れるのも便利です。

VisioやA5:SQL Mk-2等、データベースから定義書・ER図出力をするツールはいくつか試しましたが、テーブルが50,100を超えるスキーマがざらにあるうちの開発では手作業では正直やってらんないです。(変更もしょっちゅうだし....)


今後活躍していくことになりそうです。
(せっかくEclipseもいれたことだし、改造してStoredの一覧なんかも出力できたらいいなぁ)



参考サイト