SlideShare a Scribd company logo
アプリケーションのデバッグ編
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/

More Related Content

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

Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
Yohei Yasukawa
 
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) APIRails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
Yohei Yasukawa
 
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
Yohei Yasukawa
 
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2
Jun Yokoyama
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionSatomi Tsujita
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
Masanori Ishigami
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
Hideki Saito
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
kenhys
 
デバッガでデバッグしない
デバッガでデバッグしないデバッガでデバッグしない
デバッガでデバッグしない
よしだ あつし
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
Naoyuki Mitsuboshi
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
y-uti
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Kiwamu Okabe
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
Kiwamu Okabe
 
VC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてVC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてgoritto
 

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

Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
 
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) APIRails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
 
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
 
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
デバッガでデバッグしない
デバッガでデバッグしないデバッガでデバッグしない
デバッガでデバッグしない
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
Github第8章
Github第8章Github第8章
Github第8章
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
VC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてVC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境について
 

More from Yohei Yasukawa

Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
 
Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)
Yohei Yasukawa
 
Railsガイドを支える技術 (30分版)
Railsガイドを支える技術 (30分版)Railsガイドを支える技術 (30分版)
Railsガイドを支える技術 (30分版)
Yohei Yasukawa
 
Rackspace howto
Rackspace howtoRackspace howto
Rackspace howto
Yohei Yasukawa
 
Work Life Balance in Czech Republic
Work Life Balance in Czech RepublicWork Life Balance in Czech Republic
Work Life Balance in Czech Republic
Yohei Yasukawa
 
GitHub Importを使ったfluxflexへのデプロイ例
GitHub Importを使ったfluxflexへのデプロイ例GitHub Importを使ったfluxflexへのデプロイ例
GitHub Importを使ったfluxflexへのデプロイ例
Yohei Yasukawa
 
Haribote OS with Memory Filesystem
Haribote OS with Memory FilesystemHaribote OS with Memory Filesystem
Haribote OS with Memory Filesystem
Yohei Yasukawa
 
Introduction of tango! (en)
Introduction of tango! (en)Introduction of tango! (en)
Introduction of tango! (en)Yohei Yasukawa
 
Introduction of tango! (jp)
Introduction of tango! (jp)Introduction of tango! (jp)
Introduction of tango! (jp)Yohei Yasukawa
 

More from Yohei Yasukawa (9)

Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)
 
Railsガイドを支える技術 (30分版)
Railsガイドを支える技術 (30分版)Railsガイドを支える技術 (30分版)
Railsガイドを支える技術 (30分版)
 
Rackspace howto
Rackspace howtoRackspace howto
Rackspace howto
 
Work Life Balance in Czech Republic
Work Life Balance in Czech RepublicWork Life Balance in Czech Republic
Work Life Balance in Czech Republic
 
GitHub Importを使ったfluxflexへのデプロイ例
GitHub Importを使ったfluxflexへのデプロイ例GitHub Importを使ったfluxflexへのデプロイ例
GitHub Importを使ったfluxflexへのデプロイ例
 
Haribote OS with Memory Filesystem
Haribote OS with Memory FilesystemHaribote OS with Memory Filesystem
Haribote OS with Memory Filesystem
 
Introduction of tango! (en)
Introduction of tango! (en)Introduction of tango! (en)
Introduction of tango! (en)
 
Introduction of tango! (jp)
Introduction of tango! (jp)Introduction of tango! (jp)
Introduction of tango! (jp)
 

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