Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2...

23
Japan Grails/Groovy User Group Magazine vol.8

Transcript of Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2...

Page 1: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 2: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 3: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 4: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 5: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 6: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 7: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 8: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 9: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 10: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 11: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 12: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 13: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 14: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 15: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 16: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 17: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 18: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 19: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 20: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 21: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 22: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

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 〜
  • リリース情報
  • ぐるーびーたん
Page 23: Magazine - Grails.jpgrails.jp/g_mag_jp/file/gmagazine_8.pdf · 2017-02-19 · 8 2 Groovy臨機応変(第三回)〜Groovy 2.3の新機能 〜 今回は、Groovy 2.3の新機能をピックアップして紹介します。

企業スポンサー

個人サポータ制度のお知らせ 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 〜
  • リリース情報
  • ぐるーびーたん