2021年10月15日金曜日

Ruby guard 超入門

Ruby guard 超入門

概要

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 件のコメント:

コメントを投稿