excelとかの仕様書からDTOを作るっていうのが今回多くて、Ruby初心者の練習がてら仕様書からフィールド、gettersetterを生成するものを作ってみました。
excelでは結合セルとか使ってるので、それをテキストファイルにコピーするとこんな感じです。
テスト1 test1 テスト2 test2
フィールドの日本語名、英語名がタブで離れていて、改行って感じです。
で、このテキストからDTOを作りたいわけです。
public class Dto {
/** テスト1 */
private String test1;
/** テスト2 */
private String test2;
/**
* テスト1を取得します。
* @return テスト1
*/
public String getTest1() {
return test1;
}
/**
* テスト1を設定します。
* @param テスト1
*/
public void setTest1(String test1) {
this.test1 = test1;
}
/**
* テスト2を取得します。
* @return テスト2
*/
public String getTest2() {
return test2;
}
/**
* テスト2を設定します。
* @param テスト2
*/
public void setTest2(String test2) {
this.test2 = test2;
}
}するとこんな感じでできました。
filename = ARGV[0]
file = open(filename)
fields = ""
accessors = ""
while text = file.gets do
fieldNameAndValue = text.split()
name = fieldNameAndValue[0]
value = fieldNameAndValue[1]
field = "/** #{name} */\nprivate String #{value};\n"
fields << field
camel = fieldNameAndValue[1].capitalize
getter = "/**\n * #{name}を取得します。\n * @return #{name}\n */\npublic String get#{camel}() {\nreturn #{value};\n}\n"
accessors << getter
setter = "/**\n * #{name}を設定します。\n * @param #{name}\n */\npublic void set#{camel}(String #{value}) {\nthis.#{value} = #{value};\n}\n"
accessors << setter
end
file.close
out = "public class Dto {\n#{fields}#{accessors}\n}"
puts outこれを「dto.rb」として、テキストは「sample.txt」とすると、呼び出しはこうです。
ruby dto.rb sample.txt > Dto.java
「>」で出力をファイルにできます。Dto.javaとして出力されます。
作ってみた感想としては、
- ラク
これが第一です。RubyでなくてもLLは全部そうなのですが、
- 型宣言入らないからラク
って感じです。
- ファイル、文字列の扱いがラク
式展開とか文字列連結がすごいラクですし、ファイルの読み取りも少しのコードで済みました。こういったツールはこれからどんどんRubyで作っていこうと思いました。練習がてらですが、それ以上にラクだっていうのが大きいです。Javaでこういうの作ろうとしてもメンドくさくてやらない(excel VBAでやろうとしちゃう)。