1. ホーム
  2. ruby-on-rails

[解決済み] [Solved] このdatabase.ymlファイルにおける&,<<,*の意味は何ですか?

2022-04-12 02:31:08

質問

今までdatabase.ymlは各パラメータが明示されているものしか使っていませんでしたが、下記のファイルではよくわからない文字が使われています。各行や記号(&,*,<<)の意味、このファイルの読み方について教えてください。

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

解決方法は?

その & はノードの別名を示します(例では &default は開発ノードを "default"としてエイリアスします)、そして * は、エイリアスされたノードを "default" という名前で参照します。また <<: はそのノードの内容を挿入する。

ここで、YAMLの仕様を引用させてください。

繰り返されるノード(オブジェクト)は、まずアンカー(アンパサンド - "&" でマーク)で識別され、それ以降はエイリアス(アスタリスク - "*" で参照)される。

ということで、例の一部

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test

に展開されます。

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

を作成し、同時に "test" ノードも "test" というエイリアスで利用できるようにします。

を見てみましょう。 YAML 仕様 - 2.2 構造体 をご覧ください(または、さらに多くのドキュメントが必要な場合は、こちらをご覧ください)。 3.2.2.2. アンカーとエイリアス )