概要
guard は特定のファイルに変更があった場合に任意のコマンドやタスクを実行することができるツールです
よく rspec と一緒に紹介されていますが決して rspec が必須というわけではなく実行しているコマンド (プラグイン) が guard-rspec と呼ばれるプラグインを使用しているだけです
このように guard は好きなプラグインと組み合わせてファイルの監視ルールを設定します
今回は guard-shell というファイルが変更されたらシェルコマンドを実行するプラグインを使って適当なコマンドを実行してみました
環境
- macOS 11.6
- Ruby 3.0.2p107
- guard 2.18.0
準備
- bundle init
- vim Gemfile
gem "guard"
gem "guard-shell"
- bundle install
監視ルールの作成
監視ルールと実行するタスクは Guardfile と呼ばれる DSL ファイルに定義します
- bundle exec guard init
これで作成できます
今回は txt ファイルを監視して ls コマンドで変更されたファイルの詳細を表示する監視ルールを作成します
- vim Guardfile
guard :shell do
watch /(.*\.txt)/ do |m|
n m[0], 'Changed'
`ls -l #{m[0]}`
end
end
guard の後ろの「:shell」はプラグイン名を指定します
この部分がよく :rspec であるのは rspec プラグインをインストールしてテストファイルが更新されたら自動でテストが流れるようにするようなルールがよく使われているからです
動作確認
では監視プロセスを実行して挙動を確認してみましょう
- bundle exec guard start
これで実行できます
今回は標準出力に表示するのでインタラクティブモードで実行しますがインタラクティブモードが嫌な場合は
- bundle exec guard start -i
で実行しましょう
あとはファイル更新すると以下のように ls の情報が出力されるのが確認できると思います
% echo 'aaa' > hoge.txt
09:33:57 - INFO - Guard is now watching at '/path/to/dir'
[1] guard(main)>
-rw-r--r-- 1 hawksnowlog staff 4 9 29 09:33 hoge.txt
最後に
あくまでも開発中のツールとして使う感じかなと思います
(プロダクションのファイル監視デーモンプロセスとして使えなくもなさそうですが)
Rubygems で「guard-」と検索するといろいろとプラグインが表示されるので実行したいコマンドやタスクに合わせて既存のプラグインを見つけましょう
0 件のコメント:
コメントを投稿