プログラマーへの伝言①|RPG ⅢソースをILE RPGへ移行させるヒント

 

 

 本稿はすでにRPG開発に携わっている技術者を対象に、今までのRPG Ⅲと比較しながらILE RPGの優位点などを紹介していく。

 

RPG は今も進化を続けている

 RPG ⅢをILE RPGでモダナイゼーションすることで、次のようなメリットが生まれる。

・開発生産性、保守性の向上
・将来的な拡張性など

 IBM iでの開発言語としてはRPGが主流であるが、この言語も5250アプリケーションと同様にレガシーな存在として、旧型のプログラム言語と認識されているケースが多々見られる。

 しかしRPG言語自体もOSのバージョンアップに伴って、多くの機能拡張がされており、他の言語と遜色のない言語に進化している(図表1

 

 

 代表的な拡張としては、RPG ⅢからILE環境のRPG Ⅳ(ILE RPG)への進化が挙げられる。ただし残念なことに、10年以上が経過した今でもILE RPGを有効利用しているケースはまだ少数派のようだ。

 ILE RPGは自由形式の記述や関数・ポインターの利用など、今までRPG Ⅲでは実装できなかったさまざまな機能を備えている。他のオープン系言語の経験者でも理解しやすく、かつ他言語との連携や他システムとの連携(水平統合)も可能である。

 ILE RPGを使うメリットとしては、以下が挙げられる。これらにより開発生産性、保守性の向上、将来的な拡張性などが期待できる。

 

・RPG Ⅲのスキルだけでも利用可能
・Java、Cなどのプログラムとの連携が可能
・オープン系プログラマーでも取り掛かりやすい
・関数、フリーフォーマット、SQLの利用が可能
・同一アプリケーション内でRPG Ⅲとの混在が可能

 またRPGのコーディングの種類は、図表2のように4パターンある。

 

 

 フリーフォーマットRPG(以下、FF RPG)は、ILE環境の最新PRG言語である。オープン系プログラムの経験者であれば、初めからFF RPGを習得したほうが効率よく、理解しやすい。しかしオープン系言語にあまり馴染みがなく、RPGでの開発が長い場合はILE RPGからのステップアップが最善であろう。

 一般にILE RPGを訴求する対象は、以下の2つがある。

 1つは今までIBM iに携わっておらず、他の言語経験がある技術者、もう1つは長年にわたるRPG開発の経験があり、現在および将来的にも、その保守開発に従事する技術者である。

 本来ILE RPGをはじめとするILE言語(ILE RPG以外にもILEのCOBOLやCLPがある)を習得するには、まずILE環境とは何かという基本的な概念を理解して、それを基本にILE言語を習得すべきだろう。しかしここでは敢えて割愛し、現在RPG Ⅲに慣れている技術者が、まずはILE RPGを使い慣れることを狙いとしたい。

 なぜならILE環境の概念を知らなくてもILE RPGを利用することは可能であり、ILE RPGによるメリットを享受できるからだ。

 もちろんILE環境を知ることで、さらに有効に活用できるので、新たにIBM iを学習する人や、もっとILEを追及したい人はぜひILE環境の習得も目指してもらいたい。

 

RPG ⅢとILE RPGの相違点

 ここでRPG Ⅲプログラマーが、容易かつ自然にILE RPG開発へ移行するためのヒントを紹介する。今までRPG Ⅲで開発しており、ILE RPGの存在は知っているものの、ハードルが高く感じて、なかなかILE RPGへの移行が進んでいなかった開発者を想定している。

 従ってILE RPGの全機能を紹介するのではなく、RPG Ⅲの技術者が簡単に使用できる機能から徐々にILE RPGに慣れていくことが目的である。

 図表3のとおり、RPG Ⅲでは多くの制限があったが、ILE RPGでは緩和され、柔軟なコーディングが可能になっている。

 

 

 また、演算仕様書の命令コードが長いので一部の命令語が変更され、新規で命令が追加されている(図表4)

 今までフィールド名の長さ制限のために、大量のフィールドを使うプログラムでは、フィールド名を苦心して付けた人も多いかと思うが、ILE RPGでは楽にコーディングできる。

 

 

 次にソースファイルの注意点を簡単に説明しよう。

 RPG Ⅲのソースファイルは他のソースファイル(DDS、CLなど)と同様に、初期長の92桁であったが、ILE RPGのソースファイルは最低112桁を指定する必要がある(ILE RPGの場合のソースファイルの長さは112が推奨値であるため)。

 CVTRPGSRCコマンドを実行したときに、ILE RPGソースが112桁未満の場合、エラー・メッセージRNS9362が表示され、行のコメント・エリアが除外されて変換される。

 図表5は、ILE言語と従来の言語の主な属性比較である。

 

 

 メリットの1つに挙げたように、RPG ⅢとILE RPGは混在して使うことが可能である。ILE RPGにするからと言って、「すべてのRPGをILE RPGで記述しなければならない」というわけではないし、「フィールド名を長くしなければならない」こともない。

 まずは気軽にILE RPGを使い始め、徐々に新しい機能などを使いこなしていくことを推奨する。

 

RPG ⅢプログラムをILE RPGに変換する

 ここからは、RPG Ⅲプログラマーが容易にILE RPG開発に移行するためのテクニックを段階的に紹介する。

 とりあえず、1つのRPG ⅢプログラムをILE RPGに変換して、その違いを体感してみよう。

 既存のアプリケーションがRPG Ⅲで作成されている場合、ソースファイルは「QRPGSRC」などの名称で、レコード長が92バイトとなっている。前述のとおり、ILE RPGでは最低112バイトのレコード長が必要なので、最初に、次のようにソースファイルを作成する。

 

CRTSRCPF FILE(任意のライブラリー/QRPGLESRC)RCDLEN(112) IGCDTA(*YES)

 

 これで、ILE RPGのソースファイル「QRPGLESRC」が作成できるが、まだメンバーは何も入っていない状態である。

 次に、システム提供のコマンドであるCVTRPGSRCコマンドを使って、RPG ⅢソースをILE RPGソースに変換する。

 ちなみに初めてこのCVTRPGSRCコマンドを使用する場合は、事前に下記のコマンドで、ログ・ファイルを準備する。

 

CPYF FROMFILE(QRPGLE/QARNCVTLG)
TOFILE(QGPL/QRNCVTLG) CRTFILE(*YES)

 これで、物理ファイルQRNCVTLGがライブラリーQGPLに作成される。

 

CVTRPGSRCコマンドの例

CVTRPGSRC FROMFILE(QGPL/QRPGSRC) ←RPG Ⅲのソースファイル

 FROMMBR(PROOF) ←変換するメンバー名

     TOFILE(QGPL/QRPGLESRC) ←ILE RPGのソースファイル

     TOMBR(*FROMMBR)  ←変換後のメンバー名

 

 前述のログ・ファイルが正常に作成されていないと、下記のメッセージが表示されて変換できない。

 

<CVTRPGSRCコマンドのエラー・メッセージ>
ライブラリー*LIBLにログ・ファイルQRNCVTLGが見つからない。

 この場合、先に記述したログ・ファイルを作成してから、再度実行する。これでQRPGLESRC内にメンバーが追加される。ソース属性はRPGLEとなっているはずだ。

 このILE RPGのソースは、そのままでもコンパイルして実行できる。プログラムの実行方法もCALLなので、アプリケーション全体に影響はない。

 これは最も初歩的なILE RPGの利用方法であるが、これだけでもILE RPGの言語としてのメリットは活かせる。

 CVTRPGSRCコマンドはシステム提供のコマンドなので、変換が必要な命令語などはすべて変換される。しかしその他のフィールド名などはそのまま継承されるので、RPG Ⅲソースを保守していた技術者であればわかりやすいだろう。

 まれに変換時のエラーとして、シフト文字の欠落データがある。これはコメント等の記述で、全角文字の0E、0Fのどちらかが欠落しているケースである。「エディターでは正常に開けるのにおかしい」と思う場合は、このケースを疑う。DSPPFMコマンド等を使って、HEXモードで確認できる。

 また、CVTRPGSRCコマンドは対象メンバーの総称指定や*ALL指定ができるので、個別変換しなくても、一括変換が可能である。変換後にJOBLOGやRUNQRY、SQL等を使って、ログ・ファイル(QRNCVTLG)で変換エラーを確認する。変換エラーの場合、ログ・ファイル(QRNCVTLG)のTOファイル、TO LIB、TO MBRのフィールドがブランクとなっている。

 変換が正常に終了したソースは、そのままコンパイルできる。コンパイル・コマンドもILE RPGでは変わっている。

 図表6は、1つのソースから実行可能なプログラムを作成するためのコマンドである。

 

 

 ILE RPGには実行可能なプログラム・オブジェクト以外にも、モジュール・オブジェクト(*MODULE)やサービス・プログラム(*SRVPGM)など、プログラム構成に関連するオブジェクトがあり、それぞれにコンパイル・コマンドも用意されているが(図表7)、詳細は割愛する。

 

 

 このようにRPG ⅢのソースはILE RPGへ容易に変換できる。QRPGSRC内のすべてのメンバーを変換してコンパイルすれば、まずはILE RPGへの一歩を踏み出したと言える。

 しかし、ここで終わってしまってはILE RPG化した意味がないので、次回ではILE RPGを有効活用するコーディング・テクニックを紹介しよう。

 


著者

金澤  廣志氏

株式会社アイエステクノポート
代表取締役社長

 

[i Magazine 2020 Autumn(2020年10月)掲載]

More Posts