# 発展課題05 3件目のバグを自力で見つける

| 項目 | 内容 |
|---|---|
| 対象 | 課題B（備品管理システム） |
| 目安時間 | 20分から25分 |
| 難易度 | 難 |
| 前提 | [B-4](../exB4_fix_and_test.md) でバグを2件直し、`./mvnw test` が緑になっていること |
| 関連 | [B-2 Plan モードでバグを探す](../exB2_plan_hunt.md)／[B-3 Issue を起票する](../exB3_issue.md) |

---

## 目的

**誘導なしで、探すところから修正まで一周します。**

B-2 では「詳細画面でエラーが出る備品があります」と、症状を先に伝えられていました。実務ではそこから始まりません。何が壊れているかを、誰も教えてくれない状態から始まります。

この課題では症状を伝えません。**何が壊れているかを、自分で決めるところから始めます。**

課題B には不具合が5件仕込まれています。2件は直しました。残りは3件です。

---

## 操作

### 1. 探す範囲を先に決める

やみくもに探しません。探す手がかりは3つあります。

| 手がかり | 見る場所 |
|---|---|
| 業務ルール | `handson/CLAUDE.md` の `## 業務ルール（課題B）` 5項目 |
| 画面 | ブラウザで実際に操作した結果 |
| データ | H2 コンソール（`http://localhost:8080/h2-console`）で見たテーブルの中身 |

**業務ルール5項目のうち、今日確認していない項目**を書き出してください。2件直したので、残り3項目です。この3項目を1つずつ潰します。

### 2. 1項目ずつ、画面で確かめる

ルールを1つ選び、そのルールが守られているかを画面で確認します。読むのはコードではありません。**画面です。**

確認のしかたは、ルールの書かれ方で決まります。「〜してはいけない」と書かれているルールなら、してみます。「〜と表示する」と書かれているルールなら、その表示が出る条件を作って見ます。

うまくいく操作だけを試しても、何も見つかりません。**わざと外れた操作をしてください。** 想定外の入力、想定外の順番、想定外の値。

### 3. 症状が出たら、Plan モードで原因を調べさせる

<kbd>Shift</kbd>+<kbd>Tab</kbd> で Plan モードに切り替えます。

```
〈操作の内容〉をしたら〈起きたこと〉になりました。CLAUDE.md の業務ルールでは〈ルールの内容〉のはずです。原因を調べて、直すならどこをどう直すかの計画を出してください。まだコードは変更しないでください。
```

**症状・操作・ルールの3つをそろえて伝えてください。** どれか1つでも欠けると、調査の範囲が広がって時間がかかります。

### 4. Issue を起票する

`kadaiB/issues/ISSUE_003_〈内容がわかる名前〉.md` を作り、5見出しを埋めます。手順は [B-3](../exB3_issue.md) と同じです。

### 5. 修正して、確認して、テストを足す

手順は [B-4](../exB4_fix_and_test.md) と同じです。

1. Agent モードに戻し、Issue を指して修正させる
2. アプリを再起動して、画面で確認する
3. テストを足す
4. `./mvnw test` を緑にする
5. Issue の末尾に `## 修正結果` を追記する

### 6. 全体を確認する

すべて終わったら、コマンド1本で確認します。

```
/regression-check
```

`kadaiB/issues/` の全 Issue をなぞり直し、`./mvnw test` を実行して、結果を表にまとめます。結果は `.work/B_regression.md` に残ります。

**3件とも「解決」と判定されていることを確認してください。**

---

## 行き詰まったときのヒント

順番に開いてください。1つ開いたら、5分は自分で試してから次を開いてください。

<details>
<summary>ヒント1 どこを操作すればよいかがわからない</summary>

この画面でできる操作を数えてください。一覧の検索、詳細へのリンク、貸出フォーム。それだけです。

そのうち、**あなたがまだ値を入れて試していない場所**が1つあります。

また、画面から辿れる場所だけがすべてではありません。アドレス欄は手で書き換えられます。

</details>

<details>
<summary>ヒント2 操作はしたが、何も起きない</summary>

「正しい値」を入れているうちは何も起きません。次を試してください。

- 業務ルールが禁止している値
- 0 や、負の数
- 在庫の数より大きい数
- 存在しない番号

画面が壊れなくても、**保存された結果が業務としておかしい**なら、それは不具合です。操作したあと、必ず一覧に戻って値を見てください。

</details>

<details>
<summary>ヒント3 症状は出たが、原因の場所がわからない</summary>

B-4 の「追加と考察」を読み返してください。このプロジェクトで判断をしている場所は1か所に集まっています。

対象を絞って調べさせてください。

```
@kadaiB/src/main/java/com/example/equipment/service/EquipmentServiceImpl.java だけを読んで、CLAUDE.md の業務ルール5項目と1つずつ突き合わせてください。項目ごとに、守られているかどうかを表にしてください。
```

</details>

---

## 自分で考える

見つけた3件目は、**エラーが出るタイプでしたか。出ないタイプでしたか。**

エラーが出るバグは、放っておいても誰かが報告します。画面が止まるので気づかれます。エラーが出ないバグは、報告されません。誰も気づかないまま、間違った値が残り続けます。

**業務システムで怖いのは後者です。** 気づかれないまま数か月動き、あとで棚卸しの数字が合わなくなって発覚します。今日使った「仕様と実装を突き合わせる」やり方は、後者を見つけるための方法です。

---

## 生成物の名前と場所

- `handson/kadaiB/issues/ISSUE_003_〈内容がわかる名前〉.md`（`## 修正結果` まで記入）
- `handson/kadaiB/src/main/java/com/example/equipment/service/EquipmentServiceImpl.java`（修正）
- `handson/kadaiB/src/test/java/com/example/equipment/service/EquipmentServiceImplTest.java`（テストを追加）
- `handson/.work/B_regression.md`

---

## OK基準

- 誘導なしで、3件目の不具合を自分で見つけた
- 症状を画面で再現できた
- `ISSUE_003_...` を起票し、5見出しが埋まっている
- 修正後、画面で直ったことを確認した
- テストが3件以上あり、`./mvnw test` が `BUILD SUCCESS` で終わる
- `/regression-check` の結果で、3件とも解決と判定されている

---

## 追加と考察

この課題でやったことを分解すると、次の5つでした。

1. 探す範囲を決めた（業務ルールの残り3項目）
2. わざと外れた操作をした
3. 症状・操作・ルールをそろえて調べさせた
4. 文書にしてから直させた
5. コマンド1本で全体を確認した

このうち、AI がやったのは3と4の一部だけです。**探す範囲を決めるのも、外れた操作を思いつくのも、人がやっています。**

今日の演習を通して一貫していたのはこの形です。AI は速く読み、速く書きます。何を読ませ、何を書かせるかは人が決めます。決める材料は、文章になった仕様と、実際に触った画面です。**どちらも AI が用意してくれるものではありません。**

---

## 発展課題

4件目を探してください。残り2件です。

見つけ方は同じですが、難易度は上がります。業務ルールと1対1で対応していない不具合が含まれているためです。**ルールに書かれていない「当たり前」が守られていない**箇所を探すことになります。

見つからない場合は、次のように聞いてみてください。

```
@kadaiB のコードで、業務ルールには書かれていないが、業務システムとして当たり前に守るべきことが守られていない箇所はありますか。理由も添えてください。
```

返ってきた指摘のうち、**あなたが「たしかに困る」と判断したものだけ**を Issue にしてください。全部を直す必要はありません。何を直さないかを決めるのも、今日練習したことです。
