IBM i / AS400 解析・リバース — 最良の手順と手法(匿名化公開用)
| 手順書の柱 | いま手元にあるもの | 2026-07時点の最良アクション |
|---|---|---|
| §3 システム情報 | 部分的 | 影響調査の直前に必要なら追加。レポート横展開のブロッカーではない |
| §4 オブジェクト棚卸し | DSPOBJD系あり | 不足オブジェクトはDSPPGMREF差分で拾う |
| §5 ソース収集 | SRC正本あり | 空白を壊さない。再取得時も固定形式を維持 |
| §6 RPG解析 | Cursor+Bob+列パーサ | III/IV列パーサ必須。F仕様のみはPARTIAL |
| §7 コンパイルリスト | 未整備が多い | 動的CALL・コピー欠落が疑われる機能だけ優先 |
| §8 PF/LF | DSPFFD一部・DBR不足 | Priority A: DSPDBR |
| §10 DSPPGMREF | CSVあり(約3189PGM) | 鮮度確認+WHFUSGはPARTIAL補助のみ |
| §11 実行時 | ほぼ未取得 | 代表5機能の開ファイル+JOBD LIBL |
promote_partial_to_confirmed.py(列パーサ)enrich_section51_wireframes.pyこの手順書は、IBM i上の既存システムについて、次の内容を具体的かつ再現可能な形で解析するために必要な情報、取得手段、作業手順、確認観点、成果物を整理したものである。
IBM iでは、ソースコードに書かれた名前と、実行時に使用される実体が一致しない場合がある。したがって、次の4層を関連付けて解析する。
ソースコード
↓
コンパイル済みオブジェクト
↓
PF・LF・SQL・外部資源
↓
実行時ジョブ環境
本書では、解析結果を必ず次の3段階に分類する。
| 判定 | 意味 |
|---|---|
| 確定 | ソース、オブジェクト情報、実行ログ等の複数の根拠で確認できる |
| 推定 | 静的な参照や命名規則から可能性が高いが、実行確認が不足している |
| 未確定 | 動的CALL、動的SQL、OVRDBF、外部設定等により実行時確認が必要 |
フェーズ1 調査範囲と環境の確定
フェーズ2 オブジェクトとソースの棚卸し
フェーズ3 データベース構造の取得
フェーズ4 プログラム構造と依存関係の静的解析
フェーズ5 コンパイル条件と生成物の確認
フェーズ6 ジョブ単位の実行時解析
フェーズ7 業務データフローと画面・帳票フローの作成
フェーズ8 差異、リスク、不明点の整理
フェーズ9 再実行可能な解析パッケージの作成
解析を開始する前に、次を文書化する。
| 項目 | 記録内容 |
|---|---|
| 対象システム名 | 業務名、サブシステム名、アプリケーション名 |
| 対象環境 | 開発、検証、本番、災害対策、移行先 |
| 対象LPAR/システム | システム名、区画名 |
| 対象ライブラリー | プログラム、DB、ソース、共通、製品ライブラリー |
| 対象期間 | 現行版の基準日時、ログ取得期間 |
| 対象ジョブ | 対話、バッチ、サーバー、定期ジョブ |
| 調査目的 | 障害解析、移行、改修、再構築、文書化、監査 |
| 機密区分 | 個人情報、取引情報、認証情報、秘密鍵等 |
| 出力先 | IFS、共有フォルダー、暗号化領域等 |
| 取得担当者 | 実行者、確認者、承認者 |
| 必要権限 | オブジェクト参照、スプール参照、ジョブ参照等 |
OUTPUT(*OUTFILE)の出力先には原則としてQTEMPまたは調査専用ライブラリーを使用する。DSPJRNは期間・対象を絞る。DSPPGMREF PGM(LIB/*ALL)等の一括取得は対象件数を確認してから行う。IBM iのジョブは原則として次の組合せで識別する。
ジョブ番号/ユーザー/ジョブ名
必ず完全修飾ジョブ名、開始日時、ジョブ種別を記録する。
完全修飾ジョブ名
ジョブ種別
ユーザー
現行ユーザー
サブシステム
ジョブ記述
実行待ち行列
出力待ち行列
ジョブ開始・終了時刻
ジョブ状態
ライブラリー・リスト
現行ライブラリー
ジョブCCSID
オーバーライド
呼出スタック
オープンファイル
ロック
コミットメント制御
ジョブログ
スプール
CPU時間
一時記憶域
終了コード
DSPJOB JOB(123456/USER/JOBNAME) OPTION(*ALL)
状況に応じて、ライブラリー・リスト、オープンファイル、呼出スタック、ファイルオーバーライド等を確認する。
対話式のWRKJOB/DSPJOB画面から情報を取得する場合も、画面コピーだけでなく、取得日時とジョブ状態を記録する。
最低限、次の区分を保持する。
システム部
製品ライブラリー
現行ライブラリー
ユーザー部
| 記述上の名前 | 修飾 | 実行時実体 | 根拠 |
|---|---|---|---|
| ORDERPF | 非修飾 | TESTDB/ORDERPF | LIBL先頭+DSPJOB |
| APPLIB/ORD001 | 修飾 | APPLIB/ORD001 | ソースに明記 |
OVRDBF FILE(ORDERPF)
TOFILE(TESTDB/ORDERPF)
MBR(*FIRST)
OVRSCOPE(*JOB)
取得する属性:
元ファイル名
TOFILE
TOFILEライブラリー
MBR
POSITION
SHARE
LVLCHK
OVRSCOPE
SEQONLY
WAITRCD
SECURE
実施元プログラム
実施時刻
削除時刻
DSPPGMREFのコンパイル時参照を取得する。QTEMPはジョブごとに独立している。次を追跡する。
作成元
作成コマンド
作成時刻
DDS/LIKEFILE元
メンバー
データ投入元
利用プログラム
削除時点
ジョブ終了時点
QTEMP/WORKを固定的な共有テーブルとしてモデル化しない。
呼出スタックから取得する。
プログラム
モジュール
プロシージャ
ステートメント
呼出順
ILE/OPM境界
活動化グループ
障害時は、最上位のエラープログラムだけでなく、業務開始点から失敗点までのスタックを保存する。
次を記録する。
RPG名
実ファイル
ライブラリー
メンバー
レコード様式
オープンモード
共有
オーバーライド
位置
ロック状態