Ruby on Rails初心者必見。Railsでのデバッグの味方byebug(バイバグ)。
開発作業にデバックツールは必須
プログラムの勉強お疲れ様です。突然ですが、Railsの勉強の際にデバッグツール使っていますか?
デバッグツールって何?という方もいるかもしれませんが、プログラミングにつきもののデバッグ作業をサポートしてくれるツールのことで、ステップ実行といって一行ごとにプログラムを実行してその時に宣言されているる変数の中身を見ながら動作を確認することができます。
開発作業をしていると「あれれれ?????なんでこの変数nullなの???」なんてことも多いかと思いますが、そんなときにデバッグツールを導入してみるとデバッグ作業が捗ります。
プリントデバッグという、Rubyでいうソースコードにputsやprintなどを埋め込んで、実行してみるという方法もありますが、
そういうわけで、今回はRailsの開発時に私たちも使っているbyebug(バイバグ)を紹介します。
byebug(バイバグ)とは?
byebug(ばいばぐ)とは、rubyで使用できるデバッグツールです。デバッグツールというとRubyMineなどのIDEでのデバッグツールを連想しますが、byebugはcuiベースなので使用しているエディタ問はず使用することができます。
詳しい使い方はのちほど紹介しますが、byebugのgemをインストールして、デバッグしたいコードに「byebug」というメソッドを仕込んでおくと、プログラムがそこを通過した時に止まり、デバッグモードが開始、対話形式でコマンドを打ち込んで自由にメソッドを実行したり変数の値を確認したりということができます。
インストール方法
Gemfile
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '~> 2.13'
gem 'selenium-webdriver'
end
インストールはGemfileに
gem 'byebug'
を追記するだけです。(railsをインストールしている場合はデフォルトでインストールされています。)
追記したら
bundle install
でgemをインストールしてきます。
byebugの使い方
まずbyebugを開始するには、デバッグをしたいところにbyebugというメソッドを書いてあげます。こちらは今回例で使用するページですが、今回はこのユーザー一覧ページのcreateメソッドにbyebugを挿入してみます。 早速createメソッドにbyebugを挟み込んでみましt。
# POST /users
# POST /users.json
def create
byebug
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
byebugを挟み込んだら、実際にメソッドを叩いてみます。
ユーザ登録画面はこちらで、CreateUserボタンを押すとフォームが送信されcreateメソッドが実行されます。 ボタンを押して、Railsを起動している画面をみてみると
23, 32] in /Users/admin/Rails/sample/app/controllers/users_controller.rb
23:
24: # POST /users
25: # POST /users.json
26: def create
27: byebug
=> 28: @user = User.new(user_params)
29:
30: respond_to do |format|
31: if @user.save
32: format.html { redirect_to @user, notice: 'User was successfully created.' }
(byebug)
このように処理が止まり入力プロンプトが出てきます。 ここでnextを入力してEnterを押すと
[25, 34] in /Users/admin/Rails/sample/app/controllers/users_controller.rb
25: # POST /users.json
26: def create
27: byebug
28: @user = User.new(user_params)
29:
=> 30: respond_to do |format|
31: if @user.save
32: format.html { redirect_to @user, notice: 'User was successfully created.' }
33: format.json { render :show, status: :created, location: @user }
34: else
(byebug)
次の行に移動しました。 ここで@userと入力してEnterを押すと
(byebug) @user
#<User id: nil, name: "Foo", age: 40, sex: 1, created_at: nil, updated_at: nil&gt;
@userの変数の中身をみることができます。 実際のデバッグ作業ではこうやって変数の値やメソッドを実行してみて、期待通りの動きをしているかを確認していきます。
helpを入力してみると、使用できるコマンドを確認できますが、 よく使うコマンドをまとめると
next | 1行進む |
---|---|
continue | 次のブレイクポイントに進む |
step | メソッドの内部にステップインする |
list | ソースコードを表示する |
up | ソースコードの上を表示する |
down | ソースコードの下を表示する |
ここまで覚えてしまえば、あとは実際の開発作業で使いながら覚えていけるはずです。
まとめ
ここまででbyebugを紹介しましたが、いかがでしたでしょうか?byebug(バイバグ)を使うとそれぞれの変数の型も見れるのでブラックボックス化しがちなプログラミングの細かいところを見れるようになり、開発スピードの高速化と合間って一石二鳥です。
プログラミングにはこのような"小さいけど割と大事なコツやノウハウがたくさんあります。プログラミングそのものも学びつつもこういったツールを知っていくこともWebエンジニアになるためには必要なことです。