Railsのデバッグ環境等を整備する


デバッグまわりのgemを整理してみました


## エラー画面を見やすくする「better_errors」
無機質なRailsの標準のエラー画面が以下のように見やすくなります。

``` Gemfile
group :development, :staging do
  gem 'better_errors'		#追加
end
```

標準のエラー画面
---

![スクリーンショット 2014-02-27 9.22.50.png](https://qiita-image-store.s3.amazonaws.com/0/5669/8256fd6a-3ac4-3b8e-bd01-3eed83c6b2d2.png "スクリーンショット 2014-02-27 9.22.50.png")

better_errorsを導入した場合のエラー画面
---

![スクリーンショット 2014-02-27 9.27.15.png](https://qiita-image-store.s3.amazonaws.com/0/5669/f745df9f-b384-5312-58a4-480394db696d.png "スクリーンショット 2014-02-27 9.27.15.png")


## エラー画面上でREPLが使えるようになる「binding_of_caller」
rails cで出来るような対話的な実行がエラー画面上から行えるようになります

```Gemfile
group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'		#追加
end
```

* 画面上で対話的にコードを実行できる
![スクリーンショット 2014-02-27 9.39.34.png](https://qiita-image-store.s3.amazonaws.com/0/5669/2242cbae-edef-74ae-9931-2f1601cc2240.png "スクリーンショット 2014-02-27 9.39.34.png")



## railsのコンソールを便利にする「pry-rails」
pry-railsを導入するとrailsのコンソール起動時にpryが起動するようになり、pryやpry-railsの便利な機能が使えます
pry-railsはpryに依存しているので下記のようにするとpryも同時にインストールされます

```Gemfile
group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'			#追加
end
```

### ブレークポイントをいれる

プログラム中に以下の記述をすると、ブレークポイントをいれてプログラムを止めることができます

```
   # GET /boards
   # GET /boards.json
   def index
     @boards = Board.all
pry.binding
   end
```

このように「pry.binding」と記述することでその位置でプログラムを止めてコンソールを使うことができます

```
Started GET "/boards" for 127.0.0.1 at 2014-03-04 09:28:21 +0900
Processing by BoardsController#index as HTML
[1] pry(#<BoardsController>)> p @boards
  Board Load (0.3ms)  SELECT "boards".* FROM "boards"
#<ActiveRecord::Relation [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]>
=> [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]
[2] pry(#<BoardsController>)> Board.all
  CACHE (0.0ms)  SELECT "boards".* FROM "boards"
=> [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]
```

### ルーティングを表示

show-routesでルーティングを表示できます

```
pry(main)> show-routes
       Prefix Verb   URI Pattern                   Controller#Action
    positions GET    /positions(.:format)          positions#index
              POST   /positions(.:format)          positions#create
 new_position GET    /positions/new(.:format)      positions#new
edit_position GET    /positions/:id/edit(.:format) positions#edit
     position GET    /positions/:id(.:format)      positions#show
              PATCH  /positions/:id(.:format)      positions#update
              PUT    /positions/:id(.:format)      positions#update
              DELETE /positions/:id(.:format)      positions#destroy
     stickies GET    /stickies(.:format)           stickies#index
              POST   /stickies(.:format)           stickies#create
   new_sticky GET    /stickies/new(.:format)       stickies#new
  edit_sticky GET    /stickies/:id/edit(.:format)  stickies#edit
       sticky GET    /stickies/:id(.:format)       stickies#show_______
```

### モデルを表示

show-modelsでモデルを表示できます

```
pry(main)> show-models
Board
  id: integer
  name: string
  created_at: datetime
  updated_at: datetime
Position
  id: integer
  board_id: integer
  sticy_id: integer
  kpt_type: integer
  sequence: integer
  created_at: datetime
  updated_at: datetime
Sticky
  id: integer
  memo: string
  deleted: boolean
  created_at: datetime
  updated_at: datetime
```

## pryのデバッグでステップ実行などを行なえる「pry-debugger」

ステップ実行などが出来るようになります

```Gemfile
group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'
  gem 'pry-debugger'	#追加
end
```

以下のように定義するとショートカットを使えます

```~/.pryrc
if defined?(PryDebugger)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

```

## ルーティングをブラウザで表示できる「sextant」

sextantを導入すると、ルーティングをブラウザ上で確認できます。

```Gemfile
group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'
  gem 'sextant'			#追加
end
```

`http://localhost:3000/rails/routes`にアクセスしてルーティングを確認できます。

![スクリーンショット 2014-03-06 9.34.25.png](https://qiita-image-store.s3.amazonaws.com/0/5669/9cca5912-05d0-a952-c074-7313664b7df6.png "スクリーンショット 2014-03-06 9.34.25.png")

http://qiita.com/kanekomasanori@github/items/e705d6b9fbfd6de6c63f