# step07 自分の Skill を作る、脅威モデルを回す

対応する演習ステップ: B-5 skill-creator で自分の Skill を作る [8min] ／ B-6 脅威モデリングを回す [7min]
対応する演習md: `exercises/exB5_skill_creator.md` ／ `exercises/exB6_threat_model.md`
VSCode で開くフォルダ: `handson`

演習Bの締めです。ここまでで「AI に毎回説明していたこと」がいくつか溜まっているはずです。それをファイルに固定します。

---

## 参考プロンプト

### B-5 自分の Skill を作る

```
いま kadaiB で見つけたバグの探し方を、次から自動で使える Skill にしたいです。Skill を作ってください。
```

`skill-creator` が発火し、何をする Skill か、いつ使うかを対話で聞いてきます。答えるときは、B-2 でやったことをそのまま言葉にしてください。例です。

```
画面に見えている表示・データベースの中身・CLAUDE.md に書かれた業務ルールの3つを突き合わせて、
食い違っている箇所を探す Skill です。エラーが出ていないのに仕様と違う状態を見つけたいときに使います。
```

`SKILL.md` ができたら開いて、先頭の `description` 欄を読みます。読んだら **`/clear` で文脈をリセットします。** リセット後に、Skill の名前を出さずに聞きます。

```
このプロジェクトの中で、業務ルールと実装が食い違っていそうな箇所を探してください。
```

実行サマリーの「従った設定」欄に、作った Skill の名前が出れば発火しています。

### B-6 脅威モデルを回す

```
@kadaiB のコードベースの脅威モデルを作ってください。
```

3分から5分かかります。`kadaiB/THREAT_MODEL.md` ができたら開いて、守るべきもの・入口・信頼の境目・脅威の並び順を読みます。読んだら、一番上の項目を掘ります。

```
この脅威モデルの一番上の項目について、@kadaiB のコードのどこが該当するか、ファイルと該当箇所を挙げて教えてください。
```

## なぜその形か

B-5 で `/clear` を挟むのは、会話の流れで覚えているだけの状態と、ファイルに書いたから効いている状態を分けるためです。リセットしないと、Skill が効いたのか、さっきの会話を覚えていただけなのかが区別できません。**文脈を消してから同じことができるかどうかが、部品として使えるかどうかの分かれ目です。**

手順の中で Skill の名前を一度も書かないのも同じ理由です。名前で呼び出せるのは当たり前で、確かめたいのは「呼ばなくても選ばれるか」です。選ばれる根拠は `SKILL.md` の先頭にある `description` の文章で、AI はここを読んで、いまの依頼に合うかどうかを判断します。

発火しなかった場合も失敗ではありません。`description` に書いた言葉と、あなたが打った質問の言葉が離れていたということです。Skill を育てる作業は、ほとんどがこの `description` の書き直しです。

B-6 で脅威モデルを最後に置いているのは、B-4 で直した2件との違いを見せるためです。脆弱性は個別の不具合で、1行直せば消えます。脅威は設計と露出の性質で、1行直しても消えません。同じコードベースに対して、片方は Issue になり、もう片方は設計の判断になります。この2つを混ぜると、直しても直しても不安が減らない状態になります。

この Skill は静的解析だけを行い、対象のコードを実行しません。最初の応答で、その趣旨の安全宣言が出ます。読み取りだけに限定しているから、研修環境でそのまま回せます。実行を伴う検査は隔離された環境が必要で、今日は扱いません。

参考リンク: Skill の書き方と `description` の役割は https://docs.claude.com/en/docs/claude-code/skills に公式ドキュメントがあります。

## 比較観点

- 自分が作った `SKILL.md` の `description` と、配布されている `claude-automation-recommender` の `description`。どちらが、どんな依頼で選ばれそうですか。声に出して読み比べると差がわかります。
- `/clear` の前と後で、同じ質問に対する回答の深さがどう変わりましたか。Skill が効いていれば、観点が固定されて回答の形がそろいます。
- B-4 で直した2件は、`THREAT_MODEL.md` に出てきましたか。出てこなかったとしたら、それはなぜだと思いますか。今日直したのは脅威でしたか、脆弱性でしたか。
- `THREAT_MODEL.md` の脅威の並び順と、あなたが「これがいちばん怖い」と思う順。一致しましたか。ずれた場合、AI は何を重く見て、あなたは何を重く見ましたか。
- 演習Aの `REPORT.md` と、この `THREAT_MODEL.md`。前者は作ったものの品質、後者は攻められ方です。同じコードを別の観点で見ると、出てくる指摘が変わります。

## よくある勘違い

- 「Skill は名前を書いて呼び出すもの」。名前で呼ぶこともできますが、本来は `description` を手がかりに自動で選ばれます。名前を書かないと動かない Skill は、`description` の書き方に改善の余地があります。
- 「description は長く詳しく書くほど発火しやすい」。長さではなく、依頼で使われそうな言葉が入っているかどうかです。広すぎる `description` は、関係ない依頼でも発火します。「このコードを整形して」で発火してしまわないかを、時間があれば確かめてください。
- 「Skill を作ったら、次のセッションでも必ず使われる」。使われないこともあります。使われなかった理由を説明できれば、このステップは達成です。
- 「脅威モデルはセキュリティ担当者の仕事で、自分には関係ない」。今日出てくるのは、入口はどこか、誰が何を持ち出せるか、どこから先を信用しているか、という設計の話です。作る側が最初に決めていることばかりです。
- 「`THREAT_MODEL.md` に出た項目は全部直さないといけない」。違います。優先順位を付けて、どこまでやるかを決めるための材料です。
- 「脅威モデルが出たので、この課題は安全になった」。文書ができただけです。対策は何も入っていません。

## 次のアクション

1. `handson/.claude/skills/` の下に、自分で作った Skill のフォルダができていることを確認します。研修後もこのフォルダごと持ち帰れます。
2. `THREAT_MODEL.md` の脅威を1つ選び、次を聞いてください。`この脅威に対して、いまのコードに足りていない対策を3つ挙げてください。優先順位を付けてください。` 優先順位の根拠に納得できたかを `memo.md` に1行残します。
3. S05 の振り返りで使うので、今日作ったファイルの場所を控えておいてください。`kadaiA/REPORT.md` / `kadaiA/COMPARE.md` / `kadaiB/issues/` / `kadaiB/THREAT_MODEL.md` / `.claude/skills/` の5か所です。
4. 時間が余ったら `exercises/challenges/ch05_third_bug.md`（3件目の不具合を自力で探す）へ進みます。手がかりは出しません。

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

- Skill が発火しない: `SKILL.md` の `description` を、自分が打った質問の言葉に寄せて書き直し、もう一度 `/clear` してから試します。
- 対話が始まらずいきなりファイルができた: それでも構いません。できた `SKILL.md` を開いて、意図と合っているかを読んでください。合っていなければ、その場で直してください。
- 脅威モデルの生成が終わらない: 5分を超えたら挙手してください。途中まで生成されたファイルがあれば、それを読むだけでも B-6 の目的は果たせます。
- 出力が英語になった: `日本語で書き直してください。` と送れば整います。
