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?

IBM Bobを使用したマスター更新プログラム作成+仕様書の作成

0
Last updated at Posted at 2026-09-15

IBM Bobを使用したマスター更新プログラム作成


目次

1. はじめに
2. やりたいこと
3. 一連の処理
4. 定価に加算を行うプログラム
5. 当月売上金額・当年売上金額を再計算するプログラム
6. まとめと今後の改善点
7. プログラムから設計書の作成

1. はじめに

本記事は IBM RISING2026 のチーム成果物として作成したものです。
今回は IBM Bob を活用して、品目マスター(HINMSP)に対する一括更新プログラムをRPG IIIで作成したケースを紹介します。


2. やりたいこと

サンプルとして用意した品目マスター(HINMSP)に対して、一括更新を実施できるプログラムを作成します。
対応言語: RPG III(RPG400)

更新内容

項目 内容
A 定価が 1,000以上 の場合、定価の値に 100 を加算 する
B 定価が更新された場合、当月売上金額・当年売上金額をそれぞれ再計算する

再計算式:

当月売上金額 = 定価 × 当月売上数量
当年売上金額 = 定価 × 当年売上数量

品目マスター(HINMSP)DDS定義

     A* 品目マスター・ファイル
     A                                      UNIQUE
     A          R HINMSR                    TEXT('品目マスター・レコード')
     A*
     A            HNBANG         5          COLHDG('品目番号')
     A            HNNAKN        20          COLHDG('品名' '仮名')
     A            HNNAKJ        20O         COLHDG('品名' '漢字')
     A            HNVEND         5          COLHDG('仕入先' '番号')
     A            HNTEIK         5  0       COLHDG('定価')
     A            HNGENK         5  0       COLHDG('原価')
     A            HNGSUR         5  0       COLHDG('当月' '売上数量')
     A            HNNSUR         5  0       COLHDG('当年' '売上数量')
     A            HNGKIN         7  0       COLHDG('当月' '売上金額')
     A            HNNKIN         7  0       COLHDG('当年' '売上金額')
     A*
     A          K HNBANG

3. 一連の処理

処理はA・Bの順で2つのプログラムを作成します。

A. 定価に加算を行うプログラム(HINUPD)
        ↓
B. 当月売上金額・当年売上金額を再計算するプログラム(KINUPD)

4. 定価に加算を行うプログラム(HINUPD)

以下はIBM Bobとのやり取りの記録です。

👤 User が入力、🤖 Assistant がIBM Bobの回答です。


👤 ファイルHINMSP.MBRを一括更新するプログラムをRPGⅢで作ってほしい


🤖 処理フロー概要(Plan)

対象ファイル: HINMSP(品目マスター) — キー: HNBANG(品目番号 5桁)

ステップ 内容
① HINMSP を Update 用(UF)でオープン
② READ サイクルで先頭から順に全件処理
③ HNTEIK >= 1000 の場合、指標50をセット
④ 指標50がONの時、HNTEIK + 100 → HNTEIK
⑤ 指標50がONの時、UPDAT HINMSR
⑥ LRで正常終了

👤 定価が1,000以上の時、定価の値にプラス100をする


🤖 生成されたプログラム(HINUPD)

H* HINUPD - 品目マスター定価一括更新
F*
FHINMSP   UF  E           K        DISK
C*
C           HNTEIK    COMP 1000          50
C  50       HNTEIK    ADD  100   HNTEIK
C  50                 UPDAT HINMSR

F仕様書の説明:

カラム 値 意味
7–14 HINMSP ファイル名
15 U 更新ファイル(Update)
16 F フルプロシジャー
19–20 E 外部記述(DDSで定義済み)
34 K キー順アクセス
40–46 DISK ディスクファイル

C仕様書の説明:

  • COMP 1000:HNTEIK >= 1000 のとき 指標50をON
  • ADD 100:指標50がONの時のみ HNTEIK + 100 → HNTEIK
  • UPDAT HINMSR:指標50がONの時のみレコードを書き戻す

👤 作成したプログラムHINUPDのテスト仕様書を作ってほしい。テストする観点を洗い出して


🤖 テスト観点(16ケース)

グループ 観点 重点
A. 境界値 1,000(ON境界)/ 999(OFF境界)/ 1,001 最重要
B. 同値分割 通常の更新対象・対象外・ゼロ値 基本動作確認
C. 特殊値 99,900 / 99,999 の桁あふれ リスク確認
D. 件数・状態 0件 / 全件対象 / 全件対象外 / 混在 全体処理確認
E. 副作用 他フィールド不変 / LR正常終了 / 再実行の累積 非破壊確認

桁あふれに注意: HNTEIK は5桁(最大 99,999)のため、99,900以上に +100 すると桁あふれが発生します。上限チェックの追加要否を確認してください。


👤 テストデータを作ってほしい


🤖 テストデータ(8件)

No. HNBANG 品名 HNTEIK(前) HNTEIK(期待値) テスト観点
1 00100 ショウヒンA 500 500 更新対象外(中間値)
2 00200 ショウヒンB 999 999 境界値 OFF
3 00300 ショウヒンC 1,000 1,100 境界値 ON
4 00400 ショウヒンD 1,500 1,600 更新対象(中間値)
5 00500 ショウヒンE 200 200 更新対象外
6 00600 ショウヒンF 2,500 2,600 更新対象(大きい値)
7 00700 ショウヒンG 0 0 ゼロ値
8 00800 ショウヒンH 99,900 ⚠️桁あふれ確認 桁あふれ確認用

作成したプログラム:

ファイル 種別 役割
HINUPDTD.MBR RPG III テストデータ投入プログラム(8件書き込み)
HINUPDTS.MBR CL テスト一連実行(バックアップ→投入→実行→確認)

テスト実行手順:

① CRTRPGPGM PGM(HINUPDTD) SRCFILE(QRPGSRC)    ← テストデータ投入PGM コンパイル
② CRTCLPGM  PGM(HINUPDTS) SRCFILE(QCLSRC)     ← テスト実行CL コンパイル
③ CALL PGM(HINUPDTS)                           ← テスト一括実行

👤 HINUPDのプログラムでCOMPを使わずに書き直して


🤖 COMP → IFGE への書き直し

変更前(COMP + 条件指標):

C           HNTEIK    COMP 1000          50
C  50       HNTEIK    ADD  100   HNTEIK
C  50                 UPDAT HINMSR

変更後(IFGE / END 構造化命令):

C           HNTEIK    IFGE 1000
C           HNTEIK    ADD  100   HNTEIK
C                     UPDAT HINMSR
C                     END
項目 COMP版 IFGE版
条件判定命令 COMP 1000 IFGE 1000
条件指標 *IN50 を使用 不要(指標なし)
可読性 指標の意味を別途把握する必要あり ブロックで意図が明確

👤 品目マスターを読み込む処理がないので、修正してほしい


🤖 プライマリファイルへの変更 → さらにREADループへ

最初の提案(F仕様書を UP に変更)に対して、「プライマリファイルを使わずに作ってほしい」と指示。
READ 命令と DOWEQ ループによる実装に変更しました。

最終版 HINUPD.MBR:

H* HINUPD - 品目マスター定価一括更新(READループ版)
F*
FHINMSP   UF  E           K        DISK
C*
C*  先頭レコード読込(*IN99=EOFフラグ)
C                     READ HINMSP                        99
C*
C           *IN99     DOWEQ*OFF
C           HNTEIK    IFGE 1000
C           HNTEIK    ADD  100   HNTEIK
C                     UPDAT HINMSR
C                     END
C                     READ HINMSP                        99
C                     ENDDO
C*
C                     SETON                     LR

処理フロー:

READ HINMSP  ← 先頭レコードを読む(EOFなら *IN99 ON)
      ↓
DOWEQ *OFF   ← *IN99がOFFの間(=レコードあり)ループ
  ├─ IFGE 1000  ← HNTEIK >= 1000 ?
  │    ADD 100     ← 定価に +100
  │    UPDAT        ← レコード更新
  │  END
  └─ READ HINMSP  ← 次のレコードを読む
ENDDO        ← *IN99 ON になったらループ脱出
      ↓
SETON LR     ← 正常終了

5. 当月売上金額・当年売上金額を再計算するプログラム(KINUPD)

4の対応内容を踏まえ、最初から適切な命令(IFGE・READループ) を使ったプログラムを作成します。


👤 以下の仕様のプログラムを作成してほしい(新規プログラム名:KINUPD)

品目マスターの定価が1000以上の場合、定価にプラス100をする
定価が更新された場合、当月売上金額、当年売上金額をそれぞれ更新する
 当月売上金額 = 定価 × 当月売上数量
 当年売上金額 = 定価 × 当年売上数量

🤖 処理フロー概要(Plan)

ステップ 処理内容
① HINMSP を更新モード(UF)でオープン
② READ で先頭レコード読込(EOF: *IN99)
③ DO *HIVAL でEOFまでループ
④ HNTEIK >= 1000 の場合: 定価に +100
⑤ 定価更新後: HNGKIN = HNTEIK × HNGSUR(当月売上金額)
⑥ 定価更新後: HNNKIN = HNTEIK × HNNSUR(当年売上金額)
⑦ UPDAT HINMSR でレコード更新
⑧ 次レコードを READ、ループ継続
⑨ SETON LR で正常終了

🤖 生成されたプログラム(KINUPD)

H* KINUPD - 品目マスター定価・売上金額一括更新
F*
FHINMSP   UF  E           K        DISK
C*
C                     DO   *HIVAL
C                     READ HINMSP                        99
C  99                 LEAVE
C*
C           HNTEIK    IFGE 1000
C           HNTEIK    ADD  100   HNTEIK
C           HNTEIK    MULT HNGSUR   HNGKIN  70
C           HNTEIK    MULT HNNSUR   HNNKIN  70
C                     UPDAT HINMSR
C                     END
C*
C                     ENDDO
C*
C                     SETON                     LR

主要仕様ポイント:

項目 内容
ファイル HINMSP(品目マスター)更新モード UF
EOF 指標 *IN99(ON = ファイル終端)
定価加算条件 HNTEIK >= 1000(IFGE 1000)
当月売上金額 HNGKIN(7,0) = HNTEIK × HNGSUR
当年売上金額 HNNKIN(7,0) = HNTEIK × HNNSUR
更新フォーマット UPDAT HINMSR

👤 READ HINMSPがソース上に二回あるけど1個に修正してほしい


🤖 READ を1か所に集約した最終版

DO ループの先頭で1回だけ READ するシンプルな構造に変更しました。

H* KINUPD - 品目マスター定価・売上金額一括更新(最終版)
F*
FHINMSP   UF  E           K        DISK
C*
C                     DO   *HIVAL
C                     READ HINMSP                        99
C  99                 LEAVE
C*
C           HNTEIK    IFGE 1000
C           HNTEIK    ADD  100   HNTEIK
C           HNTEIK    MULT HNGSUR   HNGKIN  70
C           HNTEIK    MULT HNNSUR   HNNKIN  70
C                     UPDAT HINMSR
C                     END
C*
C                     ENDDO
C*
C                     SETON                     LR

最終的な処理フロー:

DO *HIVAL
  READ HINMSP   ← ここで読む(1回だけ)
  *IN99=ON → LEAVE(EOF脱出)
  HNTEIK >= 1000 の場合:
    定価 +100
    当月売上金額 再計算
    当年売上金額 再計算
    UPDAT HINMSR
  END
ENDDO
↓
SETON LR(正常終了)

6. まとめと今後の改善点

内容のまとめ

初めに概要の説明、および言語の選択
→ファイル定義を読み込ませる
→更新内容を説明
→IBM BOBよりプログラムの定義説明
→IBM BOBがプログラムを作成し、プログラム内容を説明
 (対象プログラム:HINUPD.rpg)
→テストケースの作成を依頼
→IBM BOBより、テストデータとテストプログラムを提示
 (テストデータ  :HINUPDTD.rpg
  テストプログラム:HINUPDTS.clp)
→細かい点を個別に修正

4・5の比較:Bobとの対話から得られた学び

4の処理と異なるのは、
・COMPによる条件は使用せず、IFGEによる条件で処理を行っている
・RPGサイクルを使用しない形で、レコードリード処理が記載されている
といった点が異なり、先の対応内容が反映された形でプログラムが作成されています。

観点 4. HINUPD 5. KINUPD 備考
条件判定命令 COMP → 指摘後 IFGE に修正 最初から IFGE ✅ 初期プロンプトに反映済み
ループ方式 RPGサイクル前提 → 指摘後 DO/READ に修正 最初から DO/READ ✅ 初期プロンプトに反映済み
READ重複 — DO前後に2回 → 指摘後1回に修正 ⚠️ 引き続き要確認
ファイル定義 UP 指定漏れ → 指摘後修正 UF で正しく定義 ✅

初期プロンプトへの推奨記載事項

今後の開発では以下を最初のプロンプトに含めると修正往復が減ります。

・条件判定は COMP を使わず IFGE / IFLT 等の構造化命令を使用すること
・RPGサイクルは使用せず、READ命令と DOWEQ ループで全件処理すること
・ファイルは UF(更新専用)で定義し、プライマリファイル指定は不要
・演算結果の中間フィールドはI仕様書で明示定義すること

注意点

MULT の結果桁数指定について
外部記述(E)でDDSのフィールドをそのまま使う場合、結果フィールドの桁数指定(70)はコンパイラが無視することがあります。桁数不一致によるランタイムエラーのリスクがあるため、中間作業フィールド(I仕様書で定義)を使う方がより安全です。

べき等ではない点に注意
複数回実行すると定価が累積加算されます。運用上の実行管理(二重実行防止)が必要です。
テスト前は CPYF コマンドで HINMSP を事前退避することを推奨します。

7. プログラムから設計書の作成

Bobにプログラムから設計書を作成してもらいます。
今回は以下の4つのパターンで作成を行いました。

使用AI 指示内容
1 IBM Bob 具体的に指示をする
2 IBM Bob 抽象的に指示をする
3 gemini 具体的に指示をする
4 gemini 抽象的に指示をする

Bob 具体的指示と抽象的指示の比較

まず、Bobを使用した2つの仕様書の比較を行います。
以下が実際にBobに依頼した内容です。

Bob 具体的指示内容

依頼:RPGプログラム仕様書(HTML形式)の作成

提示するRPGソースコード(KINUPD.rpg)を解析し、以下の【基本ルール】および【ドキュメント構成標準】
に従ってプログラム仕様書をHTML形式で作成してください。
他プログラムの仕様書作成時にも同様のフォーマットを使用するため、指定したHTML構造およびスタイルを
厳密に遵守してください。

【基本ルール】
1.出力形式: HTML5(CSSは<style>タグ内に内包し、単一ファイルとして完結させる)
2.デザイン方針: 視認性の高いモダンで清潔感のあるデザイン(レスポンシブ対応、標準的なシステムドキュ
メント風のスタイリング)
3.推測の明記: ソースコード上に定義がない項目(項目名日本語等)は、ソースコード内のコメントや文脈
から推測して記載し、「※推測」と注記を入れてください。

【ドキュメント構成標準】(必須セクション)
生成するHTMLは以下の目次・構成を含めて作成してください。

1.ヘッダー情報
  1.プログラムID(例: KINUPD)
  2.プログラム名(例: 品目マスター一括更新プログラム)
  3.対象ファイル名(例: KINUPD.rpg)
  4.作成日(現在日付)

2.プログラム概要
  1.処理の目的・全体概要(要約)

3.使用ファイル一覧
  1.ファイル名、アクセスモード(更新/参照/追加等)、キー指定有無、レコードフォーマット名

4.使用フィールド(変数)一覧
  1.フィールド名、役割・用途、処理内での扱い(入力/出力/作業用)

5.詳細処理フロー・ロジック
  1.処理の開始から終了までの流れをステップ順(1, 2, 3...)に明記
  2.条件分岐(IF条件等)やループ処理(DOループ等)のロジック詳細
  3.計算式の明示

6.使用インジケーター(フラグ)一覧
  1.インジケーター(例: 99, LR等)の名称、役割、ON/OFFの条件

【デザイン・HTML構造指定】
・<h1> : プログラム名・ID
・<h2> : 各主要セクション(プログラム概要、使用ファイル一覧など)
・テーブル表示: ファイル一覧、フィールド一覧、インジケーター一覧は必ず <table> タグを使用
(ヘッダー背景色付き、交互の行背景色指定)
・強調表示: 条件分岐や重要な計算式は <mark> やコードブロック <code> を使用

対象ファイル名: KINUPD.rpg

Bob 抽象的指示内容

KINUPD.rpgとHINUPD.rpgの仕様書をそれぞれhtml形式で作成して

指示内容による結果の違い
<具体的指示>
デザイン・HTML構造を指定しているため、全体的にまとまった印象があります。重要なところは赤で強調表示しており、視覚的に整っている仕様書になりました。一度作成ルールを文書化しておけば、毎回指示する必要なく、同じ構成・デザインの仕様書を作成してくれます。

<抽象的指示>
抽象的に指示した場合でも、Bobが構成を決めて仕様書を作成してくれました。処理内容を確認する程度なら十分かもしれませんが、文書として残すのなら具体的に構成やデザインを指示していた方がよさそうです。


※当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。

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?