# step06 Plan モードでの探索と、Issue 駆動の修正

対応する演習ステップ: B-2 Plan モードで壁打ちしてバグを見つける [12min] ／ B-3 Issue を起票する [7min] ／ B-4 修正して、動かして、テストを通す [20min]
対応する演習md: `exercises/exB2_plan_hunt.md` ／ `exercises/exB3_issue.md` ／ `exercises/exB4_fix_and_test.md`
VSCode で開くフォルダ: `handson`

**このファイルには、仕込まれている不具合のうち2件までしか手がかりを書いていません。** 到達ゴールが2件の修正だからです。3件目以降は自力で探す設計になっています。探し方は書いてありますが、答えは書きません。詰まったら講師に声をかけてください。

---

## 参考プロンプト

### B-2 Plan モードで調べる

<kbd>Shift</kbd>+<kbd>Tab</kbd> を押して Plan モードに切り替えます。画面にモード表示が出ることを確認してから送ります。

```
詳細画面を開くとエラーになる備品があります。
原因を調べて、直すならどこをどう直すかの計画を出してください。まだコードは変更しないでください。
```

計画が出たら、書かれているファイルと行を自分で開いて確かめます。次に、エラーが出ないほうのずれを探します。

```
handson/CLAUDE.md の「業務ルール（課題B）」の5項目と、@kadaiB の実装を1項目ずつ突き合わせてください。
食い違っている可能性がある箇所を、根拠になるコードの場所とあわせて挙げてください。まだ変更はしないでください。
```

候補が複数出ます。1件ずつ、画面で確かめてください。確かめ方の例です。

```
挙げてもらった候補のうち1件目について、画面のどこをどう操作すると食い違いが目に見えるかを、操作手順として3行で書いてください。
```

### B-3 Issue を起票する

```
@kadaiB/issues/ISSUE_TEMPLATE.md の形式で、いま見つけた「（症状を自分の言葉で1行）」について Issue の下書きを作ってください。
再現手順は、実際に操作した順で書いてください。
```

下書きを `kadaiB/issues/ISSUE_002_内容がわかる名前.md` として保存し、**書かれた再現手順を自分でなぞって、本当に再現するかを確かめます。**

### B-4 修正、動作確認、テスト

<kbd>Shift</kbd>+<kbd>Tab</kbd> で Agent モードに戻してから送ります。

```
@kadaiB/issues/ISSUE_001_詳細画面がエラーになる備品がある.md を読んで、この Issue のとおりに修正してください。
業務ルールは handson/CLAUDE.md に従ってください。この Issue の範囲外は変更しないでください。
```

差分を目で読んでから受け入れ、アプリを再起動して画面で確かめます。2件目も同じ手順です。2件とも直ったらテストを書かせます。

```
いま直した2件について、二度と同じ壊れ方をしないことを確認するテストを src/test/java の下に作ってください。
テストの名前は英語で、何を確かめているかがわかる日本語のコメントを添えてください。
```

ターミナルで `./mvnw test`（Windows は `.\mvnw.cmd test`）を実行します。落ちたら、出力をそのまま貼り付けます。

```
このテストが落ちています。原因を調べて直してください。
（ここにターミナルの出力をそのまま貼り付ける）
```

## なぜその形か

Plan モードから入るのは、初見のコードで、どこを触ることになるかがまだわからないからです。Plan モードは調べて計画を出しますが、コードは書き換えません。計画を読んで納得してから承認すれば、意図しない書き換えが起きません。広い範囲を触る作業ほど、この順番が効きます。

「まだコードは変更しないでください」を文中にも書いているのは、モード切り替えを忘れたときの保険です。二重に効かせておいて損はありません。

2つ目のプロンプトで業務ルールを1項目ずつ突き合わせさせるのは、エラーが出ない不具合の探し方だからです。エラーが出るものは画面が教えてくれます。出ないものは、**画面に見えているもの・データの中身・業務ルールの文章**の三点を照合しないと見つかりません。この三点照合が、今日いちばん持ち帰る価値のある手順です。

B-3 で AI の下書きをそのまま採用しないのは、再現手順が動くかどうかが Issue の価値のすべてだからです。再現しない手順が書かれた Issue は、受け取った人の時間を奪います。自分でなぞって初めて Issue になります。

B-4 で「二度と同じ壊れ方をしないことを確認する」と伝えているのは、「テストを書いて」だけだと、通ることが目的のテストが出てくるからです。何を守りたいかを言葉にすると、出てくるものが変わります。

Issue はローカルの Markdown ファイルです。本研修では Git と GitHub は扱いません。ファイル1本でも、書く項目が決まっていれば仕組みとして機能します。

## 比較観点

- 1件目はエラーが出るので気づけました。2件目はエラーが出ません。あなたは何を手がかりに見つけましたか。その手がかりは、自分の職場のコードでも使えますか。
- 「バグを全部直して」と丸投げした場合と、Issue 単位で渡した場合。差分の追いやすさが変わります。時間が余ったら、3件目で丸投げを試して比べてみてください。
- AI が書いた再現手順と、自分がなぞった結果。一致しましたか。ずれた場合、どの一手順が足りませんでしたか。
- 修正前に AI が出した計画と、実際に入った差分。計画になかった変更が混ざっていませんか。混ざっていたら、それはレビューで止める対象です。
- テストを書かせる前と後で、同じ修正に対する安心感がどう変わりましたか。

## よくある勘違い

- 「原因はコントローラかテンプレートにあるはず」。この課題では、原因はサービス層の実装（`EquipmentServiceImpl.java`）に集まっています。疑う場所を絞れると、AI に渡す範囲も絞れます。
- 「一覧が全件出ているのだから、データは壊れていない」。一覧に出ることと、詳細で扱えることは別です。一覧に出していない項目が原因になることがあります。
- 「エラーが出ない箇所は正常」。業務ルールとの食い違いは、エラーを出しません。動いているのに仕様と違う状態は、テストが無ければ誰も気づきません。
- 「`data.sql` を直せば症状が消える」。初期データは書き換えません。データを変えて症状を消すのは、原因を隠す修正です。
- 「テストが緑なら完成」。ブラウザでの動作確認も OK基準に入っています。テストと画面の両方を見てください。
- 「2件で足りないので、全部直さないと失敗」。到達ゴールは2件です。3件目は発展課題（`exercises/challenges/ch05_third_bug.md`）です。

## 手がかり（2件分だけ）

自力で15分探して見つからないときに開いてください。

**1件目 詳細画面がエラーになる備品がある**

一覧からいくつかの備品の詳細を開くと、開けるものと、Whitelabel Error Page（500）になるものがあります。開けない備品に共通しているのは、一覧に出していない項目のうち1つが空であることです。`kadaiB/issues/ISSUE_001_詳細画面がエラーになる備品がある.md` に、記入例として現象・発生箇所・再現手順が書いてあります。まずこれを読んでください。

**2件目 業務ルールの1つ目が守られていない**

`handson/CLAUDE.md` の「業務ルール（課題B）」の1項目目に、在庫が少ない備品の扱いが書かれています。境目の値ちょうどの備品を一覧で探して、ルールどおりの表示になっているかを確かめてください。エラーは出ません。画面とデータとルールの三点を並べないと見えない種類のずれです。

<details>
<summary>2件目がどうしても見つからないとき（開くと答えに近づきます）</summary>

在庫が5個の備品を一覧で探し、在庫が4個以下の備品と表示を見比べてください。`EquipmentServiceImpl` の中に、在庫の判定を1行で書いているメソッドがあります。業務ルールは「5個以下」です。実装の比較演算子が、その「以下」を満たしているかを読んでください。

</details>

3件目以降の手がかりはありません。画面・データ・業務ルールの三点照合を、残り4項目のルールに対して自分で回してください。

## 次のアクション

1. 修正した Issue ファイルの末尾に `## 修正結果` の見出しを作り、何をどう直したか、どうやって確認したかを2行書きます。
2. `./mvnw test` が `BUILD SUCCESS` で終わることを確認します。テストは2件以上、どちらの不具合に対応するかがコメントでわかる状態にします。
3. 確認をまとめてやり直したいときは `/regression-check` が使えます。Issue を1件ずつ見直して、テストを実行し、`.work/B_regression.md` に結果を表で残す確認専用のコマンドです。修正はしません。
4. 次は B-5（`exercises/exB5_skill_creator.md`）です。参考プロンプトは `step07_skill_and_threat.md` にあります。

うまくいかないときは次を確認してください。

- Plan モードなのにコードが変わった: モード表示を確認してください。切り替わっていない場合は <kbd>Shift</kbd>+<kbd>Tab</kbd> をもう一度押します。
- 修正したのに画面が変わらない: アプリを再起動しましたか。ターミナルで <kbd>Ctrl</kbd>+<kbd>C</kbd> のあと `./mvnw spring-boot:run` です。ブラウザの再読込も忘れずに。
- 修正で別の場所が壊れた: `この修正で、Issue に関係のない箇所まで変わっています。関係ない変更を元に戻してください。` と伝えます。
- スタックトレースが読めない: 一番上の行をコピーして `このエラーの意味を、Java を知らない人にもわかるように説明してください。` と送ります。
- 時間が足りない: 2件目の修正を優先し、テストは1件でも構いません。作業の途中経過を `memo.md` の `## B-2` に残して次へ進んでください。
