RPG

148. 再コンパイルをしないでモジュールを更新するには ?

ある他社製品の評価を依頼されたのであるが、その製品に致命的な問題が発見されたのだが
ユーザーは現在、稼動しているプログラムを再コンパイルするには危険と労力が
相当伴うので、できれば再コンパイルなしで弊社の製品に置き換えたいという希望があった。
恐らく、その製品はサービス・プログラム(*SRVPGM) として機能を提供しているはずなので
サービス・プログラムの識別コードを全く、その製品と同じものとして開発して
置き換えれば容易に弊社の製品として再コンパイルなしに移行することができるはずである、
と簡単に引き受けてしまった。
ところがその製品はサービス・プログラム(*SRVPGM)ではなくモジュール(*MODULE) を
ユーザーに提供していてユーザー・プログラム内にその製品のモジュール自身が同梱されて
しまっているのである。
これは海外の多くのソフトウェア製品を見ても例がない。驚きである。
製品そのものがオブジェクトとしてユーザー・プログラム内に組み込まれてオブジェクトが
生成されているのであるから再コンパイル以外には方法が見つからない。

どうりでその開発元には PTF やリリース・アップの公示もないはずで
欠陥を解消するには上位の別製品を新しく購入してすべて再コンパイルしてください、
というガイドがあったそうである。
同じ識別コードのサービス・プログラム(*SRVPGM)を製品として提供しているのであれば
サービス・プログラム(*SRVPGM)を使用している上位のプログラムは全く、再コンパイルの
必要はない。
弊社製品はすべてこの方法で開発されておりリリース・アップに伴ってユーザーが
再コンパイルする必要は全くない。(当然といえば当然であるが)
これは OS400 がリリース・アップしたからといって、ユーザー・プログラムを再コンパイルする
必要がないのと全く同じ原理である。
このあきれる製品は別としてもユーザーの社内開発でも
サービス・プログラム(*SRVPGM)ではなくモジュール(*MODULE) を使って開発している例は
少なくないだろう。
このあたりは IBM も ILE の構造をよくしていたもので

   UPDPGM または UPDSRVPGM コマンド

を使うと再コンパイルなしにプログラムが使用しているモジュールを現在のモジュールに
オブジェクト自体を入れ替えることができる。
もちろん検証したところ正しく最新のモジュールに置き換えられていることが確認できた。
UPDPGMUPDSRVPGM の存在はかねてより知っていたが
何に使うのだろうかと疑問であったがようやく理由がわかった。
モジュールをユーザー・プログラムに組み込んでしまうような製品は保守やリリース・アップのことが
全く考慮されていない。
非難するわけではないが製品であるからには、もう少し ILE の基礎を学習をしてから
製品化すべきではないだろうか ?
結局はユーザーにしわ寄せが来ているような気がしてならない。