LoginSignup
9
11

More than 5 years have passed since last update.

MySQLのテーブル定義書を自動更新する環境を作った

Last updated at Posted at 2017-12-01

概要

今使っているテーブル定義書は最新ですか?

こんな状況に身に覚えがないですか?

  • 更新を忘れて仕様書が信用できない。
  • 見ていた仕様書が古くて、ハマったことがある。
  • 毎回SHOW CREATE TABLE;コマンドで確認している。

何番煎じのネタかわかりませんが、今回 mysqldump + xsltproc + cronを使ってテーブル定義書を自動で最新に更新する環境を作ってみました。

環境

データベース = MySQL
仕様書ビルド環境 = Linux
仕様書の閲覧 = ブラウザ

DB作成

CREATE DATABASE `SampleDB`;
CREATE TABLE `SampleDB`.`Users` (
  `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザーID',
  `name`    varchar(64) NOT NULL DEFAULT "" COMMENT 'なまえ',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='ユーザーテーブル';
CREATE TABLE `SampleDB`.`Favorites` (
  `favorite_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'お気に入りID',
  `user_id`     int(11) unsigned NOT NULL DEFAULT 0 COMMENT 'ユーザーID',
  `content`     varchar(64) NOT NULL DEFAULT '' COMMENT '好きなこと',
PRIMARY KEY (`favorite_id`),
FOREIGN KEY `foreign_user` (`user_id`) REFERENCES `Users` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='お気に入りテーブル';

やること

  1. mysqldumpを使って、DDLをxml形式で出力。
    mysqldump --no-data --xml SampleDB > mysqldump.xml
  2. xsltprocを使い、xmlファイル + xsltファイル => htmlファイルに変換します。(xsltファイルについてはあとで触れます。)
    xsltproc -o index.html style.xslt mysqldump.xml
  3. 出来上がったHTMLを、Webサーバーのに公開ディレクトリに配置すればブラウザから確認できます。
    ※ 公開するのはローカルネットワーク上だけにしましょう。
    ※ セキュリティ上問題ないかはよく検討した上で行ってください。

この3ステップをシェル化すれば、1コマンドで仕様書の更新ができます。

#!/bin/sh

RUN_SHELL_DIR=`dirname $0`

# Work space
WORK_DIR="${RUN_SHELL_DIR}/MySQLSchemaDoc"
TEMPLATE_XSLT=${WORK_DIR}"/src/style.xslt"
MYSQLDUMP_XML=${WORK_DIR}"/mysqldump.xml"
OUTPUT_HTML=${WORK_DIR}"/dist/index.html"

# MySQL ※環境に合わせて書き換えてください
MYSQL_HOST="127.0.0.1"
MYSQL_USER="username"
MYSQL_PASS="password"
MYSQL_SCHEME="SampleDB"

# Web Server ※環境に合わせて書き換えてください
PUBLIC_DIR="/var/www/html/mysqldoc/"

mysqldump --no-data --xml -u ${MYSQL_USER} -p${MYSQL_PASS} -h ${MYSQL_HOST} ${MYSQL_SCHEME} > ${MYSQLDUMP_XML}
xsltproc -o ${OUTPUT_HTML} ${TEMPLATE_XSLT} ${MYSQLDUMP_XML}

cp  ${WORK_DIR}/dist/* ${PUBLIC_DIR}

このシェルをcronで1日1回くらい定時実行するよう設定すれば、(ほぼ)最新の状態に保たれるようになります!

利用するxsltファイル

いくら最新の情報でも"見づらい/使いづらい" だとそもそも誰も見ない。ってことになるので、ある程度使えそうなXSLTスタイルシートを用意しました。
https://github.com/RyutaKojima/MySQLSchemaDoc
利用・複製・改変は自由なので、必要に応じてカスタマイズしてください。
(プルリクも待っています!!)

ほかのサイトでもXSLTスタイルシートを公開してあるので、気に入ったものをベースにカスタマイズすればよいかと思います。
MySQL テーブル仕様書メーカー的な何か

最後に

仕様書作成で消耗したくないですね!

9
11
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
9
11