magazine - grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2...
TRANSCRIPT
Japan GrailsGroovy User Group
M a g a z i n evol8
Japan GrailsGroovy User Group
M a g a z i n evol8
C o n t e n t sSeries 10
Groovy 臨機応変(第三回)〜 Groovy 23 の新機能〜 helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 2
Groovy 臨機応変(第四回)〜 Groovy 24 の新機能〜 helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 7
Series 16
Gradle Plugin 探訪〜第 1 回 Gradle SSH Plugin 〜 helliphelliphelliphelliphelliphelliphelliphelliphellip 9
Series 05
Grails Plugin 探訪〜第 9 回 CodeNarc plugin 〜 helliphelliphelliphelliphelliphelliphelliphelliphellip 14
Information
リリース情報helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 19
GMagazine vol8
2 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
今回はGroovy 23 の新機能をピックアップして紹介します詳しくはリリースノートを参照ください
トレイト(Traits)Groovy 23 における目玉機能としてトレイトが導入されまし
たGroovy のトレイトは実装の継承が可能なインターフェースですJava8 ではインターフェースにおいてサブクラスで定義しなかった場合の「デフォルトのメソッド」を定義することができるようになりましたがGroovy のトレイトも同種の機構であると言えますしかしGroovy のトレイトはメソッド以外にもメンバー変数を定義使用したりProxy を経由した動的な実装をすることができますまた JDK7 以前の Java 上でも利用することもできより強力な機構であると言えますGroovy のトレイトは Scala のトレイトと似ています詳しくは以下を参照ください
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230html
documentationcore-traitshtmlbull httpwwwslidesharenetuehajgroovy-trait
新規 AST 変換の導入TailRecursive Builder Sortable SourceURI の 4 つ の AST
変換が導入されました以下にそれぞれの説明を示します
TailRecursiveメソッドの自己再帰呼び出しをループに変換しますメソッド
を跨った相互末尾再帰等には対応していないなどいくつかの制約があります
以下の自己末尾再帰呼び出しを含むコードに TailRecursive を適用してみます
TailRecursive
def foo(int n int lim)
if (n lt lim)
foo(n+1 lim)
else
n
上は以下のようにループに変換されます
groovytransformTailRecursive
public javalangObject foo(int n int lim)
_lim_ = lim
_n_ = n
while (true)
try
if ( _n_ lt _lim_ )
javalangInteger __n__ = _n_
javalangInteger __lim__ = _lim_
_n_ = __n__ + 1
_lim_ = __lim__
continue
else
return _n_
catch (orgcodehausgroovytransform
tailrecGotoRecurHereException ignore)
continue
finally
return null
繰り返し数に比例してスタックを消費することがなくなるのでスタックオーバーフローを気にすることなく適切な場合には再帰呼び出しでわかりやすくロジックを書くことができます
Groovy臨機応変(第三回)〜Groovy 23の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
3Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformTailRecursivehtml
Builderインスタンスを初期化するためのフルーエントなメソッド呼
び出しによるビルダパターンを可能とする AST 変換です使用例を以下に示します
import groovytransformbuilderBuilder
Builder
class Book
int price
String title
def book = Bookbuilder()price(100)title(我輩は猫である)build()
上記以外にいくつかのパターンでのサポートメソッドを AST変換の引数で指定することもできますたとえばsetter をチェインさせていくようなパターンのビルダメソッドを生成することもできます
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformbuilderBuilderhtml
Sortable指定したクラスに対して以下を行います
bull compareTo メソッドを生成しインターフェース Comparableを実装する
bull それぞれのフィールドに関して比較する Comparator を返すメソッド (comparatorByXXX()) を生成するbull rarr返された Comparator はjavautilCollectionssort(List list
Comparator c) やjavautilArrayssort(T[] a Comparatorlt super Tgt c) に渡してソート処理に適用できる
コード例を以下に示します
import groovytransformSortable
Sortable
class Book
int price
String title
data = [new Book(price10 titleabc)
new Book(price9 titledef)]
Collectionssort(data)
assert data[0]price == 9 ampamp data[0]title == def
assert data[1]price == 10 ampamp data[1]title == abc
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSortablehtml
SourceURIString や URL クラス型の変数定義に指定するとその変数の値
に Groovy スクリプト自身の URI が初期設定されます
import groovytransformSourceURI
SourceURI String src
println src
上記のスクリプトをファイルに保存して実行すると file で始まる URI が表示されますあるいはスクリプトを Web サーバに置きURL を指定して groovy コマンドを実行するとそのURL が表示されますさらに以下のように -e オプションでスクリプトを指定したりGroovhShellevaluate(String) でスクリプトを実行するとSourceURI は data で始まるデータ URI を生成します
$ groovy -e import groovytransformSourceURI
SourceURI String src println src
dataimport20groovytransformSourceURI20
SourceURI20String20src20println20src
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSourceURIhtml
GMagazine vol8
4 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ライブラリの拡張改善
マークアップテンプレートエンジン新種のテンプレートエンジンマークアップテンプレートエン
ジン (groovytextmarkupMarkupTemplateEngine) が追加されましたマークアップテンプレートエンジンはDOM 的な構造を記述するための DSL の一種であるとも言えます参考リンクにある例を以下に示します
yieldUnescaped ltDOCTYPE htmlgt
html(langen)
head
meta(http-equiv
Content-Type content=texthtml charset=utf-8)
title(My page)
body
p(This is an example of HTML contents)
これは以下のような XML を生成するとのことです
ltDOCTYPE htmlgtlthtml lang=engtltheadgtltmeta
http-equiv=Content-Type content=text
html charset=utf-8gtlttitlegtMy pagelttitlegtlt
headgtltbodygtltpgtThis is an example of HTML
contentsltpgtltbodygtlthtmlgt
マークアップテンプレートエンジンはMarkupBuilder と同様にクロージャや疑似メソッドの呼び出しを使用してツリー構造を記述構築し文字列表現に落とすことができます加えて以下の特長があります
bull 静的コンパイルで高速化bull 静的型チェックが可能bull 整形 ( インデントエスケープ ) 機能付きbull テンプレート記述を別ファイルにして include なども可能
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-231html
documentationmarkup-template-enginehtml
JSON SlurperGroovy 23 ライブラリではいくつかの性能改善がなされてお
り特にJSON 処理が従来より最大 20 倍高速化されJava ベースのライブラリの中で最速の部類となっているとのことです
JSON Slurper については以下のパラメータを指定できるようになりました
パラメータ 説明
INDEX_OVERLAY 高速REST 呼び出しWebSocket メッセージAJAX などに適しているシリアライズされたオブジェクトの展開処理を特に高速化している
LAX コメントやクオート無しのマップのキーを許す
CHAR_BUFFER intdatelong などの貪欲 (eager) なパース処理が特長既存の Slurper の動作に近い
CHARACTER_SOURCE 2MB を越える JSON ファイルの処理に適する
これらのパラメータは以下のように指定します ( 参考リンクに示した API リファレンスより引用 )
parser = new JsonSlurper()setType(
JsonParserTypeINDEX_OVERLAY )
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230htmlgapi
groovyjsonJsonParserTypehtml
ConfigSlurper の拡張Grails で定義されていて利用可能であるようなproddevtest
といった「環境」を新たに定義し指定できるようになりました
(参考リンク)bull httpmrhakiblogspotjp201405groovy-goodness-extend-
configslurperhtml
Java87 の対応
Java8実行環境として JDK 8 が公式にサポートされました
Java7Java 7 の NIO2 に対応しました例えばいくつかの GDK メソッ
ドでjavaioFile の代りに javaioPath クラスが使用できます以下はリリースノートからの例です
pathwithReader Reader r -gt
patheachLine String line -gt
patheachFileRecurse Path p -gt
path ltlt some content
path ltlt bytes
pathreadLines()
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
Japan GrailsGroovy User Group
M a g a z i n evol8
C o n t e n t sSeries 10
Groovy 臨機応変(第三回)〜 Groovy 23 の新機能〜 helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 2
Groovy 臨機応変(第四回)〜 Groovy 24 の新機能〜 helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 7
Series 16
Gradle Plugin 探訪〜第 1 回 Gradle SSH Plugin 〜 helliphelliphelliphelliphelliphelliphelliphelliphellip 9
Series 05
Grails Plugin 探訪〜第 9 回 CodeNarc plugin 〜 helliphelliphelliphelliphelliphelliphelliphelliphellip 14
Information
リリース情報helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 19
GMagazine vol8
2 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
今回はGroovy 23 の新機能をピックアップして紹介します詳しくはリリースノートを参照ください
トレイト(Traits)Groovy 23 における目玉機能としてトレイトが導入されまし
たGroovy のトレイトは実装の継承が可能なインターフェースですJava8 ではインターフェースにおいてサブクラスで定義しなかった場合の「デフォルトのメソッド」を定義することができるようになりましたがGroovy のトレイトも同種の機構であると言えますしかしGroovy のトレイトはメソッド以外にもメンバー変数を定義使用したりProxy を経由した動的な実装をすることができますまた JDK7 以前の Java 上でも利用することもできより強力な機構であると言えますGroovy のトレイトは Scala のトレイトと似ています詳しくは以下を参照ください
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230html
documentationcore-traitshtmlbull httpwwwslidesharenetuehajgroovy-trait
新規 AST 変換の導入TailRecursive Builder Sortable SourceURI の 4 つ の AST
変換が導入されました以下にそれぞれの説明を示します
TailRecursiveメソッドの自己再帰呼び出しをループに変換しますメソッド
を跨った相互末尾再帰等には対応していないなどいくつかの制約があります
以下の自己末尾再帰呼び出しを含むコードに TailRecursive を適用してみます
TailRecursive
def foo(int n int lim)
if (n lt lim)
foo(n+1 lim)
else
n
上は以下のようにループに変換されます
groovytransformTailRecursive
public javalangObject foo(int n int lim)
_lim_ = lim
_n_ = n
while (true)
try
if ( _n_ lt _lim_ )
javalangInteger __n__ = _n_
javalangInteger __lim__ = _lim_
_n_ = __n__ + 1
_lim_ = __lim__
continue
else
return _n_
catch (orgcodehausgroovytransform
tailrecGotoRecurHereException ignore)
continue
finally
return null
繰り返し数に比例してスタックを消費することがなくなるのでスタックオーバーフローを気にすることなく適切な場合には再帰呼び出しでわかりやすくロジックを書くことができます
Groovy臨機応変(第三回)〜Groovy 23の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
3Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformTailRecursivehtml
Builderインスタンスを初期化するためのフルーエントなメソッド呼
び出しによるビルダパターンを可能とする AST 変換です使用例を以下に示します
import groovytransformbuilderBuilder
Builder
class Book
int price
String title
def book = Bookbuilder()price(100)title(我輩は猫である)build()
上記以外にいくつかのパターンでのサポートメソッドを AST変換の引数で指定することもできますたとえばsetter をチェインさせていくようなパターンのビルダメソッドを生成することもできます
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformbuilderBuilderhtml
Sortable指定したクラスに対して以下を行います
bull compareTo メソッドを生成しインターフェース Comparableを実装する
bull それぞれのフィールドに関して比較する Comparator を返すメソッド (comparatorByXXX()) を生成するbull rarr返された Comparator はjavautilCollectionssort(List list
Comparator c) やjavautilArrayssort(T[] a Comparatorlt super Tgt c) に渡してソート処理に適用できる
コード例を以下に示します
import groovytransformSortable
Sortable
class Book
int price
String title
data = [new Book(price10 titleabc)
new Book(price9 titledef)]
Collectionssort(data)
assert data[0]price == 9 ampamp data[0]title == def
assert data[1]price == 10 ampamp data[1]title == abc
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSortablehtml
SourceURIString や URL クラス型の変数定義に指定するとその変数の値
に Groovy スクリプト自身の URI が初期設定されます
import groovytransformSourceURI
SourceURI String src
println src
上記のスクリプトをファイルに保存して実行すると file で始まる URI が表示されますあるいはスクリプトを Web サーバに置きURL を指定して groovy コマンドを実行するとそのURL が表示されますさらに以下のように -e オプションでスクリプトを指定したりGroovhShellevaluate(String) でスクリプトを実行するとSourceURI は data で始まるデータ URI を生成します
$ groovy -e import groovytransformSourceURI
SourceURI String src println src
dataimport20groovytransformSourceURI20
SourceURI20String20src20println20src
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSourceURIhtml
GMagazine vol8
4 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ライブラリの拡張改善
マークアップテンプレートエンジン新種のテンプレートエンジンマークアップテンプレートエン
ジン (groovytextmarkupMarkupTemplateEngine) が追加されましたマークアップテンプレートエンジンはDOM 的な構造を記述するための DSL の一種であるとも言えます参考リンクにある例を以下に示します
yieldUnescaped ltDOCTYPE htmlgt
html(langen)
head
meta(http-equiv
Content-Type content=texthtml charset=utf-8)
title(My page)
body
p(This is an example of HTML contents)
これは以下のような XML を生成するとのことです
ltDOCTYPE htmlgtlthtml lang=engtltheadgtltmeta
http-equiv=Content-Type content=text
html charset=utf-8gtlttitlegtMy pagelttitlegtlt
headgtltbodygtltpgtThis is an example of HTML
contentsltpgtltbodygtlthtmlgt
マークアップテンプレートエンジンはMarkupBuilder と同様にクロージャや疑似メソッドの呼び出しを使用してツリー構造を記述構築し文字列表現に落とすことができます加えて以下の特長があります
bull 静的コンパイルで高速化bull 静的型チェックが可能bull 整形 ( インデントエスケープ ) 機能付きbull テンプレート記述を別ファイルにして include なども可能
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-231html
documentationmarkup-template-enginehtml
JSON SlurperGroovy 23 ライブラリではいくつかの性能改善がなされてお
り特にJSON 処理が従来より最大 20 倍高速化されJava ベースのライブラリの中で最速の部類となっているとのことです
JSON Slurper については以下のパラメータを指定できるようになりました
パラメータ 説明
INDEX_OVERLAY 高速REST 呼び出しWebSocket メッセージAJAX などに適しているシリアライズされたオブジェクトの展開処理を特に高速化している
LAX コメントやクオート無しのマップのキーを許す
CHAR_BUFFER intdatelong などの貪欲 (eager) なパース処理が特長既存の Slurper の動作に近い
CHARACTER_SOURCE 2MB を越える JSON ファイルの処理に適する
これらのパラメータは以下のように指定します ( 参考リンクに示した API リファレンスより引用 )
parser = new JsonSlurper()setType(
JsonParserTypeINDEX_OVERLAY )
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230htmlgapi
groovyjsonJsonParserTypehtml
ConfigSlurper の拡張Grails で定義されていて利用可能であるようなproddevtest
といった「環境」を新たに定義し指定できるようになりました
(参考リンク)bull httpmrhakiblogspotjp201405groovy-goodness-extend-
configslurperhtml
Java87 の対応
Java8実行環境として JDK 8 が公式にサポートされました
Java7Java 7 の NIO2 に対応しました例えばいくつかの GDK メソッ
ドでjavaioFile の代りに javaioPath クラスが使用できます以下はリリースノートからの例です
pathwithReader Reader r -gt
patheachLine String line -gt
patheachFileRecurse Path p -gt
path ltlt some content
path ltlt bytes
pathreadLines()
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
2 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
今回はGroovy 23 の新機能をピックアップして紹介します詳しくはリリースノートを参照ください
トレイト(Traits)Groovy 23 における目玉機能としてトレイトが導入されまし
たGroovy のトレイトは実装の継承が可能なインターフェースですJava8 ではインターフェースにおいてサブクラスで定義しなかった場合の「デフォルトのメソッド」を定義することができるようになりましたがGroovy のトレイトも同種の機構であると言えますしかしGroovy のトレイトはメソッド以外にもメンバー変数を定義使用したりProxy を経由した動的な実装をすることができますまた JDK7 以前の Java 上でも利用することもできより強力な機構であると言えますGroovy のトレイトは Scala のトレイトと似ています詳しくは以下を参照ください
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230html
documentationcore-traitshtmlbull httpwwwslidesharenetuehajgroovy-trait
新規 AST 変換の導入TailRecursive Builder Sortable SourceURI の 4 つ の AST
変換が導入されました以下にそれぞれの説明を示します
TailRecursiveメソッドの自己再帰呼び出しをループに変換しますメソッド
を跨った相互末尾再帰等には対応していないなどいくつかの制約があります
以下の自己末尾再帰呼び出しを含むコードに TailRecursive を適用してみます
TailRecursive
def foo(int n int lim)
if (n lt lim)
foo(n+1 lim)
else
n
上は以下のようにループに変換されます
groovytransformTailRecursive
public javalangObject foo(int n int lim)
_lim_ = lim
_n_ = n
while (true)
try
if ( _n_ lt _lim_ )
javalangInteger __n__ = _n_
javalangInteger __lim__ = _lim_
_n_ = __n__ + 1
_lim_ = __lim__
continue
else
return _n_
catch (orgcodehausgroovytransform
tailrecGotoRecurHereException ignore)
continue
finally
return null
繰り返し数に比例してスタックを消費することがなくなるのでスタックオーバーフローを気にすることなく適切な場合には再帰呼び出しでわかりやすくロジックを書くことができます
Groovy臨機応変(第三回)〜Groovy 23の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
3Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformTailRecursivehtml
Builderインスタンスを初期化するためのフルーエントなメソッド呼
び出しによるビルダパターンを可能とする AST 変換です使用例を以下に示します
import groovytransformbuilderBuilder
Builder
class Book
int price
String title
def book = Bookbuilder()price(100)title(我輩は猫である)build()
上記以外にいくつかのパターンでのサポートメソッドを AST変換の引数で指定することもできますたとえばsetter をチェインさせていくようなパターンのビルダメソッドを生成することもできます
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformbuilderBuilderhtml
Sortable指定したクラスに対して以下を行います
bull compareTo メソッドを生成しインターフェース Comparableを実装する
bull それぞれのフィールドに関して比較する Comparator を返すメソッド (comparatorByXXX()) を生成するbull rarr返された Comparator はjavautilCollectionssort(List list
Comparator c) やjavautilArrayssort(T[] a Comparatorlt super Tgt c) に渡してソート処理に適用できる
コード例を以下に示します
import groovytransformSortable
Sortable
class Book
int price
String title
data = [new Book(price10 titleabc)
new Book(price9 titledef)]
Collectionssort(data)
assert data[0]price == 9 ampamp data[0]title == def
assert data[1]price == 10 ampamp data[1]title == abc
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSortablehtml
SourceURIString や URL クラス型の変数定義に指定するとその変数の値
に Groovy スクリプト自身の URI が初期設定されます
import groovytransformSourceURI
SourceURI String src
println src
上記のスクリプトをファイルに保存して実行すると file で始まる URI が表示されますあるいはスクリプトを Web サーバに置きURL を指定して groovy コマンドを実行するとそのURL が表示されますさらに以下のように -e オプションでスクリプトを指定したりGroovhShellevaluate(String) でスクリプトを実行するとSourceURI は data で始まるデータ URI を生成します
$ groovy -e import groovytransformSourceURI
SourceURI String src println src
dataimport20groovytransformSourceURI20
SourceURI20String20src20println20src
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSourceURIhtml
GMagazine vol8
4 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ライブラリの拡張改善
マークアップテンプレートエンジン新種のテンプレートエンジンマークアップテンプレートエン
ジン (groovytextmarkupMarkupTemplateEngine) が追加されましたマークアップテンプレートエンジンはDOM 的な構造を記述するための DSL の一種であるとも言えます参考リンクにある例を以下に示します
yieldUnescaped ltDOCTYPE htmlgt
html(langen)
head
meta(http-equiv
Content-Type content=texthtml charset=utf-8)
title(My page)
body
p(This is an example of HTML contents)
これは以下のような XML を生成するとのことです
ltDOCTYPE htmlgtlthtml lang=engtltheadgtltmeta
http-equiv=Content-Type content=text
html charset=utf-8gtlttitlegtMy pagelttitlegtlt
headgtltbodygtltpgtThis is an example of HTML
contentsltpgtltbodygtlthtmlgt
マークアップテンプレートエンジンはMarkupBuilder と同様にクロージャや疑似メソッドの呼び出しを使用してツリー構造を記述構築し文字列表現に落とすことができます加えて以下の特長があります
bull 静的コンパイルで高速化bull 静的型チェックが可能bull 整形 ( インデントエスケープ ) 機能付きbull テンプレート記述を別ファイルにして include なども可能
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-231html
documentationmarkup-template-enginehtml
JSON SlurperGroovy 23 ライブラリではいくつかの性能改善がなされてお
り特にJSON 処理が従来より最大 20 倍高速化されJava ベースのライブラリの中で最速の部類となっているとのことです
JSON Slurper については以下のパラメータを指定できるようになりました
パラメータ 説明
INDEX_OVERLAY 高速REST 呼び出しWebSocket メッセージAJAX などに適しているシリアライズされたオブジェクトの展開処理を特に高速化している
LAX コメントやクオート無しのマップのキーを許す
CHAR_BUFFER intdatelong などの貪欲 (eager) なパース処理が特長既存の Slurper の動作に近い
CHARACTER_SOURCE 2MB を越える JSON ファイルの処理に適する
これらのパラメータは以下のように指定します ( 参考リンクに示した API リファレンスより引用 )
parser = new JsonSlurper()setType(
JsonParserTypeINDEX_OVERLAY )
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230htmlgapi
groovyjsonJsonParserTypehtml
ConfigSlurper の拡張Grails で定義されていて利用可能であるようなproddevtest
といった「環境」を新たに定義し指定できるようになりました
(参考リンク)bull httpmrhakiblogspotjp201405groovy-goodness-extend-
configslurperhtml
Java87 の対応
Java8実行環境として JDK 8 が公式にサポートされました
Java7Java 7 の NIO2 に対応しました例えばいくつかの GDK メソッ
ドでjavaioFile の代りに javaioPath クラスが使用できます以下はリリースノートからの例です
pathwithReader Reader r -gt
patheachLine String line -gt
patheachFileRecurse Path p -gt
path ltlt some content
path ltlt bytes
pathreadLines()
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
3Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformTailRecursivehtml
Builderインスタンスを初期化するためのフルーエントなメソッド呼
び出しによるビルダパターンを可能とする AST 変換です使用例を以下に示します
import groovytransformbuilderBuilder
Builder
class Book
int price
String title
def book = Bookbuilder()price(100)title(我輩は猫である)build()
上記以外にいくつかのパターンでのサポートメソッドを AST変換の引数で指定することもできますたとえばsetter をチェインさせていくようなパターンのビルダメソッドを生成することもできます
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformbuilderBuilderhtml
Sortable指定したクラスに対して以下を行います
bull compareTo メソッドを生成しインターフェース Comparableを実装する
bull それぞれのフィールドに関して比較する Comparator を返すメソッド (comparatorByXXX()) を生成するbull rarr返された Comparator はjavautilCollectionssort(List list
Comparator c) やjavautilArrayssort(T[] a Comparatorlt super Tgt c) に渡してソート処理に適用できる
コード例を以下に示します
import groovytransformSortable
Sortable
class Book
int price
String title
data = [new Book(price10 titleabc)
new Book(price9 titledef)]
Collectionssort(data)
assert data[0]price == 9 ampamp data[0]title == def
assert data[1]price == 10 ampamp data[1]title == abc
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSortablehtml
SourceURIString や URL クラス型の変数定義に指定するとその変数の値
に Groovy スクリプト自身の URI が初期設定されます
import groovytransformSourceURI
SourceURI String src
println src
上記のスクリプトをファイルに保存して実行すると file で始まる URI が表示されますあるいはスクリプトを Web サーバに置きURL を指定して groovy コマンドを実行するとそのURL が表示されますさらに以下のように -e オプションでスクリプトを指定したりGroovhShellevaluate(String) でスクリプトを実行するとSourceURI は data で始まるデータ URI を生成します
$ groovy -e import groovytransformSourceURI
SourceURI String src println src
dataimport20groovytransformSourceURI20
SourceURI20String20src20println20src
(参考リンク)bull httpbetagroovy-langorgdocslatesthtmlgapigroovy
transformSourceURIhtml
GMagazine vol8
4 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ライブラリの拡張改善
マークアップテンプレートエンジン新種のテンプレートエンジンマークアップテンプレートエン
ジン (groovytextmarkupMarkupTemplateEngine) が追加されましたマークアップテンプレートエンジンはDOM 的な構造を記述するための DSL の一種であるとも言えます参考リンクにある例を以下に示します
yieldUnescaped ltDOCTYPE htmlgt
html(langen)
head
meta(http-equiv
Content-Type content=texthtml charset=utf-8)
title(My page)
body
p(This is an example of HTML contents)
これは以下のような XML を生成するとのことです
ltDOCTYPE htmlgtlthtml lang=engtltheadgtltmeta
http-equiv=Content-Type content=text
html charset=utf-8gtlttitlegtMy pagelttitlegtlt
headgtltbodygtltpgtThis is an example of HTML
contentsltpgtltbodygtlthtmlgt
マークアップテンプレートエンジンはMarkupBuilder と同様にクロージャや疑似メソッドの呼び出しを使用してツリー構造を記述構築し文字列表現に落とすことができます加えて以下の特長があります
bull 静的コンパイルで高速化bull 静的型チェックが可能bull 整形 ( インデントエスケープ ) 機能付きbull テンプレート記述を別ファイルにして include なども可能
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-231html
documentationmarkup-template-enginehtml
JSON SlurperGroovy 23 ライブラリではいくつかの性能改善がなされてお
り特にJSON 処理が従来より最大 20 倍高速化されJava ベースのライブラリの中で最速の部類となっているとのことです
JSON Slurper については以下のパラメータを指定できるようになりました
パラメータ 説明
INDEX_OVERLAY 高速REST 呼び出しWebSocket メッセージAJAX などに適しているシリアライズされたオブジェクトの展開処理を特に高速化している
LAX コメントやクオート無しのマップのキーを許す
CHAR_BUFFER intdatelong などの貪欲 (eager) なパース処理が特長既存の Slurper の動作に近い
CHARACTER_SOURCE 2MB を越える JSON ファイルの処理に適する
これらのパラメータは以下のように指定します ( 参考リンクに示した API リファレンスより引用 )
parser = new JsonSlurper()setType(
JsonParserTypeINDEX_OVERLAY )
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230htmlgapi
groovyjsonJsonParserTypehtml
ConfigSlurper の拡張Grails で定義されていて利用可能であるようなproddevtest
といった「環境」を新たに定義し指定できるようになりました
(参考リンク)bull httpmrhakiblogspotjp201405groovy-goodness-extend-
configslurperhtml
Java87 の対応
Java8実行環境として JDK 8 が公式にサポートされました
Java7Java 7 の NIO2 に対応しました例えばいくつかの GDK メソッ
ドでjavaioFile の代りに javaioPath クラスが使用できます以下はリリースノートからの例です
pathwithReader Reader r -gt
patheachLine String line -gt
patheachFileRecurse Path p -gt
path ltlt some content
path ltlt bytes
pathreadLines()
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
4 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ライブラリの拡張改善
マークアップテンプレートエンジン新種のテンプレートエンジンマークアップテンプレートエン
ジン (groovytextmarkupMarkupTemplateEngine) が追加されましたマークアップテンプレートエンジンはDOM 的な構造を記述するための DSL の一種であるとも言えます参考リンクにある例を以下に示します
yieldUnescaped ltDOCTYPE htmlgt
html(langen)
head
meta(http-equiv
Content-Type content=texthtml charset=utf-8)
title(My page)
body
p(This is an example of HTML contents)
これは以下のような XML を生成するとのことです
ltDOCTYPE htmlgtlthtml lang=engtltheadgtltmeta
http-equiv=Content-Type content=text
html charset=utf-8gtlttitlegtMy pagelttitlegtlt
headgtltbodygtltpgtThis is an example of HTML
contentsltpgtltbodygtlthtmlgt
マークアップテンプレートエンジンはMarkupBuilder と同様にクロージャや疑似メソッドの呼び出しを使用してツリー構造を記述構築し文字列表現に落とすことができます加えて以下の特長があります
bull 静的コンパイルで高速化bull 静的型チェックが可能bull 整形 ( インデントエスケープ ) 機能付きbull テンプレート記述を別ファイルにして include なども可能
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-231html
documentationmarkup-template-enginehtml
JSON SlurperGroovy 23 ライブラリではいくつかの性能改善がなされてお
り特にJSON 処理が従来より最大 20 倍高速化されJava ベースのライブラリの中で最速の部類となっているとのことです
JSON Slurper については以下のパラメータを指定できるようになりました
パラメータ 説明
INDEX_OVERLAY 高速REST 呼び出しWebSocket メッセージAJAX などに適しているシリアライズされたオブジェクトの展開処理を特に高速化している
LAX コメントやクオート無しのマップのキーを許す
CHAR_BUFFER intdatelong などの貪欲 (eager) なパース処理が特長既存の Slurper の動作に近い
CHARACTER_SOURCE 2MB を越える JSON ファイルの処理に適する
これらのパラメータは以下のように指定します ( 参考リンクに示した API リファレンスより引用 )
parser = new JsonSlurper()setType(
JsonParserTypeINDEX_OVERLAY )
(参考リンク)bull httpbetagroovy-langorgdocsgroovy-230htmlgapi
groovyjsonJsonParserTypehtml
ConfigSlurper の拡張Grails で定義されていて利用可能であるようなproddevtest
といった「環境」を新たに定義し指定できるようになりました
(参考リンク)bull httpmrhakiblogspotjp201405groovy-goodness-extend-
configslurperhtml
Java87 の対応
Java8実行環境として JDK 8 が公式にサポートされました
Java7Java 7 の NIO2 に対応しました例えばいくつかの GDK メソッ
ドでjavaioFile の代りに javaioPath クラスが使用できます以下はリリースノートからの例です
pathwithReader Reader r -gt
patheachLine String line -gt
patheachFileRecurse Path p -gt
path ltlt some content
path ltlt bytes
pathreadLines()
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
5Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
JUnit 4 対応groovytestGroovyAssert に以下の静的メソッドが追加されました (GROOVY-6588)これらは従来より GroovyTestCase のインスタ
ンスメソッドとしては対応するものが定義されていたのですがJUnit4 でテストクラスを GroovyTestCase から継承させない場合に使用するための静的メソッドが定義されたクラス groovytestGroovyAssert では定義されていませんでした
メソッド 説明
static void assertScript(String script) 文字列のスクリプトを実行結果を assert する
static boolean notYetImplemented(Object caller) 試験の成功 失敗を逆転させて扱う (Fail なら Pass としPass なら Fail とする
static Throwable shouldFail(Class clazz String script) 文字列のスクリプトを実行し指定した例外が発生したら Pass とする
static Throwable shouldFail(String script) 文字列のスクリプトを実行し例外が発生したら Pass とする
Closure 引数に対する静的型チェック従来クロージャを引数としてとるメソッドにおいてクロー
ジャ型の引数の引数に型を宣言する方法がありませんでした例えば
void foo(Closure clos)
クロージャclosの「引数の型」を宣言する方法がない clos(ABC)
引数closのクロージャには常に1つの文字列が引数として与えられるのだがhellip
というメソッドが定義されているとき以下のコード
TypeChecked
def func()
foo it -gt ittoUpperCase()
静的型エラーitの型はObjectとみなされる
は ク ロ ー ジ ャ 引 数 it の 型 を 知 る 方 法 が 無 くit に 対 す るtoUpperCase() の呼び出しが静的型チェックや静的コンパイルでエラーになるので以下のように型を指定する必要がありました
foo String it -gt
ittoUpperCase()
しかしfoo の宣言時に ClosureParam を以下のように使用することでit の型は推論されるようになり型を明示的に指定する必要がなくなります
void foo(ClosureParams(value=SimpleTypeclass
options=javalangString) Closure clos)
clos(ABC)
話はジェネリクスが入ってくるともうちょっとややこしくなります [1]次の例です
[abc]collect ittoUpperCase()
この場合「クロージャの引数の型」はレシーバの List の「要素の型」と一致していなければなりません
collect はGDK メ ソ ッ ド と し てDefaultGroovyMethodsjava(DGM) 中で以下のように定義されています
public static ltSTgt ListltTgt collect(CollectionltSgt
self
ClosureParams(FirstParamFirstGenericTypeclass)
ClosureltTgt transform)
return (ListltTgt) collect(self
new ArrayListltTgt(selfsize()) transform)
「ClosureParams(FirstParamFirstGener icTypec lass) transform」ではクロージャの引数 transform の引数の型は第一引数 (FirstParam) すなわちレシーバであるコレクション self のジェネリックス型引数 (S) であると宣言していますちなみに Tはクロージャの戻り値の型です
ClosureParams を 使 用 す る こ と で ラ イ ブ ラ リ 側 の 定義 は 煩 雑 に な り ま す が そ れ を 呼 び 出 す コ ー ド に お い て TypeCheckedCompileStatic はより賢く振舞うようになりコードを簡潔にすること及び動的 Groovy コードに適用した際の修正を減らすことに貢献してくれます
なおGroovy 24 beta 4 では同様の指定が DelegatesTo アノテーションでも可能になりました(GROOVY-6956)
(参考リンク)bull httpmelixgithubioblog201401closure_param_
inferencehtmlbull [1] Java8 では Generics の引数型に対してアノテーションが付
与できるようになったのでこのような間接的な指定方法ではなく直接指定できるはずであるあるいは Groovy 自体の拡張で同種の指定も可能であっただろうしかしながらGroovyのコンパイル動作環境は Java8 には限定されておらずまた ClosureParams を 使 用 す る 主 な 場 所 は Java で 定 義 さ れ たDGM(DefaultGroovyMethodsjava) で あ る た めJava 7 以 前 でも使用できるこの方法が採用された
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
6 Groovy 臨機応変(第三回)〜 Groovy 23 の新機能 〜
ツールの拡張
Groovysh の拡張と変更Groovysh は着々と拡張されていますまず補完が賢くなり
ました (GROOVY-6399GROOVY-6395)たとえばマップのキーを補完できるようになりました
groovysh
groovy000gt m = [abc123 def456]
groovy001gt ma [タブを押す]
any( abc
groovy001gt mab [タブを押す]
groovy001gt mabc 補完される
この機能はDOM ツリーや AST などツリーをたどりながら表示させる場合に絶大な効果を発揮します
また機能の変更としてgroovysh 中でのコマンド (load edit alias など ) にはプリフィックス「」が必要となりました変数名や関数名と重なることがなくなります (GROOVY-6397)
groovysh
groovy000gt load testgroovy 従来はコロン無しの「load」で実行していた
GroovyConsole の拡張GroovyConsole には以下の拡張がなされています
bull プリファレンス API を通じてフォントが指定できるようになったとのことですただしフォント指定のための GUI はまだ用意されていません(GROOVY-6303)
bull 選択範囲で実行 (Run Selection) したときにimport 文を意識してくれるようになりましたつまり選択範囲に import 文が含まれていなくても同じソース中の冒頭位置などに含まれている import があたかも選択範囲中にも指定されているかのように解釈して実行してくれます
bull コメントコメント解除の機能とショートカットキーが追加されました(GROOVY-6459)
ドキュメントの改善その他ドキュメントが抜本的に改善されています改善され
た内容は現時点では Groovy のβ版ドキュメントページで公開されていますが将来的には公式サイトの内容に置換されます
(参考リンク)bull httpbetagroovy-langorgdownloadhtml
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
7Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
今 回 はGroovy 24 の 新 機 能 を 現 時 点 で 公 開 さ れ て い るGroovy 24 beta4までのリリースノートから抜粋して紹介します
正式リリースまでにはさらに機能が追加されるでしょうから正確には Groovy 24 の機能の一部ということになります
(参考リンク)bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20369bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20433bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20544bull httpsjiracodehausorgsecureReleaseNotejspaprojectId=1
0242ampversion=20612
Android 対応Groovy 24 では Android アプリケーションを開発できるよう
になりましたGroovy を Android で動作させるための試みは過去にもいくつかありましたが今回はパッチなどではなく公式の Groovy メインラインで対応されているのが特徴です基本的にはStatic Compile 配下で動作する機能を使用しますこのAndroid 対応に合せて SwissKnifegrooid-tools などの開発用ライブラリもでてきています(GROOVY-6861)
(参考リンク)bull httpsgithubcomArasthelSwissKnifebull httpsgithubcomkarfunkelgrooid-tools
ライブラリの拡張
toUnique()toSorted() の追加List などIterable なコレクションに対する GDK メソッドの追
加です(GROOVY-6945)従 来 か ら JDK に 存 在 し た Listsort() は 破 壊 的 操 作 で し た が
toSorted はイミュータブルな「ソートしたものを返す操作」ですまたtoUnique() も同様に重複要素を削除したものを返しもとのコレクションを変更しませんまたこれらは Iterable なコレクション一般もしくは配列に対する適用も可能です
Java8 ではコレクションに対する sort メソッドが新規に追加されましたがGDK の sort と名前が被るので混乱を避けるためにという意味合いもあるようです
例 )
assert [4122334]toUnique() == [4123]
assert [4122334]toSorted() == [1223344]
init() dropRight()takeRight() の追加Scala の同名メソッドの導入です(GROOVY-6867)メソッドの説明を以下に示します
メソッド 意味 例 (a = [123] のとき )
init() 末尾以外 assert ainit()==[12]
dropRight() 末尾の指定個数を削除 assert adropRight(2) == [1]
takeRight() 末尾の指定個数を取得 assert atakeRight(2) == [23]
SystemcurrentTimeSecond() の追加エ ポ ッ ク か ら の 経 過「 秒 数 」 を 返 す メ ソ ッ ド System
currentTimeSecond() が 追 加 さ れ ま し たJDK の SystemcurrentTimeMillis の 1000 分の 1 を返します(GROOVY-6294)
groovy000gt SystemcurrentTimeSeconds()
===gt 1416000159
groovy000gt SystemcurrentTimeMillis()
===gt 1416000167901
Groovysh の拡張groovysh が地道に拡張されています
bull groovysh ではメソッド補完が効くようになっているのですが補完候補の表示に ANSI のエスケープシーケンスを使ってインスタンスメソッドはボールド表示static メソッドやsuper クラスのメソッドは通常表示となるようになりました(GROOVY-6563)
bull 以前の Groovysh では行の単位で Groovy の式を評価するためシェル変数以外の型宣言した変数を行をまたがって使用することができませんでしたが可能となります(GROOVY-6623)
Groovy臨機応変(第四回)〜Groovy 24の新機能〜
上原 潤二 (うえはら じゅんじ)
NTT ソフトウェア株式会社 Grails 推進室所属JGGUG(日本 GrailsGroovy ユーザ会)運営委員「Grails 徹底入門」(翔泳社)「プログラミング GROOVY」(技術評論社)執筆メンバーの 1 人
Groovy 技術に関するブログ「Gr な日々」を主宰している
ser ies
10
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
8 Groovy 臨機応変(第四回)〜 Groovy 24 の新機能 〜
(例) 以下が可能となる
String s = abc
println s
bull groovysh の起動時に-e オプションで任意の Groovy コードを実行できるようになりましたまたコマンドラインに指定した groovy スクリプトを読み込むようになりました
(例)
gt cat testgroovy
println hello
gt groovysh -e println 1+1 testgroovy
Groovy Shell (240-beta-3 JVM 180_25)
Type help or h for help
-------------------------------------------------
------------------------------------
groovy000gt println 1+1
2
===gt null
groovy000gt load testgroovy
hello
===gt null
groovy000gt
SelfType アノテーショントレイトの定義においてそのトレイトを実装するクラスが
実装していなけれならないクラスもしくはインターフェースを SelfType というアノテーションで指定できるようになりましたSelfType アノテーションによって以下の利点が得られるようになります
bull トレイトがどんなクラスインターフェース ( およびそのサブクラス ) に注入可能であるかを制約するこの制約を満していないクラスがそのトレイトを実装しようとするとコンパイルエラーとなる
bull その結果トレイトで定義するメソッド中で使用できるはずのメソッド群が静的に予期できるようになり実装クラスのメソッドを自由に呼び出せる
bull トレイトのメソッド中での this の型が静的に確定するのでthis を他のメソッドに渡す際などに静的型チェック可能になる
要はトレイトと静的 Groovy(CompileSattic TypeChecked)との相性がより高まったということです
コード例は以下のとおり
import groovytransform
import javautilconcurrentCopyOnWriteArrayList
CompileStatic
SelfType(List)
trait LispLikeList
Object car()
first()
Collection cdr()
tail()
class LispLikeCoWListltEgt extends
CopyOnWriteArrayListltEgt implements LispLikeList
LispLikeCoWList(list)
super(list)
def list1 = new LispLikeCoWList([123])
assert list1car() == 1
assert list1cdr() == [23]
(参考リンク)- h t t p d o c s g r o o v y - l a n g o r g 2 4 0 - b e t a - 4 h t m l
documentationcore-traitshtml_self_types
Macro Groovyその他AST 変換における AST の生成を簡易に書けるようにす
る「Macro Groovy」機能のGroovy 公式機能としての導入が検討されていますこの過程でAST の木のパターンマッチングサポートも検討されているようです
(参考リンク)bull httpsgithubcombsideupMacroGroovybull httpgroovy329449n5nabblecomState-of-the-macros-
td5721429htmla5721475
Groovy 24 正式版は本記事執筆後に公開されました冒頭にお断りしているようにGroovy 24 正式版では本記事で記載した以外にも多数の機能が追加されておりますまたMacro Groovy の採用は 240 時点では見送られています悪しからずご了承ください
( 参考リンク )httpdocscodehausorgdisplayGROOVYGroovy+24+release+notes
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
9Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
Gradle SSH Plugin はGradle のビルドスクリプトから SSH によるリモート操作やSFTP によるファイル転送を行うためのプラグインですビルドプロセスにおけるファイル転送やサービス起動停止などさまざまな操作を自動化することができます
操作対象のサーバーには SSH でアクセス可能であればよく特別なエージェントやデーモンなどを導入する必要がないため導入の敷居が低いことも特徴です加えてパスワード認証や公開鍵認証SSH エージェントSOCKS プロキシ対応などさまざまな利用パターンに対応しています
またGradle SSH Plugin の SSH 接続機能だけを単体で切り出した Groovy SSH というライブラリも提供されておりGradle とは無関係に単体の Groovy スクリプトから利用することも可能です
Gradle SSH Plugin 概要開発者 int128 ( いわてぃ ) 氏最新バージョン 045 (20141124 時点 )プロジェクト Web サイト bull Gradle SSH Plugin [httpsgradle-ssh-plugingithubio]bull Groovy SSH [httpsgroovy-sshgithubio]ライセンス Apache License Version 20
本プラグインのバージョン 04x は Gradle20 以降が必要ですGradle1x から利用する場合はバージョン 03x を利用してください
Gradle SSH Plugin を使うメリットJava で実装された SSH ライブラリはいくつかありますが標準
入出力の処理など低レベルの処理を自分で実装しなければなりません
Gradle SSH Plugin は独自の DSL( 以降「SSL DSL」と表記します )を提供することでこのような煩雑さをなくしかつ処理対象のグループ化などを見通しよく実装できるように工夫されています( 内部では JSch を利用しています)
SSH DSL の文法は Groovy SSH と共通なのでGradle から利用するだけでなく高機能なシェルスクリプトのように利用することも可能です
クイックスタート開発者の int128 氏がテンプレートプロジェクトを提供してく
れていますので参考にするとよいでしょう本 稿 で は テ ン プ レ ー ト プ ロ ジ ェ ク ト に 少 し 手 を 入 れ て
Vagrant で SSH 可能な仮想マシンを準備するサンプルを用意しましたのでそちらを利用して Gradle SSH Plugin の動作を確認してみましょう以下のコマンドでサンプルを入手してください
git clone -b gmag-8 httpsgithubcomnobusue
gradle-ssh-plugin-templategit
サンプルコード内の buildgradle は以下のようになっています
Gradleプラグイン探訪〜第1回 Gradle SSH Plugin〜
須江 信洋 (すえ のぶひろ)
日本 GrailsGroovy ユーザーグループ サポートスタッフ『Groovy イン アクション』(毎日コミュニケーションズ)翻訳チームおよび『プログラミング GROOVY』(技術評論社)「Gradle 徹底入門(翔泳社)」執筆チームの一員 本稿は著者個人の考えおよび経験に基づいて記述したものであり所属する会社や組織の意見を表すものではありません
ser ies
16
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
10 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
plugins
id orghidetakessh version 045
remotes
targethost
host = 1921683310
user = vagrant
identity = file($Systemproperties[user
home]vagrantdinsecure_private_key)
sshsettings
logging = stdout
task showPlatformVersion ltlt
sshrun
session(remotestargethost)
execute(uname -a)
execute(cat etc-release || true)
task wrapper(type Wrapper)
gradleVersion = 21
remotes ブロックここでは SSH 接続先の情報を定義しますサンプルでは Vagrant で起動したサーバー (1921683310) に対
して SSH 鍵認証でログインする設定をしています複数のサーバーに対する定義を列挙することも可能です
sshsettings ブロックここでは SSH Plugin 全体の設定を行いますサンプルではログ出力先を標準出力 ( および標準エラー出力 )
に設定しています
sshrunブロックリモートサーバーに対する操作を定義しますサンプルではremotestargethost で定義したサーバーに SSH
接続しexecute() で uname コマンドおよび cat コマンドを実行しています
サンプル実行以下のコマンドでサンプルを実行します(Vagrant を利用しま
すので別途導入しておいてくださいVagrant を利用しない場
合はremotes ブロックの内容を適宜修正してください)
vagrant up
gradlew showPlatformVersion
実行結果は以下のようになります
$ gradlew showPlatformVersion
showPlatformVersion
Linux precise32 320-23-generic-pae 36-Ubuntu
SMP Tue Apr 10 221909 UTC 2012 i686 i686 i386
GNULinux
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=1204
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION=Ubuntu 1204 LTS
BUILD SUCCESSFUL
Total time 6248 secs
このように簡単にシェルコマンドを実行することができるので複数のサーバーに対して同じシェルスクリプトを実行する場合などに威力を発揮します
シェルコマンドとGroovy の連携Gradle SSH Plugin の便利なところは単にシェルコマンドを
実行できるだけでなく実行結果を Groovy の文字列として受け取って処理することができる点にあります
前述のサンプルの sshrun ブロックを以下のように修正して実行してみてください
sshrun
session(remotestargethost)
def uname = execute(uname -a)
assert unamecontains(precise64)
execute(cat etc-release || true)
実行結果は以下のようになります
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
11Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
showPlatformVersion FAILED
FAILURE Build failed with an exception
Where
Build file Usersnobusueworkgmaggradle-ssh-
plugin-templatebuildgradle line 21
What went wrong
Execution failed for task showPlatformVersion
gt assert unamecontains(precise64)
| |
| false
Linux precise32 320-23-generic-pae
36-Ubuntu SMP Tue Apr 10 221909 UTC 2012 i686
i686 i386 GNULinux
uname -a の結果に precise64 が含まれていないためassertが失敗して例外が発生しています
これは非常に単純な例ですが例えばシェルコマンドの実行結果を Groovy で解析してその結果を次のシェルコマンドの入力として渡すことも可能ですうまく使いこなすと非常に高度な処理を自動化することができます
Gradle SSH Plugin の機能Gradle SSH Plugin は多くの機能を提供しているためここで
は特に利用頻度が高いと思われるものについてまとめます詳細についてはユーザーガイドを参照するとよいでしょうまたSSH DSL の利用方法については acceptance-test のコー
ドも参考になります
リモートホストおよび接続定義remotes ブロックで定義しますremotesltidgt で Remote 型の
オブジェクトとして参照可能です以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer ポート番号 ( デフォルト 22)
gateway Remote SSH ポートフォワードを行う
proxy Proxy SOCKSHTTP プロキシを指定
user String( 必須 ) ユーザー名
password String パスワード
identity File 秘密鍵ファイル
passphrase String 秘密鍵のパスフレーズ
agent Boolean Putty or ssh-agentを利用
knownHosts File known hostsファイル ( デフォルト ~sshknown_hosts) allowAnyHosts 設定時はチェックを無効化
retryCount Integer 接続リトライ回数( デフォルトはリトライなし )
retryWaitSec Integer リトライ間隔 ( 秒数デフォルト 0)
プロキシ定義proxies ブロックで定義しますproxiesltidgt で Proxy 型のオブ
ジェクトとして参照可能ですSOCKS および HTTP に対応しています
以下のパラメータを指定できます
キー 型 説明
host String( 必須 ) ホスト名 or IP アドレス
port Integer( 必須 ) ポート番号
type ProxyType( 必須 ) プロキシのタイプ(SOCKS or HTTP)
user String ユーザー名
password String パスワード
socksVersion Integer SOCKS バージョン(4 or 5 デフォルト 5)
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
12 Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
ロール定義role() でリモートサーバーを役割ごとにグループ化できます
各 Remote に対してロールは複数指定可能です
sshremotes
server1
role(web)
role(all)
host = xxxx
user = root
server2
role(web)
role(all)
host = yyyy
user = root
server2
role(db)
role(all)
host = zzzz
user = root
ロールを定義しておくとremotesrole() でリモートサーバーをまとめて指定できます
sshrun
session(remotesrole(web))
operations for web
session(remotesrole(webdb))
operations for web and db
session(remotesrole(all))
operations for all
オペレーション実行sshrun ブロックで SSH 接続およびオペレーションの実行を定
義しますSSH 接続ごとに session ブロックを定義し内部でオペレーショ
ンを記述します
task sshTask ltlt
sshrun
session(remotesserver1)
do operations for server1
session(remotesserver2)
do operations for server2
複数のサーバーに同じオペレーションを行う場合はsesssionの引数に Remote オブジェクトの配列を渡します
task sshTask ltlt
sshrun
session( [remotesserver1 remotesserver2])
do common operations
この場合オペレーションは server1 と server2 に対して並列実行されるわけではなく指定した順にシーケンシャルに行われることに注意してください
オペレーションとして利用可能なものは以下の通りです
オペレーション 動作
execute コマンドを実行します
executeBackground バックグラウンドでコマンドを実行します
executeSudo sudo -S -p を指定してコマンドを実行します
shell シェルによる対話処理を実行します
put リモートサーバーにファイル ディレクトリを送信します
get リモートサーバーからファイル ディレクトリを取得します
execute() によるコマンド実行はコマンド終了までブロックされますまたコマンドが 0 以外のリターンコードを返した場合には例外が発生します
コマンドの実行結果は変数もしくはクロージャで受け取ることができます具体的には以下のようにします
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
13Gradle プラグイン探訪 〜第 1 回 Gradle SSH Plugin 〜
def hostname = execute hostname -f
println hostname
execute(hostname -f) result -gt println result
またオペレーション実行時には以下のパラメータを指定できます
キー 型 説明
dryRun Boolean ドライランを有効にします ( デフォルト false)
pty Boolean PTY( 擬似端末 ) を有効にします ( デフォルト false)
logging String ログ出力先を指定します ( デフォルト slf4j)
outputStream OutputStream コマンドの標準出力のリダイレクト先を指定します
errorStream OutputStream コマンドの標準エラー出力のリダイレクト先を指定します
encoding String 入出力エンコーディングを指定します ( デフォルト UTF-8)
interaction Closure 対話処理のためのクロージャを指定します
extensions List of classes ミックスインする拡張モジュールのクラスを指定します
対話処理オペレーションの実行結果に対してパターンマッチングを行う
ことで対話的な処理を実現できますexpect コマンドと類似の処理が可能です
詳細についてはユーザーガイドを参照してください
Groovy SSHライブラリ利用時の注意事項Groovy SSH ライブラリは Gradle に依存しておらず単体で利
用することができます使い方は簡単でGroovy SSH の JAR ファイルをダウンロード
しjava -jar で実行するだけです
$ curl -L -O httpsgithubcomint128groovy-
sshreleasesdownloadv017groovy-ssh-017-
alljar
$ java -jar groovy-ssh-017-alljar sshTasks
groovy
Groovy SSH で SSH DSL を実行する場合にはコンテキストの指定が必要です以下のように ssh を記述するようにしてください
sshremotes
server
host = xxxx
user = someone
identity = new File(~sshid_dsa)
sshsettings
logging = stdout
sshrun
session(sshremotesserver1)
execute hostname -f
まとめGradle SSH PluginGroovy SSH ライブラリは Gradle による作業
の自動化だけでなくシェルスクリプトの高機能な代替物としてGroovy を利用可能にする可能性を秘めたプロダクトです
ドキュメントが英語のみということもあってかなぜか日本よりも海外で人気があるようですがこの機会にぜひ試してみてください
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
14
はじめに今回ご紹介する Grails プラグインはCodeNarc プラグインで
す本記事は次の環境で動作確認をしております
bull OS Windows 7 SP1 Mac OS X 1095bull Java 180_25bull Grails 244
なおコマンドの実行結果については紙面の都合上出力結果を省略しており実際の出力と異なる場合がありますご了承願います
CodeNarc プラグインとはCodeNarc プラグインはGroovy のソースコードに対して静的
コード分析を行うための機能を提供するプラグインです既存のツールである CodeNarc を使用し静的コード分析を行い
ます
なおCodeNarc についてはVol1 から Vol3 まで連載がありますのでそちらも参照してください
プラグインのインストールCodeNarc プラグインのインストールはGrails のバージョン
が 1x の場合次のコマンドを入力してインストールします
$ grails install-plugin codenarc
Grails のバージョンが 2x の場合BuildConfiggroovy の pluginsに「compile codenarc022」を追加します
plugins
compile codenarc022
静的コード分析の実行静的コード分析は次のコマンドを実行します
$ grails codenarc
デフォルトでは分析結果は targetCodeNarcReporthtml というレポートファイルに出力されます
サンプルコードで静的コード分析実際に試してみましょう
サンプルプロジェクトの作成サンプルのプロジェクトを作成します
$ grails create-app testcodenarc
サンプルのドメインクラスの作成次にサンプルのドメインクラスを作成します今回もいつもの
様に本 (Book) のドメインクラスとします
$ cd testcodenarc
$ grails create-domain-class Book
Book ドメインクラスのコードは次のとおりです
Grails Plugin 探訪第 9 回
~ CodeNarc プラグイン ~ URL httpgrailsorgplugincodenarc
プラグインのバージョン 022対応する Grails のバージョン 13 以上
杉浦孝博
最近は Grails を使用したシステムの保守をしている自称プログラマ日本 GrailsGroovy ユーザーグループ事務局長共著『Grails 徹底入門』共訳『Groovy インアクション』
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
15
package testcodenarc
class Book
String title
int price
String isbn13
static constraints =
title blank false
price min 0
isbn13 blank true
コントローラビューの生成ドメインクラスからコントローラとビューを自動生成します
$ grails generate-all testcodenarcBook
静的コード分析の実行自動生成したコードも含め静的コード分析を実行します
$ grails codenarc
Running CodeNarc (rulesetsbasicxmlrulesets
exceptionsxml
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml)
CodeNarc finished report(s) generated [target
CodeNarcReporthtml]
静的コード分析結果の参照出力されたファイル targetCodeNarcReporthtml を Web ブラ
ウザで開きます
ご覧のとおり自作したドメインクラス自動生成されたコントローラももちろんですがテストコードも Groovy コードですので分析の対象となっているのがわかります
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
16
CodeNarc プラグインの設定CodeNarc プラグインはデフォルトの設定でも十分使えます
が場合によっては設定を変更したい場合があると思いますそのような場合はBuildConfiggroovy に「codenarc」で始まるプロパティに設定を記述します
変更できる内容は次のとおりです
bull レポートの形式やファイルパスなどbull CodeNarc ルールセットbull 分析対象のソースコードbull CodeNarc のルールのプロパティbull ルール違反数の上限
レポートの設定レ ポ ー ト は デ フ ォ ル ト で は HTML 形 式 で target
CodeNarcReporthtml ファイルに出力されます
分析結果のレポートについては形式やファイルのパスタイトルを変更することができます
レポート形式についてはHTML 形式以外にXML 形式とテキスト形式もサポートしています
レポートは1 つだけでなく複数指定することができます
設定の仕方は
codenarcreports =
レポート名(レポート形式)
outputFile = レポートのファイルパス title = レポートのタイトル
とクロージャで設定しますレポート名は任意の名前レポート形式は次の表のとおりファイルパスは相対パスの場合アプリケーションのルートディレクトリからのパスとなります
形式 値
HTML html
XML xml
テキスト text
任意の出力 CodeNarc の ReportWriter インタフェースを実装したクラスの完全修飾クラス名
例を見てみましょう次のとおり設定を記述すればtarget ディレクトリに 3 つのレポートファイルが作成されることになります
codenarcreports =
MyXmlReport(xml)
outputFile = targetCodeNarc-Reportxml
title = Sample Report by XML
MyHtmlReport(html)
outputFile = targetCodeNarc-Report
html
title = Sample Report by HTML
MyTextReport(text)
outputFile = targetCodeNarc-Report
text
title = Sample Report by Text
CodeNarc ルールセットファイルの設定CodeNarc のルールセットファイルはデフォルトでは次の
ファイルが使用されます
bull rulesetsbasicxmlbull rulesetsexceptionsxmlbull rulesetsimportsxmlbull rulesetsgrailsxmlbull rulesetsunusedxml
CodeNarc のルールセットファイルの設定を変更したい場合BuildConfiggroovy に「codenarcruleSetFiles」プロパティを記述します
codenarcruleSetFiles プロパティに指定するファイルはクラスパスから参照できる必要がありますファイルシステム上のファイルをし指定した場合次のように「file」を先頭に付加します
codenarcruleSetFiles=filegrails-appconf
MyRuleSetgroovy
codenarcruleSetFiles プロパティに複数ファイルを指定したい場合カンマ () で区切って 1 つの文字列で指定するかリスト形式で複数の文字列で指定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
17
codenarcruleSetFiles=rulesetsbasic
xmlrulesetsexceptionsxml +
rulesetsimportsxmlrulesetsgrails
xmlrulesetsunusedxml
codenarcruleSetFiles=[
rulesetsbasicxml
rulesetsexceptionsxml
rulesetsimportsxml
rulesetsgrailsxml
rulesetsunusedxml
]
分析対象のソースコード分析対象のソースコードはデフォルトでは分析対象となる
Groovy コードは次のディレクトリ配下の Groovy ファイルが対象となります
bull srcgroovybull grails-appcontrollersbull grails-appdomainbull grails-appservicesbull grails-apptaglibbull grails-apputilsbull testunitbull testintegration
分析対象のソースコードを変更したい場合次の表に示すプロパティを BuildConfig に記述しますプロパティの値として trueを指定した場合は指定したディレクトリ配下の Groovy ファイルが分析対象となりfalse を指定した場合は分析対象とはなりません
プロパティ名 対象ディレクトリ デフォルト値
codenarcprocessSrcGroovy srcgroovy true
codenarcprocessControllers grails-appcontrollers
true
codenarcprocessDomain grails-appdomain
true
codenarcprocessServices grails-appservices
true
codenarcprocessTaglib grails-apptaglib
true
codenarcprocessTestUnit testunit true
codenarcprocessTestIntegration testintegration true
codenarcprocessViews grails-appviews
false
codenarcextraIncludeDirs 任意のディレクトリ
mdash
-
codenarcextraIncludeDirs プロパティで任意のディレクトリを対象にした場合リスト形式で指定します例えばgrails-appjobs ディレクトリを指定したい場合次のように指定します
codenarcextraIncludeDirs=[grails-appjobs]
CodeNarc のルールのプロパティCodeNarc の各ルールはいくつかプロパティを持っており
BuildConfiggroovy 中に codenarcproperties プロパティを記述してルールのプロパティ値を変更することができます
形式は次のとおりです
ルール名プロパティ名 = プロパティ値
例えばドメインクラスが equals メソッドtoString メソッドを持つことを示すルールGrailsDomainHasEquals ルールとGrailsDomainHasToString ルールを無効にしたい場合は次のように指定します
codenarcproperties =
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
またCodeNarc のルールのプロパティを別ファイルですでに持っている場合そのファイルパスを BuildConfiggroovy 中のcodenarcpropertiesFile プロパティに記述することで同等のことを実現できます
先程の例は次と同等です
grails-appconfBuildConfiggroovy
codenarcpropertiesFile = grails-appconf
codenarcproperties
grails-appconfcodenarcproperties
GrailsDomainHasEqualsenabled = false
GrailsDomainHasToStringenabled = false
ルール違反数の上限CodeNarc のルールにはプライオリティが設定されておりプ
ライオリティ毎に違反数の上限を設定することができますデフォルトはIntegerMAX_VALUE です上限を越えた場合次のメッセージが標準出力に出力され静的コード分析が失敗となりますただし静的コード分析は最後まで実行されレポートファイルも出力されるようです
FAILED -- Exceeded maximum number of priority 2
violations (p1=0 p2=11 p3=3)
違反数の上限を設定する場合BuildConfiggroovy に次のように設定します
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
18 18
プライオリティ1の違反数の上限codenarcmaxPriority1Violations=10
プライオリティ2の違反数の上限codenarcmaxPriority2Violations=20
プライオリティ3の違反数の上限codenarcmaxPriority3Violations=30
ルール違反数の上限超過時の動作ルール違反数の上限を超過した場合デフォルトでは先程の
失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますこの動作を変更し例外をスローして終了することもできます
BuildConfiggroovy で codenarcsystemExitOnBuildException プロパティを指定することで動作を変更することができますプロパティ値として true を指定した場合デフォルトの動作と同様失敗メッセージを標準出力に出力しSystemexit(1) を呼び出して終了しますプロパティ値として false を指定した場合例外をスローして終了します
codenarcsystemExitOnBuildException = false
おわりに今回は静的コード分析を行うプラグインをご紹介いたしまし
たGroovy コードの静的コード分析ツールとして定評のあるCodeNarc を使用していますので一度お試ししてはいかがでしょうか
Grails Plugin 探訪 第 9 回 ~ CodeNarc プラグイン ~
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
19
リリース情報 20141129GrailsGrails はGroovy や Hibernate などをベースとしたフルスタックの Web アプリケーションフレームワークですURL httpgrailsorgバージョン 139 215 225 2311244更新情報
bull 225 ではユーザガイドの withFormat セクションにformmime-type についての記述が追加されたりいくつかバグ対応が行われています
bull 225 リリースノート httpsgrailsorg225+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201403041393946239bull 2311 ではいくつかバグ対応が行われていますbull 2311 リリースノート httpsgrails
org2311+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201406261403777424bull 244 ではDirtiesRuntime アノテーションが追加されたり
ユニットテストでの forwardedUrl の値が変更になったりいくつかバグ対応が行われています
bull 244 リリースノート httpsgrailsorg244+Release+Notesbull 山本さんのブログ httpdhatenanejp
mottsnite201410281414514707
GroovyGroovy はJavaVM 上で動作する動的言語ですURL httpgroovycodehausorgバージョン 189 208 219 222 238 240-beta-4更新情報
bull 222 ではDelegate を使用した際スタックトレースに行番号が出力されるようになったり いくつかバグ対応が行われています
bull 222 リリースノート httpsjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=19832
bull 238 ではBigIntegerpower(Biginteger) メソッドが追加されたり いくつかバグ対応が行われています
bull 238 リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20648
bull 240-beta-4 ではJSON ビルダーの実装が書きなおされたりtrait 用に SelfType アノテーションが追加されたりいくつかバグ対応が行われています
bull 240-beta-4リリースノート httpjiracodehausorgsecureReleaseNotejspaprojectId=10242ampversion=20612
GriffonGriffon はデスクトップアプリケーションを開発するためのアプリケーションフレームワークですURL 1x httpgriffoncodehausorg] 2x [httpnewgriffon-frameworkorgindexhtmlバージョン 150 200更新情報
bull 150 ではGroovy のバージョンが 221 にSpring のライブラリのバージョンが 327 にそれぞれ変更されています
bull 150 リリースノート httpdocscodehausorgdisplayGRIFFONGriffon+150
bull 200 では依存するプラグインが最新のバージョンにアップグレードされています
bull 200 リリースノート httpnewgriffon-frameworkorgnewsgriffon_200html
GantGant はXML の代わりに Groovy で Ant タスクを記述し実行するビルド管理ツールですURL httpgantcodehausorgバージョン 1911更新情報
bull 1911 での更新内容は不明です
GMavenGMaven はMaven 用の Groovy プラグインですURL 1x httpgmavencodehausorg] 2x [httpgroovygithubiogmavenバージョン 14 20
GradleGradle はGroovy でビルドスクリプトを記述し実行するビルド管理ツールですURL httpwwwgradleorgバージョン 221更新情報
bull 221 ではOS X と Java 7 の組み合わせでオフライン時にGradle デーモンが起動しない問題に対応しました
bull 221 リリースノート httpwwwgradleorgdocs221release-notes
GaelykGaelyk はGroovy で記述する Google App Engine for Java 用のライトウェイトなフレームワークですURL httpgaelykappspotcomバージョン 212更新情報
bull 212 ではGroovy 23 に対応しいくつかバグ対応が行われています
bull 212 リリースノート httpgaelykappspotcomdownload
Google App Engine SDK for JavaGoogle App Engine SDK for Java はJava で Google App Engine用の Web アプリケーションを開発するための SDK ですURL httpscloudgooglecomappengineバージョン 1915更新情報
bull 1915 ではDatastore の統計情報にエンティティのカウントが表示されないバグ対応が行われています
bull 1915 リリースノート httpscodegooglecompgoogleappenginewikiSdkForJavaReleaseNotes
GParsGPars はGroovy に直感的で安全な並行処理を提供するシステムですURL httpgparscodehausorgバージョン 121GA更新情報
bull 121GA での更新内容は不明です
Groovy++Groovy++ はGroovy 言語に対して静的な機能を拡張しますURL httpcodegooglecompgroovypptestバージョン 090
リリース情報
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
20
SpockSpock はJava や Groovy 用のテストと仕様のためのフレームワークですURL httpcodegooglecompspockバージョン 07
GroovyServGroovyServ はGroovy 処理系をサーバとして動作させることでgroovy コマンドの起動を見た目上高速化するものですURL httpkobogithubcomgroovyservバージョン 100更新情報
bull 100 ではログファイルや authtoken ファイルのパスをGROOVYSERV_WORK_DIR や GROOVYSERV_LOG_DIR 環境変数で明示することができたりパッケージ名が変更になったりバグ対応が行われています
bull 100 チェンジログ httpkobogithubiogroovyservchangeloghtml
GebGeb はGroovy を使用した Web ブラウザを自動化する仕組みですURL httpwwwgebishorgバージョン 0100更新情報
bull 0100 では要素の CSS プロパティにアクセスするためにNavigator に css() が追加されたりいくつかバグ対応が行われています
bull 0100 リリースノート httpwwwgebishorgmanualcurrentprojecthtml0100
EasybEasyb は ビ ヘ イ ビ ア 駆 動 開 発 (Behavior Driven DevelopmentBDD) 用のフレームワークですURL httpwwweasyborgバージョン 15
GmockGmock はGroovy 用のモックフレームワークです URL httpcodegooglecompgmockバージョン 083
HTTPBuilderHTTPBuilder はHTTP ベースのリソースに簡単にアクセスするための方法ですURL httpgroovycodehausorgmoduleshttp-builderバージョン 072更新情報
bull 072 での更新内容は不明です
CodeNarcCodeNarc はGroovy 向けの静的コード解析ツールですURL httpcodenarcsourceforgenetバージョン 022更新情報
bull 022 では新しく 4 つのルールや IDE のテキストレポートタ
イプが追加されいくつかバグ対応が行われていますbull 022 リリースアナウンス httpgroovy329449n5nabble
comANN-Announcing-CodeNarc-0-22-td5721472html
GMetricsGMetrics はGroovy ソースコードのサイズや複雑さを計算したり報告するためのツールですURL httpgmetricssourceforgenetバージョン 06
GContractsGContracts はGroovy で契約プログラミングを行うためのフレームワークですURL httpgcontractsorgバージョン 1212
GroovyFXGroovyFX はJavaFX を Groovy で書きやすくするためのフレームワークですURL httpgroovyfxorgバージョン 040更新情報
bull 040 ではビルダーに catch-all ビーンノードが追加されたりTableView や ComboBox のバグ対応が行われています
bull 040 リリースノート httpjiracodehausorgbrowseGFXfixforversion19127
GBenchGBench はGroovy のためのベンチマークフレームワークですURL httpcodegooglecompgbenchバージョン 042更新情報
bull 042 では新しいシステムプロパティをサポートしたりいくつかバグ対応が行われています
bull 042 リリースノート httpscodegooglecompgbenchwikiReleaseNotes042
BetamaxBetamax はHTTP 通信の内容を保存し再生するテストツールですURL httpfreesidecobetamaxバージョン 112
CaelyfCaelyf はGroovy で記述する Cloud Foundry 用のライトウェイトなツールキットですURL httpcaelyfnetバージョン 131更新情報
bull 131 ではGroovy 237Gradle 21 に対応しGPars 121を同梱しました
bull 131 リリースメッセージ httpsgroupsgooglecomforummsgcaelyfUW3XNI-jdjoOwNxJCU9-sEJ
VertxVertx は非同期アプリケーション開発のためのフレームワーク
リリース情報
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
GMagazine vol8
21
ですURL httpvertxioバージョン 215更新情報
bull 215 ではGroovy 言語モジュールが 211 にアップグレードされたりSSLv2Hello プロトコルがサポートされたりいくつかバグ対応が行われています
bull 215 リリースメッセージ httpsgroupsgooglecomforumtopicvertxx7Dlhkc8tuA
GVM (Groovy enVironment Manager)GVM は様々な Groovy 関連のツールをインストールし複数のバージョンを切り替えて使用するためのツールですURL httpgvmtoolnetバージョン -
GaidenGaiden はMarkdown でドキュメントを作成するするためのツールですURL httpsgithubcomkobogaidenバージョン 10
ぐるーびーたん 第 6 話までのあらすじプログラマを目指して熊本から上京したぐるーびー
たんその若さ故色々飛びつくのは良いこと この作品はたいがいフィクションです実在の
人物団体とは関係ありません
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-
企業スポンサー
個人サポータ制度のお知らせ JGGUG では 昨年に引き続き 2015 年度も個人サポータを募集いたします
個人サポータとなっていただいた方には 一年間にわたって JGGUG が発行する G Magazine(年数回刊基本的に電子版として配布予定)に個人サポータとしてお名前を掲載します(掲載を希望しない旨お申し出いただけば掲載しません)
個人サポータとなるにはまず supportersjggugorg にメイルでbull お名前bull 予定金額G Magazine へのご芳名掲載の可否をお知らせください追って運営委員より振込先の情報などを返信します皆様のサポートをお待ちしております
日本 GrailsGroovy ユーザーグループ代表 山田 正樹
発行人日本 GrailsGroovy ユーザーグループ編集長川原正隆編集G Magazine 編集委員(杉浦孝博奥清隆)デザインニューキャスト表紙川原正隆編集協力JGGUG 運営委員会Mailinfojggugorg
G Magazine vol8 20152httpwwwjggugorg
PublisherJapan GrailsGroovy User GroupEditor in ChiefMasataka KawaharaEditorsG Magazine Editors Team (Takahiro Sugiura Kiyotaka Oku)DesignNEWCAST incCoverDesignMasataka KawaharaCooperationJGGUG Steering CommitteeMailinfojggugorg
copy 2015 JGGUG 掲載記事の再利用については Creative Commons ライセンスによります
- 表紙
- 目次
- Groovy 臨機応変(第三回)〜Groovy 23 の新機能
- Groovy 臨機応変(第四回)〜Groovy 24 の新機能〜
- Gradle Plugin 探訪~第1 回 Gradle SSH Plugin ~
- Grails Plugin 探訪〜第9回 CodeNarc plugin 〜
- リリース情報
- ぐるーびーたん
-