makotan _at_ gmail dot com

Generatorを作って生産性を上げるときに・・・

Generatorに関係した部分をまとめてみた
まず、一番基本的な考え方
「アプリケーションのエンジニアの時間コストより、マシンの時間コストの方が遙かに安い事を重視する」
ということは、Generatorがすっごく頑張って時間を使っても良いって事。
人を増やすのは大変でも速いマシンを準備するのは今は楽だからね〜
結果的にエンジニアの作業時間が短くなるなら多少PCが頑張っても良いと思う


「生成したコードは人が手を入れないという事にする」
良くある「生成したコードに手を入れて修正して・・・」ってパターンは最悪なのでこれはやめた方が良いって意味。
仕方なく生成したコードに手を入れたくなるときの基本ルールは

  1. 拡張ポイントを多めに用意する
  2. 再生成でパスする

拡張ポイントはイベントハンドラ形式だったりジェネレーションギャップパターンだったり好きにすると良いと思う
個人的にはイベントハンドラが良いな〜って思う。ちなみにぶりに色んな拡張ポイントが大量にあるのはこれが理由


「ありがちなコードなんだけど、用途によっては使われない場合でも遠慮無く出力する」
S2Dao-CodeGen(原作まこたん)のFind機能でやってるのは基本的にこの考え方。
それに伴って多少のマシン時間が使われようがそれは誤差。
たまに生成したコードのバージョン管理とかが大変って聞くけど、それは管理のルールがおかしいと思う。必要なら生成したコードだけをパッケージにすれば良いんじゃないかなぁ〜とか色々対策はある気がする


「今までのやりかたを重視しない」
これかなり重要。
手作業には手作業の、生成には適したコードっていうのがある。それを頑張って手作業と同じコードを出そうとしないこと。既に手作業用のライブラリが充実してたとしても、生成後に必要なライブラリ丸ごと1から作るくらいのことはやっても良いと思う


「任意の箇所を手作業でも対応できるようにする」
生成が100%っていうのは入力から考えて非効率だと思うので、生成できない部分は自動生成を使わずに通常の時間と同程度で手作業だけでも作れるようにするのが重要。
拡張ポイントもそうだけど、これが出来てないとGeneratorを使うより全部手で書いた方が早いって状態になりかねない


たぶんこの辺を頭に入れて、Generatorを作ると良いGeneratorが作れるんじゃないかなぁ〜
と、最近メモが少なくなってここに天気予想くらいしか書くこと無いから書いてみた。