LoginSignup
1
0

More than 1 year has passed since last update.

ruby debugを使ってみた話 ~RubyKaigi2022に触発されたエンジニア~

Posted at

RubyKaigi2022の方に参加してきまして、そちらの方で「debug」というツールの話を聞きそういえば一生pコマンドで出力していたと思い試して見たくなりました。
ということで実際触ってみての感想とかを書いていきます。

前準備

今回使ったコードはこちら
Gemfile

source 'https://rubygems.org'

gem 'nokogiri'
gem 'debug'

crawler.rb

require 'net/http'
require 'uri'
require 'nokogiri'
require 'kconv'

def main
    uri = URI.parse("https://qiita.com/itaya")
    request = Net::HTTP::Get.new(uri)

    req_options = {
      use_ssl: uri.scheme == "https",
    }

    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end

    doc = Nokogiri::HTML.parse(response.body.toutf8, nil, 'utf-8')
    p '###HTMLタイトル取得###'
    p doc.title
end

main
$ bundle install --path .bundle
$ bundle exec ruby crawler.rb
"###HTMLタイトル取得###"
"itaya - Qiita"

何をしてるコードかというと、Qiitaの自分のページの情報をとってきてそのタイトルを取得するという簡単なものです。

使ってみる

crawler.rb

require 'net/http'
require 'uri'
require 'nokogiri'
require 'kconv'

def main
    uri = URI.parse("https://qiita.com/itaya")
    request = Net::HTTP::Get.new(uri)

    req_options = {
      use_ssl: uri.scheme == "https",
    }

    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end

    doc = Nokogiri::HTML.parse(response.body.toutf8, nil, 'utf-8')
    p '###HTMLタイトル取得###'
    p doc.title
    debugger
end

main

こんな感じでdebuggerを仕込みまして

$ bundle exec ruby -r debug crawler.rb

デバッグモードで実行すると

"###HTMLタイトル取得###"
"itaya - Qiita"
[16, 24] in crawler.rb
    16|     end
    17|
    18|     doc = Nokogiri::HTML.parse(response.body.toutf8, nil, 'utf-8')
    19|     p '###HTMLタイトル取得###'
    20|     p doc.title
=>  21|     debugger
    22| end
    23|
    24| main
=>#0	Object#main at crawler.rb:21
  #1	<main> at crawler.rb:24
(rdbg)

このような画面が表示されるかと思います。
これでブレークポイントで止まってるのがわかるかと思います。

ここでいろいろなコマンドが入力できまして、
n: 次の行へ
s: 次のステップへ

などいろいろできます。
詳しいコマンド一覧はこちらです
https://github.com/ruby/debug

rubyのコードを追加で実行してみる

上記の状態でコマンド一覧以外の入力をするとrubyのコードとして解釈され実行できます。

doc.text

と入力すると、docに入っているテキスト情報が取れたりします。

まとめ

スクレイピングのコードとかだと毎回pで出力確認していると都度コードを実行してデータ取得からやり直す必要があったんですけど、これならとってきたあと色々ゴニョゴニョすることができてやりやすそうに感じました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0