Rails をInnteliJ IDEAでデバッグする

はじめに

Railsアプリケーションを開発にIntelliJ IDEAを利用し、デバッグ実行を行えるようにする。

色々試してみたが… 結論 remote-debug

IntelliJ IDEAにruby sdkを認識させ、gemsetを設定してみるが、うまくデバッグできることもあったが、再現性に乏しい。rbenv + gemsetでデバッグは正式にサポートされていないのか??
結局、リモートデバッグを利用することにした。リモートデバッグといっても、IDEAの設定をリモートデバッグにして、ローカルのターミナルでrailsを起動するので、新しい環境(サーバ)などは不要。

ruby/rails環境

rubyはrbenvを利用し、gemはrbenv gemsetを利用して管理する。

$ rbenv versions
  system
* 2.4.1 (set by /Users/xxxxx/Develop/Repos/gemset_name/src/.ruby-version)
$ rbenv gemset active
gemset_name global

デバッグツール(gem)のインストール

$ rbenv gemset active
gemset_name
$ gem install ruby-debug-ide
$ gem install debase

IDEA側設定

Project Settings > Project

一応SDKを設定する。
Project SDKにrbenv2.4.1 を選択する。

Run/Debug Configurations

+ボタンからruby remote debugを選択し、以下のように設定を行う。

項目 設定
Server Command rdebug-ide –host 0.0.0.0 –port 1234 –dispatcher-port 26162 – $COMMAND$
Remote host localhost
Remote port 1234
Remote root folder railsアプリケーションのルートフォルダ
Local port 26162
Local root folder railsアプリケーションのルートフォルダ

※ 今回はRemote と Localが同じマシンなので、root folderはいずれも同じになる。

デバッグの実行

リモートでrailsを起動

rdebug-ideでホスト、ポートなどを指定して、railsを起動する。

$ rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- ./bin/rails server
Fast Debugger (ruby-debug-ide 0.6.0, debase 0.2.1, file filtering is supported) listens on 0.0.0.0:1234

debug実行

リモートでrailsを起動した状態で、IDEAのデバッグを実行する。
デバッグを開始し接続ができると、リモート側のコンソールに以下のようにコンソール出力がされる。

=> Booting Puma
=> Rails 5.1.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.4.1-p111), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブレークポイントの設定

あとは通常通りブレークポイントを設定し、ブラウザなどでrailsのページを開くと、ブレークポイントでデバッガが停止する。