3画面パック ⑥ 作り方と、確かめ方¶
結論(3行)
- 工程は 5 つ:置く → 検査 → 生成 → 配る → 確かめる。工程ごとに「終わりの印」があります
- 🔴 生成器は、おかしなデータを黙って落としません。エラーで止めて、人に知らせます
- HTTP 200 が返ることは、出来たことではありません。中身を取って読むまでが確認です
このページは、あなたの右腕(AI エージェント)に渡す作業指示です。そのまま読ませてください。
1. 全体の流れ¶
flowchart LR
A["① 置く<br>CSV 9表"] --> B["② 検査<br>おかしければ止める"]
B --> C["③ 生成<br>HTML 2枚を書く"]
C --> D["④ 配る<br>読める場所に置く"]
D --> E["⑤ 確かめる<br>中身を取って読む"]
B -.->|エラー| X["人に知らせて止まる"]
2. ① 置く¶
data/の CSV 10 枚とschema.sqlを、1 つのフォルダにコピーします- 中身を、あなたの会社のものに差し替えます(→ 01_data)
schema.sqlはそのまま置いておきます(あとで SQLite に移すときに使います)
終わりの印
フォルダに area.csv stage.csv kind.csv company.csv person.csv deal.csv standard.csv activity.csv invoice.csv の 9 枚(+ _dictionary.csv と schema.sql)がある。
ファイル名はこのとおり(大文字小文字も含めて)。
3. ② 検査 — 🔴 ここが仕組みの要です¶
生成器は、HTML を書く前に次を確かめます。1 つでも引っかかったら、どの ID の何が悪いかを日本語で出して、止まります。
| # | 検査 | 引っかかったときのメッセージの例 |
|---|---|---|
| 1 | deal.company_id が company.csv にあるか |
deal D001: company_id=C999 は company にありません |
| 2 | deal.stage_id が stage.csv にあるか |
deal D001: stage_id=Z9 は stage にありません |
| 3 | 🔴 deal.area_id と、stage_id から導ける領域が一致するか |
deal D001: 案件の領域 B と 工程の領域 A が食い違っています |
| 4 | 🔴 deal.area_id が板の列にあるか(終了 を除く) |
deal D001: area_id=E は板の列にありません。板に出ないので、領域を直すか列の一覧を増やしてください |
| 5 | deal.snooze_until が YYYY-MM-DD か |
deal D002: snooze_until='2026/12/31' は YYYY-MM-DD ではありません |
| 6 | standard.stage_id / kind_id が実在するか |
standard SD-Z9-CL: stage_id=Z9 は stage にありません |
| 7 | 🔴 standard に同じ(工程 × 種別)が 2 行ないか |
standard: stage_id=A1 / kind_id=WF が重複しています |
| 8 | 🔴 standard の行数が 工程の数 × 種別の数 ちょうどか |
standard の行数が stage × kind と一致しません: 15 != 4 × 4 (16) |
| 9 | 抜けている(工程 × 種別)が無いか | standard に無い工程×種別があります: A2/WF |
検査 3 だけは、SQL のビューでも見られます
schema.sql の v_check_area_mismatch が同じ食い違いを出します(0 行が健全)。
生成器の中で止めるのが確実ですが、スプレッドシートの段階で先に見つけたいときはこちらを使ってください。
🔴 検査 4 が、いちばん見つけにくい事故を止めます
板に列が無い領域へ案件が入ると、画面から黙って消えます。 「あれ、あの案件どこ行った?」に気づくのは、たいてい手遅れになってからです。 落とすのではなく、止めて人に気づかせます。
検査を「警告」にしないでください
警告にすると、壊れたまま画面が出来て、しかも 200 が返ります。 エラーで止めて、終了コードを 0 以外にします。
空欄の扱い¶
CSV の空欄は、読み込んだ時点で「なし」に変換します(空文字のまま持ち回らない)。 これをやらないと、「空文字という ID の行」を探しにいって、SQLite に移すときに必ず落ちます。
終わりの印
検査を通すと、次の 1 行が出る。エラーなら 1 行も HTML が書かれていない。
pm: 案件2件 / 停滞1件 sw: 型 1ある 1途中 14空 (16)
4. ③ 生成¶
| 入力 | 出力 |
|---|---|
| CSV 9 表があるフォルダ | pm/index.html と sw/index.html の 2 ファイルだけ |
生成器の要件¶
| 要件 | 中身 |
|---|---|
| 1 ファイル完結 | CSS も JavaScript もデータも HTML の中に埋め込む。外部への読み込みは 0 件 |
| データは JSON で埋める | 画面の中に必要な列だけを入れる。🔴 person と invoice は入れない(個人情報・金額を画面に出さないため) |
| 文字をエスケープする | 案件名に < & " が入っても壊れない |
| リンクの起点を引数で変えられる | 社内の住所が変わっても作り直せる |
| 生成日時を埋める | 画面の最下部に出す |
| 繰り返し実行できる | 同じ CSV なら、生成日時以外は同じものが出る |
終わりの印
pm/index.html と sw/index.html の 2 つができ、どちらもブラウザで開くだけで動く
(ネットを切っても表示が崩れない)。
5. ④ 配る¶
社内から読める場所に、この 2 ファイルを置きます。置き方は環境によって違うので、ここでは決めません。
外に出さない設定を、置く前に決めてください
案件名・会社名・金額が入っています。社内からだけ読める形にしてください。 社外から見える場所に置くなら、何が見えるかを 1 件ずつ確認してからにします。
終わりの印
別の PC のブラウザから、/pm/ と /sw/ の両方が開く。
6. ⑤ 確かめる — 🔴 200 は確認になりません¶
🔴 「HTTP 200 が返った」は、出来たことではありません
トップページが真っ白でも 200 は返ります。中身を取って、読んでください。
機械で判定できる合格条件¶
右腕に、この 8 つを実際に実行させて、出力をそのまま報告させてください。
| # | 確かめること | 合格 |
|---|---|---|
| 1 | 生成器が正常に終わる | 終了コードが 0 |
| 2 | 画面に、CSV にある案件名が全部入っている | deal.csv の name が 1 つ残らず PM の HTML の中にある |
| 3 | 画面に、CSV にある工程名が全部入っている | stage.csv の name_ja が 1 つ残らず SW の HTML の中にある |
| 4 | 升目の数が合う | SW の中の ある 途中 空 の合計が 工程の数 × 4 |
| 5 | 🔴 個人情報が混ざっていない | person.csv の氏名・メール・電話が、PM / SW の HTML に 1 件も無い |
| 6 | 外部への読み込みが 0 件 | HTML の中に http:// や https:// で始まる読み込み(script / link / img)が無い |
| 7 | 生成日時が入っている | 最下部に今日の日時がある |
| 8 | 🔴 わざと壊すと、止まる | 下の「模擬失敗」参照 |
🔴 8 の「模擬失敗」— 検査が効いていることを、実際に確かめる¶
検査があることと、検査が効いていることは別です。壊した CSV を 1 回食わせてください。
| 壊し方 | 期待する結果 |
|---|---|
deal.csv の stage_id を、存在しない Z9 に書き換える |
エラーで止まる。終了コードが 0 以外。HTML が更新されていない |
standard.csv から 1 行消す |
エラーで止まる(行数が合わない) |
deal.csv の snooze_until を 2026/12/31 にする |
エラーで止まる(日付の形が違う) |
deal.csv の area_id を、板の列に無い領域に書き換える |
エラーで止まる(板から黙って消えない) |
deal.csv の company_id を、存在しない C999 にする |
エラーで止まる |
standard.csv の standard_id と stage_id を、別の行と同じにする |
エラーで止まる(重複) |
🔴 壊しても通ってしまったら、検査は入っていません
「エラーが 0 件だった」は、合格の証拠ではありません。対象を読めていないだけかもしれません。 必ず、壊した版で 1 回止まることを見てから、合格と言ってください。
確かめ終わったら、壊した CSV を必ず元に戻してください。
目で見る確認(機械では判定できないもの)¶
| 見るところ | 合っているか |
|---|---|
| PM の板 | 列の並びが area.csv の順。件数が合っている |
| PM のカード | 次の一手が読める。空なら 未定 と出ている |
| PM の警告 | 決めて止めている案件(snooze_until が未来)が鳴っていない |
| 判定日を未来に変える | 警告の件数が増える |
| SW | 升目がほぼ 空(初日はこれが正常) |
| SW の升目にマウスを乗せる | 「埋まったと言える条件」が出る |
| 3 画面の行き来 | ポータル ⇄ PM ⇄ SW が全部つながっている |
終わりの印
上の 8 つの出力と、目で見た確認の結果が、実際の出力つきで報告されている。 「確認しました」だけの報告は受け取らないでください。何をどう確かめたかを 1 行添えさせます。
7. 作り直すとき¶
CSV を直したら、②〜⑤ をもう一度通します。画面の HTML を直してはいけません。
flowchart LR
A["CSV を直す"] --> B["検査 → 生成 → 配る"]
B --> C["確かめる"]
C -->|おかしい| A
「画面を直したい」と思ったら、それは CSV の話です
- 案件が出ていない →
deal.csvのstatusかarea_id - 警告が出すぎる →
deal.csvのsnooze_untilが空 - 升目が埋まらない →
standard.csvのstatus - 列を増やしたい →
area.csvに 1 行足す + 板の列の一覧に足す
8. 右腕に渡すときの注意¶
| 渡すこと | 渡さないこと |
|---|---|
この 6 枚と data/ の雛形 |
他社の実データ |
| 「判断に迷ったら、工夫して進めず止めて報告する」という指示 | 「うまいことやっといて」 |
| 合格条件(上の 8 つ)を実行して出力を報告せよという指示 | 「動いたら教えて」 |
エージェントが『出来ました』と言ったら、上の 8 つの出力を見せてもらってください
出力が無い報告は、確かめていない報告です。
これで 6 枚は終わりです。00_structure に戻る。