1
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?

RPGLE Freeについて

1
Last updated at Posted at 2026-09-14

◇はじめに

本記事は、VSCodeの拡張機能「RPGLE Free」について、RiSING活動を通して調査した内容をまとめたものです。

◇RPGLE Freeとは

RPGLE Freeは、VSCode上でRPG IVからFF RPGへの変換を支援するツールとして提供されている拡張機能の1つです。

◇導入手順

  1. VSCodeの拡張機能(マーケットプレース)で「RPGLE Free」を検索
  2. [インストール]をクリックし、拡張機能をVSCodeにインストール
    RiSING_RPGLE Free_01.jpg

◇実行方法

  1. エディター画面でCtrl+Aまたはドラッグ操作により、変換対象のソースコードを選択
  2. 選択した状態で右クリックし、メニューから[Convert to Free Format]をクリック
    RiSING_RPGLE Free_02.jpg

◇変換特性にともなう注意点

RPGLE Freeは自動変換ツールですが、実際には想定された固定形式の記述パターンに基づく条件式による置換を実施しています。そのため、FF RPGでサポートされていない命令文や、機械的な変換が困難な記述については、望ましくない変換結果となる場合があります。

ここでは、本拡張機能の変換特性に起因して発生する代表的なコンパイルエラーの事例を紹介します。

1.PLISTおよびKLISTの消滅バグ

FF RPGでは、PLISTおよびKLISTはサポートされておらず、DCL-PRおよび%KDS()による記述が必要です。しかし、本拡張機能ではPLIST/PARMおよびKLIST/KFLDに対してDCL-PRおよび%KDS()の追記はされず、削除処理のみが実施されるため、変換後のソースはコンパイルエラーとなります。

変換前
     C*=========================================================================
     C*                   PARAMETER LIST
     C*=========================================================================
     C     *ENTRY        PLIST
     C                   PARM                    P@AAAA            5
     C                   PARM                    P@BBBB            5
     C*=========================================================================
     C*                   KEY LIST
     C*=========================================================================
     C     K@KEY1        KLIST
     C                   KFLD                    K@AAAA            5
     C                   KFLD                    K@BBBB            5
     C*=========================================================================
変換後
        //=========================================================================
        //                   PARAMETER LIST
        //=========================================================================
        //=========================================================================
        //                   KEY LIST
        //=========================================================================
        //=========================================================================

2.MOVE系命令の変換未対応

FF RPGでは、MOVE/MOVELなどのMOVE系命令がサポートされておらず、算術演算式の直接記述やEVALを利用する必要があります。しかし、本拡張機能はMOVE系命令の変換に対応していないため、該当命令はRPG IV形式のまま残り、コンパイルエラーとなります。

3.GOTO/TAGの変換未対応

FF RPGでは、GOTO/TAGはサポートされておらず、LEAVE/ITER/RETURNなどを利用した構造への変換が必要です。しかし、本拡張機能ではGOTO/TAGからLEAVE/ITER/RETURNを利用した構造への自動変換が困難なため、該当命令はRPG IV形式のまま残り、コンパイルエラーとなります。

4.DOからFORへの変換バグ

FF RPGでは、DOはサポートされておらず、DOU/DOWまたはFORを利用した記述が必要です。そのため、本拡張機能ではDOをFORへ変換する処理が実施されます。しかし、変換処理上の不具合により、本来FOR/ENDFORとなるべき箇所がFOR/ENDDOへ誤変換され、コンパイルエラーとなります。

変換前
     C     1             DO        W@RRN1        II
     C                   EXSR      #GET01
     C                   EXSR      #SET01
     C                   END
変換後
       For II = 1 to W@RRN1;
         EXSR #GET01;
         EXSR #SET01;
       ENDDO;

5.SETLL/SETGT/CHAINのインジケータ変換バグ

FF RPGでは、SETLL/SETGT/CHAINなどの命令内におけるインジケータ操作がサポートされておらず、%FOUND/%ERRORなどの組み込み関数を利用した記述が必要です。そのため、本拡張機能では元のRPG IV記述を基にインジケータ操作を変換します。しかし、変換処理上の不具合により、本来は異なるインジケータへの操作命令に変換されるべき処理が、同一インジケータに対する複数の操作命令へ誤変換され、コンパイルエラーもしくは意図しない動作の原因となります。

変換前
     C     K@EMPE        SETLL     RSGEMP                             919293      
変換後
       SETLL K@EMPE RSGEMP;
       *in91 = (%found() = *Off);
       *in91 = %error();
       *in91 = %equal();

6.MVRの変換未対応

FF RPGでは、ADD/SUB/MULT/DIV/MVR/SQRTなどの算術演算命令はサポートされておらず、算術演算式の直接記述やEVAL/%REM()/%SQRT()を利用する必要があります。しかし、本拡張機能ではMVRに対する変換処理が未対応なため、MVRのみがRPG IV形式のまま残り、コンパイルエラーとなります。

変換前
     C     NUMA          ADD       NUMB          RESULT
     C     NUMA          SUB       NUMB          RESULT
     C     NUMA          MULT      NUMB          RESULT
     C     NUMA          DIV       NUMB          RESULT
     C                   MVR                     RESULT
     C                   SQRT      NUMC          RESULT
変換後
       RESULT = NUMA + NUMB;
       RESULT = NUMA - NUMB;
       RESULT = NUMA * NUMB;
       RESULT = NUMA / NUMB;
     C                   MVR                     RESULT
       RESULT = %SQRT(NUMC);

7.RPG IVでサポートされていない命令の変換未対応

そもそもRPG IV自体でもサポートされていない命令は、本拡張機能においても変換対象として定義されていません。そのため、FREE/DEBUGなどのRPG III由来の記述については変換処理が行われず、元の記述のまま残るためコンパイルエラーとなります。

◇まとめ

本記事では、VSCodeの拡張機能「RPGLE Free」をモダナイズにおける有用性および利便性の観点から調査を行いました。

調査の結果、RPGLE Freeはいくつかの制約や変換上の課題があるものの、RPG IVからFF RPGへの変換作業を支援するツールとしては十分に価値があることが分かりました。

一方で、変換処理はあらかじめ想定された条件式に基づいて実施されるため、全ての記述を正しく変換できるわけではなく、一部の命令や複雑な処理については変換漏れや誤変換が発生する場合があります。

そのため、本拡張機能を利用した変換は、変換特性を十分に理解したうえで、変換後のソースコードに対する内容確認と修正作業および追加の変換作業を実施することが前提となります。

しかし、変換処理のルールや変換結果の傾向が条件式によって決まっていることから、事前に注意すべきポイントを把握しておけば、変換後の確認作業や修正作業を効率的に進めることも可能だと考えられます。

少ない手順で全てが不具合なく変換され動作するような完璧なツールではありませんが、FF RPGへの変換作業における出発点を素早く用意できる実用的な支援ツールとして、モダナイズの効率化に役立つと考えられます。

1
0
0

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
1
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?