【Ruby】タスクランナーGuardを触ってみる

2017年11月12日Mac,Ruby

こんにちは、しきゆらです。

今回はタスクランナーの一つであるGuardと言うものを触ってみます。

 

最近、gulpというものを知りました。

というか、名前は聞いたことがあるけど何をするためのものか知りませんでした。

 

特定のタイミングで何らかの処理をさせるタスクランナーと言うものに触れるきっかけとなりました。

インターンシップ先ではJenkinsと言うものを使っているようでしたが、実際にそれを見たわけではないのでよくわかりません。

 

その点、gulpというものはJSでタスクを設定することが出来るということで便利そうだな、という感じ。

でも、どうせならRubyさんで書けるものはないのかと思い調べてみたら見つけました。

Guardと言うものです。

どうも最近は、上記のgulpがメインとなっているようですが、今回はGuardを触っていきます。

 

以下のサイトを参考に、触っていきます。

参考
rubyのGuardとRSpecをRailsを使わない環境でつかう | 大石制作ブログ
Ruby | Guard gem を利用してファイルの変更を検出し、任意のタスクを自動実行する – Qiita

 


 

まずはじめに

初めてなので、グローバルにgemを入れるのはちょっと・・・。

ということで、Bundlerを使ってそのプロジェクト内でのみ使えるようにします。

というか、Bundler自体ももう少し触りたいなぁと言うのが本音。

※bundlerはグローバルに入っている前提で進めます。

Gemfileには、以下のように書いておきます。

gem "guard"
gem "guard-rspec"
gem "rspec"
gem "guard-shell"

インストールしましょう。

bundle install --path vender/bundle

ファイル構成はこんな感じ。

 guard_test/
 └── vender/bundle

 

テストの環境構築

タスクランナーといえば、テストの自動化でしょう。(偏見)

ということで、Rspecの準備です。

bundle exec rspec --init

Bundlerでいれたgemを実行したい場合は、「bundle exec」をつけてあげるといいっぽい。

すると、「.rspec」と「/spec」が出来るはず。

現在の構造はこんな感じ。

  guard_test/
  ├── .rspec (new)
  ├── spec/ (new)
  │   └── spec_helper.rb (new)
  └── vender/bundle

なお、Rspecに関しては書き方などよくわかっていないので何もできません。

 

タスクの準備

ようやく出てきました。

Guardの準備です。

bundle exec guard init

こうすると、Guardfileという設定ファイルが出てきます。

 guard_test/
  ├── Guardfile (new)
  ├── .rspec
  ├── spec/ 
  │   └── spec_helper.rb 
  └── vender/bundle

 

initしてできたGuardfileにはあれこれ書いていますが、それらを無視して以下を書き込みます。

# guard-rspecプラグインを使用し、条件にあうファイルを監視し、rspecコマンドを実行する
guard "rspec", cmd: "bundle exec rspec" do
  # rubyファイルを監視
  watch(%r((.*?).rb)) { |file|
    # specディレクトリ内の対応したファイルを返す
    "spec/#{file[1]}_spec.rb"
  }
end

これは、Guardfileと同じ階層にあるrbファイルを監視し、spec/以下にあるファイルを実行する、と言うもの。

 

では、実行するためのファイルを作ります。

 guard_test/
 ├── Guardfile 
 ├── code.rb (new) 
 ├── spec/ (new)
 │   └── spec_helper.rb  
 │   └── code_spec.rb (new)
 └── vender/bundle

code.rbというファイルが実行したいプログラムが書いてあるもの。

テストはcode_spec.rbとしておきます。

 

あとは、code.rbを書き換えるだけ。

自動でcode_spec.rbを実行しテストしてくれます。

調べてみると、テスト以外にも使えるようです。

スクリプトをかければ、なんでもできそうですね。

ファイルの変更を監視し、サーバへアップするなど、細々とした面倒なことを、特定のタイミングで自動的に処理できそうです。

 

本当に、知らないけど便利なものっていっぱいありますね。

もっと知りたいです。

 

今回はこのへんで。

おわり。

Posted by しきゆら