てくすた

ピクスタ株式会社のエンジニア・デザイナーがつづるよもやまテクニカルブログです

おくりびとの迎え方

こんにちは、三浦@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名:
  - "#インスタンスメソッド"
  - ".クラスメソッド"

ということなので、IdeasControllerindexアクションを監視してみることにします。

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
IdeasControllerindexアクションのTimes of calledのカウントが0で登録されていることが確認できます。

f:id:Yukaina:20171129113205p:plain
おくりびとの起動直後の監視状態

3. 実際にカウントされるかどうかの確認をするためのアクセス

http://localhost:3000/ideas

4. アクセスした後に、Okuribitoの管理画面で監視の状態を確認。

http://localhost:3000/okuribito_rails/method_call_situations
IdeasControllerindexアクションのカウントが上がっていればOkuribitoの導入成功です!

f:id:Yukaina:20171129113216p:plain
アクセス後のおくりびとの監視状態
意外と簡単に導入ができたように思えましたが、どうでしたか?
これで安心してコードを減らすことができそうですよね!

コードを書くだけでなく、
コードを減らすことで業務効率化したいPIXTAのおくりびと
Wanted! recruit.pixta.co.jp