Slide 1

Slide 1 text

Railsでのデバッグ 石田哲朗 @tetishi 2020/5/9 (土)

Slide 2

Slide 2 text

自己紹介 ● @tetishi ● 去年の10月からフィヨルドブー トキャンプで勉強しています。 ● 今はシステム開発のプラクティ スを行っています。

Slide 3

Slide 3 text

このテーマを選んだ背景 ● 今までデバッグの重要性に気づいておらず闇雲に非効率な コードを書き時間を無駄にしていたので、この機会に上手にデ バッグできるようになりたいと思いこのテーマを選びました。

Slide 4

Slide 4 text

デバッグとは ● プログラムに問題があり、エラーが表示されることをバグと言 います。そのバグの原因を見つけ、修正する作業をデバッグと 言います。

Slide 5

Slide 5 text

デバッグはなぜ重要なのか ● 変数の中身を確認することができる ● 適切な場所に処理が通っているのか確認できる ● 効率よくエラーを発見することができる

Slide 6

Slide 6 text

今回話す4つのデバッグ方法 ● プリントデバッグ ● debug ● byebug ● binding.pry

Slide 7

Slide 7 text

プリントデバッグ

Slide 8

Slide 8 text

● 変数の中身を確認できる ● 最も原始的な方法 ● 例えばp paramsをコードに記述することでparamsに渡された 値をターミナルのログから確認できる

Slide 9

Slide 9 text

pとppの違い ● p ● pp 項目ごとに改行し てくれて見やすく 表示してくれる

Slide 10

Slide 10 text

debug

Slide 11

Slide 11 text

● debugヘルパーはview ページでデバッグするとき に使います。 ● 例えば、@booksの値を確 認したい場合は右のように 書く ● 右のようにViewページで @booksの値を確認するこ とができる

Slide 12

Slide 12 text

byebug

Slide 13

Slide 13 text

● byebugを使用するには Gemfileにbyebugを書 きbundle installをする ● デバッグをしたいところ でbyebugと書くとそこで 実行がとまり、ターミナ ル上から確認したい変 数などの中身を確認で きる

Slide 14

Slide 14 text

● byebugの機能はhelpコマンドで確認で きる

Slide 15

Slide 15 text

byebugの主な機能 ● next 次の行を実行。メソッドの中には入らない。 ● step 次の行かメソッドの中に入る。 ● finish stepを実行していくとどんどんライブラリのコードに入っていきなかなか処理が進まな い。その場合はfinishコマンドを使用するとメソッドの外に出たところまで実行を移すこと ができる ● continue プログラムが最後まで実行される。ブレイクポイントが設定されている場合は 次のブレイクポイントで停止する

Slide 16

Slide 16 text

binding.pry

Slide 17

Slide 17 text

● Gemfileにgem ‘pry-rails’と書きbundle installすると使えるようになる ● 調べたい変数の中身や処理を止めたい部分にbinding.pryと書くとそこで実行が とまり、ターミナル上から確認したい変数などの中身を確認できる

Slide 18

Slide 18 text

● binding.pryはviewでも使 用できます。 ● 例えばeachメソッド内の bookの中身を見たいとき は右のようにみることがで きます。

Slide 19

Slide 19 text

デバッグの心構え ● まずは落ち着く ● すぐにわかることから調査する 例えば、ログにエラー出力が出ているか、対象データはどうなっているのか、ソースコードで 処理をざっと追ってみるなど ● やみくもにデバッグしない。 ここが怪しいじゃないかという仮説を立ててから検証を行う。 仮説を立て検証を行うサイクルを繰り返すことで徐々に原因を絞り込んでいく。 ● 思い込みをしていないか考える 私たちは人間なのでたまに思い込みをします。 ● 時間を区切る 例えば1時間なら1時間と決めて、それ以内に何も進歩がなければ誰かに聞いた方が良い。誰 かに聞くと一瞬で解決するかもしれない。

Slide 20

Slide 20 text

ご静聴ありがとうございま した!