Upload
yasuhiro-matsumura
View
23
Download
1
Embed Size (px)
Citation preview
ただRailsで使われていないメソッドを削除したい人生だった
@muramurasan
第120回 よちよち.rb2017-02-13
自己紹介
○ 名前□ 松村 康弘 (@muramurasan)
○ 所属□ ピクスタ株式会社
○ Rubyとの付き合い□ 1年半前に組み込みエンジニアから転職し、
Ruby / Rails を触り始める
□ 実はRuby入門間もない頃、よちよち.rb に少しだけ参
加していて、ペアプロを通じてRubyこわくないを体験
しました (感謝!)
今日話すこと
○ 静的解析□ 未使用の可能性が高いメソッド一覧を取得する
○ 動的監視□ メソッドが本当に使われていないかを監視する
○ 提案したいメソッド削除フロー□ 静的解析と動的監視を組み合わせる
テーマ「未使用のメソッドの削除」
静的解析
静的解析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...
静的解析 動的監視 メソッド削除フロー
静的解析debride
○ 強み□ 軽い (解析がすぐ終わる)□ 精度は高い感触
□ RubyKaigi2016で登壇していた、実績あるgem○ 弱み
□ 動的メソッド呼び出しに対応できない
○ 消してはいけないメソッドも検出してしまう
□ Controllerのアクションとか、外部から呼ばれるメソッ
ドも未使用と検出してしまう
静的解析 動的監視 メソッド削除フロー
静的解析debride
○ 強み□ 軽い。解析がすぐ終わる
□ 精度は高い感触
□ RubyKaigi2016で登壇していた、実績あるgem○ 弱み
□ 動的メソッド呼び出しに対応できない
○ 消してはいけないメソッドも検出してしまう
□ Controllerのアクションとか、外部から呼ばれるメソッ
ドも未使用と検出してしまう
本当に使われていないメソッドなのかは、アプリ稼働中に監視する必要があるのでは?
静的解析 動的監視 メソッド削除フロー
動的監視
動的監視メソッドへのロギング差し込み
○ やり方□ 呼び出されたメソッド名をロギングするメソッドを用意
する
(logging_using_method とかの名前で)□ 監視したいメソッドで↑を呼び出すコードを書く
静的解析 動的監視 メソッド削除フロー
動的監視メソッドへのロギング差し込み
○ 強み□ 簡単! 確実! 実績あり!
○ 弱み□ 監視のためにプロダクションコードを汚すことになる
□ ログファイルなので、メソッドの呼び出し状況を確認す
るのが手間
静的解析 動的監視 メソッド削除フロー
動的監視メソッドへのロギング差し込み
○ 強み□ 簡単! 確実! 実績あり!
○ 弱み□ 監視のためにプロダクションコードを汚すことになる
□ ログファイルなので、メソッドの呼び出し状況を確認す
るのが手間
この問題も解決したい......
静的解析 動的監視 メソッド削除フロー
そこで......
OkuribitoRails(手前味噌)
動的監視OkuribitoRails
○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine
静的解析 動的監視 メソッド削除フロー
動的監視OkuribitoRails
○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる
○ プロダクションコードを汚さなくて済む
User: - '#feed' - '.deleted_users'Admin::UserController: - '#csv_export'
静的解析 動的監視 メソッド削除フロー
動的監視OkuribitoRails
○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる
○ プロダクションコードを汚さなくて済む
□ どのメソッドが呼び出し済みで、呼び出されていない
かを閲覧できるWebUIを提供
○ メソッド呼び出し状況の管理が簡単
静的解析 動的監視 メソッド削除フロー
動的監視OkuribitoRails
○ OkuribitoRailsとは?□ Railsプロジェクトに組み込めるRails Engine□ yamlで監視したいメソッドを指定できる
○ プロダクションコードを汚さなくて済む
□ どのメソッドが呼び出し済みで、呼び出されていない
かを閲覧できるWebUIを提供
○ メソッド呼び出し状況の管理が簡単
□ 名前の由来は、メソッドの最期を看取るという意味を
込めて
静的解析 動的監視 メソッド削除フロー
動的監視OkuribitoRails
○ 弊社のプロジェクトに導入してみて......□ 順当にメソッド呼び出しを検出している感
□ 呼び出し監視のオーバーヘッドは気にならないレベル
□ OkuribitoRails用にmigrationを実行する必要が
あるので、DBが汚れる......□ autoloadの仕組みに乗っかっていないコードを監視
できなくて辛かった
□ 現状、moduleのメソッド監視に対応していない
静的解析 動的監視 メソッド削除フロー
提案したいメソッド削除フロー
提案したいメソッド削除フロー
未使用の可能性が高いメソッド一覧をdebrideで取得
静的解析
静的解析 動的監視 メソッド削除フロー
提案したいメソッド削除フロー
OkuribitoRailsで一定期間監視し、削除してはいけないメソッドを抽出
動的監視
未使用の可能性が高いメソッド一覧をdebrideで取得
静的解析
静的解析 動的監視 メソッド削除フロー
動的監視
提案したいメソッド削除フロー
最後まで呼ばれていないメソッドを削除する
安全に消せそうだ!職人の手
未使用の可能性が高いメソッド一覧をdebrideで取得
静的解析
OkuribitoRailsで一定期間監視し、削除してはいけないメソッドを抽出
動的監視
静的解析 メソッド削除フロー
おわりに
○ 静的解析で削除候補にアタリをつけて....○ 動的監視で本当に使われていないか監視!
○ 動的言語のRuby(Rails) だって怖くない!
“Delete Driven Development!!”
RubyKaigi2016debrideの作者 Chris Arcand氏より