RPG

328. RPG Ⅲ から ILE-RPG への移行 (1)

ILE-RPG への移行が進まないのは

  1. 日常の開発や保守で忙しくて ILE-RPG を学習する時間が取れない。
  2. RPG Ⅲ で開発していて不便を感じない。
  3. ILE-RPG へ移行するメリットがわからない。

などの理由で ILE-RPG への移行が遅れているケースがある。
しかし ILE-RPG は RPG Ⅲ のバージョン・アップや拡張ではない。
ILE = Integrated Language Environment (統合開発環境) の名前が示すように
複数のオブジェクトを統合 (まとめて) して生成する機能を持つ開発言語環境である。

1. ILE ではメイン・モジュールにサービス・プログラム ( *SRVPGM ) を
バインドしてそれらをひとつのプログラムにまとめる。

【 解説 】

サービス・プログラム( *SRVPGM )は RPG でなくても COBOL や C 言語でも
CLP であってもよい。
メイン・モジュールだけは *MODULE をバインドするがそれ以外は
サービス・プログラムをバインドする。
複数のオブジェクトとしてのサービス・プログラム( *SRVPGM )をバインドして
ひとつのプログラム( *PGM )として生成することができる。
実行時にはバインドされたサービス・プログラムもプログラムの一部として
メモリ空間上で動作する。
つまりサービス・プログラムもプログラムの一部である。

それではサービス・プログラムは RPG Ⅲ のサブ・ルーチンとどのように
違うのだろう?
サービス・プログラムはサブ・ルーチンやサブ・プログラムの CALL 呼び出し
であってもよいのではないかとの疑問がある。

  • 上位プログラムはサービス・プログラムに登録されている複数の関数
    (プロシージャー)をあたかもそのプログラムの中にある関数(プロシージャー)
    として呼び出して使うことができる。
    これに対して CALL で呼び出すサブ・プログラムでは、ひとつの機能しか
    実行することはできない。
    何より CALL ではなく関数(プロシージャー)の呼び出しは名前を見れば機能も
    わかるほどわかりやすいものである。
  • 関数(プロシージャー)の汎用性の高さによって多くのプログラマーに
    サービス・プログラムは関数(プロシージャー)の機能を提供する
    ことができる。
    IBM の C 言語の関数はすべてサービス・プログラムによって提供されている
    関数(プロシージャー)である。
    もちろん RPG からも C 言語の関数を呼び出して利用することができる。
  • サービス・プログラムが変更されても呼び出す上位プログラムは
    影響を受けない。
    実行時に初めてサービス・プログラムが呼び出されるからである。
    組込みサブ・ルーチンであればサブ・ルーチンが変わればそれを
    利用しているすべての上位プログラムの再コンパイルが必要となる。

2. 誤った ILE の使い方

ILE 環境はオブジェクト指向であり複数の品質が保証されたオブジェクトを
組み合わせて使う、というのが本来の利用方法である。
ILE 環境を正しく理解していないと次のような使い方になってしまう。

前述ではメイン・モジュール( *MODULE )にサービス・プログラム( *SRVGM )を
バインドしてプログラム( *PGM )をバインドしていたのだが、この例では
サービス・プログラムではなくすべてモジュールをバインドしている。
モジュールだけをバインドするとどのようなことになるか?
モジュール( *MODULE )オブジェクトはプログラム( *PGM )内部に組み込まれて
いるため、モジュールに変更があるとモジュールを再コンパイルによって生成して
プログラムも再コンパイルする必要がある

これに対して前述のサービス・プログラムとして作成されている場合は
サービス・プログラムはプログラム内部に組み込まれているわけではなく
プログラムの実行時に初めてサービス・プログラムが読み出されるので
プログラムを再コンパイルする必要はない

このように複数のモジュールをバインドしてオブジェクトを作成する方法は
ILE の機能を理解していない方法と言える。
もしソフトウェア製品の機能が複数のモジュールとして提供されていると
どうなるのだろうか?
その製品を使ってユーザーのプログラムを作成したとすると
製品のリリース・アップやバグ対応では、それまで作成したユーザー・プログラムを
すべて再コンパイルしなければならないことになる。
IBM が提供する機能もサービス・プログラムとして提供されていると
先に説明した。
i5/OS のリリース・アップに伴ってすべてのユーザー・プログラムを
再コンパイルする必要があるだろうか?
そんなことはありえない。
しかしこの誤った例のようにすべての機能をモジュールとして
提供しているソフトウェア製品ではそれが起こる。
つまりそのソフトウェア製品に変更があるとすべてのユーザー・プログラムを
再コンパイルしなければならなくなる。
残念なことにこのようなソフトウェア製品は実際に存在する。
開発会社が ILE を理解していないからである。
ソフトウェア会社でも ILE をこのような構成で作成している例がある。
不便だとかおかしいと感じたなら何か間違っているはずである。

ILE-RPG は RPG Ⅲ の進化形ではなく全く新しい開発の構造であることを
理解して欲しい。