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

Visual Studio Code（以下：VS Code）の正式版が2016年4月14日にリリースされました。
単なるエディタとして使用していたのですが、[vscode-ruby](https://github.com/rebornix/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適用してるなら[こちら](http://qiita.com/chimame/items/3787a59eca1005b89eac)を参照してもいいと思います）

では、下記のコマンドでデバッグ用の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は使えないと思うので以下のファイルを仕込んでおけば大丈夫かも。

```rb: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](https://qiita-image-store.s3.amazonaws.com/0/70363/d3023d33-aa15-a909-3e4d-4c93d6401bf5.png)

![スクリーンショット 2016-04-20 12.51.29.png](https://qiita-image-store.s3.amazonaws.com/0/70363/57f4c79f-5ded-4d20-6ee9-8310e5f10e29.png)

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

```json:.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](https://qiita-image-store.s3.amazonaws.com/0/70363/35b3798b-dfd5-2b48-b8d5-1e3e4763d124.png)


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

```
bundle exec rails g scaffold book
```

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

```rb: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](https://qiita-image-store.s3.amazonaws.com/0/70363/a01e21aa-cf83-0ad1-f4ca-76f96b54cf59.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](https://qiita-image-store.s3.amazonaws.com/0/70363/1d6382de-fe6c-379c-09b7-cac5ba58ca2d.png)
正常に画面が開けます。

VS Code側で止めたい場所にブレークポイントをはります。
![スクリーンショット 2016-04-20 12.34.34.png](https://qiita-image-store.s3.amazonaws.com/0/70363/599aa21e-498c-c2dc-8bd2-6fc710140549.png)
上記の画像でいう赤丸部分にカーソルを持っていき、クリックするとブレークポイントを設置できるはずです。
（ここでは登録する直前でブレークポイントをはっています）

さきほどのブラウザ画面で「New Book」のリンクを押下すると新規登録画面に行くの、「Create book」ボタンを押下するとブレークポイントで止まるはずです。
![スクリーンショット 2016-04-20 12.38.56.png](https://qiita-image-store.s3.amazonaws.com/0/70363/6bd3225d-0352-432d-6e2d-c769b8fead26.png)

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

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

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


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