環境
- VSCode 1.25.1
- macOS 10.13.6
- ruby 5.2.1
- rails 5.2.0
問題
- そもそも debug を実行してもエラーになる
- なんとか debug 実行出来るようになったが、ブレークポイントで止まらない
そもそも debug を実行してもエラーになる
下記2つは Visual Studio CodeでRubyのデバッグをする - Tbpgr Blog が参考になった。
bundle config を変更
- bundler で生成する bin ファイルの置き場所を
./bin
からvendor/bundle/bin
に変更 - bundler のインストール先を
vendor/bundle
では無くした
結果的に下記のような config になる
---
BUNDLE_JOBS: "4"
BUNDLE_BIN: "vendor/bundle/bin"
launch.json をリセット
色々なサイトに書いてある方法を試したが、古い書き方だったり、そもそも Terminal で debug-ide を起動しろだったり書いてあるがそれが必要なかった。
まず launch.json を初期化した。
-
.vscode/launch.json
を削除 - コマンドパレット
⌘+P
から>debug: Open launch.json
を実行 - 言語選択画面で
ruby
を選択
また、今回は Rails なので、 "useBundler": true
オプションを各設定に追加する。
ブレークポイントで止まらない
上記の設定で debug 実行まで行えるようになったが、ブレークポイントで止まらない状態になった。
新規に Rails のプロジェクトを作成して同様に設定してみると、普通に動くので何か原因があるのではないかと探っていると、どうやら spring
が悪さをしているよう。
なので、launch.json に今度は env
設定を追加し、spring を動かないようにした。
ただ、同様の設定を行っても rails server
ではブレークポイントで止まらない…。
launch.json
その他、不要なファイルパス設定などを削除したりして最終的に出来上がった launch.json は下記の通り。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for rdebug-ide",
"type": "Ruby",
"request": "attach",
"cwd": "${workspaceRoot}",
"remoteHost": "127.0.0.1",
"remotePort": "1234",
"remoteWorkspaceRoot": "${workspaceRoot}"
},
{
"name": "Rails server",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "bin/rails",
"args": [ "server" ],
"showDebuggerOutput": true,
"useBundler": true,
"env": { "DISABLE_SPRING": "1", "RAILS_ENV": "development" }
},
{
"name": "RSpec - all",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "bin/rspec",
"showDebuggerOutput": true,
"useBundler": true,
"env": { "DISABLE_SPRING": "1", "RAILS_ENV": "test" }
},
{
"name": "RSpec - active spec file only",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "bin/rspec",
"args": [ "-fd", "${file}" ],
"showDebuggerOutput": true,
"useBundler": true,
"env": { "DISABLE_SPRING": "1", "RAILS_ENV": "test" }
}
]
}
ENV管理
直接関係ないが行ったこととして、direnv を利用して Rails で使う環境変数を設定していたのだが、VSCode ではこいつを読む方法がないみたいだったので(昔はenvFile
オプションがあったが今は無くなったっぽい)、dotenv-rails gem を利用する方法に切り替えることで対応した。
終わりに
- Spring が使えないとなると、どうしても実行開始に時間がかかってしまい辛いので、普段はrunning spec files を使って今まで通り
binding.pry
を使ったほうが便利そう。 - VSCode の設定情報はオフィシャルの最新情報以外はあまり参考にしない(これは他も同じだけど…
- この情報もいつ古くなるかわからないので注意してください。