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
820
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
580
機密情報をKMS+RDS,S3とParameter Storeを使って保存した話
bateleurx
0
3.2k
VAddy導入案内
bateleurx
0
250
0から始まるかもしれない固定長整数をINT型に入れたい
bateleurx
0
1.7k
Other Decks in Technology
See All in Technology
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
13k
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
心が動くエンジニアリング ── 私が夢中になる理由
16bitidol
0
100
いざ、BSC討伐の旅
nikinusu
2
780
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
430
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Building Your Own Lightsaber
phodgson
103
6.1k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
The World Runs on Bad Software
bkeepers
PRO
65
11k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Faster Mobile Websites
deanohume
305
30k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Designing for Performance
lara
604
68k
Gamification - CAS2011
davidbonilla
80
5k
Thoughts on Productivity
jonyablonski
67
4.3k
Ruby is Unlike a Banana
tanoku
97
11k
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対応待ってます まとめ