🐞

Docker環境のRailsアプリをVSCodeでデバックする

2024/06/14に公開

はじめに

Rails7から標準添付された「debug」とVSCode拡張機能「VSCode rdbg Ruby Debugger」を利用してDockerコンテナのRailsアプリをステップ実行でデバッグが出来る環境をつくります。

動作環境

Rails 7 +MySQLのDocker環境構築 で構築した環境を使います。
Ruby 3.2.2
Rails 7.0.8
MySQL 8.0

vscode拡張機能「VSCode rdbg Ruby Debugger」を導入

VSCodeの拡張機能で「rdbg」と検索し「VSCode rdbg Ruby Debugger」をインストール

設定

デバック用に設定を変更します。

compose.ymlの変更

compose.yml
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      TZ: "Asia/Tokyo"
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db/data:/var/lib/mysql
    ports:
      - '3306:3306'
    restart: always
  api:
    build:
      context: .
      dockerfile: ./api/Dockerfile
-   command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b '0.0.0.0'"
+   command: >
+     bash -c "
+       rm -f tmp/pids/server.pid &&
+       rdbg -n --open --host 0.0.0.0 --port 12345 -c -- bundle exec rails s -p 3000 -b '0.0.0.0'
+     "
    volumes:
      - ./api:/api
    ports:
      - '3000:3000'
+     - "12345:12345"
    depends_on:
      - db
    stdin_open: true
    tty: true
.vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "rdbg",
      "name": "AttachLocal",
      "debugPort": "localhost:12345",
      "localfsMap": "/:${workspaceFolder}",
      "request": "attach",
    }
  ]
}

localfsMapは, /コンテナ内のパス:${workspaceFolder}になります。

起動とデバッグ

サーバーを起動してデバッグ

Railsサーバーを起動してデバッガーが12345ポートで待機しているのを確認します。
起動すると ログにDEBUGGER: Debugger can attach via TCP/IP (0.0.0.0:12345)と出力されます。

VSCodeでデバック

  • ①をクリックして【Run and Debug】に移ります。

  • ②をクリックしてデバックを実行します。

  • ブレイクポイントを設定してアクセスします

  • curl でアクセスします

curl -X GET http://localhost:3000/api/v1/authors
  • 設定したブレイクポイントで止まるので、操作バーで処理を進めます。( Debug actions )

  • VARLABLESなどで変数を確認できます。

Discussion