こんにちは @hatappi です
今回はCircleCIネタです
以前CircleCIを使って下記のようなものを作っていました
何かとCircleCIにはお世話になってます
業務などでER図やテーブル定義書などを書く機会あると思います
Excel? Google Sheets? MySQL Workbench? Cacoo?(html5化待ち遠しい)
色んな手段がありますが基本はユーザーがメンテしてあげないと腐ります 😇
最初は頑張って更新するぞ!!と用意しても、どこかのタイミングで更新しなくなって中途半端な状態になり、それを新しく入った人が見て混乱するみたいなことがありました
もう人が更新するのはやめたい
私はRailsを使っているのでmigrationしてテーブルを作成したりしているので、そのタイミングで勝手に作ってほしい
データベースはMySQLです
gemで作成するという選択
voormedia/rails-erd
初回リリースが2010年9月で結構古くからあるやつ
pdfでスキーマを出力してくれる
コメント出力などもうちょっと見やすくしたい
amatsuda/erd
@a_matsudaが2012年4月にリリースされたgem
さきほどのrails-erdを内部的には使ってpdfではなくrails server
で起動しブラウザ上で確認できる
Featureになっているが、テーブルの定義自体を変更したり新規でモデルをこの画面上から作れるみたい
ただ1つ問題があって、Rails Apiで作成したプロジェクトだと動かない
flashとかを使ってるんだけど、これがRailsApiでは最初は入ってないので下記のように追加したりしないといけない
config.middleware.use ActionDispatch::Flash
このためにmiddlewareに追加するのもなー
CircleCI x SchemaSpy
SchemaSpyはJava製のツールでJDBCドライバ使ってデータベースに接続して、テーブル定義をHTML化して吐いてくれる
図はdot言語でテキスト化されたものをGraphvizして出力している
SchemaSpyは元々こちらで2004年から運用されていたのですが、2010年をリリースを最後にリリースが止まってしまいました
その後有志の方が開発を続けるために作成したのがschemaspy/schemaspyです
今回はそのschemaspy/schemaspyを使用します
実行自体はjarファイルが提供されているので、それを使いオプションでデータベースの接続情報やoutputのpathなどを指定するだけ!!
java \ -jar schemaspy.jar \ -t mysql \ -dp driver_path \ -db db_name \ -host db_host \ -u db_username \ -p db_password \ -o outout_dir \
出力例は公式で提供されている
CircleCIはartifactsという機能を使用します
指定されたディレクトリにファイルをおくとそれをCircleCI上から確認できるもので colszowka/simplecovを使ったことがある方はカバレッジの結果をCircleCI上で確認したことがあるのではないでしょうか
ちなみにCircleCIがもうすぐ2.0が出ますが今回はv1.0でbuildOSにはUbuntu 14.04 (Trusty)を使用しました データベースはMySQLを今回は使用しています
ファイルは下記のように配置をする
│ ├── script │ └── schemaspy │ ├── circleci.sh │ └── jar │ ├── mysql-connector-java-5.1.41-bin.jar │ └── schemaspy-6.0.0-beta.3.jar
実際にjarファイルを実行するスクリプトのcircleci.shは下記になります
JAR_DIR=$(cd $(dirname $0); pwd)/jar SCHEMASPY_FILEPATH=$JAR_DIR/schemaspy-6.0.0-beta.3.jar MYSQL_CONNECTOR_FILEPATH=$JAR_DIR/mysql-connector-java-5.1.41-bin.jar # CircleCI側で$CIRCLE_ARTIFACTSにARTIFACTSの配置先が入っている HTML_OUT_DIR=$CIRCLE_ARTIFACTS/schemaspy java \ -jar $SCHEMASPY_FILEPATH \ -t mysql \ # 今回はMySQL、他にもPostgreSQLやORACLE, SQLiteなどがある -dp $MYSQL_CONNECTOR_FILEPATH \ -db circle_ruby_test \ -host ${DATABASE_HOST:-localhost} \ -u ${DATABASE_USERNAME:-root} \ -p ${DATABASE_PASSWORD:-''} \ -o $HTML_OUT_DIR
あとはCircleCIの設定のcircle.yml
machine: timezone: Asia/Tokyo dependencies: pre: - sudo apt-get install graphviz test: post: - ./script/schemaspy/circleci.sh
を記載してCIをまわし実行が終わると画面上から確認できるようになります
とりあえず試してみたい方は下記をforkしてご自身のCircleCIで使用できると思います
まとめ
今回はRailsを例にしていましたが、中身としてはデータベースに繋いでHTMLを生成しているので どのプロジェクトでもjarファイルを配置してしまえば動くようになります 逆にRailsなどのPolymorphicなどのフレームワークに依存している機能の関係なども含む場合はrails-erdなどを使うと良さそうです
これで腐らないER図をCI上でいつでも確認できるようになりました!!