はじめに
この記事は、株式会社スピードリンクジャパン Advent Calendar 2025 の2日目の記事です。
前回の記事では、ライブラリの簡単なコピーの例を説明しました。
コピーでは既存のライブラリに修正した最新版のライブラリの内容をコピーの処理を利用して繁栄したりします。
そこで、今回は反映したものがちゃんと修正したものとあっているかを確認するために必要な2つのライブラリの比較(コンペア)について紹介します。
コンペアの主役:ユーティリティ ISRSUPC
JCLでファイル(ライブラリメンバー)の比較を行うために、メインフレームで標準的に使われるユーティリティが ISRSUPC です。
ISRSUPC を使った JCL の基本構造コンペア用の JCL は、以下の3つの DD ステートメントで、「比較対象1(新しい方)」「比較対象2(古い方)」「結果の出力先」を明確に指定します。
//COMPARE JOB MSGCLASS=H,NOTIFY=&SYSUID
//STEP01 EXEC PGM=ISRSUPC,PARM=(CHNGL,LINECMP,'')
//NEWDD DD DISP=SHR,DSN=USER.DUMMY.DATA.JCL(MEMBER01) <-- 反映元ファイル
//OLDDD DD DISP=SHR,DSN=USER.TEST.DATA.JCL(MEMBER01) <-- 反映先ファイル
//OUTDD DD SYSOUT=* <-- 比較結果の出力
ステップごとの解説
A. EXEC ステートメント:実行プログラムとオプション
//STEP01 EXEC PGM=ISRSUPC,PARM=(CHNGL,LINECMP,'')
・PGM=ISRSUPC: 比較を行うプログラムを指定しています。
・PARM の設定: 比較の動作オプションをプログラムに渡します。
・CHNGL: 変更された行(差分)だけをレポートに出力するように指示します。
・LINECMP: 行単位で比較を行います。
B. DD ステートメント:比較対象の指定(NEWDD と OLDDD)
ISRSUPC は、比較するファイルを読み込むために、以下の特定の DD 名を要求します。
| DD名 | 役割 | ポイント |
|---|---|---|
| NEWDD | 新しいファイル | 比較対象の最新版 |
| OLDDD | 古いファイル | 比較の基準となるファイル(リリース済みのバージョンなど) |
DISP=SHR を使う理由:どちらのファイルも、単に読み込むだけで内容を書き換えるわけではありません。そのため、前回学んだ DISP=SHR (共有利用) を指定するのが適切です。これにより、他のジョブが同じファイルを読み込んでも問題ありません。
C. DD ステートメント:結果の出力(OUTDD)
//OUTDD DD SYSOUT=*
・OUTDD: ISRSUPC が作成する比較結果レポートの出力先を指定します。
・SYSOUT=*: ジョブの出力リスト(スプール)に結果を出す指示です。実行後、ジョブのログを確認すれば、差異レポートが見られます。
実行結果のイメージ
JCLが実行され、ISRSUPC が比較を完了すると、OUTDD に以下のようなレポートが出力されます。
レポートには、行の左側に記号が付いて、どこが変わったかを示します。
・I (Insert): 新しいファイルに追加された行
・C (Change): 新旧で内容が変わった行
・D (Delete): 古いファイルから削除された行
まとめ
ライブラリメンバーの比較には PGM=ISRSUPC を使います。
NEWDD と OLDDD で比較対象を指定します。
DISP=SHR で安全に読み込みます。
このコンペア処理を応用すれば、PROC(カタログ式)プロシージャで一度の実行で複数のファイルを比較できます。