最近話したこと Rails アプリケーションのデバッグ編

最近Railsのアプリの開発について色々喋ることが多くて、今後も発生しそうだったので書いとく。数ヶ月後の自分用。

前提

  • Docker の上で動いている Ruby on Rails の開発環境がある

デバッグの方法

デバッガとして使えるライブラリは色々あるけど、最近話したアプリケーションでは deivid-rodriguez/pry-byebug を使っているので、その話。 binding.pry というメソッドがブレークポイントとして機能する。止まった後は止まっているコンテキストでオブジェクトの値を確認したり、 step, next, continue を使って処理を動かしたり。最近書かれている binding.pryキホンのキ - SmartHR Tech Blog にも便利情報が載っている。

GitHub - ruby/debug: Debugging functionality for Ruby も最近 binding.break を使うブレークポイントが実装されてそうだった。まだ試してないけど検討はできそう。

pry-byebug の紹介ではないけど、 Rails アプリケーションのデバッグ - Railsガイド にもデバッグの情報はある。

起動している Railsブレークポイントを差して動かすとDocker のコンテナ上で止まるので、コンテナにアタッチする必要がある。RSpecdocker run などのコマンドで実行する場合はコマンドを実行したコンソールで直接 pry-byebug の操作を行える。

RSpec の実行中にアプリケーションログを確認する

テストの実行中はアプリケーションログの出力が抑制されている。config/environments/test.rb の中で config.logger = Logger.new(STDOUT) とか書いとくとアプリケーションログも標準出力に一緒に出てくる。 Request Spec などでテストの中でなに起きてるかわかってない時によく使う。


思い出したら追記する。多分次回はRSpec編。