- ブラウザURL入力今ここ
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口
- アプリ処理今ここ
- DB保存
生成されるコードが置かれる両端 — 応答を返すサーバ側と、受け取って表示するブラウザ側。差が出る4箇所を導線コースで実物として見ます。
まず結論
「動いた」は、ある1回の実行で観測された結果です。「正しい」は、仕様の定める単位・境界・順序・名前に対し、実行しない場合も含めて成り立つ性質です。前者があっても後者は保証されません。
前のレッスンのとおり、エージェントがツールから誤り信号として受け取れるのは観測に現れたものだけです。現れなかった側の差は人が仕様と突き合わせます。
Content-Type を付けないサーバの HTML が、ブラウザに表示されました。この「表示された」は何を意味しますか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
観測された1回と、仕様に対する全域
エージェントが「動きました」と報告するとき、根拠は実行の結果です。前のレッスン『エージェントに任せられること — 観測できないものは検証できない』のとおり、ツールから受け取れるのは観測に現れたものだけで、現れなかったものには誤り信号が存在しません。
2つを分けておきます。
- 「動く」 — ある入力・環境・時点での1回の実行で、観測結果が期待と一致した。
- 「正しい」 — 仕様が定めた単位・境界・順序・名前に対し、実行していない場合も含めて成り立つ。
その1回が仕様に合っていたのか、合わないまま偶然その結果になったのかは、実行結果では区別が付きません。
- ・右下の箱が、実行を増やしても縮まない部分
- ・埋めるには仕様の側から読み直す
差が出る4箇所
全部を疑うと手が止まります。差が現れる場所は4つに型化できます。
箇所 ずれの中身 実行で露見するか桁 単位・基数の取り違え 踏んだ値によっては出る境界 端の1件を含むか否か 端を踏まなければ出ない因果 原因と結果の向きが逆 1回の結果は合いうる架空の固有名詞 実在しない名前 無視されると差が出ない
桁 は説明文の側にもある型です。第6週『分岐予測 — 先回りして、外したらどうなるか』で扱うとおり、分岐予測を外した損失は 15〜20 サイクル程度で、第7週で扱うメインメモリまで取りに行く 200〜400 サイクルとは桁が違います。混同した説明は用語も構造も正しいので違和感が出ません。コード側では、ミリ秒の引数に秒を渡す、1000 と 1024 を取り違えるといった単位・基数のずれが同じ形で現れます。
境界 と 架空の固有名詞 は、コード固有の現れ方です。
「テストが通ったから正しい」と言えるのは、どこまでですか。
第52週の4類型との対応
第52週『総まとめ — もっともらしい説明を見抜く』は、説明の誤りを 桁が違う / 因果が逆 / 出典の取り違え / きれいな形 の4つに型化します。
第52週の類型 コードでの現れ方桁が違う 同じ形因果が逆 同じ形出典の取り違え 実在する値を、実在する別の文書に帰属させる形きれいな形 (ここでは扱わない)コード側の箇所 対応する第52週の型境界 該当型なし架空の固有名詞 出典の取り違えと隣接。同一ではない
架空の固有名詞は、出典の取り違え型と隣り合いますが、コードでは帰属先がパラメータ名や API 名なので確かめ方が変わります。第52週が共通構造として書くのは 実在しない部品が1つも無い ことですが、コードでは部品自体が実在しないことがありえます。
対比例 — 順序を偶然で合わせた2つ
1つ目はコード。 head の <script> で document.getElementById が null を返すという報告に、エージェントが中身を setTimeout(init, 100) で包み「動くようになりました」と返したとします。
実際に動きます。ただし理由は、100 ミリ秒でパースがその要素まで進んだという観測結果です。WHATWG HTML Standard が順序について述べるのは別のことで、external classic scripts は async も defer も無ければ "fetched and evaluated immediately, blocking parsing until these are both complete" であり、async が無く defer が付いていれば "evaluated when the page has finished parsing" です。100 という値は、この記述のどこにも根拠がありません。実物は導線コース『JSが割り込む — <script> がパーサを止める理由』で見ます。
2つ目は説明文。「書き込み増幅が起きるせいで SSD の空き容量が減る」という文です。第11週『SSDはなぜ書き込みが複雑なのか — 消せる単位が大きすぎる』で扱う式 ½(1+ρ)/ρ では、ρ が 25% で 2.5 倍、7% で 7.6 倍に跳ね上がります。ρ は Agarwal & Marrow が over-provisioning factor と呼ぶ (T−U)/U で、T は物理容量、U は利用者が使える容量です。利用者から見える空き容量そのものではありません。予備領域が減ることが原因で、増幅の悪化が結果です。向きが逆です。
第52週『総まとめ — もっともらしい説明を見抜く』の4類型と、このレッスンの4箇所の関係はどれですか。
setTimeout で「直った」コード
遅延を入れたら要素が取れた、という観測は事実です。しかし順序を作るのは遅延の値ではありません。仕様が述べるのは、古典スクリプトがパースを止めること、defer ならパース完了後に評価されることだけです。
説明の向き 実際の向き100ms 待って順序が整った その時のパース進度が合った遅延を伸ばせば確実 仕様は遅延を順序の根拠にしない
「増幅のせいで空きが減る」という説明
書き込み増幅も予備領域も実在し、値は Agarwal & Marrow の近似式から計算したものです(同論文のシミュレーションでは ρ=25% で 2.67)。逆なのは向きだけ。第11週の式は ρ が 0 に近づくと発散します。
予備領域の比率 ρ 書き込み増幅 W25% 2.50 倍7% 7.64 倍
コードの話と SSD の話。対象は違いますが、共通して必要な読み方は何でしょうか。
どちらも「間違った部品」を探しても見つかりません。何が正しく、何だけが違うのかを分けてみてください。
この章のまとめ
- 「動く」は観測された1回の結果、「正しい」は仕様に対する全域の性質。 実行を増やしても埋まらない範囲が残る。
- 誤り信号を受け取れるのは観測に現れたものだけ。現れなかった側は人が仕様と突き合わせる。
- 差が現れるのは 桁 / 境界 / 因果 / 架空の固有名詞 の4箇所。第52週の4類型のうち 桁と因果は同じ形、境界と架空の固有名詞に対応する型は第52週に無い。
- 因果の型は向きだけが逆なので実行結果では区別が付かない。「何が何を引き起こすか」を言い直して確かめる。
- 架空の固有名詞の型は値が本物で名前が偽物。目を名前に向ける。
この先の学びにどう繋がるか
<script> の順序は導線コース『JSが割り込む — <script> がパーサを止める理由』、Content-Type は『サーバは何を返すか — Content-Type が無いと何が起きるか』で突き合わせます。
52週の順路では、第6週で桁の型を、第11週で因果の型を扱います。第41週『なぜ入力がコードになるのか — インジェクションの原理』の「値が構文になれる位置」、第48週『なぜハルシネーションが起きるのか — 推測が報われる構造』を経て、第52週が4類型に締めます。
クイズの「Claude」グループの「Claude Code 実践」「LLMアプリ開発の実践」にも関連する設問があります。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
head の `<script>` で要素が取れず、`setTimeout(init, 100)` で包んだら動きました。この評価として妥当なのはどれですか。
用語集(5語)
- 「動く」
- ある入力・環境・時点での1回の実行で、観測結果が期待と一致した状態。観測しなかった範囲には何も述べていない。
- 「正しい」
- 仕様の定める単位・境界・順序・名前に対し、実行しない場合も含めて成り立つ性質。仕様との突き合わせでしか確かめられない。
- MIME sniffing
- 受け手が中身を調べて媒体型を推定・上書きする振る舞い。RFC 9110 §8.3 は "risks drawing incorrect conclusions about the data" と述べる。
- charset パラメータ
- Content-Type に付く文字符号化方式の指定。RFC 9110 §8.3.1 の等価な表記はいずれも名前が charset。
- 架空の固有名詞型
- 実在する値を、実在しないパラメータ名・API名に付けた誤り。値が本物なので確認が値に向き、名前が見落とされる。
出典(一次ソース)
- RFC 9110 — HTTP Semantics §8.3 Content-Type / §8.3.1 Media Type ↗
- WHATWG HTML Standard §4.12.1 The script element(Living Standard — 取得時 Last Updated 28 September 2026) ↗
- Anthropic — Building effective agents(Published Dec 19, 2024) ↗
- Agarwal & Marrow — A Closed-Form Expression for Write Amplification in NAND Flash (2010 IEEE Globecom Workshops) ↗
- Agner Fog — The microarchitecture of Intel, AMD and VIA CPUs(分岐予測ミスの損失) ↗
- 7-cpu — Intel Skylake X(メインメモリの待ち時間。RAM Latency = 79 cycles + 50 ns) ↗
- WHATWG HTML Standard §17.1 text/html(Optional parameters: charset) ↗