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

4-4.BobにGitlab-Issueから指示する

1
Posted at

Bobにプロンプトで指示せず指示内容をIssueに記録します

■Gitlab-Issue作成

[計画]-[作業アイテム]-[新しいアイテム]

ラベル 値
タイプ Issue
タイトル FFRPGへの変換とテストスクリプト作成
担当 自分

説明

以下の実行計画を立ててコメントに記載してください
*RENRITSU.RPGをFRENRITU.FFRPGに変換
*FRENRITU.FFRPGをRPGUnitでテストコード作成

[Issueを作成]

作成したIssueのURLをブラウザのURLから取得します
例) https://{Gitサーバ}/ibmi/renritsu/-/work_items/4

■BobへIssue読込指示

◯1回目

プロンプトに以下を入力

glabコマンドでhttps://{Gitサーバ}/ibmi/renritsu/-/work_items/4
を読み込んで指示に従ってください

その後表示される[一度だけ承認]は毎回OK
…[タスクに対して承認]で毎回入力不要にしてもよい

◯2回目

実行計画がIssueにコメントとして追加されました
しかしブランチがmasterのままで、FFRPG化を作成するブランチを分けていないことに気づきました

コメントに以下を追記

実行計画実施前にmasterブランチから feature/FFRPG化(#4) ブランチを作成して、
そのブランチに切り替えてください

コメントのリンクをコピー

プロンプトに以下を入力

https\://{Gitサーバ}/ibmi/renritsu/-/work_items/4#note_523 の指示に従ってください

…以後繰り返し

※RPGUnitのテストPG作成は0から作成したらコインを多くつかった(30コインぐらい)
 サンプルを提示する方が効果的です

■Issueの記録

Gitlab-IssueをQiitaで再現するに、作業者の指示は緑に、Bobの書込みは黄色にしました

FFRPGへの変換とテストスクリプト作成

以下の実行計画を立ててコメントに記載してください
*RENRITSU.RPGをFRENRITU.FFRPGに変換
*FRENRITU.FFRPGをRPGUnitでテストコード作成

実行計画

1. RENRITSU.RPG を FRENRITU.FFRPG に変換

対象ファイルの概要

QRPGSRC/RENRITSU.RPG : OPM RPG3 プログラム(二次方程式 AX²+BX+C=0 の解を求める)
QDSPSRC/RENRITSU.DSPF : 入力画面(FMT11)・応答画面(FMT12) の2レコード構成

変換方針

区分 RPG3 FFRPG
ファイル仕様 FRENRITSUCF E WORKSTN DCL-F RENRITSU WORKSTN
主処理ループ DO *HIVAL / ENDDO DOW *ON; / ENDDO;
画面 EXFMT EXFMT FMT11 EXFMT FMT11;
条件分岐 IFEQ / ELSE / ENDIF IF / ELSE / ENDIF;
演算 MULT/DIV MULT / DIV * / / 演算子
SQRT SQRT W#HANB W#T5 %SQRT(W#HANB)
サブルーチン BEGSR / ENDSR DCL-PROC または BEGSR (インライン)
変数宣言 演算仕様の作業フィールド定義 DCL-S で宣言
インジケータ *IN60 *IN70 等 DCL-S IN60 IND 等、または直接論理変数

変換後のファイル

・配置先: QRPGSRC/FRENRITU.FFRPG
・拡張子 .FFRPG = Free-form RPG (ILE RPG) のソースタイプ
・ファイル名は Work Item の指定通り FRENRITU(8文字制約対応)

Rules.mk への追記

FRENRITU.PGM: FRENRITU.FFRPG RENRITSU.FILE

2. FRENRITU.FFRPG を RPGUnit でテストコード作成

テスト対象ロジック

サブルーチン SR@KSN の計算ロジック(FFRPG 変換後はプロシージャとして切り出す)

テストケース A B C 期待結果
実数解2つ (判別式>0) 1 -3 2 ANS1=2.00, ANS2=1.00
重解 (判別式=0) 1 -2 1 ANS1=1.00, ANS2=1.00
実数解なし (判別式<0) 1 0 1 IN60=*ON
二次方程式でない (A=0) 0 2 1 IN61=*ON

テストファイル構成

・配置先: QRPGSRC/TFRENITR.FFRPG(RPGUnit テストモジュール、8文字制約)
・TESTCASE プロシージャを4本作成
・RPGUnit の ssert / ssertEqual / ssertOn / ssertOff を使用

Rules.mk への追記

TFRENITR.MODULE: TFRENITR.FFRPG

作業順序

  1. QRPGSRC/FRENRITU.FFRPG を作成(RPG3 → FFRPG 変換)
  2. QRPGSRC/Rules.mk に FRENRITU.PGM ビルドルールを追加
  3. QRPGSRC/TFRENITR.FFRPG を作成(RPGUnit テストコード)
  4. QRPGSRC/Rules.mk に TFRENITR.MODULE ビルドルールを追加
  5. ビルド確認(IBM i 実機 SSH 経由)

実行計画実施前にmasterブランチから feature/FFRPG化(#4) ブランチを作成して、そのブランチに切り替えてください

Bobでブランチが feature/FFRPG化(#4) に切り替わったことを確認しました
実行計画を進めて、結果をここにコメントで記載してください

#4 (comment 530)
が文字化けしています。修正してください

実行計画 完了報告

以下3点の作業を feature/FFRPG化(#4) ブランチに対して実施・プッシュしました。

1. QRPGSRC/FRENRITU.FFRPG を作成

RENRITSU.RPG(RPG3/OPM)を ILE RPG 完全自由形式(**FREE)に変換。
主な変換内容:
・F仕様 → DCL-F RENRITSU WORKSTN;
・作業フィールド → DCL-S で宣言(PACKED(5:2))
・DO *HIVAL → DOW *ON;
・EXFMT / IF / ELSE / ENDIF → セミコロン付き自由形式
・MULT / DIV / SUB / ADD → * / - + 演算子
・SQRT W#HANB W#T5 → W#T5 = %SQRT(W#HANB);
・BEGSR / ENDSR はインライン形式で保持

2. QRPGSRC/TFRENITR.FFRPG を作成

RPGUnit テストモジュール(CTL-OPT NOMAIN;)。
計算ロジック(CALC_KSN プロシージャ)を呼び出す4テストケースを実装。

プロシージャ名 A B C 検証内容
TEST_JITSUSU2 1 -3 2 ANS1=2.00, ANS2=1.00
TEST_JUUKAI 1 -2 1 ANS1=1.00, ANS2=1.00(重解)
TEST_MUKAI 1 0 1 IN60=*ON(実数解なし)
TEST_HITSUJI 0 2 1 IN61=*ON(二次方程式でない)

3. QRPGSRC/Rules.mk にビルドルール追加

FRENRITU.PGM: FRENRITU.FFRPG RENRITSU.FILE
TFRENITR.MODULE: TFRENITR.FFRPG

コミット: c48ae9e ブランチ: feature/FFRPG化(#4)

gitlabにfeature/FFRPG化(#4)ブランチがpushされていることを確認しました
FRENRITUとTFRENITRをコンパイルしてください

BobがFRENRITUは拡張子がFFRPGではNGと判断しRPGLEに変更。コンパイル成功

mentioned in commit 617bf521 xx時間前

[メモ]TFRENITRのコンパイルが通らず延々と終わらないので中止した
RPGUNITのインストールができていなかったらしい
Bobの拡張機能からインストールではなく、https://rpgunit.sourceforge.net/tutorial.htmlからインストールした

(手動でRun Buildを実行しソースコードでエラーメッセージを確認した)
TFRENITRのコンパイルでエラーになる
The name or indicator ASSERTOFF is not defiened
のエラーメッセージの原因を調べてください

ここからBobは原因を調べコードを修正しはじめた
コミット→プッシュ→コンパイル→エラーで修正を繰り返した
その間作業者はBobで作業内容に[OK]で許可を与え続けた

mentioned in commit 4a4af3c3 xx時間前
mentioned in commit 0d5b29a3 xx時間前
mentioned in commit 3b7bf754 xx時間前
mentioned in commit 071b4e16 xx時間前
mentioned in commit e8510f1f xx時間前
mentioned in commit b159b71d xx時間前
mentioned in commit 4a41f294 xx時間前

コンパイル完了報告

feature/FFRPG化(#4) ブランチ、pvs (TAKAMILIB) でのビルド結果です。

結果

オブジェクト 結果
TAKAMILIB/FRENRITU.PGM 成功
TAKAMILIB/TFRENITR.MODULE 成功

note_536 のエラー原因と修正内容

原因: ASSERTOFF is not defined エラーは2つの問題が重なっていた。

  1. /COPY RPGUNIT1,TESTCASE の参照先が間違っていた
    ・誤: RPGUNIT1 ライブラリ(存在しない)
    ・正: RPGUNIT ライブラリ内の RPGUNIT1.FILE
    ・このバージョンのRPGUnitが提供するAPIは assert / iEqual / fail / aEqual のみ
     assertOn / assertOff / assertEqual は存在しない。

  2. RPGUNIT1.FILE/TESTCASE.MBR は固定形式(RPG3)のプロトタイプ定義で、**FREE ソースと混在させると RNF0604 エラーになる。

修正内容 (TFRENITR.RPGLE)

・/COPY を廃止し、assert/iEqual/fail のプロトタイプをソース内に直接定義
・テストコードを **FREE 形式で統一
・アサーションメッセージ文字列をASCII英語に変更(EBCDIC TGTCCSID(5035)での文字化け回避)
・%not を IND = *OFF 比較に変更(コンパイラ互換性)

.bob/tmpを.gitignoreに追加してください

Bobが .gitignoreを変更しコミットとプッシュ

mentioned in commit 4d5c4ddd xx時間前
mentioned in commit ced84095 xx時間前

.gitignoreの変更内容がコメントされていないので指示

note 544(コンパイル完了報告)以後の変更をコメントに書き込んでください

note_544 以後の変更

コミット 内容
4d5c4dd .bob/tmp を .gitignore に追加(note_545 対応)
ced8409 iproj.json に postUsrlibl: [RPGUNIT] を追加

変更詳細

.gitignore への追加 .gitignore .bob/tmp
iproj.json の変更 json { postUsrlibl: [ RPGUNIT ] } Code for IBM i / TOBi からビルドする際に RPGUNIT ライブラリが自動でライブラリリストに追加されるようになります。

コンパイル成功した TFRENITR.RPGLE を実行してテスト結果をコメントに記載してください

Bobがテスト実行のためのbashスクリプトを作成しコミットとプッシュ

mentioned in commit c0ba6d27 xx時間前

TFRENITR テスト実行結果

Success. 4 test cases, 14 assertions, 0 failure, 0 error.

*** Tests of TFRENITR *** Date        : 2026-07-24 / 12:29:44 Job         : 
372442/QSECOFR_NC/QP0ZSPWT User        : TAKAMI iRPGUnit    :
v6.0.0.v IBM i       : V7R6M0 Cur. library: TAKAMILIB Library list:
TAKAMILIB / QGPL / QTEMP / FLIB Success. 
4 test cases, 14 assertions, 0 failure, 0 error.
テストケース 内容 結果
TEST_JITSUSU2 1X^2 - 3X + 2 = 0 => X=2, X=1 PASS
TEST_JUUKAI 1X^2 - 2X + 1 = 0 => X=1(重解) PASS
TEST_MUKAI 1X^2 + 0X + 1 = 0 => 実数解なし PASS
TEST_HITSUJI A=0 => 二次方程式でない PASS

テスト実行前の修正 (MCH1202 対応)

iEqual(200 : %int(ANS1 * 100)) で MCH1202 - Decimal data error が発生したため、assert(ANS1 = 2 : ...) による直接比較に変更。コミット c0ba6d2。

これでFFRPGのコードが自動生成されコンパイル、自動テストが通りました
この後は手動でテストをしてOKなら、マージリクエストを出してレビューを受け、masterにマージすることになります

BobがGitlabと連携することでAIとのやり取りが記録に残るだけではなく、自律的に解決まで進むようになりました
Bob開発にはGitサーバが必須ではないでしょうか?

目次へ

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