最終更新日:

この記事では、Rubyを用いて、以下のようなURLから、特定のパラメーターの値を取得する方法について記載します。

# idとempidを取得するurl = 'http://www.example.com?id=4&empid=6'

結論、以下のように取得可能です。

url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
url.query_values # {"id"=>"4", "empid"=>"6"}

環境

rails -v
Rails 7.0.4
ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

RubyでURLパラメーターを取得する方法

Rubyでは、URLを取得するライブラリに、以下のようなものがあります。

AddressableはURIの後継だそうです。

URLとAddressableがありますが、個人的にはURLパラメーターの取り扱いがAdderssableの方が体験としてよかったため、Addressableを利用して、以下の値を取得する方法について見ていきます。

※詳しくはAddressableのGithubに詳しい解説が書いてあるため、参照してください。

https://github.com/sporkmonger/addressable

Gem Addressableのインストール

まず、AddressableのGemをインストールします。

$ gem install addressable

URLパラメーターの取得

次に、

  • id
  • empid

の取得をしていきます。

URLをパースした値に対して、query_valuesメソッドを呼ぶことで、ハッシュ形式でURLパラメーターを取得してくれます。

url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
# query_valuesを利用すると、ハッシュでURLパラメーターを取得してくれる
url.query_values # {"id"=>"4", "empid"=>"6"}

非常に簡単でした。

スキーマの取得

URLから、

  • http
  • https

などの値を取得したい場合は、schemaを指定することで取得可能です。

uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.scheme
#=> "http"

ドメインの取得

URLから、

  • example.com

の値を取得したい場合は、hostを指定することで取得可能です。

uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.host
#=> "example.com"

相対パスの取得

URLから、

  • /path/to/resource/

を取得したい場合、pathを指定することで取得できます。

uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.path
#=> "/path/to/resource/"

備考:URIとの比較

URIでも同じようなことを行うことができるのですが、個人的にはAddressableの方がURLパラメーターの取得が楽でした。

参考までにURIのGithubのサンプルコードを掲載しておきます。

URI:
https://github.com/ruby/uri

require "uri"
uri = URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#=> #<URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
uri.scheme #=> "http" #スキーマの取得
uri.host #=> "foo.com" #ドメインの取得
uri.path #=> "/posts" #パスの取得
uri.query #=> "id=30&limit=5" #URLパラメーターの取得
uri.fragment #=> "time=1305298413"

参考