見出し画像

データの持ち方がわからん! SchemaSpy の導入!

お久しぶりです、高木です。モブプロの記事以来の登場になります!

CircuitX(ASP)の管理画面は2015年から開発が行われ、ありがたいことにいつの間にか6年以上も稼働しているシステムになりました。

現在は絶賛、リプレイス作業を行っています!

6年以上も開発を行っているとRDB(MySQL)で管理されているデータの構造を把握するのが簡単ではなくなっていきました。
特に新規メンバーが JOIN した際にはER図もないため、ホワイトボードを使用して説明していたため説明する側も大変でした。

何か、RDBのリレーションが視覚的に簡単に把握できるツールは無いだろうかと探していたら SchemaSpy を発見したので導入しました。

SchemaSpyとは?

公式サイトに以下のように書かれている通り、データベースを簡単に文書化できる ツールになります。

Document your database simply and easily

SchemaSpy 公式サイトより

コマンドを実行することで、データベースの構造を html で出力してくれるので出力された html を開くことでブラウザを使用してデータベースの構造を簡単に見れるようにしてくれます。

公式ドキュメントより

Docker環境に組み込む

Docker の構成

CircuitX(ASP)の管理画面は Docker 環境にて開発しているため、そこに SchemaSpy の環境を組み込みました。
構成としては以下の3つのコンテナで構築しています。

  • MySQL コンテナ

  • SchemaSpy コンテナ

  • nginxコンテナ

コンテナの説明

それぞれのコンテナについて説明していきます。

MySQLコンテナ

開発環境で使用するデータベースのコンテナです。
このコンテナに SchemaSpy がアクセスしデータベースの構造を出力します。

SchemaSpyコンテナ

SchemaSpyのコマンドを実行しデータベースの構造を html で出力するだけのコンテナです。コマンドの実行が終わるとそのままコンテナは終了します。
下記は docker-compose.yml ファイルで SchemaSpy コンテナを定義している箇所になります。

services:
  schemaspy:
    image: schemaspy/schemaspy
    volumes:
      - .dockerdev/schemaspy/output/:/output
      - .dockerdev/schemaspy/schemaspy.properties:/schemaspy.properties
    command: >
      java -jar schemaspy.jar
    depends_on:
      - db # これがMySQLコンテナになります

コマンドはシンプルにし、本来必要なデータベースなどの接続情報や html の出力先の指定は schemaspy.properties で設定しています。

java -jar schemaspy.jar

schemaspy.properties の中身は以下のように設定しています。
公式ドキュメントに設定方法について書かれているので こちら を参考にしてください。

schemaspy.o=./output

schemaspy.t=mysql
schemaspy.host=db
schemaspy.port=ポート番号
schemaspy.db=データベース名
schemaspy.s=データベース名
schemaspy.u=ユーザー名
schemaspy.connprops=useSSL\\=false

このコンテナを起動すると output ディレクトリにデータベースの構造が html として出力されます。

docker-compose up schemaspy コマンドの実行ログ

nginxコンテナ

SchemaSpy コンテナが出力した html をブラウザで確認できるようにするためのコンテナです。
下記は docker-compose.yml ファイルで nginx コンテナを定義している箇所になります。

services:
  schemaspy_web:
    image: nginx:1.18-alpine
    volumes:
      - .dockerdev/schemaspy/output/:/usr/share/nginx/html
    ports:
      - ${SCHEMASPY_WEB_PORT:-8080}:80

SchemaSpyで出力したディレクトリを指定しているので localhost:8080 にアクセスするとディレクトリ内の index.html が表示されるようになっています。

index.html をブラウザで表示

ポートの指定では SCHEMASPY_WEB_PORT の環境変数があったらその値がポートに使われ、環境変数がない場合はデフォルトで 8080 を使用するようにしています。

${SCHEMASPY_WEB_PORT:-8080}

SchemaSpy の導入で変わったこと

今まではホワイトボードに書いて共有していたデータベースの説明が SchemaSpy を使用したことにより簡単にできるようになりました。
また新しくデータベースの構造を変えた時、プルリクエストに SchemaSpy で出力したものを共有することでレビュワーも簡単に把握することができるようなったのも利点です。

個人プロジェクトでも SchemaSpy を導入してみてはいかがでしょうか!

(おわり)

この記事が気に入ったらサポートをしてみませんか?