13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker for Windows でSchemaSpyを実行しER図を出力

Last updated at Posted at 2019-04-10

ER図って書くの面倒ですよね。
大昔はExcelで何時間もかけて作っていました(高額な専用ツールは支給されなかった)が、後々システムに改修が入った場合また結構な時間をかけて作り直さないといけませんでした。
今更そんな面倒なのやりたくないし時間ももったいないので、DB構造を読み取って自動でER図を出力してくれるツール SchemaSpy を使ってみましょう。

#動作環境

  • Windows10 64bit
  • Docker for Windows
  • Windows PowerShell

#Docker for Windowsの導入
Windows10-64bitの環境があれば、Docker for Windowsを導入してそこでSchemaSpyを実行するのが楽。

#初期設定
###SchemaSpyのインストール

  1. Docker HubのSchemaSpyページにアクセス
    https://hub.docker.com/r/schemaspy/schemaspy/

  2. ページ内に記述されているプルのコマンドをコピー
    $ docker pull schemaspy/schemaspy

  3. Windows PowerShellを起動(管理者権限でなくて良い)

  4. 上の手順でコピーしたpullコマンドを実行

  5. 10数秒でダウンロードとインストールが完了するので、以下のコマンドを実行してインストールを確認
    $ docker images
    image2019-1-7_15-17-8.png

schemaspy/schemaspy がリポジトリ内に確認できればOK

#起動確認
$ docker run -v --net="host" schemaspy/schemaspy:latest
latest はimages出力時の TAG 名から

上記のコマンドを実行してSchemaSpyの起動画面が表示されればインストール成功
ただし、ER図の出力には様々なオプションを指定する必要があるため、次の項目でそれを説明する。
image2019-1-7_15-41-35.png
#ER図の出力
####1. ディレクトリのマウント
ER図はSchemaspy実行時に生成されるコンテナの /output ディレクトリに出力される。
このままではPCからER図を閲覧できないため、 -v オプションでDocker上のコンテナに
PCのフォルダをマウントして、ファイルを取り出せるようにしなければならない。
例:-v "[C:\任意のフォルダ]:/output" ※「:」(コロン)でPCとコンテナを区切る
-v オプションは複数指定可能

####2. JDBCドライバのパス指定
DBに接続して各テーブルからER図を出力する為には、DBに対応したJDBCドライバが必須となる。
-dp オプションでそのドライバの格納場所を指定するが、Windowsのフォルダはパスに指定できないため
-v オプションでマウントして、Docker上のコンテナから読み込ませなければならない。
 例:-v "C:\[任意のフォルダ]:/[Docker上の任意のディレクトリ]"

####3. アクセス権
マウントしたWindowsのフォルダにアクセスするため、初回実行時はDocker for WindowsからPCのログイン情報入力を求められる。
入力が完了するとER図出力処理が続行される。

####4. 各オプションの説明
以下のサイトに各オプションコマンドの解説あり(英語)
http://schemaspy.sourceforge.net/

パラメータ 説明
-v Windows上のフォルダをDocker上のコンテナにマウントするコマンド。「:(コロン)」でWindowsとDocker上のコンテナを区切る -v "C:\DockerOutput\JDBC:/tmp/jdbc"
-t 接続するDBの種類。大文字小文字の区別あり -t netezza
-dp JDBCドライバのパス。Docker上のコンテナを指定する -dp "/tmp/jdbc/jdbc.jar"
-hostOptionalPort Netezza指定時とかで必要になるオプション -hostOptionalPort {サーバーアドレス}:{ポート番号}
-db 接続するDBの名前
-s データベーススキーマ
-u DBにログインするユーザーID -u {DBユーザー名}
-p DBにログインするパスワード -p {DBユーザーパスワード}
-i ER図を出力するテーブルの名前。正規表現での指定可能 -i "MAKITA_.*"
-I ER図の出力から除外するテーブルの名前。正規表現対応 -I "MAKITA_REJECTTABLE"
-charset 文字コード utf-8
-debug 実行時にデバッグログを出力したい場合はこちらを指定

#出力コマンドのサンプル
docker run -v "C:\DockerOutput\JDBC:/tmp/jdbc" -v "C:\DockerOutput:/output" --net="host" schemaspy/schemaspy:latest -t {DBの種類} -dp "/tmp/jdbc/nzjdbc.jar" -hostOptionalPort {サーバーアドレス}:{ポート番号} -db {DB名} -s "{データベーススキーマ}" -u {DBユーザー名} -p {DBユーザーパスワード} -i "T.*" -charset utf-8

#出力結果

  • Tables
    テーブルの一覧

  • Columns
    カラムの一覧
    テーブル名など各項目でソート表示可能

  • Constraints
    制約一覧

  • Relationships
    テーブルとの関係図

  • Orphan Tables
    リレーションの無い独立したテーブル

  • Anomalies
    データベースとスキーマに対して「全く正しく」ないかもしれないこと

    • Columns whose name and type imply a relationship to another table's primary key
      名前と型が別のテーブルの主キーとの関係を暗示している列
    • Tables that contain a single column
      単一列を含むテーブル
    • Columns whose default value is the word 'NULL' or 'null'
      デフォルト値が「NULL」または「null」である列
    • Tables without indexes
      インデックスが無いテーブル
    • Tables with incrementing column names, potentially indicating denormalization
      増加する列名(連番が振られている列名?)を持つ表。非正規化を示す可能性がある
  • Routines

    出力イメージ
    image2019-1-7_20-3-19.png
    リレーションが無い独立したテーブルは図に表示されない
    image2019-1-7_20-1-10.png

#トラブル発生時
上記の出力コマンドでER図は問題無く作成できるはずだが
しばしば「DBに接続できない」や「JDBCドライバが見つからない」等のエラーを吐く。
その場合は以下の手段で解決するかもしれない。

  • Docker for Windowsのリスタート
    タスクトレイからDocker for Windowsのアイコンを右クリックし Restart... を実行
  • 資格情報のリセット
    Windowsのログインパスワードを変更した時などで、Docker内部の資格情報と一致しなくなり
    -v オプションによるマウントが出来なくなってしまうことがある。
    その場合は以下の手順で資格情報をリセットし、SchemaSpy実行後に再度権限を与えることで出力が可能になる。
    1. Docker for Windowsのアイコンを右クリックし Settings をクリック
    2. メニューから Shared Drives をクリックし、その中の Reset credentials をクリック
      image2019-1-7_16-23-13.png
    3. 再度SchemaSpyを実行するとPCのログインパスワードを求められるので、入力して再度資格情報を付与する。

#公式ヘルプ
英語だけどがんばって読もう。設定するパラメータについて詳しく知れるはず。
https://schemaspy.readthedocs.io/en/latest/index.html

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?