ファイルの変更を監視して,何か(スクリプトの実行等)する
- 特定のファイルやディレクトリを監視して,変更等を監視して何かアクションを起こしたいということがたまにある
- rspec のテストを記述している時は,ZenTest gem を使うことで,spec ディレクトリ以下の変更を検出して,勝手にテストを走らせ直すとかが可能
- 今回やりたかったのは,TeX ファイルを保存したら,tex -> dvi -> pdf に変換するスクリプト(既にある)を走らせたい
- ZenTest を使うと簡単にできるかなと思ったけど,ぐぐってもあまり例が見当たらなかった
- inotify や Kqueue を使うと,ファイルやディレクトリの変更を検出することができるようである
- (ログを流し見る時に使う 'tail -f' の inotify を使ったものが 'tailf' だったような)
- ruby で使えるライブラリは,'rb-inotify', 'rb-kqueue'
- ruby で利用例を書いてみた
$ ruby kqueue.rb /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/ffi-1.1.5/lib/ffi/library.rb:150:in `ffi_libraries': no library specified (LoadError) from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/ffi-1.1.5/lib/ffi/library.rb:228:in `attach_function' from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:34:in `<module:Native>' from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:9:in `<module:KQueue>' from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:3:in `<top (required)>' from /Users/inohiro/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' from /Users/inohiro/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require' from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue.rb:1:in `<top (required)>' from <internal:lib/rubygems/custom_require>:33:in `require' from <internal:lib/rubygems/custom_require>:33:in `rescue in require' from <internal:lib/rubygems/custom_require>:29:in `require' from kqueue.rb:1:in `<main>'
追記: guard というのがあるらしい
- guard というライブラリを教えてもらった.後日取り組む