# 計測結果 — 第 06 章 example-1

実行環境: Linux 6.18 / SQLite 3.45 / Python 3.x

## 並行稼働の結果(主目的)

```
=== 1. 既存システム (PL/SQL 風) を SQLite で実行 ===
  → out/legacy_output.csv (11 行)

=== 2. 新エンジン (Python) を実行 ===
  → out/new_output.csv  (10 件)

=== 3. 並行稼働: 出力差分を取る ===
  ✓ 完全一致 ── 並行稼働 OK、新エンジンに切り替え可能
  完全一致: 11 行
```

`diff -u out/legacy_output.csv out/new_output.csv` で **0 行の差分**。
新エンジンに切り替えてよい状態。

## 新旧の出力(完全一致)

```csv
id,customer,subtotal,shipping,member_discount,bulk_discount,tax,final_total
1,"山田農園",12000,0,600,0,1140,12540
2,"鈴木商店",21600,0,0,0,2160,23760
3,"高橋食品",10800,0,0,0,1080,11880
4,"佐藤畜産",12000,0,600,0,1140,12540
5,"田中株式会社",12000,0,0,0,1200,13200
6,"渡辺青果",20000,0,1000,0,1900,20900
7,"中村製作所",18000,0,0,0,1800,19800
8,"小林技研",13200,0,660,0,1254,13794
9,"斎藤運輸",17100,0,855,0,1624,17869
10,"加藤建設",15600,0,0,0,1560,17160
```

## サイズ・行数

| ファイル | 行数 | サイズ |
|---------|------|-------|
| `legacy.sql`   | 約 90 行(コメント込み) | 約 3.4 KB |
| `new_engine.py` | 約 100 行(コメント込み) | 約 4.0 KB |
| `RULES.md`     | 約 60 行 | 約 1.8 KB |

実プロジェクトのスケールに置き換えると:

| ファイル | 実プロジェクト想定 |
|---------|---------------------|
| 既存 SQL | 5,000 行(PL/SQL + ストアドプロシージャ + トリガ) |
| Python 新エンジン | 1,000 行 |
| RULES.md | 3,000 行(現場の暗黙知を全部出す) |

SI ベンダー外注 3,000 万円 vs 現場 + Claude で 1 ヶ月 100 万円 = **30 倍**。

## 並行稼働で炙り出される「コードに書かれていなかったこと」

このサイズの実演ではすべて一致するが、実プロジェクトでは並行稼働の
3 ヶ月間に **20〜50 件** の差分が出る。例:

- **「会員でも初回注文は会員割引を適用しない」** ── コードには無く、
  運用画面の「初回フラグ」で対応していた
- **「30,000 円ちょうどは大口割引を適用しない」** ── 担当者の言う「以上」と、
  コードの「>」の食い違い
- **「沖縄離島は送料 +500 円」** ── 担当者の暗黙知、SQL には無し
- **「税抜表示画面では税は別表示、税込画面では合算」** ── 画面ごとに分岐

これらが **データの差分として可視化される**。机上では一つも見えなかった。

## 業務知識を残す(`RULES.md` の役割)

新エンジンへの切り替え後、`legacy.sql` は捨てる。`new_engine.py` は
コードとして残るが、**業務ルールは Markdown で別出し**する。

```markdown
## 4. 大口割引

会員割引を **適用したあとの小計** が **30,000 円以上** のとき、
さらに **3% 引き**(円未満切り捨て)。

> 注意: 会員割引適用前の小計ではない。
> ここを間違えると 1 円ズレる(実際にあった事故)。
```

これが、新メンバーが読む「仕様書」になる。SQL や Python のコードを
追わなくても業務が分かる。**コードはルールを動かすが、ルールを残すのは
Markdown**。

## 再現手順

```bash
sudo apt install sqlite3
make clean && make all
```
