Rubyでアプリケーションを開発する際、設定ファイルやデータの保存形式として「YAML(ヤムル)」を利用する機会は非常に多いです。
database.yml や locales ファイルなど、フレームワークでも標準的に採用されているため、RubyエンジニアにとってYAMLの操作は避けて通れないスキルと言えます。しかし、いざ自分でYAMLを扱おうとすると、「load と load_file の違いは?」「セキュリティ的に safe_load を使うべき?」といった疑問や、バージョンの違いによるエラーに直面することもあるでしょう。
この記事では、Ruby標準ライブラリ(Psych)を使ったYAMLの基本的な読み込み・書き出し方法から、JSONとの相互変換、セキュリティリスクへの対策まで、実務で役立つ知識をサンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
RubyでYAMLを扱うための準備(標準ライブラリPsych)
Rubyには、YAMLを扱うための標準ライブラリとして Psych が組み込まれています。
そのため、追加でgemをインストールしなくても、require 'yaml' と記述するだけで強力なYAML操作機能を利用することができます。
モジュールの読み込み
まずは、スクリプトの冒頭でライブラリを読み込みましょう。
require 'yaml'
# これで YAML モジュールのメソッドが使えるようになります
基本的にはこれだけで準備完了ですが、環境によっては libyaml というC言語のライブラリが不足していると「yaml.h not found」のようなエラーが出ることがあります。
その場合はOSのパッケージマネージャー(apt, yum, brewなど)で libyaml-dev などをインストールする必要があります。
YAMLファイルを読み込む方法 (load_file / safe_load)
YAMLファイルをRubyのオブジェクト(ハッシュや配列)として読み込む方法はいくつかあります。
用途やセキュリティ要件に合わせて、適切なメソッドを選びましょう。
基本の YAML.load_file と YAML.load
ファイルから直接読み込む場合は YAML.load_file、文字列から読み込む場合は YAML.load を使用します。
sample.yml(読み込むファイル)
app_name: "MyApp"
version: 1.0
features:
- login
- search
database:
adapter: postgresql
Rubyコードでの読み込み
require 'yaml'
# ファイルパスを指定して読み込む
config = YAML.load_file('sample.yml')
puts config['app_name']
# => MyApp
puts config['features']
# => ["login", "search"]
YAML.load を使う場合は、ファイルの中身を文字列として読み込んでから渡します。
yaml_string = File.read('sample.yml')
config = YAML.load(yaml_string)
セキュリティを意識した safe_load の使い方
かつて YAML.load には、悪意のあるYAMLデータを読み込ませることで任意のRubyコードを実行できてしまう脆弱性(Object Injection)のリスクがありました。
そのため、外部から受け取ったYAMLや信頼できないデータを扱う場合は、安全な YAML.safe_load メソッドを使用することが強く推奨されます。
yaml_data = <<~YAML
name: "Guest"
role: "User"
YAML
# 安全に読み込む
data = YAML.safe_load(yaml_data)
# シンボルをキーとして扱いたい場合
data_symbolized = YAML.safe_load(yaml_data, symbolize_names: true)
safe_load はデフォルトで基本的なクラス(Hash, Array, String, Integerなど)のみを許可し、独自のクラスなどは読み込めないように制限します。
もし特定のクラスを許可したい場合は、引数で指定することも可能です。
※注意: Ruby 3.1(Psych 4.0)以降、YAML.load もデフォルトで safe_load と同様の挙動に変更されている場合がありますが、明示的に safe_load を使う癖をつけておくのが無難です。
データをYAML形式で出力・保存する方法 (dump)
Rubyのハッシュや配列を、YAML形式のテキストデータに変換(シリアライズ)することも簡単です。
データのバックアップや、設定ファイルの自動生成などに役立ちます。
YAML.dump でオブジェクトを文字列化
YAML.dump メソッドを使うと、RubyオブジェクトをYAML形式の文字列に変換できます。
require 'yaml'
users = [
{ name: "Tanaka", age: 25 },
{ name: "Suzuki", age: 30 }
]
# YAML文字列に変換
yaml_output = YAML.dump(users)
puts yaml_output
実行結果は以下の通りです。
---
- :name: Tanaka
:age: 25
- :name: Suzuki
:age: 30
先頭に --- が付くのはYAMLの仕様で、ドキュメントの開始を表しています。
ファイルに書き出す手順 (dump to file)
変換したデータをそのままファイルとして保存したい場合は、File.open と組み合わせて使用します。
data = {
"updated_at" => Time.now.to_s,
"status" => "success",
"items" => [1, 2, 3]
}
# 'output.yml' というファイルに書き出す
File.open('output.yml', 'w') do |file|
YAML.dump(data, file)
end
YAML.dump の第2引数にIOオブジェクト(ファイルなど)を渡すことで、直接書き込みを行うことができます。
これにより、大規模なデータでもメモリ効率よく処理することが可能です。
応用編:JSON変換やエラー対応、Railsでの活用
ここからは、実務でよく遭遇する応用的なケースについて解説します。
YAMLとJSONの相互変換や、Rails特有の便利な機能についても押さえておきましょう。
YAMLとJSONを相互に変換する (to json)
YAMLとJSONは構造が似ており、Web APIとの連携などで相互に変換したい場面があります。
Rubyでは json ライブラリと組み合わせることで簡単に実現できます。
YAML to JSON
require 'yaml'
require 'json'
yaml_str = <<~YAML
id: 101
title: "Ruby Guide"
YAML
# 一度RubyのハッシュにしてからJSONに変換
data = YAML.safe_load(yaml_str)
json_str = data.to_json
puts json_str
# => {"id":101,"title":"Ruby Guide"}
よくあるエラーと対処法 (h not found / SyntaxError)
YAML操作中によくあるトラブルと対処法です。
Psych::SyntaxErrorYAMLのフォーマットが不正な場合に発生します。
インデント(スペースの数)がずれていないか、タブ文字を使っていないか(YAMLはタブ禁止)を確認してください。
yaml.h not foundRubyのインストール時(
rbenv install など)に発生することが多いエラーです。
システムに libyaml がインストールされていないことが原因ですので、OSに応じたライブラリをインストールしてからRubyを再ビルドしてください。
RailsプロジェクトでのYAML読み込み
Ruby on Railsでは、YAMLをより便利に扱うための仕組みが用意されています。
config/ 以下のYAMLファイル内で、<%= ENV['API_KEY'] %> のようにERB(埋め込みRuby)を使いたい場合は、以下のように記述してパースします。
# ERBを評価してからYAMLとして読み込む
config = YAML.load(ERB.new(File.read('config/custom.yml')).result)
また、config_for メソッドを使えば、環境ごと(development, productionなど)の設定を自動で切り替えてハッシュとして取得できるため、Rails開発ではこちらを積極的に活用しましょう。
Rubyのスキルを活かして年収を上げる方法
以上、RubyのYAMLについて解説してきました。
なお、Rubyのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Rubyエンジニアの年収や単価は高い傾向にあるため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなRubyの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



