LoginSignup
3
2

More than 5 years have passed since last update.

tblsでコメントをSQLとは別に管理する

Last updated at Posted at 2019-03-06

tbls を使ってDBドキュメントを生成するときに、テーブルやカラムのコメントだけ別で管理する方法を紹介します。

動作環境

  • tbls 1.8.3
  • PostgreSQL 11.2
  • macOS Mojave 10.14.3

背景

tbls を使ってデータベース定義のドキュメントを自動生成していますが、次の理由からSQLのCOMMENT文とは別にコメントを管理したいというニーズがありました。

  • DBマイグレーションツールを使っているため、テーブル定義を変えるたびに新しいSQLファイルが追加されることになるが、COMMENT文を使う方法だと最新のコメントがあちこちに分散する
  • DBマイグレーションツールがSQLファイルのチェックサムを管理1 しており、コメントにtypoがあっただけの場合でも(元のSQLファイルではなく)別のSQLファイルを追加しなければならず煩雑になる

解決方法

tbls にはリレーションやコメントに関する追加情報を与える機能があるので、これを使えばコメントだけを別で管理することができます。

例えば、次のような定義のテーブルがデータベース上に存在しているとして、

CREATE TABLE book (
  id           serial PRIMARY KEY,
  title        varchar(100) NOT NULL,
  author       varchar(100) NOT NULL,
  published_on date NOT NULL
);

マイグレーションSQLとは別に、以下のようなYAMLファイルにテーブルやカラムのドキュメントコメントを記載してあげます。

db.yml
comments:
  -
    table: book
    tableComment: 書籍を管理するテーブル
    columnComments:
      title: タイトル
      author: 作者
      published_on: 出版日

あとは、tblsを実行するときに --config オプションでこのファイルを指定するだけです。

$ tbls doc --config db.yml \
    postgres://user:pass@localhost:5432/testdb?sslmode=disable ./dbdoc

生成されたドキュメントを確認すると、コメントが埋め込まれていることが分かると思います。

./dbdoc/book.md
# book

## Description

書籍を管理するテーブル

## Columns

| Name | Type | Default | Nullable | Children | Parents | Comment |
| ---- | ---- | ------- | -------- | -------- | ------- | ------- |
| id | integer | nextval('book_id_seq'::regclass) | false |  |  |  |
| title | varchar(100) |  | false |  |  | タイトル |
| author | varchar(100) |  | false |  |  | 作者 |
| published_on | date |  | false |  |  | 出版日 |
...

補足

  • tbls 1.6.0 より前は、 --config オプションではなく --add オプションでしたが、今後は --config が推奨です
  • 必ずしもすべてのテーブル&カラムにコメントを付ける必要はなく、コメントを付けたいものだけを記載すればOKです

参考情報


  1. ここでは、DBマイグレーションツールとして Flyway を想定しています。チェックサムの検証を無効化するオプションもありますが、意図しない修正を検出するために外したくないという事情があります。 

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2