AS400 RPGの固定形式・自由形式の読み方|F仕様書・D仕様書・C仕様書とREAD・CHAINを保守目線で見る

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仕様書 / SQLDSPPGMREF確認
ファイル定義DSPFFD / DSPPFMDSPFFD・DSPPFM確認
呼び出し関係CALL / CL / ジョブログCL入門
AIで読む時利用・提供の許可を確認し、機密情報を除くRPGソースをAIに読ませる時の注意点

RPGマニュアル・サンプルを探す前に確認する観点

RPGのマニュアルやサンプルを参照する際も、命令単体を覚えるより先に、プログラムの入口、画面、ファンクションキー、ファイル更新、エラー時の戻し方を分けて見ると読みやすくなります。