Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成

 CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成

2022年4月21日 CircleCIユーザーコミュニティミートアップ#9での発表資料です

MATSUURA, yosuke

April 21, 2022
Tweet

More Decks by MATSUURA, yosuke

Other Decks in Technology

Transcript

  1. CircleCI ユーザーコミュニティ ミートアップ #9
    2022年4月21日
    CircleCIを使った
    MySQL DBドキュメント
    自動生成

    View full-size slide

  2. Twitter: 蟒蛇(「ウワバミ」と読みます) @uwabami_garden
    CI歴 2.5年、うちCircleCI歴 2年
    その割に去年から新入社員研修でCICDを担当している
    最近会社のCircleCI Serverが3.xに更新されたことで、研修資料が大幅作り直しに
    なり嬉し泣きしている
    自己紹介

    View full-size slide

  3. 開発していると、しばしばDBのスキーマを変更することがある
    DDLは適当に実行すると事故になるので、実行にはフローがある
    スキーマ変更の運用

    View full-size slide

  4. DDL作成 チェック 実行
    ドキュメント
    更新

    View full-size slide

  5. DDL作成 チェック 実行
    ドキュメント
    更新
    TOIL

    View full-size slide

  6. スキーマがバージョン管理されていない
    DDLのチェックとスキーマ定義書の更新がTOILになっている
    解決したいフローの課題

    View full-size slide

  7. スキーマがバージョン管理されていない
    →マイグレーションツールを導入してGit管理
    DDLのチェックとスキーマ定義書の更新がTOILになっている
    →CircleCIで自動実行
    フローの課題

    View full-size slide

  8. DDL作成 自動チェック 実行
    ドキュメント
    自動更新

    View full-size slide

  9. マイグレーション

    View full-size slide

  10. マイグレーションツールの導入
    dbmate(https://github.com/amacneil/dbmate)
    RDBや開発言語に依存しないSQLベースのマイグレーションツール
    導入当初のスキーマを出発地点として、マイグレーションしていく

    View full-size slide

  11. スキーマチェック

    View full-size slide

  12. チェック項目は大きく分けて3つに分類される
    - 業務知識が必要なチェック
    - ex. 入れたいデータとデータ型が適合しているか
    - DDLだけで機械的に判別可能なチェック
    - ex. インデックスコメントがあるか
    - 機械的に判別可能だがDDLだけでは判断できないチェック
    - ex. インデックスの重複
    スキーマチェック項目の分類

    View full-size slide

  13. チェック項目は大きく分けて3つに分類される
    - 業務知識が必要なチェック(手動でやる)
    - ex. 入れたいデータとデータ型が適合しているか
    - DDLだけで機械的に判別可能なチェック(自動化)
    - ex. インデックスコメントがあるか
    - 機械的に可能だがDDLだけでは判断できないチェック(自動化)
    - ex. インデックスの重複
    スキーマチェック項目の分類

    View full-size slide

  14. tbls(https://github.com/k1LoW/tbls)
    - 「インデックスにコメントをつける」などチェックできる
    - 本来はDBドキュメントの生成ツール
    - linterとして使っているが、ER図の自動生成機能などもある
    DDLだけで機械的に判別可能なチェック

    View full-size slide

  15. pt-duplicate-key-checker(https://www.percona.com/doc/percona-toolki
    t/LATEST/pt-duplicate-key-checker.html)
    - Percona Toolkitに含まれるツール
    - インデックスの重複を指摘してくれる
    - 重複インデックスがあっても戻り値は0なので、テストをfailさせた
    い場合は工夫が必要
    インデックス重複チェック

    View full-size slide

  16. ドキュメント生成

    View full-size slide

  17. SchemaSpy(https://schemaspy.org/)
    - 自動的にテーブル一覧やER図を生成してくれる
    - tblsでもドキュメント生成はできるが、ArtifactsからHTMLを直接表
    示できたほうが都合が良かったので採用
    ドキュメントの作成

    View full-size slide

  18. CircleCIでの実行フロー

    View full-size slide

  19. Gitにpush

    初期状態(dbmate導入直前)のスキーマファイルインポート

    dbmateでマイグレーション

    tbls, pt-duplicate-key-checkerでチェック

    SchemaSpyでドキュメント生成
    実行フロー

    View full-size slide

  20. ArtifactsにあるドキュメントをPRでチェックする
    mainにマージするとS3にも保存され、CloudFront経由で表示
    CloudFront上にあるドキュメントを正として扱う
    自動で生成されるので忘れない
    生成されたドキュメントの保存

    View full-size slide

  21. S3を更新するには当然AWS認証が必要
    せっかくなのでOIDCを活用したいが、CircleCI Serverにはまだない😢
    実運用では涙を飲んでAPIキーを使っていますが、この発表用のデモリポ
    ジトリではOIDC認証になっています
    OIDC認証?

    View full-size slide

  22. SchemaSpy出力: https://schemaspy.venom.blue/
    コードサンプル: https://github.com/bateleurX/dbmate_migration
    Sakila Sample Databaseを例に実際にCIフロー実装とスキーマドキュメン
    トを生成しています
    サンプルコードはGNU Affero General Public Licenseで公開しています
    サンプル集

    View full-size slide

  23. DBドキュメントの更新はCIを使うと便利
    DDLレビューも機械的な項目はCIでやろう
    CircleCI ServerのOIDC対応待ってます
    まとめ

    View full-size slide