Ruby debug gem チートシート - nyg1971/test GitHub Wiki
🚀 基本的な使い方
ブレークポイントの設置
# コード内にブレークポイントを設置
def some_method
binding.break # ← ここで実行が停止
# 以降のコードは停止後に実行される
end
デバッガー起動(Docker環境)
# Rails サーバーをデバッグモードで起動
# またはshellから
bundle exec rails server -b 0.0.0.0 -p 3001
🔍 基本コマンド
変数・オブジェクト確認
(rdbg) p variable_name # 変数の値を表示
(rdbg) p user # userオブジェクトの内容
(rdbg) p params # paramsハッシュの内容
(rdbg) p user.email # オブジェクトの属性
(rdbg) p user.class # オブジェクトのクラス
(rdbg) pp object # 整形して表示(pretty print)
実行制御
(rdbg) continue # 実行を継続(c でも可)
(rdbg) c # continue の短縮形
(rdbg) step # 次の行に進む(メソッド内に入る)
(rdbg) s # step の短縮形
(rdbg) next # 次の行に進む(メソッド内に入らない)
(rdbg) n # next の短縮形
(rdbg) finish # 現在のメソッドから抜けるまで実行
(rdbg) quit # デバッガーを終了
(rdbg) q # quit の短縮形
コールスタック確認
(rdbg) bt # バックトレース(呼び出し履歴)
(rdbg) backtrace # bt の詳細版
(rdbg) up # 呼び出し元に移動
(rdbg) down # 呼び出し先に移動
💡 実用的なデバッグパターン
API開発でよく使うパターン
# AuthController での例
def login
user = User.find_by(email: params[:email])
binding.break # ← ここで停止
# デバッガーで確認
# (rdbg) p user
# (rdbg) p params
# (rdbg) p params[:email]
# (rdbg) p user&.valid_password?(params[:password])
end
エラーハンドリングのデバッグ
rescue StandardError => exception
binding.break # ← エラー時に停止
# デバッガーで確認
# (rdbg) p exception
# (rdbg) p exception.class
# (rdbg) p exception.message
# (rdbg) p exception.backtrace
end
データベースクエリのデバッグ
def index
users = User.includes(:department)
binding.break # ← クエリ実行前に停止
# デバッガーで確認
# (rdbg) p users.to_sql # 生成されるSQL
# (rdbg) p users.count # レコード数
# (rdbg) p users.first # 最初のレコード
end
🛠 高度な機能
条件付きブレークポイント
# 特定の条件でのみ停止
users.each do |user|
binding.break if user.email.include?("test") # test を含む場合のみ停止
end
式の評価
(rdbg) eval user.customers.count # 任意のコードを実行
(rdbg) eval User.count # クラスメソッドも実行可能
(rdbg) eval params.to_json # JSONに変換
ローカル変数一覧
(rdbg) locals # 現在のスコープの変数一覧
(rdbg) instance_variables # インスタンス変数一覧
活用例
Users API開発での使用例
class Api::V1::UsersController < BaseController
def create
binding.break # ← パラメータ確認
user = User.new(user_params)
binding.break # ← 作成前の状態確認
if user.save
binding.break # ← 保存後の確認
render json: { user: user }
else
binding.break # ← エラー時の確認
render json: { errors: user.errors }
end
end
end
# デバッガーでの確認例
# (rdbg) p user_params
# (rdbg) p user
# (rdbg) p user.valid?
# (rdbg) p user.errors.full_messages
認証のデバッグ
def authenticate_request
token = request.headers['Authorization']&.split(' ')&.last
binding.break # ← トークン確認
decoded = JsonWebToken.decode(token)
binding.break # ← デコード結果確認
@current_user = User.find(decoded[:user_id])
binding.break # ← ユーザー確認
end
# デバッガーでの確認例
# (rdbg) p token
# (rdbg) p decoded
# (rdbg) p @current_user
効率的なデバッグのコツ
- 小刻みにブレークポイント設置: 問題箇所を絞り込む
- 変数の中身を必ず確認: 想定と実際の違いを把握
- エラー時は exception オブジェクトを詳しく調査
- SQL クエリも確認: パフォーマンス問題の発見
- デバッグ後はブレークポイントを削除: 本番デプロイ前に必ず