XXは使ってないファイルであったり、modelだったり、メソッドだったり
経緯
コンパイル言語じゃないと、今は使ってないファイルやクラスなど、
適切な消すタイミングを逃すと、消すのが難しい。(消していいのか調べるのだるい)
(適切な開発フローを行っていればいいのだけれど、限界がある)
仕組みを簡単に説明
使ってないファイルがあった場合、git grepなどして、ヒットしなかったら消すっていう運用を
だれでも一度はやったことあるとおもいますが、それをrspecなどでチェック出来るようにする。
動的にファイル名やその他を扱っている場合は上記の限りでないので、ホワイトリストを作って例外はそこで
管理する。
ついでに同じロジックで削除スクリプトも書く。
※運用の前提
継続的デリバリー的なものを実施している。
既存のものは一気に削除してリリースしない。少しずつ。
用意するもの
rspec周り
spec/non_used_files_spec.rb
require "rails_helper"
# この例では使ってない画像ファイルだけれども、sedやawkなど組み合わせて使ってないメソッドや、
# 使ってないXXってのをチェックできるとおもう(投げやり)
describe "使ってないファイル" do
context "image編" do
let(:target_path) {"app/views app/assets/stylesheets app/assets/javascripts used_files_whitelist.text"}
it "使ってないimageがない" do
files = Dir.glob("app/assets/images/**/*.*").map do |f|
[f, f.split("/").last]
end
result = []
files.each do |path, file_name|
result << path if git_grep_e(file_name, target_path).empty?
end
expect(result).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
used_files_whitelist.text
banner01.png
banner02.png
banner03.png
banner04.png
banner05.png
banner06.png
banner07.png
意図としては検出できない、動的にソースコード内で記述しているものを書いておく
たとえば↓的な記述の場合など
(1..7).each do |i|
= image_tag "banner0#{i}".png
削除スクリプト
上記のrspecでは実際の開発中に使わなくなったもののチェックができるという意図
既存の大量にあるつかわれてないimage fileを消すスクリプト
400近くあった(汗)、ちゃんと消そうよ。。
script/remove_non_use_images.rb
def git_grep_e(pattern, *path)
cmd = "git grep --line-number -e '#{pattern}'"
cmd = "#{cmd} -- #{path.join(" ")}" unless path.empty?
`#{cmd}`.split("\n")
end
target_path = "app/views app/assets/stylesheets app/assets/javascripts used_files_whitelist.text"
files = Dir.glob("app/assets/images/**/*.*").map do |f|
[f, f.split("/").last]
end
files.each do |path, file_name|
if git_grep_e(file_name, target_path).empty?
puts path
`rm #{path}`
end
end