/dev/null

脳みそのL1キャッシュ

DBスキーマをGitHubで管理したい

はじめに

開発の途中で、DBの構造がころころ変わるのはよくあることです。構造を変えるたびにレビューが必要な場合は、GitHubでDBスキーマを管理できると便利ですよね。DBスキーマがテキストファイル形式であり、DBスキーマからERDを生成するビジュアライザもあれば完璧ですよね。

できます。そう、DBMLならね。

DBML - Database Markup Language

DBMLはHolisticsという会社が開発したDSLで、DBスキーマを記述するために使います。特定のDBのSQLに縛られない形式なので、DBMLから各種DBのSQL DDLに変換することができます。

たとえば、以下のDBMLは

Table users {
    id int [pk, increment]
    name varchar(255)
    email varchar(255) [unique]
    password varchar(255)
    created_at timestamp
    updated_at timestamp
}

MySQLSQL DDLに変換すると

CREATE TABLE `users` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(255),
  `email` varchar(255) UNIQUE,
  `password` varchar(255),
  `created_at` timestamp,
  `updated_at` timestamp
);

SQL ServerSQL DDLに変換すると

CREATE TABLE [users] (
  [id] int PRIMARY KEY IDENTITY(1, 1),
  [name] varchar(255),
  [email] varchar(255) UNIQUE,
  [password] varchar(255),
  [created_at] timestamp,
  [updated_at] timestamp
)
GO

なお、DBMLの詳しい文法は以下のドキュメントに書かれています。

www.dbml.org

また、Holistics社はDBMLだけではなく、DBMLからERDを自動生成するビジュアライザ(dbdiagram)も開発しています。ビジュアライザにDBMLを入力すると、以下のようにERDを生成します。

ここまで、いいとこ尽くしのDBMLですが、実はプライベートのERD生成には有料プランが必要です。

つまり、趣味プロジェクトなら無料プランでもいいのですが、案件で利用したい場合は必然的に有料プランを選ぶ必要があるわけです。ビジュアライザもOSSになればいいのになと思っているわけですが、dbdiagram.ioのフォーラムでも同じことを考えている人がいました。

開発側が言うには

At the moment, dbdiagram visualization part can’t be used as a library. But we will think about it.

community.dbdiagram.io

らしいので、今の所OSS化はないでしょうねー。

おわりに

DBMLを使えば、DBスキーマGitHubで管理し、差分を見ることもできます。しかし、ビジュアライズまでしたい場合はdbdiagram.ioを合わせて利用する必要があります。 Swagger UIみたいにローカルでもビジュアライズできるようになったらいいのになー。