🌊
dbt-osmosisのPre-commitで、スリムなYAML自動更新を実現する
dbt-osmosisというdbtユーザー向けのPythonライブラリについての記事です。初めての方は先にこちらの記事をご覧になってから戻って来ると理解が深まると思います。
さて、少し前のバージョンアップでdbt-osmosisにPre-commitが新たに実装されました。
(Pre-commitとは、以下の記事で紹介されている通り、「コミット直前に自動的にファイルを評価し、整形してくれるツール」です。
dbt-osmosisにおいては、git commit
するとdbt-osmosis yaml refactor
がコミット対象のモデルに対してのみ走るという挙動をします。
...ここがポイントで、基本的にCI/CDでyaml refactorを実行すると全モデル対象となるため時間がかかります。待てません。fqnオプションで凌ぐしか基本ないかなと思いますが、それでも物足りなさがありました。
しかしPre-commitならばローカルマシン上で変更のあったモデルに対してのみ実行されるため、時短になります。ここがメリットかなと思います。
手順は簡単です。
- pre-commitをインストール
- 設定ファイルを書く
- リポジトリに読み込ませる
1と3は前述の記事をご覧いただければ問題なくいけると思いますので、2についてのみサンプルを紹介します。
.pre-commit-config.yaml
repos:
- repo: https://github.com/z3z1ma/dbt-osmosis # このままでOK
rev: v0.11.19 # dbt-osmosisのバージョンを指定する
hooks:
- id: dbt-osmosis # 指定がなければこのままでOK
files: ^dbt/models/ # モデルのパス(左記の例では ./dbt/models 以下のモデルに変更があった場合のみ検知する)
# dbt-osmosis yaml refactor コマンドに添えるオプションを渡す
args: ['--target=dev', '--project-dir=./dbt', '--profiles-dir=./dbt']
additional_dependencies: [dbt-bigquery] # dbtアダプタを指定
これを置けばOKです。ただ注意点として、'--force-inheritance'オプションをつけるとFailed扱いとなりコミットできませんでした(私の環境特有かは謎)。
そしてこのPre-commitの他にも
stateを使った差分実行
pip install時のキャッシュ
あたりを組み合わせることで、PR時のCI/CDジョブ待機時間が半分以下に減り、より高速にイテレーションを回す体制が整いました。めでたし。
Discussion