RPGⅢ→RPGⅣへのコンバートをやってみた。～CVTRPGSRCの仕様紹介～


RPGⅢのソースをRPGⅣ(ILE RPG)のソースに変換してくれるコマンドが[CVTRPGSRC]です。
コマンドは以下を参考にしてください。
```
CVTRPGSRC FROMFILE(TEST/QRPGSRC) FROMMBR(TEST001) TOFILE(*LIBL/QRPGLESRC)
```
(コマンド記述の説明)
ライブラリーTESTのファイルQRPGSRCにあるメンバーTEST001を
ライブラリー*LIBLのファイルQRPGLESRCにコンバートします。

このコマンドに関する詳細は以下のリンク先を参照ください。
　・FFRPG言語徹底解説～ILERPGへのコンバート方法～
　　https://fbicenter.co.jp/blog/20230515_ffrpg-convert
　・RPGソースの変換 (CVTRPGSRC)
　　https://www.ibm.com/docs/ja/i/7.5?topic=ssw_ibm_i_75/cl/cvtrpgsrc.html

# CVTRPGSRCを実行する前にやるべき対策
### 　<font color="DeepPink"> ファイル関連の記述をＩ仕様書の一番下に移動する </font>
　　![CVTRPGSRC10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/edd6763b-da28-c095-1416-da760eddd654.png)
　この位置変更をするだけでコンバート後のソースを再編集する手間がとても減ります。
 　位置変更を行わずにコマンドを実行すると、ファイル関連以下がＤ仕様書に変換されない
  　ケースがとても多く、手動でＤ仕様書に変更する手間が出ます。

# CVTRPGSRCを実行した後に確認するべき記述
### <font color="DeepPink">ファイルに関連する標識の設定位置</font>
　ファイルに関連する標識の記載位置をRPGⅣ用の記述位置に変更する必要があります。
　標識は赤枠部分に記載しないといけないが、位置変更されないケースが多発しています。
　![CVTRPGSRC3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/90c9d9ad-29ef-4223-b6ef-f42df9646b4e.png)

# CVTRPGSRCで正しく変換されないケース例まとめ
CVTRPGSRCでコンバートした後にソースを変更する必要があるケースは複数あります。
筆者の環境で発生パターンが確認できているもので５パターンあります。(2024/09/25時点)
　・ケース１～３：コンパイル時にエラーとなってしまうため修正必須です。
　・ケース４　　：コンパイルエラーは出ませんが、/COPYが展開されてしまいます。
　・ケース５　　：記述は正しくないですがコンパイルは通ります。

##### <font color="DeepPink">ケース１</font>：ファイルに関連する標識を設定する処理と/COPYの並び順
RPGⅣでのソース記述は[/COPY]→[ファイル]となるよう記述を変更してください。
画像の並び順のままでコンパイルすると以下のエラー(*RNF0257)が出ます。 
 ![CVTRPGSRC4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/5eceae21-d2ac-2be0-3c00-7349111a1963.png)
![CVTRPGSRC9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/7e2162c4-7c08-8d0a-9e6e-3b0f88e88355.png)


##### <font color="DeepPink">ケース２</font>：ファイルに関連する標識を設定する処理の問題
　ファイルに付随する標識の記載位置をRPGⅣ用の標識記述位置に変更する必要があります。
 
 RPGⅢ：コマンド実行前のソース
　 ![CVTRPGSRC3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/01fddc51-b9f2-164b-0af9-000a6fdcfcd1.png)
RPGⅣ：コマンド実行直後のソース（標識は赤枠部分に記載しないといけないためエラー）
　![CVTRPGSRC3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/90c9d9ad-29ef-4223-b6ef-f42df9646b4e.png)

##### <font color="DeepPink">ケース３</font>：同一テーブルに関する記載がＥ仕様書、Ｉ仕様書に記載がある場合
/COPY内のフィールドに対する設定を行う場合は高確率で不具合が出ます。

 RPGⅢ：コマンド実行前のソース   
![CVTRPGSRC5-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/c442d8ae-2df5-cc3c-80d8-6983a062f159.png)
RPGⅣ：コマンド実行後のソース(旧Ｅ仕様書・旧Ｉ仕様書のどちらの記述も残ってしまう)
![CVTRPGSRC5-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/5aef1d3d-aab5-9ebe-592d-f982e866b03c.png)
（※/COPY展開[*YES]にすると問題は解消しますが、/COPYの中身が展開され、
　　ＰＧＭ上で固定記載となるため、/COPYの記述である意味がなくなります)

##### <font color="DeepPink">ケース４</font>：RPG3のソースタイプが[RPT]
 ソースタイプが[ＲＰＴ]の場合はコピー・メンバーの拡張を[*NO]にしても/COPY部分が
 強制的に展開されます。※コンパイルは通ります。
![CVTRPGSRC6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/10d4826a-022e-eaf8-3a81-a05da50b293b.png)
 
##### <font color="DeepPink">ケース５</font>：データストラクチャ(ＤＳ)の設定が/COPYより上に記述されている
　/COPY部分はＤ仕様書になるはずですがコンバートされないケースがあります。
 　※コンパイルは通ります。
 　 RPG3：コマンド実行前のソース 
　![CVTRPGSRC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/8b02fce5-0e68-8890-c61c-827d3b1c990c.png)
 ***