darudaru

だるだるしてるエンジニア

gulpでPHPUnitを自動実行させる

普段、vimを使ってPHPで開発をしているのですが、開発中はgulpを使ってPHPUnitを自動実行させています。そのテストコード実行環境をご紹介。

gulpについては前にこちらの記事でまとめてますのでご参考までに。 blog.darudaru-life.com

準備

gulpと、PHPUnitを実行させるために使うプラグインをインストールします。使うプラグインはこれ。

  • gulp-phpunit
    PHPUnitを簡単に操作できるプラグイン
  • gulp-notify
    デスクトップ通知をすることができるプラグイン。PHPUnitの成功、失敗を通知させるために使います。

インストールの仕方は、プロジェクトのルートディレクトリに移動してnpmのコマンドを実行してください。書いてないですが、インストール後に作られるnode_modulesディレクトリは.gitignoreファイルに追加してgit管理対象外にしてます。

$ npm init
$ npm install --save-dev gulp
$ npm install --save-dev gulp-phpunit
$ npm install --save-dev gulp-notify

インストールが終わったら、gulpfiles.jsを作っておきます。

$ touch gulpfile.js

gulpのタスクを作成

gulpのタスクで実現させてるのはこれ。

  • ファイルが保存されたらPHPUnitを実行させる
  • 成功、失敗はデスクトップ通知させる
    こうすることで、画面いっぱいにvimを開いて開発しつつ、裏でPHPUnitを実行させてテストコード失敗を素早く検知できる

ではgulpfile.jsにタスクを書いていきます。

gulpfile.js

var gulp = require('gulp');
var phpunit = require('gulp-phpunit');
var notify = require('gulp-notify');

// ファイル監視
gulp.task('watch', function(){
    gulp.watch('./**/*.php', ['phpunit']);
});

// phpunit実行
gulp.task('phpunit', function(){
    var options = {debug: false, notify: false};
    gulp.src('')
        .pipe(phpunit('./vendor/bin/phpunit', options))
        .on('error', notify.onError({
            title: 'Tests Failed',
            message: '\n\nOne or more tests failed...\n\n',
            icon:    __dirname + '/node_modules/gulp-phpunit/assets/test-fail.png'
        }))
        .pipe(notify({
            title: 'Tests Passed',
            message: '\n\nAll tests have passed!\n\n',
            icon:    __dirname + '/node_modules/gulp-phpunit/assets/test-pass.png'
        }));
});

タスクを書くときのポイントは以下です。

  • gulp-phpunitのオプションでnotify:falseを指定する
    gulp-notifyで通知させるようにしているが、gulp-phpunitにはデフォルトで通知する処理が入っているため、通知をオフにしておかないと二重で通知されることになる。
    ちなみにgulp-phpunitのデフォルトの通知は、失敗時は作動しない。
  • gulp-phpunitは./vendor/bin/phpunitのように、PHPUnitをパス指定で実行させることもできる。同様に、例えばfuelのoilを使ったユニットテストコードも、gulp-phpunitにphp oil testのコマンドを渡して実行させることができる。

PHPUnitの自動実行を開始する

今回PHPUnitの自動実行のタスクは、watchというタスクで作りました。以下のコマンドで、watchのタスクを起動させておきます。

$ gulp watch

あとは、vimで開発するだけ。ファイルを保存したタイミングで、gulpがPHPUnitを実行させて、結果を通知してくれます。

f:id:skanoemon:20180305212942g:plain

PHPUnitの実行結果は、gulp watchのコマンドの出力結果で確認可能です。

f:id:skanoemon:20180305214328p:plain

とっても便利。

まとめ

gulpはPHPerにも使える。