🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Q&A

解決済

2回答

2574閲覧

modelをdebugしたい

Tsuyoponpon

総合スコア33

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

0グッド

1クリップ

投稿2019/09/24 15:11

編集2019/09/25 00:57

Rails歴2ヶ月ほどの、ど素人なのですが、今回初めてリファクタリングをしたいと思っています。ですが、なかなか思う様に動いてくれず足踏みしています。オブジェクト指向やリーダブルコードなどの本は一式読んだのですが、実際にリファクタリングをするとなると、どうも上手く動きません。以下には、今まで試してみたことや実現したいことなどを記載しますので、ぜひお力添えをいただければと思います。

前提条件

Rails: 5.2.3
OS: Mac
デバック方法: コードの中に**「byebug」**を埋め込む。

※このモデルはスクレイピング用のモデルです。モデルに処理を全て書き、「whenever(gem)」を使ってモデルに対して定期実行を行います。(つまり、メソッドをViewに書く想定はしていません)

実現したいこと

**「モデルファイルの、メソッドの処理をデバッグ」**したい。

ruby

1#app/models/clone.rb 2 3class Clone < ApplicationRecord 4 5 def self.set_url_for_scraping(url) 6 web_url = 'url' 7 unparsed_page = HTTParty.get(web_url) 8 parsed_page = Nokogiri::HTML(unparsed_page) 9 #ここに「byebug」を埋め込んで、ターミナルでデバッグしたい 10 end 11

試したこと

①デバック用にModelファイルを作成。(中身は同じ)
②メソッドの中に「byebug」を埋め込む。

ruby

1#scrape.rb(Gemfileと同じ階層) 2class Clone < ApplicationRecord 3 4 def self.set_url_for_scraping(url) 5 web_url = 'url' 6 unparsed_page = HTTParty.get(web_url) 7 parsed_page = Nokogiri::HTML(unparsed_page) 8 byebug #デバッグのため 9 end 10

③の1: ターミナルで**「$ rails r scrape.rb」**を叩く
→Running via Spring preloader in process .....(ただただ走り抜けた)

③の2: ターミナルで**「$ rails r scrape.rb.set_url_for_scraping」**を叩く
→undefined local variable or method `scrape' for main:Object(未定義になる)

わからないこと

①Modelをデバックするために一時的に作るファイルは、どの階層に置くのか
(自分はGemfileと同じ階層に置きました)

②byebugを埋め込んだメソッドを、指定して実行するコマンドはどんなものか。
(自分は③の1、③の2のように実行して失敗しました)

以上のようなことが解決できず、質問させていただきました。
もしかすると、Modelファイルのメソッドをデバックするという発想自体、間違っているのかもしれませんが、ぜひそのあたりも未熟な自分にご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/09/25 00:31

回答依頼いただきましたがRuby未経験につき、対応できませんので、あしからず…
Tsuyoponpon

2019/09/25 00:33

失礼いたしました。 ご返信ありがとうございます!
guest

回答2

0

warabimochiさんが書かれているとおりですが、さらに「デバッグ」と「テスト」というものをその位置づけやコストなどを比較して考えてみると、今後にも役立つのではないかと思います。

投稿2019/09/25 01:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tsuyoponpon

2019/09/25 02:32

10tm84 さん アドバイスありがとうございます! おっしゃる通り、位置付けやコストなどはほとんど学べていませんでしたので、これを機会に学んでみたいと思います! 貴重なご意見、ありがとうございました!
guest

0

ベストアンサー

いろんな方法がありますが、各自がいろんな方法を模索しないでよいように app/models/xxx.rb であれば test/models/xxx_test.rb のファイル名で、一時的ではなく永続的なテストを書くのが Rails の慣習になっています。
今回の app/models/clone.rb であれば test/models/clone_test.rb のファイル名になります。
そのなかで Clone.set_url_for_scraping の動作確認を行うコードを書けばよいです。

それよりも一時的なものであれば、コマンドラインで rails r 'Clone.set_url_for_scraping(...)' のようにすればよいです。

app/models/clone.rb のデバッグをしたいのに、対象が異なる同じ内容のものを別の場所に作って実行しようとする意図はよく理解できませんでした。
Modelファイルのメソッドをデバックする発想は何も間違っていません。

投稿2019/09/25 01:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tsuyoponpon

2019/09/25 02:30

warabimochi さん ご回答ありがとうございます! 技術的なことからRailsの慣習についても教えていただき、非常に勉強になりました! おかげさまで学習が再開できそうですので、Railsの慣習やデバッグについて深く勉強したいと思います! つきましては、ベストアンサーに選ばせていただき、重ねてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問