1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker環境でのpry-byebugの使い方

Posted at

この記事ではプログラミング学習者が学習中に学んだ内容を備忘録も兼ねて記事にして投稿した内容です。内容に誤りなどありましたら、ご指摘頂けると嬉しいです。

pry-byebugとは

デバッグツールの一種で変数の中身を確認したり、コードの挙動を確認するのに使用します。
今回は変数の中身を確認する為に多用しました。

pry-byebugのインストール

Gemfile
gropu :development do
    gem 'pry-byebug'
end
$ bin/rails bundle install
$ docker compose exec サービス名 bin/rails bundle install(起動中のDockerに対する場合)

インストールが終わったらコンテナを再起動しましょう。

docker-compose.ymlにコード追記

dokcer-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コマンドで確認できます。
※画像左端
docker ps.png

コード内にbinding.pryを追記して該当のコードを踏む

コード上にbinding.pryを記述することで、その行で処理を一時中断して変数の中身を確認したり、挙動を一行ずつ進めるといったことができます。
pry-byebugを作動させるにはbinding.pry記述したControllerなどを実際に動かします。
※下の例では真ん中に記述

carts_controller.rb
  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を踏んで処理が一時停止したターミナルの状態
binding.pry.png

[1] pry(#<CartsController>)>

のところに確認したい変数などを入力して値を確認したりします。

@cart_item変数の中身を確認した例
@cart_item.png

paramsの中身を確認した例
params.png

pry-byebugで一時停止させた時のコマンド

nextを実行すると一時停止位置から一行プログラムを進めることができます(ステップ実行)。
continueを実行すると一時停止位置から止まっているプログラムを再開して完了させます。

pry-byebugの使用が終わったら

変数の確認などが終わったらコード内からbinding.pryを削除しておきましょう。
残したままにしていると同じようにプログラムが一時停止してしまいます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?