Ruby標準ライブラリで便利ツール
Ruby実践で使える標準ライブラリ
Rubyの標準ライブラリは、外部gemを導入せずに多くの機能を実装できる点が魅力です。標準ライブラリは require で簡単に読み込むことができ、プロジェクトの依存関係を最小限に抑えることができます。例えば、ファイル操作には File、日時処理には Time、正規表現は Regexp などが用意されています。
標準ライブラリの中でも特に便利なのは OpenStruct と Set です。OpenStruct は属性を動的に追加できる構造体で、簡易的なデータオブジェクトを作る際に重宝します。Set は重複を許さない集合を扱うクラスで、ユニークな要素の管理に最適です。
以下に OpenStruct と Set を使った簡単な例を示します。
require 'ostruct'
require 'set'
user = OpenStruct.new(name: 'Alice', age: 30)
puts user.name # => Alice
tags = Set.new
tags.add('ruby')
tags.add('gem')
tags.add('ruby') # 重複は無視される
puts tags.to_a # => ["ruby", "gem"]
requireで組み込み以外の機能を拡張
Rubyの require は標準ライブラリだけでなく、外部gemや自作モジュールも読み込むために使われます。require_relative を使えば、現在のファイルから相対パスでモジュールを読み込むことができます。
例えば、プロジェクト内に lib/utils.rb がある場合、以下のように読み込むことができます。
require_relative 'lib/utils'
# utils.rb 内で定義されたメソッドを呼び出せる
Utils.say_hello
外部gemを利用する場合は、まず Gemfile に依存関係を記述し、bundle install でインストールします。その後、require で読み込むだけです。
# Gemfile
gem 'httparty'
# 使い方
require 'httparty'
response = HTTParty.get('https://api.example.com')
puts response.body
DigestとBase64でデータ処理
セキュリティやデータ整合性を扱う際に欠かせないのが Digest と Base64 です。Digest はハッシュ関数(MD5, SHA1, SHA256 など)を提供し、データの改ざん検知に利用されます。Base64 はバイナリデータをテキストに変換するエンコーディング方式で、メールやJSONでバイナリを扱う際に便利です。
以下は SHA256 と Base64 を組み合わせて、文字列のハッシュをエンコードする例です。
require 'digest'
require 'base64'
text = 'Hello, Ruby!'
hash = Digest::SHA256.digest(text)
encoded = Base64.encode64(hash).strip
puts encoded
# => "XUFAKrxLKna5cZ2REBfFkg=="
逆に Base64 でエンコードされたハッシュをデコードして元のバイナリに戻すことも可能です。
decoded = Base64.decode64(encoded)
puts decoded == hash # => true
OpenStructとSetで便利ツールを作る
標準ライブラリの OpenStruct と Set を組み合わせると、軽量なデータ構造とユニークな要素管理を同時に実現できます。例えば、タスク管理ツールの簡易実装を考えてみましょう。
require 'ostruct'
require 'set'
class Task
attr_accessor :id, :title, :tags
def initialize(id, title)
@id = id
@title = title
@tags = Set.new
end
def add_tag(tag)
@tags.add(tag)
end
def to_struct
OpenStruct.new(id: @id, title: @title, tags: @tags.to_a)
end
end
task = Task.new(1, 'Write blog post')
task.add_tag('ruby')
task.add_tag('tutorial')
task.add_tag('ruby') # 重複は無視される
puts task.to_struct.inspect
# => #
このように、標準ライブラリだけで柔軟かつ高速にツールを構築できる点が Ruby の魅力です。外部依存を減らし、保守性を高めるために、まずは標準ライブラリを活用してみることをおすすめします。
コメント
コメントを投稿