【手軽】SchemaSpyを既存Docker環境に追加する方法

## 概要
すでに稼働しているDocker PJにSchema Spyを追加して手軽にER図を無料で自動生成する方法を記載します。
古い記事などが多く、動かないものも多かったので改めて記事化しました。

簡易版なので
1. docker-compose.yamlへの追加
1. schemaspy用のDockerfile、schemaspy.propertiesの作成
1. dockerを起動し生成

の3ステップのみの構成となっています。

## 環境
Intel Mac
MySQL5.7


## 手順

### 1. docker-compose.yamlへの追加
`docker-compose.yaml`の`services`に下記を追加する
```yaml:docker-compose.yaml
services:
  schemaspy:
    build: ./schemaspy
    image: treetips/schemaspy-mysql
    container_name: schemaspy
    volumes:
      - ./schemaspy:/app/html:rw
      - ./schemaspy/config/schemaspy.properties:/app/schemaspy.properties:ro
    environment:
      - LANG=ja_JP.UTF-8
      - TZ=Asia/Tokyo
    working_dir: "/app"
    command: "java -jar schemaspy.jar"
```
### 2. schemaspy用のDockerfile、schemaspy.propertiesの作成
プロジェクト直下に`schemaspy`ディレクトリを作成し、
`Dockerfile`と`schemaspy.properties`を`schemaspy`ディレクトリに作成する

```sh:sh
mkdir schemaspy
cd schemaspy
touch Dockerfile
mkdir config
cd config
touch schemaspy.properties
```

`DRIVER_URL`は利用したいSQLエンジンによって切り替えてください。
下記は`MySQL5.7用`となっています
```Dockerfile:schemaspy/Dockerfile
FROM openjdk:8u121-jdk-alpine

ENV DRIVER_URL https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar
ENV APP_URL https://github.com/schemaspy/schemaspy/releases/download/v6.2.4/schemaspy-6.2.4.jar

WORKDIR /app

RUN apk --update add graphviz ttf-dejavu && \
    apk --update add --virtual .builddep tzdata wget libressl && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    wget -O mysql-connector-java.jar ${DRIVER_URL} && \
    wget -O schemaspy.jar ${APP_URL} && \
    apk del .builddep && \
    rm -rf /var/cache/apk/*

```


`database_name`,`root`などはenvなどを参考に実際に使っているものを入れます
```schemaspy/config/schemaspy.properties
# type of database. Run with -dbhelp for details
schemaspy.t=mysql
# optional path to alternative jdbc drivers.
schemaspy.dp=/app/mysql-connector-java.jar
# database properties: host, port number, name user, password
schemaspy.host=mysql
schemaspy.port=3306
schemaspy.db=database_name
schemaspy.u=root
schemaspy.p=password
# output dir to save generated files
schemaspy.o=/app/html
# db scheme for which generate diagrams
schemaspy.schemas=database_name
```

### 3. Dockerを起動しER図を生成
```sh
docker-compose up -d
```

コンテナが停止するまでしばらく待てばOK

### せっかくなのでコンテナのログを見る
こんなログが出ていたら起動はしている
```
  ____       _                          ____
 / ___|  ___| |__   ___ _ __ ___   __ _/ ___| _ __  _   _
 \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | |
  ___) | (__| | | |  __/ | | | | | (_| |___) | |_) | |_| |
 |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, |
                                             |_|    |___/

                                              6.0.0-rc2

SchemaSpy generates an HTML representation of a database schema's relationships.
```

下記のように出ていたら、DBへの接続が成功し、テーブルごとの解析をしている
```
Writing/diagramming detailsINFO  - Completed summary in 31 seconds
INFO  - Writing/diagramming details
.Table -> hoge
.Table -> fuga

```

下記のように出ているときは接続情報などが間違っているので`schemaspy.properties`を見直してください。
```
WARN  - Connection Failure
Failed to connect to database URL [jdbc:mysql://127.0.0.1:3306/database_name] Communications link failure
```


目安として、170テーブルあると10分程度かかる模様

下記のように出ているか、Schema Spyコンテナが停止すれば出力が完了。
```
INFO  - View the results by opening /app/html/database_name/index.html
```

また、下記のような`schemaspy`ディレクトリになっていたら完了です。
`index.html`をお好みのブラウザで閲覧してください。
```sh
schemaspy
├── Dockerfile
├── anomalies.js
├── bower
├── column.js
├── components.js
├── config
├── constraint.js
├── fonts
├── images
├── index.html
├── main.js
├── relationships.js
├── schemaSpy.css
├── schemaSpy.js
├── tables
└── database_name
```