LoginSignup
23
10

dbt Cloudを卒業してVSCodeでローカル開発はじめました

Last updated at Posted at 2023-05-20

はじめに

みなさん、dbt使ってますか? dbt Cloud使ってますか? この記事ではdbt Cloudを卒業し、dbtのローカル環境を構築した方法についてご紹介いたします。
皆様の参考になれば幸いです。

dbt Cloud とは

dbtを利用する方法には、基本的に2つのアプローチがあります。一つはSaaSプラットフォームであるdbt Cloud、もう一つはCLIツールのdbt-coreを使う方法です。dbt CloudはWeb上でコードの変更が可能で、Git連携、プレビュー表示、ビルド実行、JOBの定期実行などを行うことができる非常に便利なツールです。

スクリーンショット 2023-05-11 2.04.13.png

dbt Cloud の課題

dbt Cloudの問題点はIDE機能と費用です。
dbt Cloudはブラウザ上で利用できるIDEを提供しています。IDE機能では、dbt開発のための便利な機能が用意されていますが、一方で、一般的なIDEにあるような当たり前の機能がなかったりします。
たとえば、ファイル横断のgrep検索・置換、コードジャンプ、画面分割など。
(とはいえ、dbt CloudのIDE機能は日々進化しているため、近い将来改善されるかもしれません)

費用について、dbt Cloudで企業向けのプランであるTeamプランの現在の料金は1開発者あたり$100/月です。各種セットアップが簡略化できるという点で考えれば、安いと捉えることもできますが、開発者が増えていくとかなり費用がかさみます。

image.png
(dbt Developer Hubより引用)

ローカル開発環境での dbt-core の活用

そこで我々は dbt-core を使った開発環境を自前で作成することにしました。 dbt-core はCLIツールで、dbt Cloudと比較して機能が不足しています。しかし、dbt-core とさまざまなツールを組み合わせることでdbt Cloudに負けず劣らずな開発環境を構築することができます。

dbt Cloudと VSCode(+ dbt-core)の比較 ざっくり

dbt Cloudとdbt-coreを使ったローカル開発環境についてざっくりと比較してみましょう。

dbt Cloud vscodeローカル環境
ワークフロー機能 X(他のジョブ実行ツールで対応)
コード編集
安定性 △(いまいち安定しない)
セットアップの容易さ ◎ (ブラウザでアクセスするだけ) ×(各自がPyenvでセットアップ)

dbt Cloudの方が多くの面で優れていますが、VSCodeの方がコード編集に関する機能が優れています。(主観)

コード編集機能の比較

それでは、VSCodeのコード編集について詳しく比較してみましょう。

dbt Cloud vscodeローカル環境
git連携 △(ファイル単位の制御など細かな操作はできない)
github連携 △(GUI上でPRが作れるのみ)
コードジャンプ ×
リネージ(DAG)表示 ◎ (クリックでジャンプ可能) ◯ (dbt power userで表示可能)
コンパイル後のSQL表示
クエリのプレビュー表示 ◎(見やすい) ◯(簡易的)
ボタンでクリックでビルド △(upstreamごとビルドなど細かな制御ができない)
ファイル横断検索・置換 ×
画面分割 ×
拡張機能の追加 ×
GitHub Coplit ×
一括SQLフォーマット(SQLFluff) ×

コード編集は、dbtの固有機能意外の部分についてはVSCodeの方が便利な点が多いです。
クエリのプレビューやリネージ表示といったdbtの固有機能はやはりdbt Cloudのほうが使いやすいです。(主観)

ローカル開発環境の整備

Visual Studio Code を使用

Visual Studio Codeは多機能であり、多くの開発者にとって馴染みのあるコードエディターです。
dbt-coreはCLIツールであるため、dbtのSQLファイルやモデル定義のためのymlファイルを編集するためのツールとしてVisual Studio Codeを採用しました。

Pipenv による Python 実行環境構築

Pipenvによってdbt codeの動作環境であるPythonの実行環境を整えました。
できれば、dockerなどをつかってローカルマシンの環境を汚さない形で実現したかったのですが、
これからWizard of dbt Coreという拡張機能との相性が悪くうまく動作しなかったのであきらめました。

Visual Studio Codeに拡張機能を導入

dbt CloudにあるようなGUIでのデータプレビュー機能やビルド機能を実現し、簡単に開発するために各種拡張機能を導入しました。

dbt Power User

vscodeとdbtがシームレスに連携できるようになる拡張機能です。
dbt Power User を利用することで、GUI操作でのビルドやクエリ結果のプレビュー、定義ジャンプ、オートコンプリートなどができます。
この拡張機能はローカル環境でのdbt開発では欠かせないものだと思っています。

スクリーンショット 2023-05-11 1.32.04.png

貼り付けた画像_2023_05_20_18_30.png
図:ボタンクリックでクエリ結果プレビュー表示の例

貼り付けた画像_2023_05_20_18_32.png
図:ボタンクリックでビルドできる例
※upsteramを含めてのビルドなどはボタンでできないのでdbt runコマンドを手動で打ってます

Wizard of dbt Core

Wizard of dbt Core では、dbt向けsqlを書くときのさまざまな便利機能が提供されています。

  • クエリプレビュー
  • SQLからrefへの変換
  • エラー強調
  • 列、テーブル、参照の自動補完
  • 関数シグネチャのヘルプ

スクリーンショット 2023-05-11 1.36.58.png

SQLFluff

SQLFluffはSQLのlint, formatを行ってくれる拡張機能です。
.sqlfluffファイルを編集することでsqlのフォーマットルールを決めることができます。
dbtのフォーマットにも対応しています。

設定方法はこちらをご参照ください。

その他の Visual Studio Code の便利機能

Git

VSCodeにはgit機能が含まれています。本家dbt Cloudにもgit機能がありGUIでブランチ操作やGitコミットができますが。VSCodeのgit機能はリベースやファイル単位での操作など複雑なgit操作ができます。

GitHub

GitHub拡張機能では、GitHubのPullRequest作成や、PullRequestのCheckoutができます。
このような機能はdbt Cloudにはない機能なので便利です。

スクリーンショット_2023-05-11_2_07_15.png

GitHub Copilot

GitHub Copilotは、AIペアプログラマーによるオートコンプリートができます。
dbtプロジェクトについてもsqlやyamlの保管で便利に使うことができます。
(GitHub Copilotは、テーブル構造を理解してないため、バッチリ正しいSQLが出てくることは稀ですが、JOIN句のON句部分を自動補完してくれたり時折便利です。)

Live Share

Live Shareは共同作業のための機能です。
ペアプログラミングを行うときに試験的に使っています。

ビルドジョブ実行機能の構築

dbt Cloudにはジョブ機能があり、いつどのようなビルドをするか設定し自動でビルドを行うことができました。
dbt-coreには当然ジョブ機能がないので、別のところで実行してあげる必要があります。
弊社の場合は、GitHub ActionsとTroccoワークフローにて実行するように設定しました。

Github Actionsでbuild実行

GitHub Actionsを使い、dbt buildを行うワークフローを設定しました。
PullRequestがmainブランチにマージされたタイミングで起動し、dbt buildを行います。
この時点でdbt testが落ちた場合、slack通知されるようになっています。

以下のactionを利用しています。
https://github.com/mwhitaker/dbt-action

また、このアクションでdbt docsの生成もしていて、静的サイトとしてデプロイされ、閲覧できるようにセットアップしています。

Troccoでのbuild実行

弊社ではTroccoというETLツールを利用しており、
Troccoのワークフロー機能で、定期的にBigQueryへのデータ転送を行なっています。
Troccoにはdbt連携機能を用いることで、データパイプラインの一部としてdbtのビルドを組み込むことで、データの最新性を保つようにしました。

スクリーンショット_2023-05-11_2_19_15.png

まとめ

dbt Cloudは非常に便利なツールであり、多くの機能を提供しています。しかし、そのコストは全ての企業や開発チームが負担できるものではありません。そのため、我々は様々な工夫をしてdbtのローカル開発環境を整えることに成功しました。

この記事が、同じ問題に直面している他の開発チームにとって、何らかの参考になれば幸いです。
また、「うちのチームではこういうツールも使ってるよ! 」といったご意見があればぜひ教えていただきたいです。

23
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
10