No Programming, No Life

プログラミング関連の話題や雑記

現場で使えるGroovy(その1)「Windowsのパスは /文字列/ を使おう」

このシリーズの一覧はこちら

はじめに

現場で使うマシンは残念ながらWindowsであることが多い。そこで、Groovyスクリプトを書く際のちょっとしたTipsを一つご紹介します。

/文字列/ 表記

Groovyでは正規表現を簡潔に記述するための文字列記述方式として、

/文字列/

という表記方法が用意されています。これはバックスラッシュ(\)をエスケープしなくてもそのまま書けるため、正規表現でバックスラッシュを多用する場合に重宝します。ちなみにGStringと同じように${...}形式で式も埋め込めますので、「バックスラッシュを自動エスケープしてくれる便利なGString形式」くらいの認識で使い始めることができると思います。

def str = "Hello"
assert 'Hello! World' == /${str}! World/

さて、前置きはこれくらいにして、この // 形式が有効活用できる場面が実はもうひとつありまして、それはそう、Windowsのパスですよ。ご存知の通り、Windowsは

C:\Documents and Settings\All Users\デスクトップ

なんていう風にバックスラッシュ込みのパスですよね。そこでGroovyの /文字列/ を使えば

def winPath = /C:\Documents and Settings\All Users\デスクトップ/

という風にすっきり書けちゃうわけですね。素敵ですね。

ということで、これを利用して実際に私が現場で書いたGroovyスクリプトをひとつ紹介します。

とあるフォルダにある「.groovy」ファイルを とあるフォルダにコピーするGroovyスクリプト

new AntBuilder().sequential {
  copy(todir: /C:\dotGroovy/) {
    fileset(dir: /C:\work/, includes: '**/*.groovy')
  }
}

これは「C:\work」フォルダ配下にある「.groovy」ファイルを階層構造を保持したまますべて「C:\dotGroovy」にコピーするスクリプトです。たった4行ですがパワフルなことができています。パスの部分はエクスプローラからコピペでいけるのが楽でいいですね。

余談ですが、Fileオブジェクトを作る時は as File を使うと便利です。

/C:\work/ as File
2011-07-09追記

asin:4774147273 のP68でも当記事と同等の手法が紹介されていた!それから、Groovy v1.8から ドルスラ記法が追加されたのでその例を追記します。

$/string/$(GString展開する、バックスラッシュはバックスラッシュとして扱う、複数行可)

『プログラミングGroovy』P67 より

これは、/文字列/ の複数行版と単純に捉えることもできます。

def winPathList = $/\
C:\Windows\System32
C:\Documents and Settings\All Users\デスクトップ
/$

ドルスラ文字列を使えばWindowsパスを含んだ複数行の文字列も簡単に扱えてしまうわけですね。
ちなみに、出だしが $/\ となっているのはGroovyのヒアドキュメントで改行取り消し - No Programming, No Lifeのためです。

おわりに

これはWindows専用なんだと強く自分に言い聞かせれば、書く手間とあわせてもおつりが来ると思いませんか?現場がWindowsな人はぜひ試してみてください。

Enjoy your code more groovier!

参考書籍

Groovyに興味を持った方はぜひこの一冊を購入しましょう!

プログラミングGROOVY

プログラミングGROOVY