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
740
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
12k
AWS Keymanagement Serviceを知ろう
bateleurx
0
520
機密情報を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
E2Eテスト自動化プラットフォームにおけるAIの活用
shift_evolve
0
190
データ分析を支える技術 生成AI再入門
ishikawa_satoru
0
380
Matterport を使ってクラスメソッド各拠点のバーチャルオフィスツアーを作成してみた
wakatsuki
0
160
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
[NIKKEI Tech Talk]Bias for Action!! 実践から学ぶための仕組とコミュニティ / Community for Practice and Learning
kanamasa
0
270
ソフトウェアエンジニアリングの知見を活かして データ基盤をいい感じにする on Snowflake [MIERUNE BBQ #10]
mtpooh
2
150
たくさん本を読んだけど 1年後には綺麗サッパリ!を乗り越えて 学習の鬼になるぞ👹
yum3
0
160
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
20240724_cm_odyssey_hibiyatech
hiashisan
0
110
エンジニア向け会社紹介資料
caddi_eng
14
220k
「単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる」のか検証してみた
terara
0
380
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
79
5.5k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.5k
Web Components: a chance to create the future
zenorocha
307
41k
Faster Mobile Websites
deanohume
303
30k
Ruby is Unlike a Banana
tanoku
96
10k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
A designer walks into a library…
pauljervisheath
201
24k
Building Your Own Lightsaber
phodgson
101
5.9k
Producing Creativity
orderedlist
PRO
340
39k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
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対応待ってます まとめ