せらぴんブログ

サークル「せらぴん」のうのはな透です。やっぱり眼鏡っ娘が好き!!

astahのスケルトンコードはListを理解できない

astahってスケルトンコード作れるんですよ。
「クラス図を書くだけでコードまで作れるなんて素晴らしいじゃないか!」って思ったものです。
大きな間違いでした。

なぜかというと「astahではメソッドの戻り値と引数にジェネリクスを指定できない」から。

例えば以下の様な関数を作るとします。

public List<Hoge> fuga(List<Piyo> p)

astahで以下のように入力します。

+ fuga(p:List<Piyo>):List<Hoge>

そしてスケルトンコードを出力すると、下記のようになります。

public List_Hoge_ fuga(List_Piyo_ p)

そうです、なぜか<>がエスケープされるのです!おまえはHTMLか。

また、上記をそのまま入力しようとするとList<Hoge>クラスとList<Piyo>クラスが両方作られます。ジェネリクス意味ねぇ……。
これを回避しようとクラスに「List」、タイプ修飾子に「<Hoge>」と入力するのですが、今度はスケルトンコードでListしか表示されない。プログラマはクラス図とにらめっこしてジェネリクスの指定をしなおさなければならないわけです。

だからastahのスケルトンコードはジェネリクスをまったく利用しないような設計でない限り使うべきではないと思います。

またスケルトンコードの出力機能とは別に、astahを複数人で利用する場合にも問題(?)があって、プロジェクトファイルのマージで相当苦労することになります。
すべて一つのastaファイルで設計できるのならいいのですが、astaファイルが複数になった場合はastah professionalでファイルをマージしてやる必要があります。ここでかなりつまづきました。
可能な限りプロジェクトの参照機能を使うなど、事前にマージしやすいように配慮が必要だと思います。

教訓

ケルトンコードで楽ができると思うな。
ちなみにもし上記問題を回避できる方法を知っていたら教えて下さい。