2025-01-13

VSCodeのDevContainerでdbtの実行環境を作ろう

🏷️
  • VSCode
  • dbt
  • Docker

こんにちは、Kです。

普段エディタは何を使われてますか?

自分は元々vimを使っていたんですが、今はVSCodeを使っています。

今回はVSCodeのDevContainer拡張機能を使って、dbtの実行環境を作る手順について紹介していこうと思います。

DevContainerって何?

DevContainerはVSCodeの環境機能の1つで、Dockerイメージをもとにコンテナを立ち上げ、VSCodeの画面上でコンテナの中に入り作業を行えるものになります。

複数人で開発を行う、かつ全員VSCodeを使っている状況であれば、DevContainerを使うことで簡単に共通の開発環境を立ち上げることができます。

前提

以下のディレクトリ構成を想定しています。

├.devcontainer/
│  └devcontainer.json
│
├your_dbt_project_name/
│  ├models/
│  ├profiles.yml
│  └dbt_project.yml
│
├Dockerfile
└requirements.txt

手順

まずはこちらから拡張機能をインストールしてください。

続いていくつか必要なファイルを用意します。

# requirements.txt

dbt-core==1.9.1
dbt-bigquery==1.8.2
dbt-osmosis==1.1.7

# Dockerfile

ARG PY_VERSION=3.11

FROM python:${PY_VERSION}-slim

ENV DEPENDENCIES="git curl apt-transport-https ca-certificates gnupg"

RUN apt-get update && \
    apt-get install -y --no-install-recommends ${DEPENDENCIES} && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
    apt-get update && \
    apt-get install -y --no-install-recommends google-cloud-sdk && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN python -m pip install --no-cache-dir -r requirements.txt

COPY your_dbt_project_name ./your_dbt_project_name
RUN dbt deps --project-dir=your_dbt_project_name

# .devcontainer/devcontainer.json

{
  "name": "Dev Container",
  "build": {
    "dockerfile": "../Dockerfile"
  },
  "features": {
    "ghcr.io/devcontainers/features/sshd:1": {}
  },
  "postCreateCommand": "mkdir -p ~/.ssh && chmod 700 ~/.ssh",
  "customizations": {
    "vscode": {
      "settings": {
        "git.enabled": true,
        "git.ssh.enable": true,
        "files.insertFinalNewline": true,
        "dbt.dbtPythonPathOverride": "/usr/local/bin/python",
                "files.associations": {
                    "*.sql": "jinja-sql"
                }
      }
    }
  },
  "containerEnv": {
    "DBT_PROJECT_DIR": "/workspaces/your_repository_name/your_dbt_project_name",
    "DBT_PROFILES_DIR": "/workspaces/your_repository_name/your_dbt_project_name"
  },
  "mounts": [
    "source=${localEnv:HOME}/.config/gcloud,target=/root/.config/gcloud,type=bind"
  ]
}

ここまでできたら Cmd + Shift + pでコマンドパレットを開き、Reopen in Container(コンテナで再度開く)を選択して、コンテナの中に入ります。

無事に入れたら、dbt -vでdbtがインストールされているかを確認しましょう。

以上でDevContainerを使ったdbtの実行環境の構築手順は終わりです。

devcontainer内でGitHubにSSHで接続する方法

ローカルでssh-agentを起動させ秘密鍵を登録しておくことで、devcontainer内でも認証情報を呼び出しSSH接続を可能にしてくれます。

まずは、公開鍵と秘密鍵を生成します。

$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa

続いて、ssh-agentを起動させ、秘密鍵を登録します。

$ ssh-agent -s
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l

最後に、公開鍵をGitHubに登録します。

ここまでできたら、コンテナ内に接続しgit pullできるか確認してみましょう。