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
他のレシピも良さそうなので、機会があったら試してみたい。