Code Journey

30代未経験からプログラミング挑戦中(追うものは追われる者に勝る)

Rubyで文字列からURLを抽出する方法

はじめに

私は現在、フィヨルドブートキャンプにて未経験からプログラミング学習をしているものになります。

この記事は、自分自身が学習したことをまとめ、アウトプットすることを目的として書いていますので、間違いがある可能性がありますのでご注意ください。

日報の中身にURLがあるかないかを抽出する方法

課題に取り組む中で、テキスト内にURLがあるかを判定する必要があったためメソッドを調べる。

URI.extract (Ruby 3.2 リファレンスマニュアル)を発見。

これを使えば、文字列内のURLを抽出して配列で返してくれるメソッドとのこと。URLが含まれていない場合は、空の配列が返ってくる。

実際にやってみた

require 'uri'

text = <<~EOL
フィヨルドブートキャンプ: https://bootcamp.fjord.jp/
Railsガイド: https://railsguides.jp/

EOL

url = URI.extract(text)
p url

結果

❯ ruby test.rb
["https://bootcamp.fjord.jp/", "https://railsguides.jp/"]

できた。なおURI.extract(text)の第2引数で正規表現を使って、条件を指定することもできるので非常に便利。

文字列にURLが含まれない場合

require 'uri'

text = <<~EOL
フィヨブー: 
Railsガイド:

EOL

url = URI.extract(text)
p url

結果

~ master*
❯ ruby test.rb
[]

空の配列になったことを確認。

今回これを活用して行いたいこと

日報を投稿できるRailsアプリにおいて、投稿された日報を引用する日報があった場合、Reportモデルを引用元引用先を分ける「自己結合」のリレーションを組み、それを管理する中間テーブルを作成してそこに引用元引用先のidを持たせて抽出して引用元に引用数や引用された日報を表示させることに活用したい。


それにあたってまず日報の文字列にURLが含まれるか&日報のURLであるかを判定する必要があったため、このメソッドに行き着いた。


また実装が終わったらまとめていきたいと思う。