a5doc の table定義を既存のDBからリバースエンジニアリングで作成するためのツールです。
npm install a5doc/reverse-db --save
コマンドラインからの実行方法です。
npx reverse-db -h 192.168.1.1 -d dbname -u user_name -p password -f yaml
- -d
DB名 - -u
ユーザー名 - -p
パスワード - -h
ホスト名 - -P
ポート番号 - -D
DB(現バージョンではmysqlのみ指定可能) - -t
テーブル名(カンマ区切りで複数指定可能) - -o
出力先ディレクトリ - -f
出力書式。(yaml | json | front-matter) - (1) データベース名
- (2) 接続ユーザー
- (3) 接続パスワード
- (4) ホスト名
- (5) DB (sequelizeがサポートするDBではあるのだけど、現バージョンはmysqlのみに対応)
- (6) リバースエンジニアするテーブル名
- (7) テーブル定義の元となる yaml ファイルを出力するディレクトリ
- (8) 出力形式(※1)
- (9) 実行します
- yaml
yml で出力する。 - json
json で出力する。 - front-matter
md ファイルの front-matter として出力する。
このデータの利用方法として、a5docでマークダウンのテーブル定義を出力することにあったりするので、中間ファイル的なものを作るよりも、mdの中にfront-matter で出力した方が、まとまりがよかったりするので、好みの問題ではあるけれど、1つのファイルで管理する場合に指定する。
オプションの詳細は、実装例のところでも説明します。
実装例です。
const reverseDb = require('reverse-db')
const config = {
database: 'testdb', // (1)
username: 'user1', // (2)
password: 'pass1', // (3)
host: '192.168.33.10', // (4)
dialect: 'mysql', // (5)
tables: [ // (6)
'user',
'group',
'order',
],
output: './設計/テーブル定義', // (7)
format: 'front-matter', // (8)
};
reverseDb.reverse(config); // (9)
出力形式は、以下の形式で出力できます。
一度、出力されたファイルは、再度出力するときに、先に、ディレクトリ内(サブディレクトリ含む)を検索して、ファイル名が変わっていたり、ディレクトリが変わっていても、teble の id で識別して、同じファイルに上書きします。
一回、全テーブルをリバースエンジニアリングで出力したあと、マスタ系とトランザクション系で、ディレクトリを分けて、整理しなおしたけど、カラム追加をしたから再出力したい・・・のようなときに便利です。
既存システムで、テーブル定義とかの設計書を作成してこなかったシステムがあって、 規模が大きくなってきたので、そろそろテーブルの設計書がないと、わからなくなってきているような、そんなケースを想定しています。
実行すると、 output で指定したディレクトリ内にテーブル毎にファイルが作成されます。 これを、さらに、 a5doc のコマンドでマークダウンにします。
a5doc table
使い方としては、ザックリとテーブル定義を作成して、概要とか補足説明などは、出力されたドキュメントを修正する感じの使い方になります。
とっかかりのひな形を起こすことを目的としていて、DBとドキュメントを無加工で自動同期しようとか、そういう用途ではありません。CRUDのソースコードのscaffoldを想像してもらうとよいかと思います。
ER図を出力するには、作成手順 を確認して、a5doc.yml と 出力したドキュメントの FK などを加筆して、作成してください。