データの持ち方がわからん! SchemaSpy の導入!
お久しぶりです、高木です。モブプロの記事以来の登場になります!
CircuitX(ASP)の管理画面は2015年から開発が行われ、ありがたいことにいつの間にか6年以上も稼働しているシステムになりました。
現在は絶賛、リプレイス作業を行っています!
6年以上も開発を行っているとRDB(MySQL)で管理されているデータの構造を把握するのが簡単ではなくなっていきました。
特に新規メンバーが JOIN した際にはER図もないため、ホワイトボードを使用して説明していたため説明する側も大変でした。
何か、RDBのリレーションが視覚的に簡単に把握できるツールは無いだろうかと探していたら SchemaSpy を発見したので導入しました。
SchemaSpyとは?
公式サイトに以下のように書かれている通り、データベースを簡単に文書化できる ツールになります。
コマンドを実行することで、データベースの構造を html で出力してくれるので出力された html を開くことでブラウザを使用してデータベースの構造を簡単に見れるようにしてくれます。
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 として出力されます。
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 が表示されるようになっています。
ポートの指定では SCHEMASPY_WEB_PORT の環境変数があったらその値がポートに使われ、環境変数がない場合はデフォルトで 8080 を使用するようにしています。
${SCHEMASPY_WEB_PORT:-8080}
SchemaSpy の導入で変わったこと
今まではホワイトボードに書いて共有していたデータベースの説明が SchemaSpy を使用したことにより簡単にできるようになりました。
また新しくデータベースの構造を変えた時、プルリクエストに SchemaSpy で出力したものを共有することでレビュワーも簡単に把握することができるようなったのも利点です。
個人プロジェクトでも SchemaSpy を導入してみてはいかがでしょうか!
(おわり)
この記事が気に入ったらサポートをしてみませんか?