MAGAZINE

ルーターマガジン

Ruby

rubyで正規表現を使わずにURLの構成要素を取得する

2025.06.09
Pocket

皆さん、こんにちは。エンジニアのHatanoです。技術記事としては今回が初となりますので、よろしくお願いいたします。 今回はrubyでURLの構成要素を取得する際に自分が作ったコードとその場面における正解について書いていこうと思います。

URLの構成要素の取得(悪い例)

ある時、以下のようなURL(架空のURL)から「20000」の数値部分を取得するコードを書く必要が生じました。後続の処理で「20000」の数値部分をIDとして使用するために取得します。

"https://rooter.jp/hoge/20000?page=5"

この時、私は「URLは文字列だから正規表現を使った書き方が出来る」と考え、以下のようなコードを作成しました。

url = 'https://rooter.jp/hoge/20000?page=5'
id = /\d+/.match(url).to_s.gsub(/\//,'')
puts id
# 結果: 20000

このコードを実行すると、望んだ出力'20000'を得ることが出来ます。

しかし、このコードではidとして何を取得しているのかを即座に理解するのが難しく、他の人に見せるコードとしては良くないという問題点があります。また、「/の直後にある数列の中で最初の1つを取り出す」という実装なので、hogeの部分が数字であった場合はそちらを取得してしまうというのも良くないです。

URLの構成要素の取得(良い例)

それでは、どのように実装するのが正解だったのでしょうか。 この場面では「URLの中のパスの最後尾を取得する」と考えると、URLに関するメソッドを用いれば解決できるのではないかと考えられます。

ということで、「URI」というモジュールを使ってidを取得してみます。その名の通りURIに関するモジュールですが、URLもURIの一種であるため問題なく使用することが出来ます。

今回は取得したいidがパスの最後尾にあることが分かっているので、まずはパスを取得します。

require 'uri'

url = 'https://rooter.jp/hoge/20000?page=5'
url_path = URI.parse(url).path
puts url_path
# 結果: /hoge/20000

ここから、'20000'を取得する必要があります。今回は取得したい部分がパスの最後尾であるため、'/'で区切って配列にしてからその最後尾を取得する形にしています。

require 'uri'

url = 'https://rooter.jp/hoge/20000?page=5'
url_path = URI.parse(url).path
id = url_path.split('/').last

puts id
# 結果: 20000

これで、正規表現を使わずに目的の出力'20000'を得ることが出来ました。

終わりに

実装したい処理がある際に持っている知識だけで対処するのではなく、実装したい処理を言語化してライブラリを探すことも重要であると実感する一幕でした。

URIモジュールにはパス以外の構成要素を取得するメソッドも含まれているので、URIの構成要素を取得する際にはぜひ使ってみてください。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから