0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SchemaSpyの設定を環境変数でいい感じに指定する

Last updated at Posted at 2024-05-17

「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 〜 あたりの実行コマンドを編集し、環境変数を読み込ませちゃおうという感じでした。

参考記事

AWS ECSにSchemaSpyを乗せてサーバレスでER図を作成する

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?