VSCodeでDockerを使ったRailsを開発しよう~Ruby3.1以降 Debug編~

VSCodeでDockerを使ったRailsを開発しよう~Ruby3.1以降 Debug編~

概要

開発者のマシンで開発環境を構築する際にDocker及びDocker composeを使って開発することが一般的になりました。いままではターミナルからdocker composeコマンドを実行してテストや動作確認をしていましたが、VS CodeのDev Containers拡張を使いよりVS Codeで便利に開発する方法を提案します。 今回はRuby3.1のdebug.gemを使ったRailsプロジェクトで、VS Codeのデバッグ機能をDev Containersと一緒に使う方法を紹介します。

今回紹介する機能のセットアップ方法は下記リンクの前回の記事を参考にしてください。

目次

目的

VS CodeとDockerを使ってRailsを開発している際により便利にします(以下 コンテナと記載されている箇所はDockerコンテナ及びDocker Composeで起動したコンテナ群を指します)

  • VS Codeのデバッグ機能を使ってブレークポイントをGUIで設定することでRubyMineのデバッガのようなデバッグ体験する
  • Ruby3.1以降で動いているRailsプロジェクトでdebug.gem(rdbg)を通してデバッグ実行方法を確立する

対象読者

VSCodeを使うRailsエンジニア

PR

UZUMAKIではアジャイル開発で新規事業の開発から、大規模Webアプリケーションのアーキテクチャ更新などの開発をしています。

お問い合わせはUZUMAKIのHPのお問合せフォームから

本文

準備

本記事のサンプルコードは下記URL(vscodeタグ)にあります

前提条件

  • M2 CPUのMac
  • Docker desktop for mac: 4.16.2
  • Ruby: 3.2.1
  • Rails: 7.0.4
  • MySQL: 8
  • ※ 細かいバージョンはDockerfile、docker-compose.ymlに記載
  • rails new コマンドで適当なRailsプロジェクトを作成し、Post, Commentモデルをscaffoldで作成ずみ

環境構築については一つ前のBlogを参考にしてください。 今回必要な拡張機能のVSCode rdbg Ruby Debugger のインストールもしています。

debug.gemを利用したデバッグ設定

Ruby3.1から導入されたdebug.gemを使った設定を説明します。

※ ワークアラウンド的なこともしており、不明な点もあるのでご承知おきください。launch.json 内のコマンドで bundle exec railsはうまく動かないがbin/rails なら動くなどまだ不明な点があります

最初にVS Codeの右側のパネルにあるデバッグ部分で利用する .vscode/launch.json を作成します。

image

{
    "version": "0.2.0",
    "configurations": [
        {
            //Rails serverを起動します
            "name": "Debug Rails",
            "type": "rdbg",
            "request": "launch",
            // "command": "bundle exec rails", //bundle exec rails だとデバッガで止まらない
            "command": "bin/rails",
            "script": "s",
            "args": ["-b","0.0.0.0"],
        },
        {
            // アクティブになっているRspecファイルのテストを実行します
            "name": "Debug Rspec with current file",
            "type": "rdbg",
            "request": "launch",
            "command": "bundle exec rspec",
            "script": "${file}",
            "args": [],
            // 実行コマンドをウインドウで確認。特定行の実行などオプションを指定しやすくする
            "askParameters": true
        }
    ]
}

Railsをデバッグ起動する

Run and DebugのDebug Railsを選択して実行すると、Railsが起動し、ブレイクポイントで止めることができます。

image
image

Rspecをデバッグする

対象のテストコードのあるファイルをエディタの最前面に表示してから、Debug Rspec with current file を選択すると、そのテストコードを実行します。

image

image

Tips デバッグ実行のショートカット

F5で現在アクティブになっている方を実行します。

またやShift+F5でデバッガで止めることなく実行できます。

image

考察

TerminalでRails serverの起動やRspecの実行する場合のPros/Consを比較します

Pros

  • ブレークポイントを一時的に有効/無効を制御できるので binding.debug 行をコードに挿入する場合だと必ず止まってしまうので、調査しやすい
    • 特にRails serverを起動してバグの原因の調査をする場合に便利
    • 一旦ループの中でブレークポイントを無効するようなシチュエーションのときに便利
image
  • GUIでStep Overなどデバッグで必要な機能を実行できるので直感的、またF10などショートカットっもあるのでこのあたりも便利
image

Cons

  • デバッグコンソールで、変数や、メソッド実行するためのパネルに移動したり、ターミナルを表示するのにマウスの操作をするのが面倒
    • 実際、MacのVS codeのショートカットを調整して対策しています
image

まとめ

Docker(Docker Compose)を利用したRailsプロジェクトのローカル開発環境において、Ruby3.1から導入されたdebug.gemを使ったRailsのデバッグ方法を提案しました。

debug.gemを使ったRailsのデバッグ方法は調べてみても、なかなかこれという方法にたどりつかなかったので自らやり方を確立できました。

参考リンク

PR

XではUZUMAKIの新しい働き方や日常の様子を紹介!ぜひフォローをお願いします!

noteではUZUMAKIのメンバー・クライアントインタビュー、福利厚生を紹介!

UZUMAKIではRailsエンジニアを絶賛募集中です。

↓の記事を読んでご興味を持っていただいた方は、ぜひ応募よろしくお願いします!

是非応募宜しくおねがいします!