Tasuke HubLearn · Solve · Grow
#dbt

dbt Core入門:SQLだけで構築する、モダンなデータ変換パイプライン

現代のデータエンジニアリング必須ツール`dbt`を徹底解説。SQLだけでデータ変換パイプラインを構築し、テストやドキュメント生成まで自動化する手法を、BigQueryを使った実践的なチュートリアル形式で紹介します。

時計のアイコン19 September, 2025
TH

Tasuke Hub管理人

東証プライム市場上場企業エンジニア

情報系修士卒業後、大手IT企業にてフルスタックエンジニアとして活躍。 Webアプリケーション開発からクラウドインフラ構築まで幅広い技術に精通し、 複数のプロジェクトでリードエンジニアを担当。 技術ブログやオープンソースへの貢献を通じて、日本のIT技術コミュニティに積極的に関わっている。

🎓情報系修士🏢東証プライム上場企業💻フルスタックエンジニア📝技術ブログ執筆者

はじめに

データ分析の世界では、生データを分析しやすい形に「変換(Transform)」するプロセスが不可欠です。しかし、この変換ロジックが個人のPC内のExcelファイルや、共有フォルダに散らばった無数のSQLファイルで管理されている、といった状況は少なくありません。その結果、「どのSQLが最新だっけ?」「この指標の計算ロジックはどこにある?」といった問題が頻発し、データの一貫性や信頼性が損なわれがちです。

このデータ変換プロセスに、ソフトウェア開発のベストプラクティス(バージョン管理、テスト、ドキュメンテーション)を持ち込み、誰でも信頼性の高いデータパイプラインを構築できるようにするツールがdbt (data build tool) です。

dbtの最大の魅力は、データアナリストやエンジニアが使い慣れた「SQL」だけで、モダンなデータ変換パイプラインを構築できる点にあります。この記事では、オープンソース版であるdbt CoreとGoogle BigQueryを使い、dbtプロジェクトのセットアップから、モデルの構築、テスト、ドキュメント化までをハンズオン形式で解説します。

ベストマッチ

最短で課題解決する一冊

この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。

dbtとは何か?

dbtは、ELT (Extract, Load, Transform) プロセスのうち、最後の「T (Transform)」に特化したツールです。データウェアハウス(DWH)にロード(Load)された後の生データに対して、SQLを使ってクリーンナップ、集計、ビジネスロジックの適用などを行い、分析に適した形に変換する役割を担います。

dbtが提供する主な価値は以下の通りです。

  • SQLのモジュール化: 長大なSQLクエリを、再利用可能な小さな単位(モデル)に分割できます。
  • 依存関係の管理: モデル間の依存関係を自動で解決し、正しい順序で実行してくれます。
  • テストの自動化: データに欠損値がないか、IDが一意であるかといったデータ品質テストを簡単に定義・実行できます。
  • ドキュメントの自動生成: モデルの定義や依存関係(リネージ)を可視化したドキュメントを自動で生成します。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

dbt Coreクイックスタート(BigQuery編)

それでは、実際にdbtプロジェクトをセットアップしていきましょう。

前提条件

  • Python 3.8以上とpipがインストール済み
  • Google Cloud (GCP) プロジェクトと、BigQueryが有効になっていること
  • (推奨)Gitによるバージョン管理

Step 1: dbt-bigqueryのインストール

まず、dbt Core本体とBigQueryに接続するためのアダプタをインストールします。ターミナルで以下のコマンドを実行してください。

# 仮想環境の作成を推奨
python -m venv dbt_env
source dbt_env/bin/activate

# dbtとBigQueryアダプタをインストール
pip install dbt-bigquery

Step 2: dbtプロジェクトの初期化

次に、dbtプロジェクトを作成します。

dbt init my_dbt_project

このコマンドを実行すると、my_dbt_projectというディレクトリが作成され、中にいくつかのサブディレクトリと設定ファイルが生成されます。

  • models/: データ変換ロジックであるSQLファイルを配置する場所。
  • tests/: カスタムのデータテストを記述する場所。
  • dbt_project.yml: プロジェクト全体の設定ファイル。

Step 3: BigQueryへの接続設定

dbtがBigQueryに接続するための認証情報を設定します。この設定は~/.dbt/profiles.ymlというファイルに記述します。

まず、GCPでサービスアカウントを作成し、**「BigQuery データ編集者」「BigQuery ジョブユーザー」**のロールを付与して、JSONキーファイルをダウンロードしておきます。

次に、~/.dbt/profiles.yml(なければ新規作成)を以下のように編集します。

my_dbt_project: # dbt_project.ymlの`profile`名と一致させる
  target: dev
  outputs:
    dev:
      type: bigquery
      method: service-account
      project: <your-gcp-project-id>       # GCPプロジェクトID
      dataset: dbt_your_name             # dbtがモデルを作成するデータセット名
      threads: 4
      keyfile: /path/to/your/keyfile.json  # ダウンロードしたJSONキーへのパス

設定が完了したら、プロジェクトディレクトリに移動し、dbt debugコマンドを実行します。Connection test PASSEDと表示されれば成功です。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

dbtの基本概念と実践

接続が確認できたので、実際にデータ変換モデルを作成していきましょう。

1. モデル (Models) の作成

モデルは、dbtにおけるデータ変換の基本単位であり、実体は単なるSELECT文が書かれたSQLファイルです。models/ディレクトリにstg_customers.sqlというファイルを作成してみましょう。

-- 生データソースから顧客データを取得し、ステージングモデルを作成
SELECT
    id as customer_id,
    first_name,
    last_name
FROM
    `dbt-tutorial.jaffle_shop.customers` -- ここでは公開データセットを例として使用

次に、このステージングモデルを参照して、新しいモデルdim_customers.sqlを作成します。

-- ステージングモデルを参照し、顧客のフルネームを作成
SELECT
    customer_id,
    first_name || ' ' || last_name as full_name
FROM
    {{ ref('stg_customers') }} -- ref関数で他のモデルを参照

{{ ref('stg_customers') }}がdbtの強力な機能です。これにより、dbtはモデル間の依存関係を理解し、stg_customersを先に実行してからdim_customersを実行するという順序を自動的に決定します。

2. テスト (Tests) の追加

データ品質を担保するためにテストを追加します。dbtでは、.ymlファイルで簡単にテストを定義できます。 models/ディレクトリにschema.ymlというファイルを作成します。

version: 2

models:
  - name: stg_customers
    columns:
      - name: customer_id
        tests:
          - unique      # customer_idが一意であることをテスト
          - not_null    # customer_idがNULLでないことをテスト

ここでは、stg_customersモデルのcustomer_idカラムが、一意(unique)かつ非NULL(not_null)であることをテストしています。dbtにはこのような組み込みテストが多数用意されており、データ品質の維持に大きく貢献します。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

パイプラインの実行とドキュメント生成

モデルとテストの準備ができたので、パイプラインを実行してみましょう。

  • dbt run: このコマンドは、models/ディレクトリ内の全てのSQLファイルを実行し、BigQuery上にモデルをビュー(デフォルト)またはテーブルとして作成します。
  • dbt test: このコマンドは、.ymlファイルに定義された全てのテストを実行し、データが品質基準を満たしているかを確認します。

そして、dbtのもう一つの強力な機能がドキュメントの自動生成です。

  • dbt docs generate: プロジェクトのドキュメントを生成します。
  • dbt docs serve: 生成されたドキュメントをローカルサーバーで表示します。

ブラウザでhttp://localhost:8080にアクセスすると、各モデルのカラム情報やテスト内容、そして**モデル間の依存関係を可視化したデータリネージ(系統図)**を確認できます。これにより、データがどのように変換されていくのかが一目瞭然になります。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

まとめ

dbtは、これまで属人化しがちだったデータ変換プロセスに、規律と共同作業性、そして信頼性をもたらす画期的なツールです。SQLという共通言語をベースにしているため、データアナリストからデータエンジニアまで、データに関わる全ての人が協力して、堅牢なデータパイプラインを構築できます。

今回紹介したのはdbtの基本的な機能だけですが、その奥深さと強力さを感じていただけたのではないでしょうか。ぜひ、あなたのデータウェアハウスでdbtを試し、モダンなデータエンジニアリングの世界に足を踏み入れてみてください。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

この記事をシェア

続けて読みたい記事

編集部がピックアップした関連記事で学びを広げましょう。

#Apache Spark

Apache SparkとKafkaで構築するリアルタイムデータパイプライン完全ガイド【2025年最新】

2025/8/12
#RisingWave

RisingWave入門:PostgreSQL互換のストリーム処理データベースを使ってみる【2025年版】

2025/9/19
#Python

PythonだけでモダンなWebアプリが作れる!Reflex入門ガイド【2025年最新】

2025/11/26
#LLM

LLM評価パイプライン自動化【2025年版】:CIナイトリーで品質を継続監視する

2025/9/13
#ベクターデータベース

ベクターデータベースで構築するセマンティック検索システム完全ガイド【2025年最新】

2025/8/12
#Python

型駆動でAIパイプラインを組むためのPython高度テクニック

2025/11/23