15
Railsで使うデバッグ役立ちツールの 意見交換 @hamajyotan ©2013 ummm All Rights Reserved.

20130929 tottoruby

Embed Size (px)

Citation preview

Railsで使うデバッグ役立ちツールの意見交換

@hamajyotan    ©2013 ummm All Rights Reserved.    

自己紹介● @hamajyotan – SAKAGUCHI Takashi

– 鳥取IT企業、オフィスウームの代表してます

– http://www.ummm.info– う〜むとお困りの際にはご用命を– 主にRuby on Railsに関しての技術的

な相談を請け負っています。実装もお受けします。

この発表について

僕が日頃使っているRailsのデバッグに有用なgemを共有します

といいつつ『他にこんなのあるよ』というような意見を僕が聞きたくて

それのきっかけにしたいです

説明で使うアプリ作ります$ rails new hoge && cd hoge/$ git init && git add . && git commit -m “frst commit”$ rails g controller welcome index && rm public/index.html$ rails g scafold User name age:integer && rake db:migrate$ echo "<%= link_to nil, users_path %>" >> ¥> app/views/welcomde/index.html.erb$ echo "body { width: 640px; margin: 0 auto; }" >> ¥> app/assets/stylesheets/application.css$ # confg/routes.rb の修正

Hoge::Application.routes.draw do resources :users root to: "welcome#index"end

$ rails server # ⇒ access to http://127.0.0.1:3000

Gemfle(for debug)抜粋group :development, :test do gem 'pry-doc', require: false gem 'pry-rails' gem 'pry-debugger' # gem 'pry-byebug' gem 'hirb' gem 'hirb-unicode'endgroup :development do gem 'better_errors' gem 'binding_of_caller' gem 'rack-mini-profler' gem 'quiet_assets'end

pry, pry-doc● 言わずと知れたREPL環境、これが無いと始まらな

い。● .(ドット)から始めるとshellコマンドを実行できる。● cd⇒コンテキストを指定したオブジェクトにして実

行(instance_eval)● binding.pryでブレークポイントを埋め込める● ls⇒有効なオブジェクトを確認● show-doc⇒ドキュメントを表示● show-method, $, show-source⇒(メソッドの)

ソースコードを表示、Cのソースも読める。

pry-rails● rails consoleコマンドでirbでなくpryが起動す

るようになる● reload! ⇒ rails構成を再読み込み● show-routes⇒ルーティング表示● show-models⇒モデル表示● show-middleware⇒rackミドルウェアを表示● 困ったらhelp● .pryrcを配置しておけばconsole起動の初期化

時の処理をかける

pry-debugger(pry-byebug)● binding.pryで実行を止めた箇所から移

動できる。(ステップ実行)● continue⇒デバッグを抜ける● step⇒メソッドの中に入って1つ進める● next⇒現在のメソッド上で1つ進める● fnish⇒現在のメソッドを抜ける

hirb, hirb-unicode● hirb

– ActiveRecordの結果を見やすく整形して表示してくれる。

● hirb-unicode– hirbでは全角文字が出力結果に混ざってい

るとインデントがずれる– hirb-unicodeではそれを解消する

.pryrcファイル例if defned? Hirb

● Hirb::View.instance_eval do● def enable_output_method● @output_method = true● @old_print = Pry.confg.print● Pry.confg.print = proc do |output, value|● Hirb::View.view_or_page_output(value) || @old_print.call(output, value)● end ● end ●

● def disable_output_method● Pry.confg.print = @old_print● @output_method = nil ● end ● end ●

● Hirb.enable● end

better_errors, binding_of_caller

● better_errors– エラー画面が格好良くなる– 見やすいエラーメッセージ、など

● binding_of_caller– better_errorsのエラー画面でREPLが叩け

るようになる

rack-mini-profler● プロファイラ● 実行するとWeb画面左上に実行時間などが表示されるようになる

● SQLの実行状況などもここで確認できる

quiet_assets● assets pipelineを有効にしていると出てくるログの大部分はassets実行結果になる– ⇒肝心なログが拾いにくい

● assetsの実行結果ログは出力が抑制されてログ出力がスッキリする

おまけ - .bashrcalias g="git"

function irb { if which pry >/dev/null 2>&1; then pry $*; else `which irb` $*; f; }function be { if bundle check >/dev/null 2>&1; then bundle exec $*; else $*; f; }for cmd in rails rake rspec guard cap; do alias $cmd="be $cmd"donealias r="rails"alias ra="rake"

Happy debugging.