rbenvを使っている場合のremote-debug-ideの注意点

  • このエントリーをはてなブックマークに追加

Windows10でvscodeを起動し、Remote Development(WSL)で実行しています。
WSL(ubuntu18.04)ではanyenv->rbenvでrubyの環境を構築してあり、アプリケーションはsinatraを利用しています。

普段実行してるコマンドであるbundle exec rackup config.ruをdebug実行するにはbundle exec rdebug-ide --host 0.0.0.0 --port 1234 -- bundle exec rackup config.ruであるが、実行してもNo Such File ErrorかSyntaxErrorが発生します。前者はbundleをフルパスで指定していないから。後者はrbenvのbundleコマンドはruby実装ではなくshell scriptで実装されたラッパーだからである。
現在利用しているbundleコマンドの最終的なパスはrbenv which bundleで取得できるので、以下のように実行するとOKである。

bundle exec rdebug-ide --host 0.0.0.0 --port 1234 -- $(rbenv which bundle) exec rackup config.ru

設定手順一覧

1. VSCodeのRemote Development (WSL)を構築する

ここは本筋とは違うので省略。Remote DevelopmentがONの場合はフッタがこんな感じで表示されます。

2. VSCodeのExtensionをインストールする

Extensionをインストール後はVSCodeの再起動が必要。

3. VSCodeのデバッグ設定の追加

VSCodeのメニューから、デバッグ > 構成の追加 > Ruby > Listen for rdebug-ideを選択。

次のファイルが生成される。

.vscode/launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"name": "Listen for rdebug-ide",
"type": "Ruby",
"request": "attach",
"remoteHost": "127.0.0.1",
"remotePort": "1234",
"remoteWorkspaceRoot": "${workspaceRoot}"
}
]
}

RemoteDevelopment先がWSLの場合は、remoteWorkspaceRootを書き換えなくてもOKでした。

4. Gemfileに必要なgemを追加

開発環境の時だけ。

group :development do
gem "ruby-debug-ide"
gem "debase"
end

bundle install

5. 実行

Terminalを立ち上げると、bashが起動するはずなので、次のコマンドを実行。

プログラムの実行
bundle exec rdebug-ide --host 0.0.0.0 --port 1234 -- $(rbenv which bundle) exec rackup config.ru
実行結果
Fast Debugger (ruby-debug-ide 0.7.0, debase 0.2.4.1, file filtering is supported) listens on 0.0.0.0:1234

VSCodeのメニューから、デバッグ > デバッグの開始を実行。次のようにアプリが実行されたログが出れば成功。

アプリ起動ログ
[2020-03-06 14:32:50] INFO  WEBrick 1.4.2
[2020-03-06 14:32:50] INFO ruby 2.6.3 (2019-04-16) [x86_64-linux]
[2020-03-06 14:32:50] INFO WEBrick::HTTPServer#start: pid=31802 port=9292

後は、VSCode上でブレークポイントを設定するなどして、いつものようにデバッグできる。

参考