12. 手順書抜粋 — 収集・依存・実行時

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

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

対外公開版(匿名化済み) — 顧客名・案件名・固有ライブラリ/パス/プログラム名は一般化しています。用語は青点線にマウスオーバーで定義を表示。巻末「用語集」も参照。
この章の位置づけ: 手順書 v1.1 から、棚卸し・ソース収集・コンパイル・依存・実行時のうち、 今回のリバースで特に効く章を連結収録する(§4・5・7・一部は章7/10と重複可)。

§4 オブジェクト棚卸し

4. オブジェクト棚卸し

4.1 対象オブジェクト

最低限、次のオブジェクトタイプを収集する。

*PGM      プログラム
*SRVPGM   サービスプログラム
*MODULE   モジュール
*FILE     PF、LF、DSPF、PRTF、SAVF等
*DTAARA   データエリア
*DTAQ     データキュー
*MSGF     メッセージファイル
*CMD      コマンド
*JOBD     ジョブ記述
*JOBQ     ジョブ待ち行列
*OUTQ     出力待ち行列
*SBSD     サブシステム記述
*BNDDIR   バインディング・ディレクトリー
*USRSPC   ユーザースペース
*USRQ     ユーザー待ち行列
*JRN      ジャーナル
*JRNRCV   ジャーナルレシーバー
*SQLPKG   SQLパッケージ

4.2 必要な属性

システム名
ライブラリー名
オブジェクト名
オブジェクトタイプ
拡張属性
所有者
作成日時
最終変更日時
最終使用日時
使用日数カウント
サイズ
ASP
監査属性
権限
ソース情報
コンパイラー情報
リリース情報
オブジェクト説明

4.3 取得手段

SQL推奨例

SELECT *
  FROM TABLE(
       QSYS2.OBJECT_STATISTICS(
         OBJECT_SCHEMA => 'APPLIB',
         OBJTYPELIST   => '*ALL'
       )
  );

複数ライブラリーを対象にするときは、ライブラリーごとに取得し、結果へSYSTEM_NAMEEXTRACTED_ATを追加する。

CLによる補完

DSPOBJD OBJ(APPLIB/*ALL) OBJTYPE(*ALL)
        OUTPUT(*OUTFILE)
        OUTFILE(QTEMP/OBJD)

4.4 手順

  1. 対象ライブラリー一覧を確定する。
  2. オブジェクト一覧を取得する。
  3. *PGM*SRVPGM*MODULE*FILEを優先して分類する。
  4. 同名異ライブラリーのオブジェクトを抽出する。
  5. ソース情報がないオブジェクトを抽出する。
  6. 長期間未使用のオブジェクトを候補として分類する。
  7. オブジェクト説明が空欄の資産を抽出する。
  8. 本番にのみ存在するオブジェクト、開発にのみ存在するオブジェクトを比較する。

4.5 注意


§5 ソースメンバーの収集

5. ソースメンバーの収集

5.1 対象ソースタイプ

RPG
RPGLE
SQLRPGLE
CLP
CLLE
SQLCL
CBL
CBLLE
SQLCBLLE
PF
LF
DSPF
PRTF
ICFF
BND
CMD
MENU
TXT
COPY

拡張子やソースタイプが誤っている資産もあるため、本文による判定も行う。

5.2 必要なメタデータ

項目内容
ソースライブラリー例:DEVLIB
ソース物理ファイル例:QRPGLESRC
メンバー名例:ORD001
ソースタイプRPGLE等
メンバー説明業務説明
作成日時初回作成
最終変更日時最新変更
CCSIDソース文字コード
レコード長固定形式RPGでは重要
行番号ソース順序番号
行変更日変更履歴の補助
抽出日時取得時点
ハッシュ値同一性確認

5.3 取得手段

IBM i Access Client Solutions、FTP/SFTP、IFSへのコピー、SQL Services、RDi等を利用できる。

ソースをストリームファイル化する場合は、次を保持する。

元ライブラリー
元ソース物理ファイル
元メンバー
元CCSID
変換後CCSID
改行コード
抽出コマンド
抽出日時
SHA-256

5.4 /COPY/INCLUDEの収集

RPGソース本文から次を抽出する。

/COPY
/INCLUDE
COPYRIGHT等と誤認しないための構文位置
相対パス
ライブラリー修飾
ソースファイル修飾
条件コンパイル
/IF
/ELSEIF
/ELSE
/ENDIF
/DEFINE
/UNDEFINE

必須手順

  1. 直接参照されるCOPYメンバーを取得する。
  2. COPYメンバー内からさらに参照されるCOPYを再帰的に取得する。
  3. 循環参照を検出する。
  4. 同名COPYのライブラリー差を確認する。
  5. コンパイル時のINCDIRRPGPPOPTDEFINEを確認する。
  6. SQLRPGLEではSQLプリコンパイル前後の扱いを確認する。
  7. 展開済みソースを別ファイルとして作成する。
  8. 元ソースと展開済みソースを混同しない。

5.5 ソースが存在しない場合

次の根拠を組み合わせる。

ソースがない場合は、処理内容を「確定」とせず、根拠ごとに信頼度を記録する。


§7 コンパイル条件とコンパイルリスト

7. コンパイル条件とコンパイルリスト

7.1 なぜ必要か

同じソースでも、コンパイルパラメーターによって動作や参照先が変わる。

7.2 取得するコマンドとパラメーター

CRTBNDRPG
CRTRPGMOD
CRTPGM
UPDPGM
CRTSRVPGM
UPDSRVPGM
CRTSQLRPGI

主な確認項目:

SRCFILE
SRCMBR
TGTRLS
DBGVIEW
OPTION
OUTPUT
GENLVL
REPLACE
DFTACTGRP
ACTGRP
BNDDIR
BNDSRVPGM
COMMIT
CLOSQLCSR
DATFMT
TIMFMT
LANGID
SRTSEQ
CCSID
ALWNULL
DEFINE
RPGPPOPT
INCDIR
DFTRDBCOL
USRPRF
AUT
STGMDL
TERASPACE

7.3 コンパイルリストから取得する情報

推奨

コンパイル時に可能ならクロスリファレンスを出力する。

CRTBNDRPG PGM(APPLIB/ORD001)
           SRCFILE(SRCLIB/QRPGLESRC)
           SRCMBR(ORD001)
           OPTION(*XREF)
           OUTPUT(*PRINT)

本番資産を再コンパイルして情報取得するのではなく、既存スプールまたは開発環境で再現する。再コンパイルによってオブジェクトを置換しないこと。


← 11. 手順書抜粋 — RPG解析編(§6)13. 用語集 →