PHPだけでコードやテストを保存したら自動でテストを実行しGrowlへ通知する環境

f:id:shishi4htn:20150601233547p:plain

はじめに言っておきますが、これはリスペクトです。

コードやテストを保存したら自動でPHPUnitを実行しGrowlへ通知する環境 | Act as Professional - プロとしての行為

パクリではありません。
パクリではありません。
大事なことなので2回言いました。

上記 HIROCAST さんのブログを昨日拝見し、これはあのツールのブログを書く時が来たと思いました。

そのツールとは
Stagehand_TestRunner - テスト駆動開発のためのテストランナー - Piece Framework
です

Stagehand_TestRunner は、PHPスティングフレームワークの実行を強力にサポートするツールです。対応フレームワークは、PHPUnit はもちろんのこと、CIUnit, SimpleTest, CakePHP, PHPT, PHPSpec と、ほとんど全てと言えるぐらいです。

Stagehand_TestRunnerは多くの特徴がありますが、その中でも私が感動したのは以下の特徴です。

  • 指定されたディレクトリに含まれるテストの実行
  • 指定されたファイルに含まれるテストの実行
  • 指定されたファイルの指定されたテストのみの実行
  • 指定されたクラスのテストのみの実行
  • 指定された PHP スクリプトのテスト実行前のプリロード
  • 指定されたディレクトリの変更の監視および変更検出時のテストの実行
  • Growl へのテスト結果の通知
  • 詳細な進捗リポートの出力
  • 最初の失敗またはエラーの際の停止
  • ストファイルのパターンの指定
  • PHPUnit, CIUnit, SimpleTest, CakePHP, PHPT, PHPSpec のサポート

これらに加え、プリロードスクリプトが存在します。プリロードスクリプトにより、PHPUnit のようにメソッドXML で柔軟な事前設定が設定できないものでも事前調整を可能にします。

さらっと並べましたが、どれも日々「こんなことができたら」と思っていた機能ではないでしょうか。
つまり、ユーザーガイドにあげられているほとんどの機能が感動させてくれると言うことです!本当に便利すぎてやばいですよ。

ではさらっとインストール方法と使い方を。
phpunit, simpletest, CIUnit など、テスティングフレームワークのインストールはしているものとします。

pear channel-discover pear.piece-framework.com
pear install piece/stagehand_testrunner


なお、Growl 通知を行うライブラリである Net_Growl については、現在 2.3.0 がリリースされておりますが、0.7.0 をインストールする必要があります。以下のようにしてインストールできます。

pear install Net/Growl-0.7.0

*現在修正作業に入られていると聞いていますので、すぐに最新バージョンでも使えるようになると思われます。

2011/7/9に修正され、Net_Growl 2.3.0 においても問題なく動作するようになりました。
なので、Growl 通知を行いたい方は先のインストール箇所で

pear channel-discover pear.piece-framework.com
pear install --alldeps piece/stagehand_testrunner

か、もしくは

pear install Net/Growl

として個別にインストールします。

そしておもむろにテストを実行します。PHPUnit の場合は

phpunitrunner -cvg StackTest.php

のように実行すると、以下のようになり、Growlにも通知されます。
もし、通知されない場合は、'--growl-passward=[passward]' オプションでパスワードをダミーでも設定するとうまく動作するかもしれません。

f:id:shishi4htn:20150601233826p:plain

変更を監視させるには以下のように実行します。

phpunitrunner -cvag ./

オプションに 'ーa' を追加し、テストファイルではなく、フォルダを指定します。なお、このフォルダはいくつでも指定可能ですし、'-R' オプションにより、再帰的に指定することも可能です。

監視インターバルは最長5秒として自動調整されるのですが、最長時間を直接書き換えることにより、監視インターバルを短くして短時間で監視させることも可能です。なお、その値は 'Stagehand/AlterationMonitor.php' にある 'SCAN_INTERVAL_MIN' です。

いかがでしょうか。手動で実行しているのがものすごくめんどくさく感じてもらえれば幸いです。楽にテストをして良いモノを作りましょう!

ちなみに、この Stagehand_TestRunner は、多くの方がお世話になっているであろう
Net_UserAgent_Mobile
の作者、久保さんによるものです。

TDDやDDDに造詣の深い方で、お会いするとその考えにいつも驚かされます。そんな久保さんが現在注力されているのが
MakeGood - Eclipse PDT のための継続的テストランナー - Piece Framework
です。

私は長く NetBeans を愛用している NetBeans 信者でありますが、あまりに強力に TDD をサポートしてくれる MakeGood のために Eclipse に乗り換えようかと、色々 Eclipse をいじり始めたぐらいです。
なお、最近は、もう移れそうなくらいEclipseの環境を整えることが出来てしまいました。さらば NetBeans 、今までありがとうの日も近いかもしれません。

今週土曜には TDDBC 東京が開催され、私は PHPUnit のサポート役としても参加することになっています。MakeGood や Stagehand_TestRunner の宣伝もバッチリして、快適なテストライフをより多くの皆さんにしてもらうべく頑張ります。