dbt

dbt_project.yml の読み方:主要設定と命名を最短で掴む

2026-04-19
NicheeLab編集部

dbt_project.yml はプロジェクト全体の“設計図”です。モデルの既定マテリアライゼーション、スキーマ命名、パス構成、マクロのディスパッチ戦略など、実行時の挙動を大きく左右します。

本記事では、Analytics Engineer 試験対策にも直結する安定的な概念に絞って解説します。バージョン固有の仕様に依存せず、公式ドキュメントの一般的な前提に沿って説明します。

全体像と最小構成:まず“何を決めるファイル”かを掴む

dbt_project.yml はプロジェクトのメタ情報と既定設定を宣言します。最低限、プロジェクト名、バージョン、使用するプロファイル名、設定ファイルのフォーマットバージョン(一般的には 2)を定義します。

パス系(models, seeds, snapshots, tests, macros など)は既定値があるため省略可能ですが、チームでの可読性や CI の安定性を考えると明示しておくのが無難です。

  • name はユニークで、ノードの unique_id(resource_type.package.name)にも影響
  • profile は接続情報(profiles.yml 側)と紐づくため環境切替の要
  • config-version は 2 を使うのが一般的
  • require-dbt-version で dbt の要求バージョン範囲を固定可能
キーポイント
namemy_dbt_projunique_id に含まれる。改名は影響範囲が大きい
version1.0.0プロジェクトの論理バージョン。パッケージ配布時にも意味を持つ
profilewarehouse_default接続先(profiles.yml)と対応。環境により target が切り替わる
config-version2現行の設定フォーマット。2 を使うのが一般的
model-paths['models']省略可(既定あり)。明示すると可読性が上がる

dbt_project.yml からリレーション名が決まるまで

project(name)unique_id = resource_type.package.nodeparserelation = database.schema.identifierrender + config / schema は target.schema や generate_schema_name、identifier は alias or model namedbt_project.yml からリレーション名が決まるまで

最小〜基本の dbt_project.yml 例

name: my_dbt_proj
version: 1.0.0
config-version: 2
profile: warehouse_default

model-paths: ["models"]
seed-paths: ["seeds"]
snapshot-paths: ["snapshots"]
test-paths: ["tests"]
macro-paths: ["macros"]

require-dbt-version: ">=1.3.0"
quoting:
  database: false
  schema: false
  identifier: false

models:
  my_dbt_proj:
    +materialized: view

命名とパス設計:models/seeds/snapshots/tests をどう切るか

命名規約はクエリ可読性と運用コストに直結します。特にモデル名(ファイル名)、alias、schema の整合を意識し、ディレクトリごとに既定設定(materialized, schema など)を与えると管理しやすくなります。

seeds や snapshots も dbt_project.yml のブロックで既定設定をまとめておくと、方針のズレを防げます。

  • models 下は階層で絞り込み設定可能(例: models/staging, models/marts)
  • seeds は delimiter・quote_columns・column_types をプロジェクト既定化すると事故が減る
  • snapshots は target_schema / target_database をプロジェクト側で束ねやすい
リソース既定のパスキー既定/配置主な上書き設定(例)
modelsmodel-pathsview(既定)+materialized, +schema, +alias, +database, tags
seedsseed-pathsテーブルとしてロードdelimiter, quote_columns, column_types, +schema, +database
snapshotssnapshot-pathssnapshot テーブルtarget_schema, target_database
teststest-paths汎用/単体テスト定義severity, store_failures, +schema(適用可)

推奨ディレクトリ構成(例)

project_root/
  models/
    staging/
    intermediate/
    marts/
  seeds/
  snapshots/
  tests/
  macros/
  target/   (生成物)
  dbt_packages/ (依存パッケージ)

パスと命名規約の例(プロジェクト既定)

models:
  my_dbt_proj:
    +materialized: view
    staging:
      +schema: stg
      +tags: [staging]
    marts:
      +materialized: table
      +schema: marts
      +tags: [prod]

seeds:
  my_dbt_proj:
    +schema: seed
    quote_columns: true
    delimiter: ","

snapshots:
  my_dbt_proj:
    target_schema: snap

設定の優先度とモデル命名の決定ルール

dbt の設定は“どこに書いたか”で優先度が異なります。試験で狙われやすいのは、この優先度と alias/schema の解決順序です。

基本原則として、より近い(ローカルな)定義が強く、CLI での明示指定が最優先になります。

  • 優先度(高→低):CLI フラグ > リソースファイル内 config() > dbt_project.yml > 依存パッケージの設定 > 既定値
  • alias はデータベース上の識別子(identifier)を置き換えるが、ref('name') の参照名はモデル名(ノード名)のまま
  • schema は generate_schema_name マクロの結果で決まる。+schema を与えた場合、既定では target.schema に結合される
いつ使う
CLIdbt run --full-refresh一時的な上書き。CI/CD 分岐など
リソース内models/.../model.sql 内の config(materialized='table')個別モデルだけ特別扱い
プロジェクトdbt_project.yml の models: ブロックディレクトリ単位で既定化
パッケージ依存パッケージの設定外部提供の既定(上書き可能)
既定値materialized = view など未指定時のフォールバック

設定優先度の“段々畑”イメージ

CLI (最優先)リソース内 config()プロジェクト (dbt_project.yml)パッケージ既定値設定優先度の段々畑イメージ

優先度の違いが分かるサンプル

# models/marts/orders.sql
{{ config(materialized='table', alias='fct_orders') }}
select * from {{ ref('int_orders') }}

# dbt_project.yml(抜粋)
models:
  my_dbt_proj:
    marts:
      +materialized: view   # ← リソース内 config がこれを上書き
      +schema: marts

スキーマ命名:+schema と generate_schema_name の正しい使い方

スキーマは target(profiles.yml の target 設定)とプロジェクト側の +schema、それを束ねるマクロ generate_schema_name で決まります。既定の実装では、+schema を与えると target.schema に接尾して結合する挙動が一般的です。

チームで“接尾結合”か“完全置換”かを明示し、必要であればマクロを上書きすると事故を防げます。

  • 既定:+schema があると target.schema_カスタム のように連結されることが多い
  • 完全置換にしたい場合は generate_schema_name をプロジェクトで上書き
  • 環境差(dev/prod)のサフィックスは target 側で吸収するのがシンプル
アプローチ特徴注意点/長所
既定(接尾結合)target.schema + '_' + customprod/dev 共通の custom でも衝突しにくい
完全置換custom をそのまま返す移行時は既存スキーマ名との整合に注意
環境サフィックスtarget 側で env を付与dbt_project.yml はシンプル、profiles.yml の管理が肝

環境とカスタムスキーマの組み合わせ例

target.schema = analytics
+schema = stg

既定: analytics_stg
完全置換: stg
環境サフィックス例: analytics_dev_stg

generate_schema_name の上書き例(完全置換)

{% macro generate_schema_name(custom_schema_name, node) %}
  {# 完全置換:custom_schema_name があればそれを使い、なければ target.schema #}
  {% if custom_schema_name is not none %}
    {{ custom_schema_name }}
  {% else %}
    {{ target.schema }}
  {% endif %}
{% endmacro %}

# dbt_project.yml(例)
models:
  my_dbt_proj:
    staging:
      +schema: stg

拡張の基礎:vars・dispatch・互換性設定を押さえる

vars はマクロ・モデルから参照するパラメータ置き場です。dispatch はマクロ解決の探索順を制御し、アダプタや自作パッケージとの共存を助けます。

互換性と安全性のために require-dbt-version で実行バージョンを固定し、quoting・on-run-*・clean-targets なども明示しましょう。

  • dispatch で dbt 標準マクロを自作に差し替える順序を定義
  • vars は env_var と組み合わせて環境差を吸収
  • quoting はアダプタごとの識別子ポリシー差異を平準化
キー用途試験で問われがち
dispatchマクロ探索順序の制御dbt → カスタムの検索順が問われる
varsマクロ/モデルに値注入env_var との併用とデフォルト値
require-dbt-version実行バージョンの固定範囲表記(>=, <)の意味
quoting識別子の引用符制御identifier/schema/database ごとに独立
on-run-start/end実行前後フック監査テーブルや権限設定の自動化

マクロ解決のディスパッチ順序

call macrosearch in: my_pkgsearch in: dbterror (未発見)マクロ解決のディスパッチ順序

拡張系設定の例

dispatch:
  - macro_namespace: dbt
    search_order: [my_pkg, dbt]

vars:
  country: "JP"
  run_ts: "{{ var('override_ts', env_var('RUN_TS', '1970-01-01')) }}"

require-dbt-version: ">=1.3.0,<2.0.0"

quoting:
  database: false
  schema: false
  identifier: false

on-run-start:
  - "{{ log('Run started at ' ~ run_started_at, info=True) }}"
clean-targets: ["target", "dbt_packages"]
packages-install-path: "dbt_packages"

試験対策と落とし穴チェックリスト

Analytics Engineer 試験では、設定優先度・スキーマ/識別子命名・seeds/snapshots の既定と上書きの関係が頻出です。以下のチェックで理解の穴を塞ぎましょう。

特に alias と ref の関係、+schema と generate_schema_name の既定挙動、seeds の quote_columns 既定は混同しやすいポイントです。

  • ref はノード名で解決。alias を変えても ref('ノード名') は変えない
  • models の既定 materialized は view。上書きはリソース内または dbt_project.yml で可能
  • seeds は quote_columns の既定が true である実装が一般的。必要に応じて明示設定
  • snapshots の target_schema はプロジェクトでも指定可能。個別 snapshot の設定があればそちらが強い
  • quoting は database/schema/identifier 別に制御できる。アダプタ差異に留意
よくある誤解正しい理解根拠/ヒント
alias を変えると ref 名も変わるref はノード名で解決。alias は物理名のみ公式の参照解決は unique_id ベース
+schema は target.schema を置換する既定では target.schema に接尾結合されることが多いgenerate_schema_name の既定実装
seeds は未指定だと列が非クオート既定で列名クオート(多くのアダプタで true)プロジェクトで明示推奨

実行フローのざっくり像

parse projectresolve refs/configbuild DAGrun materializations実行フローのざっくり像

seeds と tests の実務設定例

seeds:
  my_dbt_proj:
    +schema: seed
    quote_columns: true
    delimiter: ","
    column_types:
      id: integer
      amount: numeric

tests:
  +severity: warn
  +store_failures: true
  +schema: test_audit

問題で確認

Analytics Engineer

問題 1

profiles.yml で target.schema が analytics、dbt_project.yml の models: で +schema: stg を付けた場合、既定の generate_schema_name 実装を用いると、モデルが作成されるスキーマはどれか?

  1. A. stg
  2. B. analytics
  3. C. analytics_stg
  4. D. target_stg

正解: C

既定の generate_schema_name は、custom schema が指定された場合に target.schema に接尾結合する実装が一般的です。そのため analytics_stg となります(完全置換にしたい場合はマクロを上書き)。

よくある質問

dbt_project.yml の name を後から変えても大丈夫?

技術的には可能ですが、unique_id(resource_type.package.name)が変わるため、artifact 連携やテスト選択子、ドキュメント生成に影響します。運用中の改名は計画的に。

alias を設定すると ref() の呼び出し名も alias に合わせる必要がある?

不要です。ref はノード(モデルファイル)の名前で解決します。alias は物理テーブル/ビュー名のみを変更します。

seeds の列クオートと大文字小文字はどう扱えばよい?

quote_columns の既定は true である実装が一般的です。アダプタの識別子規則に依存するため、プロジェクトで quote_columns と列名の正規化方針を明示しましょう。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
dbt

dbt Model の基礎: SQL で定義する変換の最小単位

Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...

dbt

dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点

dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...

dbt

dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点

dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...

dbt

dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト

Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....

dbt

dbt_project.yml の読み方:主要設定と命名を最短で掴む

dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...

dbtの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.