0
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?

生成AIでFFRPGプログラムは生成できるのか? - ⑤照会・入力プログラムのソース作成

Last updated at Posted at 2024-10-15

前回の記事では

  • 照会・編集対象となる物理ファイル(データベースファイル)
  • フロント画面となる画面ファイル
    のソースの生成を行いました。

今回の記事では、実際に照会・編集を行うRPGプログラムソースを生成してみます。

ソース生成してみる

とりあえずやってみる

使用するマスター(物理ファイル)のフィールドをプロンプトに含め、フィールド定義などを正確に生成できるようにします。

  • プロンプト例
あなたはRPG(FFRPG) プログラマーです
**free で始まり、 Returnで終わるプログラムを作成してください。

マスタ名: EMPLOYEE (社員マスター)
EMCODE(社員コード) ...文字型、 5桁
EMNAME(社員名) ... 文字型、 20桁
EMDEPT(部署) ...文字型、 10桁
EMDATE(入社年月日) ...数値型8桁
EMSALA (給与) ...数値型9型
キー:EMCODE(社員コード)

上記の内容を元に、 社員マスターの照会プログラム作成を行ってください。

上記のプロンプトより、下記のソースが生成できました。

クリックしてソースを展開
DSPEMP
**free

// ファイル宣言
dcl-f EMPLOYEE keyed; // 社員マスターファイル (キー:EMCODE)

// フィールド宣言
dcl-s EMCODE char(5); // 社員コード
dcl-s EMNAME char(20);// 社員名
dc1-s EMDEPT char(10);// 部署
dcl-s EMDATE packed (80); // 入社年月日 (YYYYMMDD形式)
dcl-s EMSALA packed(9:0); // 給与
dcl-s EXIT char(1) inz ('N'); // 終了フラグ

// メインループ
dow EXIT = 'N';

  // 社員コードの入力を促す
  dsply '社員コードを入力してください (5桁): ' '' EMCODE;

  // 社員コードをキーにしてEMPLOYEE ファイルを検索
  chain (EMCODE) EMPLOYEE;

  // レコードが見つかった場合
  if %found(EMPLOYEE);
	// 社員情報を表示
	dsply('社員名:' + %trim(EMNAME));
	dsply('部署: ' + %trim(EMDEPT));
	dsply('入社年月日: ' + %char(EMDATE)); 
	dsply('給与: ' + %char(EMSALA));
  else;

	// 社員が見つからなかった場合
	dsply '社員が見つかりません。';
  endif;

  // プログラムを続けるかどうかを確認
  dsply '終了しますか? (Y/N):
enddo;

// プログラムの終了
return;
生成されたソースをそのまま貼り付け→コンパイル試行したところ、コンパイルできプログラムが作成されました。

画面ファイルは…?

コンパイルしたプログラムを実行すると、まずは社員コードの入力を求められます。
image.png
存在する社員コードを入力すると、以下のように合致する情報を返します。
image.png
存在しない社員コードを入力すると、メッセージ表示されます。
image.png

コンパイルは通ったものの、以下の条件が満たせていません。

  • 画面ファイルを使用する
  • 照会はできるが、編集ができない

画面ファイルでマスターの内容表示・編集ができるようなソースを生成できないか?ということで、色々試してみます。

コンパイル通らない…?

様々なプロンプトを試してソースを生成しますが、AI生成のみでは難航しました。

  • プロンプト例
     A            EMCODE        5A    
     A            EMNAME        20A  
     A            EMDEPT        10A 
     A            EMDATE        L   
     A            EMSALA        8S 2
     A          K EMCODE
     
以上のDDSを使って、追加・更新・削除できるプログラムをコーディングしてください。
  • 生成されたコード
クリックしてソースを展開
EMPMST
** Free
ctl-opt dftactgrp(*no) actgrp(*new);

dcl-f EMPLY usage(*update) keyed;

dcl-s empCode char(6);
dcl-s empName char(30);
dcl-s empDept char(3);
dcl-s empSala packed(7:2);
dcl-s operation char(1);

dcl-s validCode char(1);

 // メイン処理
dow not %eof;

   // ユーザーから操作を受け付ける
   dsply '操作を選択してください: (A) 追加 (U) 更新 (D) 削除: ' operation;

   select;
     when operation = 'A';
       exsr addRecord;
     when operation = 'U';
       exsr updateRecord;
     when operation = 'D';
       exsr deleteRecord;
     other;
       dsply '無効な操作です';
   endsl;

enddo;

*inlr = *on;

 // 追加処理サブプロシージャ
begsr addRecord;
   dsply '従業員コード: ' empCode;
   dsply '従業員名: ' empName;
   dsply '部門コード: ' empDept;
   dsply '給与: ' empSala;

   chain empCode EMPLY;
   if %found(EMPLY);
     dsply '従業員コードが既に存在します';
   else;
     empCode = %trim(empCode);
     empName = %trim(empName);
     empDept = %trim(empDept);
     empSala = empSala;

     write EMPLY;
     if %error;
       dsply 'レコード追加に失敗しました';
     else;
       dsply 'レコードを追加しました';
     endif;
   endif;

endsr;

 // 更新処理サブプロシージャ
begsr updateRecord;
   dsply '従業員コード: ' empCode;
   chain empCode EMPLY;
   if not %found(EMPLY);
     dsply '従業員コードが見つかりません';
   else;
     dsply '新しい従業員名: ' empName;
     dsply '新しい部門コード: ' empDept;
     dsply '新しい給与: ' empSala;

     empName = %trim(empName);
     empDept = %trim(empDept);
     empSala = empSala;

     update EMPLY;
     if %error;
       dsply 'レコード更新に失敗しました';
     else;
       dsply 'レコードを更新しました';
     endif;
   endif;
endsr;

 // 削除処理サブプロシージャ
begsr deleteRecord;
   dsply '従業員コード: ' empCode;
   chain empCode EMPLY;
   if not %found(EMPLY);
     dsply '従業員コードが見つかりません';
   else;
     delete EMPLY;
     if %error;
       dsply 'レコード削除に失敗しました';
     else;
       dsply 'レコードを削除しました';
     endif;
   endif;
endsr;

ぱっと見は問題ないFFRPGのソースコードが出力されますが、コンパイル時エラーとなりプログラム作成ができません。
AIに再出力させたり、手直しをするもののなかなかコンパイルが通るソースが作成できませんでした。

構文間違い・エラー例

  • 標識の演算子が * ではなく %になっている
  • RETURN命令がなくプログラム終了されない
  • 項目長が指定したものより短い
  • WRITE命令にエラー?
    image.png
    ・・・など他にも多数

まとめ

今回の調査の範囲では、要件を完全に満たすかつコンパイルが通るソースは生成できませんでした。
プログラムひとつで完結する(外部ファイルを使用しない)簡易的なプログラムは手直しせずとも作成できますが、外部ファイル・プログラムの呼び出しが必要な複雑なプログラムはAIのみでは簡単には作成できないようです。(時間をかければできるかもしれませんが・・・)
次の記事でも記載しますが、個々人のスキルの取得や倫理的な観点からは、AIはあくまで補助的なツールとして使うのが望ましいのかもしれません。

0
0
0

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
0
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?