Railsリモートデバッグ(RubyMine＋Vagrant) @Windows10 Technical Preview

Windows PCでRails開発環境を作ったのでメモ｡

VagrantでつくったVMでRailsを立ち上げて、RubyMineからデバッガを接続します。RubyMineを使うとGUIからデバッグができるので､開発や問題解決の効率を上げることができます｡

### 環境
- ホストOS
    - Windows10 TC Build 9860
    - RubyMine RM-139.160
    - VM Oracle Virtual Box 4.3.12
- ゲストOS
    - CentOS 6.5 x86-64
    - ruby 2.1.2p95 (2014-05-08 revision 45877) x86_64-linux (rbenv でインストール(rbenv 0.4.0-129-g7e0e85b))
    - Rails 4.1.7

### 概要
- Rails環境を､VagrantのSynced Folder(```/vagrant```)の下に作成
- RubyMineにて､Rails Applicationプロジェクトを新規作成する｡このとき上記フォルダをRootとして設定
- Deployment設定で､ホストのプロジェクトとゲストのRailsアプリケーションディレクトリを関連づけ
- ホストのRubyランタイムをプロジェクトのリモートSDKとして登録
- RubyMineで一度Bundle Installを実行
- デバッグできる!

### 手順
#### Rails環境

Vagrant upしてから､ゲストOSにログインして､VagrantのSynced Folderの下に作ります｡今回は```/vagrant/project```をRailsのRootフォルダにしました｡

(環境構築の手順は省略します｡)

以下のような構成になりました｡

```
[vagrant@vagrant project]$ pwd
/vagrant/project

[vagrant@vagrant project]$ ls -ltr
total 18
-rwxrwxrwx 1 vagrant vagrant  478 Nov  1 02:31 README.rdoc
-rwxrwxrwx 1 vagrant vagrant  249 Nov  1 02:31 Rakefile
-rwxrwxrwx 1 vagrant vagrant  154 Nov  1 02:31 config.ru
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:31 app
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:31 bin
drwxrwxrwx 1 vagrant vagrant 4096 Nov  1 02:31 config
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:31 db
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:31 lib
drwxrwxrwx 1 vagrant vagrant 4096 Nov  1 02:31 public
drwxrwxrwx 1 vagrant vagrant 4096 Nov  1 02:31 test
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:31 vendor
-rwxrwxrwx 1 vagrant vagrant 1358 Nov  1 02:35 Gemfile
-rwxrwxrwx 1 vagrant vagrant 2896 Nov  1 02:36 Gemfile.lock
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:37 tmp
drwxrwxrwx 1 vagrant vagrant    0 Nov  1 02:37 log

[vagrant@vagrant project]$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

[vagrant@vagrant project]$ which ruby
/usr/local/rbenv/shims/ruby
```
#### RubyMine プロジェクト作成
ホストOSに戻ってRubyMineを起動｡Create New Project｡
![project_creations.PNG](https://qiita-image-store.s3.amazonaws.com/0/55737/27711c1f-a61e-5263-084f-6f401216c197.png)
注意点は2つ｡

- Project Type
    - Rails Application を選びます｡
- Location
    - ゲストOSで作ったRailsのRootディレクトリを選びます(Synced Folder下に作ったはずなので､ホストOSから選択できるはず)｡
      以下の例では､centos6.5-ruby-readyがSynced Folderです｡その下のprojectがRailsのRootディレクトリなので､それを選びます｡

![project_directory_selection.png](https://qiita-image-store.s3.amazonaws.com/0/55737/697b619c-a762-1399-d340-d96bc8cef8a5.png)

#### Deployment設定
で､ホストのプロジェクトとゲストのRailsアプリケーションディレクトリを関連づけ
プロジェクト作成後､RubyMineが立ち上がったらまずDeploymentの設定をして､ホストOSのプロジェクトフォルダとゲストOSのRailsディレクトリを関連づけます｡

Tools → Deployment → Configrationsでウインドウを開き、

左上の+アイコンをクリックして新規作成後､ConnectionタブにてVagrantの環境に接続します｡Root Pathは```/vagrant```を指定します｡

![deployment_config_connection.png](https://qiita-image-store.s3.amazonaws.com/0/55737/93fb5765-f7db-8f9e-e751-b1855440d279.png)

Mappingsタブにてディレクトリの関連づけ｡

Local pathとDeployment path on server 'XXXXXX'のディレクトリを合わせます｡

![deployment_config_mappings.png](https://qiita-image-store.s3.amazonaws.com/0/55737/e3282d48-58b0-a376-8c56-674676991c24.png)

#### Ruby SDKの設定
ホストのRubyランタイムをプロジェクトのリモートSDKとして登録します｡

File → Settings → Languages & Frameworks → Ruby SDK and Gems

+アイコンを押して､new Remote…

![settings_sdk.png](https://qiita-image-store.s3.amazonaws.com/0/55737/e331c80f-c300-2a3f-ff90-76487e2d5472.png)

ラジオボタンでDeployment Configlationを選択｡Ruby Interpreter pathにてリモートのRubyバイナリを選択します｡rbenvをつかってるので､ ```/usr/local/rbenv/versions/2.1.2/bin/ruby```

![settings_sdk_selection.png](https://qiita-image-store.s3.amazonaws.com/0/55737/b9a20500-3ebc-adc2-ed83-7bb53b34b294.png)

#### RubyMineにGemをDownload
RubyMineで一度Bundle Installを実行すると､どうやらホストOSのRubyMineのキャッシュにGemがダウンロードされるようです｡これをやっておかないとRubyMineからデバッグが起動できませんでした｡

![bundle_install.png](https://qiita-image-store.s3.amazonaws.com/0/55737/65537c78-455b-7585-e4da-94ff6373ce72.png)

以上でRubyMineでデバッグをする準備は完了です｡

### 試しにデバッグしてみる
せっかく作ったので本当にデバッグできるか､適当にScaffoldを作って試してみましょう｡

#### Scaffold

ActionからScaffoldを選んで､適当にモデルとフィールドを指定して作成します｡

![scaffold.png](https://qiita-image-store.s3.amazonaws.com/0/55737/396bcd9c-a49a-6f7a-003f-397ed7803b9c.png)

#### db:migrate
Scaffoldを作っただけではDBができていないので､Actionからdb:migrateを実行します

![db_migrate.png](https://qiita-image-store.s3.amazonaws.com/0/55737/72ec07d5-e995-81a6-554a-23571507e01a.png)

#### デバッグモードでサーバ起動
Run → Debug… でデバッグメニューを開いて
![run_debug.png](https://qiita-image-store.s3.amazonaws.com/0/55737/06f93066-8ecf-c112-7a80-1ba7b7e8468c.png)

Developmentのデバッグを選択します
![debug.png](https://qiita-image-store.s3.amazonaws.com/0/55737/ecdbea5c-d2f1-0944-a4b6-4159fd1d807d.png)

以下のようにコンソールが表示されれば､デバッグモードでサーバが起動しています｡
![debug_start.png](https://qiita-image-store.s3.amazonaws.com/0/55737/114e93f3-db28-343a-5af0-bacfe86e965e.png)

#### デバッグ!
indexにブレークポイントを張ってアクセスしてみます

ブレークポイントはほかのIDE等と同じで､エディタ行の左枠外?をクリックすれば配置できます｡
![breakpoint.png](https://qiita-image-store.s3.amazonaws.com/0/55737/ee0ac388-7b88-dcc8-848d-892dc5b3336c.png)

ブラウザからURLにアクセス
![access_server.png](https://qiita-image-store.s3.amazonaws.com/0/55737/69f61d4d-39e4-cf44-afb6-fbfcb31b065c.png)

ブレークポイントで処理が止まりました｡変数の中身も確認できます｡
![debugging.png](https://qiita-image-store.s3.amazonaws.com/0/55737/859572c6-4d2f-c67e-fc14-f98bcc2d975b.png)