personal-visual-explainers/.claude/skills/creating-skills/references/exemplar.md
2026-03-20 15:51:26 +09:00

322 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# スキル模範例とチェックリスト
## 目次
- description の書き方
- 汎用スキル例
- プロジェクト固有スキル例
- コード付きスキル例
- スクリプトの品質
- 評価と反復プロセス
- チェックリスト
---
## description の書き方
### 三人称ルール
descriptionはシステムプロンプトに注入される。視点の不一致はスキル発見の問題を引き起こす。
```yaml
# 良い: 三人称
description: スキルを作成・更新・改善するスキル。「スキルを作って」「このスキルを改善して」と依頼された際に使用する。
# 悪い: 一人称
description: 私がスキルの作成を手伝います。
# 悪い: 二人称
description: あなたがスキルを作成する時に使えます。
```
### トリガーフレーズ
Claudeが100+のスキルから選択する判断材料。具体的なキーワードを含める。
```yaml
# 良い: トリガーフレーズ3つ以上 + 具体的なキーワード
description: |
Cursor Hooksを作成・設定するスキル。
「フックを作って」「hookを追加して」「afterFileEditを設定して」と依頼された際に使用する。
# 悪い: トリガーがない
description: Hooksを処理するスキル。
# 悪い: 抽象的すぎる
description: 設定関連の作業を支援する。
```
### 命名規則
gerund形式動詞+ingが活動を明確に伝える。
```
良い: processing-pdfs, analyzing-data, managing-hooks
許容: pdf-processing, data-analysis名詞句
避ける: helper, utils, tools曖昧
```
---
## 汎用スキル
プロジェクト固有の実装に依存しない。公式ドキュメント・仕様に基づく。
### 例: hook-creator
```markdown
---
name: hook-creator
description: Cursor Hooksを作成・設定するスキル。「フックを作って」「hookを追加して」「afterFileEditを設定して」と依頼された際に使用する。
---
# Hook Creator
Cursor Hooksの作成・設定を支援する。
## 概要
Hooksはエージェントループの特定タイミングでカスタムスクリプトを実行する仕組み。
## クイックスタート
[最小限の例]
## フックイベント一覧
| イベント | タイミング | 出力 |
|---------|-----------|------|
| afterFileEdit | ファイル編集後 | なし |
| stop | Agent停止時 | followup_message |
**詳細スキーマ** → [references/events.md](references/events.md)
```
**ポイント**:
- 公式ドキュメントの内容のみ
- プロジェクト固有の実装パターンなし
---
## プロジェクト固有スキル
特定プロジェクトのワークフロー・データ構造に依存。依存先を明示する。
### 構造例
```markdown
---
name: project-specific-skill
description: プロジェクト固有の作業を行うスキル。「〇〇を作って」「〇〇を更新して」と依頼された際に使用する。
---
# Project Specific Skill
## 依存
- `path/to/` 配下のディレクトリ構造
- `config.json` スキーマreferences/schema.md
- 品質チェックフロー(.cursor/hooks/validate.sh
## ワークフロー
[プロジェクト固有のワークフロー]
## 出力形式
[プロジェクト固有のスキーマ]
```
**ポイント**:
- 依存先を「依存」セクションで明示
- 変更時の影響範囲が把握できる
---
## コード付きスキル
スクリプトで決定的処理を実行し、SKILL.md は仕組み・実行方法・出力を記載する。
### 例: hooks-toggle
```markdown
---
name: hooks-toggle
description: Cursorフックを一時的に無効化/有効化するスキル。「フックを止めて」「フックを無効にして」「フックを有効にして」「hooks off」「hooks on」と依頼された際に使用する。
---
# Hooks Toggle
Cursor hooks と SDK hooks を同時に無効化/有効化する。
## 仕組み
`hooks-disabled` ファイルの有無でフックが動作を判定。
- ファイルあり → フック無効
- ファイルなし → フック有効
## 実行
bash .claude/skills/hooks-toggle/scripts/toggle-hooks.sh
## 出力
| 状態 | 出力 |
|------|------|
| 有効→無効 | `Hooks disabled (Cursor + SDK)` |
| 無効→有効 | `Hooks enabled (Cursor + SDK)` |
## 依存
- `.cursor/hooks/on-quiz-edit.ts` - スキップ判定ロジック
- `drill/tools/quiz-viewer/server/hooks/index.ts` - スキップ判定ロジック
```
**ポイント**:
- `scripts/toggle-hooks.sh` で状態管理(ファイル作成/削除)を確実に実行
- SKILL.md は**仕組み・実行方法・出力**を記載(スクリプトの実装詳細は書かない)
- 依存セクションでフック判定ロジックの所在を明示
---
## スクリプトの品質
### Solve, don't punt
スクリプト内でエラーを処理する。Claudeに丸投げしない。
```python
# 良い: エラーを自力で処理
def process_file(path):
try:
with open(path) as f:
return f.read()
except FileNotFoundError:
print(f"File {path} not found, creating default")
with open(path, "w") as f:
f.write("")
return ""
# 悪い: Claudeに丸投げ
def process_file(path):
return open(path).read()
```
### マジックナンバー禁止
設定値には根拠を示す。
```python
# 良い: 根拠がある
REQUEST_TIMEOUT = 30 # HTTPリクエストは通常30秒以内に完了
MAX_RETRIES = 3 # 大半の間欠的エラーは2回目で解消
# 悪い: 根拠不明
TIMEOUT = 47 # なぜ47?
RETRIES = 5 # なぜ5?
```
### 検証可能な中間出力
複雑なタスクでは「計画→検証→実行」パターンでエラーを早期発見する。
```
analyze → changes.json作成 → validate_changes.py → 問題なければ実行
```
バリデーションスクリプトのエラーメッセージは具体的に:
- 良い: `Field 'signature_date' not found. Available: customer_name, order_total`
- 悪い: `Validation failed`
---
## 評価と反復プロセス
### 評価駆動開発
スキルを書く前に、まずClaudeの現状の能力を測定する。
1. **ベースライン計測**: スキルなしでClaudeにタスクを実行させる
2. **Gap特定**: 失敗箇所・不足情報を文書化
3. **評価シナリオ作成**: Gapをテストする3つ以上のシナリオを用意
4. **最小限の記述**: Gapを埋める最小限のスキル内容を書く
5. **反復**: 評価を実行し、ベースラインと比較し、改善
```json
{
"skills": ["pdf-processing"],
"query": "このPDFからテキストを抽出してoutput.txtに保存して",
"files": ["test-files/document.pdf"],
"expected_behavior": [
"PDFライブラリを使用してファイルを正常に読み取る",
"全ページからテキストを漏れなく抽出する",
"output.txtに読みやすい形式で保存する"
]
}
```
### Claude A/B パターン
- **Claude A**(設計者): スキルの内容を設計・改善する会話
- **Claude B**(使用者): スキルを使って実際のタスクを実行する会話
Claude Bの挙動を観察してClaude Aに報告し、改善する:
| 観察 | 対応 |
|------|------|
| Claudeがバンドルファイルを一度も読まない | 不要か、SKILL.mdでの参照が不十分 |
| 同じファイルを繰り返し読む | そのコンテンツをSKILL.mdに昇格 |
| 参照リンクをたどらない | リンクをより目立たせる |
| 予想外の順序でファイルを読む | 構造が直感的でない可能性 |
### チーム展開時
- スキルをチームメンバーに共有し、使用状況を観察
- 「期待通りに発動するか?」「指示は明確か?」「何が足りないか?」を確認
---
## チェックリスト
### 全スキル共通
- [ ] descriptionに「何をするか」と「いつ使うか」の両方がある
- [ ] descriptionにトリガーフレーズ3つ以上
- [ ] descriptionが三人称で書かれている
- [ ] SKILL.md 500行以内
- [ ] 冗長な説明なし
- [ ] 一貫した用語を使用
- [ ] 時間依存情報なし
- [ ] 具体的な例がある
- [ ] ワークフローに明確なステップがある
- [ ] **SSoT 監査を通過済み**[ssot-audit.md](ssot-audit.md) の全ステップを実行し、違反なしを確認)
- [ ] **ハードコード・不整合レビューを通過済み**[ssot-audit.md](ssot-audit.md) のレビュー全項目を確認)
- [ ] 参照は1階層まで深いネスト禁止
- [ ] 100行超の参照ファイルに目次がある
### 汎用スキル
- [ ] 公式ドキュメント・仕様に基づいている
- [ ] プロジェクト固有のパターン・実装がない
- [ ] 他プロジェクトでも使える
### プロジェクト固有スキル
- [ ] 「依存」セクションがある
- [ ] 依存するファイル・ワークフローが明示されている
- [ ] 依存先が変更されたときの影響範囲が分かる
### コード付きスキル
- [ ] 実行方法が SKILL.md に記載されている
- [ ] 決定的処理がスクリプトで実装されている
- [ ] スクリプトがエラーを自力で処理する
- [ ] 設定値に根拠がある(マジックナンバーなし)
- [ ] 必要なパッケージが明記されている
### テスト
- [ ] 実際のタスクでテスト済み
- [ ] 3つ以上の評価シナリオがある
- [ ] 使用予定の全モデルでテスト済みHaiku/Sonnet/Opus