# 備品管理ハンズオン（生成AIプログラミング入門）

本研修の作業プロジェクトです。Claude Code はこのファイルを起動時に自動で読み込みます。ここに書いてあることは、毎回の依頼で伝え直す必要がありません。

## フォルダ構成

- `kadaiA/`: 課題A。`dummy_data.csv`（備品50件・カテゴリ5種）を元に、一覧・検索・詳細のアプリをテンプレートなしで作る作業フォルダ
- `kadaiB/`: 課題B。備品管理システム（Spring Boot + Thymeleaf + H2）。意図的な不具合が仕込まれている
- `docs/`: コーディング規約・生成物チェックリスト・セキュリティチェックリスト・セルフチェックの観点
- `exercises/`: 演習の手順書。`challenges/` は発展課題
- `hints/`: 詰まったときの参考プロンプト
- `memo.md`: 受講者が気づいたことを書き残すファイル
- `.work/`: `/selfcheck` が中間データを置く場所。消さない

## 作業対象の指定

VSCode で開くフォルダは常に `handson` です。`kadaiA` や `kadaiB` を単体で開くと、このファイルも `.claude/` も読み込まれません。作業対象は `@kadaiA/` `@kadaiB/` のようにパスで指定してください。

## 課題A の要件

- データは `kadaiA/dummy_data.csv`（備品50件、カテゴリ5種）を使う
- 画面は一覧・備品名の部分一致検索・詳細表示の3つ
- 詳細から一覧に戻れる
- 技術スタックの指定はない。ブラウザで `kadaiA/index.html` を開くだけで動く形を優先する
- 生成物は `kadaiA/` 直下にまとめる

## 課題B の技術スタック

- Java 17
- Spring Boot 3.4
- Spring Data JPA + H2 Database（インメモリ）
- Thymeleaf（一覧・詳細の2画面）
- Maven（Maven Wrapper 同梱。Maven のインストールは不要）

起動は `kadaiB` フォルダで `./mvnw spring-boot:run`（Windows PowerShell は `.\mvnw.cmd spring-boot:run`）。一覧画面は `http://localhost:8080/equipments`、H2 コンソールは `http://localhost:8080/h2-console`（JDBC URL: `jdbc:h2:mem:equipmentdb`、ユーザー名 `sa`、パスワードは空欄）です。

## 業務ルール（課題B）

この5項目が仕様の正本です。実装との食い違いが不具合です。

1. 在庫が5個以下の備品は「要補充」として扱う（5個ちょうども含む）
2. 貸出は在庫の範囲内でのみ可能（在庫を0未満にしてはいけない）
3. 日付の画面表示は `yyyy/MM/dd` 形式に統一する
4. 存在しない備品IDへのアクセスは、エラー画面ではなく「見つかりません」とわかる表示にする
5. 備考が未設定の備品も、詳細画面が正常に表示される

## コーディング規約

- パッケージ名は `com.example.equipment`
- サービスはインターフェース + Impl のパターンを守る
- レイヤーは controller → service → repository → model
- コメントは日本語、クラス名・メソッド名・変数名は英語
- マジックナンバーは名前付き定数にする
- 詳細は `docs/コーディング規約.md` を参照する

## 出力の作法

- 説明は日本語で書く。専門用語は初出で1行の補足を添える
- コードを提案するときは、変更する対象ファイルのパスを先に示す
- 差分が20行を超えるときは、何をどう変えるかの要約を先に3行以内で書く
- 不確かな箇所は断定せず、確認方法（どのファイルの何を見れば裏が取れるか）を添える

## してはいけないこと

- `kadaiA/dummy_data.csv` と `kadaiB/src/main/resources/data.sql` の書き換え
- 課題と無関係なファイルの削除・移動
- 実在する社名・氏名・メールアドレス・電話番号の入力
- 依頼していない機能の追加（気づいた点は提案に留め、実装は依頼を待つ）
- `.work/` フォルダの削除
- `git` コマンドの実行（本研修では Git と GitHub を使いません）

## 応答の最後に必ず出すもの

どんな依頼に対しても、応答の最後に次のブロックを必ず付けてください。
省略しないでください。読み取りだけを行った場合も付けてください。

```
--- 実行サマリー ---
動作: 読み取り N件 / 編集 N件 / 新規作成 N件 / コマンド実行 N件
従った設定: （CLAUDE.md の見出し名 / settings.json / 使った Skill 名 / 使ったコマンド名）
対象ファイル:
  - <相対パス> : <何をしたか>
未実施・保留: （依頼されたが今回やらなかったこと。無ければ「なし」）
--------------------
```

書き方の決まりです。

- 出力位置は応答の最終行に固定します。途中に挟まないでください。
- 「従った設定」欄には、このファイルの見出し名をそのまま書いてください。「業務ルールに従いました」ではなく「## 業務ルール（課題B）に従いました」と書きます。受講者が該当箇所を開いて照合できるようにするためです。
- 「未実施・保留」欄は必ず埋めてください。ここが空でない応答は、人間が判断すべき残件があるという合図です。
- 読み取りだけの依頼でも出してください。出たり出なかったりすると、壊れたのか仕様なのかがわからなくなります。
