こんにちは!Webコーダー・プログラマーの貝原(@touhicomu)です。
今日はRubyでデバッグを行う方法について解説したいと思います。
この記事では、
- puts、p、ppを使ったデバッグ方法
- loggerを使ったデバッグ方法
という基本的な内容から、
- Rubyのpry-debugでデバッグ実行する方法
- Ruby On Rails でデバッグする方法
- RubyをIDEでデバッグする方法
などの応用的な使い方に関しても学習していきます。
このページで、Rubyのデバッグ、logger、pry、Railsの使い方をよく把握して自分のスキルとしていきましょう!
Rubyの基本的なデバッグ方法
puts、p、ppを使ったデバッグ方法
Rubyでデバッグを行う際、基本的な手法として用いるメソッドにputsやp、ppなどがあります。
まず、putsを見てきましょう。
putsは引数の文字列を画面に出力するメソッドです。
主に変数値の確認を行います。
引数が文字列である必要があるため、to_sメソッドが必要です。
# 合計を初期化 sum = 0 # 1から10まで繰り返し for num in 1..10 do # 現在の番号numを合計に加える sum += num # 現在の番号numをputsで出力して確認 puts "+" + num.to_s end # 最後に合計sumをputsで出力して確認 puts "sum=" + sum.to_s
実行結果:
+1 +2 +3 +4 +5 +6 +7 +8 +9 +10 sum=55
以上のように、putsメソッドで変数の値を画面に出力できました。
また、putsの引数は文字列である必要があるため、to_sメソッドを使用します。
次に、pとppメソッドを使用してみましょう。
pは引数のオブジェクトを表示します。
ppはpretty pの略で、pよりも読みやすくオブジェクトを表示します。
以下、サンプルコードで確認してみましょう。
# ppライブラリを要求 require 'pp' # ハッシュに積み上げる値の配列 array = [ "apple", "banana", "cookie", "dounut", "cake", "supe", "barger", "nudle" ]; # ハッシュを初期化 hash = Hash.new i = 0 # 文字列を1文字ずつループ for char in "abcdefgj".chars do # ハッシュにキー(1文字)と値(配列の要素)を積み上げ hash.store(char, array[i]) i+=1 end # pによるハッシュの表示 puts "---- p ----" p hash # ppによるハッシュの表示 puts "---- pp ----" pp hash
実行結果:
---- p ---- {"a"=>"apple", "b"=>"banana", "c"=>"cookie", "d"=>"dounut", "e"=>"cake", "f"=>"supe", "g"=>"barger", "j"=>"nudle"} ---- pp ---- {"a"=>"apple", "b"=>"banana", "c"=>"cookie", "d"=>"dounut", "e"=>"cake", "f"=>"supe", "g"=>"barger", "j"=>"nudle"}
以上のように、pは引数のオブジェクトをユーザーの見やすさという点を気にせずそのまま表示します。
ppは引数のオブジェクトをユーザーの見やすさを考慮して表示します。
Rubyのputs、p、ppやprintfなどの表示系のメソッドについて詳しくは、以下の記事を参照してください。
loggerを使ったデバッグ方法
Rubyのloggerを使えば、Rubyプログラムの実行時に、実行と同時に変数値をログファイルに残すことができます。
ログには出力レベルがあり、Rubyの実行時に最大出力レベルを選択できます。
require 'logger' # loggerの生成 logger = Logger.new('loglevel.log') # ログ最大出力レベルをWARNに # ログの優先度レベルは、DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN の順に、広くなる logger.level = Logger::WARN # 各種ログ出力 logger.error("ログ1") logger.info("ログ2") logger.warn("ログ3") logger.debug("ログ4")
実行結果(’loglevel.log’):
# Logfile created on 2017-10-07 15:21:38 +0900 by logger.rb/56815 E, [2017-10-07T15:21:38.847117 #19192] ERROR -- : ログ1 W, [2017-10-07T15:21:38.848118 #19192] WARN -- : ログ3
以上のように、Rubyの実行時にログを出力できました。
Rubyのログ出力、およびloggerについて詳しくは、以下の記事を参照してください。
Rubyの応用的なデバッグ方法
Rubyのpry-debugでデバッグ実行する方法
Rubyのコマンドライン上でのデバッガとして、pry-byebugがあります。
コマンドライン上でデバッグモードになり、そこからデバッグが可能です。
pry-byebugは、コマンドラインから手軽に起動できます。
また、Rubyのソースコードにpry-byebugのブレークポイントを挿入して実行すると自動的にpry-byebugを起動できます。
この手軽さと、充実したデバッグ機能のため、pry-byebugが一番よく使われるRubyのデバッガです。
できるRubyプログラマになるためには、pry-byebugは必須の技術になってきます。
pry-byebugはブレークポイント、ステップ実行、変数ウォッチ、スタックトレースなどの多くのデバッガとしての機能を備えています。
全てがCLIでの操作でデバッグが完結します。またTABキーを押すことによりデバッグ用コマンドを補完する機能もあり、使い勝手も良いです。
pry-byebugについては、下記記事をご参照ください。
Ruby On Rails でデバッグする方法
loggerを使う方法
Railsでもloggerを使用できます。
loggerは
・config/application.rb
・config/evironments/development.rb
・config/evironments/production.rb
・config/evironments/test.rb
のいずれかの初期設定ファイルであればconfig.〇〇〜で始まるコードで設定できます。
これらconfigファイル内で、
config.logger = Logger.new(STDOUT)
もしくは、
config.logger = Logger.new('log/development.log')
のコードを書くことで、loggerを設定できます。
ログを書くには、以下のようなコードを書きます。
<% logger.debug "log/development.logにログが出力されています。" %>
Railsのloggerについて詳しくは、以下の記事を参照してください。
pry-bydebugを使う方法
Rubyのデバッグ時にpryを使用したのと同じように、Railsのコンソール(console)でもpryを使用できます。
pryはRailsでは、ステップ実行やステップインなどの行単位の実行や変数値表示の他、Railsのモデルやルーティング、ミドルウェアにも対応できます。
その他、メソッド検索、ドキュメント参照、カレントディレクトリ移動(cd)やls、TABキーでのコード補完にも対応しています。
Railsでのpryの使い方について詳しくは、以下の記事を参照してください。
RubyをIDEでデバッグする方法
Eclipseでデバッグする方法
Eclipseとは、IBMが制作しその後オープンソースとして公開した、Javaで作られた汎用IDEです。
ブレークポイント、ステップ実行、変数ウォッチ、スタックトレースなどの機能はもちろん使えます。
EclipseはRubyにも対応しており、これを使うとIDEを使ってRubyをデバッグできます。
GUIでデバッグできるため、大変重宝します。
参考サイト:
WindowsでEclipse+Ruby | FILES=0
VSCodeでデバッグする方法
VSCodeとは、MicrosoftがWindows/Mac/Linux向けに提供しているフリーの高機能エディタです。
起動も軽く、拡張機能も方法で、色々な言語に対応しています。またデバッグにも対応しています。
Eclipseと同じく、ブレークポイント、ステップ実行、変数ウォッチ、スタックトレースなどの機能を備えています。
VSCodeもRuby拡張機能を追加インストールすることで、RubyのデバッグがGUIで可能になります。
参考サイト:
Visual Studio CodeによるRubyのデバッグ | Developers.IO
Emacsでデバッグする方法
Emacsとは、古くからUNIX/Linux向けに提供されていたフリーの高機能エディタです。
現在は、Max/Linux/Windows向けに提供されています。
もともとコマンドライン上で使用することが多かったエディタで、Unixの思想を受け継いでいるため、若干の癖がありますが、機能は豊富です。
EmacsはRubyのデバッグにも対応しています。
Emacsでも、ブレークポイント、ステップ実行、変数ウォッチ、スタックトレースなどの機能を備えています。
参考サイト:
Emacsでrubydbを利用してステップ実行する | Futurismo
まとめ
今回は、Rubyのデバッグ、logger、pry、Rails について学習しました!
学習のポイントを振り返ってみましょう!
- 変数値の表示にはputs、p、ppなどが使用できる。
- loggerによりファイルに変数値を書き込める。
- pryにより、Rubyを実行しながら変数値などを確認できる。
- Railsでもpryにより実行中の変数値などを確認できる。
- IDEでRubyのデバッグをサポートしている製品もある。
以上の内容を再確認し、ぜひ自分のプログラムに生かし学習を進めてください!