最近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 のコンテナ上で止まるので、コンテナにアタッチする必要がある。RSpec を docker run
などのコマンドで実行する場合はコマンドを実行したコンソールで直接 pry-byebug の操作を行える。
RSpec の実行中にアプリケーションログを確認する
テストの実行中はアプリケーションログの出力が抑制されている。config/environments/test.rb
の中で config.logger = Logger.new(STDOUT)
とか書いとくとアプリケーションログも標準出力に一緒に出てくる。 Request Spec などでテストの中でなに起きてるかわかってない時によく使う。
思い出したら追記する。多分次回はRSpec編。