長い開発歴史と RPG 資産が増え続けていくと、やがてコアとなるRPGプログラムの大きさは
1万ステップ数をはるかに超え、とても一人の力では解析不可能なものとなってしまう。
例えば受注入力や売上入力のプログラムは莫大なものとなってしまってはいないだろうか ?
そこで新たにシステムを再構築しようとしても仕様書が無かったり、1 万ステップ数を超える
同じプログラムを再作成することは一人の力では、数ヶ月をかけても完成できる保証はない。
このような大規模に膨らんでしまったプログラムの再構築や、始めから大規模が予想される
システムの開発技法について、このシリーズで紹介しよう。
近年、どの会社でも大規模となったプログラムの保守について問題が浮上してきており
RPG プログラマーの老齢化や RPGプログラマーの不足とともに保守の困難さが目立つように
なってきている。
弊社が訪問するユーザーの約1/4 が RPGプログラマーの世代交代に深刻さを訴えている。
RPG は Java を始めとする他の開発言語に比べて圧倒的に生産性は良いものの、
肝心の世代を受け継ぐための次の世代の若い RPG プログラマーが育っていないという訳である。
受注入力や売上入力のプログラムのように、変更や追加を積み重ねているプログラムは
大規模なボリュームに膨れ上がっていてソース全体を見渡せる人は皆無となってしまう。
そこでいっそのこと System i を他の Windows や Linux 等のオープン系のシステムに
変えてしまう、という話も出てくるのであるが、安定性が要求される基幹システムを
オープン系に変更すると危険極まりない話であり、首のひとつやふたつではすまなくなってしまう。
このような大規模成長は既に IBM によって 10年以上前に予測されていたようであって
その技術的回答として用意されたのが ILE ( 統合化開発環境 ) である。
ILE を利用すれば大規模プログラムを適切なモジュールに分割したり、大規模プログラムを
複数の開発者によって同時開発を行うことができる。
「MVC 3階層モデル」のように抽象化された表現よりもむしろ具体的なイメージで理解して頂けるものである。
目的とする構造だけを最初に示しておく。
1. 従来型のレガシーなプログラム構造
2. ILE による構造化プロジェクトによるモジュラー・プログラミング
手法としては表示画面レコード毎に RPG モジュールとしての RPG ソース・コードを用意する。
各RPGモジュールは別々に独立して CRTRPGMOD
によって作成され、作成されたモジュール( *MODULE
) は
CRTPGM
によって、ひとつのプログラム ( *PGM
) にまとめられる。
RPG モジュール( *MODULE
) は QTEMP
のような揮発性のライブラリーに保存するのではなく
恒久的に存在する通常のライブラリーに保存するものとする。
これによって、あるRPGモジュールを修正したとすると、RPGモジュールだけを CRTRPGMOD
によって
コンパイルしてから他の残りのモジュールも CRTPGM
のよってバインドすることができる。
また N 個の RPG モジュールは別々のプロジェクトとして N人による同時併行による開発を
行うことができるのである。
この、
N 人による同時併行による開発
は、今までの RPG 開発にはなかった手法である。
各モジュールは独立してカプセル化されているのでお互いに影響しあうバグは発生しない。
あるモジュールが公開する変数や関数も別のモジュールからも参照することができる。
他のモジュールへの参照であっても CRTRPGMOD
によるコンパイルは成功する。
CRTRPGMOD
では参照変数や参照プロシージャーは論理的に処理されてコンパイルは成功して、
CRTPGM
によって初めて参照していた変数やプロシージャーの名前解決が行われる。
このように機能別に分割されたモジュールによる ILE モジュラー・プログラミング は
モジュールを別のプログラムで再利用することができる可能性もある、一種の
オブジェクト指向であり、実にスマートで構造化されており保守性も優れたものとなる。
大規模プログラムの開発が想定されている場合は、是非ともこのような ILE による
モジュラー・プログラミングを心がけるべきであり、また現在、扱いかねているような
大規模プログラムがあるのであれば、このような ILE モジュラー・プログラミングへと
モジュール分割を行うことが効果的である。