図解60型のグリッド整列を記録に残し、統合カタログを新設した

開発mdx-playground

前の日に直したはずの図が、直す前の姿で並んでいた。

図解60型のグリッド整列を1ページに記録する作業をしていて、出来上がった一覧をスクロールしている最中に気づいた。 A の5番、フレームワーク図。 After のはずのところに、前日「ここを直して」と頼んだ形が入っていない。

履歴が消えたとは思えなかった。 コミットは残っているし、比較ページも生きている。 だとすると、入れるべき SVG を取り違えているのだろうか。

60型分の Before / After を1ページに残す

朝いちばんの仕事は、前のセッションから引き継いだ「グリッド整列の記録ページ」の実装だった。

やりたかったのは単純で、60型ぶんの図について「整列前」「整列後」を縦に並べ、型ごとに1目盛りを何に取ったか、なぜ動かしたか、何 px どう動いたかを全部読めるようにすること。 既存の27型カタログは Web フォントを効かせるために v-html で SVG をインライン化しているが、今回作るページは <img> で読む方針にしたので、環境フォントで描かれる。

生成器を書かせて回したら、カードは60枚、DOM 上の SVG は117枚で、計画どおりの数だった。 ブラウザで開いたら、Before の SVG が全滅していた。

原因はすぐに割れた。 Vue から抜き出した Before の末尾に、次の型のコメントと余分な </g> が残っていて、XML として壊れていた。 HTML なら browser が黙って補正するので、比較ページ側では最後まで見えていなかった不具合だ。 <img> にした瞬間に、パーサが厳しくなって表に出た。

末尾を削る正規表現が最初のコメントからマッチして、本体ごと削っていた。 末尾から走査する形に直させて、ついでに well-formed 検査を生成器に組み込んだら、234枚すべてが通った。

検査が通ったあとは目で見る。 グリッドなしの117枚を巡回し、トグルを ON にしてグリッド版117枚も巡回させた。 第2部の27型でテキストが溢れているように見えたので、<img> と同じ条件にするため iframe の中で実測したら、軸ラベルの回転による誤検出だった(getBBox は回転前の座標を返す)。

そのあとで一つ抜けが見つかった。 「トップページのインデックスから、このページにたどり着けますか」と聞いたら、答えは No。 nav-card/diagram-types/diagram-design は並んでいるのに、新しいページが入っていない。 カタログを経由する2ホップの導線しかなかったので、デザイン節にカードを1枚足させた。

ソースを直したのに配信 HTML に出てこない、という一幕もあった。 dev サーバーが2つ動いていて、こちらの担当分は3001、3000 は別セッションが先に握っていた。 同じ作業ツリーを見ているので中身は同じだが、index.vue の変更だけが3000側に伝わらない。

直したはずの図が、直る前に戻っていた

まず、生成物と前日の比較ページを突き合わせさせたら、座標が一致した。 つまり取り違えではなく、after-a.mjs の中身がそうなっているということになる。

履歴を追わせたら、原因が出てきた。 別セッションが Codex の指摘を受けて、組み直し案を意図的に取り下げていた。 削除でも履歴の消失でもない。 ただ、取り下げの根拠が正しいとは限らないので、Codex の指摘が事実かどうかを Before の実座標で検算させた。

こちらとしては、まず自分が見たものを確かめたかったので、「1個の図形だけ B案を戻して、本当に私が見たやつかどうか確認したい」と頼んだ。 対象は A の5番のフレームワーク図と、D の5番の導入効果図の2つだ。 どちらも前日に「グリッドで意味を先に取ってから直して」と頼んだものだった。

D の5番を見ると、現行版には「リソースの数字が結論より大きい問題は未適用」と書いてあり、旧版はそこを直していた。 意味グリッドの定義まで一緒に巻き戻っていて、復元対象は3ファイルの4ブロックになった。

戻す前に、旧版の修正メモが事実として正しいかだけ確認させた。 -38% は x=341 / y=200 でバーの脇に置かれ、リソースの34に対して結論は30で、重みが逆を向いている。 実測と一致したので、そのまま差し戻した。

戻したあと、フレームワーク図の修正メモには事実誤認が2つ残っていたので、正しい設計判断の文言に置き換えさせた。 復元後のフレームワーク図は矢印軸になり、導入効果図は結論の数字がリソースより大きい向きになった。 ブラウザで両方見て、自分が前日に見たものと同じだと確認した。 そのうえで、revert と記録ページの追加を2件に分けてコミットした。

消えた画像ディレクトリは、消えていなかった

同じ午前中に、もう1件「消えた」ものがあった。 画像ディレクトリがまるごと無い。

こちらとしては意図した削除ではないので、別セッションの Claude Code に事実確認を投げてもらうことにした。 Windows からは SendMessage が使えないので、ブラウザ経由で相手のスレッドを開かせた。

送るまでもなかった。 相手のスレッドに理由が全部書いてあった。

実体は削除ではなく移動で、08:47 から 09:04 のあいだに、public/images/<slug>/ から content/_local-unpublished/<日付>/<slug>/ へ移されていた。 非公開記事の画像を公開ディレクトリから出す、という変更だ。 _local-unpublished/ は gitignore の対象なので、移された分はバージョン管理の外に出ることになる。

こちらのページに実害があるかは別問題なので、234枚が 200 で返るかを一括で確かめさせたら、1枚も欠けていなかった。 残るのは整合だけなので、マニフェストの /images/... 17件を /_local-unpublished/... に置き換えてコミットした。

push してデプロイまで走らせたら、プリレンダーは9,471ルートを704秒で完走し、/diagram-grid-alignment が生成物に入っていることも確認できた。 ただ、その先のビルドが exit 1 で落ちてデプロイは実行されなかった。 原因は別セッションとの競合で、本番は無傷のままだった。

33型を整列版に差し替える

午後は、33型の After に対する Codex の指摘を潰す作業を別セッションに渡した。

セッションが長くなりすぎていたので、引き継ぎ先を1本に絞らず、分担も渡す側で決めて具体的に書く形にした。 このやり方は口頭で毎回言うものではないので、cross-machine-message スキルに「まとまった作業を渡すときは、分担も指示側が決める」という恒久ルールを書き足させた。

指摘の反映は完了して、「変更なし」の判定は3型まで絞り込まれた。 そのあと33型を整列版に差し替え、グリッドを重ねて表示するトグルを付けた。

渡した先の進捗を見ていたら、作業3の「Before / After の本番コンテンツ化」だけが未着手で止まっていた。 置き場所を承認していないから着手していない、という報告だった。 置き場所については、こちらの見立ても向こうの推奨も独立ページで一致した。 33型と27型を1ページにするか分けるかも迷ったが、もう統合計画の一部なので1ページに寄せた。

このあたりで、渡した先の残量が49%まで落ちていた。 作業3を完走できずに切れる可能性が高いので、実装させるのをやめて、計画書を書かせて止める方針に切り替えた。

60型を1つのカタログにまとめる

夕方、統合カタログを新設した。 /diagram-catalog に60型を1ページに並べ、詳細は /diagram-catalog/{a〜i}/{no} で開く。 内訳は SVG が33枚、<img> が27枚だ。 重複している7型は片方に寄せず両方残し、相互リンクで並べて比べられるようにした。 一覧の冒頭に「両方にある型(7組)」のブロックを置き、見出しに id を振って #dup-heading で直接飛べるようにした。 明日はここから選別を始めることになる。

最初はカテゴリを33型と27型で割っていたが、これをやめた。 ツリーもピラミッドも組織図も、どちらの系にもあるからだ。 種類で混ぜて9カテゴリに畳み、出自は 33系 / 27系 のタグで示す形に組み直させた。 重複する型は同じカテゴリの中で隣り合い、33系 → 27系 の順に並ぶ。

「27系に揃える」が、そのまま通らない

60型を1ページに並べて初めて、比率とマージンが揃っていないことが目に見えるようになった。

こちらの認識では、スライドの比率は4対3ともう1種類の2つだった。 PC の横幅で見るなら27系のほうが自然なので、33系をそちらへ寄せて、タイトルとメッセージ行のマージンもフォントも全部合わせたい、と伝えた。

実測させたら、前提が崩れた。 27系だけで viewBox が13種類あり、「27系の比率」という単一の値が存在しない。 最小が 728×356、最大が 1200×664、最頻値は幅1000が19本、高さは500が10本と480が5本だった。 つまり「27系に合わせる」は、実際には「27系の最頻値を採って1つに決める」という意思決定になる。

外マージンのほうは迷わずに済んだ。 27系の最頻は40で13本あり、grid-alignment.md の導出式(幅1000ならカラム幅62、左右マージン40、gutter 16)と一致する。 33系の左マージンは28で、根拠の記述がどこにもない。

測っているうちに実装へ入りかけていたので、そこで止めた。 これはもう統合フェーズそのものであって、計画書なしで走らせる規模ではない。 計画書に書き加えてもらって、今日はそこで終わりにした。

書かせてみたら、統合カタログの計画書はそもそも存在していなかった。 統合の構想は前日の口頭指示だけで走っていて、その結果「重複を許した統合」という意図が、成果物側では「重複が多いので統合しない」と逆に記録されていた。 同じことを繰り返さないよう、計画書に書いた理由ごと残させた。 Codex にレビューさせたら致命的な指摘が2件出て、うち1件は計測を推測のまま書いているという内容だったので、測り直した。

夕方に図を1枚、メッセージラインを何度も言い直した

同じ夕方、別の話として図を1枚作った。

作りたかったのは、AI 以前と以後を比べる図だ。 以前は職種が分業化されて、専門性を深く掘るほど価値が出る世界だった。 以後は月200ドルで知能が使い放題になり、推論コストも下がり続けているので、人間が深く掘っていた層を AI が引き受けられるようになった、という話だ。

最初に出てきた案は、横軸に業務分野を5列、縦軸に専門性の深さを取り、Before を縦に深く、After を横に広く描く、縦棒から横棒への反転だった。 過去記事を検索させたら、2026-03-05 の「AI時代の生産性は『分業をやめる』ことで上がる」がまさにこの論点で、語彙をそこから拾い直した。

ここから、メッセージラインを何度も言い直すことになった。

1回目は注記に引っかかった。 「月200ドルで使い放題の知能と推論コストの低下が、深さの値段を崩した」と書いてあったが、これは違う。 調べさせたら、採用しなかった案Bの語彙が注記にだけ残っていた。 案Bのタイトルが「深さの値段が落ち、広さの値段が上がる」で、採用したのは案Aの「分業の反転」だった。 図の主張と注記の主張が別のことを言っている状態になっていた。

2回目は「反転」という語そのものに引っかかった。 「分業の深化が、知能のコモディティ化で反転する」と言われても、何が何で反転しているのか分からない。 概念語のまま置くと、絵のどこを指しているかを読み手に解読させることになるので、図に描いてあることをそのまま言う形に直させた。

3回目は面積の話になった。 言いたいのは、1人の守備範囲が「深さを掘る」から「横に広げる」に変わるということだ。 だったら Before と After でピンクの面積が同じでないと、話と絵が合わない。 5列×5段の格子にして、Before は1列ぶんの縦5マス、After は1段ぶんの横5マスに揃えてもらった。 gap は白なので塗り面積は 112 × 40 × 5 でぴったり一致し、縦一列が横一列に倒れた、という読み方になる。

ただ、マスに割ると帯が繋がって見えなくなったので、分割をやめて高さの比で面積を合わせる形に戻した(Before の縦帯は 112×216 で 24,192)。

縦軸の名前にも引っかかりが残った。 縦軸を「専門性の深さ」にすると、After で人間が持つのは最上段、つまり一番浅いところになる。 これでは「人間は専門性の浅い仕事をする側になった」と読める。 言いたいのはそうではなく、時間のかかる掘り下げを買えるようになったから、その分を横に使える、ということだ。 軸の名前が価値の高低を含んでしまっているのが、引っかかりの正体だった。

図としては完成した。 ただ、以前にパレート図のような形で Before / After を比べたものを作った記憶があるのに、SVG ギャラリーにも載っていない。 思い出せないまま時間切れになったので、進捗をメモに残して明日に回した。

明日に持ち越したこと

  • /diagram-catalog#dup-heading の重複7組を選別する(どちらを残すか)
  • キャンバス比率、外マージン、フォントを統一する。まず計画書の判断3件(キャンバス/フォント基準/タイトルの置き場所)を決める
  • 分業の反転図と、思い出せていない「パレート図みたいな以前の図」を突き合わせる

今日の学び

<img> に切り替えた瞬間に Before の SVG が全滅したのは、パーサが厳しくなっただけで、壊れていたのはずっと前からだった。 browser が黙って補正してくれる間は、壊れていることに気づけない。 表示方法を変えるのは、隠れていた不整合を一度に表に出す作業でもある。

そして「消えた」と見えたものが、今日は2件とも消えていなかった。 片方は別セッションが意図的に取り下げたもの、もう片方は移動だった。 どちらも履歴を追い、実測で検算するまでは判断がつかなかった。 口頭指示だけで走らせた統合構想が成果物側で逆の意図として記録されていた件も含めて、根拠をどこかに書き残しておかないと、あとから追う側が必ず遠回りする。