A5:SQL Mk-2で実DBからDB定義書とER図を自動生成

本記事はサムザップ Advent Calendar 2017の16日目の記事です。
昨日は@ddorangeさんの[【Unity】Timelineを使ってエフェクトを作ってみたをやってみた](https://qiita.com/ddorange/items/0870b2310a9dfb377b42)でした。

##**はじめに**
皆さん**DB（データベース）定義書やER図（Entity-Relationship Diagram）**ちゃんと作っていますか？
私の場合、プロジェクト初期から関わる場合は必ずそれらのドキュメントを作成した上で開発にとりかかりますが、途中参加のプロジェクトだとDB定義書やER図作ってないよ！というパターンも時々あったりします。
開発に追われてドキュメント作成にさける時間がなかなか……という事で定義書作成を後回しにしている現場だと恐らくドキュメントが作られる事はない可能性が高いので、じゃあ、既にある実DBから逆にDB定義書とER図を自動で作ってしまえ！！という事が出来れば非常に助かるかと思います。
そんな時におススメなのが**[A5:SQL Mk-2](http://a5m2.mmatsubara.com/)**というツールになります。
このツール、SQLを実行したり、テーブルを編集するという機能の他にDB定義書やER図を直接DBに繋がり簡単な操作で自動生成してくれるという事が可能です。

##**A5:SQL Mk-2ダウンロード**
[http://a5m2.mmatsubara.com/](http://a5m2.mmatsubara.com/)
ページ上部のDownload hereからダウンロードしてみてください。
ダウンロードしたら、zipファイルを解凍してA5M2.exeを叩くだけなので非常に簡単です。

##**動作環境**
|    |  対象  |
| ---- | ---- |
|  **OS**  |  Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10,Windows Server 2003, Windows Server 2008, Windows Server 2012  |
|  **DB**  |  Oracle,Microsoft SQL Server,IBM DB2,PostgreSQL,MySQL,OLEDB, ODBC  |

<font color="Red">対象OSがWindowsのみ</font>なので、Macユーザーの方はこの機会にWindowsを触ってもらっても（汗）。
※MACで動く事例もあるようですが、動かない機能もあるようなのでWindowsで利用してもらうのがやはり良さそうです。

##**手順**
###**1.データベース追加**
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/104363/61926553-7037-d7a5-cfb8-0151015504ba.png)

ツールを起動したらメニューバーから[データベース]⇒［データベースの追加と削除］を選択して接続するDBを追加していきます。
[データベースの追加と削除]というポップアップが表示されるので[追加(A)]をクリックすると下記が表示されます。

![無題1.png](https://qiita-image-store.s3.amazonaws.com/0/104363/121c0163-91f6-95d5-cc6d-0e45da17f635.png)
今回は個人のクラウドサーバのMySQLに接続したいと思いますので、[MySQL/MariaDB(直接接続）(M)]を選択。

![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/104363/ba1bc75d-8622-a6e5-5278-6772f32f3ce3.png)
[データベースの内容を登録]にてサーバへの接続情報を入力する。（ターミナルソフトなどで接続する際と同じような設定で接続できるかと思います）
[テスト接続]でDBに問題なく接続できたら、[OK]を押して登録を完了させます。

![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/104363/f1a26287-e224-f7b4-b40a-cac8b0ebefa3.png)
そうすると、ツール上に実DBの情報が表示されるようになります。


###**2.DB定義書生成**
![無題4.png](https://qiita-image-store.s3.amazonaws.com/0/104363/e56bd4be-e2bb-ef81-33ff-e4c146b95598.png)

今回はテスト用に作成したtest_dbというデータベースでDB定義書とER図を生成してみます。
[データベース]⇒［テーブル定義書作成］を選択すると下記が表示されます。

![無題5.png](https://qiita-image-store.s3.amazonaws.com/0/104363/bef5f2bd-094a-d423-dfe0-ed25f43d82a7.png)

スキーマで[test_db]を選択するとtest_dbにあるテーブルが一覧表示されるので定義書を作成したいテーブルを選択します。（複数テーブル選択可能です）
また、出力方式でExcelかHTMLを選べるので状況に応じて選択してください。今回はExcelで出力してみたいと思います。
準備OKなら[テーブル定義書作成]ボタンをクリックします。

![無題6.png](https://qiita-image-store.s3.amazonaws.com/0/104363/afe27d99-4d37-0b01-4230-884ee345f306.png)
するとすぐにこんな感じのDB定義書を自動生成してくれます。テーブル一覧も作成してくれて非常に便利です。
<font color="Red">※同時に選択したテーブル数が多いとそれなりに時間がかかりますので注意!</font>

ちなみにテーブルをCREATEする際にカラムとテーブルにcommentを記載するようにしておくと、A5:SQL Mk-2でテーブル定義書を生成した際に論理テーブル名と論理名の所に表示してくれるのでより分かりやすい定義書が出力できます。（commentを記述していない場合は空白です）

```SQL
CREATE TABLE `tbl_user` ( 
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ユーザーID', 
  `name` varchar(64) NOT NULL COMMENT 'ユーザー名', 
  `gender` tinyint(4) DEFAULT NULL COMMENT '性別', 
  PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='ユーザー基本情報テーブル'; 
```

###**3.ER図生成**
![無題7.png](https://qiita-image-store.s3.amazonaws.com/0/104363/8ef71632-7b9f-e31d-0ec2-aef4f2dfbb9d.png)
ER図を生成したい場合は、[データベース]⇒［ER図]⇒[ER図のリバース生成］を選択します。

![無題8.png](https://qiita-image-store.s3.amazonaws.com/0/104363/497ad178-bf55-ab8c-2823-b14262d1cc3d.png)
リバースER図生成にて、ER図に出力したいテーブルを選択したら［リバースER生成］をクリックします。

![無題9.png](https://qiita-image-store.s3.amazonaws.com/0/104363/d269d343-ebc3-c7b2-256d-a788792bc739.png)
するとこちらも簡単にER図を生成してくれました。

![無題10.png](https://qiita-image-store.s3.amazonaws.com/0/104363/25b18d38-bdbd-8359-1699-df3926bf0b41.png)
また、表示されたER図上で右クリして［ページのプロパティ]を選択し、表示レベルを変えることによって上記のように型や物理名も表示するように切り替えられるので必要な情報をER図に出力することが可能です。


##**さいごに**
どうしても開発優先でドキュメントは後回しになってしまったり、そもそもドキュメントなんて不要と考えるエンジニアさんもいるかとは思いますが、DB定義書やER図があればシステムを全体的に把握することが容易になり問題点に気がつきやすかったり、開発メンバーが増えた際に情報共有に非常に有用かと思いますので今回紹介したツールなどを使っても良いと思いますので日頃からドキュメントを残す事を習慣づけてみるのはいかがでしょうか。

##**参考**
http://a5m2.mmatsubara.com/



明日はSumzapアドベントカレンダー17日目、@leosukeさんの[Alexa Skill を設計する前にすれば良かったと思ったこと](https://qiita.com/leosuke/items/419fbe69cfeb9f3279be)です。