ILE-RPG への移行が進まないのは
などの理由で ILE-RPG への移行が遅れているケースがある。
しかし ILE-RPG は RPG Ⅲ のバージョン・アップや拡張ではない。
ILE = Integrated Language Environment (統合開発環境) の名前が示すように
複数のオブジェクトを統合 (まとめて) して生成する機能を持つ開発言語環境である。
サービス・プログラム( *SRVPGM )は RPG でなくても COBOL や C 言語でも
CLP であってもよい。
メイン・モジュールだけは *MODULE をバインドするがそれ以外は
サービス・プログラムをバインドする。
複数のオブジェクトとしてのサービス・プログラム( *SRVPGM )をバインドして
ひとつのプログラム( *PGM )として生成することができる。
実行時にはバインドされたサービス・プログラムもプログラムの一部として
メモリ空間上で動作する。
つまりサービス・プログラムもプログラムの一部である。
それではサービス・プログラムは RPG Ⅲ のサブ・ルーチンとどのように
違うのだろう?
サービス・プログラムはサブ・ルーチンやサブ・プログラムの CALL 呼び出し
であってもよいのではないかとの疑問がある。
ILE 環境はオブジェクト指向であり複数の品質が保証されたオブジェクトを
組み合わせて使う、というのが本来の利用方法である。
ILE 環境を正しく理解していないと次のような使い方になってしまう。
前述ではメイン・モジュール( *MODULE )にサービス・プログラム( *SRVGM )を
バインドしてプログラム( *PGM )をバインドしていたのだが、この例では
サービス・プログラムではなくすべてモジュールをバインドしている。
モジュールだけをバインドするとどのようなことになるか?
モジュール( *MODULE )オブジェクトはプログラム( *PGM )内部に組み込まれて
いるため、モジュールに変更があるとモジュールを再コンパイルによって生成して
プログラムも再コンパイルする必要がある。
これに対して前述のサービス・プログラムとして作成されている場合は
サービス・プログラムはプログラム内部に組み込まれているわけではなく
プログラムの実行時に初めてサービス・プログラムが読み出されるので
プログラムを再コンパイルする必要はない。
このように複数のモジュールをバインドしてオブジェクトを作成する方法は
ILE の機能を理解していない方法と言える。
もしソフトウェア製品の機能が複数のモジュールとして提供されていると
どうなるのだろうか?
その製品を使ってユーザーのプログラムを作成したとすると
製品のリリース・アップやバグ対応では、それまで作成したユーザー・プログラムを
すべて再コンパイルしなければならないことになる。
IBM が提供する機能もサービス・プログラムとして提供されていると
先に説明した。
i5/OS のリリース・アップに伴ってすべてのユーザー・プログラムを
再コンパイルする必要があるだろうか?
そんなことはありえない。
しかしこの誤った例のようにすべての機能をモジュールとして
提供しているソフトウェア製品ではそれが起こる。
つまりそのソフトウェア製品に変更があるとすべてのユーザー・プログラムを
再コンパイルしなければならなくなる。
残念なことにこのようなソフトウェア製品は実際に存在する。
開発会社が ILE を理解していないからである。
ソフトウェア会社でも ILE をこのような構成で作成している例がある。
不便だとかおかしいと感じたなら何か間違っているはずである。
ILE-RPG は RPG Ⅲ の進化形ではなく全く新しい開発の構造であることを
理解して欲しい。