dbt Projects on SnowflakeでGitHubと連携した開発を試してみた

dbt Projects on SnowflakeでGitHubと連携した開発を試してみた

Clock Icon2025.07.02

さがらです。

先日、Snowflakeアカウント内でdbtの開発・実行ができるdbt Projects on Snowflakeがリリースされました。私も1つ試してみた記事を書いています。

https://docs.snowflake.com/en/release-notes/2025/other/2025-06-27-dbt-projects-on-snowflake

https://dev.classmethod.jp/articles/snowflake-pupr-dbt-projects/

このdbt Projects on Snowflakeにおいて、GitHubを連携した場合にどのような開発プロセスとなるのかを試してみたので、その内容をまとめてみます。

やること

下図のdbt Cloudで動作させていたプライベートリポジトリをWorkspace上にフォークして、一般的なGit操作を行ってみます。Snowflake上でデータベースなどは事前に作成済とします。

今回は元々dbt Cloudで開発していたリポジトリを使用していますが、2025/7/2時点ではドキュメントにもあるように、空のGitリポジトリには接続できず、何かしらのコミットをしたリポジトリでないと連携ができないため、ご注意ください。

2025-07-02_08h32_19

GitHubとの統合のための手順などは、以下の公式ドキュメントを参考に行っていきます。

https://docs.snowflake.com/en/user-guide/data-engineering/dbt-projects-on-snowflake-getting-started-tutorial

前提条件:セカンダリロールの有効化

dbt Projects on Snowflakeが動作するWorkspaceではセカンダリロールの有効化が必要です。

対象のユーザにおいて、以下のクエリを実行して有効化しておきます。

alter user my_user set default_secondary_roles = ('all');

GitHubでpersonal access tokenを取得しSnowflakeでsecretとして登録

GitHubのプライベートリポジトリと接続するため、GitHubで取得したpersonal access tokenをsecretとして登録します。

GitHubでpersonal access tokenを取得

GitHubの右上の自分のアカウントをクリックし、SettingsDeveloper settingsPersonal access tokens内のFine-grained tokensを押します。

2025-07-02_09h09_40

2025-07-02_09h10_06

2025-07-02_09h10_59

右上のGenerate new tokenを押します。

2025-07-02_09h12_11

設定項目について、Repository accessまでは任意の内容を入力してください。下図は私の例です。

2025-07-02_09h21_54

設定項目のPermissionsについては、Repository permissionsで以下の項目を設定しました。(これで事足りるかは正直私もわかっていないです…)

  • Read and write
    • Actions
    • Contents
    • Pull requests
    • Issues
    • Workflows
  • Read-only
    • Metadata

このPermissionsの設定を行うと、下図のように表示されるはずです。問題なければ、Generate tokenを押します。

2025-07-02_09h32_00

すると下図のように発行したトークンが表示されますので、コピーして控えておきます。

2025-07-02_09h35_05

Snowflakeでsecretとして登録

続いて、取得したGitHubのpersonal access tokenをSnowflakeでsecretとして登録します。

use role sagara_admin_role;
use database sagara_security_db;

create schema secrets_list;
use schema secrets_list;

create secret sagara_personal_github
    type = password
    username ='your-gh-username'
    password = 'YOUR_PERSONAL_ACCESS_TOKEN';

登録したsecretを用いてGitHubへのAPI Integrationを作成

次に、登録したsecretを用いてGitHubへのAPI Integrationを作成します。

use role accountadmin;

create or replace api integration sagara_personal_github_integration
  api_provider = git_https_api
  api_allowed_prefixes = ('https://github.com/')
  allowed_authentication_secrets = (sagara_security_db.secrets_list.sagara_personal_github)
  enabled = true;

-- dbtで使用するロールに権限付与
grant usage on integration sagara_personal_github_integration to role sagara_admin_role;

dbtやGitHubからパッケージを取得するためのNetwork RuleとExternal Access Integrationの作成

dbtでは、外部のパッケージを利用するためにdbt Package hubやGitHubにアクセスする必要があります。

そのために、Network RuleとExternal Access Integrationを作成します。

-- Network Ruleの作成
use role sagara_admin_role;
use database sagara_security_db;

create schema network_rules;
use schema network_rules;

create or replace network rule sagara_dbt_network_rule
  mode = egress
  type = host_port
  -- minimal url allowlist that is required for dbt deps
  value_list = (
    'hub.getdbt.com',
    'codeload.github.com'
    );

-- External Access Integrationの作成

use role accountadmin;

create or replace external access integration sagara_dbt_ext_access
  allowed_network_rules = (sagara_dbt_network_rule)
  enabled = true;

-- dbtで使用するロールに権限付与
grant usage on integration sagara_dbt_ext_access to role sagara_admin_role;

GitHubのプライベートリポジトリをWorkspace上にフォーク

ここまでの内容で事前準備を終えたので、GitHubのプライベートリポジトリをWorkspace上にフォークします。

Workspaceを立ち上げて、一番左上のWorkspace名をクリックし、From Git repositoryを押します。

2025-07-02_10h45_46

設定用の画面が立ち上がるため、以下の内容に沿って記入し、Createを押します。

  • Repository URL
    • GitHub上で確認できる、対象リポジトリのHTTPS URLを記入
    • 例:https://github.com/my-github-account/getting-started-with-dbt-on-snowflake.git
  • API integration
    • 先ほど作成したAPI integrationを指定
  • Credentials secret
    • 先ほど作成したSecretを指定

2025-07-02_10h59_29

すると、下図のように対象のリポジトリがWorkspaceに連携できました!

2025-07-02_11h04_27

おまけ:dbt Cloudで稼働させていたリポジトリをdbt Projects on Snowflakeで動作させるために、profiles.ymlを追加

これはおまけですが、今回dbt Cloudで稼働させていたリポジトリとなるため、dbt Coreが動作するdbt Projects on Snowflakeではこのままの形では動作しません。

そのため、リポジトリのルート階層にprofiles.ymlを作成します。

まず、新しいブランチを作成します。

2025-07-02_11h22_13

2025-07-02_11h22_52

次に、dbt_project.ymlを開き、profileの値を確認します。これをキーとしてprofiles.ymlを作成していきます。

2025-07-02_11h15_50

この上で、下記のようにprofiles.ymlを作成します。

dbt Cloudでいうと、devDevelopment EnvironmentprodProduction Environmentに該当します。devprodは、dbt Cloudでも設定できるtarget nameとなります。普段ご利用のtarget nameに合わせて設定しましょう。

snowflake-sagara:
  target: dev
  outputs:
    dev:
      type: snowflake
      role: SAGARA_ADMIN_ROLE
      warehouse: SAGARA_DBT_DEV_WH
      database: SAGARA_DBT_DEMO_DB
      schema: DBT_SSAGARA
      account: ''
      user: ''
    prod:
      type: snowflake
      role: SAGARA_ADMIN_ROLE
      warehouse: SAGARA_DBT_DEV_WH
      database: SAGARA_DBT_DEMO_DB
      schema: PRODUCTION
      account: ''
      user: ''

ここまでの設定を行うと、profileを選択できるようになるため適当にCompileを実行してみると、無事に成功しました。

2025-07-02_11h20_44

新しいモデルを開発してプルリクエスト~マージを行う

この状態で、新しいモデルを開発してプルリクエスト~マージを行ってみます。

ブランチ作成

まず、新しいブランチを切ります。(先ほどの「おまけ」章でブランチを切っている場合はそのブランチをそのまま利用できますので、不要です。)

2025-07-02_11h22_13

2025-07-02_11h22_52

新規のモデル(sqlファイル)の開発

ここでは簡易的に、既存のmartsフォルダの.sqlファイルの名前だけを変えて作成します。

2025-07-02_11h32_20

リネージを確認するため、一度Compileを実行してみます。すると、DAGタブに下図のようにリネージが表示されました。

2025-07-02_11h35_46

次に、Profileはdevのままで、Buildをしてみます。すると、devの出力先スキーマとして設定したDBT_SSAGARAにテーブル・ビューが作られました。

2025-07-02_11h37_27

2025-07-02_11h38_42

Mainブランチへの反映

これで新しいテーブルを作るためのsqlファイルが無事にできたので、Mainブランチに反映させていきます。

Workspaceの左上のChangesを押して、Pushを押します。

2025-07-02_11h41_17

任意のコミットメッセージを入れて、Pushを押します。これでGitHub上のリポジトリに、作成したブランチが反映されました。

2025-07-02_11h41_56

次に、GitHubでMainブランチに対してプルリクエストを発行します。

GitHubのリポジトリへのリンクですが、Workspaceの下図の箇所からもリンク可能です。

2025-07-02_11h46_17

GitHubに入ったら、後は通常のプルリクエスト~マージの流れを行います。(余談ですが、dbt CloudでCI Jobsを設定していると、dbt CloudからのプルリクエストでなくてもCI Jobsが実行されました。)

2025-07-02_11h47_04

2025-07-02_11h47_30

2025-07-02_11h49_01

この後、Workspaceの画面に戻り、mainブランチに切り替えると、先ほどブランチを切って開発したsqlファイルが無事に反映されていました!

2025-07-02_11h50_03

2025-07-02_11h51_41

WorkspaceからSnowflakeアカウントへdbt Projectsをデプロイする

dbt Projects on Snowflakeでは、対象のdbt Projectsをタスクで実行するために、Snowflakeアカウントにデプロイする必要があります。

右上のConnectからDeploy dbt projectを押します。

2025-07-02_11h55_04

任意のデータベースとスキーマを指定し、作られるdbt projectオブジェクトの名前も指定して、Deployを押します。

2025-07-02_11h58_33

すると、下図のように表示されます。

2025-07-02_11h59_11

この後に対象のデータベース・スキーマを見ると、dbt projectオブジェクトが作成されていることがわかります。

2025-07-02_11h59_58

このdbt projectsオブジェクトを使うことで、以下のようなタスクを定義することで、タスクからdbtを実行することが可能です。(以下のクエリは公式Docから引用)

create or replace task tasty_bytes_dbt_db.dev.run_prepped_data_dbt
      warehouse=tasty_bytes_dbt_wh
      schedule ='using cron 1 * * * * america/los_angeles'
    as
  execute dbt project tasty_bytes_dbt_project args='run --select customer_loyalty_metrics --target prod';

おまけ:新規開発後、再度デプロイする方法

実際には、一度dbt projectsオブジェクトのデプロイを行っていて、その後に追加で開発して再度dbt projectsオブジェクトに最新の内容を反映させたい、というケースが多いと思います。

その場合には、Workspaceで右上のデプロイを行ったメニューから、Redeploy dbt projectを押して再度デプロイを行えばOKです!

2025-07-02_12h10_42

2025-07-02_12h11_05

最後に

dbt Projects on Snowflakeにおいて、GitHubを連携した場合にどのような開発プロセスとなるのかを試してみたので、その内容をまとめました。

GitHubの連携自体もそこまで大変ではなく、ブランチを切る操作やGitHubへのプッシュなどもGUIベースで行えるので、非常に良いdbtの開発体験だと思いました!ぜひ、お試しください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.