ファイルをいじくりまわすのはGroovyのほうが便利だ

最近仕事でレガシーコードのお守りをしてるんだけど,レガシー言うだけあって大事な事がコードや設定ファイルにしか残されてなくて,結構涙目な思いをしてた。どうにか人が読めるように設定ファイルを可視化しようと思い,Groovyでちょこちょこ弄ってみたよ。
Groovyのファイル操作は強力なのだけれど,しばらく使わないとあっという間に構文を忘れるので,ここに残しておく。


ホントは他にもいろいろやってたけど,ファイルをがっさり読み込むのと書き出すコードを記す。例示したのは,特定のディレクトリ化にあるプロパティファイルを一括で読み込むのと,コレクションを走査してって,要素ごとにファイルを書き出すっての。


コードが画像だけなのもアレなので,こっちに貼り直しておくよ。

class GroovyTest extends GroovyTestCase {
  def M = [:]
  void setUp() {
    new File("./master").eachFileMatch(~/.*properties/) { f ->
      def prop = new Properties()
      prop.load f.newInputStream()
      M[f.name.replaceAll(~/.properties$/, "")] = prop
    }
  }

  void testHogeHoge() {
    [ "aaa", "bbb", "ccc" ].each { item ->
      new File("./report/${item}.html").withPrintWriter { w ->
        w.println """
<h1>${item} - ${M.foo[item]}</h1>
  :
"""
      }
    }
  }
}


LL由来の方々には「だからなんだ?」的な内容だと思うし,Java由来の人から見ても「これくらい面倒臭がるほどでもないダロ」とも思えるけど,そこはそれ,やっぱりこの手軽さは便利だよ。


極めつけは,Javaを呼び出せること。ファイル出力例では場当たり的なコレクション使ってるけど,実際にはレガシーコード(をちょっといじくって)に設定ファイルをパースして得たコレクションを使っている。
ただ,この「Javaと混ぜる」ってのはIntelliJ使っているからこそって気がするので,[IDEA]タグも付けてる。EclipseNetBeansのGroovyプラグインがどうかは知らんけど,AntやMavenJavaにGroovy混ぜるのは,ちょいとした手間だ(と思う)。でもIntelliJの場合,手間どころか何も考えずにJava+Groovy混在環境を作れちゃうので,「ちょっとしたことはGroovyで」ってのがすごく抵抗がない。すげー簡単。
おかげさまで,IntelliJ以外で動かす事全然考えてないけどね。
#今んとこ,自分以外の人が使う事無いから気にしてないけど。:-P


ちなみに,先の例ではHTMLを出力してるけど,実際には拡張子を".html.xls"にしてHTMLテーブルをExcelに開かせてる。あとは,ちょこっと手作業で加工してスーツ好みの帳票にしたらおしまい。


ps.
レガシーコードの解析や(Excel方眼な)ドキュメンテーションも,工夫次第で結構楽しい。:-)