この記事は、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名: - "#インスタンスメソッド" - ".クラスメソッド"
それでは、IdeasController
のindex
アクションを監視してみましょう。
本来のおくりびとの目的は、指定したメソッドが使われていないのかを確認するため、
使われていないであろうメソッドを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
IdeasController
のindex
アクションのTimes of called
のカウントが0で登録されていることが確認できます。
3. 実際にカウントされるかどうかの確認をするために、アクセスしてみます。
4. アクセスした後に、Okuribitoの管理画面で監視の状態を確認。
http://localhost:3000/okuribito_rails/method_call_situations
IdeasController
のindex
アクションのカウントが上がっていれば成功です!
Rails5.1でも、うまく導入ができたでしょうか?
今回は、手を抜いてmigrationファイルを編集してしまいましたが、
本来であれば、okuribito_rails
を改修すれば良いですよね!
テストも落ちてしまっていることですし、
近いうちに、改修したものを用意してプルリクエストをと思っています。
もちろん、そんなの待てない! って方、
どんどん先に改修してプルリクエストしていただくのも歓迎です!
https://github.com/muramurasan/okuribito_rails
にコントリビュートしてみてください!
よろしくお願いします。
2017.12.25 追記
プルリクエストを出してマージしてもらいました! \(  ̄▽ ̄)/ github.com
おくりびとにコントリビュートするのもいいですが、
PIXTAにコントリビュートしたい人をWanted!
recruit.pixta.co.jp