プログラミングGROOVYに書いてないけど、便利なGroovyプロダクト #gadvent2011
G* Advent Calendar 2011 : ATND
G* Advent Calendarの一日目です!Advent Calendar初参加!
最初に用意していた記事*1があまりにも一日目らしからぬ感じだったので後日別の記事にする事にしました。
で、いろいろ悩んだのですが、コードとかよりもとりあえず紹介でいいかなっていうことでかなり誰でもできる記事になりました。
まぁゆるふわで!
プログラミングGROOVY

- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る
の中で「GROOVYエコシステム」として様々なプロダクトが紹介されています。
今回はそこではとりあげられなかったけど、素晴らしいプロダクトを紹介しようと思います。
使い方とかはリンク先のWikiとかUserGuideを読めばいいんじゃないかな!
あと、後続の人が書いてくれてもいいと思います!(お
ちなみにプログラミングGROOVYにとりあげられていたものは
Grails
Webフレームワーク。そろそろ2.0がリリースされるみたいで注目度が高い。
Grails - The search is over.
Griffon
GUIアプリケーション用のフレームワーク。DSLで書けるし、バインドもできるしで便利。
Griffon - Home
GPars
7つもの並列処理モデルを備える多機能並列処理ライブラリ。
gpars (Groovy Parallel Systems) - Home
Gant
Antというビルドツールのラッパー
http://gant.codehaus.org/
Gradle
現代的ビルドツール。DSLで書けてGroovy文法も使える。大好き。
Gradle - Build Automation Evolved
Gaelyk
Google App Engine上で動作するフレームワーク。ショートカット的な機能が便利。
Welcome -- Gaelyk - a lightweight Groovy toolkit for Google App Engine Java
Spock
Groovyが誇るJVM系最強テストフレームワーク(お
spock - the enterprise ready specification framework - Google Project Hosting
Jenkins
世界で最も注目されるCIサーバー。Jenkins上で使えるスクリプトがGroovyだったりと、親和性が高い。
Welcome to Jenkins CI! | Jenkins CI
ということで、ここからがプログラミングGROOVYに記載されなかったプロダクトです。
サンプルコードはリンク先から拝借しました!
YouDebug
Javaアプリケーションに対する非対話的デバッガ。JVMが実装しているデバッグAPIをつかってGroovyからJavaアプリケーションにアクセスする。
YouDebug -
サンプルコード
プロダクトコード
public class SubStringTest { public static void main(String[] args) { String s = someLengthComputationOfString(); System.out.println(s.substring(5)); } private static String someLengthComputationOfString() { ...; } }
YouDebugコード
breakpoint("com.acme.SubStringTest",7) { println "s="+s; }
BetaMax
HTTPリクエスト/レスポンスを記録できます。記録したオブジェクトをWebAPIがないときにモックとしてつかうことができる。
Betamax - Record & replay HTTP traffic
robfletcher/betamax · GitHub
BetaMax入門スライド
サンプルコード
betamax { tapeRoot = new File("test/fixtures/tapes") proxyPort = 1337 proxyTimeout = 30000 defaultMode = TapeMode.READ_ONLY ignoreHosts = ["localhost", "127.0.0.1"] ignoreLocalhost = true }
Cucumber4Duke
Ruby界隈で有名なCucumberをJVM上で使えるようにしたものです。
ScalaやGroovyでも使えます。
cucumber/cuke4duke · GitHub
this.metaClass.mixin(cuke4duke.GroovyDsl) Given(~/I have entered (\d+) into the calculator/) { int number -> calc = new calc.Calculator() calc.push number }
Play-Groovy
最近JavaでHotなWebフレームワークであるPlay!のGroovyプラグインです。
1.xではGroovyが本家に入っていましたが、2.xからはプラグインでの提供になりました。
clarkdave/play-groovy · GitHub
GExcelAPI
POIをラッピングしたExcel操作ライブラリです。
かなり手軽に扱えるのでオススメ。
nobeans/gexcelapi · GitHub
サンプルコード
void testCellRange_wildcardOfColumn() { assert sheet.A_ in CellRange assert sheet.A_ == [sheet.A1, sheet.A2, sheet.A3, sheet.A4, sheet.A5, sheet.A6, sheet.A7] } void testRectangleCellRange() { assert sheet.A1_B2 == [[sheet.A1, sheet.B1], [sheet.A2, sheet.B2]] assert sheet.A1_B3 == [[sheet.A1, sheet.B1], [sheet.A2, sheet.B2], [sheet.A3, sheet.B3]] assert sheet.A1_A3 == [[sheet.A1], [sheet.A2], [sheet.A3]] assert sheet.A1_C1 == [[sheet.A1, sheet.B1, sheet.C1]] } void testHowToUseRowIterator() { assert ( sheet.findAll { row -> row.A_.isStringType() }.collect { row -> row.A_.value + "," + row.B_.value } ) == ["Sheet1-A1,B1の内容", "あいうえお,B2の内容"] }
GroovyFX
JavaFXをGroovyでラップしたものです。2.0対応がされているのでかなりかっこよくなりました。
groovyfx-project/groovyfx · GitHub
サンプルコード
GroovyFX.start { def sg = new SceneGraphBuilder(it) sg.stage(title: "GroovyFX Accordion Demo", x: 100, y: 100, visible: true, style: "decorated", primary: true) { scene(fill: groovyblue, width: 400, height: 400) { accordion { titledPane(id: "t1", text: "Label 1") { content { label(text: "This is Label 1\n\nAnd there were a few empty lines just there!") } } titledPane(id: "t2", text: "Label 2") { content { label(text: "This is Label 2\n\nAnd there were a few empty lines just there!") } } titledPane(id: "t3", text: "Label 3") { // this is content label(text: "This is Label 3\n\nAnd there were a few empty lines just there!") } } } } }
GBench
Groovy用のベンチマークを計れます。
gbench - the benchmarking module for groovy - Google Project Hosting
サンプルコード
import gbench.* def benchmarker = new BenchmarkBuilder() def benchmarks = benchmarker.average(repeat: 5, idle: 1) { int num = 25 'recursive fibonacci' { { n -> if (n < 2) return n return call(n - 1) + call(n - 2) }(num) } 'iterative fibonacci' { { n -> int a = 0 int b = 1 int c for (int i in 2..n) { c = a + b a = b b = c } return b }(num) } } benchmarks.sort().prettyPrint()
アウトプット
user system cpu real iterative fibonacci 0 0 0 647596 recursive fibonacci 2923458740 18720120 2942178860 2947965327
どうでしたでしょうか?
次は id:nobusue さんです!
*1:Groovy本体を含むG*プロダクトをいくつか選んで、テストコードの特徴の分析や品質を測定した結果をまとめたものを書いた。完全に自分得状態で、いくつかのプロダクトについては批判せざるを得ない場面があり、そんなものを初日に掲載するわけにもいかず。。。的な。