0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VS Code × WSL × Rails初心者向け デバッグ実行の設定方法とハマったポイント

0
Posted at

はじめに

Rails開発をしていると、

  • 処理がどのように流れているのか分からない
  • Serviceクラスの中で何が起きているのか確認したい
  • GraphQLのリクエストを1行ずつ追いたい

という場面があります。

そのようなときに便利なのがVS Codeのデバッグ機能です。

今回はWSL上で動作するRailsアプリをVS Codeからデバッグ実行する方法と、実際に遭遇したトラブルの解決方法を紹介します。

環境は以下を想定しています。

  • Windows
  • WSL(Debian/Ubuntu)
  • Ruby on Rails
  • VS Code
  • GraphQL

デバッグを導入する目的

例えばGraphQLのリクエストが実行された際、

GraphQL Query
↓
Resolver
↓
Service
↓
Repository
↓
Response

の流れを追いたいことがあります。

通常のログ確認だけでは分かりにくい処理も、

  • 現在の変数の値
  • 呼び出されるメソッド
  • 処理の流れ

を1行ずつ確認できます。


事前準備

Ruby Debug拡張機能をインストール

VS Codeの拡張機能で以下をインストールします。

VSCode rdbg Ruby Debugger

提供元

Koichi Sasada

debug gemを確認

Gemfileに以下が存在することを確認します。

group :development do
  gem "debug"
end

なければ追加してインストールします。

bundle install

launch.jsonを作成する

VS Codeで

Run and Debug
↓
create a launch.json

を選択します。

作成されたファイルを以下のように編集します。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "rdbg",
      "name": "Debug Rails",
      "request": "launch",
      "script": "bin/rails",
      "args": ["server"],
      "cwd": "${workspaceFolder}",
      "env": {
        "RAILS_ENV": "local"
      }
    }
  ]
}

各設定の意味

type

"type": "rdbg"

Rubyの標準デバッガーを利用します。


request

"request": "launch"

新しくRailsプロセスを起動します。


script

"script": "bin/rails"

実行対象のファイルです。


args

"args": ["server"]

最終的に以下が実行されます。

bin/rails server

env

"env": {
  "RAILS_ENV": "local"
}

実行環境を指定します。

ここが今回一番重要なポイントでした。


ブレークポイントを設定する

確認したい行番号の左側をクリックします。

赤い丸が表示されればOKです。

def execute(user_id:)
  service = SampleService.new

  result = service.call(user_id)

  result
end

デバッグを開始する

F5キーを押します。

正常に起動するとデバッグコンソールに

=> Booting Puma
=> Rails application starting

が表示されます。


GraphQLを実行する

GraphQLクライアントやAPIツールからリクエストを送信します。

query {
  sampleData(id: 1) {
    name
  }
}

ブレークポイントに到達すると処理が停止します。


よく使う操作

キー 内容
F5 続行
F10 次の行へ
F11 メソッド内部へ入る
Shift+F11 メソッドから戻る

特にF11は非常に重要です。

service.call

でF11を押すと、

def call

の中へ移動できます。


Variablesで値を確認する

停止中は左側のVariablesから変数を確認できます。

user_id

1

ハマったポイント

今回一番苦戦したのが以下のエラーでした。

ActiveRecord::ConnectionNotEstablished
connection refused

原因

普段は

bin/dev

で起動していました。

しかしVS Codeのデバッグは

bin/rails server

を直接実行します。

その結果、

local環境

ではなく

development環境

で起動してしまい、

別のDB設定を参照していました。


解決方法

launch.jsonに環境変数を追加しました。

"env": {
  "RAILS_ENV": "local"
}

これで普段の起動方法と同じ環境でデバッグできるようになりました。


まとめ

Rails初心者のうちはログだけで処理を追うのは大変です。

VS Codeのデバッグ機能を利用すると、

  • Resolver
  • Service
  • Model
  • 外部API呼び出し

などを1行ずつ確認できます。

特にF11によるステップインは、Railsの処理フローを理解するために非常に役立ちます。

最初は設定に少し苦戦するかもしれませんが、一度環境を整えてしまえば開発効率が大きく向上するのでおすすめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?