#67スコア 4/5製造

AI にロット追跡を作らせてみた — 67枚目で初めて「越えられない欠落」が出た(やってみた #67)

ルート: /lot-traceability
デスクトップ表示
モバイル表示

375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。

解説記事

AI にロット追跡を作らせてみた — 67枚目で初めて「越えられない欠落」が出た(やってみた #67)

⁠やってみたシリーズ⁠: 自作のデザインシステム @gunjo/ui群青)を、群青のことを一度も見たことのない AI に、実際の画面で組ませていく連載。⁠製造4枚目⁠——⁠ロット追跡 / トレーサビリティ⁠(ロット系譜 × リコール範囲特定 × 入出庫工程履歴 × 出荷先追跡)。

製造の4枚目は食品工場のトレーサビリティ。不良ロットが出たとき、どの原材料から作られ、どこへ出荷されたかを辿ってリコール範囲を特定する画面。⁠67枚やってきて、初めて「コンポーネントでは描けない」構造に当たった⁠回。

結果 — 4/5

tsc/build 緑・console 0・375px(横スクロール0)・ロット概要・受払照合・⁠双方向系譜ツリー⁠・リコール範囲確定(ライブ集計)・工程監査証跡・出荷先テーブル・h1 1個。⁠今回 src 修正はゼロ⁠——ライブラリが85%を摩擦なく賄い、残り15%=系譜の核が初の大きな欠落。

今回の主役(の不在)— ロット系譜は DAG なのに、ツリーしか無い

トレーサビリティの心臓は⁠ロット系譜⁠。これは本質的に ⁠DAG(有向非巡回グラフ=枝分かれして再合流する、循環しないネットワーク)⁠だ:1つの原材料ロットが複数の製品ロットに入り、1つの製品ロットが複数の原材料ロットを消費する(⁠親も子も複数⁠)。だがライブラリの階層コンポーネントは TreeView(厳密に親が1つのツリー)だけ:

⁠DAG / node-link / グラフのコンポーネントが無い——最大の欠落。⁠ ロット系譜は本質的に DAG だ。階層コンポーネントは TreeView(親が1つのツリー)だけ。回避策: DAG を上流/下流の2本の方向付きツリーに割って、交差リンクを⁠プレーンテキスト⁠⚠ 共有ロット — RM-CONC-2405-23 にも投入)で注記する——ツリーは物理的に交差リンクを描けないから。⁠ユーザーが最も見たい構造——リコールの影響範囲を決める、共有ロットの分岐・合流——が、まさにこのコンポーネントで表現できないものだ。⁠

つまり⁠リコールの影響範囲を決める「共有ロットの分岐・合流」が、ツリーでは描けない⁠。これは #281 に課題として記録。グラフ/node-link は配置・線の配線・グラフをたどるアクセシビリティを伴う⁠大きなコンポーネント⁠なので、3回ルールで(トレーサビリティ/組織図/依存グラフ/部品表 で再出現したら)作る。1回目は正直に課題に記録して見送り。

それでも業界越えはまた効いた

コンポーネント単体でのカバー率は高く、⁠他業界で育てたコンポーネントがまた骨格そのまま効いた⁠:

  • SafetyBanner(臨床のアレルギー/禁忌警告用)→ ⁠QA のリコール警告に完璧に合った⁠requireAck+controlled acknowledged が「QA 責任者がリコール範囲を承認してから確定」に1:1。「この画面で最良の1コンポーネント、摩擦ゼロ」。
  • Meter direction="higher-is-better"+target(#256・2回前に反映)→ ⁠受払照合バーに自力で採用⁠(受領 vs 出荷+保留+在庫残=100%で success)。#65/#66/#67 と⁠3回連続、実戦で効き続けている⁠
  • Timeline(variant+marker)→ 入庫/工程投入/製造/検査/出庫の監査証跡・DistributionBar → 出荷済/保留/在庫残の内訳・DataTable.renderCard → 375px で出荷先がカード崩し。

医療/物流/会計で育てたコンポーネントが、製造トレーサビリティでもそのまま効いた。

課題に記録だけ(3回ルールで育てる)

  • 🔴 ⁠系譜グラフ/DAG/node-link⁠(親が複数の系譜・#281・1回目・大型)。
  • 🟡 ⁠RouteStops が配送分野に固定、が2回目⁠(#64 工程ルート+#67 系譜/出荷チェーン・#282)。status の種類が固定・配送ラベルが埋め込み・ETA/遅延の時間モデルが固定で「消費/製造/検査」を表せない。汎用の status+任意の time で作る(あと1回)。
  • 🟡 ⁠TreeView がラベルクリックで開閉と選択の両方を発火⁠(ノード詳細を開く onNodeActivate が無い・#283)。
  • 🟡 ⁠MetadataList が値を強制的に切り詰める⁠(長い製造ライン名が折り返さず切れる・#284)。
  • 🟡 ⁠選択できるリスト⁠ がまた必要(リコール範囲確定=checkbox+status+ライブ集計・リコール/返品/一括承認で再出現・#135 に追記)。

学び — 「ライブラリが持ちこたえた」も「初の大きな欠落」も、両方が正直なデータ

67枚目で初めて、⁠コンポーネントの合成では表現しきれない構造⁠(親が複数の DAG)に当たった。これは負けじゃなく、この連載の狙いそのもの——「実業務をやらせると、どこで足りなくなるか」が炙り出される。一方で SafetyBanner(臨床)や Meter の「値が大きいほど良い」(#256)がまた別業界で骨格そのまま効き、85%は摩擦ゼロ。⁠「持ちこたえた範囲」と「初めて足りなかった核」を同じ精度で記録する⁠のが、次に何を作るべきかを決める材料になる。系譜グラフは大きいので急がず、3回ルールで再出現を待って作る。

次回予告(やってみた #68)

  • ⁠製造をもう1枚⁠(生産計画/負荷山積み or 出荷/在庫引当)で5枚目、or 別業界へ移る(教育/公共)。系譜グラフ#281・RouteStops汎用化#282 の再出現も観測。

試す

まだ alpha。67枚目で初めてコンポーネントでは描けない構造(親が複数の DAG 系譜)に当たり、それでも SafetyBanner/Meter がまた業界を越えた回。

この連載は、作者が AI(Claude と Codex)と協働で制作しています。実験・検証の設計、判断、公開前の事実確認は人間が行い、実作業と下書き執筆は AI が担っています。

使用した @gunjo/ui コンポーネント

この画面のソースが直接 import しているコンポーネントです。

cold AI が組み上げた実コード

ファイル名をクリックでソースを展開できます。

業界別「AI指示書パック」、先行登録を受付中です。