はじめに
本記事は、VSCodeの拡張機能「RPGIV2FREE (Bob Cozzi's IBM i RPGLE / RPG IV to RPG Free Format)」について、RiSING活動を通して調査した内容をまとめたものです。
RPGIV2FREEとは
VSCodeにおいて、固定形式のRPG IVからFF RPG(フリーフォーマット)へ変換する際の自動変換ツールとして提供されている拡張機能の1つです。
RPGの第一人者であるBob Cozzi氏によって開発され、H/F/D/C仕様書の幅広い変換や、コードを自動整形するフォーマッター機能が内蔵されているのが特徴です。
導入手順
- VSCodeの拡張機能(マーケットプレース)で「RPGIV2FREE」または「Bob Cozzi」を検索
- [インストール]をクリックして拡張機能をVSCodeにインストール
実行方法
- エディター画面で
Ctrl+Aもしくはドラッグで変換したい記述を選択 - 選択した状態で右クリックし、コンテキストメニューから変換を実行(またはコマンドパレットから[Convert RPG IV to Free Format]等を実行)
変換特性にともなう注意点
RPGIV2FREEは多機能な自動変換ツールではあるものの、完全な自動変換を保証するものではありません。
複雑な命令や暗黙の変換に依存したコードに対しては、拡張機能の変換特性によって望ましくない変換がされたり、固定形式のまま残ったりする場合があります。
ここでは、その変換特性によって生じるコンパイルエラーや実行時バグの代表的な例を紹介します。
1. %FOUND関数の引数変換バグ
FF RPGでは、CHAIN などの命令結果の判定に %FOUND などを利用した記述が求められます。
しかし、この拡張機能で CHAIN などを変換する際、%FOUND(レコード様式名) のように元のレコード名を引き継いで変換してしまうことがあります。
FF RPGの仕様上、%FOUND の引数は「ファイル名」である必要があるため、そのままコンパイルするとエラーとなります。
2. MOVE系の暗黙の型変換廃止によるエラー
FF RPGでは、MOVE / MOVEL などのMOVE系がサポートされなくなり、代入演算子(=)などでの記述が求められます。
固定フォーマットの MOVE 命令は文字と数値を自動で型変換してくれましたが、この拡張機能は単純な = に置換します。
FF RPGの = は厳密な型の一致を求めるため、そのままでは型不一致のエラーとなります。%editc() や %dec() を利用した手動キャストの追記が必要です。
3. MOVE系の「右詰め」特性の喪失バグ
旧RPGの MOVE 命令は、短い文字を長い文字変数に代入する際、自動で「右詰め」にしてくれていました。
しかし、拡張機能によって = に変換されると「左詰め」の動作に変わってしまいます。
これにより、画面入力値や金額データなどが桁ズレを起こし、実行時にデータが消失するなどの致命的なバグを引き起こすため、%subst() を利用した手動でのエミュレート記述が求められます。
4. 空白文字列の数値変換による無限ループバグ
前述の型不一致を解消するために %dec() を利用して文字から数値へ変換する際、変数が「完全な空白(ブランク)」のままだとプログラムが内部でクラッシュします。
変換ツールはこのような例外処理までは生成してくれないため、画面入力などで空白が渡る可能性がある箇所では、手動で空白チェックのガード構文を挿入しないと予測不能な無限ループに陥るエラーとなります。
5. GOTO/CABEQの構造化破壊バグ
FF RPGでは、GOTO や CABEQ はサポートされなくなり、LEAVE / ITER / RETURN などを利用した文法で構成されていることが求められます。
この拡張機能では、これらのジャンプ命令を処理しようとして FOR f2f_tempDO = 1 to 1 by 1; といったダミーループを生成して辻褄を合わせようとすることがあります。
しかし、これによって元のネスト構造が破壊され論理的なバグを生むため、手動で DOW などを利用した正しい構造へ書き直すことが求められます。
まとめ
「RPGIV2FREE」は、H/F/D/C仕様書の変換や強力なフォーマッター機能を備えており、RPG IVからFF RPGへの変換を手助けするツールとして活用する価値は十分にあります。
ただし、拡張機能を利用した変換方法は、バグの有無に関わらず変換特性を理解して都度手直しすることが前提の変換方法です。
結論として、現在ある資産をRPG IIIからRPG IVへ変換するのはOSのコンバートコマンドにより容易に対応することができますが、RPG IVからFF RPGへの変換に関しては、ツールを使用しても1つのプログラムに対する手直し・検証の対応時間が非常にかかるため、既存資産を一括で変換するのは現実的ではないと考えられます。
数クリックだけで全てが問題なく変換され動作する、そんな魔法のようなツールではないことを理解し向き合うことが必要です。