AS400 / IBM i のRPG保守で最初につまずくのは、固定形式、自由形式、F仕様書、D仕様書、C仕様書、READ、CHAIN、EVAL、IF、CALLなどが一度に出てくることです。新しくRPGを書く前に、現場ではまず既存ソースを読み、どのファイルを読んで、どの条件で分岐し、どこで更新しているかを把握する必要があります。
この記事では、RPGを開発教材としてではなく、保守担当者が既存ソースを読むための順番として整理します。細かい文法を全部覚える前に、事故を避けるために見る場所を決めるのが目的です。
RPG IVの同じ役割を固定形式と自由形式で見比べる
固定形式では仕様書種別と桁位置、自由形式では宣言の名前と区切りを手がかりにします。以下は読み場所の対応であり、既存ソースを機械的に置換してよいという意味ではありません。
| 役割 | 固定形式で探すもの | 自由形式で探すもの |
|---|---|---|
| 制御オプション | H仕様書 | CTL-OPT |
| ファイル宣言 | F仕様書 | DCL-F |
| 単独変数・データ構造 | D仕様書 | DCL-S・DCL-DS |
| 計算・条件分岐 | C仕様書 | 代入文、IF、READ、CHAINなどの文 |
| サブプロシージャー | P仕様書 | DCL-PROC・END-PROC |
たとえば変数への代入を読む時は、固定形式のEVALの対象と式を確認し、自由形式では次のように読みます。これは説明用の断片で、単独でコンパイルするプログラムではありません。
dcl-s itemCount int(10) inz(0);
itemCount = itemCount + 1;セミコロンまでが1文です。先頭行が**FREEの完全自由形式と、桁位置の制限が残るソース中の自由形式を区別します。利用できる構文はコンパイラーの版・PTFで確かめてください。IBM公式:Free-Form Statements、自由形式宣言の対応
最初に全体の入口を見る
RPGソースを開いたら、いきなりC仕様書の細かい処理に入らず、まずプログラム名、説明、呼び出し元、使っているファイル、更新有無を確認します。変更対象のプログラムが単体で動いているのか、CLや別RPGから呼ばれているのかで、影響範囲が変わります。
| 見る場所 | 確認すること | 関連ページ |
|---|---|---|
| F仕様書 | 使用ファイル、入力か更新か、表示ファイルか印刷ファイルか | DSPFFD / DSPPFM |
| D仕様書 | 変数、データ構造、桁数、日付や金額の扱い | RPG保守の最初に見るポイント |
| C仕様書 | READ、CHAIN、IF、EVAL、CALL、UPDATE、WRITE | コンパイルリストの読み方 |
| 呼び出し関係 | CL、別RPG、バッチ、メニューから呼ばれているか | DSPPGMREF影響調査 |
| 実行結果 | ジョブログ、スプール、更新ファイル、エラーメッセージ | ジョブログ確認手順 |
固定形式RPGで見るポイント
古いAS400現場では、固定形式RPGが残っていることがあります。ここでのF/D/C仕様書は主にRPG IVの説明です。古いRPG IIIなどは仕様書や構文が異なるため、まずソース種別を確認してください。固定形式では、桁位置や仕様書の種類が意味を持つため、見慣れない人には読みづらく感じます。まずは、F仕様書でファイルを確認し、D仕様書で変数を確認し、C仕様書で処理の流れを見る、という順番を固定します。
- F仕様書でファイル名と更新有無を見る
- D仕様書で桁数、データ構造、作業変数を見る
- C仕様書でREAD、CHAIN、IF、CALL、UPDATEを探す
- コメントだけで判断せず、実際の処理を読む
- 変更前にDSPPGMREFで参照関係を確認する
自由形式RPGで見るポイント
自由形式RPGは、他の言語に近く見えるため読みやすく感じることがあります。ただし、ファイルI/O、標識、既存のデータ構造、旧来の固定形式との混在に注意が必要です。自由形式だから安全、固定形式だから危険、という話ではありません。どちらも、何を読んで何を更新しているかを見ることが重要です。
特に、SQLを使っているRPG、画面ファイルを扱うRPG、バッチ更新を行うRPGでは、見た目よりも業務影響が大きいことがあります。販売管理では、受注、出荷、在庫、売上、請求のどこに関わるかを必ず確認します。
READとCHAINの違いを意識する
RPG保守でよく出るのが READ と CHAIN です。READは順番に読む処理で、夜間バッチや一覧処理でよく見ます。CHAINはキーまたは相対レコード番号を指定して取得する処理です。ファイル定義と検索引数を確認して読み方を判断します。
| 命令 | 見るポイント | 保守での注意 |
|---|---|---|
| READ | どのファイルを順番に読んでいるか | 処理件数、終了条件、対象期間を確認する |
| CHAIN | キーまたは相対レコード番号による取得 | ファイル定義、検索引数、見つからない時の処理を確認する |
| UPDATE | どのファイルを更新しているか | 本番影響、バックアップ、テスト観点を確認する |
| WRITE | 何を追加しているか | 重複、採番、再実行時の扱いを見る |
| CALL | どのプログラムへ処理を渡すか | 呼び出し先の影響範囲も確認する |
コンパイル前後で見ること
RPGを修正したら、コンパイルが通っただけで終わりにしません。コンパイルリストで重大度、RNF番号、オブジェクト作成結果を確認し、実行時にはジョブログ、スプール、更新ファイル、画面表示、帳票出力を確認します。
単体テストでは、正常系だけでなく、該当データなし、マスタ未登録、ゼロ件、最大桁、締め済み、再実行などを確認します。テスト観点は RPG/CL修正後の単体テスト手順 も参考にしてください。
AIに読ませる時の注意
RPGソースをCodexなどのAIに読ませると、処理の要約やテスト観点の整理に役立ちます。ただし、本番データ、顧客名、会社名、ユーザー名、ライブラリ名、実ファイル名をそのまま出すのは避けます。社内規程・契約で提供を許可された範囲に限り、必要な情報をサンプル化・マスキングして使います。匿名化だけでは提供許可の代わりになりません。
安全な使い方は、AS400のRPGソースをAIに読ませる時の注意点 と RPG/CLを扱う研修内容・料金 にまとめています。
RPGを読む目的を保守作業に戻す
固定形式・自由形式の読み方を覚える目的は、ソースを読むこと自体ではなく、障害原因、影響範囲、データ更新、後続処理を判断することです。保守全体の流れはAS400保守・運用完全ガイド、AIに読ませる時の注意点はRPGソースをAIに読ませる時の注意点で確認できます。
RPGを読んだ後は影響調査へ進む
RPGの固定形式・自由形式を読めるようになったら、次は「どのファイルを読んでいるか」「どのプログラムから呼ばれるか」「修正するとどの帳票・バッチ・画面に影響するか」を調べます。ソースを読むだけで終わらせず、DSPPGMREF、DSPFFD、DSPDBR、ジョブログ、コンパイル結果までつなげると保守判断が安定します。
| 確認したいこと | 見るもの | 関連ページ |
|---|---|---|
| 参照ファイル | DSPPGMREF / F仕様書 / SQL | DSPPGMREF確認 |
| ファイル定義 | DSPFFD / DSPPFM | DSPFFD・DSPPFM確認 |
| 呼び出し関係 | CALL / CL / ジョブログ | CL入門 |
| AIで読む時 | 利用・提供の許可を確認し、機密情報を除く | RPGソースをAIに読ませる時の注意点 |
RPGマニュアル・サンプルを探す前に確認する観点
RPGのマニュアルやサンプルを参照する際も、命令単体を覚えるより先に、プログラムの入口、画面、ファンクションキー、ファイル更新、エラー時の戻し方を分けて見ると読みやすくなります。
- 保守の読み方から確認する: RPG保守入門
- 修正前の影響範囲を見る: RPG/CL影響調査チェックリスト
- コンパイルエラーを見る: RPGコンパイルリストの読み方
- AIに読ませる場合の注意点: RPGソースをAIに読ませる時の注意点
