Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > psychライブラリ > Psychモジュール > safe_load
safe_load(yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false) -> object
[permalink][rdoc]safe_load(yaml, legacy_permitted_classes=[], legacy_permitted_symbols=[], legacy_aliases=false, legacy_filename=nil) -> object
安全に YAML フォーマットの文書を読み込み Ruby のオブジェクトを生成して返します。
デフォルトでは以下のクラスのオブジェクトしか変換しません。
再帰的なデータ構造はデフォルトでは許可されていません。
任意のクラスを許可するにはキーワード引数 permitted_classes を指定すると、そのクラスが追加されます。例えば Date クラスを許可するには以下のように書いてください:
Psych.safe_load(yaml, permitted_classes: [Date])
すると上のクラス一覧に加えて Date クラスが読み込まれます。
エイリアスはキーワード引数 aliases を指定することで明示的に許可できます。
x = []
x << x
yaml = Psych.dump x
Psych.safe_load yaml # => 例外発生
Psych.safe_load yaml, aliases: true # => エイリアスが読み込まれる
yaml に許可されていないクラスが含まれていた場合は、 Psych::DisallowedClass 例外が発生します。
yaml がエイリアスを含んでいてキーワード引数 aliases が false の時、 Psych::BadAlias 例外が発生します。
filename はパース中に発生した例外のメッセージに用います。
キーワード引数 symbolize_names に true を指定した場合はハッシュのキーを Symbol に変換して返します。
Psych.safe_load("---\n foo: bar") # => {"foo"=>"bar"}
Psych.safe_load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"}
また legacy_permitted_classes などのオプション引数は非推奨な引数となっています。 $-w が true の時にオプション引数を渡すと警告が出力されます。
# warning: Passing permitted_classes with the 2nd argument of Psych.safe_load is deprecated. Use keyword argument like Psych.safe_load(yaml, permitted_classes: ...) instead.
Psych.safe_load("", [Date])