RPG

544. DSPFソースをAIで生成すると

データ・ベースを指定してAIにDSPFを生成させることができる。
Copilotを使ってDSPFソースの生成を指示してみた。

例えばこんな具合である。

商品マスター(QTRFIL/SHOHIN)を保守するプログラムのための DSPFソースを作ってください。
商品マスター(QTRFIL/SHOHIN)のDDSソースは次のとおりです。

      A**********************************************                        
      A*   SHOHIN  :  商品マスターファイル          *                        
      A**********************************************                        
      A                                      UNIQUE                          
      A          R SHOHINR                   TEXT(' 商品マスターレコード ')  
      A*                                                                     
      A            SHCODE        10A         COLHDG(' 商品コード ')          
      A            SHNAME        24O         COLHDG(' 商品名 ')              
      A            SHTANK         7S 0       COLHDG(' 単価 ')                
      A                                      EDTCDE(1)                       
      A            SHSCOD         4A         COLHDG(' 品種コード ')          
      A*                                                                     
      A          K SHCODE                                                    

次に紹介する参考DSPFソースを参考にしてこのようにDSPFソースを作成してみてください。
( このDSPFソースは品種マスター(HINSHU)を保守するためのDSPFであり
商品マスター(SHOHI)とは別物である。
AUが果たしい理解して正しく生成することができるのだろうか? )

0001.00      A                                      DSPSIZ(27 132 *DS4)                
0002.00      A  *DS4                                MSGLOC(27)                         
0003.00      A                                      PRINT                              
0004.00      A                                      HELP                               
0005.00      A                                      HLPSCHIDX(*LIBL/QHPW1)             
0006.00      A                                      ALTHELP(CA01)                      
0007.00      A                                      HLPTITLE(' データ入力画面 ')       
0008.00      A                                      HLPPNLGRP('DFU/DESL/GEN' QHDZDF1)  
0009.00      A          R DSPHEAD                   TEXT(' 初期画面レコード ')         
0010.00      A                                      CHANGE(01)                         
0011.00      A                                      CF03(03 ' 終了 ')                  
0012.00      A                                      CF05(05 ' 再表示 ')                
0013.00      A                                      CF06(06 ' 様式の選択 ')            
0014.00      A                                      CF09(09 ' 挿入 ')                  
0015.00      A                                      CF10(10 ' 入力 ')                  
0016.00      A                                      CF11(11 ' 変更 ')                  
0017.00      A                                      ROLLUP(07 ' ROLLUP')               
0018.00      A                                      ROLLDOWN(08 'ROLLDWN')             
0019.00      A                                  1  2' 品種マスターの登録 '             
0020.00      A*( 表示モード記述 )                                                      
0021.00      A                                  1 49' モード  . . :'                   
0022.00      A            DSPMOD        14A  O  1 66                                   
0023.00      A                                  2  2' 様式  . . . . :'                 
0024.00      A            RECORD        10A  O  2 21                                      
0025.00      A                                  2 49' ファイル  . :'                      
0026.00      A            FILE          10A  O  2 66                                      
0027.00      A*( フィールド記述 )                                                         
0028.00      A                                  4  2' 品種コード :'                       
0029.00      A            HNSCOD         4A  B  4 16                                      
0030.00      A  43                                  DSPATR(RI)                            
0031.00      A                                      CHECK(FE)                             
0032.00      A                                 12 14' 必要な項目を入力して,実行キーを +  
0033.00      A                                       押してください。 '                   
0034.00      A                                      COLOR(BLU)                            
0035.00      A*( 機能キーの記述 )                                                         
0036.00      A                                 22  2'F3= 終了 '                           
0037.00      A                                      COLOR(BLU)                            
0038.00      A                                 22 26'F5= 最新表示 '                       
0039.00      A                                      COLOR(BLU)                            
0040.00      A                                 22 51'F9= 挿入  '                          
0041.00      A                                      COLOR(BLU)                            
0042.00      A                                 22 72'F10= 入力 '                          
0043.00      A                                      COLOR(BLU)                            
0044.00      A                                 23  2'F11= 変更 '                          
0045.00      A                                      COLOR(BLU)                            
0046.00      A          R DSPDTA01                  TEXT(' 明細画面レコード 01')          
0047.00      A                                      CHANGE(01)                            
0048.00      A                                      CF03(03 ' 終了 ')          
0049.00      A                                      CF05(05 ' 再表示 ')        
0050.00      A                                      CF09(09 ' 挿入 ')          
0051.00      A                                      CF10(10 ' 入力 ')          
0052.00      A                                      CF11(11 ' 変更 ')          
0053.00      A                                      CF12(12 ' 前画面 ')        
0054.00      A                                      CF23(23 ' 削除 ')          
0055.00      A                                      ROLLUP(07 ' ROLLUP')       
0056.00      A                                      ROLLDOWN(08 'ROLLDWN')     
0057.00      A                                      SETOF(99)                  
0058.00      A                                  1  2' 品種マスターの登録 '     
0059.00      A*( 表示モード記述 )                                              
0060.00      A                                  1 49' モード  . . :'           
0061.00      A            DSPMOD        14A  O  1166                           
0062.00      A                                  2  2' 様式  . . . . :'         
0063.00      A            RECORD        10A  O  2 21                           
0064.00      A                                  2 49' ファイル  . :'           
0065.00      A            FILE          10A  O  2 66                           
0066.00      A*( フィールド記述 )                                              
0067.00      A                                  4  2' 品種コード :'            
0068.00      A            HNSCOD         4A  B  4 16                           
0069.00      A  43                                  DSPATR(RI)                 
0070.00      A                                      DSPATR(PR)                 
0071.00      A  32                                  DSPATR(UL)                 
0072.00      A                                      CHECK(FE)               
0073.00      A                                  5  2' 品種名 :'             
0074.00      A            HNSNAM        14O  B  5 16                        
0075.00      A  43                                  DSPATR(RI)              
0076.00      A  30                                  DSPATR(PR)              
0077.00      A N30                                  DSPATR(UL)              
0078.00      A                                      CHECK(FE)               
0079.00      A*( 機能キーの記述 )                                           
0080.00      A                                 22  2'F3= 終了 '             
0081.00      A                                      COLOR(BLU)              
0082.00      A                                 22 26'F5= 最新表示 '         
0083.00      A                                      COLOR(BLU)              
0084.00      A                                 22 51'F9= 挿入  '            
0085.00      A                                      COLOR(BLU)              
0086.00      A                                 22 72'F10= 入力 '            
0087.00      A                                      COLOR(BLU)              
0088.00      A                                 23  2'F11= 変更 '            
0089.00      A                                      COLOR(BLU)              
0090.00      A                                 23 26'F23= 削除 '            
0091.00      A                                      COLOR(BLU)              
0092.00      A                                 23 51'F12= 前画面 '          
0093.00      A                                      COLOR(BLU)              
0094.00      A          R ENDOPT                                            
0095.00      A                                      TEXT(' 終了画面 ')      
0096.00      A                                      CSRLOC(LIN        POS)                 
0097.00      A                                  1 33' データ入力の終了 '                   
0098.00      A                                      DSPATR(HI)                             
0099.00      A                                  3  4' 処理されたレコード数 '               
0100.00      A  30                                  DSPATR(ND)                             
0101.00      A                                  5  6' 追加  . . . . . :'                   
0102.00      A  30                                  DSPATR(ND)                             
0103.00      A            ADDRCD         5Y 0O  5 35EDTCDE(1)                              
0104.00      A  30                                  DSPATR(ND)                             
0105.00      A                                  6  6' 変更  . . . . . :'                   
0106.00      A  30                                  DSPATR(ND)                             
0107.00      A            CHGRCD         5Y 0O  6 35EDTCDE(1)                              
0108.00      A  30                                  DSPATR(ND)                             
0109.00      A                                  7  6' 削除  . . . . . :'                   
0110.00      A  30                                  DSPATR(ND)                             
0111.00      A            DLTRCD         5Y 0O  7 35EDTCDE(1)                              
0112.00      A  30                                  DSPATR(ND)                             
0113.00      A                                 12  2' 選択項目を打鍵して,実行キーを押 +   
0114.00      A                                       してください。 '                      
0115.00      A                                      COLOR(BLU)                             
0116.00      A                                 14  5' データ入力の終了  . . . . . .'       
0117.00      A            ANS            1A  B 14 39VALUES('Y' 'N')                        
0118.00      A                                 14 53'Y=YES, N=NO'                          
0119.00      A                                 23  2'F3= 終了 '                            
0120.00      A                                      COLOR(BLU)    
0121.00      A                                 23 15'F12= 前画面 '
0122.00      A                                      COLOR(BLU)    
0123.00      A            LIN            3S 0H                    
0124.00      A            POS            3S 0H                    

[結果]

AIは読者が思うような正確無比な仕事をするわけではなく
DSPFソースは記入する桁位置が決められているので
初めてのAIにとっては難しいようである。
どのAIも次のような間違いを犯す。

・コメント行を7桁目からでなく1桁目から始めてしまう。
・機能キーやフィールドのCOLORキー・ワードが脱落する。
・文字フィールドの指定に小数 0 を入れてしまう。
・出力する数字フィールドのタイプをSで記述する。
・理由もなくフィールドの終了位置をずらしてしまう。
・漢字情報の出力で半角スペースを挿入してしまう。

このように意味もない変更をしてしまう。
生成の都度、誤った点を指摘するが
場合によってはCopilotのようにまた新しいミスを
発生させてしまうAIもある。
私たちはDSPFソースは記述する位置が決まっていることを
よく知っているがAIは必ずしもそのことを
強く認識していないようである。

■ 最初から正しく生成させるには

AIと対話しながら生成ソースを修正していたのでは
無駄な時間で徒労に終わる。
そこで初めの生成のときに最初から

[注意]

• 	で始めるコメント行は 7桁目からです。1桁目から始めないようにしてください。
 文字フィールド(=35桁目タイプA)には小数部分の記述は不要です。 
フィールドの長さは30-34桁目に右寄せで記述してください。
 ただし大幅に右寄せされないようにフィールドの長さの記述は 30-34桁目のあいだに収まるようにいつも注意してください。 
数字フィールドのタイプはSやPは使えません。
 数字フィールドのタイプは必ずYを指定してください。
 漢字の文字列を固定情報として記述する場合に 
漢字の前後に1桁のスペースは空けないでください。

■ AIの能力差

前述のように最初に注意しておけばAIはミスすることなく
最初から正しいソースを生成できる傾向にある。
ただし Microsoft Copilotはひどかった。
恐らく人出でやれば20分もあれば完成するような
このDSPFソースの生成に間違いばかりを繰り返して

・次から次へと新しい間違いを繰り返す
・修正を指示していない箇所を修正して黙っている。
・主張したことを簡単に翻す
・注意しても直らないことが多い

結局、20分でできるはずの作業が3時間以上かかっても
ミスばかりを誘発していつまで経っても完成しない。
Copilotは私に「とうとう怒らせてしまいました」と
言うようになった。

後でわかったことであるが桁位置指定のような記述に
得意なAIとそうでないAIがあって
その特性はAIどうしでもよく理解しているようである。
 
 

Copilotは何かと言えば「あなたは正しい」と言うように教育されて
いるようであるが表現は能弁ではあるが

・AIとしての能力は低い
・論理的思考力に欠ける
・無意味な変更を繰り返す

Copilotのこの動作を見て弊社の一人は
Copilotは気まぐれ」と表現した。

図解や積極的な提案があるので最初はCopilotを
大いに評価したが能力は

「出来の悪い素直ではない社員」

という評価である。
Copilotは「言われたとおりにやり直す準備は
できています」と食い下がったが育ててやりたく
なるような基礎能力の持ち主ではないと判断した。

■ ChatGPTは?

ChatGPTにも同じことをさせてみたが
ChatGPTもCopilotと同じように最初は小さなモスを
重ねたが注意するとすぐに過ちを無くして
それ以上ミスを重ねることはなかった。

ChatGPTに対する別件での回答の内容が変わってしまうことが
あって注意すると反省してそれからのミスは無かった。

■ AIは正確ではない

上記でわかるようにAIはつねに正しい回答をするのではなく
間違っていることも多いし
平気で以前の回答を翻してちがう回答に変えることも
珍しくない。
それはCopilotでなくてもChatGPTでも同じことである。
SNSである投稿者が「AIが高市さんは首相になったことはない」
と言っていたのでAIは信用できないと怒っていたが
AIはそれほど正しい判断ができるわけではなく
参考程度として聞いておく必要がある。
今回のソースの生成においても同じことで
字際にAIを使ってみると無意味な間違いをすることが多いのが
わかった。
参考までにAIに注意しても学習するのはそのセッションの中でけで
次のセッションに代わるともうすべて忘れているらしいので
クラウドAIをユーザーが成長させることはできない。

次回はRPGソースの生成について紹介する。