テスト駆動開発には、保存時にテストを自動で実行するということがマストだと思います。また、ちょろっとスクリプト書いた時も、保存時に自動実行してくれたら捗るなぁと思いませんか?
そんなときに、watchdog(watchmedo)です!!
(各種のOSには、監視用APIコマンドが用意されていますが、マルチOSで同じ手順にしたいという方におすすめです。)
追記:2016/11/07
掲載しているコマンドは、Git for Windowsに付いてくる、MINGW32のターミナルでテストしていたのですが、コマンドプロンプトだと動かないと連絡がありました。おそらく、shellが動かないのが原因かと思います。(調べてないです。すみません。)
追記:2016-12-14
なぜか家のPCだけ、2重実行されていたのでオプションコマンドを見直しました。--waitではだめで、-Wのオプションが2重実行防止用でした。また、更新イベントだけに絞るようにした[ "${watch_event_type}" == "modified" ] && echo hoge
の記述も要らないようなので、記事から消しました。
install
LinuxMintやMacなど、開発しやすいOSを使っている方は、瞬殺なので下記を見て、雰囲気インストールしてください。Windowsは基本ハマるので、Windowsユーザ向けに書きます。
python install
Pythonが必要なので、ダウンロードします。
2系、3系どちらでも良いですが、32bit or 64bitに注意です。
トップページにあるダウンロードだと32bitが落ちてくるので、64bitの方は、こちらのダウンロード一覧から落としましょう。
install時のフォルダに注意!!
install時のフォルダですが、必ずCドライブ直下に保存してください。デフォルトのC:\Program Files (x86)
だと、path解決か何かで問題が出て、まともに動作しません。。。
# ここにインストールしました
C:\python35-64
pip install watchdog
pythonには、モジュール管理ソフトで「pip」というものが同梱されているので、そちらを使ってインストールします。
-
コマンドプロンプトMINGW32 を起動します。 python -m pip install --upgrade pip --force-reinstall
pip install watchdog
2番目の手順は、pipのアップグレードなのでスキップしても大丈夫です。
使い方
watchmedo shell-command -W --recursive --pattern '*.php;*.txt' --command 'echo test' 監視フォルダ(指定しないとカレントディレクトリ)
- shell-command: シェルコマンド実行時に指定。他にもlogとかあります。
- W: 大文字でW。コマンドが実行されている間に発生したイベントは無視する(同時発生イベント無視設定)
- recursive: 再帰的に指定フォルダ配下を見に行く
- pattern: 監視するファイルを設定(上記では、拡張子がphpとtxtのもの)
- command: 実行するコマンド。
上記の例では、更新イベントだけに絞ってechoしています。(windowsでvim使うと、保存と同時に3つイベントが飛びました。。。Netbeansも2つ飛びました。。。)
PHPUnitを動かす場合
cd 監視対象のフォルダ
watchmedo shell-command -W --recursive --pattern '*.php' --command 'プロジェクトフルパス/vendor/bin/phpunit フルパス/tests/'
プロジェクトフォルダに移動後なら、監視対象のフォルダ指定が省けるのと、phpunitで色が付きます。(逆になぜ監視対象フォルダを指定すると色が付かないのでしょうね?)
後記
インストールがちょい面倒ですが、快適なコーディングライフをエンジョイしてください。