Reekを使用してfeature branch関連ファイルのcode smellをチェック
TL;DR
最近RailsプロジェクトにReekというコード分析ツールを追加し、コードの悪い味をチェックしました.プロジェクトはもうしばらく時間があるので、走ると何百ものヒントがあります.普段はコードを最適化する手間もありません.そこで、feature branchで修正したファイルだけをチェックして、的確に最適化する方法を考えました.
構想
ほとんどのCLIのように、Reekは指定したファイルをチェックするために追加のパラメータを受け入れることもできます.次のようになります.
一方、Gitの
私たちはrake taskを書くことができて、Rubyを通じて
インプリメンテーション
実装は簡単ですが、コードだけを入れます.
注意すべき点はいくつかあります.このtaskはbranchパラメータで比較するブランチを修正することができ、簡単に表示できます. は、 呼び出し
簡単に使用できます.
小結
コード分析ツールは良いもので、人のプログラミング習慣を暗黙的に変えることができ、経験のあるプログラマーでも欠陥を補う役割を果たすことができます.しかし、世の中には絶対性がなく、ルールがプロジェクトと一致しているかどうかを分析し、ワークフローがどのように改善されているかは、人によって異なり、絶えず考え、総括する必要があります.
参考資料
ReekCan I make git diff only show the changed file names and line numbers?
最近RailsプロジェクトにReekというコード分析ツールを追加し、コードの悪い味をチェックしました.プロジェクトはもうしばらく時間があるので、走ると何百ものヒントがあります.普段はコードを最適化する手間もありません.そこで、feature branchで修正したファイルだけをチェックして、的確に最適化する方法を考えました.
構想
ほとんどのCLIのように、Reekは指定したファイルをチェックするために追加のパラメータを受け入れることもできます.次のようになります.
$ bundle exec reek file1 file2
一方、Gitの
diff
は、2つのブランチに対する変更を比較することができ、1つのパラメータ--name-only
を加えると、変更されたファイル名のみを出力することができる.以下では、現在のブランチがfeature branchであると仮定し、stagingブランチの場合を比較する.# assume current branch is feature branch
$ git diff --name-only staging
file1
file2
...
私たちはrake taskを書くことができて、Rubyを通じて
git diff
命令を呼び出して、帰ってきたファイル名を1行に変換して、reek
命令に伝えることができます.目的を達成することができます.インプリメンテーション
実装は簡単ですが、コードだけを入れます.
# lib/tasks/reek.rake
namespace :reek do
desc "Check code smells for changed files (based on staging)"
task :changed, [:branch] do |t, args| # branch
branch = args[:branch] || 'staging'
# ,
re = `git diff --name-only #{branch}`
files = re.split("
").delete_if { |name| !File.exist?(name) }
if files.blank?
puts "
No files changed
"
return
end
#
puts "
Reek changed files:"
files.each do |file|
puts " #{file}"
end
puts
# reek
system "bundle exec reek #{files.join(' ')}"
end
end
注意すべき点はいくつかあります.
git diff
コマンドを呼び出して「`」を使用し、戻り値の取得を容易にする.bundle exec reek
は、出力を画面に表示する必要があるため、system
を使用しなければならない.簡単に使用できます.
# , staging
./bin/rake reek:changed
# master , commit
./bin/rake reek:changed[master]
小結
コード分析ツールは良いもので、人のプログラミング習慣を暗黙的に変えることができ、経験のあるプログラマーでも欠陥を補う役割を果たすことができます.しかし、世の中には絶対性がなく、ルールがプロジェクトと一致しているかどうかを分析し、ワークフローがどのように改善されているかは、人によって異なり、絶えず考え、総括する必要があります.
参考資料
ReekCan I make git diff only show the changed file names and line numbers?