アプリケーションのデバッグ編
Rails解説セミナー
http://railsguides.jp/
セミナーを
始める前に
講義中に参照したリンクはコメント欄で (質問もお気軽に)
講師のターミナルは下記 URL から閲覧できます :)
http://screenx.tv/yasulab
Slide is in SlideShare!
http://www.slideshare.net/yasulab/presentations
質問はいつでもお気軽に!
個別相談は休憩や終了後に :)
Sample App で実験 :)
https://github.com/yasslab/sample_app
1. $ git clone  

https://github.com/yasslab/sample_apps.git
2. 対象のディレクトリに移動後: $ git init ;

$ bundle exec rake db:migrate

$ bundle exec rake db:test:prepare

$ bundle exec rake db:populate
3. $ gem install rails --version 4.0.5
4. $ rbenv install 2.2.2
5. $ gem install rails --version 4.2.3
下準備
Ready?
解説セミナーを
進めていきましょう!
アプリケーションのデバッグ編
Rails解説セミナー
http://railsguides.jp/
• 中級者∼上級者向けの大型リファレンス
• 読み進める順番は特になく、機能毎に解説:
• e.g. Active Record の基礎、バリデーション
• e.g. Action View の概要、フォームヘルパー
• e.g. Action Controller の概要、ルーティング
• 例外: Railsをはじめよう → Rails チュートリアル
• ウェブ版は全編無料! http://railsguides.jp/
Railsガイドとは?
今回のテーマ
Rails アプリケーションのデバッグ
http://railsguides.jp/debugging_rails_applications.html
• デバッグに利用できる View ヘルパー
• Logger の紹介とデモ
• お題: どこのページが一番時間が掛かってる?
• byebug / web-console の紹介とデモ
• コマンド: help, step, next, var, display, edit, quit
• byebug で sign_in メソッドを探索してみよう!
• web-console で sign_in してみよう!
今回やること
• デバッグに利用できる View ヘルパー
• Logger の紹介とデモ
• お題: どこのページが一番時間が掛かってる?
• byebug / web-console の紹介とデモ
• コマンド: help, step, next, var, display, edit, quit
• byebug で sign_in メソッドを探索してみよう!
• web-console で sign_in してみよう!
今回やること
• debug メソッド
• to_yaml メソッド (+ simple_format メソッド)
• inspect メソッド

<%= simple_format params.to_yaml.inspect %>

• お題: 確認してみよう!

<%= debug params %> と

<%= simple_format params.to_yaml %> は

同じ結果になる?
デバッグに役立つ View ヘルパー
• STDOUT出力とファイル出力

Rails.logger = Logger.new("foobar")

# config/initializers/logger.rb
• デバッグの出力レベル

logger.(debug|info|warn|error|fatal)

緊急度: 低 debug <———> fatal 高
• rails s -e production のエラー原因を出力してみよう!

本番環境を手元で作ってエラー原因を調べてみる

# RAILS_ENV=production
• お題: どこの処理が一番時間が掛かっている?
Logger の紹介とデモ
• デバッグに利用できる View ヘルパー
• Logger の紹介とデモ
• お題: どこのページが一番時間が掛かってる?
• byebug / web-console の紹介とデモ
• コマンド: help, step, next, var, display, edit, quit
• byebug で sign_in メソッドを探索してみよう!
• web-console で sign_in してみよう!
今回やること
• Gemfile に byebug を追加

`def sign_in(user)`の直後に `byebug` と追加して実行
• 各種コマンド:

help コマンドの説明を表示する

list 次の10行を表示して、Iterator を移動

list- 前の10行を表示して、Iterator を移動

list= Iterator を現在位置まで戻し、前後10行を表示

backtrace 現在のコードに至るまでの過程を表示

frame n 呼び出したメソッドの絶対位置に移動

up [n] / down [n] 呼び出しメソッドに相対的に移動
byebug gem の紹介
• 各種コマンド (続き):

Ctrl-d byebug から抜け出す

thread [list|switch] 現在のスレッドを [表示 | 移動]

next 次の1行を実行する (frame 内の次の行)

 # remember_token に値が代入されたことに注目

var [local|global] スコープ内の変数を一覧表示する

display 引数に与えられた変数を監視する

 # display @current_user でログイン情報を確認

step 次に1行を実行する (frame 関係なく次の行)

 # @current_user は、いつ代入されるのか?
byebug gem の紹介
• 他、細かいメソッドなど:

break breakpointsの設置/表示などで使う

catch 与えられた例外処理の種類を調査

edit  エディタで与えられたファイルを開く

quit  全てのスレッドを終了する (サーバも停止)

set  各種設定を変更する

system システムコマンドを呼び出す
• お題: この self は誰?

self.current_user = user

# app/helpers/sessions_helper.rb
byebug gem の紹介
• byebug の簡易ブラウザ版みたいなもの (併用化)

Rails 4.2 から標準として導入された

変数をちょっと確認したい時とかに便利
• Gemfile に web-console を追加

gem 'web-console', '~> 2.0'
• コード内に console を追加

コントローラ: console

ビューの場合: <% console %>

いつも表示したい: application.html.erb に設置

デモ: sign_in User.first を実行して byebug に入ろう!
web-console gem の紹介
• デバッグに利用できる View ヘルパー
• Logger の紹介とデモ
• お題: どこのページが一番時間が掛かってる?
• byebug / web-console の紹介とデモ
• コマンド: help, step, next, var, display, edit, quit
• byebug で sign_in メソッドを探索してみよう!
• web-console で sign_in してみよう!
今回やること
お疲れ様でした
今回やったこと
• デバッグに利用できる View ヘルパー
• Logger の紹介とデモ
• お題: どこのページが一番時間が掛かってる?
• byebug / web-console の紹介とデモ
• コマンド: help, step, next, var, display, edit, quit
• byebug で sign_in メソッドを探索してみよう!
• web-console で sign_in してみよう!
参考情報
Rails アプリケーションのデバッグ
http://railsguides.jp/debugging_rails_applications.html
アプリケーションのデバッグ編
Rails解説セミナー
http://railsguides.jp/

Rails解説セミナー: Railsアプリケーションのデバッグ