5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby | Guard gem を利用してファイルの変更を検出し、rubocopを自動実行する

Last updated at Posted at 2014-07-18

Ruby | Guard gem を利用してファイルの変更を検出し、rubocopを自動実行する

概要

Guard gem を利用してファイルの変更を検出し、rubocopを自動実行します

前提

  • guard gem はインストール済みとします。
  • rubocop gem はインストール済みとします。

guard-rubocop gem のインストール

$ gem install guard-rubocop --no-ri --no-doc

設定ファイル(Guardfile)の生成

RuboCop 対応のひな形を生成します。

$ guard init rubocop

下記のようなテンプレートが生成されます

Guardfile
# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard :rubocop do
  watch(%r{.+\.rb$})
  watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end

guardを起動します

$ guard start

プログラムのひな型を生成します

自作 gem の rspec_piccolo を利用します。
rspec_piccoloはプロダクトコードとテストコードのひな形を生成する CLI ツールです。

詳しくは
https://github.com/tbpgr/rspec_piccolo
を参照。

$ piccolo e Hoge hoge hoge -p

これで、以下のファイルが生成されます。

lib/hoge.rb
# encoding: utf-8


class Hoge
  def hoge
    # TODO: implement your code
  end
end
spec/hoge_spec.rb
# encoding: utf-8
require "spec_helper"
require "hoge"

describe Hoge do

  context :hoge do
    cases = [
      {
        case_no: 1,
        case_title: "case_title",
        expected: "expected",
      },
    ]

    cases.each do |c|
      it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
        begin
          case_before c

          # -- given --
          hoge = Hoge.new

          # -- when --
          # TODO: implement execute code
          # actual = hoge.hoge

          # -- then --
          # TODO: implement assertion code
          # expect(actual).to eq(c[:expected])
        ensure
          case_after c
        end
      end

      def case_before(c)
        # implement each case before
      end

      def case_after(c)
        # implement each case after
      end
    end
  end
end

自動生成されたファイルを検知して、 guard が実行されます

rspec_piccolo を作成した当初は RuboCop 対応を加味していなかったため、
複数の警告が発生しています。

[1] guard(main)>
23:07:23 - INFO - Inspecting Ruby code style: lib/hoge.rb spec/hoge_spec.rb
Inspecting 2 files
CW

Offenses:

lib/hoge.rb:3:1: C: Extra blank line detected.

# :
# 中略
# :

spec/hoge_spec.rb:40:22: W: Unused method argument - c. If it's necessary, use _ or _c as an argument name to indicate that it won't be used. You can also write as case_after(*) if you want the method to accept any arguments but don't care about them.
      def case_after(c)
                     ^

2 files inspected, 12 offenses detected

RuboCopの設定ファイルを作成し、現状の警告を todo 化することで警告をなくします

$ rubocop --auto-gen-config
$ echo 'inherit_from: .rubocop_todo.yml' > .rubocop.yml

.rubocop.yml の作成を検知して、 guard が実行されます

.rubocop_todo.yml ファイルの設定により、現状の警告が抑止されたことを確認できます。

[1] guard(main)>
23:13:06 - INFO - Inspecting Ruby code style: .
Inspecting 2 files
..

2 files inspected, no offenses detected

参照

http://rubygems.org/gems/guard-rubocop
https://github.com/yujinakayama/guard-rubocop

Guard まとめ記事

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?