👏
dbtのドキュメントとテストのカバレッジを確認する"dbt-coverage"
1. はじめに
dbt-coverageはdbtのドキュメントやテストに漏れが無いかを確認するためのツールです。テーブルやビューをたくさん作成するとどうしてもドキュメントやテストの追記を忘れてしまいがちになります(反省...)。そこでdbt-coverage
を使って、カバレッジを計測することでドキュメントへの追記漏れを減少させることができるはず! 今回はdbt-coverage
の使用感およびどのようなことができるのかの確認していきたいと思います。
GitHubにあるデモをなぞって行きます
2. 概要
- dbt-coverageには2つのコマンドがあります。
- compute (詳細は
dbt-coverage compute --help
を参照) - compare (詳細は
dbt-coverage compare --help
を参照)
- 計算方法
dbt docs generate
で作成されるtarget/catalog.json
とtarget/manifest.json
を基にカバレッジを算出します
3. 手順
3-1. インストール
pip install dbt-coverage
3-2. カバレッジの確認
- デモでも使用されているように、jaffle_shopのデータを使って行きます
3-2-1. モデルの実行
$ cd jaffle_shop
$ dbt run
3-2-2. ドキュメントの作成
-
target/catalog.json
とtarget/manifest.json
を作成します
$ dbt docs generate
3-2-3. ドキュメントのカバレッジを確認
- ドキュメントのカバレッジを算出して行きます
-
coverage
フォルダ配下に出力されたjsonファイルを格納します
$ mkdir coverage
$ dbt-coverage compute doc --cov-report coverage/coverage-doc.json
Coverage report
=====================================================================
dbt.customers 6/7 85.7%
dbt.orders 9/9 100.0%
dbt.raw_customers 0/3 0.0%
dbt.raw_orders 0/4 0.0%
dbt.raw_payments 0/4 0.0%
dbt.stg_customers 0/3 0.0%
dbt.stg_orders 0/4 0.0%
dbt.stg_payments 0/4 0.0%
=====================================================================
Total 15/38 39.5%
3-2-4. テストのカバレッジを確認
- テストのカバレッジを算出して行きます
-
coverage
フォルダ配下に出力されたjsonファイルを格納します
$ dbt-coverage compute test --cov-report coverage/coverage-test.json
Coverage report
=====================================================================
dbt.customers 1/7 14.3%
dbt.orders 8/9 88.9%
dbt.raw_customers 0/3 0.0%
dbt.raw_orders 0/4 0.0%
dbt.raw_payments 0/4 0.0%
dbt.stg_customers 1/3 33.3%
dbt.stg_orders 2/4 50.0%
dbt.stg_payments 2/4 50.0%
=====================================================================
Total 14/38 36.8%
3-2-5. カバレッジの結果をマークダウンで書き出す
$ dbt-coverage compute doc --cov-report coverage/test.md --model-path-filter models/staging/ --cov-format markdown
=====================================================================
# Coverage report
| Model | Columns Covered | % |
|:------|----------------:|:-:|
| dbt.stg_customers | 0/3 | 0.0% |
| dbt.stg_orders | 0/4 | 0.0% |
| dbt.stg_payments | 0/4 | 0.0% |
| Total | 0/11 | 0.0% |
3-2-6. カバレッジの比較
- 2つのカバレッジを比較します
$ dbt-coverage compute doc --cov-report coverage/coverage-doc_1.json
$ dbt-coverage compare coverage/coverage-doc.json coverage/coverage-doc_1.json
before after +/-
=============================================
Coverage 39.47% 39.47% +0.00%
=============================================
Tables 8 8 +0/+0
Columns 38 38 +0/+0
=============================================
Hits 15 15 +0/+0
Misses 23 23 +0/+0
=============================================
==============================================================================================
Catalog 15/38 (39.47%) -> 15/38 (39.47%)
==============================================================================================
感想
- 非常に簡単にテストのカバレッジを算出できるんだなぁ〜と感心しました(どこから目線?)
- カバレッジの結果およびカバレッジのdiffはCIに盛り込んで(例えばGitHub Actionなど)プルリク時に毎回確認できれば良きかなっと思っています。
- 次回はそこの辺を記事にしたいですねぇ〜〜〜
Discussion