はじめに
こんばんは。
以前の記事で紹介した crondocに引き続き、 tableのドキュメント自動生成ツールとかないかなと思っていたところ教えてもらった、tblsというツールを試してみました。
やってみた
今回の試すにあたってvagrant上にテストDBとテストテーブル群を用意しました。
CREATE TABLE `master_categories` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PrimaryKey', `name` varchar(256) NOT NULL DEFAULT '' COMMENT 'カテゴリ名', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日', `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日', PRIMARY KEY (`id`), KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'カテゴリ管理テーブル'; CREATE TABLE `master_items` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PrimaryKey', `category_id` int(11) unsigned NOT NULL COMMENT 'カテゴリID', `name` varchar(256) NOT NULL DEFAULT '' COMMENT 'アイテム名', `price` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '価格', `delivery_cost` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '配送料', `stock` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '在庫', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日', `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日', PRIMARY KEY (`id`), KEY `userId` (`name`), CONSTRAINT `master_items_fk_1` FOREIGN KEY (`category_id`) REFERENCES `master_categories` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'アイテム管理テーブル'; CREATE TABLE `master_tags` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PrimaryKey', `name` varchar(255) NOT NULL COMMENT 'タグ名', `short_name` varchar(64) NOT NULL COMMENT 'ふりがな', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日', `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'タグ管理テーブル'; CREATE TABLE `master_tag_relations` ( `tag_id` int(11) unsigned NOT NULL COMMENT 'タグID', `item_id` int(11) unsigned NOT NULL COMMENT 'アイテムID', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日', PRIMARY KEY (`tag_id`,`item_id`), CONSTRAINT `master_tag_relations_fk_1` FOREIGN KEY (`tag_id`) REFERENCES `master_tags` (`id`) ON DELETE CASCADE, CONSTRAINT `master_tag_relations_fk_2` FOREIGN KEY (`item_id`) REFERENCES `master_items` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'タグ中間テーブル';
では早速試します。
1. インストール
$ go get github.com/k1LoW/tbls
2. .tbls.yml 作成
$ cat .tbls.yml dsn: mysql://local_user:1qazxcvb@192.168.33.10:3306/tbls_test_db docPath: schema
3. 実行
$ tbls doc schema/schema.png schema/master_categories.png schema/master_items.png schema/master_tag_relations.png schema/master_tags.png schema/README.md schema/master_categories.md schema/master_items.md schema/master_tag_relations.md schema/master_tags.md
docPathに指定したフォルダにmarkdownファイルとpngファイルが作成されます。
README.mdを開くとこんな感じ
めちゃめちゃいい感じです。
pngはリレーション状態を表示してくれるようです。
READMEは全体情報で、各テーブルごとの個別の情報もあります。
たとえば master_items
はこちら
うん。みやすい。
終わりに
テーブルのスキーマ自体に情報がない場合(リレーションしてないとかコメントないとか)は使いづらいですが、これを使いたいという前提でスキーマの強化をしていくというアプローチもありかと思いました。
そういえば昔師匠が言ってたなぁ。
データベースの各テーブルのスキーマを見れば、サイト全体が把握できるようにするべきって。
現場からは以上です。