
138
7 章 プラグインによる Vagrant の拡張
な
Ruby
のコードに過ぎないので、見ればわかることでしょう。どちらの設定オブ
ジェクトも同じ構造を持っていると考えることができるので、
instance_variable_
get
と
instance_variable_set
は自由に使うことができます。
これで設定のマージは終わりです。ほとんどの場合、デフォルトのマージ処理のロ
ジックで事は足りるはずであり、単純なルールを守って
UNSET_VALUE
を使えば、デ
フォルトのロジックは完璧に動作します。とはいえ、マージ処理のロジックを厳密に
制御する必要がある場合には、そうすることもできるのです。
プライベート変数と設定のマージ処理
場合によっては、設定の実装がその状態を追跡するインスタンス変数が、一
時的でマージされることを意図していないことがあります。2 重のアンダー
スコア(__ )で始まるインスタンス変数が見つかった場合、Vagrant はそ
の変数を無視します。
このトリックは、カスタムのマージ処理のロジックの適用に先立って行われ
るデフォルトのマージのロジック(カスタムの
merge
メソッドの
super
の呼
び出しで行われます)で、コストのかかるオブジェクトのコピーを避けるた
めに広く使われます。
たとえば、Vagrant のコアは同期フォルダを
@__synced_folders
というイ
ンスタンス変数で追跡していますが、マージのロジックはカスタムなので、
こうすることで大きなハッシュが大量にコピーされることを避けているので ...