シリーズ総括
| PART | 内容 | 成果物 |
|---|---|---|
| 01 | CRUD図の目的・シリーズ概要 | — |
| 02 | 静的解析 vs 動的解析・ツール選定 | アプローチ決定 |
| 03 | EXEC SQL〜END-EXEC 抽出実装 | ProgramSqlInfo リスト |
| 04 | JSqlParser / 正規表現でCRUD分類 | CrudEntry リスト |
| 05 | プログラム横断集約・行列構築 | CrudMatrixResult |
| 06 | Markdown・Mermaid・PlantUML出力 | .md / .puml / .json |
| 07 | サンプルプロジェクトでのデモ | 実際のCRUD図 |
| 08 | 限界・改善点・移行活用(本記事) | — |
静的解析の限界
⚠️ 静的解析で対応できないケース
① EXECUTE IMMEDIATE — 文字列変数にSQL全体を代入して動的実行するパターン。変数の中身は実行時にしか確定しない。
② WORKING-STORAGE での SQL 組み立て — STRING WS-SQL ' WHERE ' WS-COND DELIMITED SIZE INTO WS-STMT のような文字列連結。
③ COPY 句経由のSQL — EXEC SQL COPY URIAGE-SELECT END-EXEC のようにCOPY句でSQL全体を取り込むパターン。COPY展開が必要。
実際の経験では、レガシーCOBOLの全SQLの 80〜90%は静的SQL であり、このツールだけでも十分な価値があります。
COPY句展開への対応
import re
from pathlib import Path
def expand_copy(source: str, copy_dir: str) -> str:
"""
COPY句をコピーライブラリの内容に展開する(簡易版)。
COPY ライブラリ名. → ライブラリファイルの内容に置換
"""
copy_pattern = re.compile(
r'^\s{6}\s+COPY\s+([A-Z][A-Z0-9-]*)\s*\.',
re.IGNORECASE | re.MULTILINE
)
copy_base = Path(copy_dir)
def replace_copy(m):
lib_name = m.group(1).upper()
for ext in ('.cpy', '.CPY', '.cbl', '.CBL'):
lib_file = copy_base / (lib_name + ext)
if lib_file.exists():
return lib_file.read_text(encoding='cp932', errors='replace')
return m.group(0) # 見つからない場合はそのまま
return copy_pattern.sub(replace_copy, source)
動的SQLへの対処
CI/CDへの組み込み
name: Generate COBOL CRUD Matrix
on:
push:
paths:
- 'cobol_src/**/*.CBL'
- 'cobol_src/**/*.cbl'
jobs:
crud-gen:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Generate CRUD matrix
run: |
python -m pip install --quiet .
python main.py
- name: Commit CRUD matrix
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: 'docs: update COBOL CRUD matrix [skip ci]'
file_pattern: 'output/crud_matrix.*'
レガシー移行プロジェクトへの活用
このツールが最も力を発揮するのは、COBOL→Javaマイグレーション等のレガシー移行プロジェクトです。
次のステップ
✅ さらに発展させるには
① COBOL可視化シリーズとの統合 — COBOL可視化シリーズで生成したParagraph Call GraphとCRUD図を組み合わせることで「どのParagraphがどのテーブルにアクセスするか」という更に詳細な分析が可能になる。
② Java版CRUD図との比較 — Java CRUD図生成シリーズと同じ出力形式(Markdown・Mermaid)を採ることで、COBOL版とJava版の移行対応状況を横並びで比較できる。
③ Webダッシュボード化 — JSON出力をJavaScriptで読み込みインタラクティブなフィルタ付き行列ビューとして提供することで、非エンジニアのステークホルダーへの説明資料として活用できる。