■概略
オープンソースエンジニア歴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上の表示(コンパイルエラーになる)
※縦線はRPGLEの桁位置がわかるようにVSCodeの機能で表示している
(次の記事で縦線の表示方法を解説します)
日本語の入ったVSCode上の表示(コンパイルエラーにならず動作する)
※日本語が左に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不可)