🐘

pgTAP 実践編:繰り返しテストできる最小レポジトリ構成(Windows環境)

に公開

🧭 本記事について

この記事は、
PostgreSQLでpgTAPをWindows環境で動かす方法とSQL関数のユニットテスト実践
の続編です。

「毎回SQLを流してテストするのが面倒」
「pgTAPをチームで統一的に使いたい」

そんな課題を解決するために、
最小構成で繰り返し実行できるテンプレートリポジトリを紹介します。


🚀 テンプレートリポジトリ

📦 GitHub リポジトリ
➡️ mono-tec/pgtap-windows-template

Windows 環境で pgTAP を簡単に導入・テストできるテンプレートです。
Linux 環境で一度ビルドした成果物を Windows に配置して利用する方式を採用しています。


📂 フォルダ構成

ROOT:.
│  .gitignore
│  README.md
│
├─build
│  │  .keep
│  │
│  └─1.3.5
│          install_pgtap_windows.bat
│          pgtap--1.3.5.sql
│          pgtap.control
│          README.md
│          uninstall_pgtap_windows.bat
│
└─example
    │  init.bat
    │
    ├─logs
    │  └─YYYYMMDD
    │          pgtap_example_HHMMSS.log
    │
    ├─sql
    │      .keep
    │      create_testdb.sql
    │      drop_testdb.sql
    │      enable_pgtap.sql
    │      test_sample.sql
    │
    ├─template
    │      create_testdb.sql.tmpl
    │      drop_testdb.sql.tmpl
    │      enable_pgtap.sql.tmpl
    │      run_tests.bat.tmpl
    │      test_all.bat.tmpl
    │      test_sample.sql.tmpl
    │
    └─tools
            InnoReplacer.exe

💡 コンセプト

  • 1コマンドでテスト環境を再現
    • init.bat によりテンプレートファイルを展開し、接続設定を自動反映
  • UTF-8(SQL)× Shift-JIS(BAT)
    • Windows互換を意識した文字コード管理
  • ログ自動生成
    • logs\YYYYMMDD 以下にテスト結果を保存

🧩 実行ステップ

① 初期セットアップ

example\init.bat

実行するとプロンプトで PostgreSQL 接続情報を入力し、
テンプレートから test_all.bat / run_tests.bat などを自動生成します。
内部では InnoReplacer.exe を利用して、文字コードを保持したまま変数を置換しています。


② テスト実行

example\test_all.bat

実行内容:

  1. テスト用DBを作成
  2. pgTAP拡張を有効化
  3. サンプルテストを実行
  4. テストDBを削除してクリーンアップ

③ 実行結果(ログ)

test_sample.sql の実行結果です。
example\logs\<日付>\pgtap_example_<時刻>.log に結果が出力します。

ok 1 - truth holds
ok 2 - addition works
ok 3 - multiplication check
1..3

このサンプルでは、算術計算(足し算、掛け算)をしており、テーブル操作は行っておりません。

実際のテストでは、test_sample.sql にテーブル登録や関数呼び出しのような操作を追加し、
拡張することができます。


💡 内部で使われている技術

🔸 InnoReplacer.exe

テンプレート文字列置換ツール。 (自作ツール)
初期セットアップ時に、Shift-JIS/UTF-8 の文字コードを保持したまま文字列置換を行います。

本ツールは、インストーラなどの構成スクリプト展開を自動化することを目的に開発しました。
文字コードを維持したまま置換が必要なケースで特に有効です。


🧱 レポジトリ構成の背景

Windows環境では、Linuxのように make install ができず、
「ビルド済みファイルをどこからコピーすれば良いか」が
分かりづらいという課題がありました。

このテンプレートは、その導入の手間を省くことを目的に設計されています。

  1. Linux/Docker 環境で一度だけビルド
    pgtap.control / pgtap--<ver>.sql が生成されます。
  2. 生成物を build/<version>/ に配置するだけ
    → Windows 側ではバッチ実行で自動セットアップ。
  3. テンプレートSQLを展開してテスト実行
    init.bat 実行後すぐに pgTAP の動作確認が可能。

これにより、Windows上で
「pgTAP の動作確認 → テスト追加 → テスト結果確認」をスムーズに行えます。


⚙️ 注意事項

  • PostgreSQL のバージョンによって share\extension のパスが異なります。
    必要に応じて build\1.3.5\install_pgtap_windows.bat 内の PGROOT を修正してください。

  • example\sql 以下のファイルはテンプレート展開後に自動生成します。。
    自作関数やストアドプロシージャのテストも、この構成に追加するだけで可能です。
    ただし、展開対象は .sql.tmpl 拡張子のファイルのみです。


🪄 教育・学習用途にも

このテンプレートは、自分で試しながら改善する学習サイクル(PDCA) に適しています。

  • まずはテンプレートを動かして結果を確認
  • テストSQLを改造して期待値やロジックを学習
  • チームで共通環境として共有可能

「知識を環境ごと再現する」ことにフォーカスした構成です。


📚 pgTAP をさらに知りたい方へ

pgTAP の情報はこちらが参考になります:
🔗 pgTAP.org

このサイトでは、 pgTAP の概要、関数リスト、使い方の例などが整理されています。
このテンプレートで基本を体験したあとに参照すると理解が深まります。

また、ChatGPT などの AI ツールを活用して、
テストコードを生成・改善していくのもおすすめです。

自分の手で試し、動かしながら理解を深めることで、自然とテスト設計の基礎が身につきます。


⚖️ ライセンス

  • pgTAP
    PostgreSQL License(BSD系)で配布。
    本テンプレートはその利用を補助する目的で構成されています。

  • InnoReplacer
    © 2025 mono-tec — MIT License


✍️ まとめ

  • Windows環境で pgTAP を即利用可能
  • init.bat により1分でテスト環境を再構築
  • 教育・検証・継続的な改善に向くテンプレート構成

Discussion