RoRにおけるデバック方法

最近WEB開発をしていて、うまく問題の原因を把握することが出来ずにデバックでハマってしまいました。

そこで研修でも習ったデバック方法についてもう一度勉強し直すことにしました。

pメソッドを使う

pメソッドの利用はデバックの基礎です。
エラーメッセージを読んで気になるコードの部分にpメソッドを埋め込んであげて、実際にデータがどのようになっているのかをチェックします。

ruby script/consoleを使う

これはRails使うRubyにおけるirbのようなものです。
コマンドプロンプトから、アプリケーションのディレクトリ上で、ruby script/consoleを実行します。するとirbのような画面が立ち上がります。
この機能は実行時にデータベースの中身がどうなっているかを知りたい時に非常に便利です。script/consoleコマンドを実行すると、Railsの環境を読み込んだ状態でirbが立ち上がるので、ActiveRecordを使ってfindしたりcreateしたりdestroy_allしたり、好きなようにDBをいじる事ができます。

Hoge.column_namesHogeテーブルのnamesカラムを見ることが出来る。

Hoge.find(1)
⇒データベースに保存されているHogeテーブルのID:1のデータを取得することが出来る。
ruby script/breakpointを使う

これはアプリケーションを任意の場所で中断させて、その中断させた場所でruby script/consoleを実行できるものです。script/consoleはとても素晴らしいのですが、アクション実行中のsessionの状態を調べたりするのには使えません。そんな時は、script/breakpointerが有効です。

まず、コマンドプロンプトで開発中のアプリケーションのディレクトリに行って、ruby script/breakpointを実行します。
次に、

class  HogeController < ApplicationController
  def bar
    @piyo = session[:name]
    breakpoint    #←処理を止めたい場所に埋め込む
    # something
  end

そして、実際にブラウザから、hoge/barにアクセスします。するとブラウザには何も移らない代わりに、ruby script/breakpointを実行したコマンドプロンプトでscript/consoleのような画面が実行されます。
この状態で
@piyo
と実行してあげれば、@piyoの中身を見る事が出来るし、色々なことを試したいという場合に有効です。

                                                                                        • -

以上です。
最後までお読み頂きまして、ありがとうございます。
何か少しでも皆様のお力になれれば幸せに思います。