dbt-coreを使って開発をしているといろいろとyamlファイルを作ることになるので、
これらのスキーマ検証を自動的に行えると便利です。

dbt-core | GitHub
https://github.com/dbt-labs/dbt-core

次のリポジトリで、dbtのjsonschemaが公開されているので、
このエントリでは、
pre-commitのcheck-jsonschemaフックで検証する手順を記載したいと思います。

dbt-jsonschema | GitHub
https://github.com/dbt-labs/dbt-jsonschema

check-jsonschema | GitHub
https://github.com/python-jsonschema/check-jsonschema

動作確認用のdbtプロジェクト作成

動作確認用プロジェクトのディレクトリを作成します。

mkdir dbt-sample && cd $_

Gitのリポジトリを初期化します。

git init

Pythonの仮想環境を用意します。

python -m venv venv
. venv/bin/activate

dbt-sqliteをインストールします。

pip install dbt-sqlite
pip freeze > requirements.txt

dbtプロジェクトを初期化します。

dbt init sample

この時点で、次のようなディレクトリ構成になっています。(dotfileは除く)

  • dbt-sample
    • sample
      • analyses
      • macros
      • models
        • example
          • my_first_dbt_model.sql
          • my_second_dbt_model.sql
          • schema.yml
      • seeds
      • snapshots
      • tests
      • dbt_project.yml
      • README.md
    • venv
    • requirements.txt

pre-commitの設定

次のHookを使うと、pre-commitでjson-schemaの検証ができます。

check-jsonschema | GitHub
https://github.com/python-jsonschema/check-jsonschema

dbtのjson-schemaについての設定は、次のようになります。

.pre-commit-config.yaml

repos:
- repo: https://github.com/python-jsonschema/check-jsonschema
  rev: 0.29.2
  hooks:
    - id: check-jsonschema
      name: "Check dbt dbt_project yaml"
      files: dbt_project.yml$
      types: [yaml]
      args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/dbt_project-latest.json"]
    - id: check-jsonschema
      name: "Check dbt selectors yaml"
      files: selectors.yml$
      types: [yaml]
      args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/selectors-latest.json"]
    - id: check-jsonschema
      name: "Check dbt package yaml"
      files: packages.yml$
      types: [yaml]
      args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/packages-latest.json"]
    - id: check-jsonschema
      name: "Check dbt properties yaml"
      files: (models|analysis|snapshots)/.*.yml$
      types: [yaml]
      args: ["--schemafile", "https://raw.githubusercontent.com/dbt-labs/dbt-jsonschema/main/schemas/latest/dbt_yml_files-latest.json"]

前項で、schema.yml, dbt_project.ymlが生成されているので、
これらのファイルをスキーマに沿わないように変更してcommitを試みると、
FAILしてcommitできなくなることが確認できると思います。

以上。