Ruby
YAML

[Ruby] YAML形式の設定ファイルをシンボルで書かない理由?

More than 5 years have passed since last update.

Rails依存しないgemなんか書いてると、設定ファイル上のキーをシンボルにで扱いたい時に悩む。わざわざ自力で再帰的にsymbolized_keys的なものを書くのナンだし、何より設定内の「値」としてハッシュを書いてもらう場合なんかに、ちょっと嫌な感じになる(あまり良い例じゃないですが)。

name: 'test'

servers:
192.168.10.1: 'primary'
192.168.10.2: 'secondary'

config = YAML.load_file(path).my_recursive_symbolize_keys

# => {:name=>"test", :servers=>{:"192.168.10.1"=>"primary", :"192.168.10.2"=>"secondary"}}

どうしようかと軽く調べたら、YAMLファイル側でシンボルキーを書くシンタックスがあったことを今更知る。

:name: 'test'

:servers:
192.168.10.1: 'primary'
192.168.10.2: 'secondary'

これなら、予約語的なものだけをシンボルにできるし、余計な処理を読み込み時に書かなくていいし、色々解決。

config = YAML.load_file(path)

# => {:name=>"test", :servers=>{"192.168.10.1"=>"primary", "192.168.10.2"=>"secondary"}}

...なんだけど、自分ちのプロジェクト内ならとにかく、gemを使う人にこの記述を強いるのは少し抵抗がある。あまり見かけないから。

システム側で定義しているキーは「シンボルで書いて」とするのが幸せのような感じがするのですが、そうなってない理由があるのかな?と考えてみる。


  1. 他の言語との互換性

  2. この記法を扱えないyamlライブラリもあるから

  3. 書く人が混乱しないように

どれも理由としては弱い感じが。どうなんでしょ。