
uvでdbt Core環境を構築し、VS Code(dbt Power User)からSnowflakeに接続してみた
かわばたです。
表題のとおり、uvでdbt Core環境を構築し、VS Code(dbt Power User)からSnowflakeに接続してみたいと思います。
Snowflakeの接続方法として、ユーザー/パスワード認証、キーペア認証、SSO認証、OAuth認証があります。
今回は、ユーザー/パスワード認証とキーペア認証を確認していきます。
【公式ドキュメント】
対象読者
- dbt Coreの環境を確認したい方
- VS Codeでdbt開発をしたい方
- Snowflakeを使用していて、dbtから接続確認したい方
事前準備
今回の環境はWindowsで行うため、WSL2をインストールし、Ubuntu環境で実行していきます。
- WSL2のインストール
【参考ブログ】
- uvのインストール
【公式ドキュメント】
uvを使用して環境を構築
uvの概要
uvは、Rustで書かれた非常に高速なPythonのパッケージインストーラーおよびプロジェクトマネージャーです。
pip、pip-tools、virtualenvといった既存のツールの多くを置き換えることを目的としており、それらよりも高速に動作します。
【公式ドキュメント】
dbtプロジェクトの作成
uvがインストール済みの状態で、WSL:Ubuntuでdbtプロジェクトを格納するフォルダを作成します。
uv initで新しい Python プロジェクトを作成します。
mkdir my_dbt_project
cd my_dbt_project
uv init

次にdbtを追加します。今回はSnowflakeへの接続なので、下記のようにしました。
uv add dbt-core dbt-snowflake

インストールが完了したら、下記で正常にインストールできているか確認します。
uv run dbt --version

これで環境の準備が整ったので、dbtプロジェクトを作成します。
uv run dbt init my_dbt_project

uv run dbt init my_dbt_projectを実行すると、以下の項目を聞かれるので押さえておきましょう。
※入力後もprofiles.ymlで設定できるので誤入力しても問題はありません。
- database(DWH)
- account
- user
- Desired authentication type
- role
- warehouse
- database
- schema
- threads
VS Code(dbt Power User)への接続
dbt Power Userの概要
dbt Power Userは、dbt Coreを利用する開発者向けのVS Code拡張機能です。dbtを使った開発、テスト、ドキュメント作成、分析といった一連のワークフローをVS Code内で支援し、開発者の生産性を大幅に向上させることを目的としています。
【公式ドキュメント】
下記のようにリネージを確認できたりします。

dbt Power Userのインストール
dbt Power Userのインストールは、VS Codeから拡張機能を直接インストールしました。
左側の拡張機能からdbtを検索すると、Power User for dbtと表記があるのでインストールを押下します。

【公式ドキュメント~インストール手順~】
WSL:Ubuntuから接続
Ubuntuで以下のコマンドを実行すると、現在のフォルダをVS Codeで開けます。
code .

下記のようにVS Codeの画面がポップアップし、WSL:Ubuntu環境になります。
dbt Coreも認識している状態であれば問題ありません。

Python Interpreterの設定がうまくいかないケース
Python Interpreterの設定がうまくいかない場合は設定で.venv/bin/pythonを直接指定するか、
.venvフォルダと同じ階層に.vscodeフォルダを作成し、settings.jsonに下記内容を記載し保存します。
{
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
}
Snowflakeへ接続
ユーザー/パスワード認証
~/.dbt/配下にprofiles.ymlが生成されているので、認証のための情報を記載します。
※生成された時点で先ほどdbtプロジェクトを作成した際に入力した情報が記載されています。
my_dbt_project:
target: dev
outputs:
dev:
type: snowflake
account: "<your_account_identifier>"
user: "<your_user>"
password: "{{ env_var('SNOWFLAKE_PASSWORD') }}"
role: "<your_role>"
database: "<your_database>"
warehouse: "<your_warehouse>"
schema: "<your_schema>"
threads: 4
client_session_keep_alive: false
ユーザー/パスワード認証の場合、パスワードは直書きせず、env_var()の使用が推奨されています。
上記入力が完了した状態で、以下をVS Codeのターミナルから実行して接続状況を確認します。
dbt debugはdbtプロジェクトの設定(プロファイル、接続情報など)や環境が正しく構成されているかを確認するためのコマンドです。
dbt debug

All checks passed!となっているので、問題なく接続できていそうですね。
Snowflake側もdbt runを実行して確認したところ、モデルが格納されていました。

キーペア認証
「秘密キー」と「公開キー」の作成
今回はSnowflakeのドキュメントに則り、OpenSSLを使用してキーペアを作成していきます。
# AES-256で暗号化された4096ビットの秘密キーを生成
$ openssl genrsa 4096 | openssl pkcs8 -topk8 -v2 aes256 -out rsa_key.p8
# この時、秘密キーを守るための「パスフレーズ」を設定します。
生成されたrsa_key.p8ファイルが秘密キーです。
# 上記で生成した秘密キーから公開キーを生成
$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
生成されたrsa_key.pubファイルが公開キーです。
これをSnowflakeに登録します。
- 公開キーをSnowflakeに登録
上記コマンドを実行したカレントディレクトリ配下にファイルが保存されているので、rsa_key.pubファイルを開きSnowflakeに登録していきます。
-----BEGIN PUBLIC KEY----- <-- この行はコピーしない
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0CvVbL5... <-- ここから
...
...
...Rk3f8pGg1GZ5oXgQIDAQAB <-- ここまでをコピー
-----END PUBLIC KEY----- <-- この行はコピーしない
公開キーを保存したら、ユーザーに割り当てます。
既存のユーザーの場合は以下です。
ALTER USER <ユーザー名> SET RSA_PUBLIC_KEY='<公開キーの中身>';
- profiles.ymlの編集
キーペア認証用にprofiles.ymlを編集します。
my_dbt_project:
target: dev
outputs:
dev:
type: snowflake
account: "<your_account_identifier>"
user: "<your_user>"
role: "<your_role>"
database: "<your_database>"
warehouse: "<your_warehouse>"
schema: "<your_schema>"
threads: 4
authenticator: "snowflake_jwt"
private_key_path: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PATH') }}"
private_key_passphrase: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PASSPHRASE') }}"
秘密鍵パスとパスフレーズを環境変数に入れます。
export SNOWFLAKE_PRIVATE_KEY_PATH="rsa_key.p8が格納されているパス"
export SNOWFLAKE_PRIVATE_KEY_PASSPHRASE="あなたが付けたパスフレーズ"
dbt debugを実行してキーペア認証が接続されていることが確認できました。

まとめ
uvを使うことで、dbt Core環境の作成〜依存関係の導入までをシンプルかつ高速に揃えられました。
また、VS Code(dbt Power User)と組み合わせることで、WSL環境でもdbt開発をスムーズに始められることが分かりました。
Snowflake接続は、まずユーザー/パスワードで素早く疎通確認し、運用を意識するならキーペア認証へ移行する流れが取りやすそうです。
今回は試していませんが、SSO認証、OAuth認証もあるのでご検討ください。
最後に
最新の内容をいち早く支援しています
弊社クラスメソッドでは、dbt Projects on Snowflakeなどの最新機能に関する情報発信を定期的に行っており、これらの最新機能に関する技術支援も可能です。
この記事が何かの参考になれば幸いです!









