IBM i / AS400 解析・リバース — 最良の手順と手法(匿名化公開用)
| 優先 | 取得 | 平易な理由 |
|---|---|---|
| A | DSPDBR | 論理(索引)と物理(本体)の公式対応 |
| A | DSPPGMREF鮮度/不足 | コンパイル時の参照名簿 |
| A | DSPFFD不足 | 項目定義(テーブル定義書) |
| B | 代表5機能の開ファイル | OVRDBF等で実行時実体が違う |
| B | JOBD LIBL | 同名の棚の順番 |
基幹移行では「この機能は、どのデータを読んで・書いて・直しているか」をはっきりさせたいです。
ソースの読み取りだけでは、宣言はあるが実際の読み書きが分からない行がまだ残っています。
それを埋めるために、実機から「関係図」と「実際に開いているファイル」を見せてほしい、という依頼です。
いま手元にあるものでもかなり進んでいます。
足りないのは「実行時の最終確認」と「ファイル同士の公式なつながり」です。
ソースを読むと、次のような行が出てきます。
> 「このプログラムは、ファイル A を使う」と書いてある
> でも、そのあと「読む」「書く」「直す」命令が見つからない
この状態を、調査では 部分確認(PARTIAL) と呼んでいます。
断言すると間違えるので、あえて「未確定のまま」残しています。
いま、こうした未確定が だいたい 150 ファイル前後・100 機能以上 に残っています。
ここを放置すると、移行設計で「触らないつもりだったデータが実は更新されていた」などの見落としにつながります。
例え: 「顧客マスタ」という本(物理)と、「五十音順の索引」「地区別の索引」(論理)の対応表です。
プログラムはよく 索引の名前 で書いています。
でも移行や影響調査では 本当の本の名前 で考える必要があります。
手元のソースだけだと、索引→本の対応が取れない/古い場合があります。
実機の DSPDBR は、その対応の 公式な一覧 です。
これがあると:
「画面では FA011L01 と書いてあるが、中身は FA011 を見ている」と一本化でき、CRUD 図・テーブル定義書が正確になります。
例え: コンパイル時点の「このプログラムが使うファイルの名簿」です。
以前取った名簿は手元にあります。
ただ、いつの名簿かが分からないと、古い情報で判断してしまう恐れがあります。
お願いしたいのは次のどちらかです。
これがあると:
ソースで読み書き命令が見えない行でも、「コンパイル時には入力扱いだった」などの手がかりになります。
※これだけで最終確定はしません。補助材料です。
例え: 表の「列の一覧(項目名・桁・型)」です。
テーブル定義書を作る材料です。
すでに大量にありますが、ライブラリによっては足りない/新しいオブジェクトがある可能性があります。
これがあると:
「何の項目を持っている表か」が説明でき、業務意味の解釈が進みます。
例え: 設計図には「倉庫A」と書いてあるのに、当日は「臨時倉庫B」を使っていた、という確認です。
AS/400 では、プログラム実行前に ファイルの行き先を差し替える(OVRDBF など)ことがよくあります。
ソースだけ見ると「ORDERPF」でも、実行時は別ファイルになっていることがあります。
だから、代表機能を動かした(または動いている)ジョブで、
> 実際に開いていたファイル名の一覧
を見せてほしい、という依頼です。
まずは次の 5機能だけ で十分です。
(未確定が特に多い機能から選んでいます)
これがあると:
「ソース上の名前」と「本番で本当に触っているデータ」のズレを潰せます。
CRUD の精度が一段上がります。
例え: 「同じファイル名でも、どの棚(ライブラリ)を先に探すか」の順番表です。
同名ファイルが複数ライブラリにあると、実行環境によって実体が変わります。
代表的な起動経路の順番が分かると、名前解決の間違いが減ります。
見るだけ・一覧を出すだけ の作業です。
| 今 | 実機情報が来たあと |
|---|---|
| 「使う宣言はあるが、読書き不明」が多い | 関係図と実行時確認で、確定/推定を分けられる |
| LF名とPF名が混在しやすい | 「本当の表」単位で影響範囲を話せる |
| CRUD図・テーブル定義書に穴が残る | 穴を埋め、移行・影響調査の根拠が強くなる |
目的は debuggable な文書化です。
推測で「確定」にしない ための材料集め、と理解してもらえると助かります。
すみません、意図が伝わりにくかったので補足します。
やりたいことは単純で、「この機能はどのデータを読んで・書いて・直しているか」を、ソースだけに頼らず確認することです。
いま手元のソース調査だと、「ファイルを使う、とは書いてあるが、読む/書く命令が見つからない」行がまだ残っています(だいたい150ファイル前後)。
ここを推測で確定すると危険なので、実機から次の一覧だけいただきたく依頼しています。
1. 物理ファイルと論理ファイルのつながり(DSPDBR)… 索引と本体の対応表
2. プログラムが参照するファイル名簿の取得日確認/不足分(DSPPGMREF)
3. 項目定義の不足分(DSPFFD)
4. 代表5機能を動かしたときに、実際に開いていたファイル一覧
(FUNC01 / FUNC02 / FUNC03 / FUNC04 / FUNC05)
5. 代表的なジョブのライブラリ検索順
データの変更やプログラム改修は不要です。見る・一覧を出すだけです。
詳細コマンドは依頼書に書いてあります。まず4の5機能だけでもかなり助かります。
ANLWLIB)または QTEMP → CSV/スプールを共有フォルダへIBM_i_実機取得_なぜ必要か_平易説明_20260722.md(「?」への返信用)基幹移行では「この機能は、どのデータを読んで・書いて・直しているか」をはっきりさせたいです。
ソースを読むと、「ファイルを使う」と書いてあるのに、そのあとの「読む/書く/直す」命令が見つからない行が残ります。
いまその未確定が だいたい150ファイル前後 あります。推測で確定すると危険なので、実機の一覧で穴埋めしたい、というのが依頼の理由です。
| お願い | 平易な意味 |
|---|---|
| DSPDBR | 索引(論理)と本体(物理)の対応表 |
| DSPPGMREF | プログラムが使うファイルの名簿(取得日確認/不足分) |
| DSPFFD | 表の列(項目)一覧の不足分 |
| 開ファイル一覧 | 動かしたときに 本当に開いていた ファイル(まず5機能) |
| JOBDのLIBL | 同名ファイルをどの棚から探すかの順番 |
データの変更やプログラム改修は不要です。見る・一覧を出すだけです。
いま手元にはソースと、以前取得したオブジェクト一覧・プログラム参照(DSPPGMREF)があります。
それでも次の点が残りやすいです。
そのため、追加で実機から取っていただきたいものを、優先度つきで依頼します。
詳細: [SHARED]\requirements\06_IBM_i情報\レポート\_pilot\PARTIAL残_実機確認リスト_20260722.md
(ミラー: C:\WORK\ibm-i-analysis\documents\PARTIAL残_実機確認リスト_20260722.md)
開ファイル取得(B-1)でまずお願いしたい機能 5件:
DSPFFD / DSPDBR の絞り込み: 同リスト末尾の「ユニークファイル名一覧」(149件)を優先。ライブラリ全体が取れるなら全体取得で問題ありません。
何のため: 「このLFはどのPFを見ているか」を機械的に確定するため。
対象ライブラリは、現行調査で使っているもの(例: APPLIB / APPNEW / APPUSRC / APPSLIB / APPOBJ など)。
ライブラリ名は現場の正に合わせてください。
/* 調査用ライブラリを用意(無ければ作成。権限のある方が実施) */
CRTLIB LIB(ANLWLIB) TEXT('調査用ワーク')
/* 例: ライブラリ APPLIB 内の全ファイルの依存関係 */
DSPDBR FILE(APPLIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(ANLWLIB/DBR_APPLIB)
/* 他ライブラリも同様に(ライブラリ名を変えて繰り返し) */
DSPDBR FILE(APPNEW/*ALL) OUTPUT(*OUTFILE) OUTFILE(ANLWLIB/DBR_APPNEW)
DSPDBR FILE(APPSLIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(ANLWLIB/DBR_APPSLIB)
いただきたい成果物: 上記 OUTFILE を CSV または保存ファイルで共有
(ACS の「データの取り込み」や CPYTOIMPF で CSV 化でも可)
CPYTOIMPF FROMFILE(ANLWLIB/DBR_APPLIB)
TOSTMF('/tmp/DBR_APPLIB.csv')
MBROPT(*REPLACE) STMFCCSID(*PCASCII) RCDDLM(*CRLF)
(IFS パスは社内ルールに合わせて変更してください)
何のため: 手元の DSPPGMREF が古い/欠けている場合の穴埋め。
すでに同内容があれば「最終取得日」だけ教えていただければ、再取得は不要です。
/* 業務プログラムライブラリ単位(件数が多いので *ALL は分割推奨) */
DSPPGMREF PGM(APPLIB/*ALL)
OUTPUT(*OUTFILE)
OBJTYPE(*ALL)
OUTFILE(ANLWLIB/PGMREF_APP)
DSPPGMREF PGM(APPNEW/*ALL)
OUTPUT(*OUTFILE)
OBJTYPE(*ALL)
OUTFILE(ANLWLIB/PGMREF_APPN)
特に欲しい列の意味(参考):
WHFUSG = 入力/出力/更新の区分(1=入力, 2=出力, 4=更新 など)
いただきたい成果物: OUTFILE または CSV + 取得日時・対象ライブラリ一覧
何のため: レコード様式名と項目の対応確認。
手元に DDS項目情報(DSPFFD_1).csv があります。不足ライブラリ/新規オブジェクトだけで構いません。
DSPFFD FILE(対象ライブラリ/*ALL)
OUTPUT(*OUTFILE)
OUTFILE(ANLWLIB/FFD_xxx)
件数が多すぎる場合は、次のどちらかで絞ってください。
何のため: ソースでは ORDERPF でも、実行時は別ファイルに indirection(OVRDBF)されているケースがあるため。
CL ソース上、OVRDBF は少なからずあります。
やり方(どちらか):
方法1(実行中ジョブがある場合)
/* ジョブを特定してから */
DSPJOB JOB(ジョブ番号/ユーザ/ジョブ名) OPTION(*OPNF)
/* または */
WRKJOB JOB(...) OPTION(*OPNF)
画面/スプールの「開いているファイル」一覧を保存。
方法2(再現できる対話・バッチがある場合)
対象機能をテスト環境で動かし、同じように開ファイル一覧を取得。
いただきたい成果物(機能あたり1つで可):
最初は よく使う機能 5〜10件 で十分です。リストはこちらで提示できます。
何のため: 同じプログラム名でも、どのライブラリのファイルが当たるか確認するため。
DSPJOBD JOBD(ライブラリ/ジョブ記述名) OUTPUT(*PRINT)
/* またはよく使うものを一覧 */
DSPOBJD OBJ(ライブラリ/*ALL) OBJTYPE(*JOBD) OUTPUT(*OUTFILE) OUTFILE(ANLWLIB/JOBD_LIST)
いただきたい成果物: 本番/検証で業務が使う代表的な JOBD のライブラリリスト(初期・現行)
DSPSFWRSC
DSPSYSVAL SYSVAL(QCCSID)
DSPSYSVAL SYSVAL(QDATFMT)
業務で SQL テーブル/ビューを使っていることが分かっているライブラリだけ。
DSPOBJD OBJ(ライブラリ/*ALL) OBJTYPE(*FILE) DETAIL(*SERVICE) OUTPUT(*OUTFILE) OUTFILE(ANLWLIB/SQLHINT)
(または ACS の「スキーマ」一覧のエクスポート)
DSPJRN(ジャーナル全件)— 今回は不要ANLWLIB / QTEMP を使用)依頼しやすくするため、必要なら次をこちらで作ります。
調査対象ライブラリ.xlsx ベース)お手数ですが、IBM i 移行解析のCRUD確定精度向上のため、実機から参照系の情報取得をお願いできますか。
変更系コマンドは使いません。出力は調査用ライブラリ(例: ANLWLIB)へお願いします。
【最優先】
1. DSPDBR FILE(各業務ライブラリ/*ALL) OUTPUT(*OUTFILE) … PF/LF関係
2. 既存DSPPGMREFの取得日確認。古い/欠けていれば DSPPGMREF PGM(ライブラリ/*ALL) OUTPUT(*OUTFILE) で再取得
3. DSPFFD の不足ライブラリ分
【可能なら】
4. 代表機能について実行時の開ファイル一覧(DSPJOB OPTION(*OPNF))
まず: FUNC01 / FUNC02 / FUNC03 / FUNC04 / FUNC05
5. 代表JOBDのライブラリリスト
詳細コマンドとファイル名リストは次を参照してください。
- IBM_i_実機取得依頼_20260722.md
- PARTIAL残_実機確認リスト_20260722.md
リストの追加絞り込みが必要ならこちらで作成します。
手元解析で PARTIAL のまま残っている対象です。実機取得(DSPDBR / 開ファイル / DSPFFD不足分)の絞り込みに使えます。
| 優先 | 機能ID | PARTIAL件数 | PGMREF注記あり |
|---|---|---|---|
| 1 | FUNC01 | 8 | 8 |
| 2 | FUNC02 | 6 | 4 |
| 3 | FUNC03 | 5 | 5 |
| 4 | FUNC04 | 5 | 5 |
| 5 | FUNC05 | 5 | 5 |
| 6 | CD0050 | 5 | 5 |
| 7 | DX0085C | 5 | 4 |
| 8 | ZSS180I | 5 | 4 |
| 9 | KAI170 | 5 | 0 |
| 10 | PGM001 | 4 | 4 |
| 11 | CZ0350 | 4 | 4 |
| 12 | DD0080C | 4 | 4 |
| 13 | DX0085 | 4 | 4 |
| 14 | DX0085CTST | 4 | 4 |
| 15 | ZSS180 | 4 | 3 |
| ファイル | 出現 |
|---|---|
| FC030L21IP | 11 |
| READRTN | 9 |
| ENDREWRITE | 7 |
| FC030L22IP | 6 |
| WD040L01IP | 6 |
| WW030L01IP | 6 |
| PB0140DBO | 5 |
| FB010L17IP | 5 |
| ZSDTTL02IF | 5 |
| DATABASETSWTK | 5 |
| FORMATFILEPRZ050 | 5 |
| WSKD | 5 |
| WSTM | 5 |
| EZ0450P | 4 |
| WORKSTATIONGKAI120SI | 4 |
| ZSNHD | 4 |
| PG5705P | 4 |
| ZSDMI | 4 |
| ZSSTML6 | 4 |
| GO | 4 |
| FB010L51IP | 3 |
| FB010L56IP | 3 |
| WD010L03IP | 3 |
| HCLST2 | 3 |
| WW030L01 | 3 |
| ショリ | 3 |
| ZSSKW | 3 |
| FB020L03IP | 2 |
| FB010L71IP | 2 |
| FB000L01UP | 2 |
| FB010L05IP | 2 |
| FC010L03UP | 2 |
| FC010L11UP | 2 |
| FC010L16UP | 2 |
| FC010L29UP | 2 |
| FB010L99UP | 2 |
| EZ0450PDO | 2 |
| JSIMSP | 2 |
| FA110L01IP | 2 |
| FA140L01IP | 2 |
| FC060 | 2 |
| FC030L21UP | 2 |
| WD030L01IP | 2 |
| WC031L01IP | 2 |
| WC031L01UP | 2 |
| WC032L01IP | 2 |
| FE030L01IP | 2 |
| WW040L01IP | 2 |
| FC030L32UP | 2 |
| FE010 | 2 |
| WE020 | 2 |
| FE010L02IP | 2 |
| WE030L01IP | 2 |
| WH580L02IP | 2 |
| PG5700P | 2 |
| PG5750P | 2 |
| WK100 | 2 |
| WT010L03IP | 2 |
| EVALUATE | 2 |
| FC030L06UP | 2 |
| PRINTERQPRINT | 2 |
| FA011L01IP | 1 |
| FA070L01IP | 1 |
| WB020 | 1 |
| WB030 | 1 |
| FB010L13UP | 1 |
| WB070L01IP | 1 |
| WB070L02IP | 1 |
| PB0161D | 1 |
| PB0171D | 1 |
| FB010L18UP | 1 |
| FCFFHCHFKCKFWCWNSFY | 1 |
| FB010L08IP | 1 |
| FB010L08UP | 1 |
| FB010L60UP | 1 |
| FB001L03UP | 1 |
| FB000L03IP | 1 |
| FB000L02UP | 1 |
| FB001L02UP | 1 |
| FB001L02IP | 1 |
FC030L21IP
READRTN
ENDREWRITE
FC030L22IP
WD040L01IP
WW030L01IP
PB0140DBO
FB010L17IP
ZSDTTL02IF
DATABASETSWTK
FORMATFILEPRZ050
WSKD
WSTM
EZ0450P
WORKSTATIONGKAI120SI
ZSNHD
PG5705P
ZSDMI
ZSSTML6
GO
FB010L51IP
FB010L56IP
WD010L03IP
HCLST2
WW030L01
ショリ
ZSSKW
FB020L03IP
FB010L71IP
FB000L01UP
FB010L05IP
FC010L03UP
FC010L11UP
FC010L16UP
FC010L29UP
FB010L99UP
EZ0450PDO
JSIMSP
FA110L01IP
FA140L01IP
FC060
FC030L21UP
WD030L01IP
WC031L01IP
WC031L01UP
WC032L01IP
FE030L01IP
WW040L01IP
FC030L32UP
FE010
WE020
FE010L02IP
WE030L01IP
WH580L02IP
PG5700P
PG5750P
WK100
WT010L03IP
EVALUATE
FC030L06UP
PRINTERQPRINT
FA011L01IP
FA070L01IP
WB020
WB030
FB010L13UP
WB070L01IP
WB070L02IP
PB0161D
PB0171D
FB010L18UP
FCFFHCHFKCKFWCWNSFY
FB010L08IP
FB010L08UP
FB010L60UP
FB001L03UP
FB000L03IP
FB000L02UP
FB001L02UP
FB001L02IP
FB010L21IP
FB004
FB000L06UP
FX000
FB010L20UP
FC010L38UP
PD0120P
FB010L12IP
MICHAK
WB050L01IP
FB010L98UP
FD020L03IP
FA130L01IP
WH540
JHNMSP
DA310PD
DB0070P
FC030L02IP
WD010L01IP
FC030L99IP
WD050L01IP
WB050L01UP
WC032L02UP
WH600L01IP
FC030L39UP
FC030L39IP
FC030L38IP
WC032L02IP
FROMFILE
HA100L02UP
FC030L34UP
FC030L34IP
FC030L35IP
WC033L02UP
MAIN060
MAINENTRY
KSREC
PRINTERKAIPRINT3
DATABASEKAIMST
REWRITE
FB010L02UP
FA020L01IP
FA030L01IP
FA050L01IP
FB010L65UP
FB010L06UP
WC080
FB010L32IP
PG5730P
PH5700P
PH5750P
WM030P
WK200L01IP
FB010L71UP
DATABASETSDSL
COMPUTE
CLOSE
FORMATFILEURD2303
PERFORM
APPFNEW
ILE
FORMATFILEPRZ040
ZSSKW2
MAIN010
WRTRTN
WORKSTATIONDZSP120
WSKDA
INITIALIZE
ZSTAN
FC030L21IP
READRTN
ENDREWRITE
FC030L22IP
WD040L01IP
WW030L01IP
PB0140DBO
FB010L17IP
ZSDTTL02IF
DATABASETSWTK
FORMATFILEPRZ050
WSKD
WSTM
EZ0450P
WORKSTATIONGKAI120SI
ZSNHD
PG5705P
ZSDMI
ZSSTML6
GO
FB010L51IP
FB010L56IP
WD010L03IP
HCLST2
WW030L01
ショリ
ZSSKW
FB020L03IP
FB010L71IP
FB000L01UP
FB010L05IP
FC010L03UP
FC010L11UP
FC010L16UP
FC010L29UP
FB010L99UP
EZ0450PDO
JSIMSP
FA110L01IP
FA140L01IP
FC060
FC030L21UP
WD030L01IP
WC031L01IP
WC031L01UP
WC032L01IP
FE030L01IP
WW040L01IP
FC030L32UP
FE010
WE020
FE010L02IP
WE030L01IP
WH580L02IP
PG5700P
PG5750P
WK100
WT010L03IP
EVALUATE
FC030L06UP
PRINTERQPRINT
FA011L01IP
FA070L01IP
WB020
WB030
FB010L13UP
WB070L01IP
WB070L02IP
PB0161D
PB0171D
FB010L18UP
FCFFHCHFKCKFWCWNSFY
FB010L08IP
FB010L08UP
FB010L60UP
FB001L03UP
FB000L03IP
FB000L02UP
FB001L02UP
FB001L02IP
FB010L21IP
FB004
FB000L06UP
FX000
FB010L20UP
FC010L38UP
PD0120P
FB010L12IP
MICHAK
WB050L01IP
FB010L98UP
FD020L03IP
FA130L01IP
WH540
JHNMSP
DA310PD
DB0070P
FC030L02IP
WD010L01IP
FC030L99IP
WD050L01IP
WB050L01UP
WC032L02UP
WH600L01IP
FC030L39UP
FC030L39IP
FC030L38IP
WC032L02IP
FROMFILE
HA100L02UP
FC030L34UP
FC030L34IP
FC030L35IP
WC033L02UP
MAIN060
MAINENTRY
KSREC
PRINTERKAIPRINT3
DATABASEKAIMST
REWRITE
FB010L02UP
FA020L01IP
FA030L01IP
FA050L01IP
FB010L65UP
FB010L06UP
WC080
FB010L32IP
PG5730P
PH5700P
PH5750P
WM030P
WK200L01IP
FB010L71UP
DATABASETSDSL
COMPUTE
CLOSE
FORMATFILEURD2303
PERFORM
APPFNEW
ILE
FORMATFILEPRZ040
ZSSKW2
MAIN010
WRTRTN
WORKSTATIONDZSP120
WSKDA
INITIALIZE
ZSTAN