間違った記述に対してのチェック
経緯
railsでasset_syncを使って、cloudfrontなどで静的ファイルの配信をしている時に、
ローカルやステージングで、画像パスを"../about/tile.png"など相対パスで書いてしまう人がいて
リリース前の確認環境になってやっと気づいたり、気付かずにリリースして問題になることが多々あった。
どうするか
git grepして対象の記述があれば注意するという人間ができそうなフローを、
rspecで自動化する。
参考コードを改善する3つの方法
spec/original_spec.rb
require "rails_helper"
describe "間違ったpathの記述がない" do
context "css編" do
let(:target_path) {"app/assets/stylesheets"}
it "./ ←こういうpathの記述だめだって!!もう!!" do
pattern = "./"
expect(git_grep_e(pattern, target_path)).to be_empty
end
it "image-url って記述つかってよね もう!!" do
pattern = "background-image:url"
expect(git_grep_e(pattern, target_path)).to be_empty
end
end
end
spec/support/git_grep.rb
module GitGrep
def git_grep_e(pattern, *path)
cmd = "git grep --line-number -e '#{pattern}'"
cmd = "#{cmd} -- #{path.join(" ")}" unless path.empty?
`#{cmd}`.split("\n")
end
end
spec/rails_helper.rb
RSpec.configure do |config|
# ↓追記
config.include GitGrep
end
表示
- 該当するファイル名や行数も表示されて修正個所も分かりやすい
まとめ
git grepできるものなら何でもチェックできそう。
ご判定があったら、white_list的なものを定義してやればなんとかなりそう。
例ではcss周りをやっているけれど、
rubocopなどにルールはないけど、独自のコーディング規約のチェックをしたい!
なんて時にも使えそう。
RSpecでFactoryGirlの記述は省略するとかも。