Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成
Search
MATSUURA, yosuke
April 21, 2022
Technology
1
790
CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成
2022年4月21日 CircleCIユーザーコミュニティミートアップ#9での発表資料です
MATSUURA, yosuke
April 21, 2022
Tweet
Share
More Decks by MATSUURA, yosuke
See All by MATSUURA, yosuke
WebRTC配信システムをAWSからオンプレミスに切り替えている話
bateleurx
14
13k
AWS Keymanagement Serviceを知ろう
bateleurx
0
550
機密情報をKMS+RDS,S3とParameter Storeを使って保存した話
bateleurx
0
3.2k
VAddy導入案内
bateleurx
0
240
0から始まるかもしれない固定長整数をINT型に入れたい
bateleurx
0
1.6k
Other Decks in Technology
See All in Technology
k6を活用した再現性・拡張性の高い負荷試験基盤の構築
biwashi
11
2.9k
低コストで実現する社内文書RAG機能を搭載したAIチャットボット開発
takapy
3
580
Sansanにおける全社横断データ分析基盤の挑戦と未来 / Challenges and Future of Cross-Organizational Data Analytics Platform at Sansan
sansan_randd
2
310
Create Inquiry via Bedrock / 生成 AI で問い合わせ品質は変わるのか?思いついてぱっと作ったものを供養してみる
kazzpapa3
1
200
業務ヒアリングと知識の呪い
tamai_63
0
110
ドメインと向き合う - 旅行予約編
hidenorigoto
4
520
Tracking down sources of kernel errors with retsnoop
ennael
PRO
0
140
Webセキュリティのあるきかた
akiym
10
3.1k
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
200
【shownet.conf_】トポロジ図の歩き方
shownet
PRO
0
360
いまからでも遅くない! コンテナでWebアプリケーションを 動かしてみよう(2-1)WebAPI座学
nomu
0
140
SQLによるオブザーバビリティの進化とClickHouseの実力
mikimatsumoto
0
150
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
31
2.3k
Optimizing for Happiness
mojombo
375
69k
Making the Leap to Tech Lead
cromwellryan
130
8.8k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
How GitHub (no longer) Works
holman
311
140k
Scaling GitHub
holman
458
140k
How to name files
jennybc
77
98k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Bash Introduction
62gerente
608
210k
Practical Orchestrator
shlominoach
185
10k
KATA
mclloyd
27
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Transcript
CircleCI ユーザーコミュニティ ミートアップ #9 2022年4月21日 CircleCIを使った MySQL DBドキュメント 自動生成
Twitter: 蟒蛇(「ウワバミ」と読みます) @uwabami_garden CI歴 2.5年、うちCircleCI歴 2年 その割に去年から新入社員研修でCICDを担当している 最近会社のCircleCI Serverが3.xに更新されたことで、研修資料が大幅作り直しに なり嬉し泣きしている
自己紹介
開発していると、しばしばDBのスキーマを変更することがある DDLは適当に実行すると事故になるので、実行にはフローがある スキーマ変更の運用
DDL作成 チェック 実行 ドキュメント 更新
DDL作成 チェック 実行 ドキュメント 更新 TOIL
スキーマがバージョン管理されていない DDLのチェックとスキーマ定義書の更新がTOILになっている 解決したいフローの課題
スキーマがバージョン管理されていない →マイグレーションツールを導入してGit管理 DDLのチェックとスキーマ定義書の更新がTOILになっている →CircleCIで自動実行 フローの課題
DDL作成 自動チェック 実行 ドキュメント 自動更新
マイグレーション
マイグレーションツールの導入 dbmate(https://github.com/amacneil/dbmate) RDBや開発言語に依存しないSQLベースのマイグレーションツール 導入当初のスキーマを出発地点として、マイグレーションしていく
スキーマチェック
チェック項目は大きく分けて3つに分類される - 業務知識が必要なチェック - ex. 入れたいデータとデータ型が適合しているか - DDLだけで機械的に判別可能なチェック - ex.
インデックスコメントがあるか - 機械的に判別可能だがDDLだけでは判断できないチェック - ex. インデックスの重複 スキーマチェック項目の分類
チェック項目は大きく分けて3つに分類される - 業務知識が必要なチェック(手動でやる) - ex. 入れたいデータとデータ型が適合しているか - DDLだけで機械的に判別可能なチェック(自動化) - ex.
インデックスコメントがあるか - 機械的に可能だがDDLだけでは判断できないチェック(自動化) - ex. インデックスの重複 スキーマチェック項目の分類
tbls(https://github.com/k1LoW/tbls) - 「インデックスにコメントをつける」などチェックできる - 本来はDBドキュメントの生成ツール - linterとして使っているが、ER図の自動生成機能などもある DDLだけで機械的に判別可能なチェック
pt-duplicate-key-checker(https://www.percona.com/doc/percona-toolki t/LATEST/pt-duplicate-key-checker.html) - Percona Toolkitに含まれるツール - インデックスの重複を指摘してくれる - 重複インデックスがあっても戻り値は0なので、テストをfailさせた い場合は工夫が必要
インデックス重複チェック
ドキュメント生成
SchemaSpy(https://schemaspy.org/) - 自動的にテーブル一覧やER図を生成してくれる - tblsでもドキュメント生成はできるが、ArtifactsからHTMLを直接表 示できたほうが都合が良かったので採用 ドキュメントの作成
None
None
CircleCIでの実行フロー
Gitにpush ↓ 初期状態(dbmate導入直前)のスキーマファイルインポート ↓ dbmateでマイグレーション ↓ tbls, pt-duplicate-key-checkerでチェック ↓ SchemaSpyでドキュメント生成
実行フロー
ArtifactsにあるドキュメントをPRでチェックする mainにマージするとS3にも保存され、CloudFront経由で表示 CloudFront上にあるドキュメントを正として扱う 自動で生成されるので忘れない 生成されたドキュメントの保存
S3を更新するには当然AWS認証が必要 せっかくなのでOIDCを活用したいが、CircleCI Serverにはまだない😢 実運用では涙を飲んでAPIキーを使っていますが、この発表用のデモリポ ジトリではOIDC認証になっています OIDC認証?
SchemaSpy出力: https://schemaspy.venom.blue/ コードサンプル: https://github.com/bateleurX/dbmate_migration Sakila Sample Databaseを例に実際にCIフロー実装とスキーマドキュメン トを生成しています サンプルコードはGNU Affero
General Public Licenseで公開しています サンプル集
DBドキュメントの更新はCIを使うと便利 DDLレビューも機械的な項目はCIでやろう CircleCI ServerのOIDC対応待ってます まとめ