Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyのuriライブラリには、uriを操作するためのメソッドが用意されています。uriはWebページの参照などに使われるアドレス(url)を含む文字列の名称です。文字列なので簡単に扱えると思われるかもしれません。

しかしuriの仕様は国際規格で決められているので、操作するにはその国際規格に従わなければなりません。uriを操作するならuriライブラリを利用してください。今回はuriの基本とuriライブラリに含まれるuriクラスの代表的なメソッドの使い方について紹介します。

Rubyでuriを扱うには

Rubyでスクライピングに使うプログラムを作るなら、Webサイトのアドレスを加工するためにuriライブラリを使用します。なおuriは国際規格で仕様が定義されており、それに従って加工されなければなりません。

Rubyのuriライブラリにはuriを正しく扱うためのメソッドを用意されているので、これを利用してください。ただしuriとは何かを知らないとuriライブラリは理解できません。そこでRubyでuriを扱うための仕組みを紹介する前に、uriとは何かについて紹介します。

そもそもuriとは

uriとはUniform Resource Identifierの略で、そのまま日本語にすると統一資源識別子という意味です。簡単に説明するとインターネット上のサーバーやサービス、データなどにアクセスするために用いられるurlを拡張した識別子で、インターネットだけでなくいろいろなデータにアクセスする識別子として使われます。

uriは1998年8月にRFC2396として規定され、2005年1月にRFC3986として改定された国際規格で定義された規格です。今回紹介するRubyのuriライブラリは国際規格に沿って編集するためのメソッドを含んでいます。

Rubyでuriを扱うには

Rubyの特徴の1つは、少ないコードの量で読みやすいプログラムが書ける点です。そのためにはRuby用に用意された外部ライブラリを最大限に活用しましょう。今回紹介するuriライブラリはそのようなRuby用に用意された外部ライブラリの1つです。

uriライブラリは、uriを解析してホスト名、ポート番号、パス名などを取り出したり、検索や加工するためのメソッドが定義されています。もし、uriを操作するならuriライブラリを利用してください。

スクライピングならopen-uriを

なおuriライブりがよく使われるのがスクライピングと呼ばれる、Webサイトから情報を取得して見やすく表示する仕組みです。そしてこの仕組みではopen-uriライブラリが使われます。

このopen-uriライブラリではuriを編集したり、指定されたuriにアクセスするメソッドなどが用意されています。このうちuriの編集するメソッドでは、その中でuriライブラリを利用しています。

なお、open-uriの使い方については、下記の記事などを参照してください。

スクライピングにも使えるRubyのopen-uriを詳しく解説

uriライブラリの基本

uriライブラリは、Rubyのプログラムでuriを扱うためのクラスやモジュールを定義したライブラリです。先ほど紹介したようにスクライピングなどでopen-uriライブラリを読み込むと自動で読み込まれたりしますが、rui単体を読み込んでも使えます。

次からuriライブラリの機能と使い方について簡単に紹介します。

uriライブラリの機能

先ほどの紹介したようにuriは文字列なので簡単に扱えるように思えますが、その規格はかなり複雑で正確に処理するには大変です。そしてuriライブラリはそのような複雑な規格に合わせたモジュールやメソッドが用意されています。

Rubyのプログラムでuriを処理するなら、uriライブラリを利用してください。

ポテパンダの一言メモ

uriは国際標準化団体のW3Cにより標準化された規格です。ただし次の複数の標準規格を満たす仕様のため、正確に処理しようとするとかなり複雑です。

[RFC1738] Uniform Resource Locators (URL) (Updated by [RFC2396])
[RFC2255] The LDAP URL Format (Obsoleted by [RFC4510], [RFC4516])
[RFC2368] The mailto URL scheme
[RFC2373] IP Version 6 Addressing Architecture (Obsoleted by [RFC3513])
[RFC2396] Uniform Resource Identifiers (URI): Generic Syntax (Obsoleted by [RFC3986])
[RFC2732] Format for Literal IPv6 Addresses in URL’s (Obsoleted by [RFC3986])
[RFC3986] Uniform Resource Identifier (URI): Generic Syntax
[RFC3987] Internationalized Resource Identifiers (IRIs)

uriライブラリを使うには

uriライブラリは、Rubyの標準パッケージに含まれているのでRubyをインストールするとすぐに利用できます。

uriライブラリを利用するにはrequireメソッドで取り込む必要があります。Rubyのプログラムでuriライブラリを利用するには、次の例のように記述してください。

uriライブラリをプログラムに取り込む例

require 'uri'

URIオブジェクトを使う

先ほどのようにuriライブラリを取り込むことでuriオブジェクトが使えるようになります。uriオブジェクトは、newメソッドで新規にオブジェクト作るのではなく、「URI」をそのまま使ってください。

例えば、次の例の「URI.parse」ようなオブジェクト「URI」をそのまま利用し、あす。

URIオブジェクトの使用例

require 'uri'

uri = URI.parse("http://www.ruby-lang.org/")

uriライブラリを使った例

次からuriライブラリを使ったWebサイトにアクセスするプログラムの例を紹介します。Rubyでスクライピングを実現するプログラムの参考にしてください。

uriを解析する「parseメソッド」

uriにはホスト名、ポート番号、パス名などが規則に従って記述されています。もしuriに書かれたホスト名を取得するにはuriを解析しなければなりません。なおuriライブラリにはuriを解析するメソッドが幾つか含まれていますが、中でもよく使われるのがparseメソッドです。

parseメソッドは、引数に指定されたuriを規則に沿って解析し、記載された情報を格納したオブジェクトを返します。

uriクラスのparseメソッド例

require 'uri'

uri = URI.parse("https://www.ruby-lang.org/")
p uri.scheme    # "https"を表示する
p uri.host      # "www.ruby-lang.org"を表示する
p uri.port      # 80を表示する
p uri.path      # "/"を表示する

これはuriライブラリのparseメソッドを利用し、”http://www.ruby-lang.org/”を解析した例です。

uriにパスを追加する「joinメソッド」

スクライピングでWebサイトを参照する際、uriのパスを変更して情報を取得するケースがよくあります。そして、このような場合に使われるのがuriライブラリのjoinメソッドです。

joinメソッドは、uriとパスを引数に指定することでそれを連結したuriのオブジェクトを返します。

uriクラスのjoinメソッド例

require 'uri'

use_uri = URI.join('http://www.ruby-lang.org/', '/ja/man-1.6/').to_s
p use_uri  # "http://www.ruby-lang.org/ja/man-1.6/"

この例では、URI.joinでuriとパスを連結したオブジェクトを、to_sメソッドで文字列に変換しています。

文字列がuriかチェックする

スクライピングではリストに書かれたuriを利用するケースがありますが、そのuriが正しいとは限りません。uriクラスにはURIにマッチする正規表現を返すregexpメソッドがあるので、これを利用してください。

具体的には、uriクラスのregexpメソッドが返す正規表現で、チェック対象の未次烈を検証します。

文字列がuriかチェックする例

require 'uri'

target = 'https://www.ruby-lang.org/'
if( URI.regexp.match(target).nil? ) then
    puts "URLではありません"
end

この例は、チェックする文字列が全角文字で書かれているためuriではありません。”URLではありません”が表示されます。

まとめ

Rubyでスクライピングに使うプログラムでは、Webサイトから情報を取得するためにuriを編集したりチェックするなどの処理が必要です。

ただし文字列の操作だから簡単を考えると思わぬミスをしてしまいます。そのためRubyでuriのプログラムを作るなら、uriを正しく処理するためのuriライブラリを利用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。