10. 手順書との差分・いま採る最短路

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

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

対外公開版(匿名化済み) — 顧客名・案件名・固有ライブラリ/パス/プログラム名は一般化しています。用語は青点線にマウスオーバーで定義を表示。巻末「用語集」も参照。
この章の目的: 社内キュレーション手順書(v1.1)は「理想の全量収集」を書く。 本プロジェクトは既に SRC / DSPPGMREF / レポート / CRUD / 定義書がある。 今だから分かる最短路は「足りない穴だけを埋め、既存成果物の再生成順を守る」こと。

理想手順書 vs いまの実務

手順書の柱いま手元にあるもの2026-07時点の最良アクション
§3 システム情報部分的影響調査の直前に必要なら追加。レポート横展開のブロッカーではない
§4 オブジェクト棚卸しDSPOBJD系あり不足オブジェクトはDSPPGMREF差分で拾う
§5 ソース収集SRC正本あり空白を壊さない。再取得時も固定形式を維持
§6 RPG解析Cursor+Bob+列パーサIII/IV列パーサ必須。F仕様のみはPARTIAL
§7 コンパイルリスト未整備が多い動的CALL・コピー欠落が疑われる機能だけ優先
§8 PF/LFDSPFFD一部・DBR不足Priority A: DSPDBR
§10 DSPPGMREFCSVあり(約3189PGM)鮮度確認+WHFUSGPARTIAL補助のみ
§11 実行時ほぼ未取得代表5機能の開ファイル+JOBD LIBL

「今だから」の最短サイクル(1機能または1バッチ)

  1. キューから1〜5件を取る(400件一括禁止)
  2. Cursor中間ファイルが古ければ再抽出(章3プロンプト)
  3. Bobでレポート生成(章4)。PARTIALはSRC全行精読
  4. Codex査読(章5)。重大指摘が残るうちは次バッチへ進まない
  5. 手元で promote_partial_to_confirmed.py(列パーサ)
  6. 画面機能なら enrich_section51_wireframes.py
  7. バッチ区切りで CRUD → 定義書 → リンク → HTML をまとめて更新
  8. PARTIALは章8の実機リストへ載せる(推測確定しない)

プロンプト運用の「今だから分かる」改善点

手順書 v1.1 から抜粋 — §0〜1(目的と進め方)

0. この手順書の目的

この手順書は、IBM i上の既存システムについて、次の内容を具体的かつ再現可能な形で解析するために必要な情報、取得手段、作業手順、確認観点、成果物を整理したものである。

  1. CLコマンドの実行内容と実行結果
  2. RPGプログラムの処理内容、書き方、実装手法
  3. プログラム、ファイル、サービスプログラム等の依存関係
  4. 物理ファイル(PF)と論理ファイル(LF)の関係
  5. SQLテーブル、ビュー、索引、トリガー等との関係
  6. ライブラリー・リストやオーバーライドによる実行時の名前解決
  7. ジョブ、メッセージ、スプール、コミットメント制御等の実行時挙動
  8. 既存資産の改修、移行、再構築、影響調査に必要な根拠の作成
  9. AIによる解析に投入できる構造化データの作成

IBM iでは、ソースコードに書かれた名前と、実行時に使用される実体が一致しない場合がある。したがって、次の4層を関連付けて解析する。

ソースコード
    ↓
コンパイル済みオブジェクト
    ↓
PF・LF・SQL・外部資源
    ↓
実行時ジョブ環境

本書では、解析結果を必ず次の3段階に分類する。

判定意味
確定ソース、オブジェクト情報、実行ログ等の複数の根拠で確認できる
推定静的な参照や命名規則から可能性が高いが、実行確認が不足している
未確定動的CALL、動的SQL、OVRDBF、外部設定等により実行時確認が必要

1. 解析全体の進め方

1.1 推奨フェーズ

フェーズ1  調査範囲と環境の確定
フェーズ2  オブジェクトとソースの棚卸し
フェーズ3  データベース構造の取得
フェーズ4  プログラム構造と依存関係の静的解析
フェーズ5  コンパイル条件と生成物の確認
フェーズ6  ジョブ単位の実行時解析
フェーズ7  業務データフローと画面・帳票フローの作成
フェーズ8  差異、リスク、不明点の整理
フェーズ9  再実行可能な解析パッケージの作成

1.2 最初に決めること

解析を開始する前に、次を文書化する。

項目記録内容
対象システム名業務名、サブシステム名、アプリケーション名
対象環境開発、検証、本番、災害対策、移行先
対象LPAR/システムシステム名、区画名
対象ライブラリープログラム、DB、ソース、共通、製品ライブラリー
対象期間現行版の基準日時、ログ取得期間
対象ジョブ対話、バッチ、サーバー、定期ジョブ
調査目的障害解析、移行、改修、再構築、文書化、監査
機密区分個人情報、取引情報、認証情報、秘密鍵等
出力先IFS、共有フォルダー、暗号化領域等
取得担当者実行者、確認者、承認者
必要権限オブジェクト参照、スプール参照、ジョブ参照等

1.3 本番環境での基本原則


手順書 v1.1 から抜粋 — §11 実行時ジョブ解析

11. 実行時ジョブ解析

11.1 ジョブ識別子

IBM iのジョブは原則として次の組合せで識別する。

ジョブ番号/ユーザー/ジョブ名

必ず完全修飾ジョブ名、開始日時、ジョブ種別を記録する。

11.2 必要な情報

完全修飾ジョブ名
ジョブ種別
ユーザー
現行ユーザー
サブシステム
ジョブ記述
実行待ち行列
出力待ち行列
ジョブ開始・終了時刻
ジョブ状態
ライブラリー・リスト
現行ライブラリー
ジョブCCSID
オーバーライド
呼出スタック
オープンファイル
ロック
コミットメント制御
ジョブログ
スプール
CPU時間
一時記憶域
終了コード

11.3 DSPJOB

DSPJOB JOB(123456/USER/JOBNAME) OPTION(*ALL)

状況に応じて、ライブラリー・リスト、オープンファイル、呼出スタック、ファイルオーバーライド等を確認する。

対話式のWRKJOBDSPJOB画面から情報を取得する場合も、画面コピーだけでなく、取得日時とジョブ状態を記録する。

11.4 ライブラリー・リスト

最低限、次の区分を保持する。

システム部
製品ライブラリー
現行ライブラリー
ユーザー部

名前解決記録

記述上の名前修飾実行時実体根拠
ORDERPF非修飾TESTDB/ORDERPFLIBL先頭+DSPJOB
APPLIB/ORD001修飾APPLIB/ORD001ソースに明記

11.5 OVRDBF

OVRDBF FILE(ORDERPF)
        TOFILE(TESTDB/ORDERPF)
        MBR(*FIRST)
        OVRSCOPE(*JOB)

取得する属性:

元ファイル名
TOFILE
TOFILEライブラリー
MBR
POSITION
SHARE
LVLCHK
OVRSCOPE
SEQONLY
WAITRCD
SECURE
実施元プログラム
実施時刻
削除時刻

実行時実体の確定手順

  1. RPGCL上の宣言名を取得する。
  2. DSPPGMREFのコンパイル時参照を取得する。
  3. ジョブのライブラリー・リストを取得する。
  4. ファイルオーバーライドを取得する。
  5. オープンファイル一覧を取得する。
  6. ジョブログのオープン/エラーメッセージを確認する。
  7. 必要ならジャーナルやトレースで更新実体を確認する。
  8. 宣言名、コンパイル時実体、実行時実体を分けて記録する。

11.6 QTEMP

QTEMPはジョブごとに独立している。次を追跡する。

作成元
作成コマンド
作成時刻
DDS/LIKEFILE元
メンバー
データ投入元
利用プログラム
削除時点
ジョブ終了時点

QTEMP/WORKを固定的な共有テーブルとしてモデル化しない。

11.7 呼出スタック

呼出スタックから取得する。

プログラム
モジュール
プロシージャ
ステートメント
呼出順
ILE/OPM境界
活動化グループ

障害時は、最上位のエラープログラムだけでなく、業務開始点から失敗点までのスタックを保存する。

11.8 オープンファイル

次を記録する。

RPG名
実ファイル
ライブラリー
メンバー
レコード様式
オープンモード
共有
オーバーライド
位置
ロック状態

← 9. チェックリスト・禁止事項11. 手順書抜粋 — RPG解析編(§6) →