【Rails】binding.pryを用いてエラーの原因を探る(Gem "pry-rails"でのデバッグ方法)

投稿日:

【Railsでアプリ開発中】プログラミング初心者の勉強ブログ #39

こんにちは。

39日目。デバッグ方法について。アプリ開発で必ず必要な技術。(難しくはない。)

はじめに

この記事は、railsフレームワークでオリジナルwebアプリ「免許学科試験学習サイト」作成中の僕が、プログラミングをしている中で気づいたことや学んだことを書いております。プログラミング初心者なので知識は少ないですが、現在通っているプログラミングスクール「DIVE INTO CODE」で学んでいることや、ネットで見つけた様々な記事を参考に記事を作成しております。

 

目次

 

前回までの内容

前回(【JavaScript】アプリで実装したい機能のアルゴリズムを考える)では、実装したい機能を開発するための流れを、フローチャートを作成しつつ考えました。

今回はrailsアプリ開発の中で、エラーの原因を探りデバッグするために多用する「binding.pry」について書いていきます。

 

 デバッグとは

デバッグとは、エラーの原因を特定し解決することです。僕の場合エラーがしょっちゅう出るので、デバッグできないと全く前に進みません。

書いたコーディングを途中で止め、その前後のデータの中身やメソッドが効いているかどうかを確認し、エラーの原因を突き止めてデバッグする方法を紹介します。

 

Railsにおけるデバッグの方法

エラーを原因を特定する(ブレークポイントの設置)

デバッグは「エラーを探る」ことから始まります。どのコーディングが間違っているか、エラーの原因になっているかを特定しないと修正しようがありません。

ここで大事になってくるものが、「ブレークポイント」です。

ブレークポイントとは

プログラムの任意の場所で実行を停止させるその「場所」のことです。

プログラムはコーディングの順に、上から下へ処理が進んでいきます。この処理の流れを「ブレークポイント」を仕込ませることで、意図的に途中で止めることができます。

こうすることで、「仕込ませたブレークポイントまでの処理」が適切に進んでいるかどうかを確認することができます。

 

以下、ブレークポイントを利用しデバッグをする方法を書いていきます。

 

binding.pry(pry-rails)の使い方

今回の(というより僕はこれしか使えない)デバッグ方法は、「binding.pry」を用いて行います。

rails開発環境が整っている前提で進めます。

 

1、Gem "pry-rails"をインストール

Gemfile

gemfile

gemfileに上のコードを記入。

その後コンソールで「bundle install」を実行。

 

2、ブレークポイントを仕込む

controllers/itimon_ittous_controller.rb

binding.pry

 

この「binding.pry」が「ブレークポイント」です。

 

itimon_ittous_controllerの「index」アクションが呼び出されたときに、

「gon.questions = @questions」までの処理が実行され、そこで止まります。

 

実際にサーバーを起動し、itimon_ittous_controllerの「index」アクションを呼びだし、コンソールを確認すると、

コンソール画面

このようにコンソール画面が映ります。

また、ブラウザは開かず、止まった状態になります。(コントローラのアクションを途中で止めたためです。)

 

railsだったらこのようにrbファイルに直接書き込みますし、controllerだけでなくviewにも書くことができます。

binding.pry(view)

 

3、pry(Rubyの対話コンソール)でデータの取得を確認

ブレークポイントを仕込み、止めることに成功したら、後は何がうまく行ってないかを確認していく作業になります。

 

先ほどのコンソール画面、コンソール画面

一番下に 「pry(#<ItimonIttousContriller>)>   」というのがあると思います。ここに書き込んで調査していきます。

pry

 

今回の場合、indexアクションの処理は、

上に書いた二つは完了しているはずです。

 

逆に、

「binding.pry」以降に書いてあるこれらの変数は定義されておりません。

 

pryに打ち込んで確認します。

中身確認1

「gon.questions」は入っています。

 

一方で、

中身確認2
「@fields」や「@count」などの「binding.pry」より下に定義した変数は定義されておりません。

 

ブレークポイントを用いることで、その前後の変数がちゃんと定義されているかを確認できます。ブレークポイントよりも手前の変数やメソッドが機能していなかった場合、そこがエラーの原因だとわかる訳です。

 

 

その他のデバッグ方法

1、raiseメソッド

「raise」メソッドは、railsにあらかじめ備わってるデバッグ用のメソッドです。

「binding.pry」と同じようにブレークポイントを仕込むことができます。

ただし、対話コンソール「pry」が自動で立ち上がらないので、「pry-rails」というGemをインストールした方がやりやすいです。

 

2、Gem "better-errors"の利用

ブラウザのエラー場面でpryが起動し確認できるデバッグ方法です。こちらも入れておくと、不意のエラーもブラウザ上で原因が探れます。

Gemfile

「pry-rails」と同じです。 Gemfileに書いて「bundle install」するだけです。

 

まとめ

今回はデバッグ方法、binding.pryのやり方について書きました。

最初は使い方分からなかったのですが、アプリ開発していく中で嫌でも使わないと先に進むことが出来ないので、徐々に使いこなせるようになりました。

JavaScriptのコンソールでは「debugger」も使ってます。

 

早くアプリ完成させたいです。

以上ありがとうございました。

 

-プログラミング学習
-, ,

Copyright© s u p ? , 2019 All Rights Reserved.