2026年5月に「経験は保存ではなく増殖する」を載せた。よく書かれたノートは30年後にもその日の判断を教えてくれるがそこで止まり、同じ形で残した経験は止まらずに増えるという記事だった。
その記事の背骨は三層だった。事実が積もれば技術になり、技術が積もれば予測になる。そしてその三つを可能にする条件がひとつ — 同じ形。
同じ形なら重ねて見られる。 そして重ねた瞬間、一人が一生かかっても見えなかったものが見える。
正しい言葉だと今も思う。問題はその記事が「同じ形」が実際にどんな姿かを一度も見せなかったことだ。「同じ欄に、同じ単位で、同じ形式で」と書いただけだ。
今回はその欄がいくつで何に耐えるかを書く。
同じ形は六つの欄だった
温室制御のサンプルでノードが自分を宣言する形式だ。
printf("%s{\"id\":\"%s\",\"role\":\"%s\",\"kind\":\"%s\","
"\"model\":\"%s\",\"unit\":\"%s\",\"value\":%.1f}",
i ? "," : "", n->id, n->role, n->kind, n->model,
n->unit, n->value);
六つの欄だ。 id · role · kind · model · unit · value。
元編が例に挙げた農作業ノートの欄が「日付/作物/植えた日/最初の花/その日の気温/結果」の六つだった。偶然同じ数なのが面白いが、重要なのは数ではなく何が欄になったかだ。
unit が欄としてあることがこの形式の核心だ。温度計が華氏で測るなら華氏だと言う。値を他人のためにあらかじめ変換してやらない。 ハードウェアは自分が知っていることだけを正直に言い、合わせる仕事は上でやる。
そして合わせる仕事はちょうど一か所にある。
/// 規則が使う単位に移した値。
///
/// このサンプルで単位を知る場所はここひとつだけで、モデル名ではなくノードが
/// 宣言した unit を見て判断する。誰も聞いたことのないセンサーでも自分の単位を
/// 言うので、ここに正確に入ってくる。
double get canonicalValue {
switch (unit) {
case 'F':
return (value - 32) * 5 / 9;
default:
return value;
}
}
これが「重ねて見られる」の実際の実装だ。 互いに違う製品が互いに違う単位で話しても、同じ位置に立たせる場所。元編はこれを「同じ欄に入れること」とだけ書いたが、実際に作ってみると欄を決めることと、欄へ移す場所を一か所にまとめることは別の仕事だった。
モデル名で分岐していたら、その一か所がすなわち一覧になる。新しい製品を買うたびにその一覧が伸びる。unit を見れば初めて見る製品も自動的に合う。同じ形とは、形式だけでなく、形式を解釈する場所がひとつだという意味でもある。
重ねてみたら実際に耐えた
元編は重ねて見れば見えなかったものが見えると言った。このサンプルで重ねることが何に耐えたかはログにある。
同じ規則で互いに違う二つの設置を回した。
A: discovered 3 nodes — t1:temperature:TH-100(C), h1:humidity:HM-20(pct), v1:vent:VT-9(pct)
A: vent above 26C: 26.5 -> v1=80.0
B: discovered 5 nodes — t1:temperature:FX-200(F), h1:humidity:HM-20(pct),
c1:co2:CO-5(ppm), v1:vent:VT-9(pct), w1:valve:WV-3(pct)
B: vent above 26C: 26.3 -> v1=80.0
server code: unchanged rules: unchanged rebuild: none
摂氏センサーと華氏センサーが同じ閾値の前に並んで立った。 そしてCO2センサーとバルブが途中で増えたのに何も変わらなかった。
これは元編の言う増殖の最も骨だけの形だ。経験が増えるには後から入ったものが先行するものと同じ位置に立てなければならず、六つの欄がそれを可能にした。
(温室の連鎖全体はセンサーを差し替えても制御はそのままに。)
錨がなければ例外が口をきけない
元編で最も良かった観察がこれだった。
錨がひとつできると例外が口をきき始めたのだ。散らばったノートでは22日も15日もただ「今年はちょっと違うな」で流れていったはずのことだ。比べる基準線がないので例外だとすら分からなかった。
作ってみるとこの構造がコードにそのまま現れた。設備サーバーが機械の状態を渡すとき、値だけでなくその値がどこと比べられるかを一緒に渡す。
final overdue = (m['runHours'] as int) > (m['serviceEveryHours'] as int);
final vibrationOver =
(m['vibrationMm'] as num) > (m['vibrationLimitMm'] as num);
return _json({
'id': id, ...m,
'serviceOverdue': overdue,
'vibrationOverLimit': vibrationOver,
});
vibrationMm: 5.2 だけでは何も言えない。vibrationLimitMm: 4.5 が横にあってはじめて5.2が例外になる。元編の「18日という錨」がこの場所だ。
そして実際の答えでその差が現れる。
A: CONV-03 needs attention — service is overdue (9310 h against a 8000 h interval)
and vibration is above limit (5.2 mm against 4.5 mm).
数字の横にいつも基準が付いている。それが元編の言う「平均を基準線として立て、すべての年をその上で読ませる」の実際の姿だ。
(設備アシスタントは答えの横に根拠を付けるに。)
18日と250年 — 例示だったと書く
元編には数字がいくつもあった。植えて平均18日目に最初の花、偏差二日以内、そして世代を越えれば250年分の経験。
それらの数字は観測ではなく例示だった。 どこかの農家の実際の記録を見たのではなく、250年は算術で作った絵だ。ところが記事に具体的に書かれていたので観測のように読めた。
この記事ではその数字を例示として明示する。そしてこのシリーズが実際に測ったものだけを数字で書く。
| 値 | 性格 | |
|---|---|---|
| ノードの自己宣言の欄数 | 6 | 実測(形式がそうだ) |
| 単位を知るコードの場所 | 1か所 | 実測 |
| 規則ひとかけら | 7行 | 実測 |
| 設置A→Bで変わった規則の行数 | 0 | 実測 |
| 「植えて18日目に最初の花」 | — | 例示 |
| 「世代を越えれば250年」 | — | 例示 |
証明できなかった層
元編の背骨は三層だった。事実 → 技術 → 予測。
このシリーズが実際に見せたのは第一層までだ。 同じ形で置かれれば重ねて見られること、そして重ねて置けば新しいものが入っても先行するものと同じ位置に立つこと。そこまでだ。
第二層 — 事実が積もって技術になること — は見えなかった。 これらのサンプルは数日回したものであり、積もりと呼べる時間がなかった。温室の規則は私が書いたものであってデータから出たものではない。
第三層 — 技術が予測になること — は試みてすらいない。 元編のその部分は今もあのときと同じ状態で残っている。
これをぼかさないことが重要だと見る。元編の問題は三層をひと息で語り、第一層の根拠で第三層まで連れてきてしまったことだった。第一層が真であることと第三層が真であることは、大きさの違う主張だ。
このサンプルがやっていないこと
元編の誠実の節の四条件は維持する。作ってみてさらに分かったことを書く。
「同じ形」を守る難しさは人の側だけでなく形式の側にもある。 元編は「忙しい春の日にノートを開いて欄を合わせて書くのは難しい」と人の問題として見た。実際に作ってみると欄を決める人が何を欄にするかを間違えればその後がすべて食い違う。unit を欄に置かなければ、華氏センサーが入ってきた瞬間に規則が二十度ほど食い違った値を受け取る。どの欄を置くかが設計のすべてだ。
この記事には新しいサンプルがない。 引用したものはすべて先行する編で作ったものだ。
農家の語りは元編のものであり取材ではない。 匿名の記述なので実在人物の問題はないが、観測として読まれないようこの記事では例示としてのみ引用した。
「知識階層」という規約の実体はこのシリーズが扱っていない。 元編がその層を予告し、ここで見せた六つの欄はその層のごく下のほうの一枚だ。その上がどうなっているかはまだ分からない。
重ねて置けるようにしておく仕事
元編はこう閉じた — 経験は保存ではなく増殖すると。
六か月後に一行を足す。増殖するにはまず重ねて置けなければならず、重ねて置けるには欄が同じでなければならず、欄が同じであるには誰かがその欄をよく選んでおかなければならない。
六つの欄だった。そのうちひとつ(unit)を落としていたら、残りの五つは無意味だっただろう。華氏の値が摂氏の席にそのまま座っていたはずだから。
増殖は自然には起きない。ただし自然に起きうる場所を作っておくことはでき、それは大した技術ではなく欄をひとつ増やす仕事だった。
makemind.dev 「探索」— 同じ形が実際には六つの欄だったことを見せた。