IBM i / AS400 解析・リバース — 最良の手順と手法(匿名化公開用)
機能調査レポート.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図_backup_20260722_100210
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
[CONFIRMED] … SRC等で操作確認(行番号付き)[PARTIAL] … F仕様のみ、または PGMREF_*(WHFUSGのめやす)— は「操作不明」。PGMREFで R/W/U めやすが付くと埋まることがある| 症状 | 原因 | 対策 |
|---|---|---|
| ⑤表が生Markdownのまま | 区切り行 |---|---|---||---| | 生成前正規化 / uplift区切り修正 |
| PROMOTE_LOGが表外 | 証跡とログの間の --- | 正規化で除去、孤立表行もHTML化 |
| チェックリストが1文字 | text[2] で本文取得 | partition('|') |
| 確認先が同ファイルの⑤ | 単体レポート無し時のフォールバック | #証跡一覧へ(単体HTMLがあればそちら) |
| PARTIALが機械語のみ | バッジがコード直出し | partial_implications.py で含意文 |
画面ID(*D)があるのにASCIIが無いのは、一括L2化がプレースホルダだけだったため。
dspf_wireframe.py + enrich_section51_wireframes.py で DSPF から機械生成する
(2026-07 時点で約562レポート、約283画面、ZS誤検知約34除去)。
ZS 等は evidence 全文マッチで誤検出しやすいので、ファイル名*D + WORKSTN/EXFMTで判定。
ライブラリー
ファイル名
ファイルタイプ
作成方法(DDS/SQL/RCDLEN)
レコード様式
フィールド
キー
メンバー
レコード件数
削除済みレコード数
最大メンバー数
再使用削除レコード
レベル検査
CCSID
ジャーナル
トリガー
制約
アクセスパス
所有者
権限
作成・変更日時
サイズ
ASP
ライブラリー
LF名
単純/複数様式/結合LF
参照PF
PFILE
JFILE
JOIN
JFLD
JDUPSEQ
レコード様式
選択フィールド
フィールド名変更
キー
キー順序
昇順/降順
UNIQUE
FIFO/LIFO/FCFO
SELECT/OMIT
DYNSLT
SRTSEQ
LANGID
アクセスパス保守
共有アクセスパス
メンバー
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)
対象リリースで利用可能なTYPEとOUTFILE形式を確認する。
DSPFFD FILE(DBLIB/ORDERPF)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/FFD)
DSPFFD FILE(DBLIB/ORDERL1)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/FFDLF)
取得対象:
フィールド名
システム名
別名
レコード様式
データ型
長さ
小数桁
オフセット
CCSID
NULL可否
見出し
テキスト
参照元
キー順
入出力属性
PFに依存するLF等の関係を取得する。
DSPDBR FILE(DBLIB/ORDERPF)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/DBR)
RELATED_OBJECTS等でも補完する。| LF | 種別 | レコード様式 | 元PF | キー | SELECT/OMIT | 更新可否 | 使用PGM |
|---|---|---|---|---|---|---|---|
| ORDERL1 | 単純LF | ORDERR | ORDERPF | 顧客+注文No | STATUS≠D | 可 | ORD001 |
| ORDERJ1 | 結合LF | ORDJR | ORDERPF、CUSTPF | 顧客 | なし | 原則読取 | RPT010 |
確認項目:
到着順/キー順
キー数
複合キー順序
昇順/降順
重複可否
アクセスパス保守
即時/遅延/再構築
共有元
選択・除外
推定件数
更新頻度
再編成影響
SQL索引との重複
性能判断には、定義だけでなく実際の利用頻度と更新負荷も必要である。
DSPPGMREF PGM(APPLIB/ORD001)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/PGMREF)
DSPPGMREF PGM(APPLIB/*ALL)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/PGMREFALL)
主な用途:
SELECT *
FROM QSYS2.PROGRAM_INFO
WHERE PROGRAM_LIBRARY = 'APPLIB';
確認対象:
プログラム属性
作成日時
ソース情報
活動化グループ
ユーザープロファイル実行属性
状態
SQL関連
モジュール
最適化
リリース
SELECT *
FROM QSYS2.BOUND_MODULE_INFO
WHERE PROGRAM_LIBRARY = 'APPLIB';
サービスプログラムとモジュールについて次を確認する。
バインド済みモジュール
モジュールライブラリー
モジュール作成日時
ソース情報
エクスポート
インポート
シグネチャー
バインディング・ディレクトリー
再バインド影響
QCMDEXCで組み立てるコマンド。system()で実行するコマンド。{
"caller": "APPLIB/ORD001",
"callee": "APPLIB/CUSTCHK",
"callType": "EXTPGM",
"declaredName": "CUSTCHK",
"binding": "RUNTIME_LIBRARY_SEARCH",
"evidence": [
"source:SRCLIB/QRPGLESRC(ORD001):line 245",
"DSPPGMREF"
],
"confidence": "CONFIRMED"
}