Edited at

コードを改善する<br>3つの方法

More than 1 year has passed since last update.

コード改善 meetup #2


http://kaizen.connpass.com/event/42118/

の発表資料。



自己紹介

名前: 正徳 巧

会社: 株式会社grooves

言語: Ruby

github: sinsoku

twitter: @sinsoku_listy


https://jobs.forkwell.com/

jobs.png



コードを改善する
3つの方法



コードを改善する3つの方法


1. :knife: コードを削る


2. :pill: コードを直す


3. :cop: 増殖を防ぐ



:knife: コードを削る



よくありそうな業務コード


  • 条件分岐が多い

  • 似たような処理が複数箇所にある

  • コピペっぽいけど微妙に違う

  • 既存の仕様が謎



:broken_heart: ココロ、オレル



未使用メソッドを探す

$ git grep -n '\.method_name'

$ git grep -n 'def method_name'

未使用メソッドは基本的に 全削除 する。



全削除に対する不安


  • いつか使うかも...

  • disabled? の対象性のため enabled? も...

  • どこかで使っているかも...



全削除に対する不安


  • いつか使うかも...

  • disabled? の対象性のため enabled? も...


=> 使 い ま せ ん


  • どこかで使っているかも...


=> 問題が起きても Git で戻せます



:pill: コードを直す



ボーイスカウト・ルール

ボーイスカウトには大切なルールがあります。それは、「来た時よりも美しく」です。たとえ自分が来た時にキャンプ場が汚くなっていたとしても、そしてたとえ汚したのが自分でなかったとしても、綺麗にしてからその場を去る、というルールです。



小さな改善


  • 変数、メソッド名を適切に直す

  • メソッドを共通化する

  • 不要コードを削除する

  • 説明変数を導入する

  • メソッドを private に変更する



プルリク例

pr-1.png



:cop: 増殖を防ぐ



技術的負債は複利で増える

twitter-01.png



:poop: × メンバー数 =
:poop: :poop: :poop: :poop: :poop:



RuboCop でチェック

rubo-logo-horizontal.png



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




まとめ



まとめ



  • :skull: 普通に戦うと死ぬ


    • まずコードを削り、弱体化させる




  • :timer: リファクタリングの工数は取りづらい


    • 機能追加と一緒に、少しずつ直す




  • :sunglasses: 増殖しないような仕組みが必要


    • ペアプロ、レビューなどでもok





ご清聴ありがとうございます