13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

本記事はQmonus Value Streamの投稿キャンペーン記事です。

みなさまは普段DB設計(特にER図)を記載するときにどのようなツールを使っているでしょうか?
私の場合は以下のようなサービスを用いていました

1. draw.io

2. Canva

3. Figma or FigJam

上記のツールでもある程度は記載できるのですが、いくつか欠点がありました

  • 拡大縮小が煩わしい
  • 結局設計向けツールではないので組んでいくときに面倒(若干ツールの知識が必要)
  • 共有する際に場合によっては課金が必要

どうでしょう?
同じように苦戦した経験はないでしょうか?

今回紹介するのは、DB設計を書くためのツールである「dbdocs」の紹介です

dbdocs

ER図ももちろんのこと

このようにデータ構造も表示できます

さらに、これらはデザインツールではなくコードベースで管理ができます!

構築手順

作業もとても簡単です

まずは、dbdocsをインストールします

npm install -g dbdocs

次に、ログインをしましょう

dbdocs login

完了したら、任意の箇所に .dbmlという拡張子でファイルを作成しましょう。
注意点として、VSCodeでは初期状態だと.dbmlという拡張子を識別できないためVSCodeで作業する場合はプラグインを入れておくことを推奨します

では、早速サンプルコードです

sample.dbml
Project ProjectName { # ProjectNameは任意のプロジェクト名です。デプロイ時のURLに影響します
  database_type: 'MySQL' # DBの選択
  Note: ''' # NoteはREADMEのような扱いです。マークダウンの記載ができます
    ## ProjectName
    ### 参考情報
    - [テーブル設計情報](https://demo.com)
  '''
}

Table users {
    Note: 'ユーザー情報管理'
    id integer [primary key]
    first_name varchar(50) [not null, note: '苗字(漢字)']
    last_name varchar(50) [not null, note: '氏名(漢字)']
    created_at datetime [default: `CURRENT_TIMESTAMP`, note: '作成日時']
    updated_at datetime [default: `CURRENT_TIMESTAMP`, note: '更新日時']
    deleted_at datetime [note: '削除日時']
}
Table invoices {
    Note: '請求情報管理'
    id integer [primary key, not null, note: '請求No']
    code varchar(50) [not null, unique, note: '識別コード']
    user_id integer [not null, note: '社員No', ref: > users.id] # リレーション設定
    invoice_date date [not null, note: '請求日']
    invoice_amount decimal(10, 2) [not null, note: '請求金額']
}

デプロイ

デプロイして共有するのもすごい簡単です!

dbdocs build sample.dbml

ターミナル上にリンクが表示されるのでアクセスしたら結果を確認することができます。
更新したい場合は、ファイルを更新した上で再度コマンドを実行してください。

その他データベースに設定できる項目

さらに、コードベースということもありenumの設定やindexの設定も可能となっています

enum

// enum belonged to default "public" schema
enum job_status {
    created [note: 'Waiting to be processed']
    running
    done
    failure
}

// enum belonged to a schema
enum v2.job_status {
    ...
}

Table jobs {
    id integer
    status job_status
    status_v2 v2.job_status
}

index

Table posts {
    id integer [primary key]
    user_id integer [ref: > users.id] // many-to-one
}

// or this
Table users {
    id integer [ref: < posts.user_id, ref: < reviews.user_id] // one to many
}

// The space after '<' is optional

その他の記載についてはDBMLのドキュメントを参照してください

セキュアな状態にする

ここまで簡単だと、セキュリティ面が心配になると思います。
dbdocsは、参照するためのパスワードを設定することができます!
設定も以下のように簡単に設定することができます

dbdocs password

? Project name: demo
? Enter password:  [hidden]
? Re-enter password:  [hidden]
✔ Password is set for 'demo'.

以上です!

13
5
0

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
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?