🐡

VSCodeでRails開発環境を整える

2021/04/04に公開

VSCodeでRails開発するまでのメモ。

基本的な言語機能のセットアップ

VSCodeのRuby拡張機能であるRubyとVSCode Rubyを入れます。

FormatterおよびLinterとして使用するGemをインストール。
ここではFormatterとLinterにrubocopを選んでます。
(その他使用可能なツールはFormattingLintingを参照)

gem install rubocop

VSCodeのワークスペースを以下のように設定します。

.vscode/settings.json
{
  // 基本的な言語機能のサポート
  "ruby.useLanguageServer": true,
  
  // Formatで使用するツールを`bundle exec`で実行するかどうか
  // ここではグローバルにインストールしたGemを使うのでfalseに指定
  "ruby.useBundler": false,
  
  // `Format Document`で使用するフォーマッターにrubocopを指定
  "ruby.format": "rubocop",
  
  // Linterにrubocopを指定
  "ruby.lint": {
    "rubocop": {
      "useBundler": false
    }
  },
}

VSCodeを起動している場合は再起動します。

ここまでで、以下のようにLinterが動作すればok。

またCmd + Shift + PでコマンドパレットからFormat Documentを実行すると、フォーマットが実行されます。
(ちょっと遅い、、)

インテリセンスを追加する

Solargraphをインストールします。

gem install solargraph

VSCode拡張Ruby Solargraphをインストールします。

これによってGo to DefinitionPeekが出来るようになります。

また一部オートコンプリートやインラインドキュメント(ホバーしたときにチップ表示されるやつ)が使用できるようになります。

デバッグ環境のセットアップ

VSCode上でブレークポイントを貼ってデバッグできるようにしていきます。

ローカルでRailsサーバーを起動している場合

ruby-debug-ideをインストールします。

gem install ruby-debug-ide debase

通常のbin/rails sの代わりに以下のコマンドを実行します。

rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 1234 -- bin/rails s

これでデバッガーが待機状態になるので、VSCode側からデバッグセッションを実行します。

プロジェクトのルートに.vscode/launch.jsonを作成して、以下の内容を記述します。

launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for rdebug-ide",
      "type": "Ruby",
      "request": "attach",
      "remoteHost": "127.0.0.1",
      "remotePort": "1234",
      "remoteWorkspaceRoot": "${workspaceRoot}"
    }
  ]
}

Cmd + Shift + Pでコマンドパレットを開き、Debug: Start Debuggingを実行します。

正しく繋がれば、Railsサーバーが起動し、VSCodeのデバッグセッションが開始されます。

Dockerで起動している場合

Gemfileに同じくruby-debug-ideを記述しインストールしておきます。

...
group :development, :test do
+ gem 'ruby-debug-ide'
+ gem "debase"
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

docker-compose.ymlで実行するコマンドを以下のように変更します。

docker-compose.yml
command: bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s -p 3000 -b 0.0.0.0
volumes: 
  - .:/sample_rails_app
ports:
  - "1234:1234"
  - "3000:3000"
  - "26162:26162"

Dockerfileでもデバッグで使用するポート(1234と26162)を公開しておきます。

Dockerfile
EXPOSE 3000 1234 26162

この状態でdocker-compose upすると、デバッガーが待機状態になるので、VSCode側からデバッグセッションを実行します。

プロジェクトのルートに.vscode/launch.jsonを作成して、以下の内容を記述します。

launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for rdebug-ide",
      "type": "Ruby",
      "request": "attach",
      "cwd": "${workspaceRoot}",
      // ボリューム先に合わせて適宜変更してください
      "remoteWorkspaceRoot": "/sample_rails_app",
      "remoteHost": "0.0.0.0",
      "remotePort": "1234"
    }
  ]
}

Cmd + Shift + Pでコマンドパレットを開き、Debug: Start Debuggingを実行します。

正しく繋がれば、Railsサーバーが起動し、VSCodeのデバッグセッションが開始されます。

Discussion