完全無料ログイン不要でER図が作成できるツールがチート級すぎて覇権を握るかもしれない【ChartDB】MySQL/PostgreSQL/MariaDB/SQLServer対応
データベースを扱う方なら一度は通るER図。
作ろうと思ってもExcelで作図はイマイチだし、専用ソフトは高いし、会社で支給されていない限りは悩まれる方が多いかと思います。
今回は、そんな悩みを解決してくれる存在を紹介します。
概要
今回取り上げるのは、ChartDBというオープンソースのER図エディター。
Web上で動作し、アクセスしたらすぐに使うことができる上に、「データ漏洩が心配」という方向けに、なんと自前で環境を構築することも可能です。
以下、公式によるChartDBの説明(Google翻訳を少し訂正)。
ChartDBは強力なWebベースのデータベース図作成エディターです。 データベーススキーマを1つで即座に視覚化する「スマートクエリ」図をカスタマイズし、SQLスクリプトをエクスポートし、すべての機能にアクセスします—アカウントは必要ありません。ここでシームレスなデータベース設計を体験してください。
特徴:
- インスタントスキーマインポート 単一のクエリを実行して、データベーススキーマをJSONとして即座に取得します。これにより、ドキュメント、チームディスカッション、または単にデータの理解を深めるなど、データベーススキーマの視覚化が非常に速くなります。
- 移行が簡単なAI搭載エクスポート 当社のAI駆動エクスポート機能を使用すると、選択した方言でDDLスクリプトを生成できます。MySQLからPostgreSQLに移行する場合でも、SQLiteからMariaDBに移行する場合でも、ChartDBはターゲットデータベースに合わせた必要なスクリプトを提供することにより、プロセスを簡素化します。
- インタラクティブ編集 直感的なエディターを使用してデータベーススキーマを微調整します。複雑な構造をよりよく視覚化するために、調整や注釈を簡単に作成できます。
特徴
ChartDBは現在パブリックベータ版で、正式版は未公開です。
正式版公開時はとんでもない反響を呼びそうです。
サポートされているデータベースは以下の通り。
- PostgreSQL
- MySQL
- SQL Server
- MariaDB
- SQLite
- ClickHouse
主要どころは勢揃いですね。
SQLiteが入っているところも、愛用者の私にとってはポイントが高いです。
使用方法
使い方は簡単で、以下のWebサイトにアクセスするだけです。
流れはこんな感じです。
マジッククエリの部分は、一応バックアップを取るか、壊れても良いデータベースで試してからが良いと思います。
- 先ほどのリンクにアクセスする。
- “Go to app"をクリックする。
- 使用しているデータベースを選択する。
- 表示のマジッククエリをデータベースで実行する。
- 出力結果のJSONをChartDBにコピー&ペーストする。
- 編集を楽しむ。
英語なので苦戦する方もいるかもしれませんが、直感的に操作できます。
左上の「File」→「New」から新しい図を作成でき、図の保存や画像出力もできます。
インポートする場合は「Import Database」から取り込み可能。
また、AIによる自動エクスポート生成機能もあり、「Export SQL」からCREATE文の生成までしてくれます。ありがたや。
ちなみに、以下は公式からサンプルで用意されている"employees-db"(従業員DB)をSQLiteで出力した内容です。
CREATE TABLE IF NOT EXISTS departments (
dept_no TEXT(4) NOT NULL PRIMARY KEY,
dept_name TEXT(40) NOT NULL
);
CREATE UNIQUE INDEX dept_no_index ON departments (dept_no);
CREATE UNIQUE INDEX dept_name_index ON departments (dept_name);
CREATE TABLE IF NOT EXISTS dept_emp (
emp_no INTEGER NOT NULL,
dept_no TEXT(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, dept_no)
);
CREATE INDEX dept_emp_dept_no_index ON dept_emp (dept_no);
CREATE TABLE IF NOT EXISTS dept_manager (
emp_no INTEGER NOT NULL,
dept_no TEXT(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, dept_no)
);
CREATE INDEX dept_manager_dept_no_index ON dept_manager (dept_no);
CREATE TABLE IF NOT EXISTS employees (
emp_no INTEGER NOT NULL PRIMARY KEY,
birth_date DATE NOT NULL,
first_name TEXT(14) NOT NULL,
last_name TEXT(16) NOT NULL,
gender TEXT(1) NOT NULL,
hire_date DATE NOT NULL
);
CREATE UNIQUE INDEX employees_emp_no_index ON employees (emp_no);
CREATE TABLE IF NOT EXISTS salaries (
emp_no INTEGER NOT NULL,
salary INTEGER NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
price REAL DEFAULT 13.21,
PRIMARY KEY (emp_no, from_date)
);
CREATE UNIQUE INDEX salaries_emp_no_index ON salaries (emp_no);
CREATE UNIQUE INDEX salaries_from_date_index ON salaries (from_date);
CREATE TABLE IF NOT EXISTS titles (
emp_no INTEGER NOT NULL,
title TEXT(50) NOT NULL,
from_date DATE NOT NULL,
to_date DATE DEFAULT NULL,
PRIMARY KEY (emp_no, title, from_date)
);
CREATE UNIQUE INDEX titles_emp_no_index ON titles (emp_no);
CREATE UNIQUE INDEX titles_title_index ON titles (title);
CREATE UNIQUE INDEX titles_from_date_index ON titles (from_date);
CREATE TABLE IF NOT EXISTS dept_emp_new (
emp_no INTEGER NOT NULL,
dept_no TEXT(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, dept_no),
FOREIGN KEY (emp_no) REFERENCES employees (emp_no),
FOREIGN KEY (dept_no) REFERENCES departments (dept_no)
);
INSERT INTO dept_emp_new (emp_no, dept_no, from_date, to_date)
SELECT emp_no, dept_no, from_date, to_date FROM dept_emp;
DROP TABLE dept_emp;
ALTER TABLE dept_emp_new RENAME TO dept_emp;
CREATE TABLE IF NOT EXISTS dept_manager_new (
emp_no INTEGER NOT NULL,
dept_no TEXT(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
PRIMARY KEY (emp_no, dept_no),
FOREIGN KEY (emp_no) REFERENCES employees (emp_no),
FOREIGN KEY (dept_no) REFERENCES departments (dept_no)
);
INSERT INTO dept_manager_new (emp_no, dept_no, from_date, to_date)
SELECT emp_no, dept_no, from_date, to_date FROM dept_manager;
DROP TABLE dept_manager;
ALTER TABLE dept_manager_new RENAME TO dept_manager;
CREATE TABLE IF NOT EXISTS salaries_new (
emp_no INTEGER NOT NULL,
salary INTEGER NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
price REAL DEFAULT 13.21,
PRIMARY KEY (emp_no, from_date),
FOREIGN KEY (emp_no) REFERENCES employees (emp_no)
);
INSERT INTO salaries_new (emp_no, salary, from_date, to_date, price)
SELECT emp_no, salary, from_date, to_date, price FROM salaries;
DROP TABLE salaries;
ALTER TABLE salaries_new RENAME TO salaries;
CREATE TABLE IF NOT EXISTS titles_new (
emp_no INTEGER NOT NULL,
title TEXT(50) NOT NULL,
from_date DATE NOT NULL,
to_date DATE DEFAULT NULL,
PRIMARY KEY (emp_no, title, from_date),
FOREIGN KEY (emp_no) REFERENCES employees (emp_no)
);
INSERT INTO titles_new (emp_no, title, from_date, to_date)
SELECT emp_no, title, from_date, to_date FROM titles;
DROP TABLE titles;
ALTER TABLE titles_new RENAME TO titles;
すごすぎます。
ローカル環境で使う方法
オンラインだとデータ漏洩が心配、という方向けにローカル環境でのデプロイも用意されています。
リポジトリをクローン
GitHubからリポジトリをクローンします。
git clone https://github.com/chartdb/chartdb.git
次にプロジェクトフォルダに移動。
cd chartdb
Node.jsでサーバーを起動します。
使用方法
npm install
npm run dev
ビルド方法
npm install
npm run build
Dockerコンテナの実行
個人的にはこちらの方がオススメです。
Dockerで以下を実行し、http://localhost:8080 にアクセスするだけ。
docker build -t chartdb .
docker run -p 8080:80 chartdb
あとがき
なんというか、とんでもないものが出てきたなという印象を受けました。
今までありそうでなかった、少なそうで多かった需要を丸ごと取り込んでいく、非常に有益かつ有用なツールが産声を上げたような感覚です。
データベース界隈で今後流行すると思いますので、ぜひ使ってみてください。
ディスカッション
コメント一覧
まだ、コメントがありません