# 実例 2 — 既存 Java / C# コードから業務ルールを Markdown に抽出

第 06 章「業務システムと付き合う ── 並行稼働で書き換える」の **2 番目の角度**:
**既存システムには業務知識が埋まっている。それを少しずつ Markdown に出していく**。

## 章のどの主張に対応するか

> 業務知識を Markdown 化する作業: 担当者の空き時間でやると 6 ヶ月〜1 年。
> Claude に全コードベースを渡して一気にやれば、**1 週間で 80%**。

(章本文「実例: 数字で見る」より)

example-1 が「PL/SQL → Python 並行稼働」、これは **その前段**:
**コードに散らばっている業務ルールを機械的に抽出して Markdown にする**。

## やること

1. **入力**: `legacy/`(Java + C# のサンプル業務コード)
2. **抽出**: `extract_rules.py` が:
   - `final` / `const` / `static readonly` の **定数定義**(閾値・税率)
   - 直前の **行コメント**(業務上の意味)
   - **JavaDoc / DocString** ブロック(仕様の概要)
   を集めて Markdown のテーブルに整理
3. **出力**: `out/RULES.md`(後で Claude に補完してもらう叩き台)

## 構成

```
example-2/
├── README.md
├── legacy/
│   ├── OrderService.java     ── 注文処理ロジック(送料・割引・税)
│   └── PaymentService.cs     ── 決済処理ロジック(上限・手数料・再試行)
├── extract_rules.py          ── 機械抽出(正規表現で定数 + コメント)
├── Makefile
├── results.md
└── out/
    └── RULES.md              ── 抽出結果
```

## 実行

```bash
make clean && make all
```

抽出は **数 ms で完了**(正規表現だけ、外部依存ゼロ)。

## なぜこれが「実例」になるのか

業務システムを書き換えるとき、最大の壁は **「ルールがどこにも書いていない」** こと。

- 仕様書: 古くて当てにならない
- コメント: あるけど断片的
- 担当者: 引退した、退職した、休職中
- ベンダー: 「コードを見てください」

そこで、**コードを Markdown に翻訳する** 工程が要る。これは Claude に
丸投げできるが、**まず機械で取れる部分(定数・JavaDoc)だけ集めて
叩き台を作る** のが速い。

このスクリプトの役割:

1. 定数を全部抜き出す(`SHIPPING_REMOTE = 1500` のような)
2. 直前の行コメント(業務上の意味)を紐付ける
3. JavaDoc を取り出して仕様の概要を確保

これが叩き台。次は Claude に「`legacy/` 一式と `out/RULES.md` を見て、
**コメントに無い暗黙ルールも書き起こして**」と頼む。これで章本文が言う
「**1 週間で 80%**」に近づく。

人間は **判断と確認** だけに集中できる。

## 出力サンプル(`out/RULES.md` 抜粋)

```markdown
## OrderService.java から抽出

| 名前 | 値 | 業務上の意味 |
|------|-----|------------|
| SHIPPING_REMOTE | 1500 | 送料は離島が高い ── 北海道・沖縄は 1500 円 |
| SHIPPING_FREE_THRESHOLD | 10000 | 小計が 10,000 円以上で送料無料 |
| MEMBER_DISCOUNT_RATE | 0.05 | 会員割引: 5% |
| BULK_DISCOUNT_THRESHOLD | 30000 | 大口割引(会員割引後 30,000 円以上) |
| TAX_RATE | 0.10 | 消費税率(2026 年現在 10%) |

### JavaDoc からの仕様

> 注文の請求書を計算する。
> 業務ルール:
>   1. 小計 = 数量 × 単価
>   2. 送料 (北海道・沖縄/その他、10000 円以上で無料)
>   3. 会員割引 (5%, 切り捨て)
>   ...
```

これは **誰でも読める仕様書** になる。新メンバーが Java を読めなくても
業務ルールが追える。これが章で言う「**業務知識を Markdown に出していく**」の
最小実演。
