1. sinsoku

    No comment

    sinsoku
Changes in body
Source | HTML | Preview
@@ -1,180 +1,180 @@
コード改善 meetup #2
http://kaizen.connpass.com/event/42118/
の発表資料。
---
## 自己紹介
名前: 正徳 巧
会社: 株式会社grooves
言語: Ruby
github: [sinsoku](https://github.com/sinsoku)
twitter: [@sinsoku_listy](https://twitter.com/sinsoku_listy)
---
https://jobs.forkwell.com/
![jobs.png](https://qiita-image-store.s3.amazonaws.com/0/30459/256462b2-6e92-721d-5dcb-f6deca2499cc.png)
---
-# コードを改善する3つの方法
+## コードを改善する<br>3つの方法
---
## コードを改善する3つの方法
### 1. :hocho: コードを削る
### 2. :pill: コードを直す
### 3. :cop: 増殖を防ぐ
---
# :hocho: コードを削る
---
## よくありそうな業務コード
- 条件分岐が多い
- 似たような処理が複数箇所にある
- コピペっぽいけど微妙に違う
- 既存の仕様が謎
---
# :broken_heart: ココロ、オレル
---
## 未使用メソッドを探す
```
$ git grep -n '\.method_name'
$ git grep -n 'def method_name'
```
未使用メソッドは基本的に **全削除** する。
---
## 全削除に対する不安
- いつか使うかも...
- disabled? の対象性のため enabled? も...
- どこかで使っているかも...
---
## 全削除に対する不安
- いつか使うかも...
- disabled? の対象性のため enabled? も...
#### => **使 い ま せ ん**
- どこかで使っているかも...
#### => 問題が起きても **Git で戻せます**
---
# :pill: コードを直す
---
## [ボーイスカウト・ルール](http://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%9C%E3%83%BC%E3%82%A4%E3%82%B9%E3%82%AB%E3%82%A6%E3%83%88%E3%83%BB%E3%83%AB%E3%83%BC%E3%83%AB)
ボーイスカウトには大切なルールがあります。それは、「来た時よりも美しく」です。たとえ自分が来た時にキャンプ場が汚くなっていたとしても、そしてたとえ汚したのが自分でなかったとしても、綺麗にしてからその場を去る、というルールです。
---
## 小さな改善
- 変数、メソッド名を適切に直す
- メソッドを共通化する
- 不要コードを削除する
- 説明変数を導入する
- メソッドを private に変更する
---
## プルリク例
![pr-1.png](https://qiita-image-store.s3.amazonaws.com/0/30459/f44dc4f1-a421-fe6c-3e5d-a25a5e3b4c0a.png)
---
# :cop: 増殖を防ぐ
---
## 技術的負債は複利で増える
![twitter-01.png](https://qiita-image-store.s3.amazonaws.com/0/30459/b4c00fd3-e077-cc88-cfc2-6bb247e0119a.png)
---
# :poop: × メンバー数 = <br> :poop: :poop: :poop: :poop: :poop:
---
## [RuboCop](https://github.com/bbatsov/rubocop) でチェック
![rubo-logo-horizontal.png](https://qiita-image-store.s3.amazonaws.com/0/30459/ffa5a70b-acc4-a380-225b-6f523a9d4846.png)
---
## git-grep で雑にチェック
```rb: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 で雑にチェック
```rb: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
---
# ご清聴ありがとうございます