0
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?

More than 5 years have passed since last update.

【36日目】簡単な前置きと今日の学び(docker環境におけるbinding.pryによるデバッグ)

Posted at

はじめに

未経験公務員からIT転職を目指して独学36日目
Qiitaへの投稿は初めてです。

現在はこちらのUdemy動画を使用しながら学習を進めているような段階です。
◆フルスタックエンジニアが教える即戦力Railsエンジニア養成講座

SNSを通じて出会った方にいただいたアドバイスの中に「なんでもいいから毎日アウトプットしろ」というものがありました。
曰く、アウトプットを一定期間継続しているというだけで評価になり差別化要因になる、と。
その他アウトプットによって得られる種々の効果については、下記が参考になると思います。
◆「120日間」技術ブログを「毎日」投稿し続けて分かった「記事を投稿するメリット」

おそらくQiitaのメインターゲットであるプロエンジニアの方々にとっては稚拙すぎる情報もあるかと思います。
しかし私のような初学者にとってはどれも未知との遭遇で、ある種の驚きに包まれたものです。
そういったごく個人的な発見を日々積み重ねていき、時には同じような初学者の学習に貢献できれば幸いと思います。

本題

今日は先の動画内で使われていたbinding.pryについてまとめます。
binding.pryはデバッグツールと呼ばれるものです。
プログラムの中に書いて実行すると、書かれた行でプログラムが停止し、pryのREPLが起動します。
そのあと、変数の中身を確認したりできるので、アプリが原因不明のエラーを出している時などに、原因の特定に役立つようです。

導入方法

gemとしてインストールすることになります。
なお、デバッグ用のツールは本番環境には不要なので、下記のとおりGemfile内にdevelopmentグループを作ると良いです。

# Gemfile
group :development do
  gem 'pry-byebug'
end

そしてBundle installするのですが、動画ではdocker環境で使用していますので、本稿ではそれに倣っていきたいと思います。

# ターミナル
$ docker-compose build

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

# ターミナル
$ docker-compose up -d

使用方法

binding.pryを使用するには、先にコンテナにアタッチする必要がありますので、まずはコンテナ名を確認します。

# ターミナル
$ docker ps

そのあと、binding.pryを使用したいコンテナ名を指定してattachします。
なお、このattachについて、私はまだ深く理解できていないので今後の課題とします。
どうやら「コンテナに入る」と表現されるようなのですが、execというコマンドと違いがあるようです。

# ターミナル
$ docker attach コンテナ名

次にコード内の動作を確認したい行にbinding.pryを仕込みます。
ちなみに動画の講師はControllerに機能を実装するたびに必ずbinding.pryを仕込んで、受け渡されているデータが想定通りかどうか確認していました。

今回は、createアクションにストロングパラメータを設定した場合について見ていきます。

example_controller.rb
  def create
    Board.create(board_params)
    binding.pry
  end

  private

  def board_params
    params.require(:board).permit(:name, :title, :body)
  end

この状態で、サービス側でcreateアクションを実行します。
すると、ターミナルに現在の処理状況が表示され、pryのREPLが起動します。
あとは確認したい変数などを入力すれば、その値が下記のように確認できます。

# ターミナル
    10: def create
    11:   Board.create(board_params)
    12:   binding.pry
 => 13: end

[1] pry(#<BoardsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"略", "example"=><ActionController::Parameters {"name"=>"例", "title"=>"binding.pryについて", "body"=>"初めてのアウトプットです。"} permitted: false>, "commit"=>"保存", "controller"=>"examples", "action"=>"create"} permitted: false>
[2] pry(#<BoardsController>)> 

「params」
でデータを取得すると「permitted: false」となってくれていることが確認できます。
ちなみにpryから抜けるには「exit」とすれば良いですが、dockerでコンテナにattachしている場合、「Ctrl + p + q」でコンテナから抜ける必要があります。

終わりに

とりあえず機能を実装するたびに使用しながら、受け渡している変数やデータの中身を見る癖をつけていきたいなと思います。
講師の方がしつこいくらいに使用しているので、きっとだんだんわかるはず!

0
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
0
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?