【Rails応用講座 5】クリップの作成でデバッグを学ぶ >
Metainspectorの実装とデバッグ

Metainspectorの実装

Metainspectorをコントローラで使用します。そして、デバッグの仕方やByebugの使い方についても学びましょう。では、clips_controller.rbを開いて以下を追加して下さい。

def create    
    @clip = Clip.new

# 以下を記述

    page = MetaInspector.new(clip_params[:url])
    @clip.title = page.title
    @clip.description = page.best_description
    @clip.image = page.images.best

では、ブラウザで試してみます。まずはサーバーを再起動してください。

吉田先生

新しいGemを追加した後はRailsサーバーを再起動する

「あれ?なんでここエラーになるんだろう??」と再起動をしてないだけなのにはまることがあります。けっこうベテランでもみんな経験しているくらいあることなんです。なのでbundle installして新しいGemを追加した後は必ず再起動することを覚えておきましょう。

新規にクリップを作成してみてください。その際に前回めんどうだったソースコードのコピペは要りません。ただURLだけをコピーしてURLのフォームにペーストしましょう。そして作成ボタンをクリックするとどうですか?それだけでページが出来上がっているはずです!素晴らしいですね。

これでめんどうな作業から開放されてユーザーは「ただURLをコピペして保存」すれば良いだけです。これだったら、まぁ便利なWebページクリップツールとして使えるかもしれないですね。

デバッグする

次に、嘘のURLを入力してみて下さい。存在しないURLだと、エラーが発生します。これではユーザーに対して申し訳がないですね。このままでは便利なツールとして提供することができません。

byebugを使用する

byebugとは、デバッグ(バグを見つけて修正する)の際に使用するgemです。Gemファイルに追記しなくても良いの?と思ったかもしれません。*Gemfile内に既にbyebugの文字がありますね。この為追加せずとも使用できるのです。ではどのような時に使うのでしょうか。たとえば、変数を見る場合などに以下のようにdebuggerと記入し保存します。

def create    
    @clip = Clip.new

    debugger #<= ここに追加

    page = MetaInspector.new(clip_params[:url])
    @clip.title = page.title
    @clip.description = page.best_description
    @clip.image = page.images.best

この状態で、ブラウザのNew Clipから新しい記事をクリップしてみます。もう一度クリップの新規作成画面に行って、以下のようにURLだけを記入して作成ボタンをクリックしてください。

このときサーバーを起動しているターミナルを見ると、サーバーが途中で停止して入力を待っている状態になっているはずです。

in /home/ubuntu/workspace/app/controllers/clips_controller.rb
   24:   # POST /clips
   25:   # POST /clips.json
   26:   def create
     (byebug) #入力を待っている。

では、@clipを確認してみましょう。@clipと実行してみて下さい。以下のように中身を確認することが出来ます。

in /home/ubuntu/workspace/app/controllers/clips_controller.rb
   24:   # POST /clips
   25:   # POST /clips.json
   26:   def create
(byebug) @clip
#<Clip id: nil, title: "", description: "", image: "", url: "aaa", created_at: nil, updated_at: nil>

変数の中身が確かめられることがわかりました。その他にも渡ってくるパラメータなども見ることができます。試しに以下を実行(入力してEnterキーを押す)してみてください。するとフォームから渡ってきたパラメータを見ることができます。

clip_params
# clip_paramsの中身であるurlだけの値を見たい時は、以下のように指定する。
clip_params[:url]

MetaInspectorのデバッグ

次にMetaInspectorが上手く動作しているか確かめたいと思います。渡ってくるclip_params[:url]からMetaInspectorオブジェクトをつくってみます。

page = MetaInspector.new(clip_params[:url])

するとエラーが出ますね。これはまぁ「URLにつながらないよ!」というエラーです。

*** MetaInspector::RequestError Exception: Failed to open TCP connection to aaa:80 (getaddrinfo: No address associated with hostname)![file](https://popshub.s3.amazonaws.com/uploads/ckeditor/pictures/1304/content_image-1560232482761.png)

ありもしないURLに対してリクエストを送ったので、こんなエラーが返ってきてたんですね。というように、byebugを使用すると原因を突き止めることが容易になります。エラーの原因がわかれば対処の仕方もあるので、ひとつクリアという感じになります。

調べ終わったら、ターミナルでCtrl+Dやexitと打ち込んでbyebugを終了できます。また、コントローラのdebuggerという記述も消しましょう。

次ではこのエラーのハンドリング(処理)について学びます。

課題

debuggerを使っていろいろと試してみましょう。

無料ビデオ講座のお知らせ

Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る