# 棚卸しの手順

対象の形を掴みます。全ファイルは読みません。次の順に絞って読みます。

## 1. 入口を探す

Web アプリの場合、次を `Grep` で探します。

| 探すもの | 検索する語の例 |
|---|---|
| HTTP のエンドポイント | `@GetMapping` `@PostMapping` `@RequestMapping` `@Controller` |
| フォーム | `templates/` 配下の `<form` |
| ファイル読み込み | `Files.read` `new FileReader` `getResourceAsStream` |
| 起動時のデータ投入 | `data.sql` `schema.sql` `import.sql` |

見つけた入口を、パス・HTTP メソッド・受け取るパラメータの形で一覧にします。

## 2. データの置き場所を探す

| 探すもの | 検索する語の例 |
|---|---|
| エンティティ | `@Entity` `@Table` |
| データアクセス | `@Repository` `JpaRepository` `EntityManager` |
| 直接の SQL | `createQuery` `createNativeQuery` `jdbcTemplate` |
| 設定 | `application.properties` `application.yml` |

データの種類（個人情報が入りうるか、業務データか、設定値か）も1行で分類します。

## 3. 外部との接続を探す

| 探すもの | 検索する語の例 |
|---|---|
| 外部API | `RestTemplate` `WebClient` `HttpClient` `URLConnection` |
| メール送信 | `JavaMailSender` `SmtpClient` |
| ファイル出力 | `Files.write` `FileWriter` `OutputStream` |

## 4. 認証・認可を探す

| 探すもの | 検索する語の例 |
|---|---|
| 認証の仕組み | `SecurityConfig` `WebSecurity` `@PreAuthorize` `spring-boot-starter-security` |
| セッション | `HttpSession` `@SessionAttributes` |

**見つからなかった場合、「認証が無い」ことそのものが脅威の前提になります。** 無いことを必ず記録してください。

## 5. 開発用に開いている口を探す

| 探すもの | 検索する語の例 |
|---|---|
| DB コンソール | `h2.console.enabled` `/h2-console` |
| 詳細なエラー表示 | `server.error.include-stacktrace` `debug=true` |
| CORS の設定 | `@CrossOrigin` `addCorsMappings` |

## まとめ方

棚卸しの結果は、次の4つの数だけを会話に出します。詳細は `THREAT_MODEL.md` に書きます。

- 入口 N件
- データの置き場所 N件
- 外部接続 N件
- 認証の有無
