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
では、ブラウザで試してみます。まずはサーバーを再起動してください。
新規にクリップを作成してみてください。その際に前回めんどうだったソースコードのコピペは要りません。ただURLだけをコピーしてURLのフォームにペーストしましょう。そして作成ボタンをクリックするとどうですか?それだけでページが出来上がっているはずです!素晴らしいですね。
これでめんどうな作業から開放されてユーザーは「ただURLをコピペして保存」すれば良いだけです。これだったら、まぁ便利なWebページクリップツールとして使えるかもしれないですね。
次に、嘘のURLを入力してみて下さい。存在しないURLだと、エラーが発生します。これではユーザーに対して申し訳がないですね。このままでは便利なツールとして提供することができません。
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が上手く動作しているか確かめたいと思います。渡ってくる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)
ありもしないURLに対してリクエストを送ったので、こんなエラーが返ってきてたんですね。というように、byebugを使用すると原因を突き止めることが容易になります。エラーの原因がわかれば対処の仕方もあるので、ひとつクリアという感じになります。
調べ終わったら、ターミナルでCtrl+Dやexitと打ち込んでbyebugを終了できます。また、コントローラのdebuggerという記述も消しましょう。
次ではこのエラーのハンドリング(処理)について学びます。
debuggerを使っていろいろと試してみましょう。
無料ビデオ講座のお知らせ
Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。