てくすた

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

Rails5.1でのおくりびとの迎え方

この記事は、PIXTA Advent Calendar 2017 20日目の記事です。

こんにちは、三浦@yukainaです。 先日「おくりびとの迎え方
と言う記事でgemのOkuribitoを導入する手順を Rails4.2系のサンプルプロジェクトでまとめていました。
https://github.com/yukaina/sample_4_2_10

今回は、Rails5.1系のサンプルプロジェクトを用意してみましたので、
こちらで導入をしてみようと思います。 https://github.com/yukaina/sample_5_1_4

1. Gemfileにokuribito_railsを追加します。

gem 'okuribito_rails'

2. bundle install

bundle

3. Okuribito用のマイグレーションファイル等の準備をします。

bundle exec rails generate okuribito_rails:install

-次は migrate なのですが、okuribito_railsの現在のバージョン0.2.4では、 migration versioingに対応していないために、エラーになってしまいます。

$ bin/rake db:migrate
Running via Spring preloader in process 14586
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

  class CreateOkuribitoRailsMethodCallSituations < ActiveRecord::Migration[4.2]
    (中略)
-e:1:in `<main>'

Caused by:
StandardError: Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

  class CreateOkuribitoRailsMethodCallSituations < ActiveRecord::Migration[4.2]
    (中略)
-e:1:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

そのため、ここでは3.で生成された2つのmigrationファイル

  • YYYYMMDDHHMMSS_create_okuribito_rails_method_call_logs.okuribito_rails.rb
  • YYYYMMDDHHMMSS_create_okuribito_rails_method_call_situations.okuribito_rails.rb を編集します。

YYYYMMDDHHMMSS_create_okuribito_rails_method_call_logs.okuribito_rails.rbを例にすると class CreateOkuribitoRailsMethodCallLogs < ActiveRecord::Migration の最後に[5.1]を追記して以下のようにします。

# This migration comes from okuribito_rails (originally 20161027150000)
class CreateOkuribitoRailsMethodCallLogs < ActiveRecord::Migration[5.1]
  def change
    create_table :okuribito_rails_method_call_logs do |t|
      t.integer :method_call_situation_id, null: false
      t.string :class_name, null: false
      t.string :method_symbol, null: false
      t.string :method_name, null: false
      t.text :back_trace

      t.timestamps
    end
    add_index :okuribito_rails_method_call_logs, :class_name
    add_index :okuribito_rails_method_call_logs, :method_name
  end
end

2つのmigrationファイルを編集したら続きへ行きましょう。

4. migrate

bin/rake db:migrate
$ bin/rake db:migrate
Running via Spring preloader in process 15467
== 20171217143847 CreateOkuribitoRailsMethodCallSituations: migrating =========
-- create_table(:okuribito_rails_method_call_situations)
   -> 0.0033s
-- add_index(:okuribito_rails_method_call_situations, :class_name)
   -> 0.0009s
-- add_index(:okuribito_rails_method_call_situations, :method_name)
   -> 0.0010s
== 20171217143847 CreateOkuribitoRailsMethodCallSituations: migrated (0.0054s)

== 20171217143848 CreateOkuribitoRailsMethodCallLogs: migrating ===============
-- create_table(:okuribito_rails_method_call_logs)
   -> 0.0009s
-- add_index(:okuribito_rails_method_call_logs, :class_name)
   -> 0.0006s
-- add_index(:okuribito_rails_method_call_logs, :method_name)
   -> 0.0008s
== 20171217143848 CreateOkuribitoRailsMethodCallLogs: migrated (0.0025s) ======

無事成功しましたよね! ここまでくれば、以降は同じで

5. config/okuribito.ymlを用意する。

Class名:
  - "#インスタンスメソッド"
  - ".クラスメソッド"

それでは、IdeasControllerindexアクションを監視してみましょう。 本来のおくりびとの目的は、指定したメソッドが使われていないのかを確認するため、 使われていないであろうメソッドをokuribito.ymlに記入するのですが ここでは、メソッドが実行されることでカウントアップされていることで、正常におくりびとの導入ができていることを確認することにします。

IdeasController:
  - "#index"

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:20171219162539p:plain

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

http://localhost:3000/ideas f:id:Yukaina:20171219162601p:plain

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

http://localhost:3000/okuribito_rails/method_call_situations f:id:Yukaina:20171219162745p:plain IdeasControllerindexアクションのカウントが上がっていれば成功です!


Rails5.1でも、うまく導入ができたでしょうか? 今回は、手を抜いてmigrationファイルを編集してしまいましたが、 本来であれば、okuribito_railsを改修すれば良いですよね!

テストも落ちてしまっていることですし、 近いうちに、改修したものを用意してプルリクエストをと思っています。
もちろん、そんなの待てない! って方、
どんどん先に改修してプルリクエストしていただくのも歓迎です!
https://github.com/muramurasan/okuribito_rails
にコントリビュートしてみてください!
よろしくお願いします。

2017.12.25 追記

プルリクエストを出してマージしてもらいました! \(  ̄▽ ̄)/ github.com

おくりびとにコントリビュートするのもいいですが、
PIXTAにコントリビュートしたい人を
Wanted!
recruit.pixta.co.jp