daisuzz.log

docker-composeでSchemaSpyを使ったERドキュメント生成を行う方法

今回は、SchemaSpyを使ってERドキュメントを自動生成する方法をまとめていきます。

SchemaSpyは、ER 図やテーブルの情報をHTMLで出力することができるJava製ツールです。公式サイトSchemaSpy を使って自動で ER 図生成してみた | メルカリエンジニアリングなどを見てみると、どんなことができるかイメージしやすいと思います。

やりたいこと

  • docker-compose upを実行して、SchemaSpyを使ったERドキュメントの自動作成を行いたい
  • 作成したERドキュメントをブラウザで閲覧したい

方法

サンプルコードをGitHubにあげているので、気になる人は以下を参照してください。

github.com

今回は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ドキュメントにアクセスすることができます。 f:id:dais39:20201014000251p:plain