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?

(入門2)RGP言語(RGP3,RPGLE,FFRPG)とエディタとgitの関係

Last updated at Posted at 2024-09-02

■概略

オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
IBMiで使われている言語のの種類とエディタの関係、更にgitの関係をまとめました

■RGP言語の種類とエディタとgitの関係

※RPGにはRPG3、RPGLE、FFRPGの3種類があります
※これまでIBMi開発でgitはあまり使われていませんが、開発である以上必要だと思います
 しかしRPG3のソースメンバーはIBMiネイティブ(筆者の造語・IBMiオリジナルの
 ファイルシステムのこと)上にあり直接gitで管理できません
※RPG言語の種類別に使えるエディタとgit管理の方法をまとめます

◯まとめ
※RDiはIBM純正の有償の開発環境、VSCodeはMicrosoft製のオープンソースの開発環境
 VSCodeで開発する方法を後の記事でまとめます
※SEUは5250で利用可能なエディタ
※gitは行単位でテキストの差分を管理できるシステム
 現在のソースコードはほぼgitで管理されている

言語 FS RDi VSCode SEU git
RPG3 IBMi X △ *1
RPGLE IBMi X △ *1
RPGLE IFS △ *2 X
FFRPG IFS X

*1 RDiでIBMiネイティブからPCにimportしてeGit(RDiのgitツール)で操作する
*2 ソースコードに漢字があると桁がずれる

◯RPG3
 【特徴】IBMi発売当初から利用されている言語で、弊社のシステムのほとんどはRPG3で
 書かれています。みなさんの会社でも同様ではないでしょうか?

項目 内容
桁位置 固定
ソース IBMiネイティブのメンバー
エディタ SEU@5250, RDi ※1
git eGitで管理 ※2
表示のみ VSCode他 ※3

※1 SEUは5250上のエディタ。もう更新されない
 RDiはIBM純正のEclipseベースのエディタ。有償(約15万円/年・1ライセンス)
※2 RDiでIBMiネイティブファイルからPCにimportしeGit(RDiのgitツール)で操作する
※3 メンバーファイル個別にIFSにコピーすればVSCodeで表示が可能

サンプル)

    H*------------------------------------------------------------------*
    H*            売掛明細データ :№ ファイル作成                        *
    H*------------------------------------------------------------------*
    H            Y/
    FXXUKMLD1IF  E           K        DISK
    FXXDLN   UF  E           K        DISK                      A
    E*
    E                    TB1     1   1 22
    C*------------------------------------------------------------------*
    C*   メイン・ルーチン                                             *
    C*------------------------------------------------------------------*
    C*
    C                     EXSR ¥INIT
    C*
    C                     DO   *HIVAL                     ¬ A
    C                     READ UKMREC                   90
    C                     EXSR ¥CHK0
    C   30                EXSR ¥OUT
    C  N90                END                             」 A
    C*
    C                     SETON                     LR
    C                     RETRN

◯RPGLE
 【特徴】RPG3からRPGLEへはコマンドで自動変換が可能です
 弊社では新しいプログラムで使用されています

項目 内容
桁位置 固定
ソース IBMiネイティブのメンバー, IFSのファイル
エディタ SEU@5250(IBMiネイティブ)
RDi(IBMiネイティブ,IFS)
VSCode(IFS)
git IFSならgitで管理
表示のみ -

サンプル)

     H*------------------------------------------------------------------*
     H*            売掛明細データ :№ ファイル作成                        *
     H*------------------------------------------------------------------*
     H DATEDIT(*YMD/)
     FXXUKMLD1  IF   E           K DISK
     FXXDLN     UF A E           K DISK
     D*
     D TB1             S             22    DIM(1) CTDATA PERRCD(1)
     C*------------------------------------------------------------------*
     C*   メイン・ルーチン                                             *
     C*------------------------------------------------------------------*
     C*
     C                   EXSR      ¥INIT
     C*
     C                   DO        *HIVAL
     C                   READ      UKMREC                                 90
     C                   EXSR      ¥CHK0
     C   30              EXSR      ¥OUT
     C  N90              END
     C*
     C                   SETON                                        LR
     C                   RETURN

◯RPGLEのVSCodeが△の理由(SI/SOの対応ができていない)
日本語の入ったVSCode上の表示(コンパイルエラーになる)
install_developenv_rdi01.png
※縦線はRPGLEの桁位置がわかるようにVSCodeの機能で表示している
 (次の記事で縦線の表示方法を解説します) 

日本語の入ったVSCode上の表示(コンパイルエラーにならず動作する)
install_developenv_rdi02.png
※日本語が左に2桁(シフトイン(SI)/シフトアウト(SO)分)ずれている

上記をRDi上で表示(RDi外とコピー&ペーストで移動)すると日本語の前後のスペースを正しく処理してくれます
RDiは桁位置がわかるようにルーラーがついている

◯FFRPG
 【特徴】VSCodeで編集可能でオープンソースエンジニアが読みやすい新しい言語

項目 内容
桁位置 自由
ソース IFS
エディタ RDi,VSCode
git IFSならgitで管理
表示のみ -

サンプル)

    **free
    ctl-opt datedit(*YMD/) main(main) text('売掛明細データ:№ ファイル作成');

    dcl-proc main;
        //売掛明細データ
        dcl-f XXUKMLD1 disk usage(*input) keyed;
        dcl-ds dsXXUKMLD1 likerec(UKMREC);
        dcl-ds keyXXUKMLD1 likerec(UKMREC:*key);
        //削除№ 管理ファイル
        dcl-f XXDLN disk usage(*input:*output) keyed;
        dcl-ds dsXXDLN likerec(XXLREC);
        dcl-ds keyXXDLN likerec(XXLREC:*key);
        //パラメータ
        dcl-pi *N EXTPGM;
            p#yym packed(6:0); //年月yyyymm
        end-pi;
        //標識
        dcl-s indCheckTarget ind; //*in30
        //システム日付・時刻
        dcl-s curSystemDate date(*jis) inz(*sys);   //システム日付
        dcl-s curSystemTime time(*jis) inz(*sys);   //システム時刻
        //固定値
        dcl-c constFileName const('売掛明細データ < 10ネン');

        exsr @ini; //初期処理
        keyXXUKMLD1.UKMSYM = p#yym;
        setgt %kds(keyXXUKMLD1:1) XXUKMLD1;
        dou %eof(XXUKMLD1);
            read XXUKMLD1 dsXXUKMLD1;
            if not %EOF;
                indCheckTarget = *off;
                exsr @chk;
                if indCheckTarget = *on;
                    exsr @out;
                endif;
            endif;
        enddo;
        exsr @end; //終了処理

◯結論

FFRPGならソースはIFS上において、VSCodeで編集(git可)
ただしディスプレイファイルはIBMiネイティブ上だし、漢字が含まれるため VSCodeで 編集不可
FFRPG+VSCodeは外部連携(API)用の開発手法になりそう

RPGLEならソースはIFS上において、ソース内で漢字を使わず、VSCodeで編集(git可)
もしかしたら後述のVSCode+Code for IBMiのオブジェクトブラウザでIBMiネイティブ上において編集可能かも(git不可)。漢字コードの問題は未検証

RGP3ならソースはIBMiネイティブにおいて、RDiで編集(git可) または SEUで編集(git不可)

【目次】オープンソースエンジニアがIBMi(AS400)を勉強してみた

2
0
6

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?