5
0

SchemaSpyを使ってデータベースの中身をまとめたかった

Last updated at Posted at 2023-11-30

こんにちは!

ふるさとチョイス事業部のプロダクト開発チームの @kazuyaseo です。
去年に引き続きで恐縮ですが、Trustbank Advent Calendar 2023 の1日目の記事を書かせていただきます。
今年のスタートは少し力を抜いた記事にしようと思いますので、よろしくお願いします。

担当サービスの紹介

最初に自分が担当している(その中でもお気に入り)のサービスを紹介させて下さい :muscle:

担当しているサービスは「ふるさとチョイス」というサービスになります。

ふるさとチョイスの説明は他の方も行っていただいているので、今回は自分のお気に入りでもあるふるさとチョイスGCFを簡単に紹介させて頂きたいと思います。

スクリーンショット 2023-11-30 8.34.42.png

ふるさとチョイスGCF(ガバメントクラウドファンディング)

GCFはふるさと納税にとって一番重要である寄付の「使い道」をより具体的にしてプロジェクト化したものに対し、
クラウドファンディング形式で寄付を募る事ができるサービスです。

自治体の思いを形にするために寄付ができる、とても好きなサービスです。
立ち上がっているプロジェクトも思いの強いものが多く、見ていると色々なプロジェクトを応援したくなっちゃいます!

ちなみに、今年の5月にプロジェクトに対して「拍手」や「コメント」が送れる機能が付きましたので告知とさせて頂きます!

記事の概要

そんなふるさとチョイスの運用を担当していますが、先程のGCFの他にも災害支援きふたびなど複数ありまして、「ふるさとチョイス」と一言で言っても多くのサービスがあります。

それらのサービスで使っているDBのテーブルを合わせると全部で470テーブルほどテーブルがあり、なかなか量が多いです。

それだけテーブルがあると管理するのも大変ですし、どういったテーブルがあるのか開発メンバー以外にも把握したい人が出てきます。

弊社はテーブル定義書を作成していますが、テーブル追加やカラム変更の頻度も高いです。
これらを簡略化するために、SchemaSpyを使って「ちょっとテーブル多めのサービスでもHTML出力できるのか?」を少し検証してみたので書かせて頂きます。

SchemaSpyとは

SchemaSpyはデータベース内のテーブル構成をHTML形式で出力してくれるツールです。
Javaで出来ており、jarファイル(MySQLの場合はMySQLドライバーも必要)をダウンロードして実行する事が出来ます。

Dockerのイメージもあるため、CDにも組み込みやすいです。
次回はGithub Actionsに組み込んだ記事も書きたいですね。

実行方法

今回はjarファイルをダウンロードして使った時の流れを記載していきます。
チョイスのデータベースはMySQLとなっているため、ドライバーもMySQLのものを使いました。

jarファイルのダウンロード

本家のサイトよりSchemaspyのjarファイル、
MySQLより、 mysqlのドライバーファイルをダウンロードしてきます。

設定ファイルの作成

その次に設定ファイルを作成し、以下の項目を埋めます

schemaspy.properties
schemaspy.dp=./mysql-connector-j-8.0.31.jar
schemaspy.o=./output

schemaspy.t=mysql
schemaspy.host={接続ホスト}
schemaspy.port={接続ポート}
schemaspy.db={DB名}
schemaspy.u={DB接続ユーザー名}
schemaspy.p={DB接続パスワード}

コマンドを実行

設定ファイルを設置したら、以下のコマンドを実行してみましょう。

java -jar schemaspy-6.1.0.jar -configFile schemaspy.properties -vizjs

結果

SchemaSpyの良いところは、ER図をHTMLで出してくれる所ですよね。
output ディレクトリの中に inex.htmlファイルが作成されているのでその中を見てみると。。。

TABLESページ

スクリーンショット 2023-11-30 16.05.11.png

お、Tablesを参照する事ができました!!!
テーブル数も正しく出ているし、隣のページのER図なども見れたので満足度高いです。(ER図はキャプチャ無しですいません)

ANOMALIESページ

あと、地味に楽しみにしていた ANOMALIES も作成されていたのが嬉しいです。

スクリーンショット 2023-11-30 16.08.35.png

ANOMALIESは不整合のテーブルを出してくれます。今回の結果でも

  • Tables without indexes (インデックスのないテーブル)
  • Tables with incrementing column names, potentially indicating denormalization (カラム多くない)

などでテーブル名が出ていたので、後で眺めてみたいと思います。

結構テンションが上がりました

動くことがわかると、今後の使い方が見えてちょっとテンションが上りますね。
あとは以下の流れをCDに組み込めば、自動的に履歴付きで最新のテーブル構成図がHTMLで見れるので不要なファイルの共有とかもなくなります。

  1. schemaspy のコマンドをrunさせる
  2. 出力されたHTMLをチョイスのリポジトリ内にコミットする
  3. schemaspy の出力htmlファイルのみ内部から参照可能にする

最後に

データベースの中身を把握しやすい状態にしておくことは、より長くサービスの開発・運用していくにあたりとても重要だと思います。
とはいえ、開発している間はどうしてもDB仕様書とかのメンテっておろそかになりがちですよね。
自動化も進めてレッツ見える化頑張ろうと思います!

明日は @noritakaIzumi さんが「Web エンジニアが Android アプリをささっと作れた話」について話してくれます。
乞うご期待下さい!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0