Visual Studio Code の デバッガ で Rails のデバッグをする

結論

1. 以下の二つの gem をインストールします

  • ruby-debug-ide
  • debase

Gemfile に書く場合は development 環境の部分に書きます*1


2. VSCode の デバッグメニュー で「歯車」アイコンをクリックし「環境の選択」から「Ruby」を選びます

  • Ruby が選択肢に出てこない場合は適当な .rb ファイルを一つ開いておきます

f:id:gregminster:20190713223620p:plain

f:id:gregminster:20190713223625p:plain


3. さらにその次の選択肢で「Rails server」あたりを選びます(何でもよい)

  • 設定ファイルのベースとなる内容を選択するところなので、後から編集する限りは何を選んでもいいです

f:id:gregminster:20190714103347p:plain


4. .vscode/launch.json というファイルが作られますので編集します

  • このファイルが最大のキモです

f:id:gregminster:20190713223744p:plain

  • 最低限に動くならば以下の内容でいいです*2
    • ただし、bundler を用いて「1.」の gem を実行する場合は "useBundler": true の行の追加が必須です
    • また、"showDebuggerOutput": true は追記してもいいかなと思います(無くても動きます)
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "NAMAE WO IRERU TOKORO",
      "type": "Ruby",
      "request": "launch",
      "program": "${workspaceRoot}/bin/rails",
      "args": [
        "server"
      ],
      // "useBundler": true,
      // "showDebuggerOutput": true,
    }
  ]
}
  • この設定ファイルは奥深いのでドキュメントを一読しておくとよいです


5. ブレークポイントを設定する

  • 適当にブレークポイントを設定します
  • 一つも設定されていないと Rails のサーバが立ち上がりませんでしたので、もしサーバが立ち上がらない場合は適当にブレークポイントを設定してみてください*3

6. デバッグを開始する(デバッガを起動する)

  • 「▷」ボタンを押してデバッガを起動します
    • 起動に成功するとステータスバーの色が赤くなります*4
    • 「デバッグコンソール」にて Rails サーバが起動されています

f:id:gregminster:20190713235217p:plain

f:id:gregminster:20190714103147p:plain


7. Rails アプリにアクセスしてデバッグを開始する

  • ブレークポイントなどを設定して http://localhost:3000 などのローカルサーバにアクセスしてデバッグを開始しましょう
  • VSCode のデバッガの詳しい説明は別途調べてみて下さい

ハマったところ

  • ブレークポイントが一つも設定されていないと Rails サーバ が起動しない
    • ブレークポイントが設定されていないと Fast Debugger (ruby-debug-ide 0.7.0, debase 0.2.3, file filtering is supported) listens on 127.0.0.1:1234 から先に進まず、サーバが起動しませんでした
  • rdebug-ide コマンドの実行は不要
    • Web 上のいくつかの記事ではコンソールから rdebug-ide コマンドを用いてデバッグサーバを立ち上げるように書いてありますが、VSCode 側がやってくれるのでこれは不要です
  • ruby-debug-ide および debaseGemfile に書いて使う場合は launch.json 内に ”useBundler": true を書く必要がある
    • エラーメッセージが出るので原因はわかるのですが、解決方法として ”useBundler": truelaunch.json に書くというのはプチハマりしました

注意点

  • この記事の内容は macOS 上で実行した内容です
  • プロジェクト配下に .vscode/launch.json が作られるので .gitignore.vscode/ を記載します*5
    • ユーザローカルの ~/.vscode 配下に launch.json を置いても期待通りに動かなかったので、プロジェクト直下に置くしか無いのだと思います*6
  • サーバが WEBrick ですが、特に本質的な問題ではないと思うので気にしないままでいます

参考

参考の参考

*1:require は不要なので require: false を付けてもいいです

*2:2019/07/13 時点

*3:私の環境では

*4:人によるかもしれません

*5:共用したい場合はもちろん書かなくてもよいです

*6:回避が可能であれば方法を知りたいです

Powered by はてなブログ