Help us understand the problem. What is going on with this article?

Visual Studio Codeを使ってRailsをデバッグ実行してみよう

More than 3 years have passed since last update.

Visual Studio Code(以下:VS Code)の正式版が2016年4月14日にリリースされました。
単なるエディタとして使用していたのですが、vscode-rubyの拡張機能の登場でRubyのデバッグ実行が可能となったようなので、試しにデバッグ実行してみたいと思います。

実行環境

OS:OS X
Ruby:2.2.3
Rails:4.2.6

Rubyがちょっと古いですが、あんまり気にしなくてもいいと思います。

環境構築

とりあえずRailsが動く環境にしないといけないのですが、Rubyのインストールは適当にググって調べればいくらでも出てくるのでそちらを参照下さい。
(macの人は「homebrew rbenv ruby」で検索すれば出てくるし、windowsの人も「ruby インストーラ」で検索すればいくらでも出てくるでしょう。windowsの人でbuild 14316適用してるならこちらを参照してもいいと思います)

では、下記のコマンドでデバッグ用のRailsアプリを作ります。

bundle exec rails new debug_project --skip-bundle
cd debug_project

次に作成されているGemfileを開き、以下の2行を追加します。(わかっているとは思いますがdevelopementのgroupだけで結構です)

Gemfile
gem 'ruby-debug-ide'
gem 'debase'

でもって、gemを入れましょう。

bundle install --path vendor/bundler

最後にspringのファイルを吐いておきます。

bundle exec spring binstub --all

もしWindowsならspringは使えないと思うので以下のファイルを仕込んでおけば大丈夫かも。

bin/rails
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'

以上でRails側の準備ができました。

次に、VS Code側です。
VS Codeを開き、F1を押下し、「拡張機能のインストール」を選び「ext install Ruby」と打った最初の拡張機能をインストールします。
スクリーンショット 2016-04-20 12.51.09.png

スクリーンショット 2016-04-20 12.51.29.png

VS Codeでrdebug-ideの実行設定をします。そのファイルを以下のように作ります。

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

重要なのは"useBundler": trueです。
ruby-debug-ide等をパス指定で入れている場合はbundle execでの実行が必要ですが、それがいるよってことを指しています。(逆にシステムの環境に入れた人はいりません。)

作成したら、こんな感じの配置になっているはずです。
スクリーンショット 2016-04-20 11.59.55.png

デバッグ実行用コードの作成

上の環境構築および画像では以下のことを先に実行し、デバッグするコードを作成しています。必要なければこちらは読み飛ばして下さい。

bundle exec rails g scaffold book

書籍情報の機能があるとする前提で上記のコマンドを打ち込み、controller等を作成します。
で、migrateファイルを以下のように編集(本のタイトルと著者を追加)

db/migrate/yyyymmddhhmmss_create_books.rb
class CreateBooks < ActiveRecord::Migration
  def change
    create_table :books do |t|
      t.string :title
      t.string :author

      t.timestamps null: false
    end
  end
end

最後にmigrateを実行して終わりです。

bundle exec rake db:migrate

デバッグ実行

準備が整ったので、いざデバッグ実行をしてみたいと思います。
まずはデバッグ実行が可能になるようターミナルでrdedug-ideを実行します。

bundle exec rdebug-ide --host 127.0.0.1 --port 1234 --dispatcher-port 26162 -- bin/rails s

蛇足:bin/rails s部分をbundle exec rails sでやってみたのですが、うまくいきませんでした。
すると以下の様なメッセージが表示されるはずです。

Fast Debugger (ruby-debug-ide 0.6.0, debase 0.2.1, file filtering is supported) listens on 127.0.0.1:1234

まだ、railsは起動していません。rdebug-ideが実行待ちとなっている状態です。
ですのでそれを実行してやる必要があります。

次にデバッグ実行の開始をします。
VS Codeにてデバッグビューに切り替えて、デバッグの実行ボタンを押します。
スクリーンショット 2016-04-20 12.05.14.png

するとコンソールに以下の文字が

=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Run rails server -h for more startup options
=> Ctrl-C to shutdown server
[2016-04-20 12:30:07] INFO WEBrick 1.3.1
[2016-04-20 12:30:07] INFO ruby 2.2.3 (2015-08-18) [x86_64-darwin14]
[2016-04-20 12:30:07] INFO WEBrick::HTTPServer#start: pid=8236 port=3000

Railsが立ち上がってくると思います。
その状態でhttp://localhost:3000/books/を叩くと
スクリーンショット 2016-04-20 12.32.16.png
正常に画面が開けます。

VS Code側で止めたい場所にブレークポイントをはります。
スクリーンショット 2016-04-20 12.34.34.png
上記の画像でいう赤丸部分にカーソルを持っていき、クリックするとブレークポイントを設置できるはずです。
(ここでは登録する直前でブレークポイントをはっています)

さきほどのブラウザ画面で「New Book」のリンクを押下すると新規登録画面に行くの、「Create book」ボタンを押下するとブレークポイントで止まるはずです。
スクリーンショット 2016-04-20 12.38.56.png

見たい変数を選択し、右クリックで「デバッグ:ウォッチに追加」を選べばウォッチに追加でき、中身を参照できます。

Rubymineという強力なIDEもステップ実行が可能ですが、このVS Codeも可能になったのでRubyおよびRailsの開発が容易になったのではないでしょうか。

ちなみに自分はSublime textでは標準でジャンプ機能がありますが、AtomやこのVS Codeでは存在しないので、それが実装されればSublime textから離れたいです。

安定の誤字脱字等は後で修正します。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away