この記事はモチベーションクラウドシリーズ Advent Calendar 2022 の投稿です。
Execute in the context of Rails
を伝えたくて書きました。
Rails server
Railsのプロジェクトを開くと自動で設定されています
Development: アプリケーション名
を選択し、デバッグを開始します
指定したIP addressとPortでアクセスすれば、ブラウザ操作やCurlコマンドなど、RubyMine外からのアクセスで、ブレークポイントで停止します
Rails console
一度 [Tools] > [Run Rails Console...] を実行し、停止します
すると Rails console: アプリケーション名
の設定が自動で作成されます
Rails console: アプリケーション名
を選択し、デバッグを開始します
Rails Console に何か打ち込んで実行すると、ブレークポイントで停止します
rake task
実行したいtaskの三角形から Debugを開始します
ブレークポイントで停止します
テストコード(Minitest, RSpec)
実行したいテストの三角形から Debugを開始します
ブレークポイントで停止します
IntegrationTest や Request spec であれば、呼び出される側の処理(コントローラー等)でも止まります
デバッグしたい Controller や Action が明確な場合は Rails server ではなく、テストコードから実行をします。
デバッグ開始が楽なのと、再実行が容易なためです。
既存テストに試したいケースがない場合も、テストコードの準備データを書き換えたり、一時的にテストを追加してそれを実行します。
「この画面操作でこのコード通るんだっけ?」くらい未知の場合や、「再現するデータはあるけどまだ原因がわからない」といった場合に、 Rails server で起動して画面操作からデバッグをすることが多いです。
Ruby script
純粋なRubyスクリプトは、ファイルを右クリックするか、 Current Fileを選択してデバッグできます
Execute in the context of Rails
Run Configuration で Execute in the context of Rails
のチェックをつけると Rails 上で動いている状態でデバッグできます。
この例でいうと、Active Record の User モデル が使えるようになっています。
Rails console だと「デバッグする前ににいくつもデータ準備のコードを事前実行し、その後で初めてデバッグ箇所を実行しないといけない」といったことがあります。
何度もconsoleにコピペするのは面倒なので、使い捨てスクリプトとしてファイルを作成して、こっちでデバッグすることが多いです。
まとめ
デバッグ自体にも便利な機能がいくつもあります。
例:
- コールスタックの表示
- 変数の中身のインライン表示
- 実行中の変数変更
- 好きな変数や式を登録して監視できる Watches
- 停止位置で好きなコードを実行して結果を見ることができる Interactive console
- 条件付きブレークポイント
ぜひ使いこなして快適なデバッグライフを。