2017.12.28  i Magazine 2017 Autumn(8月)掲載
i Magazine 

05 IBM i開発の基礎[RPG開発]

保存版「これから使う人のためのIBM i入門ガイド」開発編 05

RPGは、IBM iにおける基幹業務アプリケーションの開発言語として長く使われているが、この理由としてIBM iの資産継承性が挙げられる。つまり過去にコンパイルし実行可能となったプログラム・オブジェクトは、新しいハードウェアや新しいOSバージョンに変わっても、再コンパイルすることなく稼働させることができる。そのため30年前に作成したプログラムを、現在も現役で稼働させているユーザーは少なくない。今後も引き続き使用され続けるであろうRPG開発について説明する。

 

RPGプログラム開発の流れ

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

 

図表1 画像をクリックすると拡大します】

 

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

 

RPGの特徴

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

(1)仕様書

RPGのコーディングでは、プログラムの処理内容に応じた最大7種類の仕様書があり、必要に応じて使用する(図表2)

 

図表2 画像をクリックすると拡大します】

 

仕様書をわかりやすく説明するために、あえて図表3では固定フォームのILE RPGソース・プログラムのサンプルを紹介している。図表3において、赤字のアルファベットに注目してほしい。Hと書かれている箇所はH仕様書、Fと書かれている箇所はF仕様書、というように各仕様書を意味している。

 

図表3 画像をクリックすると拡大します】

 

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

・制御仕様書(H仕様書)
プログラム名や日付の形式などの機能を指定し、プログラムの生成および実行に関する情報をコンパイラに提供する

・ファイル仕様書(F仕様書)
プログラムで使用する全ファイルを記述する

・定義仕様書(D仕様書)
プログラムで使用するデータの固定情報や変数などを記述する

・入力仕様書(I仕様書)
プログラムで使用される入力レコードやフィールドを記述する

・演算仕様書(C仕様書)
プログラムの開始から終了までの処理の流れを記述する

・出力仕様書(O仕様書)
プログラムで使用される出力レコードやフィールドを記述する

・プロシージャ仕様書(P仕様書)
サブプロシージャの始めと終わりにマークを付け、サブプロシージャ名およびエクスポートするかどうかの指示を記述する

 

(2)RPGサイクル(プログラム・サイクル)

RPGが報告書作成のための簡易言語であったことはすでに述べたが、ユーザーの業務において紙にデータを印刷する帳票プログラムは多く使われてきた。帳票プログラムでは、データベースからレコードを読み取り、印刷前に演算を実行し、書き出す、という一連のステップは共通している。

そこでユーザーでも簡単にプログラムを記述できるように、RPGではレコードの読み取り/書き出しのタイミングをソース・プログラムに明示的に指定する必要がなく、プログラムのコンパイル時に、コンパイラによって一連のステップが順序づけられて提供される。これを「RPGサイクル」(プログラム・サイクル)と呼ぶ(図表4)。もちろんソース・プログラムのコーディングにより、RPGサイクルを使用しないようにすることも可能である。

 

図表4 画像をクリックすると拡大します】

 

(3)標識

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

図表5はサブルーチンのサンプル・プログラムであるが、185行目は、#NAKNをキーとしてHINMSL01ファイルの読み取り開始位置を設定できたら標識「90」を’1’(オン)とする、という演算が書かれている。この「90」が結果の標識である。標識は使い方に慣れると便利である一方、多用するとわかりにくく、プログラムの保守性が低下することに注意したい。

 

図表5 画像をクリックすると拡大します】

 

フリーフォームRPG

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

 

図表6 画像をクリックすると拡大します】

 

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

また従来からのRPG開発者にとってもフリーフォーマットRPGの利点は多い。入力桁数制限がなくなるため、変数やプロシージャなどの命名にわかりにくい短縮名を使用するのではなく、理解しやすい長い名前を使用できる。組み込み関数などを使用した長い式を記述するときに、以前であれば複数行にわたる式は桁位置を調整し注意する必要があったが、容易に作業できるようになる。さらに構文のインデントが使用できるので、複雑なロジックを含むプログラム・コードでも理解しやすくなる。これらはすべて、プログラムの保守性の向上につながる。

ただしフリーフォームRPGでは使用する開発ツールとしてEclipseベースのRational Developer for i(RDi)が前提となることに注意してほしい。従来よりRPGの開発ツールとして使用してきたSEU(Source Entry Utility)はIBM i 6.1で機能拡張が凍結されており、SEUでフリーフォームRPGを使用すると構文エラーになってしまう。RDiの詳細については、開発篇(本号)01「IBM i開発環境」の章を参照されたい。[松川 真由美]