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
950
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
700
機密情報をKMS+RDS,S3とParameter Storeを使って保存した話
bateleurx
0
3.4k
VAddy導入案内
bateleurx
0
300
0から始まるかもしれない固定長整数をINT型に入れたい
bateleurx
0
2k
Other Decks in Technology
See All in Technology
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
100
LINEヤフーにおけるAI駆動開発組織のプロデュース施策
lycorptech_jp
PRO
0
400
「ヒットする」+「近い」を同時にかなえるスマートサジェストの作り方.pdf
nakasho
0
110
EMからICへ、二周目人材としてAI全振りのプロダクト開発で見つけた武器
yug1224
3
380
Agentic Codingの実践とチームで導入するための工夫
lycorptech_jp
PRO
0
400
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.3k
LLM活用の壁を超える:リクルートR&Dの戦略と打ち手
recruitengineers
PRO
1
240
バクラクのSREにおけるAgentic AIへの挑戦/Our Journey with Agentic AI
taddy_919
2
1k
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
200
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
72k
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
7
2.1k
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
The Cost Of JavaScript in 2023
addyosmani
55
9.7k
YesSQL, Process and Tooling at Scale
rocio
174
15k
A Tale of Four Properties
chriscoyier
162
24k
Ethics towards AI in product and experience design
skipperchong
2
210
HDC tutorial
michielstock
1
490
Color Theory Basics | Prateek | Gurzu
gurzu
0
230
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
190
sira's awesome portfolio website redesign presentation
elsirapls
0
170
The World Runs on Bad Software
bkeepers
PRO
72
12k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
370
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対応待ってます まとめ