Grailsのアプリ起動完了やテストの結果をGrowlで通知するEvents.groovyが便利な件

[2013/04/18追記]
Mountain Lion以降で通知センターを使う場合は grails-notifierなるものを作りました - PiyoPiyoDucky を参照のこと。

Grailsスクリプトのイベントフックとは

Grailsではアプリ起動とかテスト実行などをGantスクリプトとして提供しています。で、そのスクリプトではイベントフックの手段が提供されていて、特定のイベントの発生時に介入して独自の追加処理をさせたりすることができます。例えば、

  • コンパイルの完了
  • テストの起動
  • サーバの起動

などのタイミングで独自ファイル処理を入れたり、通知をしたりできるわけです。

フックスクリプトはもちろんGroovyで書きます。$HOME/.grails/scripts/_Events.groovy というパスで保存すればOKです。特定のGrailsプロジェクトでだけフックしたい場合は$PROJECT_HOME/scripts配下にもおけます。書き方などは参考情報のURLを参照してください。

Grailsのドキュメントを読むとファイル名は_Events.groovyが公式のようですが、ソースを読んだら"Events.groovy"でもOKでした。両方のファイルが存在する場合はアンスコ付きが優先です。

つくったもの

Macユーザで通知といえばGrowl。というわけで、Grailsのアプリ起動完了時やテスト失敗時、テスト全件終了時にGrowlで通知するEvents.groovyを書いてみました。

アイデア自体は、Grails徹底入門のコラムにあるので目新しいものじゃないのですが、

  • テスト全件終了時に失敗した件数を表示する
  • テスト全件終了時にGrowl通知をクリックすると、ブラウザでテストレポートを表示する
  • Grailsアプリ起動時にGrowl通知をクリックすると、ブラウザでアプリのURLにアクセスする
    • ファイルを開く処理については、クリック待ちの間、Grailsスクリプトが終わらずにプロンプトに戻らない、という事象を避けるためラッパとなるシェルスクリプトを使って対処してます。

などといった感じで実用性を考慮して色々チューニングしてあります。

これからもまだまだ手を入れていく予定ですが、ひとまずそれなりに使えるようになったのでこちらで紹介しておきます。

実際の開発で使っていますが、中々快適です。

必要なもの

  • もちろんMac
  • Growl
    • ちなみに自分はGrowl1.3の追加スタイルであるBlack Glassを使ってます。
  • growlnotify (GrowlのサイトからDLしてインストールできます)
    • /usr/local/bin/growlnotify というパスにあることを前提としています。別のパスにインストールした場合はgrowlAndOpen.shを書き換えてください。
  • Grails
    • Grailsのインストールパスに環境変数GRAILS_HOMEを設定しておくとアイコンが素敵な感じになります。

使い方

https://gist.github.com/2841103 に公開してある

の2つのファイルを$HOME/.grails/scripts/配下に保存します。

お手元のGrailsプロジェクトで起動やテスト実行をすると...

  • Grailsアプリの起動に成功したとき

    • クリックするとブラウザでアプリのURLにアクセスします。
  • すべてのテストがパスしたとき

    • クリックするとHTMLのテストレポートがブラウザで開きます。
  • 1件のテストに失敗したとき


    • クリックするとHTMLのテストレポートがブラウザで開きます。
    • 失敗したテストケースごとに独立して通知が並んだ後に、最後にまとめの通知が流れます。大量のテストが失敗したときは精神的ダメージが大きめです。


といった感じで素敵にGrowlが通知してくれます。

なおこれらのスクリプトの実行によって何らかの不具合が生じても責任は負いかねますのでそこは一つ自己責任でお願いします。

参考情報

Grails徹底入門

Grails徹底入門

  • 作者: 山田正樹,山本剛,上原潤二,永井昌子,杉山清美,杉浦孝博,笠原史郎,香月孝太,福岡竜一,伊堂寺北斗
  • 出版社/メーカー: 翔泳社
  • 発売日: 2008/08/26
  • メディア: 大型本
  • 購入: 3人 クリック: 42回
  • この商品を含むブログ (28件) を見る
プログラミングGROOVY

プログラミングGROOVY