プログラマ的京都生活

2007年11月25日

[]石山寺滋賀

今日は会社の新人君に教えてもらった石山寺に行きました。[京都]なんてタグをつけていますが、場所は滋賀県石山です。

京都からすぐ行けるにも関わらず、京都とはえらい違い。一番の違いは混雑っぷり。余裕を持ってゆっくりと紅葉を鑑賞できました♪紅葉もすごい綺麗で正直、東福寺よりよかったです。

[][]Ant × Groovy = 最強!

Groovyには最初からAntBuilderなるクラスが組み込まれていて、それを使って、build.xmlでやっていることと同等のことが出来ることはわかった。Groovy!参照。

しかしそれだとGroovyベースになってしまい、既にbuild.xmlが結構な量ある場合はそれを全部置き換える必要があるため、反発が強そうだ。やりたいこととしてはxmlの弱点であるifやforが使いたいだけなので、jspのようにタグの中にスクリプトを組みこむようなことが出来たらいいなぁと思うんです。でね、色々探していたら、出来たんす!

次のコードをご覧あれ!!

<?xml version="1.0"  encoding="Shift_JIS"?>
<project name="sample project" basedir=".">

  <property name="src.dir" value="C:/hogehoge" />

  <path id="build.classpath" description="groovyを利用するためgroovyおよびgroovyが利用するライブラリにパスを通す">
    <fileset dir="lib">
      <include name="**/*.jar" />
    </fileset>
  </path>

  <taskdef name="groovy"
         classname="org.codehaus.groovy.ant.Groovy"
         classpathref="build.classpath"/>

  <target name="sample">
    <echo>${src.dir}</echo>

    <groovy>
      println properties['src.dir']
      properties['classes.dir'] = 'D:/hogehoge'
    </groovy>

    <echo>${classes.dir}</echo>
  </target>

</project>

実行結果

sample:
     [echo] C:/hogehoge
   [groovy] C:/hogehoge
     [echo] D:/hogehoge

ワーイワーイ♪すごくない!?

ant側で定義した「src.dir」をgroovy側で読めるし、groovy側で定義した「classes.dir」をant側でも読めるし!これが出来ればかなりantの世界が広がる♪

まだgroovyの文法に完全に慣れたわけではないので、リファレンス見ながらになっちゃうけど、例えば指定されたディレクトリ配下にtxtファイルがいくつ存在するのかを表示するプログラムは以下。

  <target name="file.count">
    <groovy>
      count = 0;
      new File(properties['src.dir']).listFiles().each {
        if ( it.name ==~ '.*txt' ) ++count
      }
      properties['file.count'] = count
    </groovy>

    <echo>${src.dir}配下にある拡張子がtxtのファイルは${file.count}つです。</echo>
  </target>

すごいよねぇ。

ちなみにJSP内部でrequestやsessionは宣言なしに利用できたようにgroovyタグ内部でもそういった変数が存在します。

上のサンプルで使っている「properties」もそれ。<property>タグで定義されたものをMapで表現しているのです。あとは「ant」もあります。これはAntBuilderです。

詳細は以下参照↓

http://groovy.codehaus.org/The+groovy+Ant+Task

Connection: close