10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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. 書く人が混乱しないように

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

10
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?