RubyでYAML設定直列化
YAML操作の基礎
RubyでYAMLを扱うには、標準ライブラリに含まれる yaml を読み込むだけで十分です。まずは require 'yaml' をファイルの先頭に書きます。これにより YAML.load と YAML.dump が利用可能になります。
require 'yaml'
# YAML文字列をRubyオブジェクトに変換
data = YAML.load(<<~YAML)
name: 田中太郎
age: 30
skills:
- Ruby
- JavaScript
YAML
puts data['name'] # => 田中太郎
YAMLは人間が読みやすい構造化データ形式で、設定ファイルとして広く使われています。YAML.load は文字列やファイルからRubyオブジェクトへ直列化(シリアライズ)を行います。
Ruby実践で設定ファイルを扱う
実際のプロジェクトでは、設定情報を config.yml のようなファイルにまとめ、起動時に読み込むパターンが主流です。以下は典型的な読み込み例です。
require 'yaml'
CONFIG_PATH = File.expand_path('config.yml', __dir__)
def load_config
YAML.load_file(CONFIG_PATH)
end
config = load_config
puts config['database']['host'] # => localhost
このように YAML.load_file を使うと、ファイルを直接オブジェクトに変換できます。設定ファイルは変更が頻繁に行われるため、読み込み時にキャッシュを利用することでパフォーマンスを向上させることも可能です。
シリアライズと直列化の実装
設定情報を変更した後、再びYAMLファイルに保存するには YAML.dump を使用します。以下は設定を更新し、ファイルへ書き戻すサンプルです。
require 'yaml'
CONFIG_PATH = File.expand_path('config.yml', __dir__)
def update_config(new_data)
config = YAML.load_file(CONFIG_PATH)
config.merge!(new_data)
File.open(CONFIG_PATH, 'w') { |f| f.write(YAML.dump(config)) }
end
# 例: データベースホストを変更
update_config('database' => { 'host' => 'db.example.com' })
ここで YAML.dump がオブジェクトをYAML文字列に直列化し、File.open で保存しています。直列化は「オブジェクトを文字列化して永続化する」プロセスであり、YAMLはその代表的なフォーマットです。保存したファイルは再度 YAML.load で読み込むことで、元のオブジェクト構造を復元できます。
まとめると、Ruby実践において設定ファイルを扱う際は require 'yaml' でライブラリを読み込み、YAML.load / YAML.dump を使ってシリアライズ・直列化を行い、File クラスで保存・読み込みを実装します。これにより、設定管理が簡潔かつ安全に行えるようになります。
コメント
コメントを投稿