CRUD図とは
CRUD図(CRUD Matrix)とは、システム内の各機能・モジュール・プログラムが、どのテーブルに対して Create(挿入)・Read(参照)・Update(更新)・Delete(削除) のどの操作を行うかを一覧化した図です。
縦軸にプログラム/モジュール、横軸にテーブルを並べた行列(マトリクス)形式が最も一般的で、各セルに
C / R / U / D を組み合わせた記号を書き入れます。
| プログラム / テーブル | TOKUI | SHOHIN | URIAGE | MEISAI |
|-----------------------|--------|--------|--------|--------|
| URIAGE-TOROKU | R | R | CU | CRD |
| URIAGE-SHUKEI | R | R | R | R |
| SHOHIN-KANRI | | CRUD | | |
| TOKUI-MEISHO | CRUD | | | |
上表から「URIAGE-TOROKU は MEISAI テーブルの Create・Read・Delete を行う」「URIAGE-SHUKEI はすべてのテーブルに対して Read のみ」といった依存関係が一目でわかります。
COBOLでCRUD図が必要な理由
CRUD図はJava等のモダン言語に限らず、COBOLシステムでこそ特に力を発揮します。
COBOLにおけるSQLの書き方
COBOLでRDBにアクセスする場合、埋め込みSQL(Embedded SQL)を使います。
SQL文は EXEC SQL と END-EXEC で囲まれたブロックとして記述されます。
これはJavaのようにメソッド内に自由な形で記述するのとは異なり、
COBOLでは明確な開始・終了マーカーが常に存在するという大きな特徴があります。
PROCEDURE DIVISION.
MAIN-PROC.
EXEC SQL
SELECT TOKUI-CD, TOKUI-NM
INTO :WK-TOKUI-CD, :WK-TOKUI-NM
FROM TOKUI
WHERE TOKUI-CD = :WK-INPUT-CD
END-EXEC.
EXEC SQL
INSERT INTO URIAGE
(URIAGE-NO, TOKUI-CD, URIAGE-DT, KIN-GAK)
VALUES
(:WK-URIAGE-NO, :WK-TOKUI-CD,
:WK-DATE, :WK-KINGAK)
END-EXEC.
💡 EXEC SQL ブロックの特徴
Java と異なり、COBOL の SQL はすべて EXEC SQL〜END-EXEC で囲まれています。この構造的な特徴により、正規表現だけでも高精度にSQL文を抽出できます。動的SQL(EXECUTE IMMEDIATEや文字列連結)は例外で、PART 08 で対策を解説します。
既存ツールの限界
| ツール / アプローチ | 依存するもの | 問題点 |
|---|---|---|
| 手動作成 | — | 数千本のCOBOLプログラムに対して現実的でなく、コード変更のたびに陳腐化する |
| COBOLパーサー製品 | 特定ベンダー環境 | 高価・環境依存が強く、オープンな分析環境を構築しにくい |
| 実行ログ解析(動的) | DB接続・テスト環境 | 未実行コードパスは解析されず、テスト環境の整備コストも高い |
| Javaツール流用 | JavaParser等 | COBOL固有の構文(EXEC SQL、固定形式、継続行)に対応しない |
このシリーズのアプローチ
本シリーズでは COBOLソースコードの静的解析 によるアプローチを採ります。
EXEC SQL〜END-EXEC ブロックを正規表現で抽出し、
JSqlParser でテーブル名と操作種別を判別します。
特定ベンダーやランタイム環境に依存せず、COBOLソースファイルさえあれば解析可能です。
シリーズ全体構成
| PART | タイトル | 内容 |
|---|---|---|
| 01 | はじめに(本記事) | CRUD図の目的・シリーズ概要 |
| 02 | アプローチの設計 | COBOLの静的解析・ツール選定(正規表現 vs パーサ) |
| 03 | SQL抽出の実装 | EXEC SQL〜END-EXECブロックのスキャンと取り出し |
| 04 | テーブル名・操作種別の判別 | JSqlParser / 正規表現でCRUD分類 |
| 05 | CRUD行列の構築 | プログラム横断集約とデータ構造設計 |
| 06 | CRUD図の出力 | Markdownテーブル・Mermaid・PlantUML |
| 07 | 動作デモ | サンプルCOBOLプロジェクトで実際に動かす |
| 08 | まとめ | 限界と改善点・レガシー移行への活用 |
使用技術スタック
✅ 次の章では…
PART 02 では静的解析と動的解析のトレードオフを整理し、正規表現ベースとCOBOLパーサ(koopa / GnuCOBOL)のどちらを選ぶべきかを詳しく解説します。