TBLS で データベースのスキーマを管理する

TBLS を利用して データベースのスキーマ管理を行う手法を紹介します。

TBLS

TBLSは、データベース構造のドキュメント化ツールです。

GitHub - k1LoW/tbls: tbls is a CI-Friendly tool for document a database, written in Go.

go または bash 経由で簡単にインストールすることが可能です。

$ go get github.com/k1LoW/tbls
$ brew install k1LoW/tap/tbls

Database の構造をドキュメント化する際には tbls doc コマンドが利用可能です。

$ tbls doc postgres://user:pass@hostname:5432/dbname ./dbdoc

第一引数は database の接続情報です。 driver://user:pass@hostname:port/dbname の形式で記述することが可能で、 対応しているDB の形式は Postgres MySQL SQLite です。

  • Postgres dsn の例 postgres://user:pass@hostname:5432/dbname
  • MySQL dsn の例 my://root:mypass@localhost:3306/testdb
  • SQLite dsn の例 sqlite://./database/database.sqlite

第二引数は、ドキュメントの出力先として すでに作成済みの空のフォルダを指定します。

上記のコマンドを実行すると、 dbdoc 上に ドキュメントとスキーマ情報のSQLが展開されます。 生成されるドキュメントは Github フォーマットでのマークダウン形式となっているため、 Git管理にのせて Push するだけで簡単に Web上で共有可能なDB 定義書が出来上がります。

サンプルのDB仕様書

サンプルのスキーマSQL

ER図の出力

dot コマンドが使える環境では、画像で テーブルの構造や ER 図を出力する事ができます。

dot コマンドのインストールは以下の形式で行うことができます。

$ brew install graphviz

DB 差分の確認

tbls diff コマンドで DB の現在の状態と 仕様書との差分を確認することができます。

$ tbls diff postgres://user:pass@hostname:5432/dbname ./dbdoc

DIFF 検出の機能を利用して、CI と連携した Schema 構造のチェックを行うことも可能となっており、 Deploy 機能を担当する CI に本番環境上の Schema チェックを行わせることで、本番環境の DB 構造が 仕様書と一致していることを担保することができます。

コマンドの利用方法

通常TBLS コマンドでは、コマンド引数経由で DB 接続情報や ドッキュメント出力先を指定します。

$ tbls doc postgres://user:pass@hostname:5432/dbname ./dbdoc

これらの引数は、環境変数 TBLS_DSN TBLS_DOC_PATH を利用して指定することも可能です。

Makefile の構築例

doc: ## ドキュメントを生成 OR 更新する
	rm ./dbdoc/* 
	tbls doc postgres://user:pass@localhost:5432/testdb?sslmode=disable ./dbdoc

testdoc: ## ドキュメントのテストを行う
	tbls diff postgres://user:pass@localhost:5432/testdb?sslmode=disable ./dbdoc

投稿一覧へ