SchemaSpyでデータベースのビジュアライズ化をしてみる（お試し篇）

## はじめに

- 以前、[こちら](https://qiita.com/enuswi/items/d52055a23425e99cc964)の記事でAPI定義をコードで管理して幸せを掴んだ話を書かせていただきました
- と、なってくるとデータベース定義に関しても幸せになりたいなと思うのが世の常でございます
- なにやらSchemaSpyというツールを使うとER図の生成ができるということだったので試してみたいと思います

## SchemaSpyとは

> chemaSpy is a Java-based tool (requires Java 8 or higher) that analyzes the metadata of a schema in a database and generates a visual representation of it in a browser-displayable format. It lets you click through the hierarchy of database tables via child and parent table relationships as represented by both HTML links and entity-relationship diagrams. It’s also designed to help resolve the obtuse errors that a database sometimes gives related to failures due to constraints.

- Javaベースのデータベースビジュアライズツールということですね。おそらく。

cf. [デモ](https://schemaspy.org/sample/index.html)
cf. [ドキュメント](https://schemaspy.readthedocs.io/en/latest/)

## まずは動かしてみる

- 今回はサンプルとしてdockerでWordPressをたてて試してみます
- WordPressのdocker環境は[こちら](https://docs.docker.jp/compose/wordpress.html)で簡単に用意できます
- 記載のymlファイル（以下参照）を作成し、 `docker-compose up -d` でコンテナを立ち上げたら、ブラウザにて `localhost:8000` で初回アクセス、WordPressの初期設定まで完了したら準備完了です
- ※ ホストから繋ぐためdbコンテナ側の `ports` 設定だけ追加してます

```docker-compose.yml
version: '3'

services:
   db:
     image: mysql:5.7
     ports:
      - "3306:3306"
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
```

![スクリーンショット 2021-12-11 14.19.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46053/3fb2fee5-7df2-5109-713b-a1548a676ac1.png)
↑ブラウザはここまででOK

- つづいて、ドキュメントを生成していきましょう
- Dockerで使用できるようSchemaSpy公式がイメージを公開してるので簡単に生成できます
- ただ、driverが古いとのことでそのまま実行するとコケるので、まずは最新のdriverを導入します

```
$ mkdir drivers
$ curl -L https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.27.tar.gz |    tar xvzf - -C drivers --strip=1 mysql-connector-java-8.0.27/mysql-connector-java-8.0.27.jar

$ docker run -v "$PWD/schema:/output" -v "$PWD/drivers:/drivers"  --net="host" schemaspy/schemaspy:snapshot -t mysql -host localhost:3306 -db wordpress -u root -p somewordpress -s wordpress
```

|オプション一部抜粋|説明|
|----|----|
|-t|データベースタイプ（ex. mysql, pgsql）|
|-host|ホスト|
|-db|データベース名|
|-u|ユーザー|
|-p|パスワード|
|-s|スキーマ名（※ MySQLでも指定が必要。データベース名と同一でOK）|

cf. https://schemaspy.readthedocs.io/en/latest/configuration/commandline.html

![スクリーンショット 2021-12-11 15.25.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46053/b074b7ea-b66c-9d75-da53-6538ec7cebfb.png)

- なにやらめっちゃエラーと出ましたが、とりあえず出力が成功したようです
- 出力されたindex.htmlをブラウザで開いてみると無事表示されました

![スクリーンショット 2021-12-11 15.27.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46053/eed8e9c2-16eb-49da-0e63-9494c8790361.png)

![スクリーンショット 2021-12-11 15.32.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46053/85d988a5-f138-e992-f0c2-7df18773bdfa.png)

## おわりに

- 今回は、SchemaSpyを用いたデータベースのビジュアライズ化を試してみました
- 次は生成したページの方を掘り下げる＆実運用のことを考えていければと思います