Ruby標準ライブラリの便利なクラス5選!実用的なコード例付きで解説
Ruby標準ライブラリとは、Ruby本体に同梱されているものの、言語そのものには含まれていないモジュールやクラスの集まりのことです。
これらのクラスは、以下のようなさまざまなユーティリティを提供しています。
- Base64エンコード・デコード
- 素数の生成
- DNS名前解決
この記事では、その中から特に役立つ5つのクラスを、実用的なコード例とともに紹介します。
RubyのLoggerクラスでログ出力
エラーやデバッグメッセージを記録したいときは、Ruby標準のLoggerクラスが便利です。ログ出力に必要な機能がすべて揃っています。
Loggerを使うには、Loggerオブジェクトを生成して、出力先(ストリームまたはファイル名)を引数として渡すだけです。あとは、目的に応じたログレベルのメソッドを呼び出してメッセージを記録します。
用意されているログレベルは次の5つです。
- debug
- info
- warn
- error
- fatal
使用例:
require 'logger' logger = Logger.new(STDOUT) logger.info 'testing...' logger.warn 'fun with Ruby :)'
実行結果:
I, [2016-05-14T15:50:21.367590 #12148] INFO -- : testing... W, [2016-05-14T15:50:21.846651 #12148] WARN -- : fun with Ruby 🙂
行頭の1文字目はログレベルの略称(I は Info、W は Warn)、続いてタイムスタンプ、そして現在のプロセスID(Rubyでは Process.pid で取得できます)が表示されます。
最後に、完全なログレベル名と実際のメッセージが出力されます。
このフォーマットは、独自のformatterを指定することで自由に変更可能です。
Primeクラスで素数を扱う
日常業務で素数を扱うことは少ないかもしれませんが、プログラミングの課題に挑戦するのが好きな方なら、Rubyが Prime クラスによって素数を強力にサポートしていることを知っておくと役立ちます。
prime をrequireすると、整数クラス(Integer)に prime? メソッドが追加され、ある数が素数かどうかを簡単に判定できます。
使用例:
require 'prime' 5.prime? # true 11.prime? # true 20.prime? # false
さらに、このクラスには素数ジェネレータも含まれています。
使用例:
Prime.take(10) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
StringIOクラスの使い方
StringIO クラスを使うと、IO オブジェクトのように振る舞う文字列を作成できます。
つまり、ファイルや標準入力(STDIN)から読み込むときと同じ要領で、この文字列を操作できるのです。
以下はその例です:
require 'stringio' io = StringIO.new io << 'test' io << 'code' puts io.string # "testcode"
いくつか注意点があります:
StringIO オブジェクトにデータを追加しても、スペースや改行は自動的に挿入されません。また、実際の文字列を取得するには string メソッドを呼び出す必要があります。
さらに、通常の文字列とは異なり、配列のようにインデックスを指定して個々の文字にアクセスすることはできません。
では、これはどんな場面で役立つのでしょうか?
たとえば、ファイルなどのIOオブジェクトを、自分で制御しやすい別のオブジェクトに置き換えたい場合です。テスト環境では、STDOUT を StringIO オブジェクトに差し替えることで、出力内容を簡単に検証できます。
Railsの実際のコードでもこの手法が使われています。参考:Railsのlogger_test.rb
Base64のエンコードとデコード
Base64は、インターネット上で広く使われているエンコード形式です。
見た目はこんな感じです:
"cnVieQ=="
なぜ便利なのでしょうか?
URLに含められる文字には制限があり、扱いたいデータをそのまま埋め込めないことがあります。Base64を使えば、そうしたデータも安全にURLなどへ含められるようになります。
エンコード方法:
require 'base64'
Base64.encode64("ruby")
# "cnVieQ=="
デコード方法:
require 'base64'
Base64.decode64("cnVieQ==")
# "ruby"
Pathnameクラスでパスをスマートに扱う
Pathname クラスは、Dir や File といったファイルシステム関連のユーティリティを、より強力なひとつのクラスにまとめたものです。
メソッド名は同じですが、戻り値が文字列や配列ではなく Pathname オブジェクトになる点がポイントです。これにより、結果に対して引き続きファイル関連のメソッドを適用できます。
良い例がこちらです:
require 'pathname'
Pathname.glob("*").count(&:directory?)
同じことを Dir で行おうとすると、次のような少し冗長なコードになってしまいます。
Dir.glob("*").count { |d| File.directory?(d) }
ファイルシステム関連の処理が必要になったら、ぜひ Pathname を試してみてください🙂
まとめ
今回紹介した5つのクラスは、いずれも日常的な開発で役立つものばかりです。標準ライブラリには他にも便利な機能がたくさんあるので、ぜひいろいろと探検してみてください。
この記事が役に立ったら、シェアしていただけると嬉しいです🙂
-
Rubyのmapメソッド完全ガイド!配列・ハッシュのデータ変換を実例で解説
Rubyのmapメソッドは、配列(Array)・ハッシュ(Hash)・範囲(Range)といったコレクションに対して使用できる強力なメソッドです。 mapの主な用途は、データの変換です。 例えば、文字列の配列があった場合、すべての文字列を順番に処理して、各文字を大文字に変換することができます。 また、Userオブジェクトのリストがある場合も同様です。 それらを変換して、対応するメールアドレスや電話番号など、Userクラスに定義された任意の属性のリストを作成できます。 それでは、具体的な使い方を見ていきましょう! Ruby mapメソッドの基本構文 mapの構文は次のようになっています。 a
-
Rubyの配列(Array)クラスの使い方徹底解説!基本操作と便利なメソッド一覧
配列(Array)とは? 配列はRubyに組み込まれたクラスで、0個以上の要素をリスト形式で保持することができます。さらに、要素の追加・アクセス・繰り返し処理を簡単に行えるメソッドも多数用意されています。 もし配列が存在しなければ、値ごとに個別の変数を用意しなければならず、管理が非常に大変になります。 例: a = 1 b = 2 c = 3 しかし、配列を使えば次のように書けます: numbers = [1, 2, 3] さらに嬉しいことに、配列の中には何でも入れられます! 例えば: 数値 文字列 さらに別の配列!(これは多次元配列になります) それでは、配列を最大限に活用できる