この記事ではプログラミング学習者が学習中に学んだ内容を備忘録も兼ねて記事にして投稿した内容です。内容に誤りなどありましたら、ご指摘頂けると嬉しいです。
pry-byebugとは
デバッグツールの一種で変数の中身を確認したり、コードの挙動を確認するのに使用します。
今回は変数の中身を確認する為に多用しました。
pry-byebugのインストール
gropu :development do
gem 'pry-byebug'
end
$ bin/rails bundle install
$ docker compose exec サービス名 bin/rails bundle install(起動中のDockerに対する場合)
インストールが終わったらコンテナを再起動しましょう。
docker-compose.ymlにコード追記
web:
build: .
image: rails_template:latest
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
- bundle:/usr/local/bundle
- node_modules:/myapp/node_modules
ports:
- "3000:3000"
depends_on:
- db
tty: true
stdin_open: true
末尾2行を追記します。
tty: true
はコンテナとホストマシンの標準出力を接続する。
この設定をすることでホストマシンで入力した内容がコンテナに伝わります。
stdin_open: true
はコンテナとホストマシンの標準入力を接続する。
この設定をすることでコンテナで出力された内容がホストマシン伝わります。
コンテナ起動時のコマンドについて
通常、Dockerコンテナを起動する場合、イメージが既にあればdocker compose up
ですが、Dockerコンテナ内部でpry-byebug
を使いたい場合はdocker compose up && docker attach コンテナID or コンテナ名
とします。
※アタッチモードでコンテナに接続して起動
コンテナID or コンテナ名はdocker ps
コマンドで確認できます。
※画像左端
コード内にbinding.pry
を追記して該当のコードを踏む
コード上にbinding.pry
を記述することで、その行で処理を一時中断して変数の中身を確認したり、挙動を一行ずつ進めるといったことができます。
pry-byebugを作動させるにはbinding.pry
記述したControllerなどを実際に動かします。
※下の例では真ん中に記述
def create
if params[:quantity].to_i <= 0 || params[:quantity].blank?
@merchandise = Merchandise.find_by(id: params[:format])
@merchandises_limit = Merchandise.with_attached_image.order(id: 'DESC').limit(4)
flash[:alert] = '数量は1以上の整数を入力して下さい。'
redirect_to merchandise_path(@merchandise) and return
end
binding.pry
add_quantity
if @cart_item.save
flash[:notice] = '商品が追加されました。'
redirect_to merchandises_path and return
else
@merchandises_limit = Merchandise.with_attached_image.order(id: 'DESC').limit(4)
redirect_to merchandises_path, alert: '商品の追加に失敗しました。' and return
end
end
binding.pryが書かれたControllerを踏んで処理が一時停止したターミナルの状態
[1] pry(#<CartsController>)>
のところに確認したい変数などを入力して値を確認したりします。
pry-byebugで一時停止させた時のコマンド
next
を実行すると一時停止位置から一行プログラムを進めることができます(ステップ実行)。
continue
を実行すると一時停止位置から止まっているプログラムを再開して完了させます。
pry-byebugの使用が終わったら
変数の確認などが終わったらコード内からbinding.pry
を削除しておきましょう。
残したままにしていると同じようにプログラムが一時停止してしまいます。