Text⭐さぁ、手を動かすのだ⭐

Chapter 3: ローカル開発環境のセットアップ(Mac編)

この章では、Mac環境でdbtを使用したデータパイプライン開発のためのローカル開発環境をセットアップします。 Gitからコンテナ化された開発環境まで、一連のツールチェーンを構築していきます。

主な学習内容

  • Gitのインストール(コマンドラインディベロッパーツール)
  • Rancher Desktopのインストールと設定
  • Visual Studio Codeのインストール
  • Dev Containers拡張機能の追加
  • GitHubリポジトリのクローン
  • Devcontainerの設定ファイル作成
  • dbt開発用のDevcontainer環境構築

1. Gitのセットアップ(コマンドラインディベロッパーツール)

gitの設定をします。インストールされていない場合は、X-Codeをインストールするなどしてください。

Gitインストールとセットアップ
1 # gitコマンドが使えるか確認(MacのデフォルトでOK)
2 git --version
3
4 # 初回設定(自分の情報に置き換えてください)
5 git config --global user.name "Your Name"
6 git config --global user.email "your.email@example.com"

git --version でバージョンが表示されれば、Gitは正常にインストールされています。

2. Rancher Desktopのインストール

Rancher DesktopはDockerの代替となるコンテナランタイムです。 Docker Desktopと比較して、商用利用でも無料で使用できるのが特徴です。

インストール確認
1 # インストール後、Dockerコマンドが使用できることを確認
2 docker --version

初回起動時は、コンテナランタイムの初期化に数分かかる場合があります。
Kubernetesは今回は使用しないため、無効にしておいても問題ありません。

3. Visual Studio Codeのインストール

VSCodeは無料で使用できる高機能なコードエディタです。 豊富な拡張機能により、dbt開発に最適な環境を構築できます。

コマンドライン設定
1 # VSCodeをコマンドラインから起動できるようにする
2 # VSCode起動後、Command Palette (Cmd+Shift+P) を開き
3 # "Shell Command: Install 'code' command in PATH" を実行
4
5 # インストール後、ターミナルからVSCodeを起動できることを確認
6 code --version
7
8 # カレントディレクトリをVSCodeで開く
9 code .

コマンドラインからの起動設定により、ターミナルから直接プロジェクトフォルダを開けるようになります。

4. Dev Containers拡張機能の追加

Dev Containers拡張機能により、VSCode内でコンテナベースの開発環境を利用できるようになります。 この拡張機能により、dbtプロジェクトを一貫した環境で開発できます。

インストール確認
1 # 拡張機能がインストールされていることを確認
2 # VSCodeのCommand Palette (Cmd+Shift+P) で以下のコマンドが利用可能になる:
3
4 # Dev Containers: Open Folder in Container ...
5 # Dev Containers: Rebuild Container
6 # Dev Containers: Add Dev Container Configuration Files...

この拡張機能により、プロジェクトフォルダ内の.devcontainer設定を自動で認識し、
コンテナ内での開発環境を提供してくれます。

5. GitHubリポジトリのクローン

dbtプロジェクトを管理するためのGitHubリポジトリを作成し、ローカル環境にクローンします。 ここでは新規リポジトリの作成から既存リポジトリのクローンまでの手順を説明します。

リポジトリクローン
1 # 作業用ディレクトリを作成して移動(任意の場所に作成してください)
2 mkdir ~/dev
3 cd ~/dev
4
5 # GitHubリポジトリをクローン(URLは自分のリポジトリに置き換え)
6 git clone https://github.com/your-username/dbt-tutorial.git
7 cd dbt-tutorial
8
9 # クローンが成功したことを確認
10 ls -la
11 git status

クローンしたディレクトリが、次のステップでのdevcontainer設定の作業ディレクトリになります。

6. Devcontainer設定ファイルの作成

dbt開発用のDevcontainer環境を構築するため、設定ファイルを作成します。 これにより、チーム全体で一貫したPython・dbt環境を共有できます。

ディレクトリ作成
1 # プロジェクトディレクトリで.devcontainerフォルダを作成
2 mkdir .devcontainer
3
4 # 設定ファイルを作成
5 touch .devcontainer/devcontainer.json
6 touch .devcontainer/Dockerfile
7 touch .devcontainer/docker-compose.yml
8 touch .devcontainer/requirements.txt

まず、.devcontainer/requirements.txtを作成します:

.devcontainer/requirements.txt
1 # dbt関連パッケージ(従来版)
2 dbt-core==1.10.9
3 dbt-snowflake==1.10.0
4
5 # SQLリンター
6 sqlfluff==3.4.2
7
8 # Pythonリンター
9 flake8==7.1.1

注意: dbt-fusionはCLIとして別途Dockerfile内でインストールします これにより、dbt(従来版)とdbtf(Fusion版)の両方が使用可能になります

次に、.devcontainer/Dockerfileを作成します:

.devcontainer/Dockerfile
1 FROM python:3.12-slim-bookworm
2
3 # 作業ディレクトリを設定
4 WORKDIR /workspace
5
6 # システムパッケージを更新し、必要なツールをインストール
7 RUN apt-get update && apt-get install -y --no-install-recommends git zsh curl unzip ca-certificates && apt-get -y clean && rm -rf /var/lib/apt/lists/*
8
9 # pipを最新版にアップグレード
10 RUN pip install --upgrade pip
11
12 # requirements.txtをコピーして依存関係をインストール
13 COPY requirements.txt .
14 RUN pip install --no-cache-dir -r requirements.txt
15
16 # ユーザーを作成(セキュリティのため)
17 RUN useradd -m -s /bin/bash dbtuser
18 USER dbtuser
19
20 # Install Oh My zsh
21 RUN sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" \
22 # zsh-completions
23 && git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions \
24 # zsh-autosuggestions
25 && git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions \
26 # plugin setting
27 && sed -i -e 's/plugins=(git)/plugins=(git zsh-completions zsh-autosuggestions)/g' ~/.zshrc
28
29 # dbt-fusionのCLIをインストール
30 RUN curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update
31
32 # dbtとdbtfのエイリアスを設定する
33 RUN echo "alias dbt='/usr/local/bin/dbt'" >> ~/.zshrc \
34 && echo "alias dbtf='/home/dbtuser/.local/bin/dbt'" >> ~/.zshrc

次に、.devcontainer/docker-compose.ymlを作成します:

.devcontainer/docker-compose.yml
1 services:
2 dbt-dev:
3 build:
4 context: .
5 dockerfile: Dockerfile
6 container_name: dbt-development
7 volumes:
8 # プロジェクトディレクトリをマウント
9 - ../:/workspace:cached
10 # dbt設定ディレクトリをマウント
11 - ~/.dbt:/home/dbtuser/.dbt:cached
12 ports:
13 - "8080:8080" # dbt docs serve用
14 environment:
15 - DBT_PROFILES_DIR=/home/dbtuser/.dbt
16 env_file:
17 # .envファイルから環境変数を読み込み
18 - ~/.dbt/.env
19 # コンテナを起動状態に保つ
20 tty: true
21 stdin_open: true

最後に、.devcontainer/devcontainer.jsonを作成します:

.devcontainer/devcontainer.json
1 {
2 "name": "dbt Dev",
3 "dockerComposeFile": "docker-compose.yml",
4 "service": "dbt-dev",
5 "workspaceFolder": "/workspace",
6 "customizations": {
7 "vscode": {
8 "extensions": [
9 "ms-python.python",
10 "ms-python.flake8",
11 "dorzey.vscode-sqlfluff"
12 ],
13 "settings": {
14 "sqlfluff.workingDirectory": "${workspaceFolder}/dbt_tutorial",
15 "sqlfluff.config": "${workspaceFolder}/dbt_tutorial/.sqlfluff",
16 "sqlfluff.linter.run": "onSave",
17 "sqlfluff.experimental.format.executeInTerminal": true,
18 "editor.formatOnSave": false,
19 "python.defaultInterpreterPath": "/usr/local/bin/python",
20 "python.linting.enabled": true,
21 "python.linting.flake8Enabled": true,
22 "python.linting.pylintEnabled": false
23 }
24 }
25 },
26 "remoteUser": "dbtuser"
27 }

設定ファイル作成後、VSCodeでプロジェクトを開き直すとDevcontainer環境が利用可能になります。

7. Devcontainer環境の起動

設定ファイルを作成したら、実際にDevcontainer環境を起動してdbt開発環境を確認します。

環境確認
1 # Devcontainer環境内での動作確認
2
3 # dbt-core(従来版)の動作確認
4 dbt --version
5
6 # dbt-fusion(次世代版)の動作確認
7 dbtf --version
8
9 # SQL・Python開発支援ツールの確認
10 sqlfluff --version
11 flake8 --version
12
13 # 両方のdbtエンジンでプロジェクトの初期化を試す
14 # dbt-coreでの初期化(対話的なので情報を適切に入力していく。認証情報は後で修正するので適当でOK)
15 dbt init dbt_tutorial

Devcontainer環境により、チーム全体で一貫した開発環境を共有でき、
「私の環境では動く」問題を解決できるようになりました。

8. Snowflakeキーペア認証の完了設定

前章で作成したdbtユーザーに対して、Devcontainer環境からRSAキーペアを生成し、
セキュアなキーペア認証を設定します。

手順1: RSAキーペアの生成

RSAキーペア生成
1 # Devcontainer環境内でキーペアを生成
2 # .dbt ディレクトリに作成する
3 cd ~/.dbt
4
5 # RSA秘密鍵を生成(2048ビット、PKCS#8形式、パスフレーズなし)
6 # Snowflake公式推奨の方法
7 openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
8
9 # 公開鍵を生成
10 openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
11
12 # 秘密鍵のパーミッションを設定(セキュリティ上重要)
13 chmod 600 rsa_key.p8
14
15 # ALTER USER用に公開鍵をクレンジング(BEGIN/END行と改行を除去)
16 grep -v -E '^-----' rsa_key.pub | tr -d '\n' > rsa_key.pub.oneline
17
18 # 生成されたファイルを確認
19 ls -la rsa_key.*
20
21 # クレンジングされた公開鍵を確認(ALTER USER文用)
22 cat rsa_key.pub.oneline

手順2: 公開鍵をSnowflakeに登録

公開鍵登録とパスワード無効化
1 -- 生成した公開鍵をSnowflakeユーザーに設定
2 use role useradmin;
3
4 -- クレンジングされた公開鍵の内容をコピーして以下のSQLを実行
5
6 -- クレンジングされた公開鍵の内容を確認(そのままコピー可能)
7 -- cat ~/.dbt/rsa_key.pub.oneline の出力をそのままコピー
8
9 -- SnowflakeのWebUIで以下のSQLを実行(上記の出力を貼り付け)
10 ALTER USER dbt_user SET RSA_PUBLIC_KEY = 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA...';
11
12 -- 設定を確認
13 DESCRIBE USER dbt_user;

手順3: 公開鍵フィンガープリントの検証(任意で)

公開鍵フィンガープリント検証
1 -- Snowflake側で公開鍵フィンガープリントを確認(RSA_PUBLIC_KEY_FPパラメーターを確認)
2 DESC USER dbt_user;
3
4 -- ローカルでフィンガープリントを計算
5 -- openssl rsa -pubin -in ~/.dbt/rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
6
7 -- 両方の出力が一致することを確認してください

手順4: dbt profiles.ymlの設定

dbt profiles.yml設定
1 # dbt設定ディレクトリを確認
2 ls -la ~/.dbt
3
4 # Snowflakeのアカウント識別子を取得
5 # Snowsightのワークシートで以下のSQLを実行してアカウント識別子を確認
6 # SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
7
8 # 自分のSnowflakeのアカウント識別子を環境変数に保存
9 export SNOWFLAKE_ACCOUNT=<your_account_identifier>
10
11 # .envファイルに秘密鍵の内容をエスケープして保存
12 # 改行を
13 に変換し、シングルクォートで囲む
14 echo "SNOWFLAKE_PRIVATE_KEY='$(cat ~/.dbt/rsa_key.p8 | sed ':a;N;$!ba;s/\n/\n/g')'" > ~/.dbt/.env
15
16 # profiles.ymlファイルを作成・編集
17 cat > ~/.dbt/profiles.yml << EOF
18 dbt_tutorial:
19 target: dev
20 outputs:
21 dev:
22 type: snowflake
23 account: $SNOWFLAKE_ACCOUNT
24 user: dbt_user
25 role: dbt_role
26 warehouse: dbt_wh
27 database: dbt_tutorial
28 schema: my # 任意の文字列
29 private_key: "{{ env_var('SNOWFLAKE_PRIVATE_KEY') }}"
30 threads: 8
31 EOF
32
33 # 作成されたファイルを確認
34 cat ~/.dbt/profiles.yml
35 cat ~/.dbt/.env

ここで、devcontainer環境をリビルドします。 コマンドパレットを開いて、「Dev Containers: Rebuild Container」を実行します。

dbt接続テスト
1 # dbt接続テスト
2 cd dbt_tutorial
3
4 dbt debug
5 dbtf debug

これでSnowflake接続の準備が完了しました。セキュアなキーペア認証により、
安全で効率的なdbt開発環境が整いました。

Sponsored by

スポンサーを募集中。紹介コンテンツもご用意しますので、ご興味あればお問い合わせください。