🌟
tblsを使えば,ER図をgitで管理しやすい
背景
ER図の作成にはMySQL Workbenchを使っていたのですが,モデルファイルをgitで管理するには不向きでした.MySQL Workbenchで作成されたモデルファイルではコミットログを見ても差分が分からなかったためです.
そこで,自動生成できると噂があったtblsを使ってみました.
今回できたものはこちら
環境
OS: MacOS
DB: MySQL8.0
インストール
公式にある通りにすればOKです.僕はMacなのでbrewでインストールしました.
$ brew install k1LoW/tap/tbls
DBとテーブルを準備
ER図は立ち上がっているDBから情報をとってきて作成されます.
まずはmysql8.0のデータベースを起動して,サンプルのDBとテーブルを作成しておきます.
mysql8.0自体は↓のものを使います(色々な場面で流用できるので,よく使うものはリポジトリ作っておくと便利だと感じました)
$ 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
中身の詳細はこちらに置いておきます.
ちょっと崩れて読みにくい部分もありますが,ER図が出来上がっています.
使い勝手など
コマンド一発でできるし,ER図以外にもSQLも出力してくれて非常に便利だなと思いました.
不満点はありませんが,例えば仕様書をエクセルなどで管理していたりする場合は,これらを何とかして写さないといけないのでどうするかですね.
参考
Discussion