2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CVTRPGSRCについて

2
Last updated at Posted at 2026-09-14

はじめに

本記事は、IBM iの標準のコマンド「CVTRPGSRC」について、RiSING活動を通して調査した内容をまとめたものです。

CVTRPGSRCについて

IBM iにおいて、RPG IIIのソースコードをRPG IVへ変換するコマンドです。

実行方法

・FROMFILR:変換するRPGソースのライブラリとファイル名を指定します。
・FROMMBR:変換するソースメンバーを指定します。
・TOFILE(*LIBL/QRPGLESRC):変換後の出力ライブラリとファイル名を指定します。
・TOMBR(*FROMMBR):変換後のソースのメンバー名を指定します。

CVTRPGSRC FROMFILE(TSTLIB/QRPGSRC) FROMMBR(*ALL) TOFILE(TSTLIB/QRPGLESRC) LOGFILE(TSTLIB/QRNCVTLG)   

image-1.png

コンバート実行時にはログファイルを作成しておくことで、ログの出力が可能になります。
以下がログファイルを作成するときのコマンドです。

CPYF FROMFILE(QRPGLE/QARNCVTLG) TOFILE(TSTLIB/QRNCVTLG) MBROPT(*REPLACE) CRTFILE(*YES) 

image-3.png

注意点

今回行った検証ではコンバート時にエラーになる事象は存在しませんでした。

検証にてコンバートしたプログラムのコンパイル時に発生したコンパイルエラーなどは以下にまとめています。

シフト文字を含むソース

RPG IIIでは直接シフトコードの値をセットすることなどができますが、RPG IVではX'OE'などのヘキサ16進数は可能だが、直接値をセットする等はエラーになります。
image-4.png

外部ファイル(/COPYまたは/INCLUDE)の入っているもの

RPG IIIのソース内にコピー句(/COPYなど)がある場合、読込先のコピー句メンバーもRPG IVにコンバートしておく必要があります。
コピー句のメンバーを先にコンバートしておくのが確実です。

変数がRPG IVの予約語とかぶっているソース

RPG IVでは、組み込み関数や新しい日付型などが追加されたため、RPG III時代にはすかえていたものがシステム予約語として使えなくなっている場合があります。

エラー発生時にはコンパイルエラーとなった変数を別の変数名にリネームする必要があります。

コンパイル時配列を使用しているソース

RPG IIIのソースファイルとRPG IVのソースファイルではレコード長が異なるため、変換時に配列データの位置がずれてしまったり、途切れたりすることがあります。

エラー発生時には変換後のソース確認し、位置がずれている場合は手動での修正を行う必要があります。

ネストが深い、または巨大なソース

RPG IVでは様々な制限(変数の数、配列のサイズなど)が大幅に拡張されていますが、一部のメモリ割り当てルールなどは厳格になっています。何万行もあるソースなどの場合、コンパイル時にメモリ不足やロジックの警告が出ることがあります。

古い命令コードを使用しているソース

RPG IIIには存在したが、RPG IV以降では意味が変わってしまった命令があります。RPG IIIにはFREEという命令(データエリアを開放する命令)がありましたが、RPG IVでは宣言構文と衝突するため、書き換えが必要になる場合があります。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?