23
ただRailsで使われていない メソッドを削除したい人生だった @muramurasan 120よちよち.rb 2017-02-13

20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

Embed Size (px)

Citation preview

Page 1: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

ただRailsで使われていないメソッドを削除したい人生だった

@muramurasan

第120回 よちよち.rb2017-02-13

Page 2: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

自己紹介

○ 名前□ 松村 康弘 (@muramurasan)

○ 所属□ ピクスタ株式会社

○ Rubyとの付き合い□ 1年半前に組み込みエンジニアから転職し、

Ruby / Rails を触り始める

□ 実はRuby入門間もない頃、よちよち.rb に少しだけ参

加していて、ペアプロを通じてRubyこわくないを体験

しました (感謝!)

Page 3: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

今日話すこと

○ 静的解析□ 未使用の可能性が高いメソッド一覧を取得する

○ 動的監視□ メソッドが本当に使われていないかを監視する

○ 提案したいメソッド削除フロー□ 静的解析と動的監視を組み合わせる

テーマ「未使用のメソッドの削除」

Page 4: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

静的解析

Page 5: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

静的解析debride

○ debrideとは?□ 構文木解析により、未使用の可能性が高いメソッドを

列挙するgem□ 素のRubyでも使えるし、Rails向けのオプションや、

erbを解析対象に含めるプラグインもある

% debride lib

These methods MIGHT not be called:

MyClass good_method lib/some/file.rb:16 bad_method lib/some/file.rb:20...

静的解析 動的監視 メソッド削除フロー

Page 6: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

静的解析debride

○ 強み□ 軽い (解析がすぐ終わる)□ 精度は高い感触

□ RubyKaigi2016で登壇していた、実績あるgem○ 弱み

□ 動的メソッド呼び出しに対応できない

○ 消してはいけないメソッドも検出してしまう

□ Controllerのアクションとか、外部から呼ばれるメソッ

ドも未使用と検出してしまう

静的解析 動的監視 メソッド削除フロー

Page 7: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

静的解析debride

○ 強み□ 軽い。解析がすぐ終わる

□ 精度は高い感触

□ RubyKaigi2016で登壇していた、実績あるgem○ 弱み

□ 動的メソッド呼び出しに対応できない

○ 消してはいけないメソッドも検出してしまう

□ Controllerのアクションとか、外部から呼ばれるメソッ

ドも未使用と検出してしまう

本当に使われていないメソッドなのかは、アプリ稼働中に監視する必要があるのでは?

静的解析 動的監視 メソッド削除フロー

Page 8: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視

Page 9: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視メソッドへのロギング差し込み

○ やり方□ 呼び出されたメソッド名をロギングするメソッドを用意

する

(logging_using_method とかの名前で)□ 監視したいメソッドで↑を呼び出すコードを書く

静的解析 動的監視 メソッド削除フロー

Page 10: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視メソッドへのロギング差し込み

○ 強み□ 簡単! 確実! 実績あり!

○ 弱み□ 監視のためにプロダクションコードを汚すことになる

□ ログファイルなので、メソッドの呼び出し状況を確認す

るのが手間

静的解析 動的監視 メソッド削除フロー

Page 11: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視メソッドへのロギング差し込み

○ 強み□ 簡単! 確実! 実績あり!

○ 弱み□ 監視のためにプロダクションコードを汚すことになる

□ ログファイルなので、メソッドの呼び出し状況を確認す

るのが手間

この問題も解決したい......

静的解析 動的監視 メソッド削除フロー

Page 12: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

そこで......

Page 13: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

OkuribitoRails(手前味噌)

Page 14: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視OkuribitoRails

○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine

静的解析 動的監視 メソッド削除フロー

Page 15: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視OkuribitoRails

○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる

○ プロダクションコードを汚さなくて済む

User: - '#feed' - '.deleted_users'Admin::UserController: - '#csv_export'

静的解析 動的監視 メソッド削除フロー

Page 16: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視OkuribitoRails

○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる

○ プロダクションコードを汚さなくて済む

□ どのメソッドが呼び出し済みで、呼び出されていない

かを閲覧できるWebUIを提供

○ メソッド呼び出し状況の管理が簡単

静的解析 動的監視 メソッド削除フロー

Page 17: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視OkuribitoRails

○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる

○ プロダクションコードを汚さなくて済む

□ どのメソッドが呼び出し済みで、呼び出されていない

かを閲覧できるWebUIを提供

○ メソッド呼び出し状況の管理が簡単

□ 名前の由来は、メソッドの最期を看取るという意味を

込めて

静的解析 動的監視 メソッド削除フロー

Page 18: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視OkuribitoRails

○ 弊社のプロジェクトに導入してみて......□ 順当にメソッド呼び出しを検出している感

□ 呼び出し監視のオーバーヘッドは気にならないレベル

□ OkuribitoRails用にmigrationを実行する必要が

あるので、DBが汚れる......□ autoloadの仕組みに乗っかっていないコードを監視

できなくて辛かった

□ 現状、moduleのメソッド監視に対応していない

静的解析 動的監視 メソッド削除フロー

Page 19: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

提案したいメソッド削除フロー

Page 20: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

提案したいメソッド削除フロー

未使用の可能性が高いメソッド一覧をdebrideで取得

静的解析

静的解析 動的監視 メソッド削除フロー

Page 21: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

提案したいメソッド削除フロー

OkuribitoRailsで一定期間監視し、削除してはいけないメソッドを抽出

動的監視

未使用の可能性が高いメソッド一覧をdebrideで取得

静的解析

静的解析 動的監視 メソッド削除フロー

Page 22: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

動的監視

提案したいメソッド削除フロー

最後まで呼ばれていないメソッドを削除する

安全に消せそうだ!職人の手

未使用の可能性が高いメソッド一覧をdebrideで取得

静的解析

OkuribitoRailsで一定期間監視し、削除してはいけないメソッドを抽出

動的監視

静的解析 メソッド削除フロー

Page 23: 20170213 yochiyochi.rb / ただRailsで使われていないメソッドを削除したい人生だった

おわりに

○ 静的解析で削除候補にアタリをつけて....○ 動的監視で本当に使われていないか監視!

○ 動的言語のRuby(Rails) だって怖くない!

“Delete Driven Development!!”

RubyKaigi2016debrideの作者 Chris Arcand氏より