今回は、SchemaSpyを使ってERドキュメントを自動生成する方法をまとめていきます。
SchemaSpyは、ER 図やテーブルの情報をHTMLで出力することができるJava製ツールです。公式サイトやSchemaSpy を使って自動で ER 図生成してみた | メルカリエンジニアリングなどを見てみると、どんなことができるかイメージしやすいと思います。
やりたいこと
docker-compose up
を実行して、SchemaSpyを使ったERドキュメントの自動作成を行いたい- 作成したERドキュメントをブラウザで閲覧したい
方法
サンプルコードをGitHubにあげているので、気になる人は以下を参照してください。
今回はSpring Boot+Thymeleafを使ったToDoアプリケーションをサンプルとして利用しています。 アプリケーション自体の説明は割愛します。
docker-compose.ymlの作成
まずは、SchemaSpyをdocker-composeで実行するための設定をdocker-composeに追加します。 実際に作成したdocker-composeファイルが以下です。
version: "3" services: db-server: # (1) container_name: sample-mysql image: mysql:5.7 environment: MYSQL_DATABASE: sample MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: admin expose: - 3306 volumes: - ./docker/mysql/initdb:/docker-entrypoint-initdb.d - ./docker/mysql/config:/etc/mysql/conf.d - mysql_db:/var/lib/mysql ports: - 3306:3306 schemaspy: # (2) image: schemaspy/schemaspy depends_on: - db-server container_name: schemaspy volumes: - ./docker/schemaspy/output:/output - ./docker/schemaspy/config:/config command: [ "-configFile", "/config/schemaspy.properties" ] schemaspy-server: #(3) image: nginx depends_on: - schemaspy container_name: "nginx_for_schemaspy" ports: - "8181:80" volumes: - ./docker/schemaspy/output:/usr/share/nginx/html:ro app-server: container_name: sample-thymeleaf-todo image: sample-thymeleaf-todo:0.0.1-SNAPSHOT depends_on: - db-server ports: - "8080:8080" environment: spring.datasource.driver-class-name: "com.mysql.cj.jdbc.Driver" spring.datasource.url: "jdbc:mysql://db-server/sample" spring.datasource.username: "user" spring.datasource.password: "password" volumes: mysql_db: driver: local
(1) では、MySQL5.7のイメージと、ローカルに作成した設定ファイルとDDLを使ってMySQLサービスをコンテナ上に作成しています。
(2) では、SchemaSpyのイメージと、ローカルに作成するSchemaSpyの設定ファイルを使って、(1)で作成したMySQLインスタンスに接続し、ERドキュメントを自動生成しています。
(3) では、(2)で作成したERドキュメントをブラウザから閲覧できるように、ERドキュメントをpublicなディレクトリに配置し、nginxを立ち上げています。
schemaspy.propertiesの作成
次にSchemaSpyを実行する際に利用する設定ファイルを作成します。
# type of database. Run with -dbhelp for details schemaspy.t=mysql # database properties: host, port number, name user, password schemaspy.host=db-server schemaspy.port=3306 schemaspy.db=sample schemaspy.u=user schemaspy.p=password # db scheme for which generate diagrams schemaspy.s=sample
schemaspy.t
で参照するDBの種類を指定します。
schemaspy.host
,schemaspy.port
,schemaspy.db
, schemaspy.u
, schemaspy.p
には接続するDBの情報を指定します。
確認
docker-compose up
を実行し、localhost:8181
にアクセスすると以下のように自動生成されたERドキュメントにアクセスすることができます。