概要
今使っているテーブル定義書は最新ですか?
こんな状況に身に覚えがないですか?
- 更新を忘れて仕様書が信用できない。
- 見ていた仕様書が古くて、ハマったことがある。
- 毎回
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='お気に入りテーブル';
やること
-
mysqldump
を使って、DDLをxml形式で出力。
mysqldump --no-data --xml SampleDB > mysqldump.xml
-
xsltproc
を使い、xmlファイル
+xsltファイル
=>htmlファイル
に変換します。(xsltファイル
についてはあとで触れます。)
xsltproc -o index.html style.xslt mysqldump.xml
- 出来上がった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 テーブル仕様書メーカー的な何か
最後に
仕様書作成で消耗したくないですね!