こんにちは、三浦@yukainaです。
皆さんは、未使用と思われるメソッドなどコードを削除することありますか?
先日、残念なことにメソッドを削除したことによって不具合が発生してしまい、
リリース直後にエラー通知で気づくということがありました。
数時間に一度動くと言うバッチ処理だったのでリリース直後にすぐ気がつけたのは不幸中の幸いでした。。。
バッチ処理からだけ参照されていたメソッドと言うこともあり、通常の動作確認では気がつけず、またバッチ処理ということもありテストが手薄だったことで気がつけなかったのです。
ところで、半年ほど前に「Railsで効率的かつ安全に未使用のメソッドを削除した話」 texta.pixta.jp と言う記事でOkuribitoと言うgemを導入して、 削除できそうなメソッドを一定の期間を監視してコールされていないことを確認をすることで安全に約1000行ほどのコードを安全に消去ができたというものでした。
「安全に消せるようにしていたのでは?」ということになるのですが、PIXTAでは複数のRailsアプリがあり、 今回、不具合をだしてしまったRailsアプリには、メソッドが参照されているのかを監視する仕組み、つまりOkuribitoの導入がされていませんでした。
新しく入ってきたメンバーも増えてきたことや、 そもそもOkuribitoについての共有も足りていなかったということもあり、 PIXTAのおくりびとを増やすべくOkuribitoの導入の仕方について復習をしてみました。
ということで、今回はOkuribitoの導入について手順をまとめておきます。
おくりびとの導入
Rails4.2系のサンプルプロジェクトを用意しましたので、そちらを例に導入してみましょう。 https://github.com/yukaina/sample_4_2_10
1. Gemfileを編集してokuribito_rails
を追加します。
gem 'okuribito_rails'
2. bundle install
bundle
3. Okuribito用のマイグレーションファイル等の準備をします。
bundle exec rails generate okuribito_rails:install
4. migrate
bin/rake db:migrate
5. okuribito.ymlを用意する。
configの下にokuribito.ymlと言うymlファイルを用意します。
Class名: - "#インスタンスメソッド" - ".クラスメソッド"
ということなので、IdeasControllerのindexアクションを監視してみることにします。
IdeasController: - "#index" - "#hoge"
6. application.rbを編集
class OkuribitoSetting < Rails::Railtie config.after_initialize do okuribito = Okuribito::OkuribitoPatch.new do |method_name, obj_name, caller_info| # do something as you like! end okuribito.apply("config/okuribito.yml") end end
以上でOkuribitoの設定は終わりです。
最後に動作の確認をしてみます。
おくりびとの動作確認
1. Rails serverの起動
bin/rails s
2. Okuribitoの管理画面で監視の状態を確認
http://localhost:3000/okuribito_rails/method_call_situations
IdeasController
のindex
アクションのTimes of calledのカウントが0で登録されていることが確認できます。
3. 実際にカウントされるかどうかの確認をするためのアクセス
4. アクセスした後に、Okuribitoの管理画面で監視の状態を確認。
http://localhost:3000/okuribito_rails/method_call_situations
IdeasControllerのindexアクションのカウントが上がっていればOkuribitoの導入成功です!
意外と簡単に導入ができたように思えましたが、どうでしたか?
これで安心してコードを減らすことができそうですよね!
コードを書くだけでなく、
コードを減らすことで業務効率化したいPIXTAのおくりびとWanted!
recruit.pixta.co.jp