前の二編では装置ひとつを扱った。自分の画面を渡し、その画面がインストールなしに届く。
現場に装置がひとつだけということはない。操舵室には発電機とバラストと燃料計が一緒にある。この一編は 複数を一つの画面にまとめるときに何が起きるかだ。
普通はホストが結合を書く
複数の装置を一つの画面で見るには、たいていアプリがその結合をコードで持っている。どの装置のどの値をどこに置くか、そのボタンがどの装置へ行くかをアプリが知っている。
だから 装置をひとつ足すたびにアプリを直す。 そして組み合わせがビルド時点で固定される。現場の機器構成が変われば、アプリもまた出ることになる。
ここでは結合が文書へ降りる
UI DSL 1.4の合成プロファイルはその結合を 文書へ降ろす。ホストがやることは二つだけだ — 接続を持つこと、そして文書が名指しした相手を開くこと。結合ロジックがない。
文書にはこう書かれる。ここにこの接続が渡す画面を入れよ。あそこにあの接続が渡す画面を入れよ。
プロファイルが定める性質が四つある。
- 各装置が 配る画面をそのまま無修正で他人のアプリの中へ入れる。装置は自分が合成されていることを知らない。
- 埋め込まれた部分の操作と購読が その装置へ出る。
- 失敗は タイル単位で隔離される。
- サーバーを追加してもホストは変わらない。
四つとも仕様に書かれている。だから画面で測った。

測ったもの — ノード三つ
MCPノードを三つ立てた。Boiler A、Pump B、Valve C。それぞれ自分の画面を配り、自分の値を持ち、自分の道具を出す。互いを知らない。
そして三つを一ページに置く文書をひとつ書いた。その文書には何が描かれるかは書かれていない。どの接続がどこに入るかだけが書かれている。
① 三つのタイルがそれぞれ自分の画面として描かれた。 それぞれ自分の名前、自分の単位、自分の色、自分の値。アプリはそのどれも書いていない。
② タイルのボタンが自分のサーバーへだけ行った。 最初のタイルのボタンを押すと最初のサーバーの値だけが動く。サーバーに直接訊いて確認した — 29→30、残り二つはそのまま。二つめを押せば二つめだけ、三つめを押せば三つめだけ。
これが合成でいちばん静かに間違いうる場所だ。画面はきちんと描かれているのに ボタンが別のサーバーへ行けば、その症状は画面に出ない。
③ ひとつを落とした。 二つめのノードを止めた。そのタイルだけが代替表示になり、最初のタイルは生きていた。 ページも、その下の内容も描かれ続けた。四つのうち一つが消えた画面は三つが生きている画面であって、白い画面ではない。
④ 三つめを足した。 文書に二か所足した — 接続ひとつ、席ひとつ。そして ホストのバイナリのハッシュを追加前後で比べた。
同じだった。リビルドがなかった。