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?

【Rails8 & Docker】VSCode と rdbg で快適なデバッグ環境構築してみた

Posted at

はじめに

Rails開発でデバッグする時、binding.irbをコードに埋め込んじゃいますよね。
僕もずっとそうだったんですが、毎回コードを書き換えるのが面倒だったり、うっかり消し忘れてコミットしそうになったり...なんてことも。

「もっと楽に、イマドキな感じでデバッグできないかな?」と思って調べてみたら、Rubyの標準デバッガーrdbg (debug gem)Visual Studio Code (VSCode)を連携させる、とても便利な方法があることを知りました。

この記事では、デバッグ環境の構築に挑戦した手順を、備忘録も兼ねてまとめてみました。

この環境が作れると、VSCodeの画面上でブレイクポイントを設定するだけで好きな場所で処理を止められて、変数の中身もリアルタイムで確認できるようになります。binding.irbの手軽さとはまた違った快適さで、デバッグがとても捗りました!

環境

  • Rails 8.0.2
  • Ruby 3.4.3
  • Docker
  • OS Mac

構築手順

Step 1:debug gemのインストール

まず、デバッグに必要な debug gem をプロジェクトに追加します。
Gemfileを開き、:development, :testグループに以下の行を追記してください。

Gemfile
    group :development, :test do
      gem "debug"
      # ... 他のgem
    end

追記したら、Docker コンテナ内で bundle install を実行して gem をインストールします。

bash
    docker compose run --rm web bundle install

Step 2: VSCodeに拡張機能をインストール

次に、VSCodeがrdbgと通信するために必要な拡張機能をインストールします。
VSCode の拡張機能タブを開きます。
「VSCode rdbg Ruby Debugger」と検索します。

Koichi Sasada さんによって公開されている拡張機能をインストールします。
image.png

Step 3: docker-compose.ymlの設定

Dockerコンテナ内で起動したrdbgに、ホストマシン(あなたのPC)のVSCodeから接続できるように、ポートフォワーディングの設定を行います。

docker-compose.ymlファイルのRailsアプリケーションを動かしているサービス(ここではwebとします)に、以下の設定を追加します。

docker-compose.yml
    services:
      web:
        # ... (build, volumesなどの設定)
        command: bash -c "rm -f tmp/pids/server.pid && rdbg -n --open --host 0.0.0.0 --port 34567 -c -- bundle exec rails s -p 3000 -b '0.0.0.0'"
        ports:
          - "3000:3000"
          - "34567:34567" # 👈 デバッグ用にこの行を追加

コマンドの解説:

  • rm -f tmp/pids/server.pid: これは重要なおまじないです。コンテナを強制終了した際などに残ってしまう古いサーバープロセスIDファイルを起動時に削除し、「A server is already running.」というエラーを防ぎます
  • rdbg --open ...: rdbgを起動します
    • --open: デバッガーのフロントエンド(今回はVSCode)からの接続を待ち受けます
    • -c: デバッグを開始するコマンド (--command) のエイリアスです
    • --host 0.0.0.0: Docker コンテナ外からの接続を受け付けるために必要です
    • -p 34567: 待機するポートを指定します
    • -- bin/rails s -b 0.0.0.0: rdbg 経由で実行するコマンドです
  • 34567:34567: rdbg起動時に立ち上げるポートです。ホストとコンテナで同じポート番号をマッピングします

Step 4: VSCode のデバッグ設定(launch.json)

いよいよ VSCodeのデバッグ設定を行います。
この設定ファイルに「どのようにデバッガーを起動し、コンテナに接続するか」を記述します。

  1. VSCode のアクティビティバーから「実行とデバッグ」アイコンをクリックします

  2. launch.jsonファイルを作成します」というリンクをクリックし、デバッガーの選択肢が表示されたらrdbg を選びます
    image.png

  3. .vscode/launch.jsonというファイルが自動で作成されるので、その内容を以下のように書き換えます

launch.json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "rdbg",
          "name": "Attach to Docker Container",
          "request": "attach",
          "debugPort": "localhost:34567",
          "localfsMap": "${workspaceFolder}",
        }
      ]
    }
  • type: rdbgを指定します。インストールした拡張機能に対応します
  • name: デバッグ構成の分かりやすい名前です(例: "Attach to Docker Container")
  • request: attach`を指定します。すでに起動しているデバッグプロセスに接続するためです
  • debugPort: rdbgが待機しているポートを指定します。docker-compose.ymlで設定したものと同じ localhost:34567 を指定します
  • localfsMap: ホストマシン上のプロジェクトのパスを指定します。${workspaceFolder} は VSCode で開いているフォルダのルートパスを指す変数で、通常はこのままでOKです

Step 5: デバッグの実践!

すべての設定が完了しました。実際にデバッグを動かしてみましょう!

  1. デバッグモードでRailsサーバーを起動
    Railsサーバーを起動すると、ログにDEBUGGER: Debugger can attach via TCP/IP (0.0.0.0:34567)と出力されます。

  2. VSCodeからデバッガーにアタッチ

  3. VSCodeの 「実行とデバッグ」パネル を開きます

  4. 画面上部のプルダウンメニューから、先程launch.jsonで設定した名前(Attach to Docker Container)を選択します

  5. 緑色の 「デバッグの開始」ボタン(▶️) をクリックします
    image.png

成功すると、VSCode の下部にオレンジ色のステータスバーが表示され、デバッグツールバーが出現します。これで接続は完了です!

VScode上のデバッグツールの操作については、割愛しますが、ブレイクポイントで処理を停止することで、以下のようなことができます。

  • 変数の確認: 左側の「変数」パネルで、ローカル変数やインスタンス変数の中身をリアルタイムで確認できます

  • ステップ実行: 上部のデバッグツールバーで、一行ずつ処理を進めたり(ステップオーバー)、メソッドの中に入ったり(ステップイン)できます

  • デバッグコンソール: デバッグコンソールで直接 Ruby コードを実行し、その時点での変数の状態を操作することも可能です
    image.png

VScodeのデバッグツールの操作については、以下のような記事を確認してみてください。
VScodeデバッグツールの使い方

まとめ

最後までお読みいただき、ありがとうございました!

僕もこの方法を初めて知った時、「もっと早く知りたかった!」と心から思いました。エラーの原因が分からず長時間悩んでいたのが、嘘のように解決できた経験があります。

あなたにとっても、このデバッグ環境が「難しいエラーを解決できた!」という成功体験に繋がれば、とても嬉しいです。

他にこういった設定方法あるよ!とかコメントで教えていただければありがたいです。

参考

公式リポジトリ: rdbg
VScodeマーケットプレイス: rdbg

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?