モデル・コンパイラの問題点

現在SimpleModeling用モデル・コンパイラであるSimpleModelerを開発中です。こういったモデル・コンパイラについて説明すると必ずモデルと生成したソースコードのずれに関して以下の2つの問題について質問を受けます。これはXMLスキーマコンパイラRelaxerの時と同じです。

4GLの時代から、プログラムの自動生成は色々と行われていますが、4GLという言葉が残っていないことからも分かるとおり、あまりうまくいっていません。その失敗の原因として上の2つの問題は大きなウェイトを占めていると思われます。

この問題はRelaxerと同様の以下の方針を取る予定です。RelaxerではうまくいっていたのでSimpleModelerでも大丈夫でしょう。

(a) ソースコードは手で組んだものと同様のクオリティの物を生成する。

たとえば、インデントはきちんと入れる、変数名はできるだけ意味の分かるものを自動的に選ぶ、などです。こういった処理を行うと、ソースコード生成処理が格段に難しくなるのですが、モデル・コンパイラの税金と考えてRelaxerでは実装していましたし、SimpleModelerでも同様に実装する予定です。

プログラミング言語コンパイラは、ソースコードレベルでデバッグができるのが普通ですが、プログラムの自動生成のツールでは、一般的には出力されたソースコードを使ったデバッグしかできないので、モデルとソースコードの対応関係を熟知していないとデバッグが難しいという問題があります。
SimpleModelerでも同様の問題がありますが、出力するソースコードの品質を上げることで緩和するという作戦です。また自動生成の対象は主にドメイン・モデルで、この場合モデルのクラスとJavaのクラスの関係は明確なので大きな問題にはならないのではないかと思います。
少なくてもRelaxerを便利に使っていた開発者には、便利に使えるのではないかと思います。

(b) 生成したソースコードを修正しないでも機能拡張できるようにする。

Relaxerでは、GenerationGapを実現するためのAbstractFactoryや、生成したソースコードにパッチを当てる機能を提供していました。SimpleModelerでも同様の機能を提供する予定です。