pry
Railsではpryを使うことによって、プログラムを一時的に止めることができます。
一時的に止めることによって何が嬉しいのかというと、途中経過をみることができます。
大抵の場合、バックエンド側でデータを取得してクライアント側に渡すと思いますが、このデータがどこまで持ってこれているのかだったり、そのオブジェクトが思うような状態になっているのかの確認をクライアント側に来て初めてするのでは効率が悪いです。
プログラムを途中で止めることによって、その時点でのデータやオブジェクトの状態を確認することができます。
pry-rails
をGemfileに追加し、bundle install
します。
止めたい場所に、binding.pry
を追加することによって一時的に止めることができます。
class User < ApplicationRecord
def publish_post
binding.pry
user.posts.create(title: "hello", content: "world")
bining.pry
end
end
user
に紐づくpost
が1つ作成されるようなpublish_post
メソッドを定義して、実際に動かしてみます。
pry(main)> user = User.first
pry(main)> user.publish_post
pry(main)> user.publish_post
From: /app/app/models/user.rb:69 User#publish_post:
68: def publish_post
=> 69: binding.pry
70: self.posts.create(title: "hello", content: "world")
71: binding.pry
72: end
↑ このような画面になり、この時点でのオブジェクトの状態などを確かめることができます。
pry(#<User>)> self.posts
=> []
この時点ではuser
に紐づくpost
が作られていないことがわかります。
exit
して次のbinding.pry
まで飛びます。
pry(#<User>)> exit
From: /app/app/models/user.rb:71 User#publish_post:
68: def publish_post
69: binding.pry
70: self.posts.create(title: "hello", content: "world")
=> 71: binding.pry
72: end
pry(#<User>)> self.posts
=> [#<Post:0x00007f848c6e0358
id: 8,
title: "hello",
content: "world",
user_id: 1,
created_at: Sun, 04 Dec 2022 10:54:52.767992000 UTC +00:00,
updated_at: Sun, 04 Dec 2022 10:54:52.767992000 UTC +00:00>]
2つ目のbinding.pry
ではuser
に紐づくpost
が作成されているのが確認できます。
このように段階を踏みながらデータの状態を確認することができます。
pry-nav
を入れるとより便利になるかと思います。
log
ログを見ることでも、途中経過を確認できます。
Railsの開発環境のログはlog/development.log
にたまっていきます。
そのファイルを直接見ても見にくいのでless
コマンドを使います。
less log/development.log
もっと見にくくなってしまいました。
-R
オブションをつけることによって、見やすくなります。
less -R log/development.log