7. CRUD図・テーブル定義書・HTML

IBM i / AS400 解析・リバース — 最良の手順と手法(匿名化公開用)

版 2026-07-22 · 対外公開用 · プロンプト+実践知見+用語集

対外公開版(匿名化済み) — 顧客名・案件名・固有ライブラリ/パス/プログラム名は一般化しています。用語は青点線にマウスオーバーで定義を表示。巻末「用語集」も参照。

成果物の依存関係(更新順・手戻り防止)

機能調査レポート.md(証跡・PARTIAL昇格)
        ↓
CRUD図/CRUD一覧.md  ← rebuild_crud_from_bob_context.py
        ↓                 (bob_context + SRC列パーサ + DSPPGMREF)
テーブル定義書/*       ← build_as400_table_definitions.py
        ↓                 (DSPOBJD + DSPFFD + CRUD一覧)
CRUD HTML のファイル列リンク ← link_crud_to_table_defs.py
レポート HTML              ← generate_html_reports.py
手戻り例:レポートだけ直して CRUD図を再生成しないと、テーブル定義書の「利用プログラムとCRUD」が古いまま残る。 2026-07-22 実績: CRUD6176→6447、ファイル数 1593→1741、定義書 CRUD 突合 1049→1076。 バックアップ例: CRUD図確認結果\CRUD図_backup_20260722_100210

再生成コマンド(Windows)

cd C:\WORK\ibm-i-analysis
python tools/promote_partial_to_confirmed.py --tag colparse_pgmref
python tools/rebuild_crud_from_bob_context.py
python tools/build_as400_table_definitions.py
python tools/link_crud_to_table_defs.py
python tools/enrich_section51_wireframes.py
python tools/generate_html_reports.py

CRUD図の確度表示

rebuild の入力優先

  1. 共有フォルダ上の bob_context(Z: 側を優先)
  2. SRC 実体を列パーサで再スキャン(レポートより新しい根拠を取りに行く)
  3. DSPPGMREF CSV で PARTIAL 行の操作めやすを補完
  4. 画面・プリンタは CRUD図から除外

テーブル定義書に載ること

HTML変換でハマった点(レポート)

症状原因対策
⑤表が生Markdownのまま区切り行 |---|---|---||---|生成前正規化 / uplift区切り修正
PROMOTE_LOGが表外証跡とログの間の ---正規化で除去、孤立表行もHTML化
チェックリストが1文字text[2] で本文取得partition('|')
確認先が同ファイルの⑤単体レポート無し時のフォールバック#証跡一覧へ(単体HTMLがあればそちら)
PARTIALが機械語のみバッジがコード直出しpartial_implications.py で含意文

⑤-1 画面ワイヤー

画面ID(*D)があるのにASCIIが無いのは、一括L2化がプレースホルダだけだったため。 dspf_wireframe.py + enrich_section51_wireframes.pyDSPF から機械生成する (2026-07 時点で約562レポート、約283画面、ZS誤検知約34除去)。 ZS 等は evidence 全文マッチで誤検出しやすいので、ファイル名*D + WORKSTN/EXFMTで判定。

手順書 v1.1 から抜粋 — §8 PF/LF / DSPDBR

8. PFLF・アクセスパスの解析

8.1 基本定義

8.2 取得すべきPF情報

ライブラリー
ファイル名
ファイルタイプ
作成方法(DDS/SQL/RCDLEN)
レコード様式
フィールド
キー
メンバー
レコード件数
削除済みレコード数
最大メンバー数
再使用削除レコード
レベル検査
CCSID
ジャーナル
トリガー
制約
アクセスパス
所有者
権限
作成・変更日時
サイズ
ASP

8.3 取得すべきLF情報

ライブラリー
LF名
単純/複数様式/結合LF
参照PF
PFILE
JFILE
JOIN
JFLD
JDUPSEQ
レコード様式
選択フィールド
フィールド名変更
キー
キー順序
昇順/降順
UNIQUE
FIFO/LIFO/FCFO
SELECT/OMIT
DYNSLT
SRTSEQ
LANGID
アクセスパス保守
共有アクセスパス
メンバー

8.4 DSPFD

DSPFD FILE(DBLIB/ORDERPF) TYPE(*ALL)

DSPFD FILE(DBLIB/ORDERPF)
      TYPE(*BASATR)
      OUTPUT(*OUTFILE)
      OUTFILE(QTEMP/FDBASIC)

DSPFD FILE(DBLIB/ORDERPF)
      TYPE(*MBR)
      OUTPUT(*OUTFILE)
      OUTFILE(QTEMP/FDMBR)

DSPFD FILE(DBLIB/ORDERL1)
      TYPE(*ACCPTH)
      OUTPUT(*OUTFILE)
      OUTFILE(QTEMP/FDACCP)

DSPFD FILE(DBLIB/ORDERL1)
      TYPE(*SELECT)
      OUTPUT(*OUTFILE)
      OUTFILE(QTEMP/FDSELECT)

対象リリースで利用可能なTYPEOUTFILE形式を確認する。

8.5 DSPFFD

DSPFFD FILE(DBLIB/ORDERPF)
       OUTPUT(*OUTFILE)
       OUTFILE(QTEMP/FFD)

DSPFFD FILE(DBLIB/ORDERL1)
       OUTPUT(*OUTFILE)
       OUTFILE(QTEMP/FFDLF)

取得対象:

フィールド名
システム名
別名
レコード様式
データ型
長さ
小数桁
オフセット
CCSID
NULL可否
見出し
テキスト
参照元
キー順
入出力属性

8.6 DSPDBR

PFに依存するLF等の関係を取得する。

DSPDBR FILE(DBLIB/ORDERPF)
       OUTPUT(*OUTFILE)
       OUTFILE(QTEMP/DBR)

注意

8.7 PF/LF関係表

LF種別レコード様式PFキーSELECT/OMIT更新可否使用PGM
ORDERL1単純LFORDERRORDERPF顧客+注文NoSTATUS≠DORD001
ORDERJ1結合LFORDJRORDERPF、CUSTPF顧客なし原則読取RPT010

8.8 アクセスパス確認

確認項目:

到着順/キー順
キー数
複合キー順序
昇順/降順
重複可否
アクセスパス保守
即時/遅延/再構築
共有元
選択・除外
推定件数
更新頻度
再編成影響
SQL索引との重複

性能判断には、定義だけでなく実際の利用頻度と更新負荷も必要である。


手順書 v1.1 から抜粋 — §10 プログラム依存(DSPPGMREF

10. プログラム依存関係

10.1 DSPPGMREF

DSPPGMREF PGM(APPLIB/ORD001)
           OUTPUT(*OUTFILE)
           OUTFILE(QTEMP/PGMREF)

DSPPGMREF PGM(APPLIB/*ALL)
           OUTPUT(*OUTFILE)
           OUTFILE(QTEMP/PGMREFALL)

主な用途:

10.2 PROGRAM_INFO

SELECT *
  FROM QSYS2.PROGRAM_INFO
 WHERE PROGRAM_LIBRARY = 'APPLIB';

確認対象:

プログラム属性
作成日時
ソース情報
活動化グループ
ユーザープロファイル実行属性
状態
SQL関連
モジュール
最適化
リリース

10.3 BOUND_MODULE_INFO

SELECT *
  FROM QSYS2.BOUND_MODULE_INFO
 WHERE PROGRAM_LIBRARY = 'APPLIB';

サービスプログラムとモジュールについて次を確認する。

バインド済みモジュール
モジュールライブラリー
モジュール作成日時
ソース情報
エクスポート
インポート
シグネチャー
バインディング・ディレクトリー
再バインド影響

10.4 DSPPGMREFだけでは分からないもの

10.5 コールグラフの表現

{
  "caller": "APPLIB/ORD001",
  "callee": "APPLIB/CUSTCHK",
  "callType": "EXTPGM",
  "declaredName": "CUSTCHK",
  "binding": "RUNTIME_LIBRARY_SEARCH",
  "evidence": [
    "source:SRCLIB/QRPGLESRC(ORD001):line 245",
    "DSPPGMREF"
  ],
  "confidence": "CONFIRMED"
}

← 6. RPG固定形式と取り違え防止8. 実機取得とPARTIALの残し方 →