1. sinsoku

    Posted

    sinsoku
Changes in title
+コードを改善する3つの方法
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +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つの方法
+
+---
+
+## コードを改善する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: × メンバー数 = :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
+
+---
+
+# ご清聴ありがとうございます