
みなさんこんにちは。たかぱい(@takapy0210)です。
今回は、コネヒトを支えるデータ基盤の後編ということで、Dataformの開発環境について晒そうと思います紹介しようと思います。
「ワイのところはこんな感じの環境で開発しているよ!」などあればコメントいただけると大変嬉しいです!
前回の記事はこちら
目次
はじめに
前回の記事では、コネヒトが抱えていた課題感やそれを解消するために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 を利用してフォーマットできる点に助けられています。
コンパイル後のクエリと Dry Runの統計情報の表示
モザイク多めではありますが、VS Code上では以下のように情報を見ることができます。
コンパイル後のクエリはもちろん、Incremental / Non incrementalモードでこのsqlxを実行した時に、どのくらいのコストがかかるのか?も算出してくれています。


全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への遷移ボタンも付いています。

クエリ結果のプレビュー表示
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 を使ってフォーマットができます!(感動)
それまでは以下のようなプラグインを使っている方も多かったのではないでしょうか?
VS Code上では以下の3ヶ所からフォーマットを実行することができます。

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 🤝
コネヒトではデータを用いてプロダクト・会社を成長させる機械学習エンジニアを募集しています!
興味のある方は以下よりご連絡お待ちしております!
コネヒトにおける機械学習、データ周辺業務に関しては以下の記事で紹介していますので、合わせてご覧ください!