コード改善 meetup #2
http://kaizen.connpass.com/event/42118/
の発表資料。
自己紹介
名前: 正徳 巧
会社: 株式会社grooves
言語: Ruby
github: sinsoku
twitter: @sinsoku_listy
コードを改善する
3つの方法
コードを改善する3つの方法
1. コードを削る
2. コードを直す
3. 増殖を防ぐ
コードを削る
よくありそうな業務コード
- 条件分岐が多い
- 似たような処理が複数箇所にある
- コピペっぽいけど微妙に違う
- 既存の仕様が謎
ココロ、オレル
未使用メソッドを探す
$ git grep -n '\.method_name'
$ git grep -n 'def method_name'
未使用メソッドは基本的に 全削除 する。
全削除に対する不安
- いつか使うかも...
- disabled? の対象性のため enabled? も...
- どこかで使っているかも...
全削除に対する不安
- いつか使うかも...
- disabled? の対象性のため enabled? も...
=> 使 い ま せ ん
- どこかで使っているかも...
=> 問題が起きても Git で戻せます
コードを直す
ボーイスカウト・ルール
ボーイスカウトには大切なルールがあります。それは、「来た時よりも美しく」です。たとえ自分が来た時にキャンプ場が汚くなっていたとしても、そしてたとえ汚したのが自分でなかったとしても、綺麗にしてからその場を去る、というルールです。
小さな改善
- 変数、メソッド名を適切に直す
- メソッドを共通化する
- 不要コードを削除する
- 説明変数を導入する
- メソッドを private に変更する
プルリク例
増殖を防ぐ
技術的負債は複利で増える
× メンバー数 =
RuboCop でチェック
git-grep で雑にチェック
spec/meta/avoid_xss_in_mail_spec.rb
require 'spec_helper'
describe 'Avoid XSS in mail' do
it 'not include "<%==" in html templates' do
files = git_grep '<%==', 'app/views/*_mailer/*.html.erb'
expect(files).to be_empty
end
end
git-grep で雑にチェック
spec/support/git_grep.rb
module GitGrep
def git_grep(pattern, *path)
cmd = "git grep --name-only '#{pattern}'"
cmd = "#{cmd} -- #{path.join(' ')}" unless path.empty?
`#{cmd}`.split("\n")
end
end
RSpec.configure do |config|
config.include GitGrep
end
まとめ
まとめ
-
普通に戦うと死ぬ
- まずコードを削り、弱体化させる
-
リファクタリングの工数は取りづらい
- 機能追加と一緒に、少しずつ直す
-
増殖しないような仕組みが必要
- ペアプロ、レビューなどでもok