RPG実行時エラーを実例で追う場合は、RNXエラーの調査例 を確認してください。
RPG保守でよく確認するCHAIN、READ、SETLL、EXSR、CALLを中心に、固定形式とフリーフォームの両方で読み方を確認できる構成にしています。
AS400 / IBM i のRPG保守では、最初から細かい命令を追いかけるより、プログラムが「どのファイルを読み、どこで判断し、どこを更新し、どの処理を呼び出しているか」をつかむことが大切です。RPGは古い固定形式のソースも多く残っていますが、業務ロジックが集中しているため、保守担当者にとって避けて通れない言語です。
この記事では、AS400という現場でよく使われる呼び方に合わせながら、現在のIBM i環境でRPGを読む時の確認ポイントを整理します。固定形式、フリーフォーム、ファイル定義、CHAIN、READ、SETLL、EXSR、CALL、ジョブログ、コンパイルリストまで、保守で実際に見る順番に沿って説明します。
RPG保守で最初に見る全体像
RPGソースを開いたら、まず処理の入口と出口を確認します。どのCLから呼ばれるのか、どのパラメータを受け取るのか、どの物理ファイルや論理ファイルを使うのか、更新系なのか参照系なのかを先に押さえると、細かい命令の意味が読みやすくなります。
| 見るもの | 確認すること | 保守での意味 |
|---|---|---|
| 呼び出し元 | CL、メニュー、別RPG、ジョブスケジュール | いつ、誰が、どの条件で実行するかを確認する |
| パラメータ | ENTRY PLIST、*ENTRY PLIST、プロシージャ引数 | 画面やCLから渡される値を確認する |
| ファイル定義 | PF、LF、DSPF、PRTF、更新可否 | 参照・更新・帳票出力の対象を見分ける |
| 主処理 | CHAIN、READ、SETLL、IF、SELECT、EXSR | 業務判定と処理順序を追う |
| 異常時情報 | ジョブログ、RNX、CPF、コンパイルリスト | 障害原因と修正箇所を絞り込む |
固定形式とフリーフォームの違い
古いRPGでは、桁位置に意味がある固定形式のソースがよく使われます。F仕様書、D仕様書、C仕様書のように、行の種類と桁位置で意味を判断します。一方、比較的新しいRPGではフリーフォームで書かれていることもあり、JavaやC系言語に近い見た目で読めます。
現場では固定形式とフリーフォームが混在していることがあります。古い処理を一部だけ修正している、ILE RPGへ移行途中、共通部品だけ新しい書き方になっている、といった状態です。見た目が違っても、読むべき軸は同じで、ファイル、キー、条件分岐、更新、呼び出し関係を順番に確認します。
FORDERPF UF E K DISK C ORDERKEY CHAIN ORDERPF C IF %FOUND C EXSR UPDSUB C ENDIF
chain orderKey orderFile; if %found(orderFile); exsr updateSub; endif;
RPGソースで最初に見る場所
固定形式のRPGでは、F仕様書でファイル、D仕様書で変数やデータ構造、C仕様書で計算や条件分岐を見ることが多いです。古いソースではENTRY PLISTやPARMで受け取る値、*INxxのインジケータ、LRの扱いも重要です。
| 場所 | 見る内容 | 注意点 |
|---|---|---|
| F仕様書 | 使用ファイル、入出力区分、キー付きアクセス | 更新ファイルか参照ファイルかを分ける |
| D仕様書 | 変数、データ構造、配列、外部記述参照 | 桁数、型、日付、符号の扱いを見る |
| C仕様書 | CHAIN、READ、IF、EXSR、CALL、UPDATE | 業務ロジックと更新順序を追う |
| サブルーチン | BEGSR、ENDSR、EXSR | 処理名だけで判断せず、呼び出し元も確認する |
| 呼び出し部 | CALL、CALLP、PARM | 別プログラム側の更新やエラーも見る |
保守でよく見る命令
| 命令 | 意味 | 保守で見るポイント |
|---|---|---|
| CHAIN | キーで1件を検索する | %FOUND、エラー時処理、対象LFのキーを確認する |
| READ | 順にレコードを読む | ループ終了条件、読み飛ばし条件を見る |
| READE | 同じキーの範囲を読む | SETLLとの組み合わせ、キーの範囲を見る |
| SETLL | 読み始め位置をセットする | 次のREAD/READEでどこから読むかを確認する |
| EXSR | サブルーチンを呼ぶ | 更新・印刷・エラー処理が隠れていないか見る |
| CALL / CALLP | 別プログラムやプロシージャを呼ぶ | 呼び出し先の更新、パラメータ、戻り値を見る |
| EVAL | 値を代入する | 桁あふれ、ゼロ埋め、日付変換を確認する |
| MONITOR | 例外処理をまとめる | ON-ERRORで握りつぶしていないか確認する |
| UPDATE / WRITE / DELETE | ファイルを更新する | 業務影響、ロック、再実行可否を確認する |
ファイル処理で見るポイント
RPG保守で一番危ないのは、どのファイルをどのライブラリから見ているかを確認しないまま修正することです。同じ名前のファイルが本番、検証、退避ライブラリに存在することがあります。*LIBLで参照している場合は、実行ジョブのライブラリリストを確認します。
物理ファイルと論理ファイルの違いも重要です。RPGがLFを使っている場合、キー順や選択条件はLF側で決まります。CHAINやSETLLが期待通りに動かない時は、RPGだけでなくDDS、PF/LF、アクセスパスも確認します。基本は AS400の物理ファイルと論理ファイルの違い でも整理しています。
ジョブログ・コンパイルリストとのつなぎ
RPGの障害調査では、ソースだけを見ても原因が分からないことがあります。実行時エラーならジョブログにRNX(RPG実行時エラーのメッセージID)やCPFのメッセージが出ます。コンパイルエラーならコンパイルリストやスプールに行番号、エラー内容、参照できないファイルやフィールドが出ます。
| 状況 | 見るもの | 確認すること |
|---|---|---|
| 実行時に落ちる | ジョブログ | RNX、CPF、MCH、直前のメッセージ |
| MSGWで止まる | WRKACTJOB、DSPJOBLOG | 応答待ちのメッセージと対象プログラム |
| コンパイルできない | コンパイルリスト | エラー行、参照ファイル、フィールド名、桁数 |
| データが合わない | 入力ファイル、更新ファイル、ジョブログ | キー、抽出条件、途中更新、再実行の有無 |
RPG保守で危ない見落とし
- 本番と検証でライブラリリストが違う
- 同じファイル名が複数ライブラリに存在する
- *INxxなどのインジケータが別処理でも使われている
- CHAIN後の%FOUNDやエラー処理を見落とす
- EXSRの中で更新や帳票出力をしている
- CALL先のプログラムで業務更新が発生している
- レコードロックやコミット制御の影響を見ていない
RPG保守を研修テーマにする場合
RPG保守は、命令単位で覚えるだけでは現場対応につながりにくい分野です。CHAIN、READ、SETLL、EXSRを読む時も、ファイル定義、キー項目、更新有無、ジョブログ、業務影響を一緒に確認することで、修正前の判断が安定します。
既存RPGやCLを題材にして読み方を整理したい場合は、AS400 / IBM i Codex研修の内容を見る から、法人向け研修の進め方を確認できます。
まとめ
AS400 / IBM i のRPG保守では、命令を単体で覚えるより、ファイル、キー、条件分岐、更新、呼び出し関係、ジョブログをつなげて読むことが重要です。固定形式でもフリーフォームでも、見る順番を決めれば調査は安定します。
RPG単体で完結しない処理も多いため、呼び出し元の AS400のCL、実行時の ジョブログ確認、オブジェクトの置き場所である ライブラリとオブジェクト もあわせて確認すると、保守調査の精度が上がります。

