🌟

tblsを使えば,ER図をgitで管理しやすい

2022/05/03に公開

背景

ER図の作成にはMySQL Workbenchを使っていたのですが,モデルファイルをgitで管理するには不向きでした.MySQL Workbenchで作成されたモデルファイルではコミットログを見ても差分が分からなかったためです.
そこで,自動生成できると噂があったtblsを使ってみました.

https://github.com/k1LoW/tbls

今回できたものはこちら

https://github.com/katsuya-n/pub_tbls_sample

環境

OS: MacOS
DB: MySQL8.0

インストール

公式にある通りにすればOKです.僕はMacなのでbrewでインストールしました.

$ brew install k1LoW/tap/tbls

DBとテーブルを準備

ER図は立ち上がっているDBから情報をとってきて作成されます.
まずはmysql8.0のデータベースを起動して,サンプルのDBとテーブルを作成しておきます.

mysql8.0自体は↓のものを使います(色々な場面で流用できるので,よく使うものはリポジトリ作っておくと便利だと感じました)

https://github.com/katsuya-n/pub_docker_mysql8

$ docker image build -t test-mysql8 .
$ docker container run -d --name test-mysql8 -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 test-mysql8
$ mysql -uroot -h 127.0.0.1 -ppassword -P 3306

SQLを流し込みます.様々な型などで確認したかったので,中身はやや雑です.

create database tbls_app;

use tbls_app;

create table users (
	id int not null auto_increment, 
	name varchar(100) not null,
	created_at datetime not null,
	primary key(id)
);

create table posts (
	id int not null auto_increment,
	user_id int not null,
	primary key(id),
	foreign key (user_id) references users(id) on delete cascade
);

create table favorites (
	id int not null auto_increment,
	user_id int not null,
	post_id int not null,
	primary key(id),
	foreign key (user_id) references users(id) on delete cascade,
	foreign key (post_id) references posts(id) on delete cascade
);

create table topics (
	id int not null auto_increment,
	topic_key int,
	body text,
	is_visible bool,
	deleted_at datetime not null,
	primary key(id),
	unique topic_key_idx(topic_key),
	index deleted_at_idx(deleted_at)
);

いよいよ使ってみる

tblsを使うにはtbls.ymlという1ファイルだけ必要なので作成します.
dsnはDBの接続情報を記載します.
docPathは出力ファイルの置き場所です.

.tbls.yml
dsn: mysql://root:password@localhost:3306/tbls_app
docPath: ref

実行は1コマンド打つだけです.めっちゃカンタン!!

$ tbls doc

成功すると以下のファイルが生成されます.

ref/schema.svg
ref/favorites.svg
ref/posts.svg
ref/topics.svg
ref/users.svg
ref/README.md
ref/favorites.md
ref/posts.md
ref/topics.md
ref/users.md

中身の詳細はこちらに置いておきます.

https://github.com/katsuya-n/pub_tbls_sample

ちょっと崩れて読みにくい部分もありますが,ER図が出来上がっています.

使い勝手など

コマンド一発でできるし,ER図以外にもSQLも出力してくれて非常に便利だなと思いました.
不満点はありませんが,例えば仕様書をエクセルなどで管理していたりする場合は,これらを何とかして写さないといけないのでどうするかですね.

参考

https://qiita.com/k1LoW/items/2010413a8547b1e6645e
https://tech.pepabo.com/2021/03/08/colormeshop-uses-tbls/

株式会社ゆめみ

Discussion