こんにちは!
ふるさとチョイス事業部のプロダクト開発チームの @kazuyaseo です。
去年に引き続きで恐縮ですが、Trustbank Advent Calendar 2023 の1日目の記事を書かせていただきます。
今年のスタートは少し力を抜いた記事にしようと思いますので、よろしくお願いします。
担当サービスの紹介
最初に自分が担当している(その中でもお気に入り)のサービスを紹介させて下さい
担当しているサービスは「ふるさとチョイス」というサービスになります。
ふるさとチョイスの説明は他の方も行っていただいているので、今回は自分のお気に入りでもあるふるさとチョイスGCFを簡単に紹介させて頂きたいと思います。
ふるさとチョイス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.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ページ
お、Tablesを参照する事ができました!!!
テーブル数も正しく出ているし、隣のページのER図なども見れたので満足度高いです。(ER図はキャプチャ無しですいません)
ANOMALIESページ
あと、地味に楽しみにしていた ANOMALIES も作成されていたのが嬉しいです。
ANOMALIESは不整合のテーブルを出してくれます。今回の結果でも
- Tables without indexes (インデックスのないテーブル)
- Tables with incrementing column names, potentially indicating denormalization (カラム多くない)
などでテーブル名が出ていたので、後で眺めてみたいと思います。
結構テンションが上がりました
動くことがわかると、今後の使い方が見えてちょっとテンションが上りますね。
あとは以下の流れをCDに組み込めば、自動的に履歴付きで最新のテーブル構成図がHTMLで見れるので不要なファイルの共有とかもなくなります。
- schemaspy のコマンドをrunさせる
- 出力されたHTMLをチョイスのリポジトリ内にコミットする
- schemaspy の出力htmlファイルのみ内部から参照可能にする
最後に
データベースの中身を把握しやすい状態にしておくことは、より長くサービスの開発・運用していくにあたりとても重要だと思います。
とはいえ、開発している間はどうしてもDB仕様書とかのメンテっておろそかになりがちですよね。
自動化も進めてレッツ見える化頑張ろうと思います!
明日は @noritakaIzumi さんが「Web エンジニアが Android アプリをささっと作れた話」について話してくれます。
乞うご期待下さい!