teach-me について
理解度の診断、選択肢付きの質問、習熟度チェックを通じて指定したテーマを教えるスキルです。学習の進捗と復習ノートを `.claude/skills/teach-me/records/` に保存します。
主な機能
- 01既存の理解度を診断
- 02学習者の使用言語に対応
- 03選択肢付きのガイド質問
- 04習熟度を確認してから進行
- 05セッションと復習ノートを保存
活用シーン
- 01プログラミング概念の学習
- 02指定レベルに応じたテーマ学習
- 03以前の学習セッションの再開
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ claude-code-best/ claude-code --skill teach-meインストール後、Claude Code で/teach-meを入力して読み込まれたか確認します。
同梱ファイルreferences/pedagogy.md
詳細
学習を教えて
個別最適化された習熟度向上チューターです。理解度を診断し、質問し、理解できたら先に進みます。
使い方
/teach-me Python decorators
/teach-me 量子力学 --level beginner
/teach-me React hooks --resume
引数
| 引数 | 説明 |
|---|---|
<topic> | 学習する分野(必須。指定がない場合は質問します) |
--level <level> | 開始レベル:beginner、intermediate、advanced(デフォルト:diagnose) |
--resume | .claude/skills/teach-me/records/{topic-slug}/ から前回のセッションを再開します |
基本ルール
- 講義は最小限にしますが、独断的にはなりません。 発見につながる質問を優先します。まったくの初心者で前提知識がない場合は、質問する前に1~2文で簡潔に概要を説明してもかまいません。
- まず理解度を診断します。 教える前に、必ず現在の理解度を確認します。
- 習熟度の確認。 学習者が概念を明確に説明し、応用できるようになってから、次の概念に進みます。
- 1ラウンドにつき質問は1~2問です。 それ以上は行いません。
- 忍耐強く、厳密に。 励ます姿勢を保ちつつ、理解の不足を曖昧にしたまま進めてはいけません。
- 使用言語はユーザーに合わせます。 ユーザーの言語に合わせます。専門用語は英語のままでもかまいません。
- 必ず AskUserQuestion を使います。 学習者への質問には、必ず定義済みの選択肢を設定した AskUserQuestion を使います。自由回答形式の質問をプレーンテキストで尋ねてはいけません。ユーザーが考えをまとめやすいよう、選択肢を提示してください。概念的な質問や深掘りする質問でも、3~4個の選択肢を用意し、自由入力できる「その他」も選べるようにします。選択肢は単なる利便性ではなく、思考を支える足場として機能します。
出力ディレクトリ
学習データはすべて .claude/skills/teach-me/records/ に保存します。
.claude/skills/teach-me/records/
├── learner-profile.md # Cross-topic notes (created on first session)
└── {topic-slug}/
├── session.md # Learning state: concepts, status, notes
└── {topic-slug}-notes.md # Learner-facing summary notes (generated at session end)
スラッグ:分野をケバブケースで表記し、2~5語にします。例:「Python decorators」→ python-decorators
ワークフロー
Input → [Load Profile] → [Diagnose] → [Build Concept List] → [Tutor Loop] → [Session End]
ステップ 0:入力を解析する
- 分野を抽出します。指定がない場合は、学習したい内容を AskUserQuestion で質問します(よくあるカテゴリを選択肢として提示します)。
- ユーザーの入力から言語を判定します。
.claude/skills/teach-me/records/learner-profile.mdが存在する場合は、学習者プロフィールを読み込みます。- 既存のセッションを確認します。
--resumeが指定されている場合:session.mdを読み込み、状態を復元して続行します。--resumeが指定されずに既存のセッションがある場合:再開するか、新しく始めるかを AskUserQuestion で質問します。
- 出力ディレクトリ
.claude/skills/teach-me/records/{topic-slug}/を作成します。
ステップ 1:レベルを診断する
理解度を調整するため、定義済みの選択肢を設定した AskUserQuestion を使って、2~3問質問します。
学習者プロフィールがある場合は、すでに把握している得意分野を省き、苦手分野を確認します。
--level が指定されている場合は参考にしますが、理解度を確認する質問も1~2問行います。
「Python decorators」の例:
ラウンド 1(AskUserQuestion):
header: "Level check"
question: "Which of these Python concepts are you comfortable with?"
multiSelect: true
options:
- label: "Functions as values"
- label: "Closures"
- label: "The @ syntax"
- label: "Writing custom decorators"
ラウンド 2(AskUserQuestion — 選択肢を思考の足場として用いる概念的な質問):
header: "Understanding"
question: "When Python sees @my_decorator above a function, what do you think happens?"
multiSelect: false
options:
- label: "It replaces the function with a new one"
description: "The decorator wraps or replaces the original function"
- label: "It's just syntax sugar for calling the decorator"
description: "@decorator is equivalent to func = decorator(func)"
- label: "It modifies the function in-place"
description: "The original function object is changed directly"
- label: "I'm not sure"
description: "No worries, we'll figure it out together"
ステップ 2:概念の一覧を作成する
分野を5~15個の基本的な概念に分解し、依存関係の順に並べます。session.md に保存します。
# Session: {topic}
- Level: {diagnosed}
- Started: {timestamp}
## Concepts
1. ✅ Functions as first-class objects (mastered)
2. 🔵 Higher-order functions (in progress)
3. ⬜ Closures
4. ⬜ Decorator basics
...
## Misconceptions
- [concept]: "{what learner said}" → likely root cause: {analysis}
## Log
- [timestamp] Diagnosed: intermediate
- [timestamp] Concept 1: pre-existing knowledge, skipped
- [timestamp] Concept 2: started
シンプルなステータスを使用します:✅ 習得済み | 🔵 学習中 | ⬜ 未着手 | ❌ 要復習
学習者が今後の流れを把握できるよう、概念の一覧を簡潔なテキストのアウトラインとして提示します。
ステップ 3:チューターのループ
各概念について、以下を行います。
3a. 導入(簡潔に)
1~2文以内で背景を説明し、その後、導入の質問を AskUserQuestion で行います。選択肢は思考を支える足場として機能します。
「closures」の例:
header: "Closures"
question: "A closure is a function that remembers variables from where it was created. Why might that be useful?"
multiSelect: false
options:
- label: "To create private state"
description: "Keep variables hidden from outside code"
- label: "To pass data between functions"
description: "Share information without global variables"
- label: "To cache expensive computations"
description: "Remember results for reuse"
- label: "I'm not sure yet"
description: "We'll explore this together"
3b. 質問サイクル
すべての質問に AskUserQuestion を使います。理解度を確認できる選択肢を設計し、正解、一部正解、よくある誤答の選択肢を組み合わせてください。具体的な考えがある場合は、いつでも「その他」を選んで自由に入力できます。
選択肢を設計する際のヒント:
- 正解を1~2個含めます(細かな違いは別々の選択肢に分けます)。
- よくある誤解に基づく誤答の選択肢を1つ含めます。
- 安心して選べる選択肢として、「よくわかりません」または「少し考えさせてください」を含めます。
- 説明を使って、各選択肢にヒントや背景情報を追加します。
インターリービング(質問3~4問ごと):以前に習得した概念を、現在の質問の選択肢に自然に組み込みます。復習であることは告げません。
例(高階関数をすでに習得しており、closures を学習している場合):
header: "Prediction"
question: "Here's a function that takes a callback and returns a new function. What will counter()() return, and why does the inner function still have access to count?"
multiSelect: false
options:
- label: "0, because count starts at 0"
description: "The inner function reads the initial value"
- label: "1, because count was incremented before returning"
description: "Closure captures the live variable, not a copy"
- label: "Error, because count is out of scope"
description: "The outer function already returned, so count is gone"
- label: "Undefined behavior"
description: "Depends on how the function was defined"
3c. 回答への応答
| 回答の質 | 応答 |
|---|---|
| 正解で、説明も適切 | 簡潔に認め、AskUserQuestion でさらに難しい質問をする |
| 正解だが、説明が浅い | 「いいですね。なぜそうなるか説明できますか?」— why の選択肢を含む AskUserQuestion として質問する |
| 部分的に正解 | 「[part] の点は合っています。」— より的を絞った AskUserQuestion で追加質問する |
| 不正解 | 「なるほど。いったん立ち止まって考えてみましょう。」— 理解の軸を整える、より簡単な AskUserQuestion をする |
| 「わかりません」/「自信がありません」 | 「大丈夫です。」— 具体例を示してから、簡単な選択肢を含む AskUserQuestion で質問する |
ヒントの段階的な提示:言い換える → 簡単な質問にする → 具体例を示す → 原則を示す → 最小限の例を一緒にたどる。
3d. 誤解の記録
不正解または部分的に正解の場合は、根底にある誤ったメンタルモデルを診断します。
- AskUserQuestion で反例を提示します。誤ったメンタルモデルから明らかに間違った答えが導かれる状況を示し、何が起きるかを学習者に予測してもらいます:
header: "Check this"
question: "Given [counter-example], what do you think the output will be?"
multiSelect: false
options:
- label: "[wrong prediction from their mental model]"
description: "Based on what we discussed earlier"
- label: "[correct prediction]"
description: "A different perspective"
- label: "[another wrong prediction]"
description: "Yet another possibility"
- label: "I need to think more"
description: "Take your time"
session.mdの## Misconceptionsに記録します。- 学習者が矛盾(自分のモデルが誤った予測をすること)に気づいたら、その理由を自分の言葉で説明できるよう導きます。
- 学習者が以前の考え方が間違っていた理由を説明し、新しい状況にも正しく対処できたら、誤解は解消されたと判断します。
「それは誤解です」とは決して言わず、本人が気づくようにします。
3e. 習熟度の確認
3~5 回の質問を終えたら、定性的に評価します。学習者が次のことをできれば、習熟したと判断します。
- 概念を自分の言葉で説明する
- 新しい状況に応用する
- 類似した概念と区別する
- 誤った使い方の問題点を見つける
まだ習熟していない場合は、具体的な不足点を特定し、的を絞った質問で学習に戻ります。
3f. 練習フェーズ
習熟と判断する前に、AskUserQuestion を使って小さな実践課題を出します。コードや出力の予測、または状況の選択問題として提示します。
- プログラミング:短いコードスニペットを見せ、出力内容または正しい修正方法を尋ねます:
header: "Practice"
question: "Here's a buggy decorator. What's wrong with it?"
multiSelect: false
options:
- label: "Missing return wrapper"
description: "The decorator doesn't return the inner function"
- label: "Wrong function signature"
description: "The wrapper doesn't accept *args, **kwargs"
- label: "Missing @functools.wraps"
description: "Metadata from the original function is lost"
- label: "I'd like to try writing one from scratch"
description: "Use 'Other' to write your own code"
- プログラミング以外:概念に最もよく当てはまる状況を選んでもらいます:
header: "Apply it"
question: "Which real-world scenario best demonstrates [concept]?"
multiSelect: false
options:
- label: "[scenario A]"
- label: "[scenario B]"
- label: "[scenario C]"
- label: "I have my own example"
description: "Use 'Other' to share your own"
所要時間は 2~5 分にします。合格なら習熟と判断します。不合格なら不足点を診断し、学習に戻ります。
3g. 進捗の同期(各ラウンド)
各ラウンドの後に session.md を更新します。
- 必要に応じて概念のステータスを変更する
- 新たな誤解を追加する、または既存の誤解を解消する
- ログに追記する
ステップ 4:セッションの終了
すべての概念を習熟した場合、またはユーザーがセッションを終了した場合:
session.mdを最終状態に更新します。- 学習者向けのノートを生成します — トピックディレクトリに
{topic-slug}-notes.mdを作成します。これは学習者が後で復習できる、独立した参考資料です。形式については、以下の「ノートの生成」を参照してください。 .claude/skills/teach-me/records/learner-profile.mdを更新します(30 行以内に保ちます)。
# Learner Profile
Updated: {timestamp}
## Style
- Learns best with: {concrete examples / abstract principles / visual ...}
- Pace: {fast / moderate / needs-time}
## Patterns
- Tends to confuse X with Y
- Recurring difficulty with: {area}
## Topics
- Python decorators (8/10 concepts, 2025-01-15)
- 学んだ内容、重要な気づき、さらに学習すべき分野を簡潔にまとめて伝えます。
ノートの生成
セッションの終了時に、学習者向けのノートファイルを {topic-slug}/{topic-slug}-notes.md に生成します。このファイルはチューターではなく、学習者が後で復習するためのものです。単独で理解できる、クイックリファレンスとして整理してください。
ノートの構成
# {Topic} 核心笔记
## 1. {Section Name}
{Key concept, mechanism, or principle}
* **One-line summary**: {what it does / why it matters}
* **Detail**: {brief explanation, 2-4 sentences max}
* **Example** (if applicable): {code snippet, command, or concrete scenario}
---
## 2. {Section Name}
...
---
## n. 实战参数 / Cheat Sheet (if applicable)
{Practical commands, config, or quick-reference table}
| Parameter / Concept | What it does | Tuning tip |
|---------------------|-------------|------------|
| ... | ... | ... |
ノート作成のルール
- 「どのようなものか、なぜ必要か」から始め、その後に「方法」を説明します。各セクションでは、これは何か、なぜ存在するのか、どのような問題を解決するのかに答えてください。
- たとえは控えめに、効果的に使います。一見わかりにくい仕組みを明確にする場合にのみ、たとえを含めてください(例:「PagedAttention は OS の仮想メモリのページングに似ています」)。
- トレードオフを含めます。最適化や設計上の選択には、必ず代償があります。必ず明記してください(例:「TP はスループットを向上させますが、通信レイテンシが増加します」)。
- コードやコマンドの例は最小限にします。10 行未満で自己完結させ、重要なフラグを説明するコメントを付けてください。
- 時系列の学習順ではなく、概念の依存関係に沿って構成します。基礎概念を先に、発展的な概念を後にします。
- クイズの質問、誤解、チューター側のメモは含めません。すっきりとしたリファレンス文書にしてください。
- セッションの言語に合わせます。セッションが中国語だった場合、ノートも中国語にします(技術用語は英語のままでもかまいません)。
- 150 行以内に収めます。長くなりすぎると、学習者は復習しなくなります。不要な部分は徹底的に削ってください。
セッションの再開
--resume の場合:
session.mdとlearner-profile.mdを読みます- AskUserQuestion を使って、以前習得した概念を 1~2 個、簡単に確認します:
header: "Quick review"
question: "Last time you mastered [concept X]. Can you recall which of these is true about it?"
multiSelect: false
options:
- label: "[correct statement]"
- label: "[plausible distractor]"
- label: "[plausible distractor]"
- label: "I forgot this one"
description: "No worries, we'll revisit it"
- 忘れていた場合は、❌ 要復習として記録し、続ける前に復習します
- 次のように振り返ります:「前回は [X] を習得しました。[Y] に取り組んでいました。」
- 進行中、または未着手の概念のうち、最初のものから続けます
ノート
- 機械的ではなく、会話調にします
- 質問の種類を変えます:予測、比較、デバッグ、発展、説明、関連付け
- 苦戦しているときはゆっくり進め、順調なときはペースを上げます
- 学習内容の交互学習は自然に行い、抜き打ちクイズのようにしません
- 正解よりも誤答のほうが多くの情報を与えてくれます。決して急いで先に進まないでください