VS Code Recipes でRailsのデバッギング環境を構築してみた
Microsoft がVisual Studio Codeの設定のレシピをGitHub上に公開している。 その中に、Ruby on Railsのデバッグ環境の構築方法があったので、試しにそれに倣って作ってみた。
やってみた中で、自分なりに置き換えた部分がありました。
デバッグで使うgemをGemfileに追加
デバッグで使用するruby-debug-ide
とdebase
をGemfile
に追加する。
理由としては2つある。
- それらのgemがデバッグに必須であるので、Railsアプリケーション開発に必要なものとして必要であることを明示するため。
- あとで作成するデバッグの設定ファイル
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
gem
のrequire
オプションにfalse
を指定している。これは、Railsが起動時にBundle.require
で依存しているgemを全てrequire
で読み込むのだが、アプリケーション自体には必要無いので読み込まないようにする。
このオプションを指定しなくてもデバッグはできるのだが、必要ないものはあえて読み込まないでおくほうが健全だと思う。
launch.json
デバッグ時に起動するアプリケーションやスクリプトを記述するためのlaunch.json
ファイルも、vscode-recipesにサンプルが記載されている。
サンプル中に出てくる、rdebug-ide
やbundler
コマンドのパスを指定するオプションpathToRDebugIDE
とpathToBundler
は、絶対パスで指定する必要がある。
まず、上でGemfileに依存を記述したので、bundle binstubs
コマンドを使って、bin
ディレクトリ配下にコマンドをインストールする。
bundle binstubs ruby-ide-debug bundler
launch.json
内では、予め用意された変数を使ってパスなどを生成することができる。
ここで、VS Codeが開いているワークスペースの絶対パスを表すworkspaceRoot
を使い、先程のpathToRDebugIDE
とpathToBundler
の値を指定する。
具体的には、デバッグのために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" ] }
同様に他の設定についても、pathToRDebugIDE
やpathToBundler
の値を置き換えていく。
一通り置き換えてみたものがこちら。
https://github.com/satoryu/ChatterBox/blob/master/.vscode/launch.json
他のレシピも良さそうなので、機会があったら試してみたい。