dbt project を安全に運用する
Stage 5 — 第3章(Capstone) | dbt入門カリキュラム 推定学習時間:50〜60分 | 難易度:★★★★☆
この章で学ぶこと
ここまで analytics_mcp/dbt/dsplayground/ の staging → intermediate → mart → test → macro → snapshot → exposure を追ってきました。
最終章では 運用スキーマ、GitHub Actions、docs artifact の境界を学び、トラック全体を 1 枚の地図 に収めます。
コードは実行しません。warehouse 資格情報も扱いません。 データマネジメント入門 と データアナリティクス入門 で学んだ「信頼できる数字の仕組み」が、dbt プロジェクトで どう実装されているか を振り返ります。
この章を終えると、こんなことができるようになります:
analyticsとanalytics_ciの役割分担を説明できる- dbt docs が 公開 Pages ではなく CI artifact である理由を説明できる
- 主要 caveats(membership proxy、latest-state accuracy、anon キー)を 一覧で 説明できる
- Stage 1〜5 の学習経路を自分の言葉で要約できる
本番 schema と CI schema
dbt プロジェクトをチームで運用するとき、本番 BI が読む schema と PR 検証用 schema は分けます。
| 観点 | 本番 schema | CI schema |
|---|---|---|
| 目的 | ダッシュボード・定期レポート | PR / push の build 検証 |
| 更新 | 日次 workflow + 手動 | マージ前の自動 build |
| リスク | 誤った SQL が KPI を壊す | 本番への影響はない |
PR 上の実験的 SQL が 本番ダッシュボードを壊さない ためです。 レイク・DWH・マート の「分析環境分離」と同型です。
CI パイプライン
典型的な CI ジョブは次を一括実行します。
dbt build(run + test)- schema tests(YAML の
data_tests) - singular tests(
tests/*.sql) dbt docs generate(lineage 含む)
secrets(warehouse 接続情報)は repo 設定にのみ置き、カリキュラムや公開ドキュメントには載せません。 CI ログと artifact 名を知っていれば、マージ前に品質ゲートが走っている ことを確認できます。
dbt docs と artifact 配布
dbt docs generate は、モデル SQL・列メタデータ・lineage・exposure まで含む 内部向けドキュメント を生成します。
公開 Web(GitHub Pages 等)に載せない理由は、公開範囲の最小化 です。
| 公開 Pages にしない理由 | 例 |
|---|---|
| 内部 SQL の露出 | mart 定義・ビジネスルール |
| infra 情報 | schema 名、接続先の手がかり |
| PII 設計の詳細 | user_id 扱い、疑似匿名キー |
社内利用者は CI artifact から index.html を開き、lineage グラフ で exposure まで追います。
ガバナンス実践 の考え方と一致します。
テスト戦略の全体像
| 種類 | 例 | 役割 |
|---|---|---|
| schema test | not_null, unique, accepted_values |
grain・列の基本契約 |
| singular test | 複数表・複合条件の SQL 断言 | ビジネスルール |
| macro 依存 | 派生指標の範囲チェック | 再利用ロジックの妥当性 |
テストは ドキュメント でもあります。 品質 6 軸 の「完全性・一意性」を CI で自動化したイメージです。
宣言的契約(schema test)と手続き的断言(singular test)を CI 上の dbt build で回す——これが dbt プロジェクトの標準的な品質モデルです。
2 つの schema
| schema | 用途 | 更新タイミング |
|---|---|---|
analytics |
Metabase が読む 本番 mart | 日次 JST 06:00 + 手動 workflow |
analytics_ci |
PR / push の 検証 build | dbt-ci.yml |
DBT_USER は read-only on public + write on 対象 schema のみ(README 参照)。
PR 時に mart を build する schema として CI 専用 schema を使うことで、本番 analytics を守ります。
GitHub Actions
dbt-daily.yml(本番)
DBT_SCHEMA=analyticsdbt build— run + test- docs artifact 保存
dbt-ci.yml(検証)
DBT_SCHEMA=analytics_ci- push / PR で
dbt build+ test + docs generate - 本番 Metabase は更新しない
会議前チェックリスト(Capstone)
DS Playground analytics を 会議で使う前 に確認する caveats 一覧です。 分析前チェックリスト を dbt 版として使えます。
| # | トピック | 覚えておくこと |
|---|---|---|
| 1 | Membership | terms 同意 proxy。Auth 直読みしない |
| 2 | Active User | Learning Action ベース。ベース DAU は会員フィルタしない |
| 3 | unknown status | 分割 mart で落とさず可視化 |
| 4 | same_day_paid_conversion_rate | 同日限定。母数小でブレる |
| 5 | member_status | current-state。as-of には別モデル |
| 6 | problem accuracy | latest-state。初回正答率ではない |
| 7 | incremental | 14 日 lookback。古い修正は full-refresh |
| 8 | learning goal | current のみ。履歴は snapshot 教学例 |
| 9 | anon_user_key | 疑似匿名。行レベル公開禁止 |
| 10 | docs | 内部 artifact。公開 Pages ではない |
トラック全体の学習経路(Capstone 図)
Stage 1"] --> LAYOUT["プロジェクト構成
Stage 1"] LAYOUT --> SRC["Sources / Staging
Stage 2"] SRC --> TEST["Schema / Singular tests
Stage 2"] TEST --> SEED["Seeds: practice_problem_catalog
Stage 2"] SEED --> INT["int_user_activity_events
Stage 3"] INT --> MART["Mart ファミリー設計
Stage 3"] MART --> MEM["Membership / Activity / Incremental
Stage 3"] MEM --> MON["int_member_status_current
Stage 4"] MON --> ENG["Engagement / Survey / Content
Stage 4"] ENG --> MACRO["safe_ratio
Stage 5"] MACRO --> SNAP["Snapshot + exposures
Stage 5"] SNAP --> OPS["analytics vs analytics_ci
docs artifact
Stage 5 Capstone"] OPS --> DM["データマネジメント入門
定義・品質・ガバナンス"] OPS --> DA["データアナリティクス入門
SQL・指標・マート思考"]
Stage 別ふりかえり
Stage 1 — なぜ dbt か
Supabase = ソース正本、dbt = transform SSOT、Metabase = 利用面。
再現可能な pre-monetization monitoring が目的(overview.md)。
Stage 2 — 信頼の土台
Thin staging、schema/singular test、seed catalog。 データ品質チェック SQL の upstream。
Stage 3 — コア mart
int_user_activity_events— Learning Action SSOT- Membership / conversion — terms proxy と転換率 caveats
- Active user — faithful DAU + status 分割
- Incremental — 14 日 lookback 教学例
Stage 4 — セグメントと研究
- Monetization status — free / premium / former_premium
- Engagement — tier + 分布 mart + anon 境界
- Survey — goal share + multi-select unnest
- Content quality — seed 分母 + outlier フラグ
Stage 5 — 再利用と運用
safe_ratio— 比率 SSOT- Snapshot + exposure — 履歴と dashboard lineage
- CI / docs — 本番を守る build 規律
次の学習ステップ
| 方向 | おすすめ |
|---|---|
| 組織・責任・品質 | データマネジメント入門 Capstone |
| SQL 実装力 | Analytics ワークフロー |
| 実プロジェクト | analytics_mcp/README.md + models/overview.md を読み、docs artifact lineage を見る |
体系コラム:カリキュラム上の位置づけ
| 項目 | 内容 |
|---|---|
| Stage / 章 | Stage 5 — 第3章(Capstone) |
| 今回の論点 | analytics / analytics_ci、artifact、全 caveats 統合、トラック総括 |
| 前章との接続 | Snapshots と exposures |
| 次章への伏線 | トラック完結 → DM / Analytics へ |
まとめ
| レイヤ | 学んだ SSOT |
|---|---|
| 行動 | int_user_activity_events |
| 会員・課金 | int_member_status_current + membership marts |
| 比率 | safe_ratio |
| 分母 | practice_problem_catalog seed |
| 利用 | exposures.yml |
| 運用 | analytics 本番 / analytics_ci 検証 |
dbt 入門は「SQL を書く教程」ではなく、DS Playground の analytics 定義を読み解き、会議で数字を説明できる状態 を目指しました。 transform・テスト・lineage・CI が一体になって初めて 信頼できるデータ になります。
関連教材
- トラック起点: なぜ dbt Core か
- 横断(DM): データマネジメント入門
- 横断(Analytics): データアナリティクス入門
- リポジトリ:
analytics_mcp/dbt/dsplayground/models/overview.md
確認問題
問題 1
Pull Request 時に mart を build する schema として 一般的に望ましい のはどれですか。
A. OLTP の public スキーマ
B. CI 専用 schema(例: analytics_ci)
C. 本番 analytics schema を常に上書き
D. アプリ認証 schema
正解: B
解説: CI は専用 schema で検証し、本番 schema を守ります。
問題 2
dbt docs を内部 artifact のみで配布する 主な理由 はどれですか。
A. dbt が HTML を生成できないから
B. 内部 SQL・schema・lineage などを公開 Web に載せないため
C. BI ツールが docs を読めないから
D. OLTP のポリシーで禁止されているから
正解: B
問題 3(Capstone 総合)
dbt プロジェクト全体の設計思想として 最も central な考え方はどれですか。
A. BI ダッシュボード JSON
B. intermediate 層で指標定義を SSOT 化し、marts は BI 向けに grain を固定する
C. GitHub Actions YAML のみ
D. OLTP テーブルを mart から直接読む
正解: B
解説: Transform の責務は 定義の固定(intermediate) と 問いへの回答(marts) の分離です。
問題 4(Capstone 総合)
このトラックで繰り返し登場する 品質ゲート の組み合わせとして最も適切なのはどれですか。
A. BI 上の目視のみ
B. schema tests(YAML)+ singular tests(SQL)+ CI 上の dbt build
C. seed ファイルの手動コピーのみ
D. macro のコメントアウト
正解: B
解説: 宣言的契約と手続き的断言を CI で回すのが、dbt プロジェクトの標準的な品質モデルです。
用語メモ(トラック総括)
| 用語 | 意味(このトラックでの使い方) |
|---|---|
| Learning Action | 保存・完了・送信など明示的学習行動(6 type) |
| terms proxy | 会員数 = terms 同意済み distinct user_id |
| current-state | build 時点のスナップショット。履歴 as-of ではない |
| latest-state | 最新保存状態のみ保持(初回イベント履歴ではない) |
| exposure | Metabase 等の利用面を lineage に載せた宣言 |
analytics_ci |
CI 専用 schema。本番を汚さない |
| docs artifact | CI が生成する内部 lineage ドキュメント(公開 Pages ではない) |
| SSOT | 指標・定義の単一正本(intermediate / seed / マクロ) |