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&amp;gt;

@userの変数の中身をみることができます。 実際のデバッグ作業ではこうやって変数の値やメソッドを実行してみて、期待通りの動きをしているかを確認していきます。

helpを入力してみると、使用できるコマンドを確認できますが、 よく使うコマンドをまとめると

next 1行進む
continue 次のブレイクポイントに進む
step メソッドの内部にステップインする
list ソースコードを表示する
up ソースコードの上を表示する
down ソースコードの下を表示する
となります。helpで出てきたコマンド以外を入力するとrubyのコードとして評価され、 メソッドや変数が定義されていればそれが実行されるし、されていなければそんなものないと おこられます。

ここまで覚えてしまえば、あとは実際の開発作業で使いながら覚えていけるはずです。

 

まとめ

 

ここまででbyebugを紹介しましたが、いかがでしたでしょうか?byebug(バイバグ)を使うとそれぞれの変数の型も見れるのでブラックボックス化しがちなプログラミングの細かいところを見れるようになり、開発スピードの高速化と合間って一石二鳥です。

プログラミングにはこのような"小さいけど割と大事なコツやノウハウがたくさんあります。プログラミングそのものも学びつつもこういったツールを知っていくこともWebエンジニアになるためには必要なことです。

お仕事決まれば全額キャッシュバック!転職特化型Ruby実践研修【ポテパンキャンプ】