本記事は、OSSのノーコード・ローコード開発ツール「プリザンター」 Advent Calendar 2022 の24日目の記事です。
概要
データベース情報からスキーマ定義やER図を出力してくれる SchemaSpy を使ってプリザンターのER図を作成します。最終的にプリザンターから以下のようなER図を作成することを目指します。
SchemaSpyの出力イメージ(ER図)
https://implem.github.io/PleasanterERD/schemaspy/relationships.html
本記事は全3回に分けて連載予定の第3回(最終回)となります。今回はプリザンターの画面上のテーブル単位でER図を作成します。
試した環境
プリザンター 1.3.27.0(2022/12/23時点の最新版)
OS: Windows10
DB: SQL Server 2019 Express Edition (64-bit)
はじめに
プリザンターの画面上のテーブル単位でER図を作成したいので、プリザンターのSitesテーブルに格納されている定義情報を読み込んでER図作成用の中間テーブル(PleasanterERDテーブル)を作成し、これをSchemaSpyにインプットとして与えます。
事前準備
前回までの記事を参考にプリザンターとSchemaSpyの準備を行ってください。
作成手順
1. PleasanterERDデータベースの作成
SQL Server Management Studio (SSMS) を利用してPleasanterERDデータベースを作成します。
データベース「Implem.Pleasanter」を誤って操作しないように注意してください。念のためバックアップを取得してから作業を行うことをお勧めします。
オブジェクトエクスプローラーよりデータベースを右クリックし、「新しいデータベース」を選択します。
新しいデータベースを作成するためのダイアログが表示されるので、データベース名に「Implem.PleasanterERD」と入力してOKボタンをクリックします。
PleasanterERDデータベースができたことを確認します。
2. PleasanterERDテーブルの作成
以下のスクリプト「PleasanterERD-TableCreator.ps1」をコピーしてデスクトップなど任意の場所に配置します。
以下のコマンドを実行し、PleasanterERDテーブルを作成します。
PleasanterERD-TableCreator.ps1
PowerShell のスクリプトが実行できない場合は以下の対応を行ってください。1
Set-ExecutionPolicy による実行ポリシーの変更
PowerShell Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
PS C:\WINDOWS\system32> PowerShell Get-ExecutionPolicy
Restricted
PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
PS C:\WINDOWS\system32>
以下のようにコンソールにログが出力されればOKです。
PS C:\Users\noro> C:\Users\noro\Desktop\PleasanterERD-TableCreator.ps1
外部キーの削除:FK_3_ClassA_2
外部キーの削除:FK_4_ClassA_2
外部キーの削除:FK_7_ClassA_6
~中略~
テーブル削除:2,WBS(Issues_2)
テーブル削除:3,課題管理(Issues_3)
テーブル削除:4,レビュー記録(Results_4)
~中略~
テーブル作成:2,WBS(Issues_2)
テーブル作成:3,課題管理(Issues_3)
テーブル作成:4,レビュー記録(Results_4)
~中略~
データ型の変更:ClassA
外部キーの追加:FK_3_ClassA_2
データ型の変更:ClassA
外部キーの追加:FK_4_ClassA_2
データ型の変更:ClassA
外部キーの追加:FK_7_ClassA_6
~中略~
テーブル列名の変更:2,Id -> ID(IssueId)
テーブル列名の変更:2,Ver -> バージョン(Ver)
テーブル列名の変更:2,Title -> タイトル(Title)
~中略~
テーブル名の変更:2 -> WBS(Issues_2)
テーブル名の変更:3 -> 課題管理(Issues_3)
テーブル名の変更:4 -> レビュー記録(Results_4)
~中略~
PS C:\Users\noro>
プリザンターの画面上のテーブル単位でPleasanterERDデータベースに物理テーブルが作成されました。
3. 日本語フォントのインストール
以下のリンクから日本語フォントをインストールします。
日本語フォントをインストールしないと出力された文字が文字化けしてお豆腐になってしまったり枠線からはみ出てしまいます。2
ダウンロードしたファイルを展開し、「ipdaexg.ttf」を右クリックしてインストールします。
4. SchemaSpyの実行
SchemaSpyで以下のコマンドを実行します。
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.PleasanterERD -u sa -s dbo -p saのパスワード -o C:/SchemaSpy/output -connprops encrypt\=false -font "IPAGothic" -imageformat svg
SchemaSpyの実行結果
Microsoft Windows [Version 10.0.19042.2364]
(c) 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.PleasanterERD -u sa -s dbo -p saのパスワード -o C:/SchemaSpy/output -connprops encrypt\=false -font "IPAGothic" -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 7772 (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 5.278 seconds (JVM running for 6.839)
INFO - Starting schema analysis
INFO - Connected to Microsoft SQL Server - 15.00.2095
INFO - Gathering schema details
Gathering schema details......................................(1sec)
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 relationships.real.compact.dot -orelationships.real.compact.svg:
ERROR - dot -Tsvg relationships.real.compact.dot -orelationships.real.compact.svg: (dot.exe:2256): Pango-WARNING **: couldn't load font "IPAGothic Not-Rotated 11", falling back to "Sans Not-Rotated 11", expect ugly output.
~中略~
ERROR - dot -Tsvg _______Results_25__ce04b082.1degree.dot -o_______Results_25__ce04b082.1degree.svg: Warning: cell size too small for content
ERROR - dot -Tsvg _______Results_25__ce04b082.1degree.dot -o_______Results_25__ce04b082.1degree.svg: in label of node 蜍牙シキ莨壹Μ繧ケ繝茨シ?Results_25?シ?
.(9sec)
Wrote relationship details of 35 tables/views to directory 'C:\SchemaSpy\output' in 16 seconds.
View the results by opening C:\SchemaSpy\output\index.html
INFO - Wrote table details in 9 seconds
INFO - Wrote relationship details of 35 tables/views to directory 'C:\SchemaSpy\output' in 16 seconds.
INFO - View the results by opening C:\SchemaSpy\output\index.html
C:\SchemaSpy>
プリザンターの画面上のテーブル単位でDBドキュメントが作成されました!
画面上部のRelationshipsをクリックすると、ER図が確認できました。
Diagramsは左上からCompactとLargeが選べます。キー項目に着目して全体を俯瞰したい場合はCompact、各テーブルの詳細項目を確認したい場合はLargeを選ぶのがよさそうですね。
以下にSchemaSpyで出力したドキュメント関連ファイルを置いておきました。
おまけ①
A5:SQL Mk-2というツールを使うと以下のようなテーブル定義書が作成できます。
出力方式はExcelとHTMLが選べるようです。以下にA5:SQLで出力したドキュメント関連ファイル(HTML版)を置いておきました。
おまけ②
スクリプトをデバッグするときは「Pause」と記載のあるコメント行を解除してコンソールに出力されているログを確認してみると解決につながることがあるかもしれません。
おわりに
ER図作成用の中間テーブルをつくることでプリザンターからSchemaSpyでDBドキュメントを作成することができました。DBドキュメントの作成を省力化して、ノーコード・ローコード開発ツールのプリザンターをより活用していただけたら嬉しいです。最後までお読みいただきありがとうございました。
参考リンク
- SchemaSpy
- A5:SQL Mk-2
- プリザンター ユーザマニュアル - FAQ:プリザンターに設定した日本語の項目名でデータベースのビューを作成する