以下の内容はhttps://tech.connehito.com/entry/2026/03/11/120206より取得しました。


Dataformの開発環境を晒してみる(Visual Studio Code with Dev Containers)

みなさんこんにちは。たかぱい(@takapy0210)です。

今回は、コネヒトを支えるデータ基盤の後編ということで、Dataformの開発環境について晒そうと思います紹介しようと思います。

「ワイのところはこんな感じの環境で開発しているよ!」などあればコメントいただけると大変嬉しいです!

前回の記事はこちら

tech.connehito.com


目次


はじめに

前回の記事では、コネヒトが抱えていた課題感やそれを解消するためにDataformでどのようにデータ基盤を構築しているのか?について紹介しました。

本記事では、以下のトピックに焦点を当てて紹介します。

  • Visual Studio Code(VS Code) with Dev Containersによる開発環境
  • Dataform tools拡張機能の活用

Dataform toolsに関しては、Google Cloud上で行えたことは殆ど網羅していたり、SQLFluff によるフォーマットが使えたりと、開発体験はかなり良くなったと実感しています!

開発環境の課題と解決策

DataformはGoogle Cloudのコンソール上で開発を行うことができます。 Githubと連携することで、ワークスペースという、いわゆるブランチのようなものを切って開発し、PRを出す、といったフローを踏むことができます。

メリットとしては、特に開発環境などを整備しなくともSQLさえ知っていれば誰でも開発しやすい点が挙げられると思います。

しかし、運用していくと以下のような課題がでてきました。

  • エディタが使いづらい
    • タブの左右分割表示ができない
    • フォーマッターの自動フォーマットがいけてない
    • サジェスト機能が貧弱、など
  • コードレビュー時、毎回コンソールにアクセスし対象のワークスペースを開き、SQLのコンパイルなどが問題ないか確認する必要がある
  • Claude Codeなど、Coding Agentの恩恵を受けられない

特にこれからの時代、Coding Agentの恩恵を受けられないことは重要な課題と判断し、ローカルで開発できる環境を構築していきました。

VS Code with Dev Containersによる開発環境

上記の課題を解決するために、VS Code with Dev Containersで開発環境を整備しました。 メリットとしては、ざっくり以下のようなことが挙げられると思います。

  • チームメンバー全員が同じ環境で開発できる
  • Dockerイメージにツールがプリインストール済みなので、セットアップが容易
  • コンパイルチェックやデータリネージなど、VS Codeの拡張機能が使える

Dockerfileの構成

Dev Containerで利用している dockerfile は以下のようなイメージです。

FROM mcr.microsoft.com/devcontainers/javascript-node:20-bookworm

RUN apt-get update && apt-get install -y --no-install-recommends \
  ...
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

# Google Cloud CLI のインストール
RUN curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg \
      | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg \
    && echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
      > /etc/apt/sources.list.d/google-cloud-sdk.list \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
         google-cloud-cli=548.0.0-0 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Dataform CLI をインストール
RUN npm install -g @dataform/cli@3.0.45

# SQLFluff のインストール
RUN python3 -m pip install sqlfluff==4.0.4

devcontainer.jsonの設定

devcontainer.json は以下です。

VS Codeの拡張機能であるDataform toolsをインストールして使えるようにしています。

{
  "name": "Dataform Dev Environment",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "mounts": [
    ...
  ],
  // VS Codeの設定
  "customizations": {
    "vscode": {
      ...
      "extensions": [
        "ashishalex.dataform-lsp-vscode"
        ...
      ]
    }
  },
  ...
}

Dev Container起動後、以下の手順でGoogle Cloud認証を行えば、開発環境が整います。

# Google Cloud認証
gcloud auth application-default login
gcloud auth login

# プロジェクトの設定
gcloud config set project [PROJECT NAME]

Dataform tools拡張機能の活用

Dataform toolsとは、VS Code向けのDataform拡張機能です。以下のような機能を提供しています。

  • コンパイル後のクエリと Dry Runの統計情報の表示
  • 依存関係グラフ(Data Lineage)の表示
  • クエリ結果のプレビュー表示
  • CLI または Dataform APIを用いたジョブの実行
  • SQLFluff を使用して .sqlx ファイルのフォーマット

詳細は以下のページをご覧いただければと思いますが、中でもコンパイルやDry Runの統計情報がサクッと確認できたり、SQLFluff を利用してフォーマットできる点に助けられています。

dataformtools.com

コンパイル後のクエリと Dry Runの統計情報の表示

モザイク多めではありますが、VS Code上では以下のように情報を見ることができます。

コンパイル後のクエリはもちろん、Incremental / Non incrementalモードでこのsqlxを実行した時に、どのくらいのコストがかかるのか?も算出してくれています。

VS Code上での見え方

全sqlxに対して、コンパイルが行えるかのチェックも可能です。

# 全てのスキーマをコンパイルチェック
$ dataform compile

出力例

Compiled xxx action(s).
xxx dataset(s):
  hoge_table [table]
  fuga_table.bq_daily_scan_cost [incremental]
  ...

xxx assertion(s):
  hoge
  ...

xxx operation(s):
  fuga
  ...

また、dry-runに関してもまとめて実行することもできます。

# 全スキーマをdry-run
dataform run --dry-run

# タグを指定してdry-run
dataform run --tags [tag_name] --dry-run

# 特定のスキーマとその依存関係を含めてdry-run
dataform run --actions "hoge_table" --include-deps --dry-run

依存関係グラフ(Data Lineage)の表示

以下のように、依存関係グラフ(Data Lineage)を確認することもできます。

対象テーブルをBigQueryのコンソール上でシュッと確認できるように、テーブルURLへの遷移ボタンも付いています。

Dependency Graph

クエリ結果のプレビュー表示

Preview Dataボタンを押下することで、sqlxを実行したときに取得されるデータの中身を見ることもできます。

フィルターなども付いているので、データ確認が捗ります。

データプレビュー

CLI または Dataform APIを用いたジョブの実行

Google Cloudコンソールに行かずともVS Code上からジョブの実行を行うこともできます。

「Run(CLI)」と「Run(API)」の2つの方法があるのですが、それぞれで挙動が違うので注意が必要です。

ジョブの実行

Run(CLI)では、現在ローカルで編集しているファイルがそのまま実行されるのに対して、Run(API)では、現在のブランチをDataform上でコンパイルして実行します。そのためローカルで編集したファイルをPushしていない状態でRun(API)を押下すると、最新の変更が反映されない状態で実行されてしまいます。

Run(CLI)

  • 現在ローカルで編集しているファイルがそのまま実行される。
  • BigQueryのジョブエクスプローラーから、実行されたJOBを確認できる。
    • ただし、JOBが分かれて実行されることもあるので探すのはやや大変。
  • 挙動としては /usr/local/share/npm-global/bin/dataform run "/workspaces/gcp-dataform" --timeout=5m --actions "connehito-dwh.dataset.table" のようなコマンドが実行されるとの同じ。

Run(API)

  • 現在のブランチをDataform上でコンパイルし、実行される。
  • Google Cloud上にあるDataformの、Workflow Execution Logs から実行ログを見ることができる。

SQLFluff を使用して .sqlx ファイルのフォーマット

いつの間にか実装されていたのですが、SQLFluff を使ってフォーマットができます!(感動)

それまでは以下のようなプラグインを使っている方も多かったのではないでしょうか?

zenn.dev

VS Code上では以下の3ヶ所からフォーマットを実行することができます。

SQLFluff でのフォーマット

SQLFluffによるフォーマットを有効にするには .vscode-dataform-tools/.sqlfluff ファイルが必要になるのですが、その内容に以下のプレースホルダーを追記しないとエラーになるため、注意が必要です。

(エラーの理由ですが、Dataform tools拡張機能が一時ファイルを作成する際に、${ref()}などを数字(1,2,3など)に置き換えており、その結果がSQLとして不正になっているために発生しているようです)

...

[sqlfluff:templater:placeholder]
# Dataformの${...}構文をプレースホルダーとして扱う(ネストした{}を2レベルまでサポート)
param_regex = \$\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\}
# Dataform tools拡張機能が使用する数字プレースホルダーを定義
# 拡張機能は${ref()}などを数字に置き換えるため、それらをテーブル名として認識させる
1 = placeholder_table_1
2 = placeholder_table_2
3 = placeholder_table_3
4 = placeholder_table_4
5 = placeholder_table_5
6 = placeholder_table_6
7 = placeholder_table_7
8 = placeholder_table_8
9 = placeholder_table_9
10 = placeholder_table_10

最後に

本記事では、Dataformの開発環境をGoogle Cloud上のマネジメントコンソールから、ローカルのVS Code with Dev Containers環境に移行し、快適に開発が行えるようになったことについて紹介しました。

Dataformの事例はまだまだ少ないと思いますので、今後も定期的に発信していきたいと思います!

We Are Hiring 🤝

コネヒトではデータを用いてプロダクト・会社を成長させる機械学習エンジニアを募集しています!

興味のある方は以下よりご連絡お待ちしております!

herp.careers

コネヒトにおける機械学習、データ周辺業務に関しては以下の記事で紹介していますので、合わせてご覧ください!

tech.connehito.com




以上の内容はhttps://tech.connehito.com/entry/2026/03/11/120206より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14