0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dbt + PostgreSQL on Docker 開発環境セットアップ手順

Last updated at Posted at 2025-04-15

0. この記事は何か

いろいろあって、Dockerとdbtを評価してみたくなりまして。

ということで、これまでExcelマクロ等で行っていた、担当システムのインシデント分析を、ざっくりdbt on Dockerに移そうとしています。

本記事は、その開発環境(評価環境)のセットアップ手順で、一般に公開する意味があるのか微妙なのですが、まあ、誰かの参考になればと。

内部のツールでしかないので、規模は小さく品質も適当ですが、一応、実務で使うことを前提に作っているモノなので、その辺に転がっているサンプルよりは、参考になることもあるんじゃないかな、あればいいな、と思いまして。

構成は、ローカルWindowsのWSL上にDockerの開発コンテナを立てる形で、 DBはPostgreSQLを使用しています。図にすると以下のような感じ。

image.png

詳しくは後述しますが、Visual Studio Codeのリモートウィンドウの機能を利用して、「WSLへの接続」⇒「コンテナーで再度開く」でアプリ用コンテナに接続することで、開発作業が行えるようになります。

あまり詳しくない担当者も想定しているので、まっさらな状態から状態からの手順を、かなり細かく記載しています。識者にとっては冗長だと思うので、そのあたりは適当にすっ飛ばしてください。

1. WSL2の導入

WindowsにWSLでLinux乗っけるために、まずWSL2を導入します。

ホストOS(Windows)のPowershellで以下を実行します。このコマンド一発で、機能の有効化だけでなく、Linux OS(Ubuntu)イメージの展開まで行われます。

wsl --install

あと、好みに応じてですが、以下のページの「Ubuntuの配置先を変更」も実施してください。

2. VPN(GlobalProtect)対応の実施

GlobalProtectのSIG(Secure Internet Gateway)環境内で開発環境を使用する場合、以下の作業を実施してください。

3. Dockerのセットアップ

3.1. Dockerセットアップ

WSL上のLinux(Ubuntu)にDockerをセットアップします。
以下の記事の「Dockerエンジン(Linux側)のインストール」を実施してください。

3.2. ユーザ権限の調整

WSL上のLinuxのデフォルトユーザにDocker関連の操作の権限を付与します。
※以降、WSL上のLinuxのディストリビューション名が「Ubuntu」であることを前提に手順を記載します。

Ubuntuで以下を実行してください。
※「rabut」の部分をWSLのデフォルトユーザ名に置き換えて実施してください。

sudo usermod -aG docker rabut

4. Visual Studio Code のセットアップ

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

ホストのWindowsに、とりあえず、Visual Studio Codeをインストールします。
やり方がわからなければ、以下のページなどを参考に。

4.2. Visual Studio Codeへのアドイン追加

Visual Studio Codeにアドインをインストールします。
ひとつ前の「Japanese Language Pack」のインストールと同じ手順で実行できます。

WSL
image.png

Dev Containers
image.png

5. 資産の展開とビルド

資産を展開して、開発環境を起動・接続します。

やっていることの全体像は以下の通りです。この図を見ながら手順を追ってもらえると、何をやっているのかが追いやすくなると思います。
image.png

5.1. 資産の展開

まず、Visual Studio Codeを起動して、左下の「リモートウィンドウを開きます」ボタンをクリックし、表示された選択肢から「WSLへの接続」を選択します。

image.png

左下のステータスが「WSL: Ubuntu」に変わったことを確認します。
image.png

Ctrl + Shift + P でコマンドパレットを開き、「git clone」を入力します。選択肢が表示されるので「Git Clone」をクリックします。
image.png

以下のURLを入力し、表示された「リポジトリのURL」をクリックします。
https://github.com/rabut001/qatools.git」
image.png

リポジトリの展開先の選択画面欄が表示されるので、適当なディレクトリを選択してください。一応、初期値(ユーザのホームディレクトリ)でも大きな問題はないかと思います。
※ここで指定したリポジトリの展開先は記憶しておいてください。後に再度環境を起動するとき必要になります。
image.png

「クローンしたリポジトリを開きますか?」と聞かれるので「開く」をクリックします。
image.png

作成者を信頼しますか?と表示されるので、「はい。作成者を信頼します」をクリックします。
image.png

「コンテナーで開発するフォルダをもう一度開きます」と表示されるので、「コンテナーで再度開く」をクリックします。
image.png

開発コンテナーに接続した状態で環境が起動しますので、以下のフォルダに分析対象のシステムに対応した各ファイルを配置してください。とりあえずは直下の「sample」フォルダから全ファイルをコピーしてくる形でよいです。
/workspace/app/conf
/workspace/app/seeds

image.png

5.2. ビルド

まず「Ctrl + @」でターミナルを起動し、以下のコマンドを実行しseedを作成します。
※このコマンドはインシデント管理システムと接続できる状態でないとエラーになるため、一般の方は実行しなくて大丈夫です。

python /workspace/app/scripts/generate_seeds_from_qaweb.py

image.png

同じくターミナルから、以下のコマンドを実行します。

cd /workspace/app
dbt build

image.png

処理が実行され「Completed Successfully」が表示されればOKです。
image.png

dbtの開発環境のセットアップとしては、ここまで実施すれば完了です。

6. Visual Studio Codeの接続先切り替えについて

ここまで手順通りに実施した場合、次回Visual Studio Codeを起動すると、アプリ開発用コンテナに接続した状態で画面が起動します。

しかし、gitやコンテナ系の作業はUbuntu側で行う必要があり、また、単純にリモートウィンドウを切断したい場合もあると思います。

ということで、以下、リモートウィンドウの切断/切り替え手順を説明します。

image.png

  • リモートウィンドウの切断
    画面左下の「リモートホスト」⇒「リモート接続を終了する」
    image.png
     

  • WSL(Ubuntu)への接続
    リモートウィンドウが切断されている状態で、画面左下の「リモートホスト」⇒「WSLへ接続」
    image.png

    「フォルダを開く」⇒ 「5. 資産の展開と起動で指定したリポジトリの展開先 + /qatools」を入力し「OK」
    image.png

    ※アプリ開発コンテナに接続した状態であれば、「リモートホスト」⇒ 「WSLでフォルダーをもう一度開く」でも行けます。
     

  • アプリ開発用コンテナ(qatools)への接続
    WSL(Ubuntu)へ接続した状態にした後、「リモートホスト」⇒「コンテナーで再度開く」
    image.png

7. PostgreSQL クライアント環境の準備

ホストのWindows上にPostgreSQLのクライアントとレポート(Excel)の実行環境を準備します。

本章は、DBの中身を確認したり1、報告用のレポート(Excel)を出力するため手順です。dbtの評価のみが目的なら、実施は不要です。

7.1. pgAdminとODBCドライバのインストール

以下のページに従って、Windows側にpgAdminとODBCドライバをインストールしてください。

7.2. pgAdminの構成

pgAdminに接続情報をセットアップします。

本章の作業は開発コンテナを起動した状態※で行ってください。
※Visual Studio Codeでアプリ開発用コンテナに接続した状態(画面の左下に「開発コンテナー:qatools」と表示された状態)
image.png

スタートからpgadmin等で検索し「pgAdmin 4」を起動(クリック)します。
image.png

pgAdminが起動するので、「Servers」⇒「Register」⇒「Server」をクリックします。
image.png

Register - Server画面が起動するので、以下を入力して「Save」をクリックします。
Generalタブ
image.png

Connectionタブ (※Passwordは「6v@lu@t!0n」)
image.png

Server配下に「qatools」が追加され、中身が見えるようになります。
image.png

7.3. ODBC(DSN)の構成

ODBCの接続情報(DSN)をセットアップします。

スタートから「odbcad32」等で検索し「ODBCデータソース(64ビット)」を起動(クリック)します。
image.png

起動した画面で「システムDSN」タブを選択し「追加」をクリックします。
image.png

「PostgreSQL Unicode(x64)」を選択し「完了」をクリックします。
image.png

PosgreSQL Unicode ODBCセットアップ画面が起動するので、以下を入力 (※パスワードは「6v@lu@t!0n」)した後、「データソース」をクリックします。Portも指定する点に注意してください。
image.png

高度な設定画面が起動するので「Declare~Fetchを使用する」にチェックを入れ「OK」をクリックします。
image.png

元の画面に戻るので「保存」をクリックします。
image.png

7.4. サンプルレポートの実行

作成したデータをサンプルレポート(Excel)に取り込んでみます。

本章の作業は開発コンテナを起動した状態※で行ってください。
※Visual Studio Codeでアプリ開発用コンテナに接続した状態(画面の左下に「開発コンテナー:qatools」と表示された状態)
image.png

以下のExcelファイルをWindows側にコピーして起動します。
/app/reports/sample/sample_report.xlsx

データ⇒すべて更新 を実行します。データがエラー無く取り込めればOKです。
image.png

※初回はID/パスワードの入力を求められるかもしれないので、その場合はqatools/6v@lu@t!0nを入力してください。

※データの取り込みは完了しても特に通知はありません。少々分かりにくいですが、取込みの実行中、ステータスバーに「データを取得しています」等のメッセージが表示されますので、これが止まればデータの取り込みが完了したと考えていただいてよいです。
image.png

8. データの削除設定

諸般の事情により、インシデント管理システムのデータをローカルに残したくない場合、以下の手順を実施することで、PCのシャットダウン(正確にはログオフ)時に、自動でデータが削除されるよう設定できます。

※サンプルデータしか使わない場合、本章は実施不要です。

8.1. 削除バッチの作成

以下の内容を、Windows側の任意のフォルダにバッチファイルとして格納してください。
例えば、「D:\wsl\wsl001\qatools_data_remove.bat」など。

@echo off
setlocal

rem set log file name
set FILE_PREFIX=%~n0
set FOLDER_NAME=%~dp0
set LOG_FILE=%FOLDER_NAME%%FILE_PREFIX%.log

rem set base directory
set BASE_DIR=/home/rabut

rem log date time
echo ------------------------------------- >> %LOG_FILE%
echo %DATE% %TIME% >> %LOG_FILE%

rem remove files
echo. >> %LOG_FILE%
echo remove files >> %LOG_FILE%
wsl rm -f %BASE_DIR%/qatools/app/seeds/seed_qaweb__incident_comments.csv  >> %LOG_FILE%  2>>&1
wsl rm -f %BASE_DIR%/qatools/app/seeds/seed_qaweb__incidents.csv >> %LOG_FILE%  2>>&1

rem remove database contents
echo. >> %LOG_FILE%
echo remove database contents >> %LOG_FILE%
wsl docker container stop qatools_postgres >> %LOG_FILE%  2>>&1
wsl docker container rm qatools_postgres >> %LOG_FILE%  2>>&1
wsl docker volume rm devcontainer_qatools_data_volume >> %LOG_FILE%  2>>&1

rem shutdown wsl
echo. >> %LOG_FILE%
echo shudown wsl >> %LOG_FILE%
wsl --shutdown  >> %LOG_FILE%  2>>&1
echo. >> %LOG_FILE%

endlocal

その上で、以下の部分を「5. 資産の展開と起動で指定したリポジトリの展開先」で指定したディレクトリに変更してください。

rem set base directory
set BASE_DIR=/home/rabut

8.2. ログオフスクリプトへの登録

作成したバッチをログオフスクリプトに登録します。

コマンドプロンプトから「gpedit.msc」を実行しローカルグループポリシーエディターを起動、「ユーザーの構成」⇒「Windowsの設定」⇒「スクリプト(ログオン/ログオフ)」を選択し、 「ログオフ」をダブルクリックします。

image.png

「ログオフのプロパティ」が起動するので、「スクリプト」タブから「追加」をクリックします。
image.png

「スクリプト名」に作成した削除バッチを入力し、「OK」をクリックします。
image.png

戻った画面で「OK」をクリックします。
image.png

8.3. 動作確認

まず、以下の二点を確認します。
※削除対象ファイルやDBの中身がない場合は、「5.2. ビルド」を実行して作成してください。

  • 削除対象ファイルが存在すること
    Visual Studio Codeからアプリ開発用コンテナに接続し、以下のファイルが存在していることを確認。

    /workspace/app/seeds/seed_qaweb__incident_comments.csv
    /workspace/app/seeds/seed_qaweb__incidents.csv

    image.png
     

  • DBの中身が存在すること
    pgAdminからデータベース「dev」の中に、テーブルが作成されていることを確認してください。
    image.png

次にPCを再起動して、削除対象ファイルやDBの中身が消えていることを確認してください。

  • 削除対象ファイルが消えていること
    image.png
     

  • DBの中身が消えていること
    image.png

なお、これらのファイルやDBの中身は「5.2. ビルド」を実行することで再作成できます。

  1. ちなみにDBの中身の確認(単発のSQLの実行など)は、Visual Studio Codeに何かのアドインを入れてやりたかったのですが、dbtのmodelの拡張子が.sqlで、dbt Power Userが干渉してしまうので、pgAdminを外だしでWindows側に導入しています。このやり方は不格好で気に入らないのですが、どう対応するのが一般的なのですかね。調べた範囲では、変化球ですがこのページのpgAdmin用のコンテナを追加する方法はアリかなとは思ったのですが。開発環境をコンテナに閉じ込めるという観点ではイケているので。ただ今回は、端末のリソース的に専用コンテナの追加が微妙だったため、採用できませんでした。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?