プリザンターでER図を作成する②＜SchemaSpy準備編＞

本記事は、[OSSのノーコード・ローコード開発ツール「プリザンター」 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/pleasanter) の15日目の記事です。

## 概要
データベース情報からスキーマ定義やER図を出力してくれる [SchemaSpy](https://schemaspy.org/) を使ってプリザンターのER図を作成します。最終的にプリザンターから以下のようなER図を作成することを目指します。

SchemaSpyの出力イメージ（ER図）
https://implem.github.io/PleasanterERD/schemaspy/relationships.html

本記事は全3回に分けて連載予定の第2回となります。今回はSchemaSpyを実行するための準備について記載します。

### 試した環境
プリザンター 1.3.26.1（2022/12/15時点の最新版）
OS: Windows10
DB: SQL Server 2019 Express Edition (64-bit)

### はじめに
今回はプリザンター自体のデータベース定義情報をSchemaSpyで出力してみます。

### 事前準備
以下のマニュアルを参考にプリザンターをインストールします。今回の記事ではプリザンターをWindows 10（データベースはSQL Server）にインストールする前提で進めます。

https://pleasanter.org/manual/getting-started-pleasanter-windows10

### 導入手順
#### 1. Graphvizのインストール
Graphvizをインストールします。

https://graphviz.org/

:::note warn
[SchemaSpyの公式マニュアル](https://schemaspy.readthedocs.io/en/latest/installation.html)を見ると、「バージョン 6.1.0 以降、Graphviz は不要になりました。コマンドライン引数 vizjs を追加することで使用できる組み込みの viz.js があります。」との記載がありますが、vizjsオプションはJava15以降では動きません。[^1]
[^1]: [こちらの記事](https://zenn.dev/onozaty/articles/schema-spy-er)に詳しく記載されています。
:::

:::note info
vizjsオプションを指定するよりGraphvizをインストールして使った方がSchemaSpyの処理速度が早いので、繰り返し利用する場合はGraphvizをインストールすることをおすすめします。
:::

「Download」をクリックしてインストーラをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/7b484375-3bce-c74c-3dee-99bcd788a432.png)

「graphviz-7.0.4 (64-bit) EXE installer」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/73400b97-13a2-2e4e-9450-464c6944a166.png)

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/9a54036b-ee2d-024a-56fd-70ce2db46b65.png)

「同意する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/0099e7a3-193c-773f-519e-5f79c23ee503.png)

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/7fa85565-85a0-4368-36b9-0fa46194a7f8.png)

環境変数にパスを追加する場合は「Add Graphviz to the system PATH for all users」または「Add Graphviz to the system PATH for current user」を選択します。

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/d7a667be-043f-7dbd-ccbe-5ac602748455.png)

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/848828ca-7f47-868f-6bea-bdaf03abee3a.png)

「インストール」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/6bfc67a8-6b3a-b76e-cfc8-78cd867b2e66.png)

「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/560153ef-cdbf-8e57-64d0-6a855cbe7fc9.png)

#### 2. Adoptium(旧:AdoptOpenJDK)のインストール
Adoptium(旧:AdoptOpenJDK)をインストールします。

https://adoptium.net/

:::note info
AdoptOpenJDKはEclipse Adoptiumになりました。[^2]
[^2]: [こちらの記事](https://zenn.dev/sasakiki/articles/54f68ee1576380)に詳しく記載されています。
:::

:::note warn
Graphvizをインストールせずにvizjsオプションを指定してSchemaSpyを利用する場合はVersion8または11をインストールしてください。
:::

「Latest LTS Release jdk-17.0.5+8」をクリックしてインストーラをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/77d194a1-07ba-dec1-37f1-096a507d83ee.png)

ダウンロードした「OpenJDK17U-jdk_x64_windows_hotspot_17.0.5_8.msi」を実行します。

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/ab0c61f5-35eb-28b1-2a4a-5a70469fba07.png)

「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/d2ed601c-1a41-5a40-d791-8473b3e151b8.png)

「インストール」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/6b21217b-a774-a65a-cebe-d5838c194f4c.png)

「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/b37fe2c8-1209-a019-9a1e-76192482f49f.png)


#### 3. Microsoft SQL Server 用 JDBC Driver のダウンロード
Microsoft SQL Server 用 JDBC Driver をダウンロードします。

https://learn.microsoft.com/ja-jp/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16

「Microsoft JDBC Driver 11.2 for SQL Server (zip) のダウンロード」をクリックしてjarファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/65587968-7b1c-f9c6-a0e6-b7eb9f5994b1.png)

「mssql-jdbc-11.2.1.jre17.jar」がダウンロードされたことを確認します。

#### 4. SchemaSpyのjarファイルのダウンロード
SchemaSpyのjarファイルをダウンロードします。

https://github.com/schemaspy/schemaspy

:::note warn
[SchemaSpyの公式ページ](https://schemaspy.org/)からダウンロードできる「schemaspy-6.1.0.jar」だと実行エラーになるので、GitHubのLatest Buildを利用します。[^3]
[^3]: [こちらの記事](https://ts0818.hatenablog.com/entry/2021/10/31/184405)に詳しく記載されています。
:::

画面を下にスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/f23c89be-06a6-f8e9-d51e-08c57a513542.png)

Latest Buildの「schemaspy@latest」をクリックしてjarファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/b53c5392-a8c1-4660-9558-06dd1c5c8e08.png)

「schemaspy-6.1.1-SNAPSHOT.jar」がダウンロードされたことを確認します。

### 実行手順

場所はどこでもよいのですが、今回はC:ドライブ直下にSchemaSpyフォルダを作成して実行用ファイルを配置します。

```
C:\SchemaSpy
  |-- mssql-jdbc-11.2.1.jre17.jar
  |-- schemaspy-6.1.1-SNAPSHOT.jar
```

おつかれさまでした。ここまできたら、以下のコマンドでSchemaSpyを実行してみましょう！

```bat:実行コマンド
cd C:\SchemaSpy
java -jar schemaspy-6.1.1-SNAPSHOT.jar -t mssql17 -dp mssql-jdbc-11.2.1.jre17.jar -host 127.0.0.1 -port 1433 -db Implem.Pleasanter -u sa -s dbo -p saのパスワード -o C:/SchemaSpy/output -connprops encrypt\=false -imageformat svg
```

```:実行結果
Microsoft Windows [Version 10.0.19042.631]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\Users\noro>cd C:\SchemaSpy

C:\SchemaSpy>java -jar schemaspy-6.1.1-SNAPSHOT.jar -t mssql17 -dp mssql-jdbc-11.2.1.jre17.jar -host 127.0.0.1 -port 1433 -db Implem.Pleasanter -u sa -s dbo -p saのパスワード -o C:/SchemaSpy/output -connprops encrypt\=false -imageformat svg
  ____       _                          ____
 / ___|  ___| |__   ___ _ __ ___   __ _/ ___| _ __  _   _
 \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | |
  ___) | (__| | | |  __/ | | | | | (_| |___) | |_) | |_| |
 |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, |
                                             |_|    |___/

                                              6.1.1-SNAPSHOT

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.1.1-SNAPSHOT on DESKTOP-3FUMCFT with PID 3192 (C:\SchemaSpy\schemaspy-6.1.1-SNAPSHOT.jar started by noro in C:\SchemaSpy)
INFO  - The following profiles are active: default
INFO  - Started Main in 3.794 seconds (JVM running for 4.932)
INFO  - Starting schema analysis
INFO  - Connected to Microsoft SQL Server - 15.00.2095
INFO  - Gathering schema details
Gathering schema details.................................................................................(2sec)
Connecting relationships.................................................................................(0sec)
Writing/graphing summary.INFO  - Gathered schema details in 0 seconds
INFO  - Writing/graphing summary
INFO  - Graphviz renderer set to ':cairo'
...ERROR - dot -Tsvg orphans.dot -oorphans.svg: Warning: cell size too small for content
ERROR - dot -Tsvg orphans.dot -oorphans.svg: in label of node Binaries
～中略～
....(5sec)
Writing/diagramming detailsINFO  - Completed summary in 5 seconds
INFO  - Writing/diagramming details
..ERROR - dot -Tsvg Groups.1degree.dot -oGroups.1degree.svg: Warning: cell size too small for content
ERROR - dot -Tsvg Groups.1degree.dot -oGroups.1degree.svg: in label of node Groups
～中略～
....(11sec)
Wrote relationship details of 78 tables/views to directory 'C:\SchemaSpy\output' in 22 seconds.
View the results by opening C:\SchemaSpy\output\index.html
INFO  - Wrote table details in 11 seconds
INFO  - Wrote relationship details of 78 tables/views to directory 'C:\SchemaSpy\output' in 22 seconds.
INFO  - View the results by opening C:\SchemaSpy\output\index.html

C:\SchemaSpy>
```

C:\SchemaSpyに「output」フォルダができるので、その中の「index.html」をブラウザで開いてみると、プリザンター自体のDBドキュメントが作成されています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/9f807478-735f-9641-e974-c9db95b382de.png)

個別のテーブルについても見てみましょう。Issuesテーブルを見てみると、プリザンターの期限付きテーブルの分類項目に相当する「ClassA」「ClassB」「ClassC」などが図に出力されていることが分かりますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37295/04af18c8-4e7c-e49b-3983-f30cc04b2916.png)

### おわりに
プリザンター以外でもSQL Serverを使っているシステムであれば上記を参考にSchemaSpyでDBドキュメントを作成できると思います。第3回の記事ではプリザンターの画面上のテーブル単位でER図を作成する手順を公開予定です。

## 参考リンク
[- Graphviz](https://graphviz.org/)
[- Adoptium](https://adoptium.net/)
[- Microsoft SQL Server 用 JDBC Driver のダウンロード](https://learn.microsoft.com/ja-jp/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16)
[- SchemaSpy GitHub](https://github.com/schemaspy/schemaspy)