「SchemaSpyを使ってER図を作ってるけど、プロジェクトや環境が変わるたびにschemaspy.propertyを作るとそのまま再利用できないじゃん!」ってなってる方向けの記事です。
また、SchemaSpyのバージョン変更によりディレクトリ構成も変わってきているみたいなので、今のところの最新バージョン(v6.2.4)でやるための方法を示します。
TL;DR
公式のDockerイメージを用いて、schemaspy.propertyを使わず環境変数でプロパティを指定できるイメージを生成します。
要件
- schemaspy.propertyのファイルを環境毎やプロジェクト毎に用意するのが面倒
- 後々ECRに乗せて運用する場合にも便利
- entrypoint.shをいつでも編集できるようにしておくと、生成後に何をさせたいかも容易
- 例えば静的ファイルを生成するツールを入れて実行させ、S3にアップする等
全体のファイル構成
schemaspy/
├── output/ # ここにindex.htmlが出力される
├── Dockerfile
└── entrypoint.sh
Dockerfile
FROM schemaspy/schemaspy:6.2.4
COPY ./entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
昔はjavaのツールを入れないと動かなかったけど、最新のはちゃんと入ってるので入れなくても動きますね・・・。
entrypoint.sh
このファイルにはchmodで実行権限つけてあげてください。
#!/bin/sh
[ -d $SCHEMASPY_DRIVERS ] && export DRIVER_PATH=$SCHEMASPY_DRIVERS || export DRIVER_PATH=/drivers_inc/
echo -n "Using drivers:"
ls -Ax $DRIVER_PATH | sed -e 's/ */, /g'
exec java -jar /usr/local/lib/schemaspy/schemaspy*.jar \
-dp $DRIVER_PATH \
-o $SCHEMASPY_OUTPUT \
-t $DB_TYPE \
-host $DB_HOST \
-port $DB_PORT \
-db $DB_NAME \
-u $DB_USER \
-s $DB_SCHEMA \
-p $DB_PASS \
-connprops useSSL\\=false \
-debug
ログ出力不要なら-debug
は削除してOKです。
出力後にツールを使って静的ファイルにしてaws cliでS3に投げる、などやりたいことできます。
イメージ作成、実行する
イメージを作成する
$ docker build -t er-document .
試しに環境変数を指定しつつ実行する。
(※ローカルでmysqlのコンテナが立ち上がっている前提です)
docker run --platform linux/amd64 \
--net host \
-v "$PWD/output:/output" \
--rm \
-e SCHEMASPY_OUTPUT="/output" \
-e DB_TYPE="mysql" \
-e DB_HOST="localhost" \
-e DB_PORT=3366 \
-e DB_NAME=test_db" \
-e DB_SCHEMA="test_db" \
-e DB_USER="test_user" \
-e DB_PASS="password" \
er-document
outputディレクトリにファイルが生成されれば動作は正常です。
これでschemaspy.propertyなしで、デプロイ環境などで設定された環境変数を用いて動作できます。
余談
DockerfileにENTRYPOINTを食わせれば、imageに入っているデフォルトのENTRYPOINTを上書きできます。
ShemaSpy:6.2.4ではコンテナ内の以下ディレクトリにschemaspyというファイルが入っており、これがデフォルトのENTRYPOINTです。
- ディレクトリ
/usr/local/bin/
- schemaspy
[ -d $SCHEMASPY_DRIVERS ] && export DRIVER_PATH=$SCHEMASPY_DRIVERS || export DRIVER_PATH=/drivers_inc/
echo -n "Using drivers:"
ls -Ax $DRIVER_PATH | sed -e 's/ */, /g'
exec java -jar /usr/local/lib/schemaspy/schemaspy*.jar -dp $DRIVER_PATH -o $SCHEMASPY_OUTPUT "$@"/usr/local/bin
今回の記事では、このファイルの exec java -jar 〜
あたりの実行コマンドを編集し、環境変数を読み込ませちゃおうという感じでした。