URIを簡単に扱えるGem「addressable」Gemの使い方

こんにちは!kossyです!




今回はURIを簡単に扱えるGem「addressable」Gemの使い方について、ブログに残してみたいと思います。





環境
Ruby 2.6.6
addressable 2.7.0



基本的な使い方

docs.ruby-lang.org

$ url = "https://www.yahoo.co.jp/"
=> "https://www.yahoo.co.jp/"

$  uri = Addressable::URI.parse(url)
=> #<Addressable::URI:0x2ab0974eb32c URI:https://www.yahoo.co.jp/>

# URIクラスのインスタンスメソッドの数
$ URI.parse(url).methods.size
=> 146

# Addressable::URIクラスのインスタンスメソッドの数
$ uri.methods.size
=> 164

$ uri.scheme
=> "https"

$ uri.host
=> "www.yahoo.co.jp"

$ uri.path
=> "/"

# Ruby標準のURIクラスには定義されてない
$ uri.domain
=> "yahoo.co.jp"

# Ruby標準のURIクラスには定義されてない
$ uri.origin
=> "https://www.yahoo.co.jp"

インスタンスメソッドの数はAddressable::URIクラスの方が多かったです。

domainやoriginといったメソッドはAddressable::URI独自のメソッドのようです。

queryを操作する

$ url = "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8"
=> "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8"

$ uri = Addressable::URI.parse(url)
=> #<Addressable::URI:0x3fad86027a4c URI:https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8>

$ uri.query
=> "p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8"

# クエリ文字列を取得する
$ uri.query_values
=> {"p"=>"コロナ", "ei"=>"utf-8"}

# クエリ文字列を全クリアする
$ uri.query_values = nil
=> nil

$ uri
=> #<Addressable::URI:0x3fad86027a4c URI:https://news.yahoo.co.jp/search>

フラグメントを取得する

fragmentメソッドを使うと#以下のフラグを取得することができます。

$ url = "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag"
=> "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag"

$ uri = Addressable::URI.parse(url)
=> #<Addressable::URI:0x2ab097388f84 URI:https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag>

$ uri.fragment
=> "flag"

まとめ

調査したところ日本語のURIにも対応できるみたいです。

Rubyは便利ライブラリがたくさんあって良きですね。




大いに参考にさせていただいた記事

この場を借りてお礼を申し上げます。

RubyでAddressable gemを使ってURIの取り扱いを楽にしよう | class Techブログ
rubyでドメインの扱いを幸せにするための記事 - Qiita
Rubyで日本語のURI(URL)をパーズするなら Addressable::URI を使おう - Qiita