ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

HTA + wsh + Antで色々やる

HTA + wshでAntコマンドを起動する際、オプションとして「-Dname=value」という形式で渡してあげると、Antタスク中で「${name}」でvalue値が参照できるので、これを利用してHTAで作成したGUIから指定したモジュールだけCVSからチェックアウトするというようなことが可能になりました。
で、その設定されていれば〜これこれをやるという処理ですが、相変わらずAntではそのような条件分岐は書きづらいです。例えば、

<target name = "main">
    <!-- AAAモジュールをチェックアウト -->
    <condition property = "status" value = "1">
        <isset property = "AAA"/>
    </condition>
    <antcall target = "CvsCheckOut"/>

    <!-- BBBモジュールをチェックアウト -->
    <condition property = "status" value = "1">
        <isset property = "BBB"/>
    </condition>
    <antcall target = "CvsCheckOut"/>
</target>

<target name = "CvsCheckOut" if = "status">
    ...
</target>

のようになっているとき、
ant -DBBB=1
と実行する分には問題ないのですが、
ant -DAAA=1
とすると、意図せずBBBの処理も行われてしまいます。
なんでそうなるのかと思ったら、Antではプロパティはイミュータブルのため、一度セットしたらそれ以降変わらないのだそうです。というわけで、あえなく共通化に失敗したので、Antelope(http://antelope.tigris.org/)のIfタスクを使ってやることにしました。以前、try〜catchタスクを使ったのですが、ここでもまた活躍しました。ちなみに、プロパティをアンセット状態にするタスクもあり、かなり使えるタスク満載なので、どこかのバージョンで標準タスクになればいいのになぁとか思うのですが。
そんなわけで、Antは普段バッチ的にしか使用しないので、せいぜいコマンドライン引数によって条件を与える程度なのですが、HTA + wshを組み合わせることで、GUIから入力を与えることができ、幅が広がったと言えそうです。