RailsアプリケーションのRubyMineでのデバッグ開始方法5つ

この記事は[モチベーションクラウドシリーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/mcs) の投稿です。

https://qiita.com/advent-calendar/2022/mcs

`Execute in the context of Rails` を伝えたくて書きました。

---

# Rails server

Railsのプロジェクトを開くと自動で設定されています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/79381940-84e0-278a-8da4-69c481aad506.png)

`Development: アプリケーション名` を選択し、デバッグを開始します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/5064089f-47aa-760f-a3a6-06da5fc90f97.png)

指定したIP addressとPortでアクセスすれば、ブラウザ操作やCurlコマンドなど、RubyMine外からのアクセスで、ブレークポイントで停止します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/324421c8-2b1e-040c-5c93-9075fdda24f7.png)

---

# Rails console

一度 [Tools] > [Run Rails Console...] を実行し、停止します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/4e3e502e-2860-a2b0-347c-3663b9918704.png)

すると `Rails console: アプリケーション名` の設定が自動で作成されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/16a6683f-2b7b-321c-35ef-1f0232d86b49.png)

`Rails console: アプリケーション名` を選択し、デバッグを開始します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/d1f0af98-94f4-8177-9573-809fb9b778ee.png)

Rails Console に何か打ち込んで実行すると、ブレークポイントで停止します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/5520e073-eea5-60ee-6348-c2e115a46dc4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/3dd2c40f-c35b-f43a-7992-d159349137de.png)

---

# rake task

実行したいtaskの三角形から Debugを開始します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/eed6cd01-7f5e-cab2-86da-0464688514d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/91993bdd-168a-831e-9275-67bfa2c099c1.png)

ブレークポイントで停止します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/54b212a6-5989-e17e-bdca-c976625505ea.png)


# テストコード（Minitest, RSpec）

実行したいテストの三角形から Debugを開始します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/1cad1d8e-2c28-19fb-eb24-11741a35f32c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/6973a28d-b96b-f872-bd3b-7636b44f94b4.png)

ブレークポイントで停止します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/826e80a6-68f0-1c3e-79d4-c17033b59090.png)


IntegrationTest や Request spec であれば、呼び出される側の処理（コントローラー等）でも止まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/98bb64f1-9923-f99a-4cbb-c703223c36c2.png)

デバッグしたい Controller や Action が明確な場合は Rails server　ではなく、テストコードから実行をします。
デバッグ開始が楽なのと、再実行が容易なためです。

既存テストに試したいケースがない場合も、テストコードの準備データを書き換えたり、一時的にテストを追加してそれを実行します。

「この画面操作でこのコード通るんだっけ？」くらい未知の場合や、「再現するデータはあるけどまだ原因がわからない」といった場合に、 Rails server で起動して画面操作からデバッグをすることが多いです。

---

# Ruby script

純粋なRubyスクリプトは、ファイルを右クリックするか、　Current Fileを選択してデバッグできます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/c74f3efe-a9c8-5b69-4f64-341ab81e023b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/6392fb57-a29c-c99c-98dd-2ef29dff23ca.png)


## Execute in the context of Rails

Run Configuration で `Execute in the context of Rails` のチェックをつけると Rails 上で動いている状態でデバッグできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/85ffa1e6-bb39-dbaa-8619-95c1f51d1974.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/9f90da79-df2d-1d6b-3a42-7225dd5c54c7.png)

この例でいうと、Active Record の User モデル が使えるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784/0af0b09f-eb1e-4f50-908c-7c17ccdace7d.png)


Rails console だと「デバッグする前ににいくつもデータ準備のコードを事前実行し、その後で初めてデバッグ箇所を実行しないといけない」といったことがあります。

何度もconsoleにコピペするのは面倒なので、使い捨てスクリプトとしてファイルを作成して、こっちでデバッグすることが多いです。

# まとめ

デバッグ自体にも便利な機能がいくつもあります。

例：
- コールスタックの表示
- 変数の中身のインライン表示
- 実行中の変数変更
- 好きな変数や式を登録して監視できる Watches
- 停止位置で好きなコードを実行して結果を見ることができる Interactive console
- 条件付きブレークポイント

ぜひ使いこなして快適なデバッグライフを。

# 参考リンク

- https://www.jetbrains.com/help/ruby/run-debug-configuration.html
- https://www.jetbrains.com/help/ruby/examining-suspended-program.html