MicrosoftVisual Studio Codeの設定のレシピをGitHub上に公開している。 その中に、Ruby on Railsデバッグ環境の構築方法があったので、試しにそれに倣って作ってみた。

github.com

やってみた中で、自分なりに置き換えた部分がありました。

デバッグで使うgemをGemfileに追加

デバッグで使用するruby-debug-idedebaseGemfile に追加する。 理由としては2つある。

  1. それらのgemがデバッグに必須であるので、Railsアプリケーション開発に必要なものとして必要であることを明示するため。
  2. あとで作成するデバッグの設定ファイルlaunch.json 内で、rdebug-ideコマンドのパスを絶対パスとして指定する必要がある。そのパスを開発環境に依存させないようにしたいため。

2については後に出すlaunch.json を見てください。

具体的には、以下のようにGemfileに記述する。

group :development do
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.

  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'ruby-debug-ide', require: false # <= Added
  gem 'debase', require: false # <= Added
end

gemrequireオプションにfalseを指定している。これは、Railsが起動時にBundle.require で依存しているgemを全てrequire で読み込むのだが、アプリケーション自体には必要無いので読み込まないようにする。 このオプションを指定しなくてもデバッグはできるのだが、必要ないものはあえて読み込まないでおくほうが健全だと思う。

launch.json

デバッグ時に起動するアプリケーションやスクリプトを記述するためのlaunch.json ファイルも、vscode-recipesにサンプルが記載されている。

サンプル中に出てくる、rdebug-idebundlerコマンドのパスを指定するオプションpathToRDebugIDEpathToBundler は、絶対パスで指定する必要がある。 まず、上でGemfileに依存を記述したので、bundle binstubsコマンドを使って、binディレクトリ配下にコマンドをインストールする。

bundle binstubs ruby-ide-debug bundler

launch.json内では、予め用意された変数を使ってパスなどを生成することができる。 ここで、VS Codeが開いているワークスペース絶対パスを表すworkspaceRootを使い、先程のpathToRDebugIDEpathToBundlerの値を指定する。

具体的には、デバッグのためにRailsサーバーを起動する設定は、以下のようになる。

{
    "name": "Debug Rails server",
    "type": "Ruby",
    "request": "launch",
    "cwd": "${workspaceRoot}",
    "useBundler": true,
    "pathToBundler": "${workspaceRoot}/bin/bundle",
    "pathToRDebugIDE": "${workspaceRoot}/bin/rdebug-ide",
    "program": "${workspaceRoot}/bin/rails",
    "args": [
        "server",
        "-p",
        "3000"
    ]
}

同様に他の設定についても、pathToRDebugIDEpathToBundlerの値を置き換えていく。

一通り置き換えてみたものがこちら。

https://github.com/satoryu/ChatterBox/blob/master/.vscode/launch.json

他のレシピも良さそうなので、機会があったら試してみたい。