1.はじめに
ご覧いただきありがとうございます。こちらの記事では、活動の終盤にたまたま気づいたRPG Copilotについて、使ってみた感想を書いています。
RPG Copilotの概要や使い方についても、まとめていきたいと思います。
2.カスタムGPT(RPG Copilot)とは
まず、RPG Copilotは「Alessandro Puppo」さんがChatGPTのカスタムGPTという機能を利用して作成した、RPGに特化したAIです。IBMコードの生成・レビュー・編集ができるように訓練されているようです。
下記のように記述がありました。
An expert IBM-i RPG programming assistant, trained on thousands of the best publicly available RPG resources. RPG Copilot can finally help you in generating, reviewing and edit your IBM code.
次に、カスタムGPTについて、ユーザーがChatGPTをユーザー仕様にカスタマイズできる機能で、話し方などの振る舞いや、命令文などをあらかじめ設定しておけます。
資料などを読み込んで専用で学習させることができるため、専門性の高い回答をすることができます。(会社の就業規則を覚えさせたりして社内FAQを作成したりできますね)
Freeプランの場合は作成ができず、Plus以上を利用する必要があります
使用するだけであればFreeプランでも可能で、およそ5時間あたり10回ほど利用できます
(混雑状況で前後するようです)
3.RPG Copilotを使ってみる
サイドバーにGPT > [調べる]の表示が既にある場合
ある場合の手順はこちらを展開してください
- ChatGPTにアクセスします(サインインが必要です)
- [調べる]をクリックします
いろいろなカスタムGPTが確認できます
- 検索窓に[IBM i]と入力します
IBM iに関連するカスタムGPTがたくさん出てきます
- 今回は RPG Copilot を使用するので、クリックします
評価などが表示されますね
- [チャットを開始する]をクリックします
これで使用できるようになりました。一度でも質問するとサイドバーにRPG Copilotが表示されます。
サイドバーにGPT > [調べる]の表示が無い場合
無い場合の手順はこちらを展開してください
- カスタムGPTにアクセスします(サインインが必要です)
- 検索窓に[IBM i]と入力します
IBM iに関連するカスタムGPTがたくさん出てきます
- 今回は RPG Copilot を使用するので、クリックします
評価などが表示されますね
- [チャットを開始する]をクリックします
これで使用できるようになりました。一度でも質問するとサイドバーにRPG CopilotおよびGPT > [調べる]が表示されるようになります。
マスタ保守のサンプルを作ってもらう
下記のように簡単なプロンプトを作成して、マスタ保守のサンプルを作成してもらいます。
RPGLEの固定フォームで マスタ保守のサンプルを作成ください。
作成してほしいファイルは下記です。
・物理ファイル
・DSPF
・RPGLE
返答については、原文のまま記載します。
興味のある方は「▶」から展開してご確認ください。
RPG Copilot 返答
以下に、RPGLEの固定フォームで実装されたマスタ保守(登録・更新・削除)アプリケーションのサンプルを提供します。以下の3点を順に説明・記述していきます:
✅ 構成概要(マスタ保守の内容)
目的: 商品マスタ(商品コード、商品名、単価)を登録・更新・削除できる
対象ファイル名: PRDMT(Product Master)
機能画面名: PRDMTDSPF
プログラム名: PRDMTMNT(Product Maintenance)① 物理ファイル(PRDMT)
PRDMTA R PRDMSTR A PRDCOD 5A TEXT('商品コード') A PRDNAM 20A TEXT('商品名') A PRDPRC 7S 0 TEXT('単価') A K PRDCOD商品コード(PRDCOD)を主キーとする商品マスタです。
単価(PRDPRC)は整数(小数なし)で定義しています。
保存例:CRTPF FILE(MYLIB/PRDMT) SRCFILE(MYLIB/QDDSSRC)
② ディスプレイファイル(PRDMTDSPF)
以下は単票形式のDSPFです(1件ずつ表示してメンテナンスする形式)。
PRDMTDSPFA R PRDREC A CF03(03 '終了') A CF05(05 '登録') A CF06(06 '更新') A CF07(07 '削除') A CF08(08 '検索') A PRDCOD 5A B 5 5 A DSPATR(UL) A PRDNAM 20A B 6 5 A PRDPRC 7Y 0B 7 5 A R ERRMSG A MSG 50A O 24 2保存例:CRTDSPF FILE(MYLIB/PRDMTDSPF) SRCFILE(MYLIB/QDDSSRC)
③ RPGLEプログラム(PRDMTMNT)
以下に固定フォーム形式で記述された、簡易マスタ保守の例を示します。
PRDMTMNTFPRDMTDSPF CF E WORKSTN FPRDMT UF A E K DISK IPRDREC DS I 1 5 PRDCOD I 6 25 PRDNAM I 26 32 PRDPRC IERRMSG DS I 1 50 MSG C EXFMT PRDREC C *IN03 IF EQ *ON C GOTO *INLR C *IN08 IF EQ *ON C CHAIN PRDCOD PRDMT C IF %FOUND C MOVE PRDNAM PRDNAM C MOVE PRDPRC PRDPRC C ELSE C MOVEL '該当データがありません' MSG C WRITE ERRMSG C ENDIF C GOTO LOOP C ENDIF C *IN05 IF EQ *ON C CHAIN PRDCOD PRDMT C IF %FOUND C MOVEL '既に存在します' MSG C WRITE ERRMSG C ELSE C MOVEL PRDCOD PRDCOD C MOVEL PRDNAM PRDNAM C MOVE PRDPRC PRDPRC C WRITE PRDMSTR C MOVEL '登録しました' MSG C WRITE ERRMSG C ENDIF C GOTO LOOP C ENDIF C *IN06 IF EQ *ON C CHAIN PRDCOD PRDMT C IF %FOUND C MOVEL PRDNAM PRDNAM C MOVE PRDPRC PRDPRC C UPDATE PRDMSTR C MOVEL '更新しました' MSG C WRITE ERRMSG C ELSE C MOVEL '存在しません' MSG C WRITE ERRMSG C ENDIF C GOTO LOOP C ENDIF C *IN07 IF EQ *ON C CHAIN PRDCOD PRDMT C IF %FOUND C DELETE PRDMSTR C MOVEL '削除しました' MSG C WRITE ERRMSG C ELSE C MOVEL '削除できません' MSG C WRITE ERRMSG C ENDIF C GOTO LOOP C ENDIF C LOOP TAG C EXFMT PRDREC C GOTO *INKC C SETON LR✅ 開発&テストの流れ
物理ファイル作成:CRTPF FILE(MYLIB/PRDMT) SRCFILE(MYLIB/QDDSSRC)
ディスプレイファイル作成:CRTDSPF FILE(MYLIB/PRDMTDSPF) SRCFILE(MYLIB/QDDSSRC)
RPGプログラム作成:CRTRPGPGM PGM(MYLIB/PRDMTMNT) SRCFILE(MYLIB/QRPGSRC)
✅ コメント
これは非常に基本的な固定フォームのサンプルです。
実運用ではバリデーション、ロック処理、コミット制御などの実装も必要です。
現代の開発では、可能であればRPG IV (フリーフォーム)やSQLベースの処理に移行するのが推奨されますが、固定フォームも保守対象で現役です。
必要であれば、フリーフォーム版の同等コードや検索一覧形式(サブファイル)版も提供できます!
ご希望があればお知らせください。
RPGLEで気になる記述はありますが、それとなく返答してくれますね。
実際に物理ファイルのソースに貼り付けてみると、桁位置のエラーが出ましたね。
エラーが出ている行は[長さ]の部分から左に1桁だけずれているようです。

桁ずれは手で修正をして、記述の無いUNIQUEを追記してもらうため再度聞いてみます。
PRDMTはユニークにしてください
下記のように返答がきました。UNIQUEがレコード名のところに追記されており、エラーが出てしまいました。
A R PRDMSTR UNIQUE
A PRDCOD 5A TEXT('商品コード')
A PRDNAM 20A TEXT('商品名')
A PRDPRC 7S 0 TEXT('単価')
A K PRDCOD
何度聞いてもダメそうなので、こちらは手で直していきます。(残念)
DSPFは貼り付けてみると、軽微な桁ずれ(1~3桁)がおきています。
桁ずれに関しては手で直していきます。

桁ずれを修正の後はコンパイルも通りました。
RPGLEソースを貼り付けてみると、いろいろな行でエラーが出ます。

桁ずれやIF命令の書き方、文字数オーバーなど。。。
桁ずれは手で修正し、それ以外は再度聞いてみましょう。
PRDMTMNTについて下記の修正をお願いします。
・IFの記述でエラーが出ます
・CHAINの記述でエラーが出ます
・MOVELで日本語をセットしていますが、入力できる桁数をオーバーしています
下記のように返答がきました。
①IFのエラーに関して(2通り)
C *IN05 IFEQ *ON
C IF *IN05 = *ON
②CHAINのエラーに関して
C PRDCOD CHAIN PRDMT
③文字数オーバーについて
DS ERRMSG に定義されている MSG フィールドは 半角50バイト。
しかし、日本語(全角)を MOVEL で代入しており、桁数オーバーになります。
C CLEAR MSG
C MOVEL '該当データがありません' MSG
①と②についてはこの対応で解決しましたが、③については聞き方が悪いためか、見当違いの回答がきました。
聞き方を変えて再チャレンジしてみます。
日本語メッセージをMOVELで入れると長さの都合上、項目の枠を超えてしまうため、
対処はできないでしょうか?
下記のような返答がきました。
C EVAL MSG = '該当データがありません'
実際に反映してみるとエラーが無くなりました。
エラーの修正はスムーズに行ってくれた感覚です。
続いて、コンパイルを実施してみます。が、コンパイルエラーが出力されました。

このメッセージをRPG Copilotにそのままなげてみます。
RPGLEで下記のようなコンパイルエラーが出ました。対処法を教えていただけますか?
*RNF4013 20 6 入力仕様の未使用の項目がブランクになっていない。省略時の
値としてブランクが使用されます。
*RNF4033 30 1 外部名が見つからないか無視されるフィールドである。指定は
無視されます。
*RNF5177 30 1 DO, DOUXX, DOWXX, FOR, IFXX, MONITOR,またはSELECTでENDYY
の指定が欠落している。
*RNF7260 30 2 指定された演算命令で演算項目2オペランドが正しくない。
返答に関しては下記のような予測の内容でした。ソースからエラーを見つけるようなことはできなさそうです。
✅ エラー1:
*RNF4013 20 入力仕様の未使用の項目がブランクになっていない。省略時の値としてブランクが使用されます。
💡 意味:
I仕様(入力仕様)の未使用フィールドに、不要な記述がある。
RPG III形式では、使用しないカラムにスペース以外が入っていると警告されます。
✅ 対処法:
I仕様の未使用の部分をすべて空白にする(スペースで埋める)
もしくは、必要なフィールドのみ記述し、他は削除します。
コンパイルエラーについては、別途解決してみます。。。
4.RPG Copilotを使ってみた感想
RPGに特化したAIと聞いていたのですが、さほどChatGPTと使用感は変わらない感じがしますが、修正要望を出したときに、ほぼ正確に返答したときは驚きました。
サンプルプログラムのたたき台を作成する分には、十分に活用できそうです。
ただ、こちらに関してもある程度の知識が問われると思います。
基本的には有料プラン限定なので、無料プランのユーザーは頻繁に使用することができませんが、機会があれば使用してみてください。
個人的には使用感はあまり変わらない感じです。
■ 当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。


