2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00
2026-07-12 14:54:50 +08:00

COBOL テストデータ生成 Agent

COBOL プログラムの詳細設計書・COPYBOOK・ソースコードを解析し、DeepSeek v4 Flash API を使ってテストデータ(JSON/SQL)を自動生成する Python ツール。

クイックスタート

# インストール
pip install -r requirements.txt

# テスト実行
python -m pytest tests/ -v

# 単一プログラムのテストデータ生成
python main.py \
    --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN04MAT.md" \
    --source "D:\cobol-tna-system\src\ZAN04MAT.cbl" \
    --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" \
    --cpy "D:\cobol-tna-system\cpy" \
    --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" \
    --output "output"
引数 必須 説明
--design 詳細設計書 .md のパス
--source COBOL ソース .cbl のパス
--file-db-md ファイル/DB 構造定義 .md のパス
--cpy COPYBOOK 格納ディレクトリ
--db-md DB 定義書 .md のパス
--output 出力ディレクトリ(デフォルト: output
--api-key DeepSeek API Key
--model モデル名(デフォルト: deepseek-v4-flash
--rules ルール格納ディレクトリ(デフォルト: rules

ライブラリとしての利用

from agent import generate

result = generate(
    design_md="詳細設計書_ZAN04MAT.md",
    source_cbl="src/ZAN04MAT.cbl",
    file_db_md="COPY句定義書.md",
    cpy_dir="cpy/",
    db_md="DB定義書.md",
    output_dir="output/"
)

# result = {"output_files": {...}, "program_id": "ZAN04MAT", "groups": 5, "input_type": "file"}

プロジェクト構造

├── agent/                      # コアモジュール
│   ├── __init__.py             # generate() エントリポイント + 全エクスポート
│   ├── models.py               # データクラス定義(ProgramMeta, FileInfo, CopyField 等)
│   ├── markdown_utils.py       # Markdown テーブル解析ユーティリティ
│   ├── input_parser.py         # 設計書・COPYBOOK・DB定義の解析
│   ├── rule_loader.py          # PGMパターン→ルールファイルのマッチング
│   ├── prompt_builder.py       # DeepSeek API プロンプト組立
│   ├── api_client.py           # API 呼出 + 3回リトライ + JSON パース
│   └── output_writer.py        # JSON / SQL ファイル出力
├── rules/                      # データ生成ルール(.md ファイル)
│   ├── pgm_pattern/            # PGMパターン別ルール
│   │   ├── マッチング(1-1).md
│   │   ├── マッチング(1-N).md
│   │   ├── マッチング(N-1).md
│   │   ├── DB更新.md
│   │   ├── 振り分け.md
│   │   ├── 項目チェック.md
│   │   ├── レイアウト編集のみ(GETPUT).md
│   │   ├── キーブレイク(集計).md
│   │   ├── キーブレイク(集約).md
│   │   ├── キーブレイク(集計、集約).md
│   │   ├── SELECT処理.md
│   │   ├── MERGE.md
│   │   ├── 50分割.md
│   │   ├── CSV→FB変換.md
│   │   └── GETPUT(編集出力).md
│   └── special_feature/        # 特殊機能ルール
│       └── 条件分支.md
├── layout/                     # ドキュメントテンプレート(参考)
├── tests/                      # テストコード (48 tests)
│   └── test_data/              # テストフィクスチャ
├── main.py                     # CLI エントリポイント
├── requirements.txt            # 依存関係
├── AGENTS.md                   # AI エージェント向け指示書
└── README.md

処理フロー

[詳細設計書.md] ──┐
[ソース.cbl] ────┤
[COPYBOOK .cpy] ─┤
[DB定義書.md] ───┘
       │
       ▼
  InputParser ──→ ProgramMeta(全メタデータ)
       │
       ▼
  RuleLoader ───→ ルール.md + 条件分支.md(該当時)
       │
       ▼
  PromptBuilder ─→ API プロンプト
       │
       ▼
  APIClient ────→ DeepSeek API(最大3回リトライ)
       │
       ▼
  OutputWriter ──→ output/{プログラムID}/g{N}/{プログラムID}_g{N}.json
                   output/{プログラムID}/g{N}/{プログラムID}_g{N}.sql

出力形式

入力元がファイルの場合(JSON

{
  "program": "ZAN04MAT",
  "records": [
    {
      "input": {
        "ZAN04R01": {
          "R01-APPL-ID": "A0000001",
          "R01-EMP-ID": "00000001",
          "R01-APPL-DATE": "20250101",
          "R01-START-TIME": "0800",
          "R01-END-TIME": "1700",
          "R01-STATUS": "1",
          "R01-OVT-TYPE": "O",
          "R01-FILLER": "              "
        },
        "ZAN04R02": {
          "R02-APPL-ID": "A0000002",
          ...
        }
      }
    }
  ]
}

入力元が DB の場合(SQL

-- Group: 1
-- 用途: 正常INSERT + 多keyテスト
INSERT INTO LEAVE_RECORDS (EMP_ID, LEAVE_TYPE, START_DATE, ...) VALUES
('00000001', '01', '20260101', ...),
('00000002', '02', '20260102', ...);

出力ディレクトリ構成

output/
└── ZAN04MAT/
    ├── g1/
    │   └── ZAN04MAT_g1.json
    ├── g2/
    │   └── ZAN04MAT_g2.json
    └── g3/
        └── ZAN04MAT_g3.json

対応 PGM パターン

パターン ルールファイル カバー数 多keyテスト
マッチング(1:1) マッチング(1-1).md 1
マッチング(1:N) マッチング(1-N).md 2
マッチング(N:1) マッチング(N-1).md 1
DB更新 DB更新.md 5
振り分け 振り分け.md 2
項目チェック 項目チェック.md 2
GETPUT レイアウト編集のみ(GETPUT).md 3
キーブレイク(集計) キーブレイク(集計).md 2
キーブレイク(集約) キーブレイク(集約).md 1
キーブレイク(集計、集約) キーブレイク(集計、集約).md 1
SELECT処理 SELECT処理.md 1
MERGE MERGE.md 1
50分割 50分割.md 1
CSV→FB変換 CSV→FB変換.md 1

合計: 24 プログラム対応

多keyテストとは

キーが複数項目(例: A001, A002, A003)で構成される場合、基準データの各キー項目を 1 つだけ変えた N 件の追加データを各グループ末尾に生成する。これにより COBOL プログラムが正しい全キー項目で比較していることを検証する。

ルール追加方法

  1. rules/pgm_pattern/ に新しい .md ファイルを作成
  2. agent/rule_loader.pyPGM_PATTERN_MAP にエントリを追加
  3. コード変更不要、ルール .md ファイル追加のみで拡張可能

ルールマッチング: まず PGM_PATTERN_MAP 完全一致 → なければルールファイル名(.md 除く)が PGM パターン文字列内に含まれるかチェック。

全プログラム実行コマンド

# マッチング(1:1)
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN04MAT.md" --source "D:\cobol-tna-system\src\ZAN04MAT.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# マッチング(1:N)
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN05MAT.md" --source "D:\cobol-tna-system\src\KIN05MAT.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN07DAI.md" --source "D:\cobol-tna-system\src\KIN07DAI.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# マッチング(N:1)
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN03CHK.md" --source "D:\cobol-tna-system\src\ZAN03CHK.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# DB更新
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN02UPD.md" --source "D:\cobol-tna-system\src\KIN02UPD.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN08DBU.md" --source "D:\cobol-tna-system\src\KIN08DBU.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU02REG.md" --source "D:\cobol-tna-system\src\KYU02REG.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU06UPD.md" --source "D:\cobol-tna-system\src\KYU06UPD.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN06UPD.md" --source "D:\cobol-tna-system\src\ZAN06UPD.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# 振り分け
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN01INP.md" --source "D:\cobol-tna-system\src\KIN01INP.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN01CHK.md" --source "D:\cobol-tna-system\src\ZAN01CHK.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# 項目チェック
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN02CHK.md" --source "D:\cobol-tna-system\src\ZAN02CHK.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN04CHK.md" --source "D:\cobol-tna-system\src\KIN04CHK.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# GETPUT
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN06CLD.md" --source "D:\cobol-tna-system\src\KIN06CLD.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU08PRI.md" --source "D:\cobol-tna-system\src\KYU08PRI.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN09CSV.md" --source "D:\cobol-tna-system\src\KIN09CSV.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# キーブレイク(集計)
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KIN03EXP.md" --source "D:\cobol-tna-system\src\KIN03EXP.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_ZAN05CAL.md" --source "D:\cobol-tna-system\src\ZAN05CAL.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# キーブレイク(集約)
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU03AGG.md" --source "D:\cobol-tna-system\src\KYU03AGG.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU04CAL.md" --source "D:\cobol-tna-system\src\KYU04CAL.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

# その他
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU05DED.md" --source "D:\cobol-tna-system\src\KYU05DED.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU07DIV.md" --source "D:\cobol-tna-system\src\KYU07DIV.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU09MRG.md" --source "D:\cobol-tna-system\src\KYU09MRG.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"
python main.py --design "D:\cobol-tna-system\詳細設計書\詳細設計書_KYU01CVT.md" --source "D:\cobol-tna-system\src\KYU01CVT.cbl" --file-db-md "D:\cobol-tna-system\詳細設計書\COPY句定義書.md" --cpy "D:\cobol-tna-system\cpy" --db-md "D:\cobol-tna-system\詳細設計書\DB定義書.md" --output "output"

注意事項

  • API Key: DeepSeek API キーは agent/__init__.py にハードコードされています。本番利用時は環境変数などに変更してください。
  • サブプログラム: PGMタイプ = サブ のプログラムは処理対象外です。
  • 全角/半角: 詳細設計書内の PGMパターン表記には全角括弧 () と半角括弧 () のバリエーションがあります。rule_loader.py で両方対応済みです。
  • テスト: 全 48 テストが tests/test_data/ のフィクスチャを使って API を mock して動作します。
  • 所要時間: 24 プログラム全実行で約 26 分(DeepSeek API 応答速度に依存)。
S
Description
No description provided
Readme
180 KiB
Languages
Python 75.6%
COBOL 24.4%