【Docker】SchemaSpy(スキームスパイ) を使って自動的にER図を生成する(改良版
Docker で SchemaSpy(スキームスパイ) を使って自動的にER図を生成する。(改良版
以前書いた記事(【Docker】SchemaSpy を使って自動的にER図を生成する)がSchemaSpyのアップデートのためか動作がおかしくなったため改良版を書きました。
SchemaSpy を使ってみる
SchemaSpyを使ってみます。
ファイル構成
以下のようにファイルを構成してください。
├─.docker
│ └schemaspy
│ └schemaspy.properties
└─docker-compose.yml
schemaspy.properties
# DB type
schemaspy.t=mysql
schemaspy.dp=/drivers
schemaspy.host=mysql
schemaspy.port=3306
schemaspy.db=test
schemaspy.s=test
schemaspy.u=develop
schemaspy.p=p@ssw0rd
プロパティ説明
schemaspy.t
: データベース種別schemaspy.dp
: ドライバーパスschemaspy.host
: DBホストschemaspy.port
: ポート番号schemaspy.db
: DB名schemaspy.s
: スキーマ名schemaspy.u
: ユーザ名schemaspy.p
: パスワード
docker-compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| version: '3'
services:
mysql:
container_name: mysql
image: mysql:8.0
command:
- --sql-mode=NO_ENGINE_SUBSTITUTION
volumes:
- ./.data/mysql:/var/lib/mysql
- ./.docker/mysql/init:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: develop
MYSQL_PASSWORD: p@ssw0rd
TZ: 'Asia/Tokyo'
schemaspy:
container_name: schemaspy
image: schemaspy/schemaspy:snapshot
volumes:
- ./.docker/schemaspy/schemaspy.properties:/schemaspy.properties # SchemaSpy Properties File
- ./schemaspy/output:/output # SchemaSpy Output dir
depends_on:
- mysql
environment:
SCHEMASPY_OUTPUT: /output # SchemaSpy Output dir
|
実行
- まずはMysqlを起動します。
docker-compose up -d --build mysql
- テーブルを作成(SQLはMysql公式サンプル world_x_database を使用MySQL :: Other MySQL Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
`ID` int NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Info` json DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS `country`;
CREATE TABLE `country` (
`Code` char(3) NOT NULL DEFAULT '',
`Name` char(52) NOT NULL DEFAULT '',
`Capital` int DEFAULT NULL,
`Code2` char(2) NOT NULL DEFAULT '',
PRIMARY KEY (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS `countryinfo`;
CREATE TABLE `countryinfo` (
`doc` json DEFAULT NULL,
`_id` varbinary(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,_utf8mb4'$._id'))) STORED NOT NULL,
`_json_schema` json GENERATED ALWAYS AS (_utf8mb4'{"type":"object"}') VIRTUAL,
PRIMARY KEY (`_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS `countrylanguage`;
CREATE TABLE `countrylanguage` (
`CountryCode` char(3) NOT NULL DEFAULT '',
`Language` char(30) NOT NULL DEFAULT '',
`IsOfficial` enum('T','F') NOT NULL DEFAULT 'F',
`Percentage` decimal(4,1) NOT NULL DEFAULT '0.0',
PRIMARY KEY (`CountryCode`,`Language`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `countrylanguage_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
- SchemaSpyを実行
docker-compose up -d --build schemaspy
schemaspy/output
のディレクトリにファイルが出力されたら成功です。
出力されたHTMLを見るとテーブル情報を確認ができます。
またER図を出力してくれるのでリレーションの確認もできます。
参考