ブログ

ChatGPTでIBMi(旧称AS/400)のRPGプログラムを自動生成してみる

ChatGPTは人工知能(AI)を駆使した学習済みチャットボットです。チャットボットと言うと予め作られたシナリオに沿って質問と回答を繰り返すような形式が一般的ですが、このChatGPTは事前にシナリオを作るようなものではなく、質問に対して人間が回答したような「それらしい」回答が返ってきます。また質問をプログラムを書くように指示するとコードも書いてくれるとの事で、どのような質問をすると、どのようなプログラムをコーディングしてくれるのか試してみました。

まずは普通に質問

プログラムコーディングの前に、いかに「それらしい」回答が返ってくるのか、手始めに

日本の少子高齢化の良い事と悪い事を教えてください

と質問した回答が下記。

上記、なかなかの「それらしい」回答です。

Pythonの場合

次に、

1から1づつ足して10までループし表示するPythonプログラムを書いて下さい

とコードを書くように質問すると、また以下のような「それらしい」コードを回答してくれました。

下記に見易いように転記しました。実に簡素なコードです、が、意味を理解、しているか分かりませんがコードを書いてくれるのは驚きです。

for i in range(1, 11): # 1から10までのループ
  print(i) # iを表示

RPGの場合

さて、いよいよ本題です。

IBMi(旧称AS/400)のRPGプログラムで、得意先マスターであるTOKMASから得意先コードTOKCDを読み、売上トランザクションテーブルのURITRNの売上金額URIKINを日別に集計するプログラムをコーディングしてください。

上記のような、IBMiですよ、AS/400なんですよ、RPGはロールプレインゲームではなくプログラム言語なんですよ・・と前おきしつつ、仕様っぽい質問をすると、やはり「それらしい」コードが返ってきました。

*RPGプログラム

H DFTACTGRP(*NO)
H BNDDIR('QC2LE')

DURIKIN S 6S 0 INZ(0)
DTOKCD S 6S 0
DTOKMAS E K DISK
DURITRN E K DISK

*得意先マスターを読み込む
C READ TOKMAS TOKCD

*売上トランザクションテーブルを読み込む
C SETLL URITRN TOKCD
C LOOP1 DOW NOT%EOF(URITRN)
C READ URITRN
C IF TOKCD = URITRN.TOKCD
C ADD URIKIN URITRN.URIKIN
C ENDIF
C SETLL URITRN TOKCD
C LOOP1 ENDDO

*売上金額を表示
C DSPLY URIKIN

同じ質問をあらためて質問すると以下のようなコードも返ってきました。(インデントが崩れています。)

*Declare variables
Dcl-S TOKCD char(6) Inz(' '); * 得意先コード
Dcl-S TOKMAS Like(TOKMAS) Inz; * 得意先マスター
Dcl-S URITRN Like(URITRN) Inz; * 売上トランザクションテーブル
Dcl-S URIPER char(6) Inz(' '); * 売上日付
Dcl-S URIKIN Dec(15:2) Inz(0); * 売上金額
Dcl-S URIKIN_TOTAL Dec(15:2) Inz(0); * 売上金額の合計

*Read the TOKMAS record for the specified TOKCD
Read TOKMAS TOKCD;

*Set the key for the URITRN table
URITRN.TOKCD = TOKCD;

*Set the initial value for URIPER
URIPER = '000000';

*Loop through the URITRN table
DoW NOT %EOF(URITRN);
*Read the next record in the URITRN table
Read URITRN;

*Check if the URIPER has changed
If URIPER <> URITRN.URIPER;
*Print the total URIKIN for the previous URIPER
Dsply URIKIN_TOTAL URIPER;

*Reset the URIKIN_TOTAL for the new URIPER
URIKIN_TOTAL = 0;

*Set the new URIPER
URIPER = URITRN.URIPER;
EndIf;

*Add the URIKIN for the current record to the URIKIN_TOTAL
URIKIN_TOTAL += URITRN.URIKIN;
EndDo;

*Print the total URIKIN for the last URIPER
Dsply URIKIN_TOTAL URIPER;

実際にファイル作成、テストデータなど、必要な"おぜん立て"をしておかないと生成されたコードが本当に動くのか分かりませんが、非常に動きそうな感があります。粒度の粗い仕様から細かい仕様へ順に前提を与えると、もっと良いコードが生成できるかもしれません。

時代は確実に進歩しているなー、思わせるChatGPTでした。

RPGプログラム生成を動画で確認

動画再生時間は約1分30秒です。

関連リンク

お問合せ
https://alpcom.co.jp/contact/

データ活用支援サービス
https://alpcom.co.jp/products/data_utilization/

アルファー・コミュニケーションズ公式YouTube
https://www.youtube.com/channel/UCTqwZsRRpAs9NPTUz2yH3ow/videos

pagetop