コードを生成する

ジェネレーティブプログラミング (IT Architects’Archive CLASSIC MODER)

DSLがアツくなってきた感もあり、(乗り遅れてる?)
つい最近も、googleニュースキヤノンソフト、Webアプリ自動開発ソフトで使えるワークフロー製品を発表
なんて記事があったりして、ほーどこまでできんのかな?と思ったりで、
結構コード生成やら、その手の話題が多いような気がする。


かく言う私も、最近加わったプロジェクトでは、コード生成を多用しており、
データアクセスはXMLから生成するような仕組みになっている。
使ってみると、なかなか便利な感があるし、
ジェネレーションギャップパターン*1をしっかりと使えば、再生成のコストもかなり抑えられる。
ただ、自動生成は決まりきったことしかできないし、覚えることも無くはないので、そのあたりの境界線をどこに置くかが結構重要になってくる。


自動生成する部分が足かせになる事もままある。
例えば、privateでいいだろうと思って自動生成するプログラムを書いたが、
実際使ってみると、publicじゃ無いと困るような場合が出てきたときに、
(自動生成のクラスには手を入れないのが鉄則だとして)ニッチもサッチもいかなくなってしまう場合など。
自動生成するプログラムを修正するとしても、スコープを設定に書くのか、そこを全てpublicにしてしまうのかなどのトレードオフがいる。
元々privateで良いところを全てpublicにするのは賛成できないが・・・
まぁ、そんなこんなで、自動生成も一長一短。
scaffold(足場)の自動生成が一番妥当な解決策かなとも思ったり。

*1:自動生成したクラスを継承する(つまり自動生成のファイルには手をつけない)形で自動生成できない部分を補う方法