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だけで結構です)
gem 'ruby-debug-ide'
gem 'debase'
でもって、gemを入れましょう。
bundle install --path vendor/bundler
最後にspringのファイルを吐いておきます。
bundle exec spring binstub --all
もしWindowsならspringは使えないと思うので以下のファイルを仕込んでおけば大丈夫かも。
#!/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」と打った最初の拡張機能をインストールします。
VS Codeでrdebug-ideの実行設定をします。そのファイルを以下のように作ります。
{
"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
での実行が必要ですが、それがいるよってことを指しています。(逆にシステムの環境に入れた人はいりません。)
#デバッグ実行用コードの作成
上の環境構築および画像では以下のことを先に実行し、デバッグするコードを作成しています。必要なければこちらは読み飛ばして下さい。
bundle exec rails g scaffold book
書籍情報の機能があるとする前提で上記のコマンドを打ち込み、controller等を作成します。
で、migrateファイルを以下のように編集(本のタイトルと著者を追加)
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にてデバッグビューに切り替えて、デバッグの実行ボタンを押します。
するとコンソールに以下の文字が
=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Runrails 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/
を叩くと
正常に画面が開けます。
VS Code側で止めたい場所にブレークポイントをはります。
上記の画像でいう赤丸部分にカーソルを持っていき、クリックするとブレークポイントを設置できるはずです。
(ここでは登録する直前でブレークポイントをはっています)
さきほどのブラウザ画面で「New Book」のリンクを押下すると新規登録画面に行くの、「Create book」ボタンを押下するとブレークポイントで止まるはずです。
見たい変数を選択し、右クリックで「デバッグ:ウォッチに追加」を選べばウォッチに追加でき、中身を参照できます。
Rubymineという強力なIDEもステップ実行が可能ですが、このVS Codeも可能になったのでRubyおよびRailsの開発が容易になったのではないでしょうか。
ちなみに自分はSublime textでは標準でジャンプ機能がありますが、AtomやこのVS Codeでは存在しないので、それが実装されればSublime textから離れたいです。
安定の誤字脱字等は後で修正します。