pryを利用してRailsアプリをデバッグする
はじめに
アプリ開発において決して避けては通れないのがデバッグです。これをIDEの機能に頼らずとも、比較的容易にしてくれるのがpry/pry-rails/pry-byebugといったgemでございます。
実装
必要となるpry一式をインストールします。
gem install pry-rails
gem install pry-byebug
上記のgemをインストールすると、まず、Rails consoleの挙動が変わります。デフォルトではirbが起動しておりましたが、これに変わりpryが起動するようになります。
$ bundle exec rails c
Running via Spring preloader in process 17270
Loading development environment (Rails 5.2.0)
[1] pry(main)>
また、ブレークポイントを仕込むことで、プログラムを一時停止の上、ステップ実行をすることが可能となります。
ブレークポイントの記述はbinding.pryです。
Started GET "/posts" for xxx.xxx.xxx.xxx at 2018-08-19 15:36:27 +0900
Cannot render console from xxx.xxx.xxx.xxx! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
(0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
vendor/bundle/ruby/2.3.0/gems/activerecord-5.2.0/lib/active_record/log_subscriber.rb:98
Processing by PostsController#index as HTML
From: /path/to/app/controllers/posts_controller.rb @ line 9 PostsController#index:
6: def index
7: binding.pry
8:
=> 9: @q = Post.includes(:folder).ransack(params[:q])
10: @posts = @q.result(distinct: true)
11: end
[1] pry(#)> next
From: /path/to/app/controllers/posts_controller.rb @ line 10 PostsController#index:
6: def index
7: binding.pry
8:
9: @q = Post.includes(:folder).ransack(params[:q])
=> 10: @posts = @q.result(distinct: true)
11: end
[1] pry(#)>
RubymineのようなIDEを利用せずに、vimやemacsといったテキストエディタでRubyの開発を行う際には、必須と称しても過言ではないgemだと思います。