Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
45
Help us understand the problem. What is going on with this article?
@kanekomasanori@github

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

More than 5 years have passed since last update.

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

エラー画面を見やすくする「better_errors」

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

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

標準のエラー画面

スクリーンショット 2014-02-27 9.22.50.png

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

スクリーンショット 2014-02-27 9.27.15.png

エラー画面上でREPLが使えるようになる「binding_of_caller」

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

group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'       #追加
end
  • 画面上で対話的にコードを実行できる スクリーンショット 2014-02-27 9.39.34.png

railsのコンソールを便利にする「pry-rails」

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

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」

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

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を導入すると、ルーティングをブラウザ上で確認できます。

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

45
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
lanches
企業と顧客のよりよい関係をささえるプラットフォーム「MGRe」の開発をしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
45
Help us understand the problem. What is going on with this article?