blancoValueObject セットアップと実行用Groovyスクリプト

2019-02-28Bash, blanco, Groovy, Java

プロジェクトで blancoValueObject というコード自動生成のフレームワークを使用することとなった。
セットアップ手順と実行を用意にするためのGroovyスクリプトを作成した。

前提

  • 以下の実行環境が必要
    • Bash実行可能
    • Ant実行可能

セットアップ

以下のコマンドを実行(ここではsvnリポジトリのコードを~/projects/blancoValueObjectにチェックアウト)

#!/usr/bin/env bash
svn checkout \
  http://svn.sourceforge.jp/svnroot/blancofw/blancoValueObject/trunk \
  ~/projects/blancoValueObject

cd ~/projects/blancoValueObject

ant

cp lib/*.jar ~/.groovy/lib/
cp lib.ant/*.jar ~/.groovy/lib/

実行用Groovyスクリプト

以下のスクリプトをどこか環境変数 PATH の通った場所に配置。

実行する際には

$ blancovalueobject.groovy <エクセル配置ディレクトリ>

または

$ blancovalueobject.groovy <エクセル配置ディレクトリ> <文字コード>

で実行すると、OSごとの一時フォルダのtargetディレクトリ内にBeanのコードが生成される。
エクセルのBean定義書テンプレートはmeta/templateディレクトリ下にあるようなのでこれを適当に記述して <エクセル配置ディレクトリ> に突っ込んで実行。

blancovalueobject.groovy

#!/usr/bin/env groovy
def ant = new AntBuilder()
ant.taskdef(
    name: "blancovalueobject"
    , classname: "blanco.valueobject.task.BlancoValueObjectTask"
)

def TMP = System.properties['java.io.tmpdir']

def targetdir = new File("${TMP}/blancovalueobject/target")
if (!targetdir.exists())
    ant.mkdir(dir: targetdir)

def tmpdir = new File("${TMP}/blancovalueobject/tmp")
if (!tmpdir.exists())
    ant.mkdir(dir: tmpdir)

ant.blancovalueobject(
    metadir: args.size() > 0 ? args[0] : "./meta",
    encoding: args.size() > 1 ? args[1] : System.properties['file.encoding'],
    targetdir: targetdir,
    tmpdir: tmpdir,
)

こちらのフレームワーク、ちょっと苦手。エクセルからBeanを生成することで、必ずドキュメントが残るというものだが、エクセルに情報を記述するのが面倒です。コード読めない人はそもそもBean情報を定義されているエクセル読まないだろうし。Groovyなら、フィールド記述とjavadocで20行程度で収まるんだろうなぁ。javadoc生成したらドキュメント二重になるし。

2010/01/25 追記

こちらのFWの説明を聞いたら、あえてべた処理のソースコードを生成することでデバッグ実行時などを容易にし、未熟なJava開発者でも開発可能にしたとのこと。DIとかからむとどこでエラーが発生したのか見にくくなるからだそうです。

2019-02-28Bash, blanco, Groovy, Java