MENU

06 IBMiの基礎 [RPG開発] ~仕様書、RPGサイクル、標識などの特徴を踏まえたRPG開発の基本 |新・IBM i入門ガイド[開発編]

RPGは、IBM iの基幹業務アプリケーションの開発言語として長く使われている。その最大の理由はIBM iの特徴である資産継承性、つまり過去にコンパイルし実行可能となったプログラム・オブジェクトは、新しいハードウェアや新しいOSバージョンに変わっても、再コンパイルすることなく稼働させられる点にある。

そのため30年前に作成したプログラムを、現在も現役で稼働させているユーザーは少なくない。RPGが今後も引き続き使用され続けることは間違いないが、一方でRPGは現在も機能強化を続けている。

ここではRPGの最新情報を踏まえながら、RPG開発の基本について説明する。

RPGプログラム開発の流れ

最初にRPGでプログラムを作成する流れを、図表1で紹介する。

図表1 RPGプログラムの作成方法

CLと同様に、RPGにもOPMとILEの2種類あるが、大まかな開発の流れはCLプログラムの場合と変わらない。異なる点は、使用するコマンドだけである。

図表1でOPM RPGのプログラム・ソースからILE RPGのプログラムソースに向けて矢印が伸びている点に注目してほしい。これはCVTRPGSRCコマンドの使用により、OPM RPGのプログラム・ソースをILE RPGにソース変換できることを表している。既存のOPM RPGを、まずはILE RPGとして稼働させてみたい場合に有用である。

RPGの特徴

次にRPGのソース・プログラムを参照しながら、RPG言語の特徴である仕様書、RPGサイクル、標識について紹介する。

(1) 仕様書

RPGのコーディングでは、プログラムの処理内容に応じた最大7種類の仕様書があり、必要に応じて使用する。仕様書をわかりやすく説明するために、図表2では固定フォームのILE RPGソース・プログラムのサンプルを紹介している。ここで、赤字のアルファベットに注目してほしい。Hと書かれている箇所はH仕様書、Fと書かれている箇所はF仕様書、というように各仕様書を意味している。

図表2 ILE RPG ソース・プログラムのサンプル

ILE RPGでは、以下の仕様書がある。

制御仕様書(H仕様書):プログラム名や日付の形式などの機能を指定し、プログラムの生成および実行に関する情報をコンパイラに提供する
ファイル仕様書(F仕様書):プログラムで使用する全ファイルを記述する
定義仕様書(D仕様書):プログラムで使用するデータの固定情報や変数などを記述する
入力仕様書(I仕様書):プログラムで使用する入力レコードやフィールドを記述する
演算仕様書(C仕様書):プログラムの開始から終了までの処理の流れを記述する
出力仕様書(O仕様書):プログラムで使用する出力レコードやフィールドを記述する
プロシージャー仕様書(P仕様書):サブプロシージャーの始めと終わりにマークをつけ、サブプロシージャー名およびエクスポートするかどうかの指示を記述する

(2) RPGサイクル

RPGは報告書を作成するための簡易言語として利用が始まったが、ユーザーの業務では物理的な紙にデータを印刷する帳票プログラムが多く使われてきた。

帳票プログラムでは、データベースからレコードを読み取り、印刷前に演算を実行し、書き出す、という一連のステップは共通している。そこでユーザーでも簡単にプログラムを記述できるように、RPGではレコードの読み取り/書き出しのタイミングをソース・プログラムに明示的に指定する必要がなく、プログラムのコンパイル時に、コンパイラによって一連のステップが順序付けられて提供される。この一連のステップが、RPGサイクル(プログラム・サイクル)である。

もちろんソース・プログラムのコーディングにより、RPGサイクルを使用しないようにすることも可能である。

(3) 標識

標識は、‘1’(オン)または‘0’(オフ)のいずれかを入れられる1バイトの特殊なフィールドである。コーディングを簡潔化するため、命令の結果を示したり、命令の処理の条件付け(制御)として使用される。

図表3はサブルーチンのサンプル・プログラムであるが、185行目は#NAKNをキーとして、HINMSL01ファイルの読み取り開始位置を設定できたら標識「90」を‘1’(オン)とする、という演算が書かれている。

図表3 サブルーチンのソース・プログラムのサンプル

この「90」が結果の標識である。標識は使い方に慣れると便利である一方、多用するとわかりにくく、プログラムの保守性が低下することに注意したい。

フリーフォームRPG

ここではILE RPGのフリーフォーム化について説明する。簡単な例であるが、先ほどの説明で使用した図表3をフリーフォームで記述すると、図表4のようになる。固定フォームのRPGと比較して、桁位置の制限がないことがわかる。

フリーフォームRPGはJavaやCなどと記述方法が似ているため、特に新規にRPGを習得しようとする開発者にとって、直感で理解しやすく、習得しやすい利点がある。

また従来からのRPG開発者にとっても、フリーフォームRPGの利点は多くある。たとえば入力桁数制限がなくなるため、変数やプロシージャーなどの命名に、わかりにくい短縮名を使用するのではなく、理解しやすい長い名前を使用できる。

また組み込み関数などを使用した長い式を記述するときに、以前であれば複数行にわたる式は桁位置を調整し注意する必要があったが、容易に作業できるようになる。さらに構文のインデントが使用できることで、複雑なロジックを含むプログラムコードでも理解しやすくなる。

これらはすべて、プログラムの保守性向上につながる。ただしフリーフォームRPGを使用する際には、利用できる開発ツールに制限があることに注意したい。従来RPGの開発ツールとして使用してきたSEU(Source Entry Utility)は、IBM i 6.1で機能拡張が凍結されており、SEUでフリーフォームRPGを使用すると構文エラーとなる。

フリーフォームRPGでは「Rational Developer for i」(RDi)、Visual Studio Code(VSCode)の拡張機能として提供される「Code for IBM i」、および「IBM i Merlin」の使用が前提となる。

RPGを含むIBM iの開発環境が近年進化していることは、「01 IBM iの開発環境」にも詳しい。ぜひ参考にして、最適な開発ツールを選択してほしい。

RPG Code Assistant(IBM i Code Assistant)

昨今IBMではプログラムコードのモダナイゼーションを推進する目的で、生成AIを組み込んだ製品を発表している。

たとえばIBM Zユーザー向けに発表した「IBM watsonx Code Assistant for Z」は、メインフレームのCOBOLコードからJavaコードへの変換や、アプリケーションのリファクタリングツールとしてプログラムの内部構造を整理できる。

IBM iのRPGについてはまさに現在、開発が進められている。RPGに特化した大規模言語モデル(LLM)を開発し、これを利用することで、既存RPGコードの調査、システム/36で使用されていたRPG Ⅱなどの古いRPGコードからフリーフォームRPGへの変換、コード生成といったAIベースのRPG Code Assistantの機能を実現させようとしている。

技術者不足に悩むIBM iユーザーに同製品の発表は待ち望まれており、この製品の登場により、モダナイゼーションが一気に加速する可能性も見えてくる。引き続き今度の動向に注目していきたい。

著者
松川 真由美氏

日本アイ・ビー・エム システムズ・エンジニアリング株式会社
オープン・コンピテンシー・センター

新・IBM i入門ガイド[開発編]

01 IBM iの開発環境
02 IBM iの開発環境選択基準
03 IBM iの開発言語
04 IBM iの基礎[CL設計・開発]
05 IBM iの基礎[データベース]
06 IBM iの基礎[RPG開発]
07 IBM iの基礎[Java開発]
08 IBM iのシステム連携
09 IBM iの新しいアプリケーション例
10 開発編 FAQ

[i Magazine 2025 Spring号掲載]