CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成
by
MATSUURA, yosuke
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
CircleCI ユーザーコミュニティ ミートアップ #9 2022年4月21日 CircleCIを使った MySQL DBドキュメント 自動生成
Slide 2
Slide 2 text
Twitter: 蟒蛇(「ウワバミ」と読みます) @uwabami_garden CI歴 2.5年、うちCircleCI歴 2年 その割に去年から新入社員研修でCICDを担当している 最近会社のCircleCI Serverが3.xに更新されたことで、研修資料が大幅作り直しに なり嬉し泣きしている 自己紹介
Slide 3
Slide 3 text
開発していると、しばしばDBのスキーマを変更することがある DDLは適当に実行すると事故になるので、実行にはフローがある スキーマ変更の運用
Slide 4
Slide 4 text
DDL作成 チェック 実行 ドキュメント 更新
Slide 5
Slide 5 text
DDL作成 チェック 実行 ドキュメント 更新 TOIL
Slide 6
Slide 6 text
スキーマがバージョン管理されていない DDLのチェックとスキーマ定義書の更新がTOILになっている 解決したいフローの課題
Slide 7
Slide 7 text
スキーマがバージョン管理されていない →マイグレーションツールを導入してGit管理 DDLのチェックとスキーマ定義書の更新がTOILになっている →CircleCIで自動実行 フローの課題
Slide 8
Slide 8 text
DDL作成 自動チェック 実行 ドキュメント 自動更新
Slide 9
Slide 9 text
マイグレーション
Slide 10
Slide 10 text
マイグレーションツールの導入 dbmate(https://github.com/amacneil/dbmate) RDBや開発言語に依存しないSQLベースのマイグレーションツール 導入当初のスキーマを出発地点として、マイグレーションしていく
Slide 11
Slide 11 text
スキーマチェック
Slide 12
Slide 12 text
チェック項目は大きく分けて3つに分類される - 業務知識が必要なチェック - ex. 入れたいデータとデータ型が適合しているか - DDLだけで機械的に判別可能なチェック - ex. インデックスコメントがあるか - 機械的に判別可能だがDDLだけでは判断できないチェック - ex. インデックスの重複 スキーマチェック項目の分類
Slide 13
Slide 13 text
チェック項目は大きく分けて3つに分類される - 業務知識が必要なチェック(手動でやる) - ex. 入れたいデータとデータ型が適合しているか - DDLだけで機械的に判別可能なチェック(自動化) - ex. インデックスコメントがあるか - 機械的に可能だがDDLだけでは判断できないチェック(自動化) - ex. インデックスの重複 スキーマチェック項目の分類
Slide 14
Slide 14 text
tbls(https://github.com/k1LoW/tbls) - 「インデックスにコメントをつける」などチェックできる - 本来はDBドキュメントの生成ツール - linterとして使っているが、ER図の自動生成機能などもある DDLだけで機械的に判別可能なチェック
Slide 15
Slide 15 text
pt-duplicate-key-checker(https://www.percona.com/doc/percona-toolki t/LATEST/pt-duplicate-key-checker.html) - Percona Toolkitに含まれるツール - インデックスの重複を指摘してくれる - 重複インデックスがあっても戻り値は0なので、テストをfailさせた い場合は工夫が必要 インデックス重複チェック
Slide 16
Slide 16 text
ドキュメント生成
Slide 17
Slide 17 text
SchemaSpy(https://schemaspy.org/) - 自動的にテーブル一覧やER図を生成してくれる - tblsでもドキュメント生成はできるが、ArtifactsからHTMLを直接表 示できたほうが都合が良かったので採用 ドキュメントの作成
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
CircleCIでの実行フロー
Slide 21
Slide 21 text
Gitにpush ↓ 初期状態(dbmate導入直前)のスキーマファイルインポート ↓ dbmateでマイグレーション ↓ tbls, pt-duplicate-key-checkerでチェック ↓ SchemaSpyでドキュメント生成 実行フロー
Slide 22
Slide 22 text
ArtifactsにあるドキュメントをPRでチェックする mainにマージするとS3にも保存され、CloudFront経由で表示 CloudFront上にあるドキュメントを正として扱う 自動で生成されるので忘れない 生成されたドキュメントの保存
Slide 23
Slide 23 text
S3を更新するには当然AWS認証が必要 せっかくなのでOIDCを活用したいが、CircleCI Serverにはまだない😢 実運用では涙を飲んでAPIキーを使っていますが、この発表用のデモリポ ジトリではOIDC認証になっています OIDC認証?
Slide 24
Slide 24 text
SchemaSpy出力: https://schemaspy.venom.blue/ コードサンプル: https://github.com/bateleurX/dbmate_migration Sakila Sample Databaseを例に実際にCIフロー実装とスキーマドキュメン トを生成しています サンプルコードはGNU Affero General Public Licenseで公開しています サンプル集
Slide 25
Slide 25 text
DBドキュメントの更新はCIを使うと便利 DDLレビューも機械的な項目はCIでやろう CircleCI ServerのOIDC対応待ってます まとめ